{"version":3,"file":"js/51-44112e60c6025382c07e.js","mappings":"sKAEA,SAASA,IAKP,MAAO,CAAEC,MAJT,SAAeC,EAAWC,GACxBC,EAAAA,EAAKH,MAAMC,EAAWC,EACxB,EAGF,CAEAE,OAAOC,UAAYN,IAEnB,QAAeA,G,kDCPf,MAAMO,E,SAAYC,EAAQC,IAAI,cAG9BC,EAAAA,GAAOC,UAAU,CACfC,QAAS,IACTC,QAAS,CACPC,cAAeP,EAAa,UAASA,IAAc,GACnD,eAAgB,sBAKpB,QAAeG,EAAM,E,6pCCZd,MAAMA,GAASK,EAAAA,EAAAA,KAAaC,EAAAA,EAAAA,OAMtBC,EAAwEC,IACzEA,GAASR,QAAUA,GAAQD,IAAGU,EAAAA,EAAA,GAC/BD,GAAO,IACVE,IAAK,yCAQAC,EAA0EH,IAC3EA,GAASR,QAAUA,GAAQY,KAAIH,EAAAA,EAAA,GAChCD,GAAO,IACVE,IAAK,yCAQAG,EAAqEL,IACtEA,GAASR,QAAUA,GAAQD,IAAGU,EAAAA,EAAA,GAC/BD,GAAO,IACVE,IAAK,qCAQAI,EAA4EN,IAC7EA,GAASR,QAAUA,GAAQe,MAAKN,EAAAA,EAAA,GACjCD,GAAO,IACVE,IAAK,iDAQAM,EAA4ER,IAC7EA,GAASR,QAAUA,GAAQiB,OAAMR,EAAAA,EAAA,GAClCD,GAAO,IACVE,IAAK,iDAQAQ,EAAoEV,IACrEA,GAASR,QAAUA,GAAQD,IAAGU,EAAAA,EAAA,GAC/BD,GAAO,IACVE,IAAK,0CAQAS,EAAwEX,IACzEA,GAASR,QAAUA,GAAQY,KAAIH,EAAAA,EAAAA,EAAA,GAChCD,GACAY,EAAAA,IAAsB,IACzBjB,QAAOM,EAAA,CACH,eAAgB,MACbD,GAASL,SAEhBO,IAAK,4CAQAW,EAAqEb,IACtEA,GAASR,QAAUA,GAAQY,KAAIH,EAAAA,EAAA,GAChCD,GAAO,IACVE,IAAK,+CAQAY,EAAsEd,IACvEA,GAASR,QAAUA,GAAQD,IAAGU,EAAAA,EAAA,GAC/BD,GAAO,IACVE,IAAK,sCAQAa,EAA0Df,IAC3DA,GAASR,QAAUA,GAAQD,IAAGU,EAAAA,EAAA,GAC/BD,GAAO,IACVE,IAAK,+BAoDAc,EAAoEhB,IACrEA,GAASR,QAAUA,GAAQD,IAAGU,EAAAA,EAAA,GAC/BD,GAAO,IACVE,IAAK,oCAqFAe,EAAiEjB,IAClEA,GAASR,QAAUA,GAAQD,IAAGU,EAAAA,EAAA,GAC/BD,GAAO,IACVE,IAAK,iCA+DAgB,EAA0DlB,IAC3DA,GAASR,QAAUA,GAAQD,IAAGU,EAAAA,EAAA,GAC/BD,GAAO,IACVE,IAAK,yBAQAiB,EAAuDnB,IACxDA,GAASR,QAAUA,GAAQD,IAAGU,EAAAA,EAAA,GAC/BD,GAAO,IACVE,IAAK,qB,wmCC3Ub,MAmMA,EAnMqBkB,EAAGC,SAAQC,WAAUC,eACxC/B,EAAAA,EAEA,MAA4CgC,EAAAC,GAAZC,EAAAA,EAAAA,UAAS,IAAG,GAArCC,EAAQH,EAAA,GAAEI,EAAWJ,EAAA,GACgCK,EAAAJ,GAAZC,EAAAA,EAAAA,UAAS,IAAG,GAArDI,EAAgBD,EAAA,GAAEE,EAAmBF,EAAA,GACsBG,EAAAP,GAAtBC,EAAAA,EAAAA,UAAmB,IAAG,GAA3DO,EAAcD,EAAA,GAAEE,EAAiBF,EAAA,GACoBG,EAAAV,GAAdC,EAAAA,EAAAA,WAAS,GAAK,GAArDU,EAAeD,EAAA,GAAEE,EAAkBF,EAAA,GAC+BG,EAAAb,GAAfC,EAAAA,EAAAA,WAAS,GAAM,GAAlEa,EAAqBD,EAAA,GAAEE,EAAwBF,EAAA,IAEtDG,EAAAA,EAAAA,YAAU,KACcC,WACpB,MAAMC,QAAazB,EAAAA,EAAAA,IAAiB,CAClC0B,MAAO,CAAEC,QAASxB,EAAQyB,UAAWxB,EAAUyB,IAAK,OAGtDnB,EAAYe,EAAK1D,KAAKA,KAAK,EAE7B+D,EAAe,GACd,CAAC3B,KAEJoB,EAAAA,EAAAA,YAAU,KACR,MAAMQ,EAAMb,EACRT,EAASuB,QAAQC,GAA8B,WAAlBA,EAAQC,QACrCzB,EACJI,EAAoBkB,EAAI,GACvB,CAACtB,EAAUS,KAEdK,EAAAA,EAAAA,YAAU,KACRY,GAAwB,GACvB,CAACvB,EAAkBS,IAEtB,MAAMe,EAAcA,CAACC,EAA0BC,EAAS,KAC/CC,OAAOC,KAAKH,GAAKI,QAAiB,CAACD,EAAME,KAC9C,MAAMC,EAAWL,EAAU,GAAEA,KAAUI,IAAQA,EAQ/C,OANIL,EAAIK,IAA4B,kBAAbL,EAAIK,KAAsBE,MAAMC,QAAQR,EAAIK,IACjEF,EAAKM,QAAQV,EAAYC,EAAIK,GAAMC,IAEnCH,EAAKM,KAAKH,GAGLH,CAAI,GACV,IAGCL,EAAyBA,KAC7B,MAAMY,EAAU,IAAIC,IAWpB,GARApC,EAAiBqC,SAAShB,IACxB,GAAIA,EAAQiB,eAAgB,CACbd,EAAYH,EAAQiB,gBAC5BD,SAASP,GAAQK,EAAQI,IAAIT,IACpC,KAIErB,EAAuB,CACzB,MAAM+B,EAAeR,MAAMS,KAAKN,GAASf,QAAQU,IAC/C,IAAK,IAAIY,EAAI,EAAGA,EAAI1C,EAAiB2C,OAAQD,IAAK,CAChD,MAAME,EAAeC,EAAe7C,EAAiB0C,GAAGJ,gBAAkB,CAAC,EAAGR,GACxEgB,EAAuB,IAANJ,EAAUjD,EAAWO,EAAiB0C,EAAI,IAAIJ,eAC/DS,EAAgBF,EAAeC,GAAkB,CAAC,EAAGhB,GAG3D,KAAIxB,GAAyC,WAAtBT,EAAS6C,GAAGpB,UAI9ByB,GAAiBH,IAAiBI,KAAKC,UAAUL,KAAkBI,KAAKC,UAAUF,IACrF,OAAO,CAEX,CACA,OAAO,CAAK,IAEd3C,EAAkBoC,EACpB,MAEEpC,EAAkB4B,MAAMS,KAAKN,GAC/B,EAGIU,EAAiBA,CAACpB,EAA0ByB,IACzCA,EACJC,MAAM,KACNtB,QAAO,CAACuB,EAAKtB,IAASsB,QAAoBC,IAAbD,EAAItB,GAAqBsB,EAAItB,QAAOuB,GAAY5B,GA+ElF,OACE6B,EAAAA,cAAA,OAAKC,UAAU,mBACbD,EAAAA,cAAA,OAAKC,UAAU,WACbD,EAAAA,cAAA,aACEA,EAAAA,cAAA,SACEE,KAAK,WACLC,QAASnD,EACToD,SAAWC,GAAMpD,EAAmBoD,EAAEC,OAAOH,WAC7C,qBAGJH,EAAAA,cAAA,SAAOO,MAAO,CAACC,WAAY,SACzBR,EAAAA,cAAA,SACEE,KAAK,WACLC,QAAShD,EACTiD,SAAWC,GAAMjD,EAAyBiD,EAAEC,OAAOH,WACnD,4BAINH,EAAAA,cAAA,SAAOC,UAAU,4BACfD,EAAAA,cAAA,aA/FFA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,WACJA,EAAAA,cAAA,UAAI,SACJA,EAAAA,cAAA,UAAI,UACJA,EAAAA,cAAA,UAAI,cACHnD,EAAe4D,KAAKjC,GACnBwB,EAAAA,cAAA,MAAIxB,IAAKA,GAAMA,OA0FjBwB,EAAAA,cAAA,aAlFFA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,KACJA,EAAAA,cAAA,UAAI,KACJA,EAAAA,cAAA,UAAI,KACJA,EAAAA,cAAA,UAAI,iBACHnD,EAAe4D,KAAKjC,IACnB,MAAMc,EAAeC,EAAepD,GAAY,CAAC,EAAGqC,GAEpD,OACEwB,EAAAA,cAAA,MAAIxB,IAAKA,GACNc,EACE,KAQmB,IAA5B5C,EAAiB2C,OAEjBW,EAAAA,cAAA,UACEA,EAAAA,cAAA,MAAIU,QAAS,EAAGH,MAAO,CAAEI,UAAW,WAAY,yBAO/CjE,EAAiB+D,KAAI,CAAC1C,EAAS6C,KACpC,MAAMC,EAAwB,IAAVD,EAAc,CAAE5B,eAAgB7C,GAAaO,EAAiBkE,EAAQ,GAE1F,OACEZ,EAAAA,cAAA,MAAIxB,IAAKT,EAAQ+C,IACfd,EAAAA,cAAA,UAAKjC,EAAQ+C,IACbd,EAAAA,cAAA,UAAKjC,EAAQC,OACbgC,EAAAA,cAAA,UAAKjC,EAAQgD,WAAa,WAC1Bf,EAAAA,cAAA,UAAK,IAAIgB,KAAKjD,EAAQkD,YAAYC,kBACjCrE,EAAe4D,KAAKjC,IACnB,MAAMc,EAAeC,EAAexB,EAAQiB,gBAAkB,CAAC,EAAGR,GAC5DiB,EAAgBF,EAAesB,GAAa7B,gBAAkB,CAAC,EAAGR,GAElE2C,GAAU1B,GAAiBH,IAAiBI,KAAKC,UAAUF,KAAmBC,KAAKC,UAAUL,GAEnG,OACEU,EAAAA,cAAA,MACExB,IAAKA,EACL+B,MAAO,CACLa,gBAAiBD,EAAS,eAAYpB,IAGvCT,EACE,IAGN,MAgCH,C,6DC9LK,SAAS+B,EAASC,GAC/B,MAAAC,EAMID,EALFE,SAAAA,OAAQ,IAAAD,GAAQA,EAAAE,EAKdH,EAJFI,QAAAA,OAAO,IAAAD,GAAQA,EACfE,EAGEL,EAHFK,SACAC,EAEEN,EAFFM,QACA3B,EACEqB,EADFrB,UAGF,OACED,EAAAA,cAAA,UACEC,UAAW4B,EAAW,cAAe,CAAEH,WAAWzB,GAClD2B,QAASA,EACTJ,SAAUA,GAETG,EAGP,C,klCCxBA,MAAMG,UAAiCC,EAAAA,UACrCC,WAAAA,CAAYV,GACVW,MAAMX,GAAO,KAiBfY,cAAiBlE,IACVmE,KAAKb,MAAMc,SAEE,WAAdpE,EAAMQ,IACR2D,KAAKb,MAAMe,UACY,UAAdrE,EAAMQ,KACf2D,KAAKG,aACP,EACA,KAEFC,qBAAwBvE,IACtB,MAAAwE,EAA0BxE,EAAMsC,OAAxBmC,EAAID,EAAJC,KAAMtC,EAAOqC,EAAPrC,QACdgC,KAAKO,SAAS,CAAE,CAACD,GAAOtC,GAAU,EAClC,KAEFmC,WAAa,KACX,MAAAK,EAAkER,KAAKS,MAA/DC,EAAkBF,EAAlBE,mBAAoBC,EAAeH,EAAfG,gBAAiBC,EAAgBJ,EAAhBI,iBAC7C,GAAIF,GAAsBC,GAAmBC,EAAkB,CAC7D,MAAMC,EACJ,0JACEjJ,OAAOkJ,QAAQD,IACjBb,KAAKe,eAET,MACEf,KAAKe,eACP,EACA,KAEFA,cAAgB,KACd,MAAQpI,EAAQqH,KAAKb,MAAbxG,IACRqI,EAAiFhB,KAAKS,MAA9EQ,EAAaD,EAAbC,cAAeP,EAAkBM,EAAlBN,mBAAoBC,EAAeK,EAAfL,gBAAiBC,EAAgBI,EAAhBJ,iBAStDM,EAAc,GAAEvI,KAPP,IAAIwI,gBAAgB,CACjCC,eAAgBH,EAChBI,oBAAqBX,EACrBY,iBAAkBX,EAClBY,kBAAmBX,IAGeY,aACpC5J,OAAO6J,SAASC,KAAOR,CAAU,EACjC,KAEFS,iBAAmB,KACjB,MAC0EC,EAAA1H,EADnD8F,KAAKb,MAApB0C,WACwBnE,MAAM,OAAOY,KAAKwD,GAAS,IAAIjD,KAAKiD,KAAM,GAA9DF,EAAA,GAEZ,OAFiBA,EAAA,IACL,IAAI/C,IACC,EA/DjBmB,KAAKS,MAAQ,CACXQ,eAAe,EACfP,oBAAoB,EACpBC,iBAAiB,EACjBC,kBAAkB,EAEtB,CAEAmB,iBAAAA,GACEC,SAASC,iBAAiB,UAAWjC,KAAKD,cAC5C,CAEAmC,oBAAAA,GACEF,SAASG,oBAAoB,UAAWnC,KAAKD,cAC/C,CAoDAqC,MAAAA,GACE,MAAAC,EAA4BrC,KAAKb,MAAzBc,EAAMoC,EAANpC,OAAQC,EAAOmC,EAAPnC,QAChBoC,EAAiFtC,KAAKS,MAA9EQ,EAAaqB,EAAbrB,cAAeP,EAAkB4B,EAAlB5B,mBAAoBC,EAAe2B,EAAf3B,gBAAiBC,EAAgB0B,EAAhB1B,iBACtD2B,EAAiBvC,KAAKb,MAAMqD,YAAYC,QAAQ,WAAY,IAElE,IAAKxC,EAAQ,OAAO,KAEpB,MAAMyC,EAAwB1C,KAAK2B,mBAEnC,OACE9D,EAAAA,cAAA,OAAKC,UAAU,iBACbD,EAAAA,cAAA,OAAKC,UAAU,mBACbD,EAAAA,cAAA,UAAQC,UAAU,eAAe2B,QAASS,EAAS,aAAW,eAAc,QAG5ErC,EAAAA,cAAA,OAAKC,UAAU,cACbD,EAAAA,cAAA,OAAKO,MAAO,CAACuE,SAAS,OAAQC,WAAY,MAAM,wBAGhD/E,EAAAA,cAAA,OAAKO,MAAO,CAAEyE,QAAS,aAAc,yEAEnChF,EAAAA,cAAA,WAAM,oEAGRA,EAAAA,cAAA,YACG6E,GACC7E,EAAAA,cAAA,SAAOC,UAAU,kBACfD,EAAAA,cAAA,SACEE,KAAK,WACLuC,KAAK,gBACLtC,QAASiD,EACThD,SAAU+B,KAAKI,qBACf,aAAW,gCAEbvC,EAAAA,cAAA,QAAMO,MAAO,CAAEwE,WAAY,SAAUE,aAAc,QAAS,wBAC5DjF,EAAAA,cAAA,QAAMO,MAAO,CAAEwE,WAAY,SAAW5C,KAAKb,MAAM0C,aAGrDhE,EAAAA,cAAA,SAAOC,UAAU,kBACfD,EAAAA,cAAA,SACEE,KAAK,WACLuC,KAAK,qBACLtC,QAAS0C,EACTzC,SAAU+B,KAAKI,qBACf,aAAW,wBAEbvC,EAAAA,cAAA,QAAMO,MAAO,CAAEwE,WAAY,SAAUE,aAAc,QAAS,gBAC5DjF,EAAAA,cAAA,QAAMO,MAAO,CAAEwE,WAAY,SAAWL,IAExC1E,EAAAA,cAAA,SAAOC,UAAU,kBACfD,EAAAA,cAAA,SACEE,KAAK,WACLuC,KAAK,kBACLtC,QAAS2C,EACT1C,SAAU+B,KAAKI,qBACf,aAAW,qBAEbvC,EAAAA,cAAA,QAAMO,MAAO,CAAEwE,WAAY,SAAUE,aAAc,QAAS,aAC5DjF,EAAAA,cAAA,QAAMO,MAAO,CAAEwE,WAAY,SAAW5C,KAAKb,MAAM4D,UAEnDlF,EAAAA,cAAA,SAAOC,UAAU,kBACfD,EAAAA,cAAA,SACEE,KAAK,WACLuC,KAAK,mBACLtC,QAAS4C,EACT3C,SAAU+B,KAAKI,qBACf,aAAW,sBAEbvC,EAAAA,cAAA,QAAMO,MAAO,CAAEwE,WAAY,SAAUE,aAAc,QAAS,cAC5DjF,EAAAA,cAAA,QAAMO,MAAO,CAAEwE,WAAY,SAAW5C,KAAKb,MAAM6D,kBAIvDnF,EAAAA,cAAA,UACEC,UAAU,YACVM,MAAO,CAAE6E,OAAQ,aACjBxD,QAASO,KAAKG,WACd,aAAW,6BACZ,kBAGDtC,EAAAA,cAAA,UACEC,UAAU,wCACVM,MAAO,CAAE8E,MAAO,QAASD,OAAQ,YAAaE,cAAe,aAC7D1D,QAASS,EACT,aAAW,0BACZ,WAMT,EAGF,S,kHC7JA,MAAMkD,UAAwCvF,EAAAA,UAC5CgC,WAAAA,CAAYV,GACVW,MAAMX,GAAO,KA+BfkE,eAAiB,CAACC,EAASC,KACzB,IAAI7L,EAAOsI,KAAKS,MAAM+C,aACtB,MAAc,OAAXF,EACMtD,KAAKyD,UAAUF,IAExB7L,EAAKgM,MAAK,CAACC,EAAGC,KACZ,IAAIC,EAAKF,EAAEL,GAASQ,cAChBC,EAAKH,EAAEN,GAASQ,cACpB,OAAID,EAAKE,EACa,OAAXR,GAAoB,EAAI,EAE/BM,EAAKE,EACW,OAAXR,EAAmB,GAAK,EAE1B,CAAC,IAEH7L,EAAI,EACZ,KAEDsM,UAAaV,GACJtD,KAAKS,MAAM6C,SAAWA,EAAgC,OAAtBtD,KAAKS,MAAM8C,QAAmBU,EAAsBC,EAAoBD,EAjD/GjE,KAAKS,MAAQ,CACX0D,QAASnE,KAAKb,MAAMgF,QACpBC,OAAQ,GACRC,eAAgBrE,KAAKb,MAAMmF,KAC3Bd,aAAcxD,KAAKb,MAAMmF,KACzBhB,QAAS,SACTC,QAAS,MACTgB,gBAAiB,GACjBC,WAAY,GACZC,OAAQ,GACRC,eAAgB,GAChB3B,QAAS,GAEb,CAEA,iBAAI4B,GACF,MAAO,CAAC,kBAAkB,aAAa,UACzC,CAEA,oBAAIC,GACF,MAAO,CACL,iBACA,qBACA,kBACA,kBACA,mBAEJ,CAyBAnB,SAAAA,CAAUF,GACR,IAAI7L,EAAOsI,KAAKS,MAAM+C,aAiBtB,OAhBA9L,EAAKgM,MAAK,CAACC,EAAGC,KACZ,IAAIiB,EAAM,EACV,IAAK,MAAMvE,KAAQN,KAAK4E,iBAAkB,CACxC,IAAIf,EAAKF,EAAErD,GACPyD,EAAKH,EAAEtD,GAOX,GANIuD,EAAKE,IACPc,EAAiB,OAAXtB,GAAoB,EAAI,GAE5BM,EAAKE,IACPc,EAAiB,OAAXtB,EAAmB,GAAK,GAErB,GAAPsB,EACJ,KACF,CACA,OAAOA,CAAG,IAELnN,CACT,CAEAoN,YAAAA,GACE,MAAAtE,EAAiGR,KAAKS,MAA9FgE,EAAMjE,EAANiE,OAAQC,EAAclE,EAAdkE,eAAgBN,EAAM5D,EAAN4D,OAAQG,EAAe/D,EAAf+D,gBAAiBC,EAAUhE,EAAVgE,WAAYzB,EAAOvC,EAAPuC,QAASsB,EAAc7D,EAAd6D,eAGxEb,GAFuC,IAA3Be,EAAgBrH,QAAsC,IAAtBsH,EAAWtH,QAAmC,IAAnB6F,EAAQ7F,OAAe8C,KAAKb,MAAMmF,KAAOD,GAExF1I,QAAQoJ,IACpC,MAAMC,EAAkC,IAAlBP,EAAOvH,QAAgBuH,EAAOQ,MAAKC,GAAOH,EAAKN,QAAQU,SAASD,KAChFE,EAAiD,IAA1BV,EAAexH,QAAgBwH,EAAeO,MAAKI,GAAMN,EAAKL,gBAAgBS,SAASE,KAE9GC,GAAiBP,EAAKQ,oBAAsB,IAAIzB,cAAcqB,SAASf,EAAON,iBACjFiB,EAAKS,yBAA2B,IAAI1B,cAAcqB,SAASf,EAAON,iBAClEiB,EAAKU,MAAQ,IAAI3B,cAAcqB,SAASf,EAAON,eAElD,OAAOkB,GAAiBI,GAAwBE,CAAa,IAG/DtF,KAAKO,SAAS,CAAEiD,gBAClB,CAGAkC,kBAAAA,CAAmBC,EAAYC,GAC7B5F,KAAKO,SAAS,CAAE,CAACoF,GAAaC,IAAU,KAClC,CAAC,kBAAmB,aAAc,WAAWT,SAASQ,GAExD3F,KAAK6F,WAAWF,EAAYC,GAG5B5F,KAAK8E,cACP,GAEJ,CAEA,wBAAMgB,CAAmBC,GACvB,IAAIC,EAAS,IACb,IAAK,MAAMrH,KAAMoH,EACfC,GAAW,UAASrH,IAGtB,aADuBsH,MAAMjG,KAAKb,MAAM+G,WAAaF,IACrCG,MAClB,CAEAC,UAAAA,GACE,GAAIpG,KAAKb,MAAMkH,iBACb,OACExI,EAAAA,cAAA,WACEA,EAAAA,cAAA,OAAKC,UAAU,kCACbD,EAAAA,cAAA,OAAKC,UAAU,eACbD,EAAAA,cAACyI,EAAAA,EAAiB,CAChB7N,QAASuH,KAAKb,MAAMoH,wBACpBC,gBAAiBxG,KAAKS,MAAM8D,gBAC5BtG,SAAWuI,GAAoBxG,KAAK0F,mBAAmB,kBAAmBc,GAC1EC,YAAY,oBAGd5I,EAAAA,cAACyI,EAAAA,EAAiB,CAChB7N,QAASuH,KAAKb,MAAMuH,mBAAmBpI,KAAIqI,GAAWA,EAAOlE,QAAQ,WAAY,MACjF+D,gBAAiBxG,KAAKS,MAAM+D,WAC5BvG,SAAWuI,GAAoBxG,KAAK0F,mBAAmB,aAAcc,GACrEC,YAAY,eAGd5I,EAAAA,cAACyI,EAAAA,EAAiB,CAChB7N,QAASuH,KAAKb,MAAMyH,gBACpBJ,gBAAiBxG,KAAKS,MAAMsC,QAC5B9E,SAAWuI,GAAoBxG,KAAK0F,mBAAmB,UAAWc,GAClEC,YAAY,YAGd5I,EAAAA,cAACyI,EAAAA,EAAiB,CAChB7N,QAASuH,KAAKb,MAAM0H,eACpBL,gBAAiBxG,KAAKS,MAAMgE,OAC5BxG,SAAWuI,GAAoBxG,KAAK0F,mBAAmB,SAAUc,GACjEC,YAAY,WAEd5I,EAAAA,cAACyI,EAAAA,EAAiB,CAChB7N,QAASuH,KAAKb,MAAM2H,uBACpBN,gBAAiBxG,KAAKS,MAAMiE,eAC5BzG,SAAWuI,GAAoBxG,KAAK0F,mBAAmB,iBAAkBc,GACzEC,YAAY,qBAKlB5I,EAAAA,cAAA,OAAKC,UAAU,2BAEZkC,KAAKS,MAAM8D,gBAAgBrH,OAAS,GAAK8C,KAAKS,MAAM8D,gBAAgBjG,KAAI,CAACyI,EAAwBtI,IAChGZ,EAAAA,cAAA,KAAGxB,IAAKoC,EAAOgB,QAASA,KACtB,MAAMuH,EAAwBhH,KAAKS,MAAM8D,gBAAgB5I,QAAOsL,GAAMA,IAAOF,IAC7E/G,KAAK0F,mBAAmB,kBAAmBsB,EAAsB,EAChElJ,UAAU,6BAA6BiJ,EAAuB,oBAGlE/G,KAAKS,MAAM+D,WAAWtH,OAAS,GAC9B8C,KAAKS,MAAM+D,WAAWlG,KAAI,CAAC4I,EAAoBzI,IAC7CZ,EAAAA,cAAA,KAAGxB,IAAKoC,EAAOgB,QAASA,KACtB,MAAM0H,EAAqBnH,KAAKS,MAAM+D,WAAW7I,QAAOyL,GAAKA,IAAMF,IACnElH,KAAK0F,mBAAmB,aAAcyB,EAAmB,EACxDrJ,UAAU,6BAA6BoJ,EAAmB,oBAGhElH,KAAKS,MAAMgE,OAAOvH,OAAS,GAAK8C,KAAKS,MAAMgE,OAAOnG,KAAI,CAAC+I,EAAgB5I,IACtEZ,EAAAA,cAAA,KAAGxB,IAAKoC,EAAOgB,QAASA,KACtB,MAAM6H,EAAiBtH,KAAKS,MAAMgE,OAAO9I,QAAO4L,GAAKA,IAAMF,IAC3DrH,KAAK0F,mBAAmB,SAAU4B,EAAe,EAChDxJ,UAAU,6BAA6BuJ,EAAe,oBAG1DrH,KAAKS,MAAMsC,QAAQ7F,OAAS,GAAK8C,KAAKS,MAAMsC,QAAQzE,KAAI,CAACkJ,EAAiB/I,IACzEZ,EAAAA,cAAA,KAAGxB,IAAKoC,EAAOgB,QAASA,KACtB,MAAMgI,EAAiBzH,KAAKS,MAAMsC,QAAQpH,QAAO4L,GAAKA,IAAMC,IAC5DxH,KAAK0F,mBAAmB,UAAW+B,EAAe,EACjD3J,UAAU,6BAA6B0J,EAAgB,oBAG3DxH,KAAKS,MAAMiE,eAAexH,OAAS,GAAK8C,KAAKS,MAAMiE,eAAepG,KAAI,CAACoJ,EAAuBjJ,IAC7FZ,EAAAA,cAAA,KAAGxB,IAAKoC,EAAOgB,QAASA,KACtB,MAAMkI,EAAuB3H,KAAKS,MAAMiE,eAAe/I,QAAO0J,GAAMA,IAAOqC,IAC3E1H,KAAK0F,mBAAmB,iBAAkBiC,EAAqB,EAC9D7J,UAAU,6BAA6B4J,EAAsB,qBAM5E,CAEAE,mBAAAA,CAAoBC,GAClB,OAAqC,IAAjCA,EAAIC,kBAAkB5K,OACjB,MACE8C,KAAKb,MAAMkH,iBACbwB,EAAIC,kBAEH,GAAED,EAAIE,sBAElB,CAEAC,WAAAA,CAAYC,GACV,OAAIA,GAAc,EACT,CAAEC,QAAS,QAEb,CAAEC,MAAQ,GAAEF,KACrB,CAEApC,UAAAA,CAAWuC,EAAkBC,GAC3B,IAAIC,EAAU,CAAC,EAEf,GADAA,EAAQF,GAAoBC,EACzBrI,KAAK2E,cAAcQ,SAASiD,GAAmB,CAChD,IAAIrC,EAAM,GACV,MAAA/E,EAAmChB,KAAKS,MAAhCgE,EAAMzD,EAANyD,OAAQC,EAAc1D,EAAd0D,eAChB,OAAQ0D,GACN,IAAK,kBACHrC,EAAM/F,KAAKb,MAAMgF,QAAQxI,QAAQ4M,IAC/B,MAAMC,EAA6B,IAAjBH,EAAMnL,QAAgBmL,EAAMlD,SAASoD,EAAO1G,YACxD4G,EAAmD,IAAjCzI,KAAKS,MAAM+D,WAAWtH,QAC5C8C,KAAKS,MAAM+D,WAAWS,MAAKmC,GAAKmB,EAAOG,YAAYjG,QAAQ,WAAY,IAAI0C,SAASiC,EAAEuB,UAClFC,EAA6C,IAA9B5I,KAAKS,MAAMsC,QAAQ7F,QACtC8C,KAAKS,MAAMsC,QAAQkC,MAAK4D,GAAKN,EAAOxF,QAAQoC,SAAS0D,KACvD,OAAOL,GAAaC,GAAmBG,CAAY,IAClDtK,KAAIwK,GAAKA,EAAEC,cACd,MACF,IAAK,aACHhD,EAAM/F,KAAKb,MAAMgF,QAAQxI,QAAQ4M,IAC/B,MAAMC,EAAkD,IAAtCxI,KAAKS,MAAM8D,gBAAgBrH,QAAgB8C,KAAKS,MAAM8D,gBAAgBU,MAAKtB,GAAK4E,EAAO1G,WAAWsD,SAASxB,KACvH8E,EAAmC,IAAjBJ,EAAMnL,QAAgBmL,EAAMlD,SAASoD,EAAOG,YAAYjG,QAAQ,WAAY,KAC9FmG,EAA6C,IAA9B5I,KAAKS,MAAMsC,QAAQ7F,QACtC8C,KAAKS,MAAMsC,QAAQkC,MAAK4D,GAAKN,EAAOxF,QAAQoC,SAAS0D,KACvD,OAAOL,GAAaC,GAAmBG,CAAY,IAClDtK,KAAIwK,GAAKA,EAAEC,cACd,MACF,IAAK,UACHhD,EAAM/F,KAAKb,MAAMgF,QAAQxI,QAAQ4M,IAC/B,MAAMC,EAAkD,IAAtCxI,KAAKS,MAAM8D,gBAAgBrH,QAAgB8C,KAAKS,MAAM8D,gBAAgBU,MAAKtB,GAAK4E,EAAO1G,WAAWsD,SAASxB,KACvH8E,EAAmD,IAAjCzI,KAAKS,MAAM+D,WAAWtH,QAC5C8C,KAAKS,MAAM+D,WAAWS,MAAKmC,GAAKmB,EAAOG,YAAYjG,QAAQ,WAAY,IAAI0C,SAASiC,EAAEuB,UAClFC,EAAgC,IAAjBP,EAAMnL,QAAgBmL,EAAMlD,SAASoD,EAAOxF,SACjE,OAAOyF,GAAaC,GAAmBG,CAAY,IAClDtK,KAAIwK,GAAKA,EAAEC,cAGlB/I,KAAK8F,mBAAmBC,GAAKiD,MAAMtR,IACjC4Q,EAAQjE,eAAiB3M,EAAKuR,QAC9BX,EAAQ9E,aAAe8E,EAAQjE,eAAe1I,QAAQoJ,IAA4B,IAAlBN,EAAOvH,QAAgBuH,EAAOQ,MAAKC,GAAOH,EAAKN,QAAQU,SAASD,SAC5HH,EAAKQ,oBAAsB,IAAIzB,cAAcoF,QAAQlJ,KAAKS,MAAM2D,SAAW,IAC5EW,EAAKS,yBAA2B,IAAI1B,cAAcoF,QAAQlJ,KAAKS,MAAM2D,SAAW,IAChFW,EAAKU,MAAQ,IAAI3B,cAAcoF,QAAQlJ,KAAKS,MAAM2D,SAAW,KACnC,IAA1BM,EAAexH,QAAgBwH,EAAeO,MAAKI,GAAMN,EAAKL,gBAAgBS,SAASE,QAE1FrF,KAAKO,SAAS+H,EAAQ,GAE1B,CAEA,OAAOA,CACT,CAEAa,qBAAAA,CAAsBtB,GACpB,GAAmC,OAA/BA,EAAIrC,wBACN,OAAO3H,EAAAA,cAACuL,EAAAA,EAAkB,CACxBC,MAAOxB,EAAIrC,wBACX8D,QAAQ,iBACRC,WAAY1B,EAAI2B,gBAAgB7K,GAChC8K,UAAW5B,EAAI6B,kCACfC,YAAa3J,KAAKb,MAAMyK,KACxBC,QAAS7J,KAAKb,MAAM2K,MACpBC,gBAAgB,UAChBC,YAAa,CAAC,EACdC,WAAYpC,EAAI2B,gBAAgBU,KAGtC,CAEA9H,MAAAA,GAEE,OAAOvE,EAAAA,cAAAA,EAAAA,SAAA,KACLA,EAAAA,cAAA,OAAKC,UAAU,kBACbD,EAAAA,cAAA,OAAKC,UAAU,aACbD,EAAAA,cAAA,OAAKC,UAAU,mBACbD,EAAAA,cAAA,OAAKC,UAAU,2BACbD,EAAAA,cAAA,MAAIC,UAAU,yBAAyBkC,KAAKb,MAAMkH,iBAAmB,cAAiB,iBAAgBrG,KAAKb,MAAMgL,0BAA0B,KAC3ItM,EAAAA,cAAA,OAAKC,UAAU,eACbD,EAAAA,cAAA,QAAMC,UAAU,8CAA6C,4LAE1DkC,KAAKb,MAAMkH,iBAAmB,6FAA+F,MAIpIxI,EAAAA,cAAA,OAAKC,UAAU,aAAaM,MAAO,CAAC+J,MAAO,MACzCtK,EAAAA,cAAA,SAAOC,UAAU,gCAA+B,UAChDD,EAAAA,cAAA,SAAOE,KAAK,OAAOuC,KAAK,SAASmG,YAAY,SAAS3I,UAAU,eAAeG,SAAUC,GAAK8B,KAAKO,SAAS,CAAE6D,OAAQlG,EAAEC,OAAOkK,OAASrI,KAAK8E,kBAIhJ9E,KAAKoG,aAENvI,EAAAA,cAAA,SAAOC,UAAU,gBACfD,EAAAA,cAAA,aACEA,EAAAA,cAAA,UACEA,EAAAA,cAAA,MAAIC,UAAU,gCAA+B,sBAC7CD,EAAAA,cAAA,MAAIC,UAAU,gCAA+B,kBAC7CD,EAAAA,cAAA,MACEC,UAAU,4CACV2B,QAASA,KACPO,KAAKO,SAAS,CACd+C,QAAS,iBACTC,QAA+B,OAAtBvD,KAAKS,MAAM8C,QAAmB,OAAS,MAChDC,aAAcxD,KAAKqD,eAAe,iBAAwC,OAAtBrD,KAAKS,MAAM8C,QAAmB,OAAS,QACzF,GAGJ1F,EAAAA,cAAA,WAAK,kBAAeA,EAAAA,cAAA,OAAKuM,IAAKpK,KAAKgE,UAAU,kBAAmBqG,IAAI,YAAYvM,UAAU,qBAE5FD,EAAAA,cAAA,MACEC,UAAU,4CACV2B,QAASA,IAAMO,KAAKO,SAAS,CAC3B+C,QAAS,SACTC,QAA+B,OAAtBvD,KAAKS,MAAM8C,QAAmB,OAAS,MAChDC,aAAcxD,KAAKqD,eAAe,SAAgC,OAAtBrD,KAAKS,MAAM8C,QAAmB,OAAS,UAIrF1F,EAAAA,cAAA,WAAK,UAAOA,EAAAA,cAAA,OAAKuM,IAAKpK,KAAKgE,UAAU,UAAWqG,IAAI,YAAYvM,UAAU,qBAE5ED,EAAAA,cAAA,MAAIC,UAAU,gCAAgCkC,KAAKb,MAAMkH,iBAAmB,oBAAsB,uBAClGxI,EAAAA,cAAA,MACEC,UAAU,gDACV2B,QAASA,IAAMO,KAAKO,SAAS,CAC3B+C,QAAS,MACTC,QAA+B,OAAtBvD,KAAKS,MAAM8C,QAAmB,OAAS,MAChDC,aAAcxD,KAAKqD,eAAe,MAA6B,OAAtBrD,KAAKS,MAAM8C,QAAmB,OAAS,UAIlF1F,EAAAA,cAAA,WAAK,iBAAcA,EAAAA,cAAA,OAAKuM,IAAKpK,KAAKgE,UAAU,OAAQqG,IAAI,YAAYvM,UAAU,qBAEhFD,EAAAA,cAAA,MAAIC,UAAU,gCAA+B,gBAC7CD,EAAAA,cAAA,MAAIC,UAAU,gCAA+B,mCAGjDD,EAAAA,cAAA,aACGmC,KAAKS,MAAM+C,aAAalF,KAAI,CAACuJ,EAAK5K,IAC1BY,EAAAA,cAAA,MAAIxB,IAAM,sBAAqBY,KACpCY,EAAAA,cAAA,UAAKgK,EAAItC,oBACT1H,EAAAA,cAAA,UACGmC,KAAKmJ,sBAAsBtB,IAE9BhK,EAAAA,cAAA,UAAIA,EAAAA,cAAA,KAAGC,UAAU,+BAA+B+J,EAAInD,gBAAkB,QACtE7G,EAAAA,cAAA,UAAIA,EAAAA,cAAA,KAAGC,UAAU,sBAAsBM,MAAO,CAAEkM,UAAW,aAAcC,aAAc,eAAiB1C,EAAIpD,QAAU,QACtH5G,EAAAA,cAAA,MAAIC,UAAU,gBAAgBkC,KAAK4H,oBAAoBC,IACvDhK,EAAAA,cAAA,UACEA,EAAAA,cAAA,OAAKC,UAAU,uBACbD,EAAAA,cAAA,OAAKC,UAAU,+BAA+BM,MAAO4B,KAAKgI,YAAYH,EAAI2C,iBAAiB3M,EAAAA,cAAA,KAAGC,UAAU,sCAAsC2M,KAAKC,MAAM7C,EAAI2C,gBAAgB,MAC7K3M,EAAAA,cAAA,OAAKC,UAAU,mCAAmCM,MAAO4B,KAAKgI,YAAYH,EAAI8C,qBAAqB9M,EAAAA,cAAA,KAAGC,UAAU,sCAAsC2M,KAAKC,MAAM7C,EAAI8C,oBAAoB,MACzL9M,EAAAA,cAAA,OAAKC,UAAU,gCAAgCM,MAAO4B,KAAKgI,YAAYH,EAAI+C,kBAAkB/M,EAAAA,cAAA,KAAGC,UAAU,sCAAsC2M,KAAKC,MAAM7C,EAAI+C,iBAAiB,MAChL/M,EAAAA,cAAA,OAAKC,UAAU,gCAAgCM,MAAO4B,KAAKgI,YAAYH,EAAIgD,kBAAkBhN,EAAAA,cAAA,KAAGC,UAAU,sCAAsC2M,KAAKC,MAAM7C,EAAIgD,iBAAiB,MAChLhN,EAAAA,cAAA,OAAKC,UAAU,iCAAiCM,MAAO4B,KAAKgI,YAAYH,EAAIiD,mBAAmBjN,EAAAA,cAAA,KAAGC,UAAU,sCAAsC2M,KAAKC,MAAM7C,EAAIiD,kBAAkB,QAGvLjN,EAAAA,cAAA,MAAIO,MAAO,CAAC2M,MAAO,YAAwD,OAA3ClD,EAAImD,oCAA+CnN,EAAAA,cAAA,KAAGO,MAAO,CAAC2M,MAAO,UAAWE,eAAgB,aAAc9M,OAAO,SAASuD,KAAMmG,EAAImD,qCAAsCnD,EAAIpC,MAAY,OAC9N5H,EAAAA,cAAA,MAAIC,UAAU,gBAAgB2M,KAAKC,MAAM7C,EAAIqD,yBAAyB,YAQtF,EAGF,S,kDCtYA,MAkCA,EAlCeC,EAAGzT,WAChB,MAAMsQ,EAAeC,GACfA,GAAc,EACT,CAAEC,QAAS,QAEb,CAAEC,MAAQ,GAAEF,MAGrB,OACEpK,EAAAA,cAAA,OAAKC,UAAU,+BACbD,EAAAA,cAAA,OACEC,UAAU,+BACVM,MAAO4J,EAAYtQ,EAAK0T,oCAE1BvN,EAAAA,cAAA,OACEC,UAAU,mCACVM,MAAO4J,EAAYtQ,EAAK2T,wCAE1BxN,EAAAA,cAAA,OACEC,UAAU,gCACVM,MAAO4J,EAAYtQ,EAAK4T,qCAE1BzN,EAAAA,cAAA,OACEC,UAAU,gCACVM,MAAO4J,EAAYtQ,EAAK6T,qCAE1B1N,EAAAA,cAAA,OACEC,UAAU,iCACVM,MAAO4J,EAAYtQ,EAAK8T,sCAEtB,C,iFC5BK,MAAMC,UAAoC5N,EAAAA,UACvDgC,WAAAA,CAAYV,GACVW,MAAMX,GAAO,KAiBfuM,qBAAuB,KACrB,MAAMC,EAAgB/T,OAAOgU,WAAa,IAC1C5L,KAAKO,SAAS,CAAEsL,WAAYF,GAAgB,EAC5C,KAEFG,WAAa,CAACxI,EAASC,KACrB,MAAMwI,EAAoB,aAAZzI,EACdtD,KAAKO,SAAS,CACZ+C,UACAC,UACAC,cAAcwI,EAAAA,EAAAA,GACZhM,KAAKS,MAAM+C,aACXF,EACAC,EACAwI,IAEF,EAhCF/L,KAAKS,MAAQ,CACXoL,UAAW7L,KAAKb,MAAM8M,kBACtBzI,aAAcxD,KAAKb,MAAMmF,KAAK4H,wCAC9B5I,QAAS,kBACTC,QAAS,MAEb,CAEAxB,iBAAAA,GACEnK,OAAOqK,iBAAiB,SAAUjC,KAAK0L,qBACzC,CAEAxJ,oBAAAA,GACEtK,OAAOuK,oBAAoB,SAAUnC,KAAK0L,qBAC5C,CAqBA9D,mBAAAA,CAAoBC,GAClB,OAA8B,IAA1BA,EAAIC,kBACC,MAEC,GAAED,EAAIE,sBAElB,CAEA3F,MAAAA,GACE,OACEvE,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,OAAKC,UAAU,iCACbD,EAAAA,cAAA,OAAKC,UAAU,iDAAiDqO,SAAS,IACrE1M,QAASA,KACPO,KAAKO,SAAS,CAAEsL,WAAY7L,KAAKS,MAAMoL,WAAY,EAErDO,WAAavQ,IACO,UAAdA,EAAMQ,KACR2D,KAAKO,SAAS,CAAEsL,WAAY7L,KAAKS,MAAMoL,WACzC,GAGJhO,EAAAA,cAAA,OACEC,UACEkC,KAAKS,MAAMoL,UACP,qBACA,yBAGRhO,EAAAA,cAAA,MAAIC,UAAU,wBAAuB,wBAEvCD,EAAAA,cAAA,SACEC,UAAU,iEACVM,MAAO,CAAE8J,QAASlI,KAAKS,MAAMoL,UAAY,OAAS,UAElDhO,EAAAA,cAAA,aACEA,EAAAA,cAAA,UACEA,EAAAA,cAAA,MAAIsK,MAAM,OAAM,uBAChBtK,EAAAA,cAAA,MAAIsK,MAAM,OACRtK,EAAAA,cAAA,OACE4B,QAASA,KACP,MAAM4M,EACmB,wBAAvBrM,KAAKS,MAAM6C,SAA4D,QAAvBtD,KAAKS,MAAM8C,QACvD,OACA,MACNvD,KAAK8L,WAAW,sBAAuBO,EAAW,GAErD,4BAEErI,EAAAA,EAAAA,GACChE,KAAKS,MAAM6C,QACX,sBACAtD,KAAK8L,cAIXjO,EAAAA,cAAA,MAAIsK,MAAM,OACRtK,EAAAA,cAAA,OACE4B,QAASA,KACP,MAAM4M,EACmB,wBAAvBrM,KAAKS,MAAM6C,SAA4D,QAAvBtD,KAAKS,MAAM8C,QACvD,OACA,MACNvD,KAAK8L,WAAW,sBAAuBO,EAAW,GAErD,sBAEErI,EAAAA,EAAAA,GACChE,KAAKS,MAAM6C,QACX,sBACAtD,KAAK8L,cAIXjO,EAAAA,cAAA,MAAIsK,MAAM,OACRtK,EAAAA,cAAA,OAAKC,UAAU,oDACb2B,QAASA,KACP,MAAM4M,EACmB,aAAvBrM,KAAKS,MAAM6C,SAAiD,QAAvBtD,KAAKS,MAAM8C,QAC5C,OACA,MACNvD,KAAK8L,WAAW,WAAYO,EAAW,GAGzCxO,EAAAA,cAAA,WAAK,sCAEJmG,EAAAA,EAAAA,GACChE,KAAKS,MAAM6C,QACX,WACAtD,KAAK8L,aAGPjO,EAAAA,cAAA,OAAKC,UAAU,+BACbD,EAAAA,cAAA,QAAMC,UAAU,eACdD,EAAAA,cAACyO,EAAAA,EAAO,UAKhBzO,EAAAA,cAAA,MAAIsK,MAAM,OACRtK,EAAAA,cAAA,OACE4B,QAASA,KACP,MAAM4M,EACmB,sBAAvBrM,KAAKS,MAAM6C,SAA0D,QAAvBtD,KAAKS,MAAM8C,QACrD,OACA,MACNvD,KAAK8L,WAAW,oBAAqBO,EAAW,GAEnD,yBAEErI,EAAAA,EAAAA,GACChE,KAAKS,MAAM6C,QACX,oBACAtD,KAAK8L,gBAMfjO,EAAAA,cAAA,aACGmC,KAAKS,MAAM+C,aAAalF,KAAI,CAACuJ,EAAK5K,IACjCY,EAAAA,cAAA,MAAIxB,IAAM,yBAAwBY,KAChCY,EAAAA,cAAA,MAAIsK,MAAM,OACPN,EAAIvH,MAAQ,OAEfzC,EAAAA,cAAA,MAAIsK,MAAM,OACPN,EAAI0E,qBAEP1O,EAAAA,cAAA,MAAIsK,MAAM,OAAOnI,KAAK4H,oBAAoBC,IAC1ChK,EAAAA,cAAA,MAAIsK,MAAM,MAAM/J,MAAO,CAAEI,UAAW,mBAClCX,EAAAA,cAACsN,EAAAA,EAAM,CAACzT,KAAMmQ,EAAI2E,YAEpB3O,EAAAA,cAAA,MAAIsK,MAAM,OACPN,EAAI4E,yBASvB,E,kFCpLa,MAAMC,UAA+B7O,EAAAA,UAClDgC,WAAAA,CAAYV,GACVW,MAAMX,GAAO,KAiBfuM,qBAAuB,KACrB,MAAMC,EAAgB/T,OAAOgU,WAAa,IAC1C5L,KAAKO,SAAS,CAAEsL,UAAWF,GAAgB,EAC3C,KAEFG,WAAa,CAACxI,EAASC,KACrB,MAAMwI,EAAoB,aAAZzI,EACdtD,KAAKO,SAAS,CACZ+C,UACAC,UACAC,cAAcwI,EAAAA,EAAAA,GACZhM,KAAKS,MAAM+C,aACXF,EACAC,EACAwI,IAEF,EAhCF/L,KAAKS,MAAQ,CACXoL,UAAW7L,KAAKb,MAAM8M,kBACtBzI,aAAcxD,KAAKb,MAAMmF,KAAKqI,oCAC9BrJ,QAAS,kBACTC,QAAS,MAEb,CAEAxB,iBAAAA,GACEnK,OAAOqK,iBAAiB,SAAUjC,KAAK0L,qBACzC,CAEAxJ,oBAAAA,GACEtK,OAAOuK,oBAAoB,SAAUnC,KAAK0L,qBAC5C,CAqBA9D,mBAAAA,CAAoBC,GAClB,OAA8B,IAA1BA,EAAIC,kBACC,MAEC,GAAED,EAAIE,sBAElB,CAEA3F,MAAAA,GACE,OACEvE,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,OAAKC,UAAU,iCACbD,EAAAA,cAAA,OAAKC,UAAU,iDAAiDqO,SAAS,IACrE1M,QAASA,KACPO,KAAKO,SAAS,CAAEsL,WAAY7L,KAAKS,MAAMoL,WAAY,EAErDO,WAAavQ,IACO,UAAdA,EAAMQ,KACR2D,KAAKO,SAAS,CAAEsL,WAAY7L,KAAKS,MAAMoL,WACzC,GAGJhO,EAAAA,cAAA,OACEC,UACEkC,KAAKS,MAAMoL,UACP,qBACA,yBAGRhO,EAAAA,cAAA,MAAIC,UAAU,wBAAuB,mBAEvCD,EAAAA,cAAA,SACEC,UAAU,iEACVM,MAAO,CAAE8J,QAASlI,KAAKS,MAAMoL,UAAY,OAAS,UAElDhO,EAAAA,cAAA,aACEA,EAAAA,cAAA,UACEA,EAAAA,cAAA,MAAIsK,MAAM,OAAM,kBAChBtK,EAAAA,cAAA,MAAIsK,MAAM,OACRtK,EAAAA,cAAA,OACE4B,QAASA,KACP,MAAM4M,EACmB,wBAAvBrM,KAAKS,MAAM6C,SAA4D,QAAvBtD,KAAKS,MAAM8C,QACvD,OACA,MACNvD,KAAK8L,WAAW,sBAAuBO,EAAW,GAErD,4BAEErI,EAAAA,EAAAA,GACChE,KAAKS,MAAM6C,QACX,sBACAtD,KAAK8L,cAIXjO,EAAAA,cAAA,MAAIsK,MAAM,OACRtK,EAAAA,cAAA,OACE4B,QAASA,KACP,MAAM4M,EACmB,wBAAvBrM,KAAKS,MAAM6C,SAA4D,QAAvBtD,KAAKS,MAAM8C,QACvD,OACA,MACNvD,KAAK8L,WAAW,sBAAuBO,EAAW,GAErD,sBAEErI,EAAAA,EAAAA,GACChE,KAAKS,MAAM6C,QACX,sBACAtD,KAAK8L,cAIXjO,EAAAA,cAAA,MAAIsK,MAAM,OACRtK,EAAAA,cAAA,OAAKC,UAAU,oDACb2B,QAASA,KACP,MAAM4M,EACmB,aAAvBrM,KAAKS,MAAM6C,SAAiD,QAAvBtD,KAAKS,MAAM8C,QAC5C,OACA,MACNvD,KAAK8L,WAAW,WAAYO,EAAW,GAGzCxO,EAAAA,cAAA,WAAK,sCAEJmG,EAAAA,EAAAA,GACChE,KAAKS,MAAM6C,QACX,WACAtD,KAAK8L,aAGPjO,EAAAA,cAAA,OAAKC,UAAU,+BACbD,EAAAA,cAAA,QAAMC,UAAU,eACdD,EAAAA,cAACyO,EAAAA,EAAO,UAKhBzO,EAAAA,cAAA,MAAIsK,MAAM,OACRtK,EAAAA,cAAA,OACE4B,QAASA,KACP,MAAM4M,EACmB,sBAAvBrM,KAAKS,MAAM6C,SAA0D,QAAvBtD,KAAKS,MAAM8C,QACrD,OACA,MACNvD,KAAK8L,WAAW,oBAAqBO,EAAW,GAEnD,yBAEErI,EAAAA,EAAAA,GAAUhE,KAAKS,MAAM6C,QAAS,oBAAqBtD,KAAK8L,gBAKjEjO,EAAAA,cAAA,aACGmC,KAAKS,MAAM+C,aAAalF,KAAI,CAACuJ,EAAK5K,IACjCY,EAAAA,cAAA,MAAIxB,IAAM,yBAAwBY,KAChCY,EAAAA,cAAA,MAAIsK,MAAM,OACPN,EAAIvH,MAAQ,OAEfzC,EAAAA,cAAA,MAAIsK,MAAM,OACPN,EAAI0E,qBAEP1O,EAAAA,cAAA,MAAIsK,MAAM,OAAOnI,KAAK4H,oBAAoBC,IAC1ChK,EAAAA,cAAA,MAAIsK,MAAM,MAAM/J,MAAO,CAAEI,UAAW,mBAClCX,EAAAA,cAACsN,EAAAA,EAAM,CAACzT,KAAMmQ,EAAI2E,YAEpB3O,EAAAA,cAAA,MAAIsK,MAAM,OACPN,EAAI4E,yBASvB,E,kFChLa,MAAMG,UAAgC/O,EAAAA,UACnDgC,WAAAA,CAAYV,GACVW,MAAMX,GAAO,KAiBfuM,qBAAuB,KACrB,MAAMC,EAAgB/T,OAAOgU,WAAa,IAC1C5L,KAAKO,SAAS,CAAEsL,WAAYF,GAAgB,EAC5C,KAEFG,WAAa,CAACxI,EAASC,KACrB,MAAMwI,EAAoB,aAAZzI,EACdtD,KAAKO,SAAS,CACZ+C,UACAC,UACAC,cAAcwI,EAAAA,EAAAA,GACZhM,KAAKS,MAAM+C,aACXF,EACAC,EACAwI,IAEF,EAhCF/L,KAAKS,MAAQ,CACXoL,UAAW7L,KAAKb,MAAM8M,kBACtBzI,aAAcxD,KAAKb,MAAMmF,KAAKuI,2BAC9BvJ,QAAS,kBACTC,QAAS,MAEb,CAEAxB,iBAAAA,GACEnK,OAAOqK,iBAAiB,SAAUjC,KAAK0L,qBACzC,CAEAxJ,oBAAAA,GACEtK,OAAOuK,oBAAoB,SAAUnC,KAAK0L,qBAC5C,CAqBA9D,mBAAAA,CAAoBC,GAClB,OAA8B,IAA1BA,EAAIC,kBACC,MAEC,GAAED,EAAIE,sBAElB,CAEA3F,MAAAA,GACE,OACEvE,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,OAAKC,UAAU,iCACbD,EAAAA,cAAA,OAAKC,UAAU,iDAAiDqO,SAAS,IACrE1M,QAASA,KACPO,KAAKO,SAAS,CAAEsL,WAAY7L,KAAKS,MAAMoL,WAAY,EAErDO,WAAavQ,IACO,UAAdA,EAAMQ,KACR2D,KAAKO,SAAS,CAAEsL,WAAY7L,KAAKS,MAAMoL,WACzC,GAGJhO,EAAAA,cAAA,OACEC,UACEkC,KAAKS,MAAMoL,UACP,qBACA,yBAGRhO,EAAAA,cAAA,MAAIC,UAAU,wBAAuB,WAEvCD,EAAAA,cAAA,SACEC,UAAU,iEACVM,MAAO,CAAE8J,QAASlI,KAAKS,MAAMoL,UAAY,OAAS,UAElDhO,EAAAA,cAAA,aACEA,EAAAA,cAAA,UACEA,EAAAA,cAAA,MAAIsK,MAAM,OAAM,UAChBtK,EAAAA,cAAA,MAAIsK,MAAM,OACRtK,EAAAA,cAAA,OACE4B,QAASA,KACP,MAAM4M,EACmB,wBAAvBrM,KAAKS,MAAM6C,SAA4D,QAAvBtD,KAAKS,MAAM8C,QACvD,OACA,MACNvD,KAAK8L,WAAW,sBAAuBO,EAAW,GAErD,4BAEErI,EAAAA,EAAAA,GACChE,KAAKS,MAAM6C,QACX,sBACAtD,KAAK8L,cAIXjO,EAAAA,cAAA,MAAIsK,MAAM,OACRtK,EAAAA,cAAA,OACE4B,QAASA,KACP,MAAM4M,EACmB,wBAAvBrM,KAAKS,MAAM6C,SAA4D,QAAvBtD,KAAKS,MAAM8C,QACvD,OACA,MACNvD,KAAK8L,WAAW,sBAAuBO,EAAW,GAErD,sBAEErI,EAAAA,EAAAA,GACChE,KAAKS,MAAM6C,QACX,sBACAtD,KAAK8L,cAIXjO,EAAAA,cAAA,MAAIsK,MAAM,OACRtK,EAAAA,cAAA,OAAKC,UAAU,oDACb2B,QAASA,KACP,MAAM4M,EACmB,aAAvBrM,KAAKS,MAAM6C,SAAiD,QAAvBtD,KAAKS,MAAM8C,QAC5C,OACA,MACNvD,KAAK8L,WAAW,WAAYO,EAAW,GAGzCxO,EAAAA,cAAA,WAAK,sCAEJmG,EAAAA,EAAAA,GACChE,KAAKS,MAAM6C,QACX,WACAtD,KAAK8L,aAGPjO,EAAAA,cAAA,OAAKC,UAAU,+BACbD,EAAAA,cAAA,QAAMC,UAAU,eACdD,EAAAA,cAACyO,EAAAA,EAAO,UAKhBzO,EAAAA,cAAA,MAAIsK,MAAM,OACRtK,EAAAA,cAAA,OACE4B,QAASA,KACP,MAAM4M,EACmB,sBAAvBrM,KAAKS,MAAM6C,SAA0D,QAAvBtD,KAAKS,MAAM8C,QACrD,OACA,MACNvD,KAAK8L,WAAW,oBAAqBO,EAAW,GAEnD,yBAEErI,EAAAA,EAAAA,GACChE,KAAKS,MAAM6C,QACX,oBACAtD,KAAK8L,gBAMfjO,EAAAA,cAAA,aACGmC,KAAKS,MAAM+C,aAAalF,KAAI,CAACuJ,EAAK5K,IACjCY,EAAAA,cAAA,MAAIxB,IAAM,yBAAwBY,KAChCY,EAAAA,cAAA,MAAIsK,MAAM,OACPN,EAAIvH,MAAQ,OAEfzC,EAAAA,cAAA,MAAIsK,MAAM,OACPN,EAAI0E,qBAEP1O,EAAAA,cAAA,MAAIsK,MAAM,OAAOnI,KAAK4H,oBAAoBC,IAC1ChK,EAAAA,cAAA,MAAIsK,MAAM,MAAM/J,MAAO,CAAEI,UAAW,mBAClCX,EAAAA,cAACsN,EAAAA,EAAM,CAACzT,KAAMmQ,EAAI2E,YAEpB3O,EAAAA,cAAA,MAAIsK,MAAM,OACPN,EAAI4E,yBASvB,E,kDCvLF,MAAMK,EAAa,CACjB,CAAEhP,UAAW,WAAYuL,MAAO,QAAS0D,YAAa,4BACtD,CAAEjP,UAAW,eAAgBuL,MAAO,YAAa0D,YAAa,+DAC9D,CAAEjP,UAAW,YAAauL,MAAO,SAAU0D,YAAa,4DACxD,CAAEjP,UAAW,YAAauL,MAAO,SAAU0D,YAAa,qBACxD,CAAEjP,UAAW,aAAcuL,MAAO,UAAW0D,YAAa,oBAmB5D,EAhBgBT,IAEZzO,EAAAA,cAAA,OAAKC,UAAU,iCACZgP,EAAWxO,KAAI,EAAGR,YAAWuL,QAAO0D,iBACnClP,EAAAA,cAAA,OAAKC,UAAU,eAAezB,IAAKgN,GACjCxL,EAAAA,cAAA,OAAKC,UAAY,YAAWA,MAC5BD,EAAAA,cAAA,OAAKC,UAAU,QACbD,EAAAA,cAAA,KAAGC,UAAU,qCAAqCuL,GAClDxL,EAAAA,cAAA,KAAGC,UAAU,gCAAgCiP,O,2ECdlD,MAAMf,EAA2BA,CAACtU,EAAM4L,EAASC,EAASwI,KAC/DrU,EAAKgM,MAAK,CAACC,EAAGC,KACZ,IACIC,EAAIE,EADJiJ,EAAa,EAcjB,OAZGjB,GACDlI,EAAKF,EAAEL,GAAS8H,iCAChBrH,EAAKH,EAAEN,GAAS8H,mCAEfvH,EAAKF,EAAEL,GACPS,EAAKH,EAAEN,IAENO,EAAKE,EACPiJ,GAAc,EACPnJ,EAAKE,IACZiJ,EAAa,GAEI,QAAZzJ,EAAoByJ,GAAcA,CAAU,IAG9CtV,GAGIsM,EAAYA,CAACiJ,EAAgB3J,EAAS4J,KACjD,MAAMC,EAAgBA,IAAMD,EAAO5J,EAAS,OACtC8J,EAAiBA,IAAMF,EAAO5J,EAAS,QAU7C,OACEzF,EAAAA,cAAA,QAAMC,UAAU,eACdD,EAAAA,cAAA,QAAMC,UAAU,mCAAmC2B,QAAS2N,EAAgBC,aANlDxR,IAC5BuR,GAAgB,EAKkGjB,SAAS,IAAIC,WAAavQ,IAA6B,UAAdA,EAAMQ,KAAiB+Q,GAAgB,IAChMvP,EAAAA,cAAA,QAAMC,UAAU,uCAAuC2B,QAAS0N,EAAeE,aAXtDxR,IAC3BsR,GAAe,EAUqGhB,SAAS,IAAIC,WAAavQ,IAA6B,UAAdA,EAAMQ,KAAiB8Q,GAAe,IAC5L,C,kDCxCX,MAAM7G,UAA0BzI,EAAAA,UAC9BgC,WAAAA,CAAYV,GACVW,MAAMX,GAAO,KAefmO,mBAAsBzR,IAChBmE,KAAKuN,YAAYC,UAAYxN,KAAKuN,YAAYC,QAAQC,SAAS5R,EAAMsC,SACvE6B,KAAKO,SAAS,CAAEN,QAAQ,GAC1B,EACA,KAEFyN,eAAiB,KACf1N,KAAKO,UAASoN,IAAS,CACrB1N,QAAS0N,EAAU1N,UAClB,EACH,KAEF2N,mBAAsBC,IACpB,MAAQrH,EAAoBxG,KAAKb,MAAzBqH,gBAGFsH,EAFatH,EAAgBrB,SAAS0I,GAGxCrH,EAAgB7K,QAAOgL,GAAUA,IAAWkH,IAC5C,IAAIrH,EAAiBqH,GAEzB7N,KAAKb,MAAMlB,SAAS6P,EAAe,EAlCnC9N,KAAKS,MAAQ,CACXR,QAAQ,GAEVD,KAAKuN,YAAc1P,EAAAA,WACrB,CAEAkE,iBAAAA,GACEC,SAASC,iBAAiB,YAAajC,KAAKsN,mBAC9C,CAEApL,oBAAAA,GACEF,SAASG,oBAAoB,YAAanC,KAAKsN,mBACjD,CA0BAlL,MAAAA,GACE,MAAAC,EAAiErC,KAAKb,MAA9D1G,EAAO4J,EAAP5J,QAASgO,EAAWpE,EAAXoE,YAAaD,EAAenE,EAAfmE,gBAAiBuH,EAAa1L,EAAb0L,cACxC9N,EAAWD,KAAKS,MAAhBR,OAEP,OACEpC,EAAAA,cAAA,OAAKC,UAAU,sBAAsBkQ,IAAKhO,KAAKuN,YAAanP,MAAO,CAAE6P,SAAU,aAE7EpQ,EAAAA,cAAA,UAAQC,UAAU,4CAA4C2B,QAASO,KAAK0N,eAAgBtP,MAAO,CAAE8P,OAAQ,WAAa,aAAa,UAASzH,KAC7IA,EACAsH,GAAiBlQ,EAAAA,cAAA,OAAKuM,IAAK2D,EAAe1D,IAAI,iBAAiBvM,UAAU,oBAI3EmC,GACCpC,EAAAA,cAAA,OAAKC,UAAU,gBAAgBM,MAAO,CAAE8J,QAAS,UAC9CzP,EAAQ6F,KAAIqI,GACX9I,EAAAA,cAAA,MACExB,IAAKsK,EACL7I,UAAW0I,EAAgBrB,SAASwB,GAAU,WAAa,GAC3DlH,QAASA,IAAMO,KAAK4N,mBAAmBjH,IAEtCA,MAOf,EAGF,S,uGClEA,MAAMwH,UAAqCtQ,EAAAA,UACzCgC,WAAAA,CAAYV,GACVW,MAAMX,GAAO,KAYfiP,eAAiB,CAAC9K,EAASC,KACzB,IAAI7L,EAAOsI,KAAKS,MAAM+C,aACtB,GAAe,iCAAZF,GAA0D,kCAAZA,EAA4C,CAC3F5L,EAAOA,EAAKiE,QAAOoJ,GAA0B,QAAlBA,EAAKzB,KAChC,MAAM+K,EAAQ,CAAC,WAAY,eAAgB,aAC9B,QAAV9K,EACD7L,EAAKgM,MAAK,CAACC,EAAGC,IACGyK,EAAMnF,QAAQvF,EAAEL,IAChB+K,EAAMnF,QAAQtF,EAAEN,MAIjC5L,EAAKgM,MAAK,CAACC,EAAGC,KACZ,MAAM0K,EAASD,EAAMnF,QAAQvF,EAAEL,IAE/B,OADe+K,EAAMnF,QAAQtF,EAAEN,IACfgL,CAAM,IAG1B5W,EAAOA,EAAK6W,OAAOvO,KAAKS,MAAM+C,aAAa7H,QAAOoJ,GAA0B,QAAlBA,EAAKzB,KACjE,MACE5L,EAAKgM,MAAK,CAACC,EAAGC,KACZ,IAAIC,EAAKF,EAAEL,GAASQ,cAClBC,EAAKH,EAAEN,GAASQ,cAClB,OAAID,EAAKE,EACW,OAAXR,GAAoB,EAAI,EAE7BM,EAAKE,EACW,OAAXR,EAAmB,GAAK,GAE1B,CAAC,IAGZ,OAAO7L,CAAI,EACZ,KAEDsM,UAAaV,GACJtD,KAAKS,MAAM6C,SAAWA,EAAgC,OAAtBtD,KAAKS,MAAM8C,QAAmBU,EAAsBC,EAAoBD,EAChH,KAEDa,aAAe,KACb,MAAAtE,EAAiFR,KAAKS,MAA9E+N,EAAqBhO,EAArBgO,sBAAuBC,EAAoBjO,EAApBiO,qBAAsBC,EAAelO,EAAfkO,gBAAiBtK,EAAM5D,EAAN4D,OAChEZ,EAAexD,KAAKb,MAAMmF,KAAK3I,QAAQoJ,IAC3C,MAAM4J,EAA8D,IAAjCH,EAAsBtR,QAAgBsR,EAAsBvJ,MAAKnD,GAAQiD,EAAK6J,iCAAiCzJ,SAASrD,KACrJ+M,EAA4D,IAAhCJ,EAAqBvR,QAAgBuR,EAAqBxJ,MAAKnD,GAAQiD,EAAK+J,gCAAgC3J,SAASrD,KACjJiN,EAAmD,IAA3BL,EAAgBxR,QAAgBwR,EAAgBzJ,MAAKlH,GAAQgH,EAAK2J,iBAAiBvJ,SAASpH,KACpHuH,EAAgBP,EAAKiK,aAAalL,cAAcqB,SAASf,EAAON,gBACpEiB,EAAKkK,OAAOnL,cAAcqB,SAASf,EAAON,gBACf,gBAA1B9D,KAAKb,MAAM+P,eAEPnK,EAAK2J,iBAAiB5K,eAAiB,IAAIqB,SAASf,EAAON,iBAC3DiB,EAAKoK,6BAA6BrL,eAAiB,IAAIqB,SAASf,EAAON,iBACvEiB,EAAKqK,4BAA4BtL,eAAiB,IAAIqB,SAASf,EAAON,gBAI7E,OAAO6K,GAA8BE,GAA6BE,GAAyBzJ,CAAa,IAE1GtF,KAAKO,SAAS,CAAEiD,gBAAe,EAChC,KAEDkC,mBAAqB,CAACC,EAAYC,KAChC5F,KAAKO,SAAS,CAAE,CAACoF,GAAaC,GAAU5F,KAAK8E,aAAa,EAxE1D9E,KAAKS,MAAQ,CACX2D,OAAQ,GACRZ,aAAcxD,KAAKb,MAAMmF,KACzBhB,QAAS,SACTC,QAAS,MACTmL,gBAAiB,GACjBF,sBAAuB,GACvBC,qBAAsB,GAE1B,CAkEArI,UAAAA,GACE,GAAIpG,KAAKb,MAAMkH,iBACb,OACExI,EAAAA,cAAA,WACEA,EAAAA,cAAA,OAAKC,UAAU,cACbD,EAAAA,cAAA,OAAKC,UAAU,eACbD,EAAAA,cAACyI,EAAAA,EAAiB,CAChB7N,QAASuH,KAAKb,MAAMkQ,8BACpB5I,YAAY,wBACZD,gBAAiBxG,KAAKS,MAAM+N,sBAC5BvQ,SAAWuI,GAAoBxG,KAAK0F,mBAAmB,wBAAyBc,KAGlF3I,EAAAA,cAACyI,EAAAA,EAAiB,CAChB7N,QAASuH,KAAKb,MAAMmQ,6BACpB7I,YAAY,uBACZD,gBAAiBxG,KAAKS,MAAMgO,qBAC5BxQ,SAAWuI,GAAoBxG,KAAK0F,mBAAmB,uBAAwBc,KAGjF3I,EAAAA,cAACyI,EAAAA,EAAiB,CAChB7N,QAASuH,KAAKb,MAAMuH,mBACpBD,YAAY,aACZD,gBAAiBxG,KAAKS,MAAMiO,gBAC5BzQ,SAAWuI,GAAoBxG,KAAK0F,mBAAmB,kBAAmBc,OAKhF3I,EAAAA,cAAA,OAAKC,UAAU,aAAaM,MAAO,CAAEmR,eAAgB,SAAUC,aAAc,UAC1ExP,KAAKS,MAAMiO,gBAAgBxR,OAAS,GAAK8C,KAAKS,MAAMiO,gBAAgBpQ,KAAI,CAACmR,EAAwBhR,IAChGZ,EAAAA,cAAA,KAAGxB,IAAKoC,EAAOgB,QAASA,KACtB,MAAMiQ,EAAwB1P,KAAKS,MAAMiO,gBAAgB/S,QAAOgU,GAAMA,IAAOF,IAC7EzP,KAAK0F,mBAAmB,kBAAmBgK,EAAsB,EAChE5R,UAAU,qBAAqB2R,EAAuB,oBAG1DzP,KAAKS,MAAM+N,sBAAsBtR,OAAS,GAAK8C,KAAKS,MAAM+N,sBAAsBlQ,KAAI,CAACsR,EAA6BnR,IACjHZ,EAAAA,cAAA,KAAGxB,IAAKoC,EAAOgB,QAASA,KACtB,MAAMoQ,EAA6B7P,KAAKS,MAAM+N,sBAAsB7S,QAAOmU,GAAOA,IAAQF,IAC1F5P,KAAK0F,mBAAmB,wBAAyBmK,EAA2B,EAC3E/R,UAAU,qBAAqB8R,EAA4B,oBAG/D5P,KAAKS,MAAMgO,qBAAqBvR,OAAS,GAAK8C,KAAKS,MAAMgO,qBAAqBnQ,KAAI,CAACyR,EAA4BtR,IAC9GZ,EAAAA,cAAA,KAAGxB,IAAKoC,EAAOgB,QAASA,KACtB,MAAMuQ,EAA4BhQ,KAAKS,MAAMgO,qBAAqB9S,QAAOsL,GAAMA,IAAO8I,IACtF/P,KAAK0F,mBAAmB,uBAAwBsK,EAA0B,EACzElS,UAAU,qBAAqBiS,EAA2B,qBAMzE,CAGA3N,MAAAA,GACE,OAAOvE,EAAAA,cAAAA,EAAAA,SAAA,KACLA,EAAAA,cAAA,OAAKC,UAAU,kBACbD,EAAAA,cAAA,OAAKC,UAAU,aACbD,EAAAA,cAAA,OAAKC,UAAU,mBACbD,EAAAA,cAAA,OAAKC,UAAU,2BACbD,EAAAA,cAAA,MAAIC,UAAU,yBAA+C,SAAtBkC,KAAKb,MAAM4D,QAAqB,UAAY,GAAG,yCACrF,MACC,GAA8B,gBAA1B/C,KAAKb,MAAM+P,aAAuD,QAAtBlP,KAAKb,MAAM4D,QACzD,OAAQlF,EAAAA,cAAA,OAAKC,UAAU,eACrBD,EAAAA,cAAA,QAAMC,UAAU,8CAA6C,kTAKlE,EARA,IAUHD,EAAAA,cAAA,OAAKC,UAAU,aAAaM,MAAO,CAAC+J,MAAO,UACzCtK,EAAAA,cAAA,SAAOE,KAAK,OAAOuC,KAAK,SAASmG,YAAY,UAAU3I,UAAU,eAAeG,SAAUC,GAAK8B,KAAKO,SAAS,CAAE6D,OAAQlG,EAAEC,OAAOkK,OAASrI,KAAK8E,kBAIjJ9E,KAAKoG,aACL,KAC+B,gBAA1BpG,KAAKb,MAAM+P,YAEXrR,EAAAA,cAAA,SAAOC,UAAU,gBACfD,EAAAA,cAAA,aACEA,EAAAA,cAAA,UACEA,EAAAA,cAAA,MACExB,IAAI,eACJ4T,QAAQ,IACRnS,UAAU,4DACVqK,MAAM,MACN1I,QAASA,IAAMO,KAAKO,SAAS,CAC3B+C,QAAS,eACTC,QAA+B,OAAtBvD,KAAKS,MAAM8C,QAAmB,OAAS,MAChDC,aAAcxD,KAAKoO,eAAe,eAAsC,OAAtBpO,KAAKS,MAAM8C,QAAmB,OAAS,UAG5F,eAAY1F,EAAAA,cAAA,OAAKuM,IAAKpK,KAAKgE,UAAU,gBAAiBkM,OAAO,KAAK/H,MAAM,QACzEtK,EAAAA,cAAA,MAAIxB,IAAI,oBAAoBkC,QAAQ,IAClCT,UAAU,4DACVqK,MAAM,MACN1I,QAASA,KACP,IAAI0Q,EAAa,+BACjBnQ,KAAKO,SAAS,CACd+C,QAAS6M,EACT5M,QAA+B,OAAtBvD,KAAKS,MAAM8C,QAAmB,OAAS,MAChDC,aAAcxD,KAAKoO,eAAe+B,EAAmC,OAAtBnQ,KAAKS,MAAM8C,QAAmB,OAAS,QACpF,GAEL,oBAEC1F,EAAAA,cAAA,OAAKuM,IAAKpK,KAAKgE,UAAU,gCAAiCkM,OAAO,KAAK/H,MAAM,OAC5EtK,EAAAA,cAAA,OAAKC,UAAU,cAAcM,MAAO,CAACC,WAAY,MAAO+R,UAAW,UACjEvS,EAAAA,cAAA,QAAMC,UAAU,yBAAwB,sBAK5CD,EAAAA,cAAA,MAAIsK,MAAM,MAAM9L,IAAI,mBAAmB4T,QAAQ,IAAInS,UAAU,oDAAmD,mBAChHD,EAAAA,cAAA,MAAIxB,IAAI,cAAckC,QAAQ,IAAIT,UAAU,mDAAmDM,MAAO,CAACI,UAAW,WAAa,qBAC/HX,EAAAA,cAAA,MAAIxB,IAAI,mBAAmBkC,QAAQ,IAAIT,UAAU,mDAAmDM,MAAO,CAACI,UAAW,WAAY,qBAErIX,EAAAA,cAAA,UACEA,EAAAA,cAAA,MAAIC,UAAU,qCAAqCM,MAAO,CAACI,UAAW,OAAQmE,SAAU,SAAS,SACjG9E,EAAAA,cAAA,MAAIC,UAAU,qCAAqCM,MAAO,CAACI,UAAW,OAAQmE,SAAU,SAAS,QACjG9E,EAAAA,cAAA,MAAIC,UAAU,qCAAqCM,MAAO,CAACI,UAAW,OAAQmE,SAAU,SAAS,SACjG9E,EAAAA,cAAA,MAAIC,UAAU,qCAAqCM,MAAO,CAACI,UAAW,OAAQmE,SAAU,SAAS,QACjG9E,EAAAA,cAAA,MAAIC,UAAU,qCAAqCM,MAAO,CAACI,UAAW,OAAQmE,SAAU,SAAS,SACjG9E,EAAAA,cAAA,MAAIC,UAAU,qCAAqCM,MAAO,CAACI,UAAW,OAAQmE,SAAU,SAAS,UAGrG9E,EAAAA,cAAA,aACGmC,KAAKS,MAAM+C,aAAalF,KAAI,CAACuJ,EAAK5K,IAC1BY,EAAAA,cAAA,MAAIxB,IAAM,+BAA8BY,KAC7CY,EAAAA,cAAA,UACGgK,EAAImH,aACLnR,EAAAA,cAAA,WAAKA,EAAAA,cAAA,KAAGM,OAAO,SAASuD,KAAMmG,EAAIwI,uBAAuB,gBAAaxS,EAAAA,cAAA,WAAS,iBAEjFA,EAAAA,cAAA,UACEA,EAAAA,cAAA,OAAKC,UAAY,wBAAuB+J,EAAIyI,kCAAkCzS,EAAAA,cAAA,OAAKC,UAAU,yBAAyB+J,EAAI0I,gCACzH1I,EAAI2I,8BAAgCxQ,KAAKb,MAAMsR,4BAC9C5S,EAAAA,cAAA,OAAKC,UAAU,QAAOD,EAAAA,cAAA,KAAGM,OAAO,SAASuD,KAAMmG,EAAI2I,6BAA8B/Q,QAASA,IAAM5H,UAAUL,MAAM,+BAAgC,CAAEkZ,KAAM9Y,OAAO6J,SAASC,KAAMiP,OAAQ,oBAAqB3B,aAAcnH,EAAI+I,kBAAmBC,cAAehJ,EAAIiJ,MAAOC,gBAAiBlJ,EAAI6G,gBAAiBsC,IAAKnJ,EAAI0I,iCAAkC,aAG/V1S,EAAAA,cAAA,UACEA,EAAAA,cAAA,OAAKC,UAAY,wBAAuB+J,EAAIoJ,iCAAiCpT,EAAAA,cAAA,OAAKC,UAAU,yBAAyB+J,EAAIqJ,+BACxHrJ,EAAIsJ,6BAA+BnR,KAAKb,MAAMsR,4BAC7C5S,EAAAA,cAAA,OAAKC,UAAU,QAAOD,EAAAA,cAAA,KAAGM,OAAO,SAASuD,KAAMmG,EAAIsJ,4BAA6B1R,QAASA,IAAM5H,UAAUL,MAAM,+BAAgC,CAAEkZ,KAAM9Y,OAAO6J,SAASC,KAAMiP,OAAQ,oBAAqB3B,aAAcnH,EAAI+I,kBAAkBC,cAAehJ,EAAIiJ,MAAOC,gBAAiBlJ,EAAI6G,gBAAiBsC,IAAKnJ,EAAIqJ,gCAAkC,aAG7VrT,EAAAA,cAAA,UAAKgK,EAAI6G,iBACT7Q,EAAAA,cAAA,UAAKgK,EAAIsH,6BAA+B,OACxCtR,EAAAA,cAAA,UAAKgK,EAAIuH,4BAA8B,OACvCvR,EAAAA,cAAA,UAAKgK,EAAI+G,iCAAmC,OAC5C/Q,EAAAA,cAAA,UAAKgK,EAAIiH,gCAAkC,YAQnDjR,EAAAA,cAAA,SAAOC,UAAU,gBACfD,EAAAA,cAAA,aACEA,EAAAA,cAAA,UACEA,EAAAA,cAAA,MACExB,IAAI,eACJ4T,QAAQ,IACRnS,UAAU,4DACVqK,MAAM,MACN1I,QAASA,IAAMO,KAAKO,SAAS,CAC3B+C,QAAS,eACTC,QAA+B,OAAtBvD,KAAKS,MAAM8C,QAAmB,OAAS,MAChDC,aAAcxD,KAAKoO,eAAe,eAAsC,OAAtBpO,KAAKS,MAAM8C,QAAmB,OAAS,UAG5F,eAAY1F,EAAAA,cAAA,OAAKuM,IAAKpK,KAAKgE,UAAU,gBAAiBkM,OAAO,KAAK/H,MAAM,QACzEtK,EAAAA,cAAA,MAAIxB,IAAI,oBAAoBkC,QAAQ,IAClCT,UAAU,4DACVqK,MAAM,MACN1I,QAASA,KACP,IAAI0Q,EAAqC,SAAvBnQ,KAAKb,MAAM4D,QAAsB,+BAAiC,gCACpF/C,KAAKO,SAAS,CACd+C,QAAS6M,EACT5M,QAA+B,OAAtBvD,KAAKS,MAAM8C,QAAmB,OAAS,MAChDC,aAAcxD,KAAKoO,eAAe+B,EAAmC,OAAtBnQ,KAAKS,MAAM8C,QAAmB,OAAS,QACpF,GAEL,oBAEC1F,EAAAA,cAAA,OAAKuM,IAAKpK,KAAKgE,UAAkC,SAAvBhE,KAAKb,MAAM4D,QAAsB,+BAAiC,iCAAkCmN,OAAO,KAAK/H,MAAM,OAC/I,MACC,GAA2B,SAAvBnI,KAAKb,MAAM4D,QACb,OACElF,EAAAA,cAAA,OAAKC,UAAU,cAAcM,MAAO,CAACC,WAAY,MAAO+R,UAAW,UACjEvS,EAAAA,cAAA,QAAMC,UAAU,yBAAwB,oBAM/C,EAVA,IAaHD,EAAAA,cAAA,MAAIC,UAAU,mDAAmDmS,QAAQ,IAAI9H,MAAM,OACjFtK,EAAAA,cAAA,YAAM,mBAGNA,EAAAA,cAAA,OAAKC,UAAU,cAAcM,MAAO,CAACC,WAAY,QAAS+R,UAAW,UACnEvS,EAAAA,cAAA,QAAMC,UAAU,yBAAyB,2BACdkC,KAAKb,MAAMqF,WAAW,sCAIrD3G,EAAAA,cAAA,MAAIxB,IAAI,cAAcyB,UAAU,mDAAmDmS,QAAQ,KAAI,gBAEhG,MACC,GAA2B,SAAvBjQ,KAAKb,MAAM4D,QACb,OACElF,EAAAA,cAAA,UACEA,EAAAA,cAAA,MAAIC,UAAU,qCAAqCM,MAAO,CAACI,UAAW,OAAQmE,SAAU,SAAS,SACjG9E,EAAAA,cAAA,MAAIC,UAAU,qCAAqCM,MAAO,CAACI,UAAW,OAAQmE,SAAU,SAAS,QAIxG,EATA,IAWH9E,EAAAA,cAAA,aACGmC,KAAKS,MAAM+C,aAAalF,KAAI,CAACuJ,EAAK5K,IAC1BY,EAAAA,cAAA,MAAIxB,IAAM,+BAA8BY,KAC7CY,EAAAA,cAAA,UAAKgK,EAAImH,cACTnR,EAAAA,cAAA,UACEA,EAAAA,cAAA,OAAKC,UAAY,wBAAuB+J,EAAIyI,kCAAkCzS,EAAAA,cAAA,OAAKC,UAAU,yBAAyB+J,EAAI0I,gCACzH1I,EAAI2I,8BAAgCxQ,KAAKb,MAAMsR,4BAC9C5S,EAAAA,cAAA,OAAKC,UAAU,QAAOD,EAAAA,cAAA,KAAGM,OAAO,SAASuD,KAAMmG,EAAI2I,6BAA8B/Q,QAASA,IAAM5H,UAAUL,MAAM,+BAAgC,CAAEkZ,KAAM9Y,OAAO6J,SAASC,KAAMiP,OAAQ,oBAAqB3B,aAAcnH,EAAI+I,kBAAkBC,cAAehJ,EAAIiJ,MAAOC,gBAAiBlJ,EAAI6G,gBAAiBsC,IAAKnJ,EAAI0I,iCAAkC,aAG9V1S,EAAAA,cAAA,UACEA,EAAAA,cAAA,OAAKC,UAAY,wBAAuB+J,EAAIoJ,iCAAiCpT,EAAAA,cAAA,OAAKC,UAAU,yBAAyB+J,EAAIqJ,+BACxHrJ,EAAIsJ,6BAA+BnR,KAAKb,MAAMsR,4BAC7C5S,EAAAA,cAAA,OAAKC,UAAU,QAAOD,EAAAA,cAAA,KAAGM,OAAO,SAASuD,KAAMmG,EAAIsJ,4BAA6B1R,QAASA,IAAM5H,UAAUL,MAAM,+BAAgC,CAAEkZ,KAAM9Y,OAAO6J,SAASC,KAAMiP,OAAQ,oBAAqB3B,aAAcnH,EAAI+I,kBAAkBC,cAAehJ,EAAIiJ,MAAOC,gBAAiBlJ,EAAI6G,gBAAiBsC,IAAKnJ,EAAIqJ,gCAAiC,aAG5VrT,EAAAA,cAAA,UACEA,EAAAA,cAAA,OAAKC,UAAU,OACbD,EAAAA,cAAA,OAAKC,UAAU,aACbD,EAAAA,cAAA,YAAOgK,EAAIuJ,0BACXvT,EAAAA,cAAA,OAAKC,UAAU,QAAOD,EAAAA,cAAA,KAAGM,OAAO,SAASuD,KAAMmG,EAAIwI,uBAAwB,+BAIjFxS,EAAAA,cAAA,UAAKgK,EAAIoH,aA3KtB,KAsLT,EAGF,S,iFC3Ve,MAAMoC,UAAqBxT,EAAAA,UACxCyT,QAAAA,CAASpT,GAKP,GAJAA,EAAEqT,kBAIGrT,EAAEC,OAAOqT,MAAM,GAAM,OAEtBxR,KAAKb,MAAMsS,2BACbzR,KAAKb,MAAMsS,0BAA0B,GAGvC,MAAMC,EAAW,IAAIC,SACrBD,EAASE,OAAO5R,KAAKb,MAAMmB,KAAMpC,EAAEC,OAAOqT,MAAM,IAChDtV,OAAO2V,QAAQ7R,KAAKb,MAAM2S,WAAa,CAAC,GAAGlV,SAAQ,EAAEP,EAAK0V,KAASL,EAASE,OAAOvV,EAAK0V,KACxF,MAAMC,EAAgB9T,EAAEC,OAAOqT,MAAM,GAAGlR,KAExC2R,EAAAA,EAAMpZ,KACJmH,KAAKb,MAAM+S,eACXR,EACAS,IAAAA,oBAAiC,CAC/B,eAAgB,sBAChB,OAAU,sBAEZnJ,MAAKoJ,IACDpS,KAAKb,MAAMkT,WACbrS,KAAKb,MAAMkT,UAAUD,EAAS1a,MAG5BsI,KAAKb,MAAMsS,2BACbzR,KAAKb,MAAMsS,2BAA2B,GAGxCa,MAAO,GAAEN,cAA0B,IAClCO,OAAMC,IAQP,MAPAC,QAAQD,MAAMA,GAEVxS,KAAKb,MAAMsS,2BACbzR,KAAKb,MAAMsS,2BAA2B,GAGxCa,MAAO,iDAAgDN,MACjDQ,CAAK,GAEf,CAEApQ,MAAAA,GACE,OACEvE,EAAAA,cAAA,YACImC,KAAKb,MAAMuT,cAAgB1S,KAAKb,MAAMuT,aAAe,EAAM,KAAI1S,KAAKb,MAAMuT,0BAA4B,GACxG7U,EAAAA,cAAA,YACEA,EAAAA,cAAA,SAAO8U,MAAM,cAAc5U,KAAK,OAAOE,SAAU+B,KAAKsR,SAASsB,KAAK5S,SAI5E,E,wEC9CF,MAAM6S,EAAkB1T,IACtB,MACE2T,EAME3T,EANF2T,aACAjS,EAKE1B,EALF0B,eACAkS,EAIE5T,EAJF4T,cACA1T,EAGEF,EAHFE,SACAI,EAEEN,EAFFM,QACAiC,EACEvC,EADFuC,KAGF,OAAQxD,IAIN,GAHAA,EAAE8U,kBACF9U,EAAEqT,iBAEElS,EAAW,OAAO,KAEtB,MAAM4T,EAASxT,EAAU,IAAMA,EAAQvB,GAAK,KAAWwD,IAAQ9J,OAAO6J,SAASC,KAAOA,EAAM,EAExFoR,GAAgBjS,EAClBjJ,OAAOsb,iBAAiB,CACtBC,QAAStS,EACTuS,SAAUH,EACV5J,MAAOyJ,EACPO,QAASN,IAGXE,GACF,CACD,EAyDH,EAtCmB9T,IACjB,MAAAmU,EAcInU,EAbFrB,UAAAA,OAAS,IAAAwV,EAAG,GAAEA,EAAAC,EAaZpU,EAZFqU,YAAAA,OAAW,IAAAD,GAAQA,EAAAnU,EAYjBD,EAXFE,SAAAA,OAAQ,IAAAD,GAAQA,EAAAqU,EAWdtU,EAVFuU,MAAAA,OAAK,IAAAD,GAAQA,EAAAE,EAUXxU,EATFyU,QAAAA,OAAO,IAAAD,GAAQA,EACfE,EAQE1U,EARF0U,YACAvT,EAOEnB,EAPFmB,KACAoB,EAMEvC,EANFuC,KACAjC,EAKEN,EALFM,QACAsT,EAIE5T,EAJF4T,cACAD,EAGE3T,EAHF2T,aACAjS,EAEE1B,EAFF0B,eACAiT,EACE3U,EADF2U,UAGF,OACEjW,EAAAA,cAAA,OAAKC,UAAW4B,EAAW,aAAc5B,EAAW,CAAEuB,WAAUmU,cAAaE,WACzEE,EACA/V,EAAAA,cAAA,QAAMC,UAAU,eACdD,EAAAA,cAACkW,EAAAA,EAAiB,MACjBF,GAGHhW,EAAAA,cAAA,KACE,aAAYiW,EACZpS,KAAK,IACLjC,QAASoT,EAAe,CAAEnR,OAAMjC,UAASJ,WAAUyT,eAAcjS,iBAAgBkS,kBACjFjV,UAAU,eAETwC,GAGD,C,klCC5FV,MAAM0T,EAAsBA,EAAGC,SAAQC,cACrC,MAAiDja,EAAAC,GAAfC,EAAAA,EAAAA,WAAS,GAAM,GAA1C0R,EAAS5R,EAAA,GAAEka,EAAYla,EAAA,GAc9B,OACE4D,EAAAA,cAAA,OAAKC,UAAU,yBACbD,EAAAA,cAAA,OAAKC,UAAU,0BAA0B2B,QAdzB2U,KAClBD,GAActI,EAAU,GAcpBhO,EAAAA,cAAA,OAAKC,UAAW,2BACdD,EAAAA,cAAA,KAAGC,UAAW+N,EAAY,2BAA6B,+BAEzDhO,EAAAA,cAAA,OAAKC,UAAU,gCAAgCmW,KAE/CpI,GAAahO,EAAAA,cAAA,OAAKC,UAAU,4BAd9B,CAAKoW,GAAUG,OAAO/V,KAAKJ,GAClBL,EAAAA,cAAA,OAAKxB,IAAK6B,EAAE7B,IAAKyB,UAAU,iCAAiCI,EAAEgW,YAcnE,EAIV,EAAe/U,GAAStB,EAAAA,cAACmW,EAAwB7U,E,6DC1BjD,MAmDA,EA9B8BmV,EAC5BC,gBACAC,oBACAnV,WACAoV,WACAC,aAEA7W,EAAAA,cAAA,OAAKC,UAAU,2BACX4W,EAAQpW,KAAI,EAAG+J,QAAOhJ,WAAUgK,WAChCxL,EAAAA,cAAA,KACEC,UACE4B,EACE,yBACA,CACE,SAAYL,GAAYA,EACxB,SAAYgJ,IAAUkM,EACtB,CAACC,GAAoBnM,IAAUkM,IAIrClY,IAAKgM,EACLA,MAAOA,EACP3G,KAAK,IACLjC,QAAUvB,GA5CIyW,EAACzW,GACrBmK,QACAkM,gBACAE,WACAD,wBAIA,IAAII,EAUJ,OAZA1W,EAAEqT,iBAIAqD,EADa,gCAAVvM,GAA4CkM,IAAkBlM,GAExDkM,IAAkBlM,GAA+B,cAAtBmM,EADxB,aAIA,YAGdC,EAASpM,EAAOuM,IACT,CAAK,EA0BUD,CAAczW,EAAG,CAACmK,QAAOkM,gBAAeE,WAAUD,uBAChE3W,EAAAA,cAAA,QAAMC,UAAU,qBAAqBuL,M,ynCCpC/C,MAAMwL,EAAmB,CACvB,CACExL,MAAO,qBACPyL,OAAQ,yBACRC,WAAY,2BACZC,YAAa,GAEf,CACE3L,MAAO,kBACPyL,OAAQ,sBACRC,WAAY,wBACZC,YAAa,GAEf,CACE3L,MAAO,uBACPyL,OAAQ,2BACRC,WAAY,6BACZC,YAAa,GAEf,CACE3L,MAAO,0BACPyL,OAAQ,qBACRC,WAAY,uBACZE,WAAaC,GAAwB,OAAZA,EACzBF,YAAa,GAEf,CACE3L,MAAO,4BACPyL,OAAQ,kBACRC,WAAY,wBACZC,YAAa,GAEf,CACE3L,MAAO,uBACPyL,OAAQ,0BACRC,WAAY,6BACZC,YAAa,GAEf,CACE3L,MAAO,iBACPyL,OAAQ,qBACRC,WAAY,uBACZC,YAAa,GAEf,CACE3L,MAAO,SACPyL,OAAQ,aACRC,WAAY,gBACZC,YAAa,GAEf,CACE3L,MAAO,4BACP8L,SAAWC,GAAiBvX,EAAAA,cAAA,SAAOO,MAAO,CAACuE,SAAU,QAA0B,IAAjByS,EAAqB,0BAA4B,IAC/GN,OAAQ,+BACRC,WAAY,iCACZC,YAAa,GAEf,CACE3L,MAAO,oBACPyL,OAAQ,wBACRC,WAAY,0BACZC,YAAa,GAEf,CACE3L,MAAO,aACPyL,OAAQ,iBACRC,WAAY,mBACZC,YAAa,GAEf,CACE3L,MAAO,0BACPyL,OAAQ,qBACRC,WAAY,uBACZE,WAAaC,GAAwB,OAAZA,EACzBF,YAAa,IAIF,MAAMK,UAAgBxX,EAAAA,UASnCgC,WAAAA,CAAYV,EAAO+V,GACjBpV,MAAMX,EAAO+V,GAAS,KA6BxBI,oBAAuBC,IACrB,IAAIC,EAAsBxV,KAAKb,MAAMqW,oBACjCC,EAAe,GACfC,EAAc,CAAC,EAKnB,OAJAxZ,OAAOC,KAAKqZ,GAAqB5Y,SAASP,IACxCoZ,EAAeA,EAAalH,OAAOiH,EAAoBnZ,GAAKkZ,GAAY,IAE1EE,EAAa7Y,SAAQ,SAASK,GAAKyY,EAAYzY,IAAMyY,EAAYzY,IAAI,GAAK,CAAE,IACrEf,OAAOC,KAAKuZ,GAAapX,KAAMqX,GAAM,CAAE,GAAEA,MAAMD,EAAYC,MAAOA,KAAIjS,MAAM,EA6CrF,KACAkS,gBAAkB,KAChB,IAAInV,EAAQoV,QAAQpV,MAIpB,OAHc,OAAVA,IACFA,EAAQ,CAAC,IAEJqV,EAAAA,EAAAA,MAAKrV,EAAO,CAAC,cAAe,gBAAiB,YAAa,gBAAiB,aAAc,gBAAiB,wBAAwB,EACzI,KAEFsV,gBAAkB,KAChB,IAAIC,EAAeH,QAAQpV,MACvBwV,GAAaH,EAAAA,EAAAA,MAAK9V,KAAKS,MAAO,CAAC,cAAe,gBAAiB,YAAa,gBAAiB,aAAc,gBAAiB,yBAC5HyV,GAAWC,EAAAA,EAAAA,QAAOH,EAAcC,GAEpCJ,QAAQO,aAAaF,EAAUlU,SAASqH,MAAM,EAC9C,KAEFgN,mBAAsBnY,IACpB8B,KAAKO,SAAS,CAAC+V,YAAapY,EAAEC,OAAOkK,MACtBkO,aAAc,KACdC,gBAAgB,EAChBC,WAAY,IACvBzW,KAAKS,MAAMiW,aAAeC,aAAa3W,KAAKS,MAAMiW,aACtD1W,KAAKO,SAAS,CAACmW,YAAaE,WAAW5W,KAAK6W,sBAAuB,MAAO,EAC1E,KAEFC,qBAAwB5Y,IACtB8B,KAAKO,SAAS,CAACwW,cAAe7Y,EAAEC,OAAOkK,MACxBkO,aAAc,KACdC,gBAAgB,EAChBC,WAAY,IACvBzW,KAAKS,MAAMuW,eAAiBL,aAAa3W,KAAKS,MAAMuW,eACxDhX,KAAKO,SAAS,CAACyW,cAAeJ,WAAW5W,KAAK6W,sBAAuB,MAAO,EAC5E,KAEFI,qBAAwB/Y,IACR,UAAVA,EAAE7B,KACJ6B,EAAEqT,gBACJ,EACA,KAEFsF,sBAAwB,KAEtB7W,KAAKkX,iBACLlX,KAAKO,SAAS,CAAC4W,MAAO,MAAM,EAC5B,KAEFC,WAAa,CAACC,EAAcC,KAC1BtX,KAAKO,SAAS,CAAEgX,UAAWF,EACXG,cAAeF,EACff,aAAc,KACdC,gBAAgB,EAChBC,WAAY,GAAKzW,KAAKkX,iBAC/B,GACP,KAEFxR,mBAAqB,CAAC+R,EAAMC,IACnB,SAASC,GACd,IAAIC,EAAWD,EAAUxZ,OAAOkK,MAE5BwP,EAAuBJ,EAAKhX,MAAMqX,cAClCC,EAAmB,CAAC,EACxB,IAAK,IAAIC,KAAQH,EACXG,GAAQN,IACVK,EAAiBC,GAAQH,EAAqBG,IAIlC,OAAZJ,IACFG,EAAiBL,GAAUE,GAG7BH,EAAKlX,SAAS,CAAEuX,cAAeC,EACfxB,aAAc,KACdC,gBAAgB,EAChBC,WAAY,GAAKgB,EAAKP,eACxC,EACA,KAEFe,0BAA4B,CAACC,EAAmB3C,KAC9C,IAAIC,EAAsBxV,KAAKb,MAAMqW,oBACjCC,EAAe,GACf0C,EAAe,GACfzC,EAAc,CAAC,EAenB,OAdAxZ,OAAOC,KAAKqZ,GAAqB5Y,SAASP,IACrC6b,EAAkB/S,SAAS9I,GAC5BoZ,EAAeA,EAAalH,OAAOiH,EAAoBnZ,GAAKkZ,IAG5D4C,EAAeA,EAAa5J,OAAOiH,EAAoBnZ,GAAKkZ,GAC9D,IAEFE,EAAa7Y,SAAQ,SAASK,GAAKyY,EAAYzY,IAAMyY,EAAYzY,IAAI,GAAK,CAAE,IAC5Ekb,EAAavb,SAAQ,SAASK,GACxBwY,EAAatQ,SAASlI,KACxByY,EAAYzY,GAAK,EAErB,IACOf,OAAOC,KAAKuZ,GAAapX,KAAMqX,GAAM,CAAE,GAAEA,MAAMD,EAAYC,MAAOA,KAAIjS,MAAM,EACpF,KAED0U,iBAAoBC,IAClB,IAAI7C,EAAsBxV,KAAKb,MAAMqW,oBACjC8C,GAAYC,EAAAA,EAAAA,WAAU1D,EAAiBvW,KAAKka,GAAkB,CAACA,EAAc1D,OAAQ0D,EAAcnP,UAEnGoP,EAAgB,GAChBC,EAAoB,CAAC,EACrBR,EAAoB,GAuBxB,OAtBAhc,OAAOC,KAAKkc,GAAyBzb,SAASP,IAC5CH,OAAOC,KAAKqZ,GAAqB5Y,SAAS2M,IACrChN,MAAMC,QAAQgZ,EAAoBjM,GAAY+O,EAAUjc,OACtDE,MAAMC,QAAQ6b,EAAwBhc,IACpCgc,EAAwBhc,GAAK4I,MAAM0T,GAASnD,EAAoBjM,GAAY+O,EAAUjc,IAAM8I,SAASwT,MACtGF,EAAchc,KAAK8M,GAGlBiM,EAAoBjM,GAAY+O,EAAUjc,IAAM8I,SAASkT,EAAwBhc,KAClFoc,EAAchc,KAAK8M,GAGzB,GACA,IAEJkP,EAAc7b,SAAQ,SAASK,GAAKyb,EAAkBzb,IAAMyb,EAAkBzb,IAAI,GAAK,CAAE,IACzFf,OAAOC,KAAKuc,GAAmB9b,SAASP,IACnCqc,EAAkBrc,IAAMH,OAAOC,KAAKkc,GAAyBnb,QAC9Dgb,EAAkBzb,KAAKJ,EACzB,IAGK6b,CAAiB,EACzB,KAEDU,wBAA0B,CAACP,EAAyBQ,EAAgBnB,EAAQE,KAC1E,IAAIU,GAAYC,EAAAA,EAAAA,WAAU1D,EAAiBvW,KAAKka,GAAkB,CAACA,EAAc1D,OAAQ,CAAC0D,EAAcnP,MAAOmP,EAAczD,gBAE7H,MAAM+D,EAAqB9Y,KAAKS,MAAMsY,gBAAgBT,EAAUZ,GAAQ,IAAIsB,MAAKC,GAAKA,EAAE,KAAOrB,MAAY,IAAM,MAC3GlC,EAAcwD,SAASJ,EAAmBK,UAC9CL,EAAmB5P,QAAQ,KAAO,EAClC4P,EAAmBM,YAAY,QAC3B,EACN,IAAIC,EAAmB,CAAC,EAExB,GAA2C,IAAvCnd,OAAOC,KAAK0c,GAAgB3b,OAC9Bmc,EAAiBf,EAAUZ,GAAQ,IAAM1X,KAAKsV,oBAAoBgD,EAAUZ,GAAQ,QAC/E,CACL,MAAM4B,EAAyBtZ,KAAKoY,iBAAiBS,GACrDQ,EAAiBf,EAAUZ,GAAQ,IAAM1X,KAAKiY,0BAA0BqB,EAAwBhB,EAAUZ,GAAQ,GACpH,CAEA,GAAoB,IAAhBhC,GAAgC,QAAXkC,EAAkB,CACzC,MAAM2B,EAAmBrd,OAAOC,KAAK6D,KAAKb,MAAMqW,4BAEzC8C,EAAUZ,GACjBxb,OAAOC,KAAKmc,GAAW1b,SAAQP,IAC7B,IAAImd,EAAkBtd,OAAOia,OAAO,CAAC,EAAGkC,UACjCmB,EAAgBnd,GACvB,MAAM6b,EAA4D,IAAxChc,OAAOC,KAAKqd,GAAiBtc,OAAeqc,EAAmBvZ,KAAKoY,iBAAiBoB,GAC/GH,EAAiBf,EAAUjc,GAAK,IAAM2D,KAAKiY,0BAA0BC,EAAmBI,EAAUjc,GAAK,GAAG,GAE9G,MACEgd,EAAgB3gB,EAAAA,EAAA,GAAQsH,KAAKS,MAAMsY,eAAiBM,GAEtDrZ,KAAKO,SAAS,CAACwY,cAAeM,GAAkB,EACjD,KAEDI,0BAA4B,CAAChC,EAAMC,IAC1B,SAASC,GACd,IAAIC,EAEFA,EADCrb,MAAMC,QAAQmb,GACJA,EAAUrZ,KAAKyG,GAASA,EAAKsD,QAE7BsP,GAAWtP,OAAS,MAEjC,IAAIqR,EAA8BjC,EAAKhX,MAAMkZ,qBACzCC,EAAkBnC,EAAKhX,MAAMkZ,qBAC9Bzd,OAAOC,KAAKyd,GAAiBzU,SAASuS,WAChCkC,EAAgBlC,GAEzB,IAAIW,EAA0B,CAAC,EAC/B,IAAK,IAAIL,KAAQ0B,EACX1B,GAAQN,IACVW,EAAwBL,GAAQ0B,EAA4B1B,IAIhD,OAAZJ,IACFS,EAAwBX,GAAUE,GAGc,IAAhD1b,OAAOC,KAAKkc,GAAyBnb,QAAiBhB,OAAO0J,OAAOyS,GAAyBwB,OAAMC,GAAKvd,MAAMC,QAAQsd,GAAKA,EAAE3U,SAAS,OAAW,OAAH2U,IAC9IrC,EAAKlX,SAAS,CACZwY,eAAeR,EAAAA,EAAAA,WAAU1D,EAAiBvW,KAAKka,GAAkB,CAACA,EAAczD,WAAY0C,EAAKnC,oBAAoBkD,EAAcnP,aAGlI9M,MAAMC,QAAQob,GACfA,EAAStZ,KAAKyb,GAAOtC,EAAKmB,wBAAwBP,EAAwBuB,EAAgBlC,EAAOqC,KAEjGtC,EAAKmB,wBAAwBP,EAAwBuB,EAAgBlC,EAAOE,GAIhFH,EAAKlX,SAAS,CACZoZ,qBAAsBtB,EACtB9B,aAAc,KACdC,gBAAgB,EAChBC,WAAY,GAAKgB,EAAKP,eAE1B,EACA,KAEF8C,0BAA4B,CAACvC,EAAMC,IAC1B,SAASC,GACd,IAAIC,EAAWD,EAAUxZ,OAAOkK,MAE5B4R,EAA8BxC,EAAKhX,MAAMyZ,qBACzCC,EAA0B,CAAC,EAC/B,IAAK,IAAInC,KAAQiC,EACXjC,GAAQN,IACVyC,EAAwBnC,GAAQiC,EAA4BjC,IAIhD,OAAZJ,IACFuC,EAAwBzC,GAAUE,GAGpCH,EAAKlX,SAAS,CAAE2Z,qBAAsBC,EACtB5D,aAAc,KACdC,gBAAgB,EAChBC,WAAY,GAAKgB,EAAKP,eACxC,EACA,KAEFkD,UAAY,KACVpa,KAAKO,SAAS,CAAEkW,WAAYzW,KAAKS,MAAMgW,WAAa,EACpCD,gBAAgB,GAAOxW,KAAKqa,kBAAkB,EAC9D,KAEFC,uBAAyB,KACvB,MAAM3B,EAAO3W,SAASuY,eAAeva,KAAKS,MAAM+Z,cAE5C7B,GCzaD,SAAsB8B,GAC3B,IAAKA,EAAK,OAAO,EACjB,IAAIC,EAAOD,EAAIE,wBACXC,EAAanQ,KAAKoQ,IAAI7Y,SAAS8Y,gBAAgBC,aAAcnjB,OAAOojB,aACxE,QAASN,EAAKO,OAAS,GAAKP,EAAKQ,IAAMN,GAAc,EACvD,CDqaUO,CAAaxC,IACf3Y,KAAKoa,WAET,EACD,KAEDgB,aAAe,KACb,IAAI1jB,EAAO,CAAC,EAERsI,KAAKb,MAAM4G,MACbrO,EAAKqO,IAAM/F,KAAKb,MAAM4G,KAGpB/F,KAAKb,MAAMkc,SACb3jB,EAAK4jB,QAAUtb,KAAKb,MAAMkc,QAGxBrb,KAAKS,MAAM6V,aAA2C,KAA3BtW,KAAKS,MAAM6V,cACxC5e,EAAK0M,OAASpE,KAAKS,MAAM6V,aAGvBtW,KAAKS,MAAMsW,eAA+C,KAA7B/W,KAAKS,MAAMsW,gBAC1Crf,EAAK6jB,UAAYvb,KAAKS,MAAMsW,eAG1B/W,KAAKS,MAAM8W,YACb7f,EAAK8jB,WAA2C,eAA7Bxb,KAAKS,MAAM+W,cAAkC,OAAS,MACzE9f,EAAK+jB,QAAUzb,KAAKS,MAAM8W,WAIxBvX,KAAKS,MAAMib,eACmB,OAA5B1b,KAAKS,MAAM8V,cACb7e,EAAKgZ,KAAO,EACZhZ,EAAKikB,UAAY3b,KAAKS,MAAMgW,WAAa,GAAKzW,KAAKS,MAAMib,eAEzDhkB,EAAKgZ,KAAO1Q,KAAKS,MAAMgW,WACvB/e,EAAKikB,SAAW3b,KAAKS,MAAMib,eAI/B,IAAIE,EAAe,GACnB,IAAI,IAAIvf,KAAO2D,KAAKS,MAAMqX,cACxB8D,EAAanf,KAAKuD,KAAKS,MAAMqX,cAAczb,IAEzCuf,EAAa1e,OAAS,IACxBxF,EAAK4Q,QAAUsT,GAGb1f,OAAOC,KAAK6D,KAAKS,MAAMkZ,sBAAsBzc,OAAS,IACxDxF,EAAKmkB,gBAAkBte,KAAKC,UAAUwC,KAAKS,MAAMkZ,uBAG/C3Z,KAAKb,MAAM2c,iBAAiB5e,OAAS,IACvCxF,EAAKqkB,MAAQxe,KAAKC,UAAUwC,KAAKb,MAAM2c,mBAGzC,IAAIE,EAAsB,GAC1B,IAAI,IAAI3f,KAAO2D,KAAKS,MAAMyZ,qBAAsB,CAC9C,IAAI7Q,EAAQhN,EACR4f,EAAiBjc,KAAKS,MAAMyZ,qBAAqB7Q,GACjD6S,EAAsBlc,KAAKb,MAAMgd,qBAAqBnD,MAAMoD,GACvDA,EAAqB,QAAM/S,IAGpC,GAAI6S,EAAqB,CACvB,IAAIG,EAAqBH,EAA6B,QAAED,GAEpDI,GACFL,EAAoBvf,KAAK4f,EAE7B,CACF,CAMA,OAJIL,EAAoB9e,OAAS,IAC/BxF,EAAK4kB,gBAAkB/e,KAAKC,UAAUwe,IAGjCtkB,CAAI,EACX,KA0BF6kB,aAAgBC,IACTxc,KAAKb,MAAMsd,cAIhBC,EAAEC,KAAK,CACL5e,KAAM,MACNpF,KAAKikB,EAAAA,EAAAA,GAAS5c,KAAKb,MAAMsd,cACzBI,SAAU,OACVnlB,KAAMsI,KAAKob,eACX0B,YAAa,mBACbC,QAASP,EAAgB5J,KAAK5S,MAC9BwS,MAAO,SAASwK,EAAK/N,EAAQuD,GAC3BC,QAAQwK,IAAID,EAAIE,cAChBzK,QAAQwK,IAAIhO,GACZwD,QAAQwK,IAAIzK,EACd,GACA,EACF,KAEF2K,mBAAqB,CAACC,EAAUC,KAC1BA,GAAY9gB,MAAMC,QAAQ4gB,IAC5BA,EAASxgB,SAAQmI,IAEf,MAEMuY,EAAc,CAClBjU,MAH0BrJ,KAAKud,iBAAiBxY,EAAKsE,OAIrD1Q,IAAuBoM,EAAKpM,KAAOoM,EAAKpM,IAAI6I,WAAWiB,QAAQ,UAAW,IAC1E+a,sBAAuBzY,EAAKyY,uBAE9BH,EAAStY,EAAKpG,IAAM2e,CAAW,IAKnC,MAAMG,EAAwBL,EAAS9e,KAAIof,GAAWA,EAAQF,wBAAuB7hB,QAAOgiB,GAAKA,IAKjG,OAJIF,EAAsBvgB,OAAS,IACjCmgB,EAAWrd,KAAKmd,mBAAmBM,EAAuBJ,IAGrDA,CAAQ,EAChB,KAYDnG,eAAiB,KACflX,KAAK4d,SAAQ,SAASC,GAChB7d,KAAKb,MAAM2e,oBAAsB9d,KAAK+V,kBAC1C/V,KAAKO,SAAS,CAACgW,cAAcwH,EAAAA,EAAAA,QAAOF,EAAQ,MAC7BR,SAAUrd,KAAKmd,mBAAmBU,EAAQ7d,KAAKS,MAAM4c,UACrDW,kBAAmBH,GAAQ3gB,SAAS,KAClC0Z,YAAW,KACL5W,KAAKb,MAAM8e,kBACbje,KAAKsa,wBACP,GACC,IAAI,GAE1B,IACAta,KAAKuc,cAAa,SAASsB,GACzB7d,KAAKO,SAAS,CAAC2d,oBAAqBL,GACtC,GAAE,EACF,KAEFxD,kBAAoB,KAClBra,KAAK4d,SAAQ,SAASC,GAEpB,IAAK7d,KAAKS,MAAM8V,aAAgB,OAE5BvW,KAAKb,MAAM2e,oBAAsB9d,KAAK+V,kBAC1C,MAAMQ,GAAewH,EAAAA,EAAAA,SAAOxP,EAAAA,EAAAA,QAAOvO,KAAKS,MAAM8V,aAAcsH,GAAS,MACrE7d,KAAKO,SAAS,CACVgW,eACA8G,SAAUrd,KAAKmd,mBAAmBU,EAAQ7d,KAAKS,MAAM4c,UACrDW,kBAAmBH,EAAO3gB,OAC1BsZ,gBAAgB,IAElB,IAAMI,WAAW5W,KAAKb,MAAM8e,iBAAmBje,KAAKsa,uBAAyB,OAAU,MAE3F,GAAE,EACF,KAEF6D,UAAY,KACV,IAAKne,KAAKS,MAAM8V,aAAc,OAAO,KAErC,MAAM6H,EAAqBpe,KAAKb,MAAMkf,YAAc,KAAO,MACrDC,EAA0Bte,KAAKb,MAAMkf,YAAc,KAAO,MAEhE,OAAqC,OAAjCre,KAAKS,MAAMud,mBACbhe,KAAKS,MAAMud,kBAAoBhe,KAAKS,MAAMib,aAEtC1b,KAAKb,MAAM8e,iBAAyBpgB,EAAAA,cAACugB,EAAkB,MAEpDvgB,EAAAA,cAACugB,EAAkB,CAACtgB,UAAU,uBACnCD,EAAAA,cAAA,UAAQC,UAAU,iCAAgC,SAE3CkC,KAAKS,MAAM+V,eACb3Y,EAAAA,cAACugB,EAAkB,KAACvgB,EAAAA,cAACkW,EAAAA,EAAiB,OAGxClW,EAAAA,cAACugB,EAAkB,CAACtgB,UAAU,uBAC/BkC,KAAKb,MAAM8e,iBACXpgB,EAAAA,cAACygB,EAAuB,KACtBzgB,EAAAA,cAAA,QAAMc,GAAIqB,KAAKS,MAAM+Z,aAAc1c,UAAU,iBAG/CD,EAAAA,cAAA,UAAQ4B,QAASO,KAAKoa,UAAWtc,UAAU,wBAAuB,QAEjD,EACxB,KAEDygB,qCAAwCrgB,IACtCA,EAAEqT,iBACFrT,EAAE8U,kBACFhT,KAAKO,SAAS,CACZie,0BAA2Bxe,KAAKS,MAAM+d,0BACtC,EACF,KAEFC,oBAAuBlV,IACrB,MAAMmV,EAAU1e,KAAKS,MAAM4c,SAAS9T,GAMpC,OAAO1L,EAAAA,cAAA,MAAIxB,IAAKkN,GACd1L,EAAAA,cAAA,MAAIO,MAAO,CAACugB,cAAe,EAAGC,WAAY,QACxC/gB,EAAAA,cAAA,KAAG6D,KAAMgd,EAAQ/lB,IAAKwF,OAAO,UAC1BugB,EAAQrV,SAGXrJ,KAAK6e,mCAAmCtV,IACxC1L,EAAAA,cAAA,MAAIO,MAAO,CAACugB,cAAe,EAAGC,WAAY,QACxC/gB,EAAAA,cAAA,UACEC,UAAW4B,EAAW,SAAU,SAChCD,QAd4Bqf,GAAEvV,gBAAiBrL,IACrD8B,KAAKb,MAAM4f,iBAAiBxV,EAAW,EAaxBuV,CAA4B,CAACvV,gBAAc,WAKvD,EACN,KAEDsV,mCAAsCtV,GAC7BvJ,KAAKb,MAAM+Y,mBAAmBjT,MAAK+Z,GACjChf,KAAKS,MAAM4c,SAAS2B,IAAqBxB,uBAAuB7e,KAAO4K,IAEjF,KAGD0V,YAAc,KACZjf,KAAKb,MAAM+f,SAAStiB,SAAQ2M,GAAcvJ,KAAKb,MAAM4f,iBAAiBxV,IAAY,EA7kBlF,IAAI4V,EAAW,CACb5I,aAAc,KACd8G,SAAU,CAAC,EACXa,oBAAqB,KACrBxC,aAAcvc,EAAMigB,oBACpB3I,WAAY,EACZD,gBAAgB,EAChBwH,kBAAmB,KACnB1H,YAAa,GACbS,cAAe,GACfL,YAAa,KACbM,cAAe,KACfO,UAAW,KACXC,cAAe,KACfM,cAAe,CAAC,EAChBoC,qBAAsB,CAAC,EACvBsE,0BAA0B,EAC1BhE,aAAc/P,KAAK4U,MAAsB,MAAhB5U,KAAK6U,UAC9B3F,qBAAsB,CAAC,EACvBZ,eAAeR,EAAAA,EAAAA,WAAU1D,EAAiBvW,KAAKka,GAAkB,CAACA,EAAczD,WAAY,QAG1Fc,EAAU7V,KAAK4V,kBACf2J,GAASpJ,EAAAA,EAAAA,QAAOgJ,EAAUtJ,GAE9B7V,KAAKS,MAAQ8e,CACf,CAaAxd,iBAAAA,GASE,GARA/B,KAAKkX,iBAEDlX,KAAKb,MAAMqW,qBACbxV,KAAKO,SAAS,CACZwY,eAAeR,EAAAA,EAAAA,WAAU1D,EAAiBvW,KAAKka,GAAkB,CAACA,EAAczD,WAAY/U,KAAKsV,oBAAoBkD,EAAcnP,aAInInN,OAAOC,KAAK6D,KAAKS,MAAMkZ,sBAAsBzc,OAAS,EAAG,CAC3D,MAAMqc,EAAmBrd,OAAOC,KAAK6D,KAAKb,MAAMqW,qBAC1C8C,GAAYC,EAAAA,EAAAA,WAAU1D,EAAiBvW,KAAKka,GAAkB,CAACA,EAAc1D,OAAQ,CAAC0D,EAAcnP,MAAOmP,EAAczD,gBAC/H,IAAIsE,EAAmB,CAAC,EAExBnd,OAAOC,KAAKmc,GAAW1b,SAAQP,IAC7B,IAAImd,EAAkBtd,OAAOia,OAAO,CAAC,EAAGnW,KAAKS,MAAMkZ,6BAC5CH,EAAgBnd,GACvB,MAAM6b,EAA4D,IAAxChc,OAAOC,KAAKqd,GAAiBtc,OAAeqc,EAAmBvZ,KAAKoY,iBAAiBoB,GAC/GH,EAAiBf,EAAUjc,GAAK,IAAM2D,KAAKiY,0BAA0BC,EAAmBI,EAAUjc,GAAK,GAAG,IAG5G2D,KAAKO,SAAS,CAACwY,cAAeM,GAChC,CAEIrZ,KAAKb,MAAM8e,mBACbrmB,OAAOqK,iBAAiB,SAAUjC,KAAKsa,uBAAuB1H,KAAK5S,OACnE4W,WAAW5W,KAAKsa,uBAAuB1H,KAAK5S,MAAM,KAEtD,CAEAkC,oBAAAA,GACMlC,KAAKS,MAAM0W,OACbR,aAAa3W,KAAKS,MAAMiW,aAG1B9e,OAAOuK,oBAAoB,SAAUnC,KAAKsa,uBAAuB1H,KAAK5S,MACxE,CA0UA4d,OAAAA,CAAQpB,GACHxc,KAAKwf,wBACNxf,KAAKwf,uBAAuBC,QAI9B,MAAMC,EAAc,oBAAqB9nB,QAAW,IAAI+nB,gBACxD3f,KAAKwf,uBAAyBE,EAE9B,MAAME,EAAc,IAAIze,gBAAgBnB,KAAKob,gBACvCziB,EAAO,IAAEikB,EAAAA,EAAAA,GAAS5c,KAAKb,MAAM0gB,aAAaD,IAEhD3Z,MAAMtN,EAAK,CACTP,QAAS,CACP,OAAU,mBACV,eAAgB,oBAElB0nB,OAAQJ,EAAWI,SAElB9W,MAAKoJ,GAAYA,EAASjM,SAC1B6C,MAAM7C,GAASqW,EAAgB5J,KAAK5S,KAArBwc,CAA2BrW,KAC1CoM,OAAOC,GAAUC,QAAQwK,IAAIzK,IAClC,CA8CA+K,gBAAAA,CAAiBwC,GACf,IAAKA,EAAQ,OAAOA,EAEpB,IAAIC,EAAoBD,EAAKtd,QAAQ,yCAA0C,MAC/E,OAAIud,GAAqBD,EAAeA,EAGjC/f,KAAKud,iBAAiByC,EAC/B,CA+GA5d,MAAAA,GACE,IAAI6d,EAAsB,KACtBC,EAAe,KACfC,EAAY,KACZC,EAAiB,KAEjBC,EAAc,KACdC,EAAe,KAGfC,EAAc,KAClB,GAA4C,GAAxCvgB,KAAKb,MAAM+Y,mBAAmBhb,OAChCqjB,EAAc1iB,EAAAA,cAAA,UAAI,iGAKlB,GAAImC,KAAKb,MAAM+Y,kBAAmB,CAChC,MAAMsI,EAA0BxgB,KAAKb,MAAM+Y,kBAAkBjT,MAAKsE,GAAcvJ,KAAK6e,mCAAmCtV,KAExHgX,EAAc1iB,EAAAA,cAAA,UAAI,4DAEf2iB,EAA0B,qIAAuI,IAAI,8HAI1K,CAIF,IAAIC,EAAkB,KAClBzgB,KAAKb,MAAM+Y,mBAA4D,GAAvClY,KAAKb,MAAM+Y,kBAAkBhb,SAC/DujB,EAAkB5iB,EAAAA,cAAA,UAAQO,MAAO,CAAC8E,MAAO,SAAUzD,QAASO,KAAKif,aAAa,eAGhF,IA2FInH,EAAeoC,EA3FfwG,EACF7iB,EAAAA,cAAC8iB,EAAAA,EAAQ,CAACC,KAAM5gB,KAAKS,MAAM+d,0BACzB3gB,EAAAA,cAAA,OAAKC,UAAU,mBACZyiB,EACD1iB,EAAAA,cAAA,aACEA,EAAAA,cAAA,aACEA,EAAAA,cAAA,MAAIO,MAAO,CAACyiB,aAAc,mBACxBhjB,EAAAA,cAAA,MAAIO,MAAO,CAAC+J,MAAO,OAAQtF,QAAS,KACpChF,EAAAA,cAAA,MAAIO,MAAO,CAAC+J,MAAO,OAAQtF,QAAS,MAErC7C,KAAKb,MAAM+Y,mBAAqBlY,KAAKb,MAAM+Y,kBAAkB5Z,KAAIiL,GAAcvJ,KAAKye,oBAAoBlV,OAI5GkX,EACD5iB,EAAAA,cAAA,OAAKO,MAAO,CAACI,UAAW,WACtBX,EAAAA,cAAA,UACE4B,QAASO,KAAKue,sCAAsC,YAO1Dve,KAAKb,MAAM+f,UAAYlf,KAAKb,MAAM+f,SAAShiB,OAAS,IAEpD+iB,EADEjgB,KAAKb,MAAM2hB,mBACSjjB,EAAAA,cAAA,UACpB4B,QAASO,KAAKue,sCACZ,wBAAuBve,KAAKb,MAAM+f,SAAShiB,WAGzBW,EAAAA,cAAA,YAAOmC,KAAKb,MAAM+f,SAAShiB,OAAO,eAIxD8C,KAAKb,MAAMiF,QAAUpE,KAAKb,MAAMkhB,aAAergB,KAAKb,MAAM4hB,cACxD/gB,KAAKS,MAAMyd,sBACbgC,EAAeriB,EAAAA,cAAA,OAAKC,UAAU,uBAC3BkC,KAAKS,MAAMyd,sBAIZle,KAAKb,MAAMiF,SACb+b,EAAYtiB,EAAAA,cAAA,QAAMC,UAAU,sBAAsBM,OAAQ4B,KAAKb,MAAM6hB,YAAchhB,KAAKb,MAAM8hB,oBAAsB,CAAC/d,MAAO,QAASge,YAAa,QAASC,KAAK,UAC9JtjB,EAAAA,cAAA,SACEE,KAAK,SACL0I,YAAY,YACZ4B,MAAOrI,KAAKS,MAAM6V,YAClBrY,SAAU+B,KAAKqW,mBACfjK,WAAYpM,KAAKiX,yBAKnBjX,KAAKb,MAAM6hB,aACbZ,EAAiBviB,EAAAA,cAAA,QAAMC,UAAU,sBAAsBqjB,KAAK,UAC1DtjB,EAAAA,cAAA,UAAI,uBAAwBA,EAAAA,cAAA,WAC5BA,EAAAA,cAAA,SACEE,KAAK,SACL0I,YAAY,kCACZ4B,MAAOrI,KAAKS,MAAMsW,cAClB9Y,SAAU+B,KAAK8W,qBACf1K,WAAYpM,KAAKiX,yBAKnBjX,KAAKb,MAAMkhB,cACbA,EAAcxiB,EAAAA,cAACyW,EAAAA,EAAqB,CAClBI,QAAS1U,KAAKb,MAAMkhB,YACpB9L,cAAevU,KAAKS,MAAM8W,WAAavX,KAAKb,MAAMiiB,iBAClD5M,kBAAmBxU,KAAKS,MAAM+W,eAAiBxX,KAAKb,MAAMkiB,qBAC1D5M,SAAUzU,KAAKoX,cAInCkJ,EAAeziB,EAAAA,cAAAA,EAAAA,SAAA,KACZmC,KAAKb,MAAM6hB,YACVnjB,EAAAA,cAAA,OAAKC,UAAU,0BACZsiB,GAGLviB,EAAAA,cAAA,OAAKC,UAAU,yBAAyBM,MAAO4B,KAAKb,MAAM8hB,mBAAqB,CAACK,UAAW,OAAQC,OAAQ,OAAQ5C,cAAe,SAhHrH,KAkHVwB,EACAE,EACAH,KAMP,IAmDIvG,EAnDA6H,EAAc,MACdxhB,KAAKb,MAAM4Z,eAAiB/Y,KAAKb,MAAMgd,wBACzCrE,EAAgB9X,KAAKS,MAAMqX,cAC3BoC,EAAuBla,KAAKS,MAAMyZ,qBAClCsH,EAAc3jB,EAAAA,cAAA,OAAKC,UAAU,wBAAwBM,MAAO4B,KAAKb,MAAM8hB,mBAAqB,CAACK,UAAW,OAAQC,OAAQ,SACrHvhB,KAAKb,MAAM4Z,eAAiB/Y,KAAKb,MAAM4Z,cAAcza,KAAI,SAAS3C,GAe/D,OAdckC,EAAAA,cAAA,OAAKxB,IAAKV,EAAO0N,MAAOvL,UAAU,mBAChDD,EAAAA,cAAA,UAAKlC,EAAO0N,OACZxL,EAAAA,cAAA,UAAQ4jB,aAAc3J,EAAcnc,EAAO0N,QAAU,MAAOpL,SAAU+B,KAAK0F,mBAAmB1F,KAAMrE,EAAO0N,QACzGxL,EAAAA,cAAA,UAAQwK,MAAM,OAAM,OACnB1M,EAAOlD,QAAQ6F,KAAI,SAASqI,GAC3B,OACE9I,EAAAA,cAAA,UAAQxB,IAAKsK,EAAQ0B,MAAO1B,GACzBA,EAGP,KAKJ,GAAG3G,MACJA,KAAKb,MAAMgd,sBAAwBnc,KAAKb,MAAMgd,qBAAqB7d,KAAI,SAAS3C,GAuB7E,OAtBckC,EAAAA,cAAA,OAAKxB,IAAKV,EAAO0N,MAAOvL,UAAU,mBAChDD,EAAAA,cAAA,UAAIA,EAAAA,cAAA,QAAMC,UAAWkC,KAAKb,MAAM8hB,mBAAqB,4BAA6BtlB,EAAO0N,QACzFxL,EAAAA,cAAA,UAAQ4jB,aAAcvH,EAAqBve,EAAO0N,QAAU,MAAOpL,SAAU+B,KAAKga,0BAA0Bha,KAAMrE,EAAO0N,QACvHxL,EAAAA,cAAA,UAAQwK,MAAM,OAAM,OACnBnM,OAAOC,KAAKR,EAAOlD,SAAS6F,KAAI,SAASqI,GACxC,MAAe,YAAXA,EAEA9I,EAAAA,cAAA,UAAQxB,IAAKsK,EAAQ0B,MAAO1B,GAAQ,wBAMpC9I,EAAAA,cAAA,UAAQxB,IAAKsK,EAAQ0B,MAAO1B,GACzBA,EAIT,KAKJ,GAAG3G,QAMT,IAAI0hB,EAAiB,KACjBC,GAAiB3hB,KAAKb,MAAMwiB,eAAiB,CAAChP,MAAO,MAAOtK,MAAO,OAEnErI,KAAKb,MAAMqW,sBACbmE,EAAuB3Z,KAAKS,MAAMkZ,qBAElC+H,EAAiBxlB,OAAO2V,SAAQ+P,EAAAA,EAAAA,SAAQ/M,GAAmBlZ,GAAWA,EAAOqZ,eAAc1W,KAAI,EAAEjC,EAAK2Y,MACpG,MAAM1M,EAAU0M,EAAY1W,KAAIujB,IAC9B,GAAIA,EAAe5M,YAAc4M,EAAe5M,WAAWjV,KAAKb,MAAM+V,SAAY,OAAO,KAEzF,MAAM6D,EAAgB/Y,KAAKS,MAAMsY,cAAc8I,EAAe9M,YACxDI,EAAW0M,EAAe1M,UAAY0M,EAAe1M,SAAS4D,EAAc7b,QAC5E4a,EAAgB6B,EAAqBkI,EAAe/M,QAE1D,OACEjX,EAAAA,cAAA,OAAKC,UAAU,kBAAkBM,MAAO,CAAC8iB,YAAa,QAAS7kB,IAAKwlB,EAAexY,OACjFxL,EAAAA,cAAA,UAAKgkB,EAAexY,MAAM,IAAE8L,GAC5BtX,EAAAA,cAACikB,EAAAA,GAAM,CACLC,QAAS/hB,KAAKb,MAAMwiB,cACpBlb,YAAY,MACZ4B,MACEyP,GAAiB5b,OAAOC,KAAK2b,GAAe5a,OAC1C,CAACykB,KAAkB5I,EAAcza,KAAKqI,IAAM,CAAQgM,MAAOhM,EAAO,GAAI0B,MAAO1B,EAAO,QACnFhL,QAAOgL,GAAUmR,EAAc3S,SAASwB,EAAO0B,SAChDsZ,EAEJ1jB,SAAU+B,KAAKyZ,0BAA0BzZ,KAAM6hB,EAAe/M,QAC9Drc,QAAS,CAACkpB,KAAkB5I,EAAcza,KAAKqI,IAAM,CAAOgM,MAAOhM,EAAO,GAAI0B,MAAO1B,EAAO,QAC5FtH,SAAiC,IAAvB0Z,EAAc7b,SAEtB,IAIV,OACEW,EAAAA,cAAA,OAAKC,UAAU,wBAAwBzB,IAAKA,GACzCiM,EACG,KAMZ,IAOI0Z,EAPAC,EAAc,GACdjiB,KAAKb,MAAM8iB,YAAY/kB,OAAS,IAClC+kB,EAAcjiB,KAAKb,MAAM8iB,YAAY3jB,KAAKyG,GACjC/E,KAAKb,MAAM+iB,SAASnd,MAK/B,IAAIod,EAAaniB,KAAKb,MAAMgjB,WAE5B,GAAgC,OAA5BniB,KAAKS,MAAM8V,aACbyL,EAAYnkB,EAAAA,cAACkW,EAAAA,EAAiB,WACzB,GAAuC,IAAnC/T,KAAKS,MAAM8V,aAAarZ,OACjC8kB,EACEnkB,EAAAA,cAAA,OAAKC,UAAU,qBACbD,EAAAA,cAAA,UAAI,iBAEH,CACL,IAAIukB,EAAcpiB,KAAKS,MAAM8V,aACL,qBAAd6L,GACRA,EAAYxlB,SAAQmI,IACK,qBAAbA,EAAKsE,QACbtE,EAAKsE,MAAQtE,EAAKsE,MAAM5G,QAAQ,yCAA0C,MAC5E,IAGJuf,GAAY1jB,EAAAA,EAAAA,KAAI8jB,GAAcrd,GAAS/E,KAAKb,MAAM+iB,SAAQxpB,EAAAA,EAAC,CAAC,EAAGqM,GAAI,IAAEsd,WAAYriB,KAAK6e,mCAAmC9Z,EAAKpG,SAE5HqjB,EADEhiB,KAAKb,MAAMkf,YAEXxgB,EAAAA,cAAA,SAAOO,MAAO+jB,GACZtkB,EAAAA,cAAA,aACGmC,KAAKb,MAAMkf,aAEdxgB,EAAAA,cAAA,aACGmkB,GAEHnkB,EAAAA,cAAA,aACGmC,KAAKme,cAIAtgB,EAAAA,cAAA,OAAKC,UAAU,kBAAkBkkB,EAAWhiB,KAAKme,YAEjE,CAEA,IAAImE,EAAazkB,EAAAA,cAAA,OAAKC,UAAU,YACb0jB,EACAE,EACA1hB,KAAKb,MAAMojB,aAAeviB,KAAKb,MAAMojB,YAAYtC,GACjDK,EACA2B,EACAD,EACAtB,GAGf8B,EAAa3kB,EAAAA,cAAA,OAAKC,UAAU,YACdD,EAAAA,cAAA,OAAKO,MAAO,CAAC8J,QAAS,cAAeC,MAAO,SAC1CtK,EAAAA,cAAA,OAAKO,MAAO,CAAC+J,MAAO,QACjBqZ,GAEH3jB,EAAAA,cAAA,OAAKO,MAAO,CAAC+J,MAAO,QACjBuZ,EACA1hB,KAAKb,MAAMojB,aAAeviB,KAAKb,MAAMojB,YAAYtC,GACjDK,IAGJ2B,EACAD,EACAtB,GAGf+B,EAAaziB,KAAKb,MAAM8hB,kBAAoBuB,EAAaF,EAE7D,OACEzkB,EAAAA,cAAA,WACG4kB,EAGP,EAv4BmBpN,EACZqN,aAAe,CACpB5E,oBAAoB,EACpBsB,oBAAqB,GACrBnB,kBAAkB,EAClBnC,iBAAkB,GAClBmG,YAAa,G,kDE/FF,SAASlO,GAAkB,QAAE4O,EAAU,QACpD,OACE9kB,EAAAA,cAAA,OAAKC,UAAY,uBAAsB6kB,KACrC9kB,EAAAA,cAAA,OAAKC,UAAU,iCACfD,EAAAA,cAAA,OAAKC,UAAU,iCACfD,EAAAA,cAAA,OAAKC,UAAU,iCAGrB,C,kDCRe,SAAS6iB,EAASxhB,GAC/B,OAAIA,EAAMyhB,KAEN/iB,EAAAA,cAAA,OAAKC,UAAU,aACZqB,EAAMK,UAIJ,IAEX,C,iFCPe,MAAMojB,UAAsB/kB,EAAAA,UACzCgC,WAAAA,CAAYV,GACVW,MAAMX,GAAO,KAaf0jB,aAAgBhnB,IAEdA,EAAM0V,iBAGNvR,KAAKO,SAAS,CAAEuiB,WAAW,IAG3BjnB,EAAMsC,OAAO4kB,QAAQ,EApBrB/iB,KAAKS,MAAQ,CACXqiB,WAAW,EAEf,CAoBA1gB,MAAAA,GACE,IAAI4gB,EAAU,aAEVhjB,KAAKb,MAAME,WACb2jB,GAAW,aAGThjB,KAAKb,MAAMqU,cACbwP,GAAW,gBAGThjB,KAAKb,MAAMuU,QACbsP,GAAW,UAGThjB,KAAKb,MAAMrB,YACbklB,GAAW,IACXA,GAAWhjB,KAAKb,MAAMrB,WAGxB,MAAMhG,EAAYqa,IAAAA,oBAElB,OAAInS,KAAKS,MAAMqiB,WAAa9iB,KAAKb,MAAMyU,QAEnC/V,EAAAA,cAAA,OAAKC,UAAWklB,GACdnlB,EAAAA,cAAA,QAAMC,UAAU,cAAaD,EAAAA,cAACkW,EAAAA,EAAiB,CAAC4O,QAAQ,YAK1D9kB,EAAAA,cAAA,OAAKC,UAAWklB,GACdnlB,EAAAA,cAAA,QACEoV,OAAQjT,KAAKb,MAAMxG,IACnBsqB,OAAO,OACP9kB,OAAQ6B,KAAKb,MAAM+jB,aAAe,SAAW,QAC7C5R,SAAUtR,KAAK6iB,cAEd3mB,OAAOC,KAAK6D,KAAKb,MAAMzH,MAAM4G,KAAKjC,GAE/BwB,EAAAA,cAAA,SACEE,KAAK,SACL1B,IAAKA,EACLiE,KAAMjE,EACNgM,MAAO9K,KAAKC,UAAUwC,KAAKb,MAAMzH,KAAK2E,QAI5CwB,EAAAA,cAAA,SACExB,IAAI,SACJ0B,KAAK,SACLsK,MAAOrI,KAAKb,MAAMmB,KAClBjB,SAAUW,KAAKb,MAAME,SACrB,eAAcW,KAAKb,MAAM0B,iBAE3BhD,EAAAA,cAAA,SACEE,KAAK,SACLuC,KAAK,qBACL+H,MAAOvQ,GAAa,MAMhC,EAzFmB8qB,EAQZF,aAAe,CACpBlP,aAAa,EACbnU,UAAU,EACVuU,SAAS,EACTlc,KAAM,CAAC,E,0DCfX,MA4BA,EA5BoByrB,KAClB,MAAMC,EAAkB,WACtBphB,SAASqhB,iBAAiB,iBAAiBzmB,SAAQ0mB,IACjD,IAAIC,EAAmB,EACvBD,EAAYD,iBAAiB,eAAezmB,SAAQ4mB,IAClDA,EAAUH,iBAAiB,UAAUzmB,SAAQ6mB,IAC3CA,EAAWrlB,MAAM8c,IAAO,GAAEqI,KAAoB,IAGhDA,GAAoBC,EAAUE,YAAY,GAC1C,GAWN,EAEAN,IAEAxrB,OAAO+rB,SAAWP,CAAe,E,0BClBpB,MAAMQ,UAAqB/lB,EAAAA,UAaxCgC,WAAAA,CAAYV,EAAO+V,GACjBpV,MAAMX,EAAO+V,GAAS,KAgCxBmB,mBAAsBnY,IACpB8B,KAAKO,SAAS,CAAC+V,YAAapY,EAAEC,OAAOkK,OAAO,EAC5C,KAEF4O,qBAAwB/Y,IACR,UAAVA,EAAE7B,KACJ6B,EAAEqT,gBACJ,EACA,KAEF6F,WAAa,CAACC,EAAcC,KAC1BtX,KAAKO,SAAS,CAAEgX,UAAWF,EACXG,cAAeF,GAAmB,EAClD,KAEFsG,QAAWpB,IACTE,EAAEC,KAAK,CACL5e,KAAM,MACNpF,IAAKqH,KAAKb,MAAM0kB,QAChBhH,SAAU,OACVnlB,KAAM,CAAC,EACPolB,YAAa,mBACbC,QAASP,EAAgB5J,KAAK5S,MAC9BwS,MAAO,SAASwK,EAAK/N,EAAQuD,GAC3BC,QAAQwK,IAAID,EAAIE,cAChBzK,QAAQwK,IAAIhO,GACZwD,QAAQwK,IAAIzK,EACd,GACA,EACF,KAEF0E,eAAiB,KACflX,KAAK4d,SAAQ,SAASlmB,GACpB,IAAIosB,EAAUpsB,EACVsI,KAAKb,MAAM4kB,mBACZD,EAAU9jB,KAAKb,MAAM4kB,iBAAiBrsB,IAGzCsI,KAAKO,SAAS,CAAC7I,KAAMA,EAAMosB,QAASA,IAAU,KAAOR,GAAa,GACpE,GAAE,EAtEF,IAAInE,EAAW,CACb7I,YAAa,GACbiB,UAAW,KACXC,cAAe,KACf9f,KAAMsI,KAAKb,MAAMzH,MAGfsI,KAAKb,MAAMzH,MAAQsI,KAAKb,MAAM4kB,iBAChC5E,EAAS2E,QAAU9jB,KAAKb,MAAM4kB,iBAAiB/jB,KAAKb,MAAMzH,MAE1DynB,EAAS2E,QAAU9jB,KAAKb,MAAMzH,KAGhCsI,KAAKS,MAAQ0e,CACf,CAEApd,iBAAAA,GACO/B,KAAKb,MAAMzH,KAGd4rB,IAFAtjB,KAAKkX,iBAIHlX,KAAKb,MAAM6kB,aACbhkB,KAAKO,SAAS,CAACgX,UAAWvX,KAAKb,MAAM6kB,YACtBxM,cAAe,aAElC,CAEAtV,oBAAAA,GACA,CA4CAE,MAAAA,GACE,IAqDI6hB,EArDAvsB,EAAOsI,KAAKb,MAAMzH,MAAQsI,KAAKS,MAAM/I,KACrCwsB,EAAc,SACdC,EAAc,gBAEd7D,EAAe,KACnB,GAAItgB,KAAKb,MAAMilB,WAAWlnB,OAAS,GAAK8C,KAAKb,MAAMklB,iBAAmBrkB,KAAKb,MAAMmlB,UAAYtkB,KAAKb,MAAMolB,aAAc,CACpH,IAAIlb,EAAQ,KACRrJ,KAAKb,MAAMkK,QACbA,EAAQxL,EAAAA,cAAA,OAAKC,UAAU,gBACrBD,EAAAA,cAAA,UAAKmC,KAAKb,MAAMkK,SAIpB,IAAIib,EAAW,KACXtkB,KAAKb,MAAMmlB,WACbA,EAAWzmB,EAAAA,cAAA,OAAKxB,IAAI,YAAYyB,UAAU,uBAAuB0mB,wBAAyB,CAACC,OAAOzkB,KAAKb,MAAMmlB,YAC7GJ,EAAc,cACdC,EAAc,mBAGhB,IAAIhE,EAAY,KACZngB,KAAKb,MAAMilB,WAAWlnB,OAAS,IACjCijB,EAAYtiB,EAAAA,cAAA,OAAKxB,IAAI,aAAayB,UAAWomB,GAC3CrmB,EAAAA,cAAA,QAAMC,UAAU,GAAGqjB,KAAK,UACtBtjB,EAAAA,cAAA,SAAO4I,YAAazG,KAAKb,MAAMulB,kBAAmB3mB,KAAK,SAASD,UAAU,mBAAmBuK,MAAOrI,KAAKS,MAAM6V,YAAarY,SAAU+B,KAAKqW,mBAAoBjK,WAAYpM,KAAKiX,0BAKtL,IAAI0N,EAAe,KACf3kB,KAAKb,MAAMklB,kBACbM,EAAe9mB,EAAAA,cAAA,OAAKxB,IAAI,gBAAgByB,UAAWqmB,GACjDtmB,EAAAA,cAAA,KAAG6D,KAAM1B,KAAKb,MAAMklB,gBAAiBvmB,UAAU,iBAAgB,YAInE,IAAIymB,EAAe,KACfvkB,KAAKb,MAAMolB,eACbA,EAAe1mB,EAAAA,cAAA,OAAKxB,IAAI,gBAAgByB,UAAU,iBAC/CkC,KAAKb,MAAMolB,eAIhBjE,EAAeziB,EAAAA,cAAA,OAAKC,UAAU,mBAC3BuL,EACA8W,EACAmE,EACAK,EACAJ,EACD1mB,EAAAA,cAAA,OAAKC,UAAU,aAEnB,CAGA,GAAa,OAATpG,EACFusB,EAAQpmB,EAAAA,cAACkW,EAAAA,EAAiB,UACrB,CACc/T,KAAKS,MAAM+W,cAA9B,IAEIoN,EAAc,KAClB,GAAI5kB,KAAKb,MAAM0lB,aAAc,CAC3B,IAAIC,EAAmB9kB,KAAKb,MAAM0lB,aAAa7kB,KAAKS,OACpDmkB,EAAc/mB,EAAAA,cAAA,YAAUxB,IAAI,YACzByoB,EAAiBxmB,KAAI,CAAC6J,EAAOlL,IAAaY,EAAAA,cAAA,OAAKxB,IAAK8L,EAAM,IAAIlL,EAAEmB,MAAO,CAAC+J,MAAOA,EAAQ,UAE5F,CAEA,IAAI8L,EAASjU,KAAKb,MAAM4lB,WAAW/kB,KAAKS,MAAOT,KAAKoX,WAAWxE,KAAK5S,OAChE8jB,EAAU9jB,KAAKS,MAAMqjB,QAEzB,GAAI9jB,KAAKb,MAAMilB,WAAWlnB,OAAS,GAAK8C,KAAKS,MAAM6V,aAAyC,IAA1BtW,KAAKS,MAAM6V,YAAmB,CAC9F,IACI0O,EADuBhlB,KAAKS,MAAM6V,YAAYxS,cACjBpG,MAAM,KAAK/B,QAAQspB,GAAiB,IAARA,IAE7DnB,EAAUA,EAAQnoB,QAAQupB,GACjBF,EAAM5oB,QAAO,CAACuB,EAAKsnB,IACjBtnB,GAAQqC,KAAKb,MAAMilB,WAAW9lB,KAAK6mB,GACjCD,EAASC,GAAWrhB,cAAcoF,QAAQ+b,IAAS,IACzD7oB,QAAO,CAACV,EAAKqJ,IACPrJ,GAAOqJ,MAEf,IAEP,CAEI/E,KAAKS,MAAM8W,WAAcvX,KAAKS,MAAM+W,gBACtCsM,EAAUA,EAAQpgB,MAAK,CAACC,EAAGC,KACzB,IAAIwhB,EACJ,GAA4B,YAAxBplB,KAAKS,MAAM8W,UAEX6N,EADEzhB,EAAY,SAAoB,iBAAIC,EAAY,SAAEyhB,iBAC1C,EAEH1hB,EAAY,SAAoB,iBAAIC,EAAY,SAAEyhB,kBAC9C,EAGD,OAGT,GAA4B,eAAxBrlB,KAAKS,MAAM8W,UAEhB6N,EADEzhB,EAAe,YAAEvH,QAAO,CAACkpB,EAAKC,IAASD,EAAOC,GAAK,GAAK3hB,EAAe,YAAExH,QAAO,CAACkpB,EAAKC,IAASD,EAAOC,GAAK,GACnG,EAEH5hB,EAAe,YAAEvH,QAAO,CAACkpB,EAAKC,IAASD,EAAOC,GAAK,GAAK3hB,EAAe,YAAExH,QAAO,CAACkpB,EAAKC,IAASD,EAAOC,GAAK,IACvG,EAGD,OAIZ,UAAW5hB,EAAE3D,KAAKS,MAAM8W,oBAAsB3T,EAAE5D,KAAKS,MAAM8W,WAEvD6N,EAD8B,OAA5BzhB,EAAE3D,KAAKS,MAAM8W,WACL,EAC2B,OAA5B3T,EAAE5D,KAAKS,MAAM8W,YACX,SAEA5T,EAAE3D,KAAKS,MAAM8W,oBAAsB3T,EAAE5D,KAAKS,MAAM8W,WAC/C,SACM5T,EAAE3D,KAAKS,MAAM8W,kBAAoB3T,EAAE5D,KAAKS,MAAM8W,YACnD,EAED,OAId,cAAe5T,EAAE3D,KAAKS,MAAM8W,YAC1B,IAAK,SACH6N,EAAUzhB,EAAE3D,KAAKS,MAAM8W,WAAWiO,cAAc5hB,EAAE5D,KAAKS,MAAM8W,YAC7D,MACF,IAAK,SACH6N,EAAUzhB,EAAE3D,KAAKS,MAAM8W,WAAa3T,EAAE5D,KAAKS,MAAM8W,WACnD,QAEE6N,EADEzhB,EAAE3D,KAAKS,MAAM8W,aAAe3T,EAAE5D,KAAKS,MAAM8W,WACjC,EACD5T,EAAE3D,KAAKS,MAAM8W,WAAa3T,EAAE5D,KAAKS,MAAM8W,YACrC,EAED,EAUlB,MAJiC,cAA7BvX,KAAKS,MAAM+W,gBACb4N,IAAqB,GAGhBA,CAAO,KAKlB,IAAI9gB,EAAOwf,EAAQxlB,KAAK4mB,GAAallB,KAAKb,MAAMsmB,QAAQP,KAExDjB,EAAQpmB,EAAAA,cAAA,OAAKC,UAAU,qCACrBD,EAAAA,cAAA,OAAKC,UAAU,8BACbD,EAAAA,cAAA,aACG+mB,EACD/mB,EAAAA,cAAA,aACGoW,GAEHpW,EAAAA,cAAA,aAEKyG,EAAKpH,OAAS,GAAK8C,KAAKb,MAAMumB,cAC/B7nB,EAAAA,cAAA,UACEA,EAAAA,cAAA,MAAIU,QAAQ,QAAQyB,KAAKb,MAAMumB,gBAGjCphB,KAMZ,CAEA,OACEzG,EAAAA,cAAA,OAAKC,UAAU,gBACZwiB,EACA2D,EAGP,EAhRmBL,EACZlB,aAAe,CACpB0B,WAAY,GACZM,kBAAmB,YACnBG,aAAc,KACdE,WAAY,KACZU,QAAS,KACT1B,iBAAkB,KAClBF,QAAS,KACTnsB,KAAM,KACN2sB,gBAAiB,K,6DCfN,SAASsB,EAAaxmB,GACnC,IAAIymB,EAAgBzmB,EAAMuV,QAAQpW,KAAKunB,GAEnChoB,EAAAA,cAACioB,EAAAA,EAAS5pB,OAAAia,OAAA,GACJ0P,EAAM,CACVxmB,SAAUF,EAAME,UAAYwmB,EAAOxmB,cAKzC,OACExB,EAAAA,cAAA,OAAKC,UAAU,kBACZ8nB,EAIP,CAEAD,EAAajD,aAAe,CAC1BrjB,UAAU,E,yiCCnBG,SAAS0mB,EAAc5mB,GACpC,IAAIuV,EAAUvV,EAAM6mB,MAAM1nB,KAAI,SAAS2nB,GACrC,OAAAvtB,EAAAA,EAAA,GACKutB,GAAO,IACVzS,YAAayS,EAAQ5pB,MAAQ8C,EAAM+mB,WAEvC,IACIC,EAAkBtoB,EAAAA,cAAC8nB,EAAAA,EAAY,CAACjR,QAASA,EAASrM,MAAOlJ,EAAMinB,kBAE/DC,EAAOlnB,EAAM6mB,MAAMhN,MAAMiN,GAAYA,EAAQ5pB,MAAQ8C,EAAM+mB,YAK/D,OAJIG,IACFA,EAAOA,EAAKA,MAIZxoB,EAAAA,cAAA,OAAKC,UAAU,oBACbD,EAAAA,cAAA,OAAKC,UAAU,6BACZqoB,GAEHtoB,EAAAA,cAAA,OAAKC,UAAU,yBACZuoB,GAIT,C,kDC1Be,SAASC,EAAiBnnB,GACvC,IAAIonB,EAAsBpnB,EAAMqnB,iBAAkD,IAA/BrnB,EAAMqnB,gBAAgBtpB,OACvEW,EAAAA,cAAA,WACEA,EAAAA,cAAA,WAAK,oBACasB,EAAMqnB,gBAAgBloB,KAAKmoB,GACtC5oB,EAAAA,cAAA,QAAMxB,IAAKoqB,EAAiB3oB,UAAU,mBAAmB2oB,MAEzD,GAEPC,EAA0BvnB,EAAMwnB,qBAA0D,IAAnCxnB,EAAMwnB,oBAAoBzpB,OACnFW,EAAAA,cAAA,WACEA,EAAAA,cAAA,WAAK,0CACmCsB,EAAMwnB,oBAAoBroB,KAAKtC,GAChE6B,EAAAA,cAAA,QAAMxB,IAAKL,EAAK8B,UAAU,uBAAuB9B,MAEjD,GAEP4qB,EAA8BznB,EAAM0nB,2BAAsE,IAAzC1nB,EAAM0nB,0BAA0B3pB,OACnGW,EAAAA,cAAA,WACEA,EAAAA,cAAA,WAAK,oCAC6BsB,EAAM0nB,0BAA0BvoB,KAAKtC,GAChE6B,EAAAA,cAAA,QAAMxB,IAAKL,EAAK8B,UAAU,4BAA4B9B,MAEtD,GAEX,OAAO6B,EAAAA,cAAAA,EAAAA,SAAA,KACJ0oB,EACAG,EACAE,EAA2B/oB,EAAAA,cAAA,WAEhC,C,mMCbe,SAASipB,EAAiC3nB,GACvD,MACE4nB,EAIE5nB,EAJF4nB,YACAC,EAGE7nB,EAHF6nB,eACAC,EAEE9nB,EAFF8nB,oBACAC,EACE/nB,EADF+nB,WAGIC,EAAcF,EAAoBE,YACxC,GAA0B,qBAAtBA,GAAaC,KAA+B,OAEhD,MAAMC,EAAYF,EAAYE,WAAa,WACrCC,EAAWL,EAAoBK,UAAY,GAC3CC,EAAcN,EAAoBM,aAAe,GACjDC,EAAuBF,EAASpqB,OAAS,GAA0C,IAApCiqB,EAAYM,aAAavqB,OACxEwqB,GAA2BP,EAAYM,aAAkD,IAAnCN,EAAYM,YAAYvqB,OA0DpF,OACEW,EAAAA,cAAA,OAAKC,UAAU,+DACbD,EAAAA,cAACioB,EAAAA,EAAS,CACRxlB,KAAMzC,EAAAA,cAAA,KAAGC,UAAU,gBACnB2B,QAASA,IAAMunB,EAAeW,mBAC9BjU,OAAK,IAEP7V,EAAAA,cAAA,OAAKC,UAAU,iCACfD,EAAAA,cAAA,UAAQI,UAhEmBpC,IAC7BmrB,EAAeY,eAAeC,EAAAA,GAAkB,CAACR,UAAWxrB,EAAMsC,OAAOkK,OAAO,GA+DtCuK,KAAK5S,MAAO5B,MAAO,CAACgS,UAAW,OAAOF,OAAQ,QAAS7H,MAAOgf,GACpGxpB,EAAAA,cAAA,UAAQwK,MAAM,IAAG,kBACjBxK,EAAAA,cAAA,UAAQwK,MAAO,YAAY,iBAC3BxK,EAAAA,cAAA,UAAQwK,MAAO,UAAU,gBAE3BxK,EAAAA,cAAA,SACEE,KAAK,OACLD,UAAU,yBACVuK,MAAOif,EACPrpB,SAAWC,KACT4pB,EAAAA,EAAAA,KAAM,KACJb,EAAoBc,YAAY7pB,EAAEC,OAAOkK,OACrC8e,EAAYM,aACdT,EAAeY,eAAeC,EAAAA,GAChC,GACA,IAGNhqB,EAAAA,cAACioB,EAAAA,EAAS,CACRxlB,KAAK,OACLoT,OAAK,EACLrU,SAAUmoB,EACV/nB,QAlFauoB,KACjB,OAAOX,GACL,IAAK,SACHphB,OAAM2W,EAAAA,EAAAA,GAAU,2CAA0CqL,mBAAmBX,OAC5Ete,MAAKoJ,IACJ,GAAIA,EAAS8V,GACX,OAAO9V,EAAS+V,OAEhB,MAAM,IAAIC,MAAM,QAClB,IAEDpf,MAAKtR,IACJ,MAAM2wB,EAA0B3wB,EAAK4wB,MAAM,iEAAiEprB,OAAS,EACrH,GAAImrB,EAA0B,EAAG,CAC/B,MACME,EAAU,IAAIC,KAAK,CADb9wB,GACoB,CAAEqG,KAAM,aAClC0qB,EAAezmB,SAAS0mB,cAAc,KAC5CD,EAAaE,SAAW,oBACxBF,EAAa/mB,KAAO9J,OAAOgxB,IAAIC,gBAAgBN,GAC/CE,EAAarqB,MAAM8J,QAAU,OAC7BlG,SAAS8mB,KAAKC,YAAYN,GAC1BA,EAAaO,QACb1W,MAAM,+BACR,CACA0U,EAAeY,eAAeC,EAAAA,GAAkB,CAAER,UAAW,SAAU4B,YAAaZ,GAA0B,IAE/G9V,OAAMC,IACLF,MAAM,SACNG,QAAQwK,IAAIzK,EAAM,IAEpB,MAEF,IAAK,WACH,MAAM0W,EAAkB/B,EAAYM,YAEhCN,EAAYM,YAAY0B,MAAM,GAAG5a,OAAO,CAAC4Y,EAAYM,YAAY,KCpEtE,SAAiC2B,EAAoC9B,GAG1E,OAFmB,IAAI+B,QAAOC,EAAAA,EAAAA,cAAahC,GAAW,OAE9CiC,EAAAA,EAAAA,IAAoBH,GAAU,CAACI,EAAOC,MAC5CC,EAAAA,EAAAA,IAAsBD,GAAM7sB,SAAS+sB,IACnC,MAAMC,EAAa,IAAIP,QAAOC,EAAAA,EAAAA,cAAahC,GAAW,MAEtD,IAAIuC,EACJ,KAAsE,QAA9DA,EAAYD,EAAWE,KAAKL,EAAKE,GAAkBxB,QACzDqB,EAAQA,EAAMjb,OAAO,CAAC,CACpBwb,MAAO,CACL7f,IAAKuf,EAAKvf,IACV8f,WAAYL,EACZlrB,MAAOorB,EAAUprB,OAEnBwrB,IAAK,CACH/f,IAAKuf,EAAKvf,IACV8f,WAAYL,EACZlrB,MAAOorB,EAAUprB,MAAQ6oB,EAASpqB,UAGxC,IAGMssB,IACP,GACL,CDyCYU,CAAwBhD,EAAYI,GAGxC,GAAI4B,EAAehsB,OAAS,EAAG,CAC7B,MAAMitB,EAAajB,EAAe,GAClClC,EAAeoD,uBAAuBD,GAEtC,MAAME,GAAUC,EAAAA,EAAAA,IAAqBpD,EAAYiD,EAAWJ,MAAM7f,KAC9DmgB,IACFE,EAAAA,EAAAA,IAAgBF,EAAStD,EAAYyD,SAEzC,MACElY,MAAM,oBAER0U,EAAeY,eAAeC,EAAAA,GAAkB,CAACJ,YAAayB,IAClE,IAoCgB,aAAZ7B,EACExpB,EAAAA,cAAA,WAAMspB,EAAYM,aAAe5pB,EAAAA,cAAA,KAAGO,MAAO,CAAC6E,OAAQ,SAAUkkB,EAAYM,YAAYvqB,OAAS,EAAK,GAAEiqB,EAAYM,YAAYvqB,eAAiB,eAC/IW,EAAAA,cAAA,gBAA+BD,GAAzBupB,EAAY8B,aAA0BprB,EAAAA,cAAA,KAAGO,MAAO,CAAC6E,OAAQ,SAAUkkB,EAAY8B,YAAc,EAAK,GAAE9B,EAAY8B,oBAAsB,eAEhJprB,EAAAA,cAAA,OAAKC,UAAU,iCACF,aAAZupB,GAA0BxpB,EAAAA,cAAAA,EAAAA,SAAA,KACzBA,EAAAA,cAAA,SACEE,KAAK,OACLD,UAAU,yBACVuK,MAAOkf,EACPtpB,SAAWC,GAAM+oB,EAAoBwD,eAAevsB,EAAEC,OAAOkK,SAE/DxK,EAAAA,cAACioB,EAAAA,EAAS,CACRxlB,KAAK,UACLoT,OAAK,EACLrU,SAAUqoB,EACVjoB,QAASA,KACP,MAAMirB,EAAqBvD,EAAYM,YAAY,GAE7CkD,EAAoB,CACxBxC,KAAMZ,EACNqD,YAAa,IAGf5D,EAAe6D,WAAUC,EAAAA,EAAAA,IAA4BJ,EAAoBC,IAEzE,MAAMzB,EAAiB/B,EAAYM,YAAY0B,MAAM,GAErD,GAAID,EAAehsB,OAAS,EAAG,CAC7B,MAAMitB,EAAajB,EAAe,GAClClC,EAAeoD,uBAAuBD,GAEtC,MAAME,GAAUC,EAAAA,EAAAA,IAAqBpD,EAAYiD,EAAWJ,MAAM7f,KAC9DmgB,IAAUE,EAAAA,EAAAA,IAAgBF,EAAStD,EAAYyD,SACrD,MACElY,MAAM,mBAGR0U,EAAeY,eAAeC,EAAAA,GAAkB,CAACJ,YAAayB,GAAgB,IAGlFrrB,EAAAA,cAACioB,EAAAA,EAAS,CACRxlB,KAAK,cACLoT,OAAK,EACLrU,SAAUqoB,EACVjoB,QAASA,KACP,MAAMsrB,EAAa5D,EAAYM,YAEzBkD,EAAoB,CACxBxC,KAAMZ,EACNqD,YAAa,IAGf5D,EAAegE,WAAWD,EAAWzsB,KAAKosB,IAAuBI,EAAAA,EAAAA,IAA4BJ,EAAoBC,MAEjHrY,MAAM,iBAEN0U,EAAeY,eAAeC,EAAAA,GAAkB,CAAEJ,YAAa,IAAK,KAMhF,C,0jCE1Ke,SAASwD,EAAyB9rB,GAC/C,MACE6nB,EAEE7nB,EAFF6nB,eACAC,EACE9nB,EADF8nB,oBAGIiE,EAAsBjE,EAAoBiE,oBAE1CC,EAAoBlE,EAAoBE,aAAaC,OAASgE,EAAAA,GAC9DC,EAAgBpE,GAAqBqE,yBAAyBvgB,OAA2BwgB,MAAMC,SAAW,UAExDC,EAAAvxB,EAAxB2D,EAAAA,WAAwB,GAAjD6tB,EAAQD,EAAA,GAAEE,EAAWF,EAAA,GAE5B5tB,EAAAA,WAAgB,KACV6tB,GACFC,OAAY/tB,EACd,GACC,CAACstB,IAEJ,MAAMU,EAAgBF,GAAYL,EAE5BQ,EAAgB9gB,IACpB4gB,EAAY5gB,EAAM+gB,IAAI,EAGlB3rB,EAAaA,KACjB6mB,EAAe6D,WACbkB,EAAAA,EAAAA,IACEb,EACA,QACA,CAACM,QAASI,IAEZV,EAAoBc,WAGtBhF,EAAeW,kBAAkB,EAG7BsE,EAAeA,KACnBjF,EAAeW,kBAAkB,EAGnC,IAAIuE,EA0BJ,OAzBIf,IACFe,EACEruB,EAAAA,cAAA,OAAKC,UAAU,gCAAgC2B,QAAUvB,IAAOA,EAAE8U,iBAAiB,GACjFnV,EAAAA,cAACsuB,EAAAA,GAAY,CACXphB,MAAQ6gB,EACR3tB,SAAW4tB,IAEbhuB,EAAAA,cAAA,OAAKC,UAAU,4BACbD,EAAAA,cAACioB,EAAAA,EAAS,CACRxlB,KAAK,SACLkT,aAAW,EACXE,OAAK,EACLjU,QAASU,IAEXtC,EAAAA,cAACioB,EAAAA,EAAS,CACRxlB,KAAK,SACLkT,aAAW,EACXE,OAAK,EACLjU,QAASwsB,OAQjBpuB,EAAAA,cAAA,OACExB,IAAI,cACJ+B,MAAO,CACLa,gBAAiB2sB,EACjBzjB,MAAO,OACP+H,OAAQ,OACRqR,OAAQ,kBACRtT,SAAU,YAEZxO,QAASA,KACHwnB,EAAoBE,aAAaC,OAASgE,EAAAA,GAC5CpE,EAAeY,eAAewD,EAAAA,IAE9BpE,EAAeW,kBACjB,GAGDuE,EAGP,CC5Fe,MAAME,UAA+BvuB,EAAAA,UAClDgC,WAAAA,CAAYV,GACVW,MAAMX,GACNa,KAAKS,MAAQ,CACX4rB,KAAOltB,EAAM8nB,qBAAqBqE,yBAAyBe,MAAyBd,MAAM5yB,KAAO,GAErG,CAEAkzB,YAAAA,CAAa3tB,GACX8B,KAAKO,SAAS,CAAC8rB,KAAMnuB,EAAEC,OAAOkK,OAChC,CAEAjG,MAAAA,GACE,MAAAC,EAGIrC,KAAKb,MAFP6nB,EAAc3kB,EAAd2kB,eACAC,EAAmB5kB,EAAnB4kB,oBAGF,OACEppB,EAAAA,cAAA,OAAKC,UAAU,uBACbD,EAAAA,cAAA,OAAKC,UAAU,2BACbD,EAAAA,cAAA,SACExB,IAAI,mBACJyB,UAAU,aACVC,KAAK,OACLsK,MAAOrI,KAAKS,MAAM4rB,KAClBpuB,SAAU+B,KAAK6rB,aAAajZ,KAAK5S,MACjCyG,YAAY,yBACZ6lB,WAAS,IAEXzuB,EAAAA,cAAA,OAAKC,UAAU,gBACbD,EAAAA,cAAA,OAAKC,UAAU,qBACbD,EAAAA,cAACioB,EAAAA,EAAS,CACRhoB,UAAU,gBACVwC,KAAK,SACLkT,aAAW,EACXE,OAAK,EACLjU,QAASA,KACP,MAAMyrB,EAAsBjE,EAAoBiE,oBAEhDlE,EAAe6D,WACb0B,EAAAA,EAAAA,IACErB,EACA,QAEFA,EAAoBc,WAGtBhF,EAAeW,kBAAkB,KAIvC9pB,EAAAA,cAAA,OAAKC,UAAU,sBACbD,EAAAA,cAACioB,EAAAA,EAAS,CACRhoB,UAAU,cACVwC,KAAK,OACLkT,aAAW,EACXE,OAAK,EACLrU,SAAqC,IAA3BW,KAAKS,MAAM4rB,KAAKnvB,OAC1BuC,QAASA,KACP,IAAI4sB,EAAOrsB,KAAKS,MAAM4rB,KAEtB,MAAMnB,EAAsBjE,EAAoBiE,oBAEhDlE,EAAe6D,WACbkB,EAAAA,EAAAA,IACEb,EACA,OACA,CAACvyB,IAAK0zB,IAERnB,EAAoBc,WAGtBhF,EAAeW,kBAAkB,IAGrC9pB,EAAAA,cAACioB,EAAAA,EAAS,CACRhoB,UAAU,gBACVwC,KAAK,SACLkT,aAAW,EACXE,OAAK,EACLjU,QAASA,KAAQunB,EAAeW,kBAAkB,OAOhE,E,eCzFa,SAAS6E,EAA0BrtB,GAChD,MAAMkJ,EAAgC,mBAAjBlJ,EAAMkJ,MAAuBlJ,EAAMkJ,MAAQlJ,EAAMstB,UAAW,EAEjF,OACE5uB,EAAAA,cAAA,OAAKC,UAAU,uDACbD,EAAAA,cAAA,SAAO6uB,QAASvtB,EAAMwT,OAAQxT,EAAMwT,OACpC9U,EAAAA,cAAA,SAAOE,KAAK,WAAWuC,KAAMnB,EAAMwT,MAAO3U,QAASqK,EAAOhJ,SAAUF,EAAMwtB,oBAAqB1uB,SAAUA,KACvGkB,EAAM6nB,eAAe6D,WAAU+B,EAAAA,EAAAA,IAAqBztB,EAAM+K,IAAK/K,EAAM6qB,YAAa3hB,GAAO,IAIjG,CCFe,MAAMwkB,UAAyBhvB,EAAAA,UAC5CgC,WAAAA,CAAYV,GACVW,MAAMX,GACNa,KAAKS,MAAQ,CACXqsB,gBAAgB,EAEpB,CAEAC,gBAAAA,GACO/sB,KAAKb,MAAMwtB,qBACd3sB,KAAKO,SAAS,CAACusB,gBAAiB9sB,KAAKS,MAAMqsB,gBAE/C,CAEA1qB,MAAAA,GACE,MAAMiG,EAAQrI,KAAKb,MAAM6tB,MAAQhtB,KAAKb,MAAMstB,SAAW,GAEvD,IAAIQ,EAAa,KACjB,GAAIjtB,KAAKS,MAAMqsB,eAAgB,CAC7B,MAAMr0B,EAAUuH,KAAKb,MAAM1G,QAAQ6F,KAAK4uB,IACtC,MAAMC,EAAY9kB,EAAMlD,SAAS+nB,GACjC,OACErvB,EAAAA,cAAA,OAAKxB,IAAK6wB,EAAYpvB,UAAU,0CAC9BD,EAAAA,cAAA,SAAOE,KAAK,WAAWuC,KAAM4sB,EAAYlvB,QAASmvB,EAAWlvB,SAAUA,KACrE,IAAI2Z,EAAWvP,EACX8kB,EACFvV,GAAWjc,EAAAA,EAAAA,QAAOic,GAAW7F,GAAQA,IAAQmb,IAE7CtV,EAASnb,KAAKywB,GAGhBltB,KAAKb,MAAM6nB,eAAe6D,WAAU+B,EAAAA,EAAAA,IAAqB5sB,KAAKb,MAAM+K,IAAKlK,KAAKb,MAAM6qB,WAAYpS,GAAU,IAE5G/Z,EAAAA,cAAA,SAAO6uB,QAASQ,GAAaA,GACzB,IAIVD,EACEpvB,EAAAA,cAAA,OAAKC,UAAU,8BAA8B2B,QAAUvB,IAAOA,EAAE8U,iBAAiB,GAC9Eva,EACDoF,EAAAA,cAACioB,EAAAA,EAAS,CACRhoB,UAAU,oBACVwC,KAAM,QACNkT,aAAW,EACXE,OAAK,EACLjU,QAASO,KAAK+sB,iBAAiBna,KAAK5S,QAI5C,CAEA,OACEnC,EAAAA,cAAA,OAAKC,UAAU,wDAAwD2B,QAASO,KAAK+sB,iBAAiBna,KAAK5S,OACzGnC,EAAAA,cAAA,aAAQmC,KAAKb,MAAMwT,OACnB9U,EAAAA,cAAA,KAAGC,UAAU,yCAAyCuK,EAAMnL,OAAS,EAAImL,EAAM+kB,KAAK,MAAQvvB,EAAAA,cAAA,QAAMC,UAAU,uBAAsB,SACjImvB,EAGP,ECpEa,SAASI,EAAgCluB,GACtD,MAAMkJ,EAAgC,kBAAjBlJ,EAAMkJ,MAAsBlJ,EAAMkJ,MAAQlJ,EAAMstB,UAAW,EAEhF,OACE5uB,EAAAA,cAAA,OAAKC,UAAU,+DACbD,EAAAA,cAAA,SAAO6uB,QAASvtB,EAAMwT,OAAQxT,EAAMwT,OACpC9U,EAAAA,cAAA,SAAOE,KAAK,WAAWuC,KAAMnB,EAAMwT,MAAO3U,SAAmB,IAAVqK,EAAiBhJ,SAAUF,EAAMwtB,oBAAqB1uB,SAAUA,KACjHkB,EAAM6nB,eAAe6D,WAAU+B,EAAAA,EAAAA,IAAqBztB,EAAM+K,IAAK/K,EAAM6qB,YAAsB,IAAV3hB,GAAkB,GAAW,KAEpG,IAAVA,GAAoBxK,EAAAA,cAAA,SAAOE,KAAK,OAAOsK,MAAOA,GAAS,GAAIpK,SAAWC,IACpE,IAAIovB,EAAYpU,SAAShb,EAAEC,OAAOkK,OAC9BklB,MAAMD,KACRA,EAAY,GAGVA,EAAY,IACdA,IAAyB,GAG3BnuB,EAAM6nB,eAAe6D,WAAU+B,EAAAA,EAAAA,IAAqBztB,EAAM+K,IAAK/K,EAAM6qB,WAAYsD,GAAW,IAKtG,CCvBe,SAASE,EAAyBruB,GAC/C,MAAMkJ,EAAQlJ,EAAMkJ,OAASlJ,EAAMstB,SAAWttB,EAAM1G,QAAQ,GAEtDA,EAAU0G,EAAM1G,QAAQ6F,KAAK4uB,GAC1BrvB,EAAAA,cAAA,UAAQxB,IAAK6wB,EAAY7kB,MAAO6kB,GAAaA,KAGtD,OACErvB,EAAAA,cAAA,OAAKC,UAAU,sDACbD,EAAAA,cAAA,aAAQsB,EAAMwT,OACd9U,EAAAA,cAAA,OAAKC,UAAU,wCACbD,EAAAA,cAAA,UAAQwK,MAAOA,EAAOhJ,SAAUF,EAAMwtB,oBAAqB1uB,SAAWpC,IACpEsD,EAAM6nB,eAAe6D,WAAU+B,EAAAA,EAAAA,IAAqBztB,EAAM+K,IAAK/K,EAAM6qB,WAAYnuB,EAAMsC,OAAOkK,OAAO,GAEpG5P,IAKX,CCfe,MAAMg1B,UAA+B5vB,EAAAA,UAClDgC,WAAAA,CAAYV,GACVW,MAAMX,GACNa,KAAKS,MAAQ,CAAC,CAChB,CAEAyB,oBAAAA,GACElC,KAAK0tB,YACP,CAEA7B,YAAAA,CAAa3tB,GACX8B,KAAKO,SAAS,CAACotB,WAAYzvB,EAAEC,OAAOkK,OACtC,CAEAqlB,UAAAA,GACE,GAAI1tB,KAAKS,MAAMktB,WAAY,CACzB,IAAI/V,EAAW5X,KAAKS,MAAMktB,WACtB3tB,KAAKb,MAAMyuB,qBACbhW,EAAW5X,KAAKb,MAAMyuB,mBAAmBhW,IAG3C5X,KAAKb,MAAM6nB,eAAe6D,WAAU+B,EAAAA,EAAAA,IAAqB5sB,KAAKb,MAAM+K,IAAKlK,KAAKb,MAAM6qB,WAAYpS,IAEhG5X,KAAKO,SAAS,CAACotB,gBAAY/vB,GAC7B,CACF,CAEAwE,MAAAA,GACE,IAAIiG,EAAQrI,KAAKS,MAAMktB,WAGvB,YAFc/vB,IAAVyK,IAAuBA,EAAQrI,KAAKb,MAAMkJ,OAASrI,KAAKb,MAAMstB,SAGhE5uB,EAAAA,cAAA,OAAKC,UAAU,oDACbD,EAAAA,cAAA,aAAQmC,KAAKb,MAAMwT,OACnB9U,EAAAA,cAAA,SAAOE,KAAK,OAAOsK,MAAOA,EAAOhJ,SAAUW,KAAKb,MAAMwtB,oBAAqB1uB,SAAU+B,KAAK6rB,aAAajZ,KAAK5S,MAAO6tB,OAAQ7tB,KAAK0tB,WAAW9a,KAAK5S,QAGtJ,E,eChCa,MAAM8tB,UAA+BjwB,EAAAA,UAClDgC,WAAAA,CAAYV,GACVW,MAAMX,GACNa,KAAKS,MAAQ,CACXstB,SAAU,GACVjB,gBAAgB,EAEpB,CAEAjB,YAAAA,CAAa3tB,GACX8B,KAAKO,SAAS,CAACwtB,SAAU7vB,EAAEC,OAAOkK,OACpC,CAEA2lB,OAAAA,CAAQC,GACNjuB,KAAKb,MAAM6nB,eAAe6D,WAAU+B,EAAAA,EAAAA,IAAqB5sB,KAAKb,MAAM+K,IAAKlK,KAAKb,MAAM6qB,WAAYiE,GAClG,CAEAC,YAAAA,CAAaC,GACXnuB,KAAKguB,SAAQryB,EAAAA,EAAAA,QAAOqE,KAAKb,MAAM6tB,MAAOoB,GAAgBA,IAAQD,IAChE,CAEAE,WAAAA,GACMruB,KAAKS,MAAMstB,SAAS7wB,OAAS,IAC/B8C,KAAKguB,SAAQM,EAAAA,EAAAA,OAAK/f,EAAAA,EAAAA,QAAOvO,KAAKb,MAAM6tB,KAAMhtB,KAAKS,MAAMstB,YACrD/tB,KAAKO,SAAS,CAACwtB,SAAU,KAE7B,CAEAhB,gBAAAA,GACO/sB,KAAKb,MAAMwtB,qBACd3sB,KAAKO,SAAS,CAACusB,gBAAiB9sB,KAAKS,MAAMqsB,gBAE/C,CAEA1qB,MAAAA,GACE,IAAI6qB,EAAa,KACjB,GAAIjtB,KAAKS,MAAMqsB,eAAgB,CAC7B,MAAMyB,EAAc,CAAEC,OAAS3yB,IAA0BmE,KAAKquB,eAAsB,IAE9ErB,EAAOhtB,KAAKb,MAAM6tB,KAAK1uB,KAAK8vB,GAE9BvwB,EAAAA,cAAA,QAAMxB,IAAK+xB,EAAKtwB,UAAU,wBACxBD,EAAAA,cAAA,QAAMC,UAAU,gBAAgBswB,GAChCvwB,EAAAA,cAAA,KAAGC,UAAU,cAAc2B,QAAUvB,IAAO8B,KAAKkuB,aAAaE,EAAI,OAKlEK,EAAsBC,EAAAA,QAC5BzB,EACEpvB,EAAAA,cAAA,OAAKC,UAAU,8BAA8B2B,QAAUvB,IAAOA,EAAE8U,iBAAiB,GAC9Ega,EACDnvB,EAAAA,cAAC4wB,EAAc,CAACE,SAAUJ,GACxB1wB,EAAAA,cAAA,OAAKC,UAAU,wBACbD,EAAAA,cAAA,SACEC,UAAU,uBACVC,KAAK,OACLsK,MAAOrI,KAAKS,MAAMstB,SAClB9vB,SAAU+B,KAAK6rB,aAAajZ,KAAK5S,MACjCyG,YAAY,iBAEd5I,EAAAA,cAACioB,EAAAA,EAAS,CACRhoB,UAAU,uBACVwC,KAAMzC,EAAAA,cAAA,KAAGC,UAAU,eACnB0V,aAAW,EACXE,OAAK,EACLrU,SAAyC,IAA/BW,KAAKS,MAAMstB,SAAS7wB,OAC9BuC,QAASO,KAAKquB,YAAYzb,KAAK5S,UAIrCnC,EAAAA,cAACioB,EAAAA,EAAS,CACRhoB,UAAU,oBACVwC,KAAM,QACNkT,aAAW,EACXE,OAAK,EACLjU,QAASO,KAAK+sB,iBAAiBna,KAAK5S,QAI5C,CAEA,OACEnC,EAAAA,cAAA,OAAKC,UAAU,mDAAmD2B,QAASO,KAAK+sB,iBAAiBna,KAAK5S,OACpGnC,EAAAA,cAAA,aAAQmC,KAAKb,MAAMwT,OACnB9U,EAAAA,cAAA,KAAGC,UAAU,sCAAsCkC,KAAKb,MAAM6tB,KAAK9vB,OAAS,EAAI8C,KAAKb,MAAM6tB,KAAKI,KAAK,MAAQvvB,EAAAA,cAAA,QAAMC,UAAU,uBAAsB,SAClJmvB,EAGP,E,eChGa,SAAS2B,EAA8BzvB,GACpD,MAAMyG,EAASzG,EAAM6tB,MAAQ7tB,EAAMstB,SAAW,GAExCh0B,EAAU0G,EAAM1G,QAAQ6F,KAAK4uB,IAC1B,CAAC7kB,MAAO6kB,EAAYva,MAAOua,MAGpC,OACErvB,EAAAA,cAAA,OAAKC,UAAU,sDACbD,EAAAA,cAAA,SAAOO,MAAO,CAACuE,SAAU,SAAUxD,EAAMwT,OACzC9U,EAAAA,cAAA,OAAKO,MAAO,CAAC+J,MAAO,UAClBtK,EAAAA,cAACikB,EAAAA,GAAM,CACLC,SAAO,EACPtpB,QAASA,EACTgpB,aAAchpB,EAAQkD,QAAOgL,GAASf,EAAOT,SAASwB,EAAc,SACpEkoB,WAAY1vB,EAAMwtB,oBAClB1uB,SAAW6wB,IACT,IAAIlX,EAA0B,GAC3BkX,IACDlX,EAAWkX,EAAcxwB,KAAKtC,GAAQA,EAAW,SAEnDmD,EAAM6nB,eAAe6D,WAAU+B,EAAAA,EAAAA,IAAqBztB,EAAM+K,IAAK/K,EAAM6qB,WAAYpS,GAAU,KAIjG/Z,EAAAA,cAAA,WAGN,C,4+BCvBA,SAASkxB,EAA4B5vB,GACnC,MACEwtB,EAKExtB,EALFwtB,oBACA3F,EAIE7nB,EAJF6nB,eACAD,EAGE5nB,EAHF4nB,YACA0C,EAEEtqB,EAFFsqB,KACAuF,EACE7vB,EADF6vB,SAGIC,GAAWC,EAAAA,EAAAA,IAAWzF,GAEtB0F,EAAiBnI,EAAeoI,gBAAgBH,GAAUI,MAAMrI,EAAeoI,iBAErF,IAAIE,EAAiB,KACrB,GAAIH,EAAgB,CAClB,IAAII,EAAeJ,EAAeK,uBAE9BR,IACFO,EAAeA,EAAa5zB,QAAQ8zB,GAAiBT,EAAS7pB,SAASsqB,EAAa,OAGjF1I,EAAY/c,YAAY0lB,oBAC3BH,EAAeA,EAAa5zB,QAAQ8zB,GAAiB,cAAgBA,EAAa,MAGpFH,EAAiBC,EAAajxB,KAAKmxB,IACjC,MAAME,EAAUF,EAAa,GACvBG,EAAeH,EAAa,GAC5BI,EAAeJ,EAAa,GAC5BK,EAAcL,EAAa,GAE3BM,EAAqBr3B,EAAAA,EAAA,CACzB2D,IAAKszB,EACLzlB,IAAKuf,EAAKvf,IACVyI,MAAOmd,GAAeH,EACtB3F,WAAY2F,GACTE,GAAY,IACf7I,eAAgBA,EAChB2F,oBAAqBA,IAGvB,OAAQiD,GACN,IAAK,eACH,OACE/xB,EAAAA,cAAC2uB,EAAyBtwB,OAAAia,OAAA,GACpB4Z,EAAqB,CACzB1nB,MAAOohB,EAAKkG,MAGlB,IAAK,qBACH,OACE9xB,EAAAA,cAACwvB,EAA+BnxB,OAAAia,OAAA,GAC1B4Z,EAAqB,CACzB1nB,MAAOohB,EAAKkG,MAGlB,IAAK,YACH,OACE9xB,EAAAA,cAAC4vB,EAAsBvxB,OAAAia,OAAA,GACjB4Z,EAAqB,CACzB1nB,MAAOohB,EAAKkG,MAGlB,IAAK,cACH,OACE9xB,EAAAA,cAAC2vB,EAAwBtxB,OAAAia,OAAA,GACnB4Z,EAAqB,CACzB1nB,MAAOohB,EAAKkG,MAGlB,IAAK,mBACH,OACE9xB,EAAAA,cAAC4vB,EAAsBvxB,OAAAia,OAAA,GACjB4Z,EAAqB,CACzB1nB,MAAOohB,EAAKkG,GACZ/B,mBAAqBjqB,IAAMqsB,EAAAA,EAAAA,WAAUrsB,MAG3C,IAAK,YACH,OACE9F,EAAAA,cAACiwB,EAAsB5xB,OAAAia,OAAA,GACjB4Z,EAAqB,CACzB/C,KAAMvD,EAAKkG,IAAY,MAG7B,IAAK,gBACH,OACE9xB,EAAAA,cAACoyB,EAA0B/zB,OAAAia,OAAA,GACrB4Z,EAAqB,CACzB/C,KAAMvD,EAAKkG,IAAY,MAG7B,IAAK,mBACH,OACE9xB,EAAAA,cAAC+wB,EAA6B1yB,OAAAia,OAAA,GACxB4Z,EAAqB,CACzB/C,KAAMvD,EAAKkG,IAAY,MAG7B,QACE,OAAO,KACX,GAEJ,CAEA,OAAOL,CACT,CAEA,QAAezxB,EAAAA,KAAWkxB,GC7GX,SAASmB,EAAc/wB,GACpC,MACE6nB,EAGE7nB,EAHF6nB,eACAC,EAEE9nB,EAFF8nB,oBACAF,EACE5nB,EADF4nB,YAGF,IAAKC,EAAemJ,YAAclJ,EAAoBmJ,4BAA+B,OAAO,KAC5F,IAAKrJ,EAAY/c,YAAYqmB,iBAAoB,OAAO,KACxD,MAAMC,EAAcrJ,EAAoBmJ,4BAA4Bz0B,QAAO,CAAC8tB,EAAMhrB,KAEhF,GAAkB,cAAdgrB,EAAK1rB,KAAsB,CAE7B,MAAMwyB,EAAWtJ,EAAoBmJ,4BAA4B3xB,EAAQ,GACzE,GAAI8xB,GAA8B,aAAlBA,EAASxyB,KACvB,OAAO,CAEX,CACA,OAAO,CAAI,IAGb,GAAIuyB,EAAYpzB,QAAU,EAAK,OAAO,KAEtC,IAAIszB,GAA4DC,EAAAA,EAAAA,gBAAeH,EAAYhyB,KAAI,CAACmrB,EAAMhrB,IAAU,CAACgrB,EAAMhrB,MAAS,EAAEgrB,EAAMhrB,KAAyB,YAAdgrB,EAAK1rB,OACxJ,GAAqC,IAAjCyyB,EAAsBtzB,OAAc,CACtC,MAAMwzB,EAAmBJ,EAAYpzB,OAAS,EAC9CszB,EAAwB,CAAC,CAACF,EAAYI,GAAmBA,GAC3D,CAEA,MACMC,EADkBH,EAAsB70B,QAAO,EAAE8tB,EAAMhrB,MAAY,CAAC,WAAY,cAAe,aAAa0G,SAASskB,EAAK1rB,QACrFO,KAAI,EAAEmrB,EAAMhrB,KAAWA,IAE5DmyB,EAAsBD,EAAmBryB,KAAKuyB,IAClD,MAAMpH,EAAO6G,EAAYO,GAEzB,GAAkB,YAAdpH,EAAK1rB,MAAqC,IAAf0rB,EAAKqH,QAAgB/J,EAAY/c,YAAY+mB,UAAa,OAAO,KAEhG,IAAIC,EAAuB,KAC3B,GAAIH,EAAoB,EAAG,CACzB,MAAMI,EAASX,EAAYO,EAAoB,GAEzCK,GADYD,EAAO/mB,KACFinB,EAAAA,EAAAA,IAAkBF,EAAQxH,EAAKvf,MAEhDknB,EAAmBF,EAAe,GAClCG,EAAsBH,EAAe,GACrCI,EAAsBL,EAAOG,GAAkBl0B,OAErD,IAAIq0B,EAA4B,EAChC,GAAIF,EAAsB,EAAG,CAE3BE,EAD6BN,EAAOG,GAAkBC,EAAsB,GAC3BG,SACnD,CAEA,IAAIC,EAA2BH,EAAsB,EACrD,GAAID,EAAsB,IAAMC,EAAqB,CAEnDG,EAD4BR,EAAOG,GAAkBC,EAAsB,GAC5BG,SACjD,CAEAR,EAAuB,CACrBnzB,EAAAA,cAACioB,EAAAA,EAAS,CACRzpB,IAAI,WACJiE,KAAMzC,EAAAA,cAAA,KAAGC,UAAU,mBACnB0V,aAAW,EACXE,OAAK,EACLrU,SAAkC,IAAxBgyB,GAA4C,YAAd5H,EAAK1rB,MAAqC,IAAf0rB,EAAKqH,QAAgB/J,EAAY/c,YAAY+mB,UAChHtxB,QAASA,KACPunB,EAAe6D,WAAU6G,EAAAA,EAAAA,IAAoBjI,EAAKkI,YAAclI,EAAKvf,KAAK,IAG9ErM,EAAAA,cAACioB,EAAAA,EAAS,CACRzpB,IAAI,aACJiE,KAAMzC,EAAAA,cAAA,KAAGC,UAAU,qBACnB0V,aAAW,EACXE,OAAK,EACLrU,SAAUgyB,EAAsB,IAAMC,GAAsC,YAAd7H,EAAK1rB,MAAqC,IAAf0rB,EAAKqH,QAAgB/J,EAAY/c,YAAY+mB,UACtItxB,QAASA,KACPunB,EAAe6D,WAAU+G,EAAAA,EAAAA,IAAsBnI,EAAKkI,YAAclI,EAAKvf,KAAK,IAGhFrM,EAAAA,cAACioB,EAAAA,EAAS,CACRzpB,IAAI,QACJiE,KAAMzC,EAAAA,cAAA,KAAGC,UAAU,gBACnB0V,aAAW,EACXE,OAAK,EACLrU,UAAW0nB,EAAY/c,YAAY6nB,oBAAqC,YAAdpI,EAAK1rB,MAAqC,IAAf0rB,EAAKqH,QAAgB/J,EAAY/c,YAAY8nB,YAClIryB,QAASA,KACPunB,EAAe+K,2BACf/K,EAAe6D,WAAUmH,EAAAA,EAAAA,IAAoBvI,EAAKkI,YAAclI,EAAKvf,KAAK,IAIlF,CAEA,MAAMolB,EACJzxB,EAAAA,cAACkxB,EAA2B,CAC1B/H,eAAgBA,EAChBD,YAAaA,EACb0C,KAAMA,IAIV,IAAIwI,EAAU,KAKd,OAJIpB,IAAsBF,EAAmBA,EAAmBzzB,OAAS,KACvE+0B,EAAUp0B,EAAAA,cAAA,OAAKC,UAAU,kCAIzBD,EAAAA,cAAA,OAAKxB,IAAKotB,EAAKvf,IAAKpM,UAAU,wBAC5BD,EAAAA,cAAA,OAAKC,UAAU,8BACbD,EAAAA,cAAA,SAAOC,UAAU,0BAA0B2rB,EAAK1rB,KAAK,KAAG0rB,EAAKvf,IAAI,KAChE8mB,GAEF1B,EACA2C,EACG,IAIJC,EACJr0B,EAAAA,cAAA,OAAKC,UAAU,eACZ8yB,GAIL,OACE/yB,EAAAA,cAAA,OAAKC,UAAU,8BACbD,EAAAA,cAAA,OAAKC,UAAU,iCACdo0B,EAGP,C,okCCtIe,SAASC,EAAkBhzB,GACxC,MACE8sB,EAIE9sB,EAJF8sB,aACAhF,EAGE9nB,EAHF8nB,oBACAD,EAEE7nB,EAFF6nB,eACAoL,EACEjzB,EADFizB,IAGIC,EAAiBlzB,EAAMkzB,eAEvBC,IAAkBF,EAC+B3G,EAAAvxB,EAA/B2D,EAAAA,SAAeu0B,GAAK9xB,MAAQ,IAAG,GAAhDA,EAAImrB,EAAA,GAAE8G,EAAO9G,EAAA,GACwD+G,EAAAt4B,EAAtC2D,EAAAA,SAAeu0B,GAAKrlB,aAAe,IAAG,GAArEA,EAAWylB,EAAA,GAAEC,EAAcD,EAAA,GACsCE,EAAAx4B,EAAlB2D,EAAAA,SAAe,IAAG,GAAjE80B,EAAmBD,EAAA,GAAEE,EAAsBF,EAAA,GACEG,EAAA34B,EAAlB2D,EAAAA,SAAe,IAAG,GAA7Ci1B,EAASD,EAAA,GAAEE,EAAYF,EAAA,GAC2DG,EAAA94B,EAAvD2D,EAAAA,SAAkD,MAAK,GAAlFo1B,EAASD,EAAA,GAAEE,EAAYF,EAAA,GACmCG,EAAAj5B,EAArB2D,EAAAA,UAAe,GAAM,GAA1Du1B,EAAcD,EAAA,GAAEE,EAAiBF,EAAA,GACuCG,EAAAp5B,EAArB2D,EAAAA,UAAe,GAAM,GAAxE01B,EAAqBD,EAAA,GAAEE,EAAwBF,EAAA,IAElDrM,EAAoBgM,WAAeA,GAAaA,GAAahM,EAAoBgM,YACnFC,EAAajM,EAAoBgM,WACjChM,EAAoBiM,aAAajM,EAAoBgM,YAGvD,MAiBMQ,EAAmCpB,EAAeoB,iCAAiC93B,QAAO+3B,GAAQA,EAAKC,gBAAgBzpB,MAAQ+oB,GAAW/oB,MA0B1I0pB,EAAaxB,GAAKpP,SAAWiE,GAAqBgM,WAAWjQ,SAAW,GACxE6Q,EAAgCC,EAAAA,EAAUA,EAAAA,EAAeF,EAAY,IAAIG,EAAAA,MAA+BC,EAAAA,MAY9G,OAAQn2B,EAAAA,cAAAA,EAAAA,SAAA,KACNA,EAAAA,cAAC8iB,EAAAA,EAAQ,CAACC,MAAI,GACZ/iB,EAAAA,cAAA,OAAKC,UAAU,uCAAuCM,MAAO,CAACgS,UAAW,SACvEvS,EAAAA,cAAA,UAAI,4BACJA,EAAAA,cAAA,WACEA,EAAAA,cAAA,QAAMoV,OAAO,IACVmf,GAAQv0B,EAAAA,cAAAA,EAAAA,SAAA,KACPA,EAAAA,cAAA,KAAGO,MAAO,CAAC61B,WAAY,WAAW,mBAAiB7B,EAAI8B,eAAe5zB,KAAK,KAC3EzC,EAAAA,cAAA,KAAGO,MAAO,CAAC61B,WAAY,WAAW,iBAAe7B,EAAI+B,UAAU,IAAI9qB,MAAM,MAE3ExL,EAAAA,cAAA,WAAK,QAEHA,EAAAA,cAAA,SACEE,KAAK,OACLuC,KAAK,OACLjB,SAAUizB,EACV7rB,YAAY,8BACZxI,SAzEYC,IACxBq0B,EAAQr0B,EAAEC,OAAOkK,OACjB0qB,EAAa,KAAK,EAwEN1qB,MAAO/H,IAETzC,EAAAA,cAAA,QAAMO,MAAO,CAAC2M,MAAO,QAAS+nB,IAEhCj1B,EAAAA,cAAA,OAAKO,MAAO,CAAC8J,QAAS,SAAS,eAE7BrK,EAAAA,cAAA,YACEyC,KAAK,cACLjB,SAAUizB,EACV7rB,YAAY,iDACZxI,SA/EmBC,IAC/Bu0B,EAAev0B,EAAEC,OAAOkK,MAAM,EA+ElBA,MAAO0E,KAIT8mB,GACAh2B,EAAAA,cAAA,OAAKO,MAAO,CAAC8J,QAAS,SAAS,iDAE7BrK,EAAAA,cAAA,UAAQO,MAAO,CAAC+J,MAAO,QAASE,MAAOsqB,EAAqB10B,SAnFpCC,IACpC00B,EAAuB10B,EAAEC,OAAOkK,MAAM,EAkF0EhJ,SAAsD,IAA5Co0B,EAAiCv2B,QAC7IW,EAAAA,cAAA,UAAQwK,MAAM,IAAG,kCAChBgqB,EAAe+B,mBAAmB91B,KAAK+1B,GACtCx2B,EAAAA,cAAA,UAAQxB,IAAKg4B,EAAG11B,GAAI0J,MAAOgsB,EAAG11B,IAAK01B,EAAG/zB,UAK9CzC,EAAAA,cAAA,OAAKO,MAAO,CAAC8J,QAAS,SACyB,IAA5CurB,EAAiCv2B,QAAgBW,EAAAA,cAAAA,EAAAA,SAAA,KAChDA,EAAAA,cAAA,WAAK,2CACLA,EAAAA,cAAA,KAAGO,MAAO,CAAC61B,WAAY,aAAcR,EAAiC,GAAGluB,oBAAoBjF,SAInGzC,EAAAA,cAAA,OAAKC,UAAU,yBACbD,EAAAA,cAACioB,EAAAA,EAAS,CAACxlB,KAAK,OAAOkT,aAAW,EAACE,OAAK,EAACjU,QA9D/BvB,IACboC,EAEMuzB,GAA6E,IAA5CJ,EAAiCv2B,SAAiBy1B,EAC5FU,GAAkB,GAElBG,GAAyB,GAJzBT,EAAa,oCAKf,IAwDQl1B,EAAAA,cAACioB,EAAAA,EAAS,CAACxlB,KAAK,SAASkT,aAAW,EAACE,OAAK,EAACjU,QAASwsB,QAK5DpuB,EAAAA,cAAC8iB,EAAAA,EAAQ,CAACC,KAAMwS,GACdv1B,EAAAA,cAAA,OAAKC,UAAU,uCAAuCM,MAAO,CAACgS,UAAW,SACvEvS,EAAAA,cAAA,OAAKO,MAAO,CAAC,UAAa,WACxBP,EAAAA,cAAA,KAAGO,MAAO,CAAC,WAAc,OAAQ,SAAY,UAAU,gFAGvDP,EAAAA,cAAA,WAAKA,EAAAA,cAAA,UAAQ4B,QA3GG60B,KACtBjB,GAAkB,EAAM,GA0GqB,UAI7Cx1B,EAAAA,cAAC8iB,EAAAA,EAAQ,CAACC,KAAM2S,GACd11B,EAAAA,cAAA,OAAKC,UAAU,uCAAuCM,MAAO,CAACgS,UAAW,SACvEvS,EAAAA,cAAA,OAAKO,MAAO,CAAC,UAAa,WACxBP,EAAAA,cAAA,SAAG,SACKA,EAAAA,cAAA,SAAG,YAAY,qCAAkCA,EAAAA,cAAA,SAAG,UAAU,eAEtEA,EAAAA,cAAA,OAAKC,UAAU,wBAAwBM,MAAO,CAAC6P,SAAU,WAAY5P,WAAY,QAC/ER,EAAAA,cAACioB,EAAAA,EAAS,CAACxlB,KAAK,WAAWkT,aAAW,EAACE,OAAK,EAACjU,QAhH/BvB,IACtB,IAAK+0B,EAAa,OAElB,MAAMsB,EAAS,CACbj0B,OACAyM,cACA7C,IAAK+oB,EAAU/oB,IACfsqB,sBAAuBtb,SAASyZ,IAGlC,IAAI8B,EAAyD,CAC3DD,sBAAuBtb,SAASyZ,GAChC+B,mBAAqBzB,EAAkB0B,MAGrCC,EAAmBvC,EAAewC,0CAA4C,GAClFD,EAAmBA,EAAiBrmB,OAAO,CAACkmB,IAC5CpC,EAAeyC,4CAA4CF,GAE3D5N,EAAe6D,WAAU+B,EAAAA,EAAAA,IAAqBqG,EAAU/oB,IAAK,SAAUqqB,IACvEf,GAAyB,GACzBvH,GAAc,IA4FNpuB,EAAAA,cAACioB,EAAAA,EAAS,CAACxlB,KAAK,SAASkT,aAAW,EAACE,OAAK,EAACjU,QAASwsB,QAMhE,C,giCClLA,MAAM8I,EAAaA,IACT,OAAMtqB,KAAK4U,MAAsB,IAAhB5U,KAAK6U,cAAoB7U,KAAK4U,MAAsB,IAAhB5U,KAAK6U,cAAoB7U,KAAK4U,MAAsB,IAAhB5U,KAAK6U,aAazF,SAAS0V,EAAa71B,GACnC,MACE4nB,EAOE5nB,EAPF4nB,YACAkO,EAME91B,EANF81B,OACAC,EAKE/1B,EALF+1B,QACAC,EAIEh2B,EAJFg2B,iBACAC,EAGEj2B,EAHFi2B,WACAC,EAEEl2B,EAFFk2B,cACAC,EACEn2B,EADFm2B,UAGoD7J,EAAAvxB,EAA5B2D,EAAAA,SAAek3B,KAAa,GAA/ChqB,EAAK0gB,EAAA,GAC6C+G,GADnC/G,EAAA,GACmCvxB,EAArB2D,EAAAA,UAAe,GAAM,IAAlD03B,EAAU/C,EAAA,GAAEgD,EAAahD,EAAA,GAoBhC,IAAIiD,EAKJ,OAJIR,EAAOt2B,KAAOooB,EAAYpoB,IAAMu2B,IAAYC,IAC9CM,EAAe53B,EAAAA,cAAA,cAAQ,kEAIvBA,EAAAA,cAAA,OAAKC,UAAU,SAAS2B,QAxBJi2B,KAChBT,EAAOt2B,KAAOooB,EAAYpoB,GACxBu2B,EACEC,EACFE,IAEAC,IAGFF,IAGEF,GACFI,GAEJ,GAUGJ,GACCr3B,EAAAA,cAAA,OAAKC,UAAU,qBACbD,EAAAA,cAAA,OAAKC,WAAey3B,EAAa,WAAa,UAA7B,WAIrB13B,EAAAA,cAAA,OAAK83B,YAAaA,IAAMH,GAAc,GAAOI,aAAcA,IAAMJ,GAAc,GAAQ13B,UAAU,gBAAgBM,MAAO,CAACa,gBAAiB8L,IACxIlN,EAAAA,cAAA,KAAGC,UAAU,kBAAkBm3B,EAAO/sB,SACrCqtB,GACC13B,EAAAA,cAAA,QAAMC,UAAU,kBACbm3B,EAAOnkB,MAAM,IAAE2kB,IAM5B,CCxDe,SAASI,EAAc12B,GACpC,MACE4nB,EAME5nB,EANF4nB,YACA+O,EAKE32B,EALF22B,cACAC,EAIE52B,EAJF42B,UACAX,EAGEj2B,EAHFi2B,WACAC,EAEEl2B,EAFFk2B,cACAC,EACEn2B,EADFm2B,UAGIU,EAAwC,OAAzBD,EAAUE,WAE/B,OACEp4B,EAAAA,cAAA,OAAKC,UAAU,0BACZg4B,EAAcx3B,KAAK22B,GAClBp3B,EAAAA,cAACm3B,EAAY,CACX34B,IAAM,gBAAe44B,EAAOt2B,KAC5BooB,YAAaA,EACbkO,OAAQA,EACRC,QAASD,EAAOt2B,KAAOo3B,EAAUE,WACjCd,iBAAkBF,EAAOt2B,KAAOo3B,EAAUE,YAAclP,EAAYmP,YAAcH,EAAUI,cAC5Ff,WAAYA,EACZC,cAAeA,EACfC,UAAWA,MAGbU,GACAn4B,EAAAA,cAACioB,EAAAA,EAAS,CACRxlB,KAAK,QACLxC,UAAU,oBACV2B,QAAS21B,IAKnB,C,4iECjCA,MAsFA,GAtFsBj2B,IACpB,MACE8nB,EAGE9nB,EAHF8nB,oBACAD,EAEE7nB,EAFF6nB,eACAhd,EACE7K,EADF6K,YAG0DyhB,EAAAvxB,GAApB2D,EAAAA,UAAe,GAAK,GAArDu4B,EAAY3K,EAAA,GAAE4K,EAAe5K,EAAA,GACM+G,EAAAt4B,GAApB2D,EAAAA,SAAe,MAAK,GAAnCu0B,EAAGI,EAAA,GAAE8D,EAAM9D,EAAA,GAC2CE,EAAAx4B,GAArB2D,EAAAA,UAAe,GAAM,GAAtD04B,EAAY7D,EAAA,GAAE8D,EAAe9D,EAAA,GAC8BG,EAAA34B,GAApB2D,EAAAA,SAAe,MAAK,GAA3D44B,EAAe5D,EAAA,GAAE6D,EAAkB7D,EAAA,GAE1Ch1B,EAAAA,WAAgB,KACdoI,MAAM,mCACL+C,MAAKtN,GAAOA,EAAIyK,SACd6C,MACEoJ,IACCskB,EAAmBtkB,EAAS,IAE7BI,IACCC,QAAQD,MAAMA,EAAM,GAEvB,GACF,IAiCH,OACE3U,EAAAA,cAAAA,EAAAA,SAAA,KACAA,EAAAA,cAAC8iB,EAAAA,EAAQ,CAACC,KAAMwV,GACdv4B,EAAAA,cAAA,OAAKC,UAAU,6DAA6DM,MAAO,CAACgS,UAAW,OAAWjI,MAAO,MAAU9J,WAAY,SACrIR,EAAAA,cAAA,OAAKO,MAAO,CAACI,UAAW,QACtBX,EAAAA,cAAA,UAAQ4B,QApCMk3B,KACpBN,GAAgB,EAAM,GAmCgB,MAEjCI,EAAmB54B,EAAAA,cAAC+4B,EAAAA,EAAkB,CACrC/W,SAAU4W,EAAgBI,SAC1B7sB,YAAaA,EACbwL,oBAAqBihB,EAAgBK,sBACrC5hB,QAAQ,SACRshB,gBAvCoBpE,IAC1BkE,EAAOlE,GACPoE,GAAgB,EAAK,IAsCV34B,EAAAA,cAAA,WAAK,gBAIhBA,EAAAA,cAAC8iB,EAAAA,EAAQ,CAACC,KAAM2V,GACd14B,EAAAA,cAAA,OAAKC,UAAU,uCAAuCM,MAAO,CAACgS,UAAW,SACvEvS,EAAAA,cAAA,OAAKO,MAAO,CAACI,UAAW,WACtBX,EAAAA,cAAA,OAAKO,MAAO,CAACoR,aAAc,SAAS,SAAM3R,EAAAA,cAAA,SAAG,YAAY,wDAAqDA,EAAAA,cAAA,SAAG,UAAU,gBAC3HA,EAAAA,cAAA,UAAQ4B,QAtCSs3B,KACvB,MAAM5P,EAAcF,EAAoBE,YACxC,GAAIA,GAAaC,OAAS4P,EAAAA,GAAkB,OAE5C,MAAMvN,EAAI/wB,GAAAA,GAAA,GACL05B,EAAI6E,eAAeC,aAAW,IACjCC,iBAAkB/E,EAAI16B,KAAKy/B,iBAAmB,GAAK,IAEjDhQ,EAAYiQ,WACdpQ,EAAe6D,WAAUwM,EAAAA,EAAAA,IAAgClQ,EAAYiQ,WAAY,KAAM,CAAC3N,KAExFzC,EAAe6D,WAAUyM,EAAAA,EAAAA,IAA+BnQ,EAAYjd,IAAKid,EAAY6C,WAAY,KAAM,CAACP,KAE1GxC,EAAoBiM,aAAazJ,GACjCzC,EAAeY,eAAe2P,EAAAA,GAAW,CAAC7/B,KAAM06B,EAAKhL,KAAMmQ,EAAAA,IAAW,EAwB7Bn5B,MAAO,CAAC8iB,YAAa,SAAU,YAClErjB,EAAAA,cAAA,UAAQ4B,QA5CM+3B,KACpBlB,EAAO,MACPE,GAAgB,EAAM,GA0CgB,aAInC,ECzDQ,SAASiB,GAA8Bt4B,GACpD,MACEu4B,EAOEv4B,EAPFu4B,gBACA1Q,EAME7nB,EANF6nB,eACAC,EAKE9nB,EALF8nB,oBAEAF,GAGE5nB,EAJF+nB,WAIE/nB,EAHF4nB,aACAsL,EAEElzB,EAFFkzB,eACAsF,EACEx4B,EADFw4B,eAIA7B,EAKE7O,EALF6O,cACAC,EAIE9O,EAJF8O,UACAX,EAGEnO,EAHFmO,WACAC,EAEEpO,EAFFoO,cACAC,EACErO,EADFqO,UAGF,IAAIsC,EAeJ,GAdI5Q,EAAe6Q,kBAAoB/B,GAAiBC,IACtD6B,EACE/5B,EAAAA,cAACg4B,EAAa,CACZx5B,IAAI,gBACJ0qB,YAAaA,EACb+O,cAAeA,EACfC,UAAWA,EACXX,WAAYA,EACZC,cAAeA,EACfC,UAAWA,MAKZtO,EAAemJ,UAClB,OAAIyH,EAEA/5B,EAAAA,cAAA,OAAKC,UAAU,wBACZ85B,GAIE,KAIX,MASME,EAAW,GATgB,CAC/B,OACA,SACA,YACA,cACA,YACA,QAKKl7B,SAASwB,IACd,MAAM25B,GAAgB//B,EAAAA,EAAAA,KAAIivB,EAAqB,eAAgB,IAAwB9hB,SAAS/G,GAC1F45B,EAAwB,SAAV55B,EAEhB45B,GAAe/Q,EAAoBE,aAAaC,OAAS6Q,EAAAA,IAC3DH,EAASr7B,KAAKoB,EAAAA,cAACuuB,EAAsB,CACnC/vB,IAAI,yBACJ2qB,eAAgBA,EAChBC,oBAAqBA,KAIzB6Q,EAASr7B,KAAKoB,EAAAA,cAACioB,EAAAA,EAAS,CACtBzpB,IAAM,GAAE+B,UACRkC,KAAMzC,EAAAA,cAAA,KAAGC,UAAY,SAAQM,MAC7BoV,YAAaukB,EACbrkB,OAAK,EACLrU,UAAW4nB,EAAoBiE,qBAAwB8M,GAAeE,EAAAA,GAAsBjR,EAAoBiE,qBAChHzrB,QAASA,KACHu4B,EACFhR,EAAeY,eAAeqQ,EAAAA,IAE9BhR,EAAoBkR,YAAY/5B,EAClC,IAED,IAGL05B,EAASr7B,KACPoB,EAAAA,cAACotB,EAAwB,CACvB5uB,IAAI,2BACJ2qB,eAAgBA,EAChBC,oBAAqBA,KAIzB6Q,EAASr7B,KAAKoB,EAAAA,cAAA,OAAKxB,IAAI,YAAYyB,UAAU,kCAE7Cg6B,EAASr7B,KACPoB,EAAAA,cAACioB,EAAAA,EAAS,CACRzpB,IAAI,eACJiE,KAAK,eACLoT,OAAK,EACLjU,QAASA,KACPunB,EAAeY,eAAeC,EAAAA,GAAiB,KAKrDiQ,EAASr7B,KAAKoB,EAAAA,cAAA,OAAKxB,IAAI,YAAYyB,UAAU,kCAG7C,MAAMs6B,EAA0BnR,EAAoBmJ,6BAA+B,GAC7EvB,GACH9H,EAAY/c,YAAYquB,gBACxBpR,EAAoBE,aAAaC,OAASkR,EAAAA,MACzCrR,EAAoBiE,sBAAwBgN,EAAAA,GAAsBjR,EAAoBiE,sBAAyBgN,EAAAA,GAAsBjR,EAAoBiE,uBAAyB,CAAC,QAAS,QAAS,SAAS/lB,SAAS2uB,EAAAA,EAAOsE,IAAcr6B,OA+DhP,OA7DA+5B,EAASr7B,KACPoB,EAAAA,cAACioB,EAAAA,EAAS,CACRzpB,IAAI,cACJiE,KAAK,cACLkT,YAAayT,EAAoBE,aAAaC,OAASkR,EAAAA,GACvD5kB,OAAK,EACLrU,SAAUwvB,EACVpvB,QAASA,KACHwnB,EAAoBE,aAAaC,OAASkR,EAAAA,GAC5CtR,EAAeW,mBAEfX,EAAeY,eAAe0Q,EAAAA,GAChC,KAK0B,mBAA5BZ,EAAgBpuB,SAAgCyd,EAAY/c,YAAYuuB,2BACtEtR,EAAoBgM,WAAWsB,OACjCuD,EAASr7B,KACPoB,EAAAA,cAACioB,EAAAA,EAAS,CACRzpB,IAAI,UACJiE,KAAK,UACLjB,UAAW4nB,EAAoBgM,WAAWkE,iBAAmB,GAAK,EAClE3jB,aAAW,EACXE,OAAK,EACLjU,QAASA,KACPunB,EAAe6D,WAAU+B,EAAAA,EAAAA,IAAqB3F,EAAoBgM,UAAU/oB,IAAK,SAAU,MAAM,KAKvG4tB,EAASr7B,KACPoB,EAAAA,cAACioB,EAAAA,EAAS,CACRzpB,IAAI,UACJiE,KAAK,UACLjB,UAAW4nB,EAAoBgM,UAC/Bzf,aAAW,EACXE,OAAK,EACLjU,QAASA,KACHwnB,EAAoBE,aAAaC,OAASmQ,EAAAA,GAC5CvQ,EAAeW,mBAEfX,EAAeY,eAAe2P,EAAAA,GAChC,MAONK,GACFE,EAASr7B,KAAKm7B,GAGZD,EAAea,iBACjBV,EAASr7B,KAAKoB,EAAAA,cAAA,QAAMxB,IAAI,kBAAkB+B,MAAO,CAAC8E,MAAO,QAASge,YAAa,SAASrjB,EAAAA,cAAA,SAAG,+BAA+B,IAAE85B,EAAea,mBAClIb,EAAec,4BACxBX,EAASr7B,KAAKoB,EAAAA,cAAA,QAAMxB,IAAI,+BAA+B+B,MAAO,CAAC8E,MAAO,QAASge,YAAa,SAASrjB,EAAAA,cAAA,SAAG,oCAAoC,IAAE85B,EAAec,6BAI7J56B,EAAAA,cAAA,WACEA,EAAAA,cAAA,OAAKC,UAAU,wBACZg6B,EACA7Q,EAAoBE,aAAaC,OAAS4P,EAAAA,IACzCn5B,EAAAA,cAAC66B,GAAY,CACXzR,oBAAqBA,EACrBD,eAAgBA,EAChBhd,YAAa+c,EAAY/c,cAG5Bid,EAAoBE,aAAaC,OAASmQ,EAAAA,IACzC15B,EAAAA,cAACs0B,EAAiB,CAChBE,eAAgBA,EAChBpG,aAAcA,IAAMjF,EAAeW,mBACnCV,oBAAqBA,EACrBD,eAAgBA,EAChBoL,IAAKnL,EAAoBE,YAAYzvB,QAGvCyH,EAAMw5B,YAAYC,mBAClB/6B,EAAAA,cAACqyB,EAAa,CACZlJ,eAAgBA,EAChBC,oBAAqBA,EACrBF,YAAaA,KAIlB5nB,EAAMw5B,YAAYC,mBACjB/6B,EAAAA,cAAA,OAAKC,UAAU,wBACbD,EAAAA,cAACqyB,EAAa,CACZlJ,eAAgBA,EAChBC,oBAAqBA,EACrBF,YAAaA,KAMzB,C,wCC/Ne,SAAS8R,GAAsB15B,GAC5C,MACEu4B,EAMEv4B,EANFu4B,gBACAoB,EAKE35B,EALF25B,eACA/R,EAIE5nB,EAJF4nB,YACAgS,EAGE55B,EAHF45B,eACA/R,EAEE7nB,EAFF6nB,eACAC,EACE9nB,EADF8nB,oBAGIjd,EAA6B+c,EAAY/c,aAAe,CAAC,EAEzDgvB,GAAcC,EAAAA,GAAAA,IAAqBvB,EAAiBoB,EAAen6B,IACzEu6B,GAAmGC,EAAAA,GAAAA,IAAsBH,GAAlHI,EAAcF,EAAdE,eAAgBC,EAA0BH,EAA1BG,2BAA4BC,EAAcJ,EAAdI,eAAgBC,EAA4BL,EAA5BK,6BAEnE,IAAIC,EAEFA,EAD8B,mBAA5B9B,EAAgBpuB,SACFsT,EAAAA,EAAAA,GAAU,aAAYkc,EAAen6B,kCAAkC46B,MAEvE3c,EAAAA,EAAAA,GAAU,aAAYkc,EAAen6B,MAAM26B,KAG7D,IAAIG,EACF57B,EAAAA,cAAA,UACEC,UAAU,yBACVuK,MAAO0wB,EAAeW,YACtBz7B,SAAWC,KAAOy7B,EAAAA,GAAAA,GAAcz7B,EAAEC,OAAOkK,QAAU0wB,EAAea,eAAe17B,EAAEC,OAAOkK,MAAM,GAEhGxK,EAAAA,cAAA,UAAQwK,MAAOwxB,GAAAA,EAAaC,SAAS,WACrCj8B,EAAAA,cAAA,UAAQwK,MAAOwxB,GAAAA,EAAaE,SAAS,WACrCl8B,EAAAA,cAAA,UAAQwK,MAAOwxB,GAAAA,EAAaG,MAAM,QAClCn8B,EAAAA,cAAA,UAAQwK,MAAOwxB,GAAAA,EAAaI,SAAS,YAGzC,GAAKjT,EAAe6Q,iBAMb,CACL,MAAMqC,EAAgD,mBAA5BxC,EAAgBpuB,QAA+BU,EAAYmwB,mBAAqBnwB,EAAYowB,QAEtH,OACEv8B,EAAAA,cAAA,WACEA,EAAAA,cAAA,OAAKC,UAAU,wBACbD,EAAAA,cAAA,MAAIC,UAAY,iCAA+Bu8B,EAAAA,GAAAA,IAA0BrB,aACtEsB,EAAAA,GAAAA,GAAqBtB,IAExBn7B,EAAAA,cAAA,UACEC,UAAU,yBACVuK,MAAOywB,EAAen6B,GACtBV,SAAWC,IAAO+oB,EAAoBsT,aAAaC,OAAOt8B,EAAEC,OAAOkK,OAAO,GAE1ExK,EAAAA,cAAA,UAAQwK,OAAOoyB,EAAAA,GAAAA,IAAiB/C,GAAkBr7B,IAAK,aAAa,aACpEwB,EAAAA,cAAA,UAAQwK,OAAOqyB,EAAAA,GAAAA,IAA2BhD,GAAkBr7B,IAAK,uBAAuB,uBACxFwB,EAAAA,cAAA,UAAQwK,OAAOsyB,EAAAA,GAAAA,IAAyBjD,GAAkBr7B,IAAK,oBAAoB,qBAEpFo9B,EACD57B,EAAAA,cAACioB,EAAAA,EAAS,CACRxlB,KAAMzC,EAAAA,cAAA,KAAGC,UAAU,eACnB0V,YAAayT,EAAoB2T,QACjCv7B,UAAW2nB,EAAemJ,YAAclJ,EAAoB2T,QAC5DlnB,OAAK,EACLjU,QAASwnB,EAAoB4T,OAE/Bh9B,EAAAA,cAACioB,EAAAA,EAAS,CACRxlB,KAAMzC,EAAAA,cAAA,KAAGC,UAAU,eACnB0V,YAAayT,EAAoB6T,QACjCz7B,UAAW2nB,EAAemJ,YAAclJ,EAAoB6T,QAC5DpnB,OAAK,EACLjU,QAASwnB,EAAoB8T,OAE/Bl9B,EAAAA,cAACioB,EAAAA,EAAS,CACRzpB,IAAK,cACLiE,KAAMzC,EAAAA,cAAA,KAAGC,UAAU,eACnBuB,UAAW2nB,EAAemJ,YAAclJ,EAAoB+T,iBAC5DxnB,YAAayT,EAAoB+T,iBACjCtnB,OAAK,EACLjU,QAASwnB,EAAoBgU,KAC7BrnB,QAASqT,EAAoBiU,YAE/Br9B,EAAAA,cAACioB,EAAAA,EAAS,CACRzpB,IAAK,0BACLiE,KAAM2mB,EAAoBkU,aAAet9B,EAAAA,cAAA,OAAKxB,IAAI,gBAAe,QAAKwB,EAAAA,cAAA,KAAGC,UAAU,eAAiB,OAAYD,EAAAA,cAAA,OAAKxB,IAAI,iBAAgB,QAAKwB,EAAAA,cAAA,KAAGC,UAAU,eAAiB,QAC5K0V,YAAayT,EAAoBkU,aACjCznB,OAAK,EACLjU,QAAUvB,IAAO+oB,EAAoBmU,gBAAgB,IAEvDv9B,EAAAA,cAACioB,EAAAA,EAAS,CACRzpB,IAAI,iBACJiE,KAAK,UACLjB,UAAW2nB,EAAemJ,WAAalJ,EAAoB+T,mBAAqBd,EAChF1mB,aAAcyT,EAAoB+T,iBAClCtnB,OAAK,EACLjU,QAASA,KAAOwnB,EAAoBmT,SAAS,IAE7ChB,GACAv7B,EAAAA,cAAC+kB,GAAAA,EAAa,CACdtiB,KAAM84B,EACNv4B,eAAgBw4B,EAChBh6B,UAAW2nB,EAAemJ,WAAalJ,EAAoB+T,mBAAqBd,EAChF1mB,aAAcyT,EAAoB+T,iBAClCtnB,OAAK,EACL/a,IAAK6gC,IAEP37B,EAAAA,cAACioB,EAAAA,EAAS,CACRxlB,KAAK,QACLkT,aAAW,EACXE,OAAK,EACLjU,QAASsnB,EAAYsU,aAEvBx9B,EAAAA,cAACioB,EAAAA,EAAS,CACRxlB,KAAMzC,EAAAA,cAAA,KAAGC,UAAU,gBACnBuB,UAAW2nB,EAAemJ,YAAcnmB,EAAYsxB,gBACpD9nB,aAAW,EACXE,OAAK,EACLjU,QAAUvB,IAAO8oB,EAAeY,eAAe2T,EAAAA,GAAe,CAAEC,UAAW,SAAU,IAEvF39B,EAAAA,cAACioB,EAAAA,EAAS,CACRxlB,KAAMzC,EAAAA,cAAA,KAAGC,UAAU,gBACnBuB,UAAW2nB,EAAemJ,YAAcnmB,EAAYsxB,gBACpD9nB,aAAW,EACXE,OAAK,EACLjU,QAAUvB,IAAO8oB,EAAeY,eAAe2T,EAAAA,GAAe,CAAEC,UAAW,SAAU,IAEvF39B,EAAAA,cAACioB,EAAAA,EAAS,CACRxlB,KAAMzC,EAAAA,cAAA,KAAGC,UAAU,gBACnBuB,UAAW2nB,EAAemJ,YAAcnmB,EAAYsxB,gBACpD9nB,aAAW,EACXE,OAAK,EACLjU,QAAUvB,IAAO8oB,EAAeY,eAAe2T,EAAAA,GAAe,CAAEC,UAAW,SAAU,IAEvF39B,EAAAA,cAACioB,EAAAA,EAAS,CACRxlB,KAAMzC,EAAAA,cAAA,KAAGC,UAAU,mBACnBuB,UAAW2nB,EAAemJ,YAAcnmB,EAAYsxB,gBACpD9nB,aAAW,EACXE,OAAK,EACLjU,QAAUvB,IAAO8oB,EAAeY,eAAe2T,EAAAA,GAAe,CAAEC,UAAW,OAAQ,KAElFr8B,EAAMw5B,YAAYC,mBACnB/6B,EAAAA,cAAA,UACEC,UAAU,yBACVuK,MAAO4e,EAAoBwU,qBAC3Bx9B,SAAWC,KAAOw9B,EAAAA,EAAAA,GAAuBx9B,EAAEC,OAAOkK,QAAU4e,EAAoB0U,wBAAwBz9B,EAAEC,OAAOkK,MAAM,EACvHhJ,UAAW2nB,EAAemJ,WAA6C,eAAhCnmB,EAAY4xB,iBAEnD/9B,EAAAA,cAAA,UAAQwK,MAAOwzB,EAAAA,EAAsBC,cAAc,gBACnDj+B,EAAAA,cAAA,UAAQwK,MAAOwzB,EAAAA,EAAsBE,iBAAiB,qBAGvD58B,EAAMw5B,YAAYC,mBACnB/6B,EAAAA,cAAA,UACEC,UAAU,yBACVuK,MAAO2e,EAAegV,mBACtB/9B,SAAWC,KAAO+9B,EAAAA,EAAAA,IAAqB/9B,EAAEC,OAAOkK,QAAU4e,EAAoBiV,sBAAsBh+B,EAAEC,OAAOkK,MAAM,EACnHhJ,SAAU25B,IAAgBmD,GAAAA,GAAaC,WAEtClgC,OAAO0J,OAAOy2B,EAAAA,IAAqB/9B,KAAK09B,GAChCn+B,EAAAA,cAAA,UAAQwK,MAAO2zB,EAAoB3/B,IAAK2/B,IAAqBM,EAAAA,EAAAA,YAAUC,EAAAA,EAAAA,WAAUP,SAI3F78B,EAAMw5B,YAAYC,mBAAqB7R,EAAY/c,YAAYwyB,iBAChE3+B,EAAAA,cAACioB,EAAAA,EAAS,CACRxlB,KAAK,eACLkT,aAAW,EACXE,OAAK,EACLZ,aAAa,mBACbjS,eAAe,4MACfkS,cAAc,KACdrR,KAAO,2BAA0Bg2B,EAAgB/4B,YAItDQ,EAAMw5B,YAAYC,mBACjB/6B,EAAAA,cAAA,OAAKC,UAAU,wBACbD,EAAAA,cAAA,UACEC,UAAU,yBACVuK,MAAO4e,EAAoBwU,qBAC3Bx9B,SAAWC,KAAOw9B,EAAAA,EAAAA,GAAuBx9B,EAAEC,OAAOkK,QAAU4e,EAAoB0U,wBAAwBz9B,EAAEC,OAAOkK,MAAM,EACvHhJ,UAAW2nB,EAAemJ,WAA6C,eAAhCnmB,EAAY4xB,iBAEnD/9B,EAAAA,cAAA,UAAQwK,MAAOwzB,EAAAA,EAAsBC,cAAc,gBACnDj+B,EAAAA,cAAA,UAAQwK,MAAOwzB,EAAAA,EAAsBE,iBAAiB,oBAExDl+B,EAAAA,cAAA,UACEC,UAAU,yBACVuK,MAAO2e,EAAegV,mBACtB/9B,SAAWC,KAAO+9B,EAAAA,EAAAA,IAAqB/9B,EAAEC,OAAOkK,QAAU4e,EAAoBiV,sBAAsBh+B,EAAEC,OAAOkK,MAAM,EACnHhJ,SAAU25B,IAAgBmD,GAAAA,GAAaC,WAEtClgC,OAAO0J,OAAOy2B,EAAAA,IAAqB/9B,KAAK09B,GAChCn+B,EAAAA,cAAA,UAAQwK,MAAO2zB,EAAoB3/B,IAAK2/B,IAAqBM,EAAAA,EAAAA,YAAUC,EAAAA,EAAAA,WAAUP,QAG3FjV,EAAY/c,YAAYwyB,iBACvB3+B,EAAAA,cAACioB,EAAAA,EAAS,CACRxlB,KAAK,eACLkT,aAAW,EACXE,OAAK,EACLZ,aAAa,mBACbjS,eAAe,4MACfkS,cAAc,KACdrR,KAAO,2BAA0Bg2B,EAAgB/4B,YAO/D,CA/KE,OACEd,EAAAA,cAAAA,EAAAA,SAAA,KA+KN,C,gBC9Ne,SAAS4+B,GAAuBt9B,GAC7C,MACEu4B,EASEv4B,EATFu4B,gBACAoB,EAQE35B,EARF25B,eACA/R,EAOE5nB,EAPF4nB,YACAC,EAME7nB,EANF6nB,eACAC,EAKE9nB,EALF8nB,oBACAyV,EAIEv9B,EAJFu9B,aACAC,EAGEx9B,EAHFw9B,cACAC,EAEEz9B,EAFFy9B,cACAC,EACE19B,EADF09B,eAGI1V,EAAcF,EAAoBE,YACxC,GAAIA,GAAaC,OAASmU,EAAAA,GAAiB,OAAO,KAElD,MAAMuB,EAA8BplC,IAClC,GAAIA,EAAKqlC,gBAAkBrlC,EAAKqlC,eAAe7/B,OAC7C,IAAK,MAAM8/B,KAAStlC,EAAKqlC,eACvBJ,EAAcK,EAElB,EAGIC,EAA6BvlC,IACjC,MAAMwlC,EAAS,CAAC,EACZxlC,EAAKqlC,gBAAkBrlC,EAAKqlC,eAAe7/B,SAC7CggC,EAAY,IAAIxlC,EAAKqlC,eAAe,IAElCrlC,EAAKylC,WAAgC,SAAnBzlC,EAAKylC,YACzBD,EAAY,IAAIxlC,EAAKylC,WAEvBN,EAAeK,EAAO,EAGlBE,EAA6Bl/B,IACjC,MAAMxG,EAAQwG,EAAEC,OAAek/B,QACzBC,EAAa5lC,EAAKiH,GAClB68B,EAAY9jC,EAAK6lC,WA2BvB,OAAOC,EAAAA,EAAAA,IAAqB,CAC1BF,WAAYA,EACZG,gBA3BwBC,IACxB,IAAIvqB,EAAU,GACd,GAAIuqB,EAAaxgC,OAAS,EAAG,CAC3BiW,GAAY,QAAOqoB,8CACnB,IAAK,MAAM73B,KAAK+5B,EACV/5B,EAAEhF,KAAO+4B,EAAgB/4B,KAC3BwU,GAAY,GAAExP,EAAE5F,iBAAiB4F,EAAEhF,OAGzC,CACAwU,GAAW,yCAEX,QADerS,QAAQqS,MAErBwqB,EAAAA,EAAAA,IAAuB,CACrBC,QAASlG,EAAgB/4B,GACzBk/B,UAAW,WACXP,WAAYA,EACZG,gBAAiBb,KAEZ,EAGT,GAMA,EAGEkB,EAAa5/B,IACjB,MAAMxG,EAAOwG,EAAEC,OAAOk/B,QACtBpW,EAAoB8W,qBAAqBrmC,EAAKiB,IAAI,EAyE9CqlC,EAAgBj5B,GACfgiB,EAAY/c,YAAYi0B,kBAGtBpgC,EAAAA,cAAA,UAAQ,UAASkH,EAAKm5B,oBAAqB,kBAAiBn5B,EAAKw4B,WAAY99B,QAAS29B,GAA2B,UAF/G,KAKX,IAAI/zB,EAAQ,GACR80B,EAAa,GACjB,MAAM3C,EAAYrU,GAAaqU,UAC/B,OAAQA,GACN,IAAK,QACHnyB,EAAQ,cACR80B,EAAazB,EAAa0B,OAAO9/B,KAAKyG,GAElClH,EAAAA,cAAA,OAAKxB,IAAK0I,EAAKm5B,oBAAqBpgC,UAAU,6BAC5CD,EAAAA,cAAA,OAAKuM,IAAKrF,EAAKs5B,mBACfxgC,EAAAA,cAAA,UAAKkH,EAAKsE,OACVxL,EAAAA,cAAA,OAAKC,UAAU,4CACbD,EAAAA,cAAA,OAAKC,UAAU,qCACZkgC,EAAaj5B,IA/BHA,IACnBA,EAAKs5B,mBAAqBvF,EAAewF,YAAevX,EAAY/c,YAAYu0B,gBAIlF1gC,EAAAA,cAAA,OAAKC,UAAU,qCACbD,EAAAA,cAAA,UAAQ,WAAUkH,EAAKs5B,iBAAkB5+B,QAASq+B,GAAW,qBAJxD,KA+BEU,CAAgBz5B,IAEnBlH,EAAAA,cAAA,cAIN,MACF,IAAK,QACHwL,EAAQ,cACR80B,EAAazB,EAAa+B,OAAOngC,KAAKyG,GAElClH,EAAAA,cAAA,OAAKxB,IAAK0I,EAAKm5B,oBAAqBpgC,UAAU,6BAC5CD,EAAAA,cAAA,SAAO6gC,QAAQ,OAAO5G,UAAQ,GAC5Bj6B,EAAAA,cAAA,UAAQuM,IAAKrF,EAAKs5B,oBAEpBxgC,EAAAA,cAAA,UAAKkH,EAAKsE,OACVxL,EAAAA,cAAA,OAAKC,UAAU,qCACZkgC,EAAaj5B,IAEhBlH,EAAAA,cAAA,cAIN,MACF,IAAK,QACHwL,EAAQ,cACR80B,EAAazB,EAAaiC,OAAOrgC,KAAKyG,IACpC,IAAI65B,EAAgB,KACpB,MAAMC,EAAcnC,EAAaoC,SAASnjC,QAAQmN,GAAYA,EAAEO,QAAUtE,EAAKsE,QAAS01B,OAAS,KAIjG,OAHIF,IACFD,EAAgB/gC,EAAAA,cAAA,SAAOxB,IAAI,KAAKsW,MAAM,UAAUqsB,KAAK,YAAYC,QAAQ,KAAK70B,IAAKy0B,EAAYR,oBAG/FxgC,EAAAA,cAAA,OAAKxB,IAAK0I,EAAKm5B,oBAAqBpgC,UAAU,6BAC5CD,EAAAA,cAAA,SAAOqhC,YAAY,YAAYR,QAAQ,OAAO5G,UAAQ,GACpDj6B,EAAAA,cAAA,UAAQuM,IAAKrF,EAAKs5B,mBACjBO,GAEH/gC,EAAAA,cAAA,UAAKkH,EAAKsE,OACVxL,EAAAA,cAAA,OAAKC,UAAU,qCApGIqhC,EAACp6B,EAAMq6B,KAClC,IAAKrY,EAAY/c,YAAYu0B,gBAC3B,OAAO,KAET,MAAMzsB,EAAY,CAChB,oCAAqC/M,EAAKsE,MAC1C,eAAgBquB,EAAgB/4B,IAKlC,OAHIygC,IACFttB,EAAU,4BAA8BstB,EAAUlB,qBAGlDrgC,EAAAA,cAAA,UAAQC,UAAU,gBAAgB2B,QAAUvB,OACzCkhC,EAAY,kBAAoB,qBACjCvhC,EAAAA,cAACwT,GAAAA,EAAY,CACX/Q,KAAM,yBACN4R,eAAgB,2BAChBG,UAAW4qB,EACXvqB,aAAcuU,EAAoBoY,0BAA2B,WAAUt6B,EAAKsE,SAC5EoI,0BAA4B6tB,IAC1BrY,EAAoBsY,qCAAsC,WAAUx6B,EAAKsE,QAASi2B,EAAY,EAEhGxtB,UAAWA,IAEN,EA6EAqtB,CAAqBp6B,EAAM85B,GAC3Bb,EAAaj5B,IAEhBlH,EAAAA,cAAA,WACI,IAGV,MACF,IAAK,MACHwL,EAAQ,YACR80B,EAAazB,EAAa8C,KAAKlhC,KAAKyG,GAEhClH,EAAAA,cAAA,OAAKxB,IAAK0I,EAAKm5B,oBAAqBpgC,UAAU,6BAC5CD,EAAAA,cAAA,SAAOsK,MAAM,MAAM+H,OAAO,MAAM9F,IAAKrF,EAAKs5B,iBAAkBtgC,KAAK,oBACjEF,EAAAA,cAAA,UAAKkH,EAAKsE,OACVxL,EAAAA,cAAA,UAAKkH,EAAKs5B,kBACVxgC,EAAAA,cAAA,OAAKC,UAAU,qCACZkgC,EAAaj5B,IAEhBlH,EAAAA,cAAA,cAIN,MACF,QAEE,OAAO,KAGX,IAAI4hC,EAAqB,KAWzB,OAVIxY,EAAoBoY,0BAA0B7D,GAAa,IAC7DiE,EACE5hC,EAAAA,cAAA,SAAG,oRASLA,EAAAA,cAAC8iB,EAAAA,EAAQ,CAACC,MAAI,GACZ/iB,EAAAA,cAAA,OAAKC,UAAU,wCACbD,EAAAA,cAAA,OAAKC,UAAU,oBACbD,EAAAA,cAAA,OAAKC,UAAU,yBACbD,EAAAA,cAAA,MAAIC,UAAU,SAASuL,IAEzBxL,EAAAA,cAAA,OAAKC,UAAU,0BA1KF4hC,MACnB,IAAK3Y,EAAY/c,YAAY21B,kBAC3B,OAAO,KAET,MAAMnE,EAAYrU,GAAaqU,UAC/B,OACE39B,EAAAA,cAAA,UAAQC,UAAU,gBAAgB2B,QAAUvB,OAAU,SAEpDL,EAAAA,cAACwT,GAAAA,EAAY,CACX/Q,KAAO,YAAWk7B,UAClBtpB,eAAgB,2BAChBJ,UAAW,CAAC,eAAgB4lB,EAAgB/4B,IAC5C0T,UAAWyqB,EACXpqB,aAAcuU,EAAoBoY,0BAA0B7D,GAC5D/pB,0BAA4B6tB,IAC1BrY,EAAoBsY,qCAAqC/D,EAAW8D,EAAY,IAG7E,EAyJFI,GACD7hC,EAAAA,cAAA,UAAQC,UAAU,eAAe2B,QArL1BvB,IACfA,EAAE8U,kBACFgU,EAAeW,mBACXmR,EAAewF,YACZrX,EAAoBkU,cACzBlU,EAAoBgU,MACtB,GA+K2Dp9B,EAAAA,cAAA,KAAGC,UAAW,mBAGrED,EAAAA,cAAA,WACC4hC,EACAtB,GAIT,C,gBChSe,MAAMyB,WAAiC/hC,EAAAA,UACpDgC,WAAAA,CAAYV,GACVW,MAAMX,GACNa,KAAKS,MAAQ,CAAC,CAChB,CAEAyB,oBAAAA,GACElC,KAAK0tB,YACP,CAEA7B,YAAAA,CAAa3tB,GACX8B,KAAKO,SAAS,CAACotB,WAAYzvB,EAAEC,OAAOkK,OACtC,CAEAqlB,UAAAA,GACM1tB,KAAKS,MAAMktB,aACb3tB,KAAKb,MAAM0gC,aAAa7/B,KAAKS,MAAMktB,YACnC3tB,KAAKO,SAAS,CAACotB,WAAY,OAE/B,CAEAvrB,MAAAA,GACE,IAAIiG,EAAQrI,KAAKS,MAAMktB,YAAc3tB,KAAKb,MAAMkJ,MAEhD,OAAOxK,EAAAA,cAAA,SAAOE,KAAK,OAAOsK,MAAOA,EAAOpK,SAAU+B,KAAK6rB,aAAajZ,KAAK5S,MAAO6tB,OAAQ7tB,KAAK0tB,WAAW9a,KAAK5S,MAAOyG,YAAazG,KAAKb,MAAMsH,aAC9I,ECRa,SAASq5B,GAAmB3gC,GACzC,MACE4nB,EAIE5nB,EAJF4nB,YACAC,EAGE7nB,EAHF6nB,eACAC,EAEE9nB,EAFF8nB,oBACAyV,EACEv9B,EADFu9B,aAGIvV,EAAcF,EAAoBE,YAExC,GAAIA,GAAaC,OAAS2Y,EAAAA,GAAgB,OAAO,KAEjD,IAAIC,EACJ,OAAQ7Y,EAAYqU,WAClB,IAAK,QACH,MAAM4C,EAAS1B,EAAa0B,OAAO9/B,KAAK2hC,IACtC,IAAIlZ,EAAY/c,YAAYu0B,gBAC1B,OACE1gC,EAAAA,cAAA,OAAKxB,IAAK4jC,EAAW/B,qBACnBrgC,EAAAA,cAAA,OAAKuM,IAAK61B,EAAW5B,mBACrBxgC,EAAAA,cAAA,SAAIoiC,EAAW52B,QAKrB,MAAM62B,EAAahiC,IACjBA,EAAE8U,kBAE+C,YAA7CiU,EAAoBkZ,gBAAgBpiC,MACtCkpB,EAAoB8W,qBAAqBkC,EAAW5B,kBACpDrX,EAAeW,qBAEfX,EAAe6D,WAAU+B,EAAAA,EAAAA,IAAqBzF,EAAYjd,IAAK,MAAO+1B,EAAW5B,mBACjFrX,EAAeW,mBACjB,EAGF,OACE9pB,EAAAA,cAAA,OAAKxB,IAAK4jC,EAAW/B,qBACnBrgC,EAAAA,cAAA,OAAK4B,QAASygC,EAAW91B,IAAK61B,EAAW5B,mBACzCxgC,EAAAA,cAAA,SAAIoiC,EAAW52B,MAAM,IAACxL,EAAAA,cAAA,UAAQ4B,QAASygC,GAAW,WAC9C,IAIVF,EAAe5B,EAAOlhC,OAAS,EAAIkhC,EAASvgC,EAAAA,cAAA,OAAKxB,IAAI,aAAYwB,EAAAA,cAAA,UAAI,kBAAmBA,EAAAA,cAAA,UAAI,yBAC5F,MACF,IAAK,QACH,MAAM4gC,EAAS/B,EAAa+B,OAAOngC,KAAK8hC,IACtC,IAAIrZ,EAAY/c,YAAYu0B,gBAC1B,OACE1gC,EAAAA,cAAA,OAAKxB,IAAK+jC,EAAWlC,qBACnBrgC,EAAAA,cAAA,SAAO6gC,QAAQ,OAAO5G,UAAQ,GAC5Bj6B,EAAAA,cAAA,UAAQuM,IAAKg2B,EAAW/B,oBAE1BxgC,EAAAA,cAAA,SAAIuiC,EAAW/2B,QAWrB,OACExL,EAAAA,cAAA,OAAKxB,IAAK+jC,EAAWlC,qBACnBrgC,EAAAA,cAAA,SAAO6gC,QAAQ,OAAO5G,UAAQ,GAC5Bj6B,EAAAA,cAAA,UAAQuM,IAAKg2B,EAAW/B,oBAE1BxgC,EAAAA,cAAA,SAAIuiC,EAAW/2B,MAAM,IAACxL,EAAAA,cAAA,UAAQ4B,QAXfvB,IACjBA,EAAE8U,kBACFgU,EAAe6D,WAAU+B,EAAAA,EAAAA,IAAqBzF,EAAYjd,IAAK,MAAOk2B,EAAW/B,mBACjFrX,EAAeW,kBAAkB,GAQmB,WAC9C,IAIVqY,EAAevB,EAAOvhC,OAAS,EAAIuhC,EAAS5gC,EAAAA,cAAA,OAAKxB,IAAI,aAAYwB,EAAAA,cAAA,UAAI,kBAAmBA,EAAAA,cAAA,UAAI,yBAC5F,MACF,IAAK,QACH,GAAiD,UAA7CopB,EAAoBkZ,gBAAgBpiC,KAAoB,OAE5D,MAAM8hC,EAAgBjoB,IACpBoP,EAAe6D,WAAU+B,EAAAA,EAAAA,IAAqBzF,EAAYjd,IAAK,MAAO0N,IACtEoP,EAAeW,kBAAkB,EAG7B0Y,EAAiB3D,EAAaiC,OAAOrgC,KAAKgiC,IAC9C,IAAI1B,EAAgB,KACpB,MAAME,EAAWpC,EAAaoC,SAASnjC,QAAQmN,GAAYA,EAAEO,QAAUi3B,EAAWj3B,QAClF,GAAIy1B,EAAS5hC,OAAQ,CACnB,IAAIqjC,EAAU,KAEZA,EADEzB,EAAS5hC,OAAS,EACV4hC,EAAS1iC,QAAO,CAACokC,EAAQC,IAAUD,EAAOtC,oBAAsBuC,EAAKvC,oBAAuBsC,EAASC,IAErG3B,EAAS,GAErBF,EAAgB/gC,EAAAA,cAAA,SAAOxB,IAAI,KAAKsW,MAAM,UAAUqsB,KAAK,YAAYC,QAAQ,KAAK70B,IAAKm2B,EAAQlC,kBAC7F,CAEA,IAAItX,EAAY/c,YAAYu0B,gBAC1B,OACE1gC,EAAAA,cAAA,OAAKxB,IAAKikC,EAAWpC,qBACnBrgC,EAAAA,cAAA,SAAOqhC,YAAY,YAAYR,QAAQ,OAAO5G,UAAQ,GACpDj6B,EAAAA,cAAA,UAAQuM,IAAKk2B,EAAWjC,mBACvBO,GAEH/gC,EAAAA,cAAA,SAAIyiC,EAAWj3B,QAYrB,OACExL,EAAAA,cAAA,OAAKxB,IAAKikC,EAAWpC,qBACnBrgC,EAAAA,cAAA,SAAOqhC,YAAY,YAAYR,QAAQ,OAAO5G,UAAQ,GACpDj6B,EAAAA,cAAA,UAAQuM,IAAKk2B,EAAWjC,mBACvBO,GAEH/gC,EAAAA,cAAA,SAAIyiC,EAAWj3B,MAAM,IAACxL,EAAAA,cAAA,UAAQ4B,QAbfvB,IACjBA,EAAE8U,kBAEFgU,EAAe6D,WAAU+B,EAAAA,EAAAA,IAAqBzF,EAAYjd,IAAK,MAAOo2B,EAAWjC,mBACjFrX,EAAeW,kBAAkB,GASmB,WAC9C,IAIVqY,EACEniC,EAAAA,cAACkoB,GAAAA,EAAa,CACZG,UAAWe,EAAoBkZ,gBAAgBxvB,OAC/CqV,MAAO,CAAC,CACN3pB,IAAK,QACLiE,KAAM,QACNb,QAASA,KAAOunB,EAAe6D,WAAU+B,EAAAA,EAAAA,IAAqB3F,EAAoBkZ,gBAAgBj2B,IAAK,SAAU,SAAS,EAC1Hmc,KAAMxoB,EAAAA,cAAA,WACHwiC,EAAenjC,OAAS,EAAImjC,EAAiBxiC,EAAAA,cAAA,OAAKxB,IAAI,aAAYwB,EAAAA,cAAA,UAAI,kBAAmBA,EAAAA,cAAA,UAAI,2BAEhG,CACAxB,IAAK,UACLiE,KAAM,UACNb,QAASA,KAAOunB,EAAe6D,WAAU+B,EAAAA,EAAAA,IAAqB3F,EAAoBkZ,gBAAgBj2B,IAAK,SAAU,WAAW,EAC5Hmc,KAAMxoB,EAAAA,cAAA,WACJA,EAAAA,cAAC+hC,GAAwB,CACvBv3B,MAAO4e,EAAoBkZ,gBAAgBO,IAC3Cb,aAAcA,EACdp5B,YAAa,8DAGjB,CACApK,IAAK,QACLiE,KAAM,QACNb,QAASA,KAAOunB,EAAe6D,WAAU+B,EAAAA,EAAAA,IAAqB3F,EAAoBkZ,gBAAgBj2B,IAAK,SAAU,SAAS,EAC1Hmc,KAAMxoB,EAAAA,cAAC+hC,GAAwB,CAC7Bv3B,MAAO4e,EAAoBkZ,gBAAgBO,IAC3Cb,aAAcA,EACdp5B,YAAa,4DAMrB,MACF,QAEE,OAAO,KAGX,OACE5I,EAAAA,cAAC8iB,EAAAA,EAAQ,CAACC,MAAI,GACZ/iB,EAAAA,cAAA,OAAKC,UAAU,0CACbD,EAAAA,cAAA,OAAKC,UAAU,oBACbD,EAAAA,cAAA,OAAKC,UAAU,yBACbD,EAAAA,cAAA,UAAI,SAAMy+B,EAAAA,EAAAA,WAAUnV,EAAYqU,aAElC39B,EAAAA,cAAA,OAAKC,UAAU,0BACbD,EAAAA,cAAA,UAAQ4B,QAAUvB,IAAOA,EAAE8U,kBAAmBgU,EAAeW,kBAAkB,GAAI,YAGvF9pB,EAAAA,cAAA,WACCmiC,GAIT,CClLe,SAASW,GAAWxhC,GACjC,MACE6nB,EACE7nB,EADF6nB,eAGF,IAAI4Z,EAAwBzhC,EAAMw5B,YAAYC,kBAAoB,CAACv6B,WAAY,QAAU,CAAC,EAC1F,OAAK2oB,EAAe6Q,iBAQT14B,EAAM8nB,oBAAoBE,aAAaC,OAASS,EAAAA,GAEvDhqB,EAAAA,cAAA,OAAKC,UAAU,YACbD,EAAAA,cAACipB,EAAgC5qB,OAAAia,OAAA,GAC3BhX,EAAK,CACT6nB,eAAgBA,MAMpBnpB,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAC8iB,EAAAA,EAAQ,CAACC,KAAMzhB,EAAM8nB,oBAAoB4Z,aAAa3jC,OAAS,GAC9DW,EAAAA,cAAA,OAAKC,UAAU,mBACbD,EAAAA,cAAA,SAAIsB,EAAM8nB,oBAAoB4Z,gBAGlChjC,EAAAA,cAAC4+B,GAAsBvgC,OAAAia,OAAA,GACjBhX,EAAK,CACT6nB,eAAgBA,KAElBnpB,EAAAA,cAACijC,GAAkB5kC,OAAAia,OAAA,GACbhX,EAAK,CACT6nB,eAAgBA,KAElBnpB,EAAAA,cAAA,OAAKC,UAAU,WAAWM,MAAOwiC,GAC/B/iC,EAAAA,cAACg7B,GACK15B,GAENtB,EAAAA,cAAC45B,GACKt4B,KApCVtB,EAAAA,cAAA,OAAKC,UAAU,YACbD,EAAAA,cAACg7B,GACK15B,GAwCd,C,6jCCnDe,SAAS4hC,GAAoB5hC,GAC1C,MAAA6hC,EASI7hC,EARF+U,QAAAA,OAAO,IAAA8sB,EAAC,GAAEA,EACVhX,EAOE7qB,EAPF6qB,WACAiX,EAME9hC,EANF8hC,wBACAja,EAKE7nB,EALF6nB,eACAka,EAIE/hC,EAJF+hC,sBAAqBC,EAInBhiC,EAHFsH,YAAAA,OAAW,IAAA06B,EAAC,QAAOA,EACnBj3B,EAEE/K,EAFF+K,IACA8hB,EACE7sB,EADF6sB,UAGF,IAAIoV,EACJ,GAAuB,kBAAZltB,GAAwBA,EAAQmtB,sBAAuB,CAChE,MAAMC,GAAaC,EAAAA,GAAAA,IAAertB,EAAQmtB,sBAAsB/iC,KAAIqf,GAAKA,EAAE6jB,SAAQ,GAC/EF,IACFF,EAAkC,IAArBE,EAAWvX,OAAeuX,EAAWrX,MAAQ/V,EAAQiU,KAAKjrB,OAE3E,CAEA,MAAMukC,EAAiC,kBAAZvtB,EACvBwtB,GAAAA,GAAiCxtB,EAAS8S,EAAe2a,aACzDztB,EAEJ,IAAI0tB,EAAe,CAAC,EAChBV,IAWAU,EAVGX,EAUY,CACb7iC,MAAO,CACL,WAAc,OACd,iBAAoB,SAZT,CACbyjC,iBAAiB,EACjB,kCAAkC,EAClCzjC,MAAO,CACL,WAAc,OACd,iBAAoB,UAa5B,MAAM0jC,EAAWppC,GAAAA,GAAA,CACfiG,GAAK,GAAEuL,MAAQ8f,IACflsB,UAAW,kBACX,uBAAuB,EACvB,WAAYoM,EACZ,kBAAmB8f,GAChB4X,GAAY,IACfG,aAAc,MACdC,YAAa,MACbC,eAAgB,MAChBC,YAAY,EACZC,WAAW,EACX1iC,QAAUvB,GAAyCA,EAAE8U,oBAOvD,OAJIgZ,IACF8V,EAAY,kBAAoB9V,GAG9BoV,GAAqC,IAAvBK,EAAYvkC,OAE1BW,EAAAA,cAAA,OAAA3B,OAAAia,OAAA,GACM2rB,EAAW,CACfhkC,UAAU,8CACV,mBACAskC,gCAA8B,IAE9BvkC,EAAAA,cAAA,YAAM,QACNA,EAAAA,cAAA,QAAMgkC,iBAAiB,EAAOzjC,MAAO,CAAC,WAAc,OAAQ,iBAAoB,SAAUqI,IAK5F5I,EAAAA,cAAA,OAAA3B,OAAAia,OAAA,GACM2rB,EAAW,CACfhkC,UAAU,kBACV0mB,wBAAyB,CAACC,OAAQgd,EAAYh/B,QAAQ,MAAO,UAAUA,QAAQ,MAAO,cAI9F,C,4kCCxEe,SAAS4/B,GAAcljC,GACpC,GAAIA,EAAM6nB,eAAemJ,YAAchxB,EAAMmjC,SAC3C,OAAOzkC,EAAAA,cAACkjC,GAAwB5hC,GAC3B,CACL,IAAIM,EACJ,MAA2F8iC,EAAAroC,GAAnEqC,MAAMS,KAAKgF,SAASqhB,iBAAiB,+BAA8B,GAApFmf,EAAUD,EAAA,GACXE,GADcF,EAAA,GACFpjC,EAAMu4B,gBAAkBv4B,EAAMu4B,gBAAgBruB,MAAQ,IAQxE,OANGq5B,OAAOvjC,EAAM+U,SAASyuB,WAAW,OAASH,GAAwC,sBAA1BA,EAAWI,YACpEnjC,EAAUA,KAAQlI,GAAAA,EAAgBC,MAAM,sCAAuC,CAAEkZ,KAAM9Y,OAAO6J,SAASC,KAAMiP,OAAQ,qBAAsBlL,KAAMg9B,GAAY,EACrJC,OAAOvjC,EAAM+U,SAAS/O,SAAS,QACvC1F,EAAUA,KAAQlI,GAAAA,EAAgBC,MAAM,+BAAgC,CAAEkZ,KAAM9Y,OAAO6J,SAASC,KAAMiP,OAAQ,OAAQlL,KAAMg9B,GAAY,GAzCxHI,EAAC3uB,EAAqBzU,IACnB,kBAAZyU,EACFrW,EAAAA,cAAA,QAAMxB,IAAK6X,EAASzU,QAASA,EAAS+kB,wBAAyB,CAACC,OAAQvQ,MACvE4uB,EAAAA,GAAAA,IAAkB5uB,GACnBrW,EAAAA,cAAA,QAAMxB,IAAK6X,EAAQiU,KAAM1oB,QAASA,EAAS+kB,wBAAyB,CAACC,OAAQid,GAAAA,GAAiCxtB,MAE9GrW,EAAAA,cAAA,QAAM4B,QAASA,EAAS+kB,wBAAyB,CAACC,OAAQse,GAAAA,GAA8B7uB,MAsCxF2uB,CAAc1jC,EAAM+U,QAASzU,EACtC,CACF,C,k/BC1Ce,SAASujC,GAAe7jC,GACrC,IAAKA,EAAM8jC,cAAgB9jC,EAAM6nB,eAAemJ,UAAa,OAAO,KAEpE,MAAM+S,EAAiB/jC,EAAM8jC,YAAY3kC,KAAI,CAAC6kC,EAAY1kC,KACxD,MAAM2kC,EAAoB,CACxB/mC,IAAK8mC,EAAWj5B,IAChBwtB,gBAAiBv4B,EAAMu4B,gBACvBoB,eAAgB35B,EAAM25B,eACtB9R,eAAgB7nB,EAAM6nB,eACtBD,YAAa5nB,EAAM4nB,aAGrB,OACElpB,EAAAA,cAAA,MACEc,GAAIwkC,EAAWj5B,IACf7N,IAAK8mC,EAAWj5B,IAChBpM,UAAU,0BACVM,OAAOilC,EAAAA,EAAAA,IAAuB3qC,GAAAA,GAAC,CAAC,EAAG0qC,GAAsBD,KAEzDtlC,EAAAA,cAAA,YACEA,EAAAA,cAACwkC,GAAa,CACZn4B,IAAKi5B,EAAWj5B,IAChBgK,QAASivB,EAAWjvB,QACpB8V,WAAY,UACZhD,eAAgB7nB,EAAM6nB,eACtBka,uBAAqB,EACrBD,wBAAyB9hC,EAAM8hC,wBAC/BqC,iBAAe,KAGhB,IAIT,OACEzlC,EAAAA,cAAA,OACEC,UAAU,2BACV+jC,iBAAiB,GAEjBhkC,EAAAA,cAAA,UAAI,YACJA,EAAAA,cAAA,UACGqlC,GAIT,C,gNCjBA,SAASK,GAAiBpkC,GACxB,MACE25B,EAeE35B,EAfF25B,eACA9R,EAcE7nB,EAdF6nB,eACA+R,EAaE55B,EAbF45B,eACAhS,EAYE5nB,EAZF4nB,YACA/D,EAWE7jB,EAXF6jB,QACAnX,EAUE1M,EAVF0M,UACA23B,EASErkC,EATFqkC,YACAC,EAQEtkC,EARFskC,aACA3S,EAOE3xB,EAPF2xB,MACAznB,EAMElK,EANFkK,MACAa,EAKE/K,EALF+K,IACAw5B,EAIEvkC,EAJFukC,uBACAzC,EAGE9hC,EAHF8hC,wBACA1M,EAEEp1B,EAFFo1B,OAAMoP,EAEJxkC,EADFg4B,gBAAAA,OAAe,IAAAwM,EAAG,EAACA,EAGfC,EAAgBA,KAGpB,GAFA7K,EAAe8K,sBAAsB,MAEjCJ,EAAgB,OAAO,KAE3B,GAAID,EAAa,CACf,MAAMttB,EAAW,CAAE,CAAChM,GAAM,CAAC2B,WAAYA,IAEnCA,IACFkb,EAAY+c,SAASC,EAAAA,GAAoB,CAACC,SAAU95B,IAEjD8Y,GAAWA,EAAQ7d,SAAS,iBAC7B5N,GAAAA,EAAgBC,MAAM,kCAAmC,CAAEiO,KAAMzD,SAASqH,MAAOsH,OAAQ,4BAA6BD,KAAM9Y,OAAO6J,SAASC,OAG3IshB,GAAWA,EAAQ7d,SAAS,wBAC7B5N,GAAAA,EAAgBC,MAAM,oBAAqB,CAAEiO,KAAMzD,SAASqH,MAAOsH,OAAQ,4BAA6BD,KAAM9Y,OAAO6J,SAASC,OAG5Ho3B,EAAemL,2BAAuC,IAAVnT,GAAe4S,IAA2B3K,EAAemL,cACvGR,EAAuB9mC,SAASsN,IAC9BgM,EAAShM,GAAO,CAAC2B,WAAW,EAAK,IAIlCmX,GAAWA,EAAQ7d,SAAS,mBAC7B5N,GAAAA,EAAgBC,MAAM,uBAAwB,CAAEiO,KAAMzD,SAASqH,MAAOsH,OAAQ,OAAQD,KAAM9Y,OAAO6J,SAASC,QAIhHqlB,EAAYyD,SAAStU,EACvB,GAGF,IAAIiuB,EAiBA7F,EAcA8F,EAbJ,GAjBIZ,IASEW,GARCE,EAAAA,EAAAA,UAAQC,EAAAA,EAAAA,cAAa,CAAC,eAAgB,uBAAwBthB,IAO7DnX,EACmBhO,EAAAA,cAAA,QAAMC,UAAU,mCAAkCD,EAAAA,cAAA,QAAMC,UAAU,mBAElED,EAAAA,cAAA,QAAMC,UAAU,mCAAkCD,EAAAA,cAAA,QAAMC,UAAU,oBATrF+N,EACmBhO,EAAAA,cAAA,QAAMC,UAAU,mCAAkCD,EAAAA,cAAA,OAAKuM,IAAKm6B,GAAuBl6B,IAAI,WAAWvM,UAAU,gCAE5GD,EAAAA,cAAA,QAAMC,UAAU,mCAAkCD,EAAAA,cAAA,OAAKuM,IAAKo6B,GAAyBn6B,IAAI,SAASvM,UAAU,iCAYzH,IAAVgzB,GAAe9J,EAAemJ,UAAW,CAC3C,MAAMsU,EAAwBvmC,IAC5BA,EAAE8U,kBACFgU,EAAeY,eAAemY,EAAAA,GAAc,CAAEvE,UAAW,QAAStxB,IAAKA,GAAM,EAG/Eo0B,EACEzgC,EAAAA,cAAA,OAAKC,UAAU,iCAAiC2B,QAASglC,GACvD5mC,EAAAA,cAAA,OAAKuM,IAAK0uB,EAAewF,aAG/B,CAGIn/B,GAAOw5B,aAAa+L,aAAe1d,EAAemJ,WAAanN,GAAS7d,SAAS,8BACnFi/B,EACEvmC,EAAAA,cAAA,QAAMO,MAAO,CAAC8iB,YAAa,SACzBrjB,EAAAA,cAACqB,GAAAA,EAAQ,CACPpB,UAAU,qBACV2B,QAASA,KACPunB,EAAeY,eAAe,8BAA8B,GAG9D/pB,EAAAA,cAAA,OAAKC,UAAU,kBAAiB,aAQxC,IAAI6mC,EAAc,KAClB,MAAMC,GAAY5rB,EAAAA,EAAAA,MAAKgK,GAAU6hB,GAAeA,EAAG1/B,SAAS,WAC5D,GAAIy/B,EAAW,CACb,MAAME,GAAQriC,EAAAA,EAAAA,SAAQmiC,EAAW,QAAS,IACpCG,GAAWC,EAAAA,EAAAA,WAAUF,GAErBG,EAAWpnC,EAAAA,cAAA,QAAMC,WAAWonC,EAAAA,EAAAA,WAAW,QAAOJ,OAEpDH,EACE9mC,EAAAA,cAAA,OAAKC,UAAU,4BACbD,EAAAA,cAAA,MAAIC,UAAU,kCAAkCinC,EAAUE,GAGhE,CAEA,IAAIE,EAAS,KACb,KAAKd,EAAAA,EAAAA,UAAQC,EAAAA,EAAAA,cAAa,IAAIc,EAAAA,GAAuB,kBAAmBpiB,IAAW,CAEjF,IAAIqiB,EAAO,mBACPC,EAAc,iBACdC,EAAS,KACTC,EAA2B,KAC3BC,EAAe,MAEftgC,EAAAA,EAAAA,UAAS6d,EAAS,6BACpBqiB,EAAO,GACPE,EAAS1nC,EAAAA,cAAA,KAAGxB,IAAI,aAAayB,UAAU,kBACvCwnC,EAAc,2BAEdH,EACEtnC,EAAAA,cAAA,OAAKC,UAAU,wBACbD,EAAAA,cAAA,QAAMC,UAAY,6BAA4BunC,KAASE,GACvD1nC,EAAAA,cAAA,QAAMC,UAAU,8BAA8BwnC,EAAY,QAGrDngC,EAAAA,EAAAA,UAAS6d,EAAS,oBAC3BqiB,EAAO,GACPE,EAAS1nC,EAAAA,cAAA,KAAGxB,IAAI,iBAAiByB,UAAU,iBAC3CwnC,EAAc,YACdG,EACE5nC,EAAAA,cAAA,QAAMC,UAAU,uCACdD,EAAAA,cAACwkC,GAAa,CACZn4B,IAAKA,EACLgK,QAAS7K,EACT2gB,WAAY,QACZhD,eAAgBA,EAChBvgB,YAAa,6BACby6B,uBAAqB,EACrBD,wBAAyBA,KAK3BuC,IAEAgC,EADE35B,EACyBhO,EAAAA,cAAA,OAAKuM,IAAKm6B,GAAuBl6B,IAAI,WAAWvM,UAAU,iCAE1DD,EAAAA,cAAA,OAAKuM,IAAKo6B,GAAyBn6B,IAAI,SAASvM,UAAU,mCAK3FqnC,EACEtnC,EAAAA,cAAA,OAAKC,UAAU,wBAAwB2B,QAASmkC,GAC9C/lC,EAAAA,cAAA,OAAKC,UAAU,iCACZ0nC,EACAjR,GAAU12B,EAAAA,cAAA,OAAKuM,IAAK+sB,EAAkB,EAAIuO,GAAgBC,GAAiBz1B,OAAO,KAAK/H,MAAM,OAC9FtK,EAAAA,cAAA,QAAMC,UAAY,8BAA6BunC,KAASE,GACxD1nC,EAAAA,cAAA,QAAMC,UAAU,+BAA+BwnC,GAC9CG,GAEH5nC,EAAAA,cAAA,OAAKC,UAAU,iCAGrB,CAsBA,OACED,EAAAA,cAAA,OACEc,GAAK,GAAEuL,WACPpM,UAAW4B,EAAW,qBAAsB,CAAE,eAA0B,IAAVoxB,IAC9DrxB,QAASmkC,GAERuB,EACDtnC,EAAAA,cAAA,OAAKC,UAAU,6BACbD,EAAAA,cAAA,MAAIC,UAAU,4BACXwgC,EACA6F,EACDtmC,EAAAA,cAAA,YACEA,EAAAA,cAACwkC,GAAa,CACZn4B,IAAKA,EACLgK,QAAS7K,EACT2gB,WAAY,QACZvjB,YAnCI,IAAVqqB,EACK,wBACEA,EAAQ,GACb3rB,EAAAA,EAAAA,UAAS6d,EAAS,gBAAqC,2BAClD7d,EAAAA,EAAAA,UAAS6d,EAAS,uBAAgC,kCAClD7d,EAAAA,EAAAA,UAAS6d,EAAS,cAAgC,8BAClD7d,EAAAA,EAAAA,UAAS6d,EAAS,SAAgC,yBAClD7d,EAAAA,EAAAA,UAAS6d,EAAS,sBAAgC,sCAClD7d,EAAAA,EAAAA,UAAS6d,EAAS,mBAAgC,mCAClD7d,EAAAA,EAAAA,UAAS6d,EAAS,aAAgC,6BAClD7d,EAAAA,EAAAA,UAAS6d,EAAS,cAAgC,8BAClD7d,EAAAA,EAAAA,UAAS6d,EAAS,cAAgC,8BAClD7d,EAAAA,EAAAA,UAAS6d,EAAS,WAAgC,0BACA,0BAEpD,0BAqBCgE,eAAgBA,EAChBka,uBAAqB,EACrBD,wBAAyBA,MAI/BpjC,EAAAA,cAAA,QAAMO,MAAO,CAAC8iB,YAAa,SACxBkjB,GAEFO,GAIT,CAEA,SAAe9mC,EAAAA,KAAW0lC,I,khCCzP1B,MAAMqC,GAAsB,CAC1B,4BACA,qBACA,qBACA,UACA,eACA,cACA,aACA,oBACA,gBAiBF,SAASC,GAAW1mC,GAClB,MACEgoB,EAUEhoB,EAVFgoB,YACAuQ,EASEv4B,EATFu4B,gBACA3Q,EAQE5nB,EARF4nB,YACAyK,EAOEryB,EAPFqyB,UACAxK,EAME7nB,EANF6nB,eACAoK,EAKEjyB,EALFiyB,iBACA0U,EAIE3mC,EAJF2mC,WACA1O,EAGEj4B,EAHFi4B,WACA2O,EAEE5mC,EAFF4mC,eACAC,EACE7mC,EADF6mC,gBAGF,IAAKhf,EAAemJ,UAAa,OAAO,KACxC,KAEKpJ,EAAY/c,YAAYi8B,oBACJ,YAApBH,EAAW/nC,MAA2C,IAArB+nC,EAAWhV,QAAgB/J,EAAY/c,YAAYk8B,eAE5D,4BAAzBxO,EAAgBsH,OACfjY,EAAY/c,YAAYu0B,iBACL,YAApBuH,EAAW/nC,OACV+nC,EAAW9iB,SAAS7d,SAAS,sBAE9B,OAAO,KAEX,MAAM6d,EAAUtjB,EACd,eACA,CAAC,YAAiC,YAApBomC,EAAW/nC,MAA2C,IAArB+nC,EAAWhV,QAGtD1yB,EAAQ,CAACC,WAAiC,YAApBynC,EAAW/nC,MAA2C,IAArB+nC,EAAWhV,OAA2C,mBAA5B4G,EAAgBpuB,QAAgC,OAAS,OAE1I7K,GAAQ0nC,EAAAA,EAAAA,UAAS3U,GAAaA,EAAY,EAAI,EAEpD,IAAI4U,EACJ,MAAMnmC,EAASknB,GAAaC,OAASif,EAAAA,KClFJC,EDkFmCnf,EClFjBof,EDkF8B,CAAEnf,KAAMif,EAAAA,GAAUn8B,IAAK47B,EAAW57B,IAAK8f,WAAYoH,EAAkB3yB,MAAOA,KCjFpJ6nC,IAAoBlqC,EAAAA,EAAAA,QAAOmqC,GAA0B,CAAC1oB,EAAQxV,EAAOhM,IAAQwhB,GAAUyoB,EAAiBjqC,KAASgM,IAAO,IAD5H,IAA4Bi+B,EAAkBC,EDoFnD,GAAItmC,EAAQ,CACV,MAAMumC,GAAatX,EAAAA,EAAAA,IAAW4W,GACxB3W,EAAiBnI,EAAeoI,gBAAgBoX,GAAYnX,MAAMrI,EAAeoI,iBAGvF,IAAIqX,EAAW,kBAFWtX,EAAeW,YAAY9I,EAAeoI,mBAG5C,YAApB0W,EAAW/nC,KACb0oC,EAAgC,IAArBX,EAAWhV,OAA2C,mBAA5B4G,EAAgBpuB,QAAgC,WAAam9B,EACrE,cAApBX,EAAW/nC,OACpB0oC,EAAU,qBAGZ,MAAMhuC,EAAU02B,EAAeuX,YAAYtV,GAAkBuV,gBAAgB3f,EAAeoI,iBACtFwX,GAAaC,EAAAA,EAAAA,OAAMpuC,GAAUkO,GAC1BA,EAAOoG,YAAYia,EAAeoI,mBAE3C,IAAI0X,EAAwB5qC,OAAOC,KAAKyqC,GAAYtoC,KAAK4uB,GAEhD,CADa0Z,EAAW1Z,GAAY4C,YAAY9I,EAAeoI,iBACjDlC,KACpBxpB,OAEEqjB,EAAY/c,YAAY+8B,uBAC3BD,EAAwBA,EAAsBnrC,QAAO,EAAEqrC,EAAaC,KAAe,aAAeA,KAGpG,MAAMC,EAAgBJ,EAAsBxoC,KAAI,EAAEwxB,EAAa5C,KACtDrvB,EAAAA,cAAA,UAAQwK,MAAO6kB,EAAY7wB,IAAK6wB,GAAa4C,KAGlDiW,GACFmB,EAAcC,QACZtpC,EAAAA,cAAA,UAAQwK,MAAM,gBAAgBhM,IAAI,iBAAgB,kBAItD,MAAM+qC,EAAsBC,IAC1B,MAAM/mC,EAAO+mC,EAAWlpC,OAAOkK,MAE/B,GAAa,aAAT/H,EACF0mB,EAAeY,eAAeoP,EAAAA,GAAct+B,GAAAA,GAAA,GAAMyuB,GAAW,IAAEC,KAAM4P,EAAAA,WAChE,GAAa,kBAAT12B,EAA0B,CACnC,GAAIylC,EAAgB,CAClB,MAAMuB,EAAavB,EAAeznC,KAAImrB,IAAQyF,EAAAA,EAAAA,IAAWzF,KACnD8d,EAAiB9uC,EAAQ6F,KAAIqI,GAAUA,EAAO6gC,UAQpD,GANK1T,EAAAA,EAAUA,EAAAA,EAAe8R,GAAqB2B,KACjDA,EAAe9qC,KAAK,YAGFq3B,EAAAA,EAAUA,GAAAA,EAAawT,EAAYC,IAEpC,CAEjB,IAAIE,EAAwB1B,EAAeznC,KAAImrB,IAAQie,EAAAA,EAAAA,IAAeje,GAAOke,GAAKjvC,GAAAA,GAAA,GAAUivC,GAAK,IAAEz9B,KAAK09B,EAAAA,GAAAA,WAEpGzgB,EAAYiQ,WACdpQ,EAAe6D,WAAUwM,EAAAA,EAAAA,IAAgClQ,EAAYiQ,WAAY,KAAMqQ,IAEvFzgB,EAAe6D,WAAUyM,EAAAA,EAAAA,IAA+BnQ,EAAYjd,IAAKid,EAAY6C,WAAY,KAAMyd,GAE3G,MACEn1B,MAAM,2BAEV,CACA0U,EAAeW,kBACjB,KAAO,CACL,MACMkgB,EADSjB,EAAWtmC,GACHwnC,SAAS9gB,EAAeoI,gBAAiB,CAAC,GAE7DjI,EAAYiQ,WACdpQ,EAAe6D,WAAUwM,EAAAA,EAAAA,IAAgClQ,EAAYiQ,WAAY,KAAM,CAACyQ,KAExF7gB,EAAe6D,WAAUyM,EAAAA,EAAAA,IAA+BnQ,EAAYjd,IAAKid,EAAY6C,WAAY,KAAM,CAAC6d,KAE1G7gB,EAAeW,kBACjB,GAIFye,EACEvoC,EAAAA,cAAA,OAAKC,UAAU,oBAAoB+jC,iBAAiB,GAClDhkC,EAAAA,cAAA,UAAK4oC,GACL5oC,EAAAA,cAAA,UAAQI,SAAUmpC,GAChBvpC,EAAAA,cAAA,UAAQwK,MAAM,eAAehM,IAAI,gBAAe,oBAC/C6qC,GAIT,CAEA,OACErpC,EAAAA,cAAA,OAAKC,UAAWklB,EAAS5kB,MAAOA,EAAOyjC,iBAAiB,GAEpDmE,GACEnoC,EAAAA,cAAA,OAAKC,UAAU,sBAAqB,QAKxCD,EAAAA,cAAA,OACEC,UAAU,mBACV+jC,iBAAiB,EACjBkG,YAAc7pC,IACZA,EAAEqT,iBACFrT,EAAE8U,iBAAiB,EAErBvT,QAAUvB,IACRA,EAAEqT,iBACFrT,EAAE8U,kBACE/S,EACF+mB,EAAeW,mBAEfX,EAAeY,eAAeye,EAAAA,GAAU,CACtCn8B,IAAK47B,EAAW57B,IAChB8f,WAAYoH,EACZ3yB,MAAOA,EACP24B,WAAYA,GAEhB,GAGFv5B,EAAAA,cAAA,KAAGC,UAAY,UAAQmC,EAAS,QAAU,WAE3CmmC,EAGP,CAEA,SAAevoC,EAAAA,KAAWgoC,IEvMX,SAASmC,GAAY7oC,GAClC,MACE25B,EAME35B,EANF25B,eACA/R,EAKE5nB,EALF4nB,YACA7c,EAIE/K,EAJF+K,IACA+9B,EAGE9oC,EAHF8oC,WACAlP,EAEE55B,EAFF45B,eACArB,EACEv4B,EADFu4B,gBAGF,GAAIoB,EAAeoP,kBAAoBnP,EAAemL,cAAgBnL,EAAeoP,UAAa,OAAO,KAgBzG,OACEtqC,EAAAA,cAAA,OACEc,GAAK,YAAWuL,IAChBpM,UAAW4B,EAAW,sBAAuB,CAACuoC,WAAYA,IAC1DxoC,QAlBavB,IACf,MAAMkqC,GAAoBH,EAE1BlhB,EAAYyD,SAAS,CACnB,CAACtgB,GAAM,CAAE+9B,WAAYG,KAGvBrP,EAAe8K,sBAAsBuE,EAAmBl+B,EAAM,MAE9D3S,GAAAA,EAAgBC,MAAM,mCAAoC,CAAEkZ,KAAM9Y,OAAO6J,SAASC,KAAMiP,OAAQ,OAAQlL,KAAMiyB,EAAgBruB,QAE9HnL,EAAE8U,iBAAiB,EAQjB6uB,iBAAiB,GAEjBhkC,EAAAA,cAAA,OAAKC,UAAU,kBAGrB,C,gBCpCe,SAASuqC,GAAQlpC,GAC9B,MACE45B,EAIE55B,EAJF45B,eACAuP,EAGEnpC,EAHFmpC,QACAp+B,EAEE/K,EAFF+K,IACA6c,EACE5nB,EADF4nB,YAGF,GAAIgS,EAAemL,cAAgBnL,EAAeoP,UAAa,OAAO,KAiBtE,OACEtqC,EAAAA,cAAA,OACEc,GAAK,OAAMuL,IACXpM,UAAW4B,EAAW,kBAAmB,CAAC6oC,MAAOD,IACjD7oC,QAnBavB,IACf,GAAIoqC,EACFvhB,EAAYyhB,WAAWF,GACvBvP,EAAe8K,sBAAsB,UAChC,CACL,MAAM4E,GAASb,EAAAA,GAAAA,KACf7gB,EAAY2hB,QAAQD,EAAQ,CAACE,aAAcz+B,IAC3C6uB,EAAe6P,YAAYC,GAAAA,IAC3B9P,EAAe+P,mBAAmBL,GAClC1P,EAAe8K,sBAAsB35B,EACvC,CAEAhM,EAAE8U,iBAAiB,EAQjB6uB,iBAAiB,GAEjBhkC,EAAAA,cAAA,OAAKC,UAAU,eAGrB,CCnCA,SAASirC,GAAS5pC,GAChB,MACE8hC,EAME9hC,EANF8hC,wBACAja,EAKE7nB,EALF6nB,eACArW,EAIExR,EAJFwR,OACAtH,EAGElK,EAHFkK,MACAa,EAEE/K,EAFF+K,IACA6c,EACE5nB,EADF4nB,YAGF,MACO,UADCpW,EAGF9S,EAAAA,cAAA,OACEc,GAAIQ,EAAM+K,IACV,kBACA,WAAU/K,EAAM+K,IAChBpM,UAAW4B,EAAW,YAAa,kBAAmBP,EAAM+K,IAAK,CAAC,mBAAoB/K,EAAM6pC,oBAAsB7pC,EAAM8pC,SACxHpH,iBAAiB,GAEjBhkC,EAAAA,cAAA,OAAKC,UAAU,2BACbD,EAAAA,cAAA,OAAKC,UAAU,2BACbD,EAAAA,cAAA,OAAKC,UAAU,oBAAoBM,OAAOilC,EAAAA,EAAAA,IAAwBlkC,IAChEtB,EAAAA,cAAA,SAAOxB,IAAK8C,EAAMxG,IAAK+lC,QAAQ,OAAO5G,UAAQ,GAC5Cj6B,EAAAA,cAAA,UAAQuM,IAAKjL,EAAMxG,QAGtBquB,EAAemJ,WAAapJ,EAAY/c,YAAYsxB,iBAAmBz9B,EAAAA,cAACioB,EAAAA,EAAS,CAC9EzpB,IAAI,gBACJyB,UAAU,0BACVwC,KAAMzC,EAAAA,cAAA,KAAGC,UAAU,gBACnB0V,aAAW,EACXE,OAAK,EACLjU,QAAUvB,IACR8oB,EAAeY,eAAemY,EAAAA,GAAc,CAAEvE,UAAW,QAAStxB,IAAKA,IACvEhM,EAAE8U,iBAAiB,MAKV,kBAAV3J,GAAsBA,EAAMnM,OAAS,GAAM8pB,EAAemJ,WACjEtyB,EAAAA,cAAA,kBACEA,EAAAA,cAACwkC,GAAa,CACZn4B,IAAKA,EACLgK,QAAS7K,EACT2gB,WAAY,QACZvjB,YAAa,sBACbugB,eAAgBA,EAChBka,uBAAqB,EACrBD,wBAAyBA,KAI/BpjC,EAAAA,cAACmqC,GAAgB7oC,GACjBtB,EAAAA,cAACwqC,GAAYlpC,KAIjB+pC,QAAQC,QAAS,8CAA6ChqC,EAAMwR,UAC7D,KAEb,CAEA,SAAe9S,EAAAA,KAAWkrC,I,gBC1E1B,MAAMK,GAAgB,CACpB,kBACA,mBACA,gBACA,cAGIC,GAAmB,CACvB,YAQK,SAASC,GAAcC,EAA2BpqC,GACnDA,EAAM45B,gBACR55B,EAAM45B,eAAe8K,sBAAsB,MAG7C,MAIM2F,EAJeD,EAAQ5tC,QAAQsX,GAC3Bm2B,GAAclgC,QAAQ+J,EAAOA,SAAW,IAGnB7W,QAAO,CAACuB,EAAKsV,KAC1C,OAAQA,EAAOA,QACb,IAAK,kBACH,OAAQw2B,EAAAA,GAAAA,IAAY9rC,EAAK,CACvB,CAACsV,EAAOy2B,UAAUx/B,KAAM,CACtBy/B,SAAU12B,EAAOy2B,UAAUrhC,SAGjC,IAAK,mBACH,OAAQohC,EAAAA,GAAAA,IAAY9rC,EAAK,CACvB,CAACsV,EAAOy2B,UAAUx/B,KAAM,CACtB0/B,UAAW32B,EAAOy2B,UAAUrhC,SAGlC,IAAK,cAGH,OAFAzQ,OAAO6J,SAASC,KAAO,sBAEf,EACV,IAAK,gBACH,OAAQ+nC,EAAAA,GAAAA,IAAY9rC,EAAK,CACvB,CAACsV,EAAOy2B,UAAUx/B,KAAM,CACtB,CAAC+I,EAAOy2B,UAAUrtC,KAAM4W,EAAOy2B,UAAUrhC,SAG/C,IAAK,aACH,OAAQohC,EAAAA,GAAAA,IAAY9rC,EAAK,CACvB,CAACsV,EAAOy2B,UAAUx/B,KAAM,CACtB2/B,wBAAyBp/B,KAAK4U,OAAM,IAAIxgB,MAAOirC,UAAY,QAGjE,QACEZ,QAAQC,QAAS,4DAA2Dl2B,EAAOA,UACvF,GACC,CAAC,GAOE82B,EAJkBR,EAAQ5tC,QAAQsX,GAC9Bo2B,GAAiBngC,QAAQ+J,EAAOA,SAAW,IAGnB3U,KAAK2U,IACrC,GACO,aADCA,EAAOA,OAEX,MAAO,KACL2D,YAAW,KACT,MAAMozB,EAAKhoC,SAASioC,uBAAuBh3B,EAAOy2B,UAAUx/B,KAAK,GAC7D8/B,GACFpyC,OAAOsyC,SAAS,EAAGtyC,OAAOuyC,QAAUH,EAAGrvB,wBAAwBO,IAAM,IACvE,GACC,IAAI,EAGTguB,QAAQC,QAAS,4DAA2Dl2B,EAAOA,SACvF,IACCtX,QAAQyX,KAAuCA,IAElDjU,EAAM4nB,YAAYyD,SAASgf,GAAW,KACpCO,EAAUntC,SAASwW,GAAaA,KAAW,IAGxBm2B,EAAQ5tC,QAAQsX,GAC1Bm2B,GAAc76B,OAAO86B,IAAmBngC,QAAQ+J,EAAOA,QAAU,IAG/DrW,SAASqW,IACpB,OAAQA,EAAOA,QACb,IAAK,mBACHrb,OAAOA,OAAOgpB,KAAK3N,EAAOy2B,UAAU/wC,IAAI,UACxC,MACF,IAAK,mBACHf,OAAOA,OAAOgpB,MAAKhE,EAAAA,EAAAA,GAAS3J,EAAOy2B,UAAUjsC,MAAO,UACpD,MACF,IAAK,aACH0B,EAAM4nB,YAAYqjB,WAAW,6CAC7B,MACF,QACElB,QAAQC,QAAS,yDAAwDl2B,EAAOA,UACpF,GAEJ,CC9FA,SAASo3B,GAAUlrC,GAWjB,OAAGA,EAAM6jB,SAAS7d,SAAS,uBAClBtH,EAAAA,cAAAA,EAAAA,SAAA,OAGNsB,EAAM6jB,SAAS7d,SAAS,uBAEzBmkC,GAAcnqC,EAAMM,QAASN,GAI7BtB,EAAAA,cAAA,OACEc,GAAIQ,EAAM+K,IACV,kBACA,WAAU/K,EAAM+K,IAChBpM,UAAW4B,EAAW,mBAAoBP,EAAM+K,IAAK,CAACy/B,SAAUxqC,EAAMskC,eACtErlC,OAAOilC,EAAAA,EAAAA,IAAwBlkC,GAC/B0iC,iBAAiB,GAEjBhkC,EAAAA,cAAA,UAAQC,UAAU,aAAa2B,QA5BnBA,KACd,IAAKN,EAAMskC,eACT6F,GAAcnqC,EAAMM,QAASN,GACV,UAAfA,EAAMkK,OAAmB,CAC3B,MAAMihC,EAAWnrC,EAAMu4B,gBAAgBruB,MACvC9R,GAAAA,EAAgBC,MAAM,gBAAiB,CAAEkZ,KAAM9Y,OAAO6J,SAASC,KAAMiP,OAAQ,OAAQlL,KAAM6kC,GAC7F,CACF,GAsBIzsC,EAAAA,cAACwkC,GAAa,CACZn4B,IAAK/K,EAAM+K,IACXgK,QAAS/U,EAAMkK,MACf2gB,WAAY,QACZhD,eAAgB7nB,EAAM6nB,eACtBsb,UAAQ,EACRrB,wBAAyB9hC,EAAM8hC,4BAKzC,CAEA,SAAepjC,EAAAA,KAAWwsC,ICnDX,SAASE,GAAwBprC,GAC9C,OAAQA,EAAMpB,MACZ,IAAK,UACH,OACEF,EAAAA,cAAA,OAAKC,UAAU,sCACbD,EAAAA,cAAA,QAAMC,UAAU,8CAChBD,EAAAA,cAAA,QAAMC,UAAU,mCAAkC,YAGxD,IAAK,UACH,OACED,EAAAA,cAAA,OAAKC,UAAU,sCACbD,EAAAA,cAAA,QAAMC,UAAU,iDAChBD,EAAAA,cAAA,QAAMC,UAAU,mCAAkC,sBAGxD,IAAK,YACH,OACED,EAAAA,cAAA,OAAKC,UAAU,wCACbD,EAAAA,cAAA,QAAMC,UAAU,iDAChBD,EAAAA,cAAA,QAAMC,UAAU,mCAAkC,cAGxD,IAAK,mBACH,OACED,EAAAA,cAAA,OAAKC,UAAU,+CACbD,EAAAA,cAAA,QAAMC,UAAU,8CAChBD,EAAAA,cAAA,QAAMC,UAAU,mCAAkC,mCAIxD,QACE,OACED,EAAAA,cAAA,OAAKC,UAAU,yCACbD,EAAAA,cAAA,QAAMC,UAAU,8CAChBD,EAAAA,cAAA,QAAMC,UAAU,mCAAkC,eAI5D,C,kgCCzBA,MAAM0sC,GAAoBA,CAACC,EAAwCC,EAAqBC,KACtF,IAAIC,EAAUlyC,GAAA,GAAO+xC,GAYrB,OAVAG,GAAaC,EAAAA,EAAAA,WAAUD,GAAaE,IAC3BnvC,EAAAA,EAAAA,QAAOmvC,GAAgBC,GAAYJ,IAAYI,MAGpDH,EAAWF,GACbE,EAAWF,GAAeE,EAAWF,GAAan8B,OAAOo8B,GAEzDC,EAAWF,GAAe,CAACC,GAGtBC,CAAU,EAKnB,SAASI,GAAmB7rC,GAC1B,MACE+K,EAME/K,EANF+K,IACA+gC,EAKE9rC,EALF8rC,OACAC,EAIE/rC,EAJF+rC,kBACAC,EAGEhsC,EAHFgsC,aACA1H,EAEEtkC,EAFFskC,aACA2H,EACEjsC,EADFisC,OAGI/iC,EAAQlJ,EAAMkJ,OAAS,CAAC,EAExBgjC,EAAuBF,EAAa7sC,KAAKgtC,IAC7C,MAAMC,GAAoBpvC,EAAAA,EAAAA,OACxBqvC,EAAAA,EAAAA,QACEnjC,GACCojC,IAAqBtmC,EAAAA,EAAAA,UAASsmC,EAAkBH,EAAYphC,QAE/D,IAAM,UAEFwhC,GAAqBvvC,EAAAA,EAAAA,OACzBqvC,EAAAA,EAAAA,QACEP,GACCQ,IAAqBtmC,EAAAA,EAAAA,UAASsmC,EAAkBH,EAAYphC,QAE/D,GAEIyhC,EAAYJ,IAAsBG,EAExC,OAAAhzC,GAAAA,GAAA,GACK4yC,GAAW,IACdC,oBACAG,qBACAC,aAAS,IAIPrnC,EAAO+mC,EAAqB/sC,KAAI,CAACgtC,EAAa7sC,KAClD,MAAM2kC,EAAoB,CACxB/mC,IAAKivC,EAAYphC,IACjBwtB,gBAAiBv4B,EAAMu4B,gBACvBoB,eAAgB35B,EAAM25B,eACtB9R,eAAgB7nB,EAAM6nB,eACtBD,YAAa5nB,EAAM4nB,aAGfmgB,EAAgBgE,EAAkB5sC,KAAKstC,GAEzC/tC,EAAAA,cAAA,UAAQwK,MAAOujC,EAAgB1hC,IAAK7N,IAAKuvC,EAAgB1hC,KACtD2hC,GAAAA,GAAgCD,EAAgB13B,YAwBjD+2B,GAAStvC,EAAAA,EAAAA,QAAOuvC,GAAoBU,GAChCA,EAAgB1hC,MAAQohC,EAAYI,qBAC3C,GAEH,OACE7tC,EAAAA,cAAA,OACExB,IAAKivC,EAAYphC,IACjBvL,GAAI2sC,EAAYphC,IAChBpM,UAAW4B,EAAW,2BAA4BwK,GAClD9L,OAAOilC,EAAAA,EAAAA,IAAuB3qC,GAAAA,GAAC,CAAC,EAAG0qC,GAAsBkI,KAEzDztC,EAAAA,cAAA,YACEA,EAAAA,cAACwkC,GAAa,CACZn4B,IAAKohC,EAAYphC,IACjBgK,QAASo3B,EAAYp3B,QACrB8V,WAAY,UACZhD,eAAgB7nB,EAAM6nB,eACtBvgB,YAAa,sEACby6B,uBAAqB,EACrBD,wBAAyB9hC,EAAM8hC,2BAGnCpjC,EAAAA,cAAA,UAAQwK,MAAOijC,EAAYC,kBAAmBttC,SAzCpBpC,IAC5B,MAAM+b,EAAW4yB,GAAkBniC,EAAOxM,EAAMsC,OAAOkK,MAAOijC,EAAYphC,KAE1E/K,EAAM4nB,YAAYyD,SAAS,CAAC,CAACtgB,GAAM,CAAC7B,MAAOuP,IAAW,EAsC0BvY,SAAUokC,GACtF5lC,EAAAA,cAAA,UAAQwB,UAAQ,EAACgJ,MAAM,UAAUhM,IAAI,WAAU,4BAC9C6qC,GAGD/nC,EAAM6nB,eAAemJ,WAClBtyB,EAAAA,cAAA,OAAKxB,IAAI,kBAAiB,kBAC3BwB,EAAAA,cAAA,UAAQwK,MAAOijC,EAAYI,mBAAoBztC,SA1CjCpC,IACpB,MACEmrB,EACE7nB,EADF6nB,eAGI8kB,EAAYtB,GAAkBrrC,EAAM8rC,OAAQpvC,EAAMsC,OAAOkK,MAAOijC,EAAYphC,MAEjD,IAA7B8c,EAAemJ,WACjBnJ,EAAe6D,WAAU+B,EAAAA,EAAAA,IAAqB1iB,EAAK,SAAU4hC,IAE/DjwC,EAAMmX,iBAAiB,GAiCfnV,EAAAA,cAAA,UAAQwB,UAAQ,EAACgJ,MAAM,UAAUhM,IAAI,WAAU,4BAC9C6qC,IAKLkE,GACGvtC,EAAAA,cAAA,QAAMC,UAAW4B,EAAW,kCAAmC,CAACqsC,QAAST,EAAYK,UAAWK,WAAYV,EAAYK,aACxHV,GAAUY,GAAAA,GAAgCZ,EAAO/2B,UAGlD,IAIV,IAAI+3B,EAAe,KACf9sC,EAAM6nB,eAAemJ,YACvB8b,EAAef,EAAkB5sC,KAAI,CAACstC,EAAiBntC,KACrD,MAAM2kC,EAAoB,CACxB/mC,IAAKuvC,EAAgB1hC,IACrBwtB,gBAAiBv4B,EAAMu4B,gBACvBoB,eAAgB35B,EAAM25B,eACtB9R,eAAgB7nB,EAAM6nB,eACtBD,YAAa5nB,EAAM4nB,aAGrB,OACElpB,EAAAA,cAAA,OACExB,IAAKuvC,EAAgB1hC,IACrBvL,GAAIitC,EAAgB1hC,IACpBpM,UAAW4B,EAAW,oCAAqCwK,GAC3D9L,OAAOilC,EAAAA,EAAAA,IAAuB3qC,GAAAA,GAAC,CAAC,EAAG0qC,GAAsBwI,KAEzD/tC,EAAAA,cAAA,YACEA,EAAAA,cAACwkC,GAAa,CACZn4B,IAAK0hC,EAAgB1hC,IACrBgK,QAAS03B,EAAgB13B,QACzB8V,WAAY,UACZhD,eAAgB7nB,EAAM6nB,eACtBvgB,YAAa,kEACby6B,uBAAqB,EACrBD,wBAAyB9hC,EAAM8hC,wBAC/BqC,iBAAe,KAGf,IAIV2I,EACEpuC,EAAAA,cAAA,OAAKC,UAAU,sCACbD,EAAAA,cAAA,UAAI,oBACHouC,IAKP,IAAIC,EAAuB,KAC3B,GAAId,EAAQ,CACV,MAAMe,EAAgBd,EAAqB/sC,KAAKgtC,GACtCA,EAAYK,YAIpBO,EADEC,EAAc/vC,QAAO,CAACuH,EAAGC,IAAMD,GAAKC,IACf/F,EAAAA,cAAC0sC,GAAuB,CAACxsC,KAAK,YAC5CouC,EAAc/vC,QAAO,CAACuH,EAAGC,IAAMD,GAAKC,IACtB/F,EAAAA,cAAC0sC,GAAuB,CAACxsC,KAAK,YAE9BF,EAAAA,cAAC0sC,GAAuB,CAACxsC,KAAK,aAEzD,CAEA,OACEF,EAAAA,cAAA,OACEc,GAAIQ,EAAM+K,IACV,kBACA,WAAU/K,EAAM+K,IAChBpM,UAAW4B,EAAW,uBAAwBwK,EAAK,CAACy/B,SAAUlG,IAC9DrlC,OAAOilC,EAAAA,EAAAA,IAAwBlkC,GAC/B0iC,iBAAiB,GAEhBqK,EACA5nC,EACA2nC,EAGP,CAEA,SAAepuC,EAAAA,KAAWmtC,ICpN1B,SAASoB,GAAejtC,GACtB,MACE6nB,EACE7nB,EADF6nB,eAGIhE,EAAUtjB,EAAW,UAAW,CAACiqC,SAAUxqC,EAAMskC,aAAc2H,OAAQjsC,EAAMisC,SAG7EiB,EADkBltC,EAAM+U,QAAQvY,QAAQsvC,GAAWA,EAAO5iC,QACnBnL,OACvCovC,EAAUntC,EAAM+U,QAAQ5V,KAAI,CAAC2sC,EAAQxsC,KACzC,MAkBM8tC,EAAU9tC,EAAQ,GAAMikC,OAAO8J,aAAa,GAAK/tC,GAASikC,OAAO8J,aAAa,GAAK/tC,GAEzF,IAAIguC,EAAeC,EAAe,KAClC,GAAIvtC,EAAM4nB,YAAYld,QAAS,CAC7B,IAAI8iC,EAYAC,EAXJ,OAAQ3B,EAAOA,QACb,IAAK,SACH0B,EAAe,IACf,MACF,KAAK,EACHA,EAAe,IACf,MACF,QACEA,EAAe,IAUnB,GANI1B,EAAO4B,UACTD,EAAeztC,EAAM8jC,YAAY3kC,KAAK6kC,GAAeA,EAAWj5B,MAAKhB,QAAQ+hC,EAAO4B,SAAW,GAGjGJ,EAAgB5uC,EAAAA,cAAA,YAAO8uC,EAAcC,EAAa,UAE9C5lB,EAAemJ,UAAW,CAC5B,MAAM2c,EAAuB3tC,EAAM8jC,YAAY3kC,KAAK6kC,GAEhDtlC,EAAAA,cAAA,UAAQxB,IAAK8mC,EAAWj5B,IAAK7B,MAAO86B,EAAWj5B,KACb,kBAAvBi5B,EAAWjvB,QAAwBivB,EAAWjvB,QAAU6uB,GAAAA,GAA8BrB,GAAAA,GAAuCyB,EAAWjvB,aAKvJw4B,EAAe,CACb7uC,EAAAA,cAAA,UAAQxB,IAAI,6BAA6BgM,MAAO4iC,EAAO4B,SAAW,eAAgB/uC,UAAU,6BAA6BG,SAAWpC,IACvG,iBAAvBA,EAAMsC,OAAOkK,MACf2e,EAAe6D,WAAUkiB,EAAAA,EAAAA,IAAuB9B,EAAO/gC,IAAK,CAAC2iC,QAAS,KAAM5B,QAAQ,KAEpFjkB,EAAe6D,WAAU+B,EAAAA,EAAAA,IAAqBqe,EAAO/gC,IAAK,UAAWrO,EAAMsC,OAAOkK,OACpF,GAEAxK,EAAAA,cAAA,UAAQxB,IAAI,eAAegM,MAAM,gBAAe,sBAC/CykC,GAEHjvC,EAAAA,cAAA,SAAOC,UAAU,wBAAwBC,KAAK,WAAWC,SAA2B,IAAlBitC,EAAOA,OAAiBxrC,QAAUvB,IAC7F+sC,EAAO4B,SAEZ7lB,EAAe6D,WAAU+B,EAAAA,EAAAA,IAAqBqe,EAAO/gC,IAAK,UAA6B,IAAlB+gC,EAAOA,SAC5E/sC,EAAE8U,mBAHqBV,MAAM,6BAGV,IAErBzU,EAAAA,cAAA,KAAGxB,IAAI,wBAAwByB,UAAW4B,EAAW,kCAAmC,CAAC,YAA+B,WAAlBurC,EAAOA,SAAuBxrC,QAAUvB,IACvI+sC,EAAO4B,SAEZ7lB,EAAe6D,WAAU+B,EAAAA,EAAAA,IAAqBqe,EAAO/gC,IAAK,SAA6B,WAAlB+gC,EAAOA,QAA+B,WAC3G/sC,EAAE8U,mBAHqBV,MAAM,6BAGV,IAGzB,CACF,CAEA,OACEzU,EAAAA,cAAA,MAAIxB,IAAK4uC,EAAO/gC,IAAKpM,UAAW4B,EAAW,iBAAkB,CAAC1B,QAASitC,EAAO5iC,QAAS5I,SAAUN,EAAMskC,cA9ElFvlC,KACrB,GAAI8oB,EAAemJ,UACjBjyB,EAAE8U,sBACG,CACL,IAAIg6B,EAAO,CAAC,EAER/B,EAAO5iC,QAA0B,IAAhBlJ,EAAM8tC,QAAqB9tC,EAAM+tC,iBAAoBb,EAAuBltC,EAAM8tC,MACrGD,EAAO,CACL,CAAC/B,EAAO/gC,KAAM,CAAC7B,OAAQ4iC,EAAO5iC,QAEvBlJ,EAAM+tC,iBAAmBb,GAAwBltC,EAAM8tC,OAChE36B,MAAM,iLAGRnT,EAAM4nB,YAAYyD,SAASwiB,EAC7B,KAgEEnvC,EAAAA,cAAA,OAAKC,UAAU,+BACbD,EAAAA,cAAA,QAAMC,UAAU,yBACf2uC,EACD5uC,EAAAA,cAAA,QAAMC,UAAU,yBAA0B,GAAEyuC,OAAkB,OAE9D1uC,EAAAA,cAAA,QAAMC,UAAU,wBACdD,EAAAA,cAACwkC,GAAa,CACZn4B,IAAK+gC,EAAO/gC,IACZgK,QAAS+2B,EAAO/2B,QAChB8V,WAAY,UACZhD,eAAgBA,EAChBka,uBAAqB,EACrBD,wBAAyB9hC,EAAM8hC,2BAGlCyL,GAEA,IAIT,IAAIS,EAAuB,KACvBC,EAA4B,MACZ,IAAhBjuC,EAAM8tC,QACJ9tC,EAAM+tC,gBACY,IAAhB/tC,EAAM8tC,MACRE,EAAwB,8BAA6BhuC,EAAM8tC,iBAE3DE,EAAwB,oCAAmChuC,EAAM8tC,iBACjEG,EAA4B,2IAG9BD,EAAuB,6CACvBC,EAA4B,iGACxBjuC,EAAM4nB,YAAYld,UACpBujC,EAA4BvvC,EAAAA,cAAA,YAAMA,EAAAA,cAAA,SAAK,yBAAwBsB,EAAM8tC,UAAa,IAAEE,MAK1F,IAAIE,EAAsB,KACtBF,IACFE,EAAsBxvC,EAAAA,cAAA,KAAGC,UAAU,sBAAqBD,EAAAA,cAAA,QAAMC,UAAU,2BAA2BqvC,GAA4B,IAACtvC,EAAAA,cAAA,QAAMC,UAAU,4BAA4BsvC,KAG9K,IAAIE,EAAsB,MACN,IAAhBnuC,EAAM8tC,OAAmB9tC,EAAM+tC,kBACjCI,EACEzvC,EAAAA,cAAA,KAAGC,UAAU,0BACXD,EAAAA,cAAA,cACEA,EAAAA,cAAA,QAAMC,UAAU,iCAAiCuuC,GAA4B,gBAAcltC,EAAM8tC,MAAM,cAM/G,IAAIM,EAAe,KACnB,GAAIpuC,EAAM4nB,YAAYld,QAAS,CAC7B,IAAI2jC,EAAY,EAChB,IAAoB,IAAhBruC,EAAM8tC,OAAmBZ,EAAuBltC,EAAM8tC,MACxDO,EAAQ,MACH,CACL,MAAMC,GAAWnf,EAAAA,EAAAA,OAAKof,EAAAA,EAAAA,SAAQvuC,EAAM+U,QAAQ5V,KAAK2sC,GAAWA,EAAO4B,YAC7Dc,EAAgB,CAACC,cAAe,GACtCH,EAAS7wC,SAASiwC,IAChB,MAAM1J,EAAahkC,EAAM8jC,YAAYjqB,MAAMmqB,GAAeA,EAAWj5B,MAAQ2iC,IACvEgB,EAAkBhC,GAAAA,GAAgC1I,EAAaA,EAAWjvB,QAAU24B,GAC1F,IAAoB,IAAhB1tC,EAAM8tC,OAAmBZ,EAAuBltC,EAAM8tC,MACxDU,EAAcE,GAAkB,MAC3B,CACL,MAAMC,EAAiB3uC,EAAM+U,QAAQvY,QAAQsvC,GAAmBA,EAAO4B,UAAYA,IAInF,GAF6BiB,EAAenyC,QAAQsvC,GAAqC,WAAlBA,EAAOA,SACtC7uC,QAAO,CAACuB,EAAKstC,IAAmBttC,GAAOstC,EAAO5iC,QAAS,GAE7FslC,EAAcE,GAAkB,MAC3B,CACL,MAAME,EAAwBD,EAAenyC,QAAQsvC,IAAqC,IAAlBA,EAAOA,SACzE+C,EAA+BD,EAAsBpyC,QAAQsvC,GAAWA,EAAO5iC,QAErFslC,EAAcE,GAAkBG,EAA6B9wC,OAAS6wC,EAAsB7wC,MAC9F,CACF,CAEAywC,EAAcC,cAAgBD,EAAcE,GAAkBF,EAAcC,aAAa,IAG3FD,EAAcC,cAAgBD,EAAcC,cAAgBH,EAASvwC,OACrEswC,EAAQjwC,KAAKC,UAAUmwC,EACzB,CACAJ,EAAe1vC,EAAAA,cAAA,SAAG,kBAAgB2vC,EACpC,CAEA,OACE3vC,EAAAA,cAAA,OACEc,GAAIQ,EAAM+K,IACV,kBACA,WAAU/K,EAAM+K,IAChBpM,UAAY,mBAAkBqB,EAAM+K,MACpC9L,OAAOilC,EAAAA,EAAAA,IAAwBlkC,GAC/B0iC,iBAAiB,GAEhBwL,EACAC,EACDzvC,EAAAA,cAAA,MAAIC,UAAWklB,GACZspB,GAEFiB,EAGP,CAEA,SAAe1vC,EAAAA,KAAWuuC,IChN1B,SAAS6B,GAAY9uC,GACnB,MAMMM,EAAWvB,IAA+DA,EAAE8U,iBAAiB,EAEnG,OACEnV,EAAAA,cAAA,OACEc,GAAIQ,EAAM+K,IACV,kBACA,WAAU/K,EAAM+K,IAChBpM,UAAW4B,EAAW,eAAgBP,EAAM+K,IAAK,CAACy/B,SAAUxqC,EAAMskC,eAClErlC,OAAOilC,EAAAA,EAAAA,IAAwBlkC,IAE/BtB,EAAAA,cAAA,SAAOE,KAAK,WAAWY,GAAK,GAAEQ,EAAM+K,eAAgB7K,SAAUF,EAAMskC,aAAczlC,QAASmB,EAAMkJ,MAAOpK,SAhBzFC,IACjBiB,EAAM4nB,YAAYyD,SAAS,CACzB,CAACrrB,EAAM+K,KAAM,CAAC7B,MAAOnK,EAAEC,OAAOH,UAC9B,EAa6HyB,QAASA,IACtI5B,EAAAA,cAAA,SAAO6uB,QAAU,GAAEvtB,EAAM+K,eAAgBzK,QAASA,GAChD5B,EAAAA,cAAA,QAAMC,UAAU,sBAAqBD,EAAAA,cAAA,QAAMC,UAAU,wBACrDD,EAAAA,cAAA,QAAMC,UAAU,sBACdD,EAAAA,cAACwkC,GAAa,CACZn4B,IAAK/K,EAAM+K,IACXgK,QAAS/U,EAAM+U,QACf8V,WAAY,UACZvjB,YAAa,2BACbugB,eAAgB7nB,EAAM6nB,mBAMlC,CAEA,SAAenpB,EAAAA,KAAWowC,ICpC1B,SAASC,GAAkB/uC,GACzB,OACEtB,EAAAA,cAAA,MACEc,GAAIQ,EAAM+K,IACV,kBACA,WAAU/K,EAAM+K,IAChBpM,UAAW4B,EAAW,sBAAuBP,EAAM+K,IAAK,CAAC,2BAA4B/K,EAAM6nB,eAAemJ,YAC1G/xB,OAAOilC,EAAAA,EAAAA,IAAwBlkC,GAC/B0iC,iBAAiB,GAGvB,CAEA,SAAehkC,EAAAA,KAAWqwC,I,mGCLpBC,GAAyBC,GAAkClwC,IAC/DA,EAAEqT,iBACFrT,EAAE8U,kBACFo7B,GAAkB,EAWL,MAAMC,WAAiBxwC,EAAAA,cACpCgC,WAAAA,CAAYV,GACVW,MAAMX,GAENa,KAAKS,MAAQ,CACX6tC,cAAc,EAElB,CAEAC,UAAAA,CAAWrwC,GACT,MAAQ8oB,EAAmBhnB,KAAKb,MAAxB6nB,eAEJA,EAAemJ,WACjBnJ,EAAeY,eAAemY,EAAAA,GAAc,CAAEvE,UAAW,QAAStxB,IAAKlK,KAAKb,MAAM+K,MAGpFhM,EAAE8U,iBACJ,CAEAo7B,gBAAAA,IACOpuC,KAAKS,MAAM6tC,cAAgBtuC,KAAKb,MAAM6jB,SAAS7d,SAAS,kBAC3DnF,KAAKb,MAAM4nB,YAAY+c,SAAS0K,EAAAA,IAElCxuC,KAAKO,SAAS,CAAE+tC,cAAetuC,KAAKS,MAAM6tC,cAC5C,CAEAG,wBAAAA,CAAyBvwC,GAKvB,OAJAA,EAAE8U,kBACEhT,KAAKb,MAAM6jB,SAAS7d,SAAS,kBAC/BnF,KAAKb,MAAM4nB,YAAY+c,SAAS4K,EAAAA,KAE3B,CACT,CAEAC,kBAAAA,CAAmBC,GACjB,OACE/wC,EAAAA,cAAA,OAAKC,UAAU,oBAAoB2B,QAASO,KAAKouC,iBAAiBx7B,KAAK5S,OACrEnC,EAAAA,cAAA,OAAKC,UAAU,+BACbD,EAAAA,cAAA,OAAKuM,IAAKwkC,IACV/wC,EAAAA,cAAA,KAAGwL,MAAM,OAAO3H,KAAK,IAAIjC,QAAS0uC,GAAsBnuC,KAAKouC,iBAAiBx7B,KAAK5S,OAAQlC,UAAU,6BACnGD,EAAAA,cAAA,KAAGC,UAAU,kBAAiB,OAKxC,CAEAsE,MAAAA,GACE,IAAIwsC,EAAUC,EACd,GAAI7uC,KAAKb,MAAMxG,IAAK,CAClBi2C,EAAW5uC,KAAKb,MAAMxG,IACtB,MAGMm2C,GAH+B9uC,KAAKb,MAAMu9B,aAAa0B,OAAOplB,MACjE/b,GAAMA,EAAEohC,mBAAqBr+B,KAAKb,MAAMxG,KAAOqH,KAAKb,MAAMxG,IAAIwM,SAASlI,EAAE8xC,eACvE,CAAC,GACoB7Q,qBAAuBl+B,KAAKb,MAAMxG,IAAI+E,MAAM,KAAKqhC,OAAOrhC,MAAM,KAAK,GAC7FmxC,EAAqB,cAAa7uC,KAAKb,MAAMu4B,gBAAgB/4B,gCAAgCmwC,GAC/F,MAAW9uC,KAAKb,MAAMuhC,KAA0B,cAAnB1gC,KAAKb,MAAMuhC,KACtCwI,QAAQC,QAAQ,8CAChByF,EAAW5uC,KAAKb,MAAM25B,eAAekW,cAAchvC,KAAKb,MAAMuhC,KAC9DmO,EAAqB,cAAa7uC,KAAKb,MAAMu4B,gBAAgB/4B,+BAA+BspB,mBAAmBjoB,KAAKb,MAAMuhC,SAE1HkO,EAAWK,GACXJ,EAAoB,KAGtB,MAAMK,EACJrxC,EAAAA,cAAA,UACEc,GAAIqB,KAAKb,MAAM+K,IACfpM,UAAW4B,EAAW,YAAaM,KAAKb,MAAM+K,KAC9C23B,iBAAiB,GAEjBhkC,EAAAA,cAAA,OAAKC,UAAU,oBAAoB2B,QAASO,KAAKouC,iBAAiBx7B,KAAK5S,OACrEnC,EAAAA,cAAA,OAAKO,OAAOilC,EAAAA,EAAAA,IAAwBrjC,KAAKb,OAAQiL,IAAKwkC,IACtD/wC,EAAAA,cAAA,KACE6D,KAAK,IACL2H,MAAM,iBACN5J,QAAS0uC,GAAsBnuC,KAAKouC,iBAAiBx7B,KAAK5S,OAC1DlC,UAAU,2BAEVD,EAAAA,cAAA,KAAGC,UAAU,kBAEfD,EAAAA,cAAA,KACE6D,KAAMmtC,EACNpvC,QAASO,KAAKyuC,yBAAyB77B,KAAK5S,MAC5C7B,OAAO,SACPkL,MAAM,kBACNvL,UAAU,kCAEVD,EAAAA,cAAA,KAAGC,UAAU,2BAA0B,MAExCkC,KAAKb,MAAM6nB,eAAemJ,WAAanwB,KAAKb,MAAM4nB,YAAY/c,YAAYsxB,iBACzEz9B,EAAAA,cAACioB,EAAAA,EAAS,CACRzpB,IAAI,gBACJyB,UAAU,0BACVwC,KAAMzC,EAAAA,cAAA,KAAGC,UAAU,gBACnB0V,aAAW,EACXE,OAAK,EACLjU,QAASO,KAAKuuC,WAAW37B,KAAK5S,SAIpCnC,EAAAA,cAAA,kBACEA,EAAAA,cAACwkC,GAAa,CACZn4B,IAAKlK,KAAKb,MAAM+K,IAChBgK,QAASlU,KAAKb,MAAMkK,OAAS,GAC7B2gB,WAAY,QACZhD,eAAgBhnB,KAAKb,MAAM6nB,eAC3BvgB,YAAa,2BACby6B,uBAAqB,EACrBD,wBAAyBjhC,KAAKb,MAAM8hC,2BAGvCjhC,KAAKS,MAAM6tC,cACVa,GAAAA,aAAsBnvC,KAAK2uC,mBAAmBC,GAAW5sC,SAAS8mB,OAIxE,OAAI9oB,KAAKb,MAAMiwC,UACNF,EAGLrxC,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,aACAA,EAAAA,cAAA,OACE,kBACA,WAAUmC,KAAKb,MAAM+K,IACrBpM,UAAW4B,EAAW,mBAAoBM,KAAKb,MAAM+K,IAAK,CACxD,CAAE,uBAAsBlK,KAAKb,MAAMkwC,aAAcrvC,KAAKb,MAAMkwC,UAC5D,mBAAoBrvC,KAAKb,MAAM6pC,oBAAsBhpC,KAAKb,MAAM8pC,SAElEpH,iBAAiB,GAEhBqN,GACClvC,KAAKb,MAAM8pC,QAAUprC,EAAAA,cAACmqC,GAAgBhoC,KAAKb,QAC3Ca,KAAKb,MAAM8pC,QAAUprC,EAAAA,cAACwqC,GAAYroC,KAAKb,QAE3CtB,EAAAA,cAAA,aAIR,E,8GC1JF,SAASyxC,GAAgBnwC,GACvB,MACE25B,EASE35B,EATF25B,eACAC,EAQE55B,EARF45B,eACArB,EAOEv4B,EAPFu4B,gBACA1Q,EAME7nB,EANF6nB,eACA2R,EAKEx5B,EALFw5B,YACAyF,EAIEj/B,EAJFi/B,OACA1B,EAGEv9B,EAHFu9B,aACAxyB,EAEE/K,EAFF+K,IACA6c,EACE5nB,EADF4nB,YAGF,IAAIoJ,EAAYnJ,EAAemJ,UAC3Bof,EAAiBnR,EAAO9/B,KAAI,CAAC4wC,EAAOzwC,KACtC,MAAM2kC,EAAoB,CACxB/mC,IAAK6yC,EAAMhlC,IACXwtB,gBAAiBA,EACjBoB,eAAgBA,EAChB9R,eAAgBA,EAChBD,YAAaA,EACb2V,aAAcA,EACd3D,eAAgBA,EAChBJ,YAAaA,GAGf,OACE96B,EAAAA,cAAA,OAAKC,UAAU,0BAA0BzB,IAAM,2BAA0B6yC,EAAMhlC,OAC7ErM,EAAAA,cAACwwC,GAAQnyC,OAAAia,OAAA,GACH+4B,EACA9L,EAAiB,CACrBgM,WAAS,EACTnG,QAAM,KAEJ,IAIV,GAAIjiB,EAAemJ,UAAW,CACE,IAA1Bof,EAAeryC,SACjBqyC,EAAiB,CACf1xC,EAAAA,cAAA,OAAKC,UAAU,0BAA0BzB,IAAI,6BAC3CwB,EAAAA,cAAA,OACEuM,IAAKolC,GACL1xC,UAAU,gCACV2B,QAASA,KACPunB,EAAe+K,2BACf/K,EAAeoD,uBAAuB,CAACL,MAAO,CAAC7f,IAAKA,EAAKzL,MAAO,GAAIwrB,IAAK,CAAC/f,IAAKA,EAAKzL,MAAO,IAAI,OAOzG,MAAMgxC,GAAkBjO,EAAAA,EAAAA,OAAM,EAAG+N,EAAeryC,OAAS,GAAGoB,KAAKoxC,GAE7D7xC,EAAAA,cAAA,OACExB,IAAM,+BAA8BqzC,IACpC5xC,UAAU,4CAEVD,EAAAA,cAAA,OACExB,IAAI,8BACJyB,UAAU,8BACV2B,QAASA,KACP,MAAMooC,EAAU7gB,EAAeoI,gBAAuB,MAAE0Y,SAAS9gB,EAAeoI,gBAAiB,CAAC,GAClGpI,EAAe6D,WAAU8kB,EAAAA,EAAAA,IAAiB9H,EAAS39B,EAAK,SAAUwlC,GAAY,GAEjF7xC,EAAAA,cAAA,KAAGC,UAAU,mBAKpByxC,GAAiB7B,EAAAA,EAAAA,UAAQkC,EAAAA,EAAAA,UAAQC,EAAAA,EAAAA,KAAIJ,EAAiBF,IACxD,CAEA,OACE1xC,EAAAA,cAAA,OACEc,GAAIQ,EAAM+K,IACV,kBACA,WAAU/K,EAAM+K,IAChBpM,UAAW4B,EAAW,oBAAqBwK,GAC3C9L,OAAOilC,EAAAA,EAAAA,IAAwBlkC,GAC/B0iC,iBAAiB,GAEjBhkC,EAAAA,cAAA,OAAKC,UAAU,8BACbD,EAAAA,cAACiyC,KAAQ,CAACC,KAAM,EAAGzrC,KAAM,EAAG0rC,UAAQ,EAACC,MAAI,GACtCV,EAAejxC,KAAI,CAAC4wC,EAAOzwC,KAC6C,IAAvE8wC,EAAe9wC,GAAOU,MAAMrB,UAAUoL,QAAQ,qBAC9CrL,EAAAA,cAACiyC,KAAAA,KAAa,CAACzzC,IAAKoC,GAChB0xB,GACAtyB,EAAAA,cAAA,OAAKC,UAAU,iDACZyxC,EAAe9wC,EAAM,GACrB8wC,EAAe9wC,EAAM,IAGzB8wC,EAAe9wC,QAKxBZ,EAAAA,cAACmqC,GAAgB7oC,GACjBtB,EAAAA,cAACwqC,GAAYlpC,GAGnB,CAEA,SAAetB,EAAAA,KAAWyxC,I,+EC5G1B,SAASY,GAAqB/wC,GAC5B,MACE+K,EAKE/K,EALF+K,IACA8Y,EAIE7jB,EAJF6jB,QACA9O,EAGE/U,EAHF+U,QACA8S,EAEE7nB,EAFF6nB,eACAgF,EACE7sB,EADF6sB,UAGF,IAAI5X,EAEA+7B,EADA7N,GAAW,EAmBf,OAjBItb,EAAemJ,YACbnJ,EAAeopB,8BAAgClmC,EACjDo4B,GAAW,GAEXluB,EAAcA,KAAQ4S,EAAeY,eAAe,mCAAoC,CAACyoB,qBAAsBnmC,GAAK,EAEpHimC,EACEtyC,EAAAA,cAACqB,GAAAA,EAAQ,CACPpB,UAAU,oDACV2B,QAAS2U,GAETvW,EAAAA,cAAA,OAAKuM,IAAKkmC,GAAmBlyC,MAAO,CAAC8R,OAAQ,aAOnDrS,EAAAA,cAAA,OACEc,GAAIQ,EAAM+K,IACV,kBACA,WAAU/K,EAAM+K,IAChBpM,UAAW4B,EAAW,yBAA0BwK,EAAK8Y,EAAS,CAAC,YAAagE,EAAemJ,WAAamS,IACxGT,iBAAiB,EACjBpiC,QAAS2U,GAETvW,EAAAA,cAAA,OAAKC,UAAU,6BACdqyC,EACDtyC,EAAAA,cAAA,OAAKC,UAAU,8BACbD,EAAAA,cAACwkC,GAAa,CACZn4B,IAAKA,EACLgK,QAASA,EACT8V,WAAY,UACZvjB,YAAa,gCACbugB,eAAgBA,EAChBka,uBAAqB,EACrBlV,UAAWA,EACXsW,SAAUA,KAKpB,CAEA,SAAezkC,EAAAA,KAAWqyC,IC9D1B,SAASK,GAA0BpxC,GACjC,MACE+K,EAGE/K,EAHF+K,IACA8Y,EAEE7jB,EAFF6jB,QACA9O,EACE/U,EADF+U,QAGF,OACErW,EAAAA,cAAA,OACEc,GAAIQ,EAAM+K,IACV,kBACA,WAAU/K,EAAM+K,IAChBpM,UAAW4B,EAAW,+BAAgCwK,EAAK8Y,GAC3D6e,iBAAiB,EACjBzjC,MAAO,CAACoR,aAAc,SAEtB3R,EAAAA,cAAA,SAAG,kEAEHA,EAAAA,cAAC2yC,GAAat0C,OAAAia,OAAA,GACRhX,EAAK,CACT+U,QAASA,EACT8V,WAAW,UACXkX,uBAAqB,EACrB+H,QAAM,EACNwH,oBAAoB,KAI5B,CAEA,SAAe5yC,EAAAA,KAAW0yC,I,gBC1B1B,SAASG,GAAYvxC,GACnB,MCTwC,kBADbwxC,EDUVxxC,EAAM+U,WCRlB08B,EAAAA,GAAAA,IAAiBD,KACjB7N,EAAAA,GAAAA,IAAkB6N,GDSnB9yC,EAAAA,cAAA,MACEc,GAAIQ,EAAM+K,IACV,kBACA,WAAU/K,EAAM+K,IAChBpM,UAAW4B,EAAW,gBAAiBP,EAAM+K,MAE7CrM,EAAAA,cAACwkC,GAAa,CACZn4B,IAAK/K,EAAM+K,IACXgK,QAAS/U,EAAM+U,QACf8V,WAAY,UACZhD,eAAgB7nB,EAAM6nB,eACtBvgB,YAAa,+BAMjB5I,EAAAA,cAAA,MACEc,GAAIQ,EAAM+K,IACV,kBACA,WAAU/K,EAAM+K,IAChBpM,UAAW4B,EAAW,gBAAiBP,EAAM+K,KAC7C9L,OAAOilC,EAAAA,EAAAA,IAAwBlkC,IAE/BtB,EAAAA,cAACgzC,GAA2B,CAC1BC,qBAAsB3xC,EAAM2xC,qBAC5B9pB,eAAgB7nB,EAAM6nB,iBAExBnpB,EAAAA,cAAC2yC,GAAat0C,OAAAia,OAAA,GACRhX,EAAK,CACT+U,QAAS/U,EAAM+U,QACf8V,WAAW,UACXif,QAAM,MC5CT,IAAsB0H,CDiD7B,CAOA,SAASE,GAA4B1xC,GACnC,MACE2xC,EAEE3xC,EAFF2xC,qBACA9pB,EACE7nB,EADF6nB,eAGF,OAAQ8pB,GAAsB/yC,MAC5B,IAAK,iBACH,OACEF,EAAAA,cAAA,QACEC,UAAU,qBACVM,MAAO,CACL2yC,oBAAsB,OAAM/pB,EAAe2a,YAAYmP,EAAqBE,cAC5E/lC,eAAgB,iBAEnB,oBAIL,IAAK,cACH,OACEpN,EAAAA,cAAA,QACEC,UAAU,qBACVM,MAAO,CACL2M,MAAQ,OAAMic,EAAe2a,YAAYmP,EAAqBE,cAC9D/lC,eAAgB,cAEnB,oBAIL,QACE,OAAO,KAEb,CAGA,SAAepN,EAAAA,KAAW6yC,IEpF1B,SAASO,GAAQ9xC,GACf,MAAM6iB,EAAY7iB,EAAM+U,QAAQ5V,KAAI,CAAC4yC,EAAUzyC,IAE3CZ,EAAAA,cAAC6yC,GAAWx0C,OAAAia,OAAA,GACN+6B,EAAQ,CACZ70C,IAAK60C,EAAShnC,IACd++B,OAAQ9pC,EAAM8pC,OACdvR,gBAAiBv4B,EAAMu4B,gBACvBoB,eAAgB35B,EAAM25B,eACtB9R,eAAgB7nB,EAAM6nB,eACtBD,YAAa5nB,EAAM4nB,YACnBgS,eAAgB55B,EAAM45B,oBAK5B,MACO,iBADC55B,EAAMpB,KAGRF,EAAAA,cAAA,MACEc,GAAIQ,EAAM+K,IACV,kBACA,WAAU/K,EAAM+K,IAChBpM,UAAW4B,EAAWP,EAAM8pC,OAAS,2BAA6B,oBAAqB9pC,EAAM+K,IAAK/K,EAAM6jB,QAAS,CAAC,mBAAoB7jB,EAAM6pC,oBAAsB7pC,EAAM8pC,SACxK7qC,OAAOilC,EAAAA,EAAAA,IAAwBlkC,IAE9B6iB,GACC7iB,EAAM8pC,QAAUprC,EAAAA,cAACmqC,GAAgB7oC,IACjCA,EAAM8pC,QAAUprC,EAAAA,cAACwqC,GAAYlpC,IAMjCtB,EAAAA,cAAA,MACEc,GAAIQ,EAAM+K,IACV,kBACA,WAAU/K,EAAM+K,IAChBpM,UAAW4B,EAAWP,EAAM8pC,OAAS,0BAA4B,mBAAoB9pC,EAAM+K,IAAK/K,EAAM6jB,QAAS,CAAC,mBAAoB7jB,EAAM6pC,oBAAsB7pC,EAAM8pC,SACtK7qC,OAAOilC,EAAAA,EAAAA,IAAwBlkC,IAE9B6iB,GACC7iB,EAAM8pC,QAAUprC,EAAAA,cAACmqC,GAAgB7oC,IACjCA,EAAM8pC,QAAUprC,EAAAA,cAACwqC,GAAYlpC,GAIzC,CAEA,SAAetB,EAAAA,KAAWozC,I,k/BCnD1B,SAASE,GAAkBhyC,GACzB,MACE6nB,EACE7nB,EADF6nB,eAGIhE,EAAUtjB,EAAW,sBAAuB,CAACiqC,SAAUxqC,EAAMskC,aAAc2H,OAAQjsC,EAAMisC,SAEzFkB,EAAUntC,EAAM+U,QAAQ5V,KAAI,CAAC2sC,EAAQxsC,KACzC,MAAM2kC,EAAoB,CACxB/mC,IAAK4uC,EAAO/gC,IACZ++B,QAAQ,EACRvR,gBAAiBv4B,EAAMu4B,gBACvBoB,eAAgB35B,EAAM25B,eACtB9R,eAAgBA,EAChBD,YAAa5nB,EAAM4nB,aAyBrB,IAAIqqB,EAAa,KASjB,OARIjyC,EAAMisC,SACRgG,EACEvzC,EAAAA,cAAA,OAAKC,UAAU,0CACZmtC,EAAOA,QAAUptC,EAAAA,cAAA,QAAMC,UAAW4B,EAAW,oBAAqB,eAMvE7B,EAAAA,cAAA,MACExB,IAAK4uC,EAAO/gC,IACZvL,GAAIssC,EAAO/gC,IACXpM,UAAW4B,EAAW,6BAA8BurC,EAAO/gC,IAAK,CAAClM,QAASitC,EAAO5iC,QACjF5I,QApCkB4xC,KACpB,IAAKlyC,EAAMskC,aAAc,CACvB,IAAIuJ,EAAO,CACT,CAAC/B,EAAO/gC,KAAM,CAAC7B,OAAQ4iC,EAAO5iC,QAGhC,IAAKlJ,EAAMmyC,eAAgB,CACzB,MAAMC,EAAUpyC,EAAM+U,QAAQvY,QAAS61C,GAC7BA,EAAInpC,OAAUmpC,EAAItnC,MAAQ+gC,EAAO/gC,MACxC9N,QAAO,CAACuB,EAAK6zC,IACd94C,GAAAA,GAAA,GAAaiF,GAAG,IACd,CAAC6zC,EAAItnC,KAAM,CAAC7B,OAAO,MAEpB,CAAC,GAEJ2kC,EAAIt0C,GAAAA,GAAA,GAAOs0C,GAASuE,EACtB,CAEApyC,EAAM4nB,YAAYyD,SAASwiB,EAC7B,GAkBE5uC,OAAOilC,EAAAA,EAAAA,IAAuB3qC,GAAAA,GAAC,CAAC,EAAG0qC,GAAsB6H,KAExDjkB,EAAemJ,WAAatyB,EAAAA,cAAA,SAAOE,KAAK,WAAW0zC,eAAgBxG,EAAOA,OAAQxrC,QAAUvB,IAC3F8oB,EAAe6D,WAAU+B,EAAAA,EAAAA,IAAqBqe,EAAO/gC,IAAK,UAAW+gC,EAAOA,SAC5E/sC,EAAE8U,iBAAiB,IAEpBo+B,EACDvzC,EAAAA,cAAA,QAAMC,UAAU,qCAChBD,EAAAA,cAAA,QAAMC,UAAU,oCACdD,EAAAA,cAACwkC,GAAa,CACZn4B,IAAK+gC,EAAO/gC,IACZgK,QAAS+2B,EAAO/2B,QAChB8V,WAAY,UACZvjB,YAAa,kCACbugB,eAAgBA,EAChBka,uBAAqB,EACrBD,wBAAyB9hC,EAAM8hC,2BAGhC,IAKT,IAAIyQ,EAAiB,KACrB,GAAIvyC,EAAMisC,OAAQ,CACCjsC,EAAM+U,QAAQ5V,KAAK2sC,GAC1BA,EAAOA,SACd7uC,QAAO,CAACuH,EAAGC,IAAMD,GAAKC,IAFzB,MAIM+tC,EAAUxyC,EAAM+U,QAAQ5V,KAAK2sC,IACxBA,EAAOA,SACf7uC,QAAO,CAACuH,EAAGC,IAAMD,GAAKC,IAQnBguC,GANgBzyC,EAAM+U,QAAQvY,QAAQsvC,GAClCA,EAAO5iC,OAAS4iC,EAAOA,SAC9B3sC,KAAK2sC,GACEA,EAAO5iC,QAAU4iC,EAAOA,SAKH,IAFN9rC,EAAM+U,QAAQ5V,KAAK2sC,GAClCA,EAAOA,SACdtvC,QAAQgiB,GAAMA,IAAGzgB,QAGlBw0C,EADEC,EACe9zC,EAAAA,cAAA,KAAGxB,IAAI,iCAAiCyB,UAAU,mBAAkB,mCAC5E8zC,EACQ/zC,EAAAA,cAAA,KAAGxB,IAAI,6BAA6ByB,UAAU,mBAAkB,0FAEhED,EAAAA,cAAA,KAAGxB,IAAI,mCAAmCyB,UAAU,mBAAkB,2FAE3F,CAEA,OACED,EAAAA,cAAA,OACEc,GAAIQ,EAAM+K,IACV,kBACA,WAAU/K,EAAM+K,IAChBpM,UAAW4B,EAAW,8BAA+BP,EAAM+K,KAC3D9L,OAAOilC,EAAAA,EAAAA,IAAwBlkC,GAC/B0iC,iBAAiB,GAEhB6P,EACD7zC,EAAAA,cAAA,MAAIC,UAAWklB,GACZspB,GAIT,CAEA,SAAezuC,EAAAA,KAAWszC,IC1H1B,SAASU,GAAa1yC,GACpB,OACEtB,EAAAA,cAAA,KACEc,GAAIQ,EAAM+K,IACV,kBACA,WAAU/K,EAAM+K,IAChBpM,UAAW4B,EAAW,CAAC,mBAAoBP,EAAM6pC,oBAAsB7pC,EAAM8pC,QAAS9pC,EAAM8pC,OAAS,uBAAyB,gBAAiB9pC,EAAM+K,IAAK/K,EAAM6jB,SAChK5kB,OAAOilC,EAAAA,EAAAA,IAAwBlkC,IAE/BtB,EAAAA,cAACi0C,GAA4B,CAC3BhB,qBAAsB3xC,EAAM2xC,qBAC5B9pB,eAAgB7nB,EAAM6nB,iBAExBnpB,EAAAA,cAACwkC,GAAa,CACZn4B,IAAK/K,EAAM+K,IACXgK,QAAS/U,EAAM+U,QACf8V,WAAY,UACZvjB,YAAa,4BACbugB,eAAgB7nB,EAAM6nB,eACtB0Q,gBAAiBv4B,EAAMu4B,mBAEvBv4B,EAAM8pC,QAAUprC,EAAAA,cAACmqC,GAAgB7oC,IACjCA,EAAM8pC,QAAUprC,EAAAA,cAACwqC,GAAYlpC,GAGrC,CAOA,SAAS2yC,GAA6B3yC,GACpC,MACE2xC,EAEE3xC,EAFF2xC,qBACA9pB,EACE7nB,EADF6nB,eAGF,IAAI+qB,EAAY,GAChB,OAAQjB,GAAsB/yC,MAC5B,IAAK,iBAEH,OADAg0C,EAAY/qB,EAAegrB,eAAe,eAAkB,OAAMhrB,EAAe2a,YAAYmP,EAAqBE,cAAiB,gBAEjInzC,EAAAA,cAAA,QACEC,UAAU,qBACVM,MAAO,CACL2yC,oBAAqBgB,EACrB9mC,eAAgB,eAChBrI,WAAY,SAEf,gBAIL,IAAK,cAEH,OADAmvC,EAAY/qB,EAAegrB,eAAe,eAAkB,OAAMhrB,EAAe2a,YAAYmP,EAAqBE,cAAiB,gBAEjInzC,EAAAA,cAAA,QACEC,UAAU,qBACVM,MAAO,CACL2M,MAAOgnC,EACP9mC,eAAgB,YAChBrI,WAAY,SAEf,gBAIL,QACE,OAAO,KAEb,CAEA,SAAe/E,EAAAA,KAAWg0C,IC5E1B,SAASI,GAAa9yC,GACpB,MAAMM,EAAUA,CAACyyC,EAAoBh0C,KAGnC,GAFAA,EAAE8U,kBAEE7T,EAAMskC,aAAgB,OAE1B,MAAM0O,EAAchzC,EAAMM,SAAW,GACrC0yC,EAAW11C,KAAK,CACdsB,KAAM,SACNkV,OAAQ,gBACRy2B,UAAW,CACTx/B,IAAK/K,EAAM+K,IACX7N,IAAK,QACLgM,MAAOlJ,EAAMizC,SAAWF,KAI5B5I,GAAc6I,EAAYhzC,EAAM,EAG5BkzC,EAAQ,GACd,IAAK,IAAIp1C,EAAI,EAAGA,EAAIkC,EAAMizC,SAAUn1C,GAAK,EAAG,CAC1C,MAAMa,EAAY4B,EAAW,sBAAuB,CAAC,6BAA+BzC,GAAKkC,EAAMizC,SAAWjzC,EAAMkJ,QAChHgqC,EAAM51C,KAAKoB,EAAAA,cAAA,QAAMC,UAAWA,EAAWzB,IAAKY,EAAGwC,QAAUvB,GAAMuB,EAAQxC,EAAGiB,IAAI,UAChF,CAEA,OACEL,EAAAA,cAAA,OACEc,GAAIQ,EAAM+K,IACV,kBACA,WAAU/K,EAAM+K,IAChBpM,UAAW4B,EAAW,iBAAkBP,EAAM+K,IAAK,CAACy/B,SAAUxqC,EAAMskC,eACpErlC,OAAOilC,EAAAA,EAAAA,IAAwBlkC,GAC/B0iC,iBAAiB,GAEhBwQ,EAGP,CAEA,SAAex0C,EAAAA,KAAWo0C,IC9B1B,SAASK,GAAanzC,GACpB,MACE6nB,EAGE7nB,EAHF6nB,eAAcurB,EAGZpzC,EAFF8Q,QAAAA,OAAO,IAAAsiC,EAAG,EAACA,EAAAC,EAETrzC,EADFszC,WAAAA,OAAU,IAAAD,EAAG,EAACA,EAGhB,OACE30C,EAAAA,cAAA,MACEc,GAAIQ,EAAM+K,IACV,kBACA,WAAU/K,EAAM+K,IAChBpM,UAAW4B,EAAW,iBAAkBP,EAAM+K,KAC9C+F,QAASA,EACT1R,QAASk0C,GAET50C,EAAAA,cAAC2yC,GAAat0C,OAAAia,OAAA,GACRhX,EAAK,CACT+U,QAAS/U,EAAM+U,QACf8V,WAAW,UACXkX,uBAAqB,EACrB+H,QAAM,EACNwH,mBAAoBzpB,EAAemJ,cAEnClgB,EAAU,GAAKwiC,EAAa,IAAMzrB,EAAemJ,WACjDtyB,EAAAA,cAAA,OACExB,IAAI,8BACJyB,UAAU,oDACV2B,QAASA,KACP,MAAMizC,EAAW,CAAE3oB,MAAO5qB,EAAMwzC,SAAU1oB,IAAK9qB,EAAMwzC,SAAW1iC,EAAU,GACpE2iC,EAAc,CAAE7oB,MAAO5qB,EAAM0zC,YAAa5oB,IAAK9qB,EAAM0zC,YAAcJ,EAAa,GAEtFzrB,EAAe+K,2BACf/K,EAAe6D,WAAUioB,EAAAA,EAAAA,IAAqB3zC,EAAM4zC,eAAgBL,EAAUE,GAAa,GAE9F/0C,EAAAA,cAAA,KAAGC,UAAU,oBAEdqB,EAAM6zC,aAAehsB,EAAemJ,WACpCtyB,EAAAA,cAAA,OACExB,IAAI,gCACJyB,UAAU,sDACV2B,QAASA,KACP,MAAMizC,EAAW,CAAE3oB,MAAO5qB,EAAMwzC,SAAU1oB,IAAK9qB,EAAMwzC,UAC/CC,EAAc,CAAE7oB,MAAO5qB,EAAM0zC,YAAc,EAAG5oB,IAAK9qB,EAAM0zC,aAE/D7rB,EAAe+K,2BACf/K,EAAe6D,WAAUooB,EAAAA,EAAAA,IAAmB9zC,EAAM4zC,eAAgBL,EAAUE,GAAa,GAE5F/0C,EAAAA,cAAA,KAAGC,UAAU,kBAEdqB,EAAM+zC,UAAYlsB,EAAemJ,WACjCtyB,EAAAA,cAAA,OACExB,IAAI,mCACJyB,UAAU,yDACV2B,QAASA,KACP,MAAMizC,EAAW,CAAE3oB,MAAO5qB,EAAMwzC,SAAW,EAAG1oB,IAAK9qB,EAAMwzC,UACnDC,EAAc,CAAE7oB,MAAO5qB,EAAM0zC,YAAa5oB,IAAK9qB,EAAM0zC,aAE3D7rB,EAAe+K,2BACf/K,EAAe6D,WAAUooB,EAAAA,EAAAA,IAAmB9zC,EAAM4zC,eAAgBL,EAAUE,GAAa,GAE5F/0C,EAAAA,cAAA,KAAGC,UAAU,iBAItB,CAEAw0C,GAAa5vB,aAAe,CAC1BzS,QAAS,EACTwiC,WAAY,GAGd,SAAe50C,EAAAA,KAAWy0C,ICzE1B,SAASa,GAAYh0C,GACnB,MACE6nB,EACE7nB,EADF6nB,eAGIosB,EAAQj0C,EAAMi0C,MAAM90C,KAAI,CAAC+0C,EAAM50C,IAEjCZ,EAAAA,cAACy0C,GAAYp2C,OAAAia,OAAA,CACX9Z,IAAKg3C,EAAKnpC,KACNmpC,EAAI,CACR3b,gBAAiBv4B,EAAMu4B,gBACvBoB,eAAgB35B,EAAM25B,eACtB9R,eAAgBA,EAChBD,YAAa5nB,EAAM4nB,YACnBgS,eAAgB55B,EAAM45B,eACtBga,eAAgB5zC,EAAM4zC,eACtBpa,YAAax5B,EAAMw5B,YACnB+D,aAAcv9B,EAAMu9B,aACpBwW,SAAU/zC,EAAM+zC,SAChBF,YAAuB,IAAVv0C,EACbwiC,wBAAyB9hC,EAAM8hC,6BA4BrC,OAvBIja,EAAemJ,WACjBijB,EAAMjM,QACJtpC,EAAAA,cAAA,MAAIC,UAAU,0BAA0BzB,IAAI,2BAC1CwB,EAAAA,cAAA,OACExB,IAAI,+BACJyB,UAAU,qDACV2B,QAASA,KACPunB,EAAe+K,2BACf/K,EAAe6D,WAAUyoB,EAAAA,EAAAA,IAAqBn0C,EAAM4zC,eAAgB5zC,EAAMV,MAAQ,GAAG,GAExFZ,EAAAA,cAAA,KAAGC,UAAU,gBACdD,EAAAA,cAAA,OACExB,IAAI,4BACJyB,UAAU,kDACV2B,QAASA,KACPunB,EAAe+K,2BACf/K,EAAe6D,WAAU0oB,EAAAA,EAAAA,IAAwBp0C,EAAM4zC,eAAgB5zC,EAAMV,OAAO,GAEvFZ,EAAAA,cAAA,KAAGC,UAAU,mBAMlBD,EAAAA,cAAA,MACEc,GAAIQ,EAAM+K,IACV,kBACA,WAAU/K,EAAM+K,IAChBpM,UAAW4B,EAAW,gBAAiBP,EAAM+K,KAC7C9L,OAAOilC,EAAAA,EAAAA,IAAwBlkC,IAE9Bi0C,EAGP,CAEA,SAAev1C,EAAAA,KAAWs1C,ICnE1B,SAASK,GAASr0C,GAChB,MACE6nB,EACE7nB,EADF6nB,eAGI1iB,EAAOnF,EAAMmF,KAAKhG,KAAI,CAACuJ,EAAKpJ,IAE9BZ,EAAAA,cAACs1C,GAAWj3C,OAAAia,OAAA,CACV9Z,IAAKwL,EAAIqC,KACLrC,EAAG,CACP6vB,gBAAiBv4B,EAAMu4B,gBACvBoB,eAAgB35B,EAAM25B,eACtB9R,eAAgBA,EAChBD,YAAa5nB,EAAM4nB,YACnBgS,eAAgB55B,EAAM45B,eACtBga,eAAgB5zC,EAAM+K,IACtBgpC,SAAoB,IAAVz0C,EACVwiC,wBAAyB9hC,EAAM8hC,wBAC/BtI,YAAax5B,EAAMw5B,YACnB+D,aAAcv9B,EAAMu9B,kBAK1B,GAAI1V,EAAemJ,UAAW,CAC5B,MAAMsjB,EAAY,CAAC,GAAGllC,OAAOpP,EAAMu0C,sBAAsBp1C,KAAKG,GAAUA,EAAQ,KAAIH,KAAKq1C,IACvF,MAAMC,EACJ/1C,EAAAA,cAAA,OACExB,IAAI,kCACJyB,UAAU,wDACV2B,QAASA,KACPunB,EAAe+K,2BACf/K,EAAe6D,WAAUgpB,EAAAA,EAAAA,IAAwB10C,EAAM+K,IAAKypC,GAAiB,GAEhF91C,EAAAA,cAAA,KAAGC,UAAU,gBAGhB,OAAwB,IAApB61C,EAEA91C,EAAAA,cAAA,MAAIxB,IAAKs3C,EAAiB71C,UAAU,sDACjC81C,EACD/1C,EAAAA,cAAA,OACExB,IAAI,+BACJyB,UAAU,qDACV2B,QAASA,KACPunB,EAAe+K,2BACf/K,EAAe6D,WAAUyoB,EAAAA,EAAAA,IAAqBn0C,EAAM+K,IAAK,GAAG,GAE/DrM,EAAAA,cAAA,KAAGC,UAAU,iBAKhBD,EAAAA,cAAA,MAAIxB,IAAKs3C,EAAiB71C,UAAU,8BACjC81C,EACD/1C,EAAAA,cAAA,OACExB,IAAI,+BACJyB,UAAU,qDACV2B,QAASA,KACPunB,EAAe+K,2BACf/K,EAAe6D,WAAUipB,EAAAA,EAAAA,IAA2B30C,EAAM+K,IAAKypC,EAAkB,GAAG,GAEvF91C,EAAAA,cAAA,KAAGC,UAAU,iBAGpB,IAGFwG,EAAK6iC,QAAQtpC,EAAAA,cAAA,MAAIxB,IAAI,YAClBo3C,GAEL,CAEA,OACE51C,EAAAA,cAAA,OACEc,GAAIQ,EAAM+K,IACV,kBACA,WAAU/K,EAAM+K,IAChBpM,UAAW4B,EAAWP,EAAM8pC,OAAS,mBAAqB,YAAa9pC,EAAM+K,KAC7E9L,OAAOilC,EAAAA,EAAAA,IAAwBlkC,GAC/B0iC,iBAAiB,GAEjBhkC,EAAAA,cAAA,aACEA,EAAAA,cAAA,aACGyG,IAKX,CAEA,SAAezG,EAAAA,KAAW21C,I,2BC/FX,SAASO,GAAa50C,GACnC,MACEmlB,EAEEnlB,EAFFmlB,SACA0vB,EACE70C,EADF60C,aAGF,OACEn2C,EAAAA,cAAA,OAAKC,UAAU,iBAAiBk2C,aAAcA,GAC5Cn2C,EAAAA,cAAA,QAAMC,UAAU,uCACbwmB,GAIT,CCjBe,SAAS2vB,GAAS90C,GAC/B,MACEnB,EAIEmB,EAJFnB,QACAqB,EAGEF,EAHFE,SAEApB,EACEkB,EADFlB,SAGF,OACEJ,EAAAA,cAAA,SAAOC,UAAU,aACfD,EAAAA,cAAA,SACEE,KAAK,WACLC,QAASA,EACTqB,SAAUA,EAEVpB,SAAUA,IAEZJ,EAAAA,cAAA,QAAMC,UAAU,WAGtB,C,sBCZMo2C,GAAiB,C,oWAeR,SAASC,GAAch1C,GACpC,MACEkJ,EAIElJ,EAJFkJ,MACAhJ,EAGEF,EAHFE,SAEApB,EACEkB,EADFlB,SAGF,OACEJ,EAAAA,cAAA,WACGi2B,GAAAA,EAAQ,EAAG,GAAGsgB,UAAU91C,KAAKyT,GAC5BlU,EAAAA,cAAA,UACExB,IAAK0V,EACLjU,UAAW4B,EAAW,yBAA0B,CAAE20C,OAAQhsC,IAAU0J,IACpE1S,SAAUA,EACVI,QAASA,KAAQxB,EAAS8T,EAAI,GAE9BlU,EAAAA,cAAA,OAAKuM,IAAK8pC,GAAeniC,EAAM,QAKzC,C,gBC/CA,UAAeuiC,E,QAAAA,M,k/BCiDA,MAAMC,WAAqB12C,EAAAA,cAKxCgC,WAAAA,CAAYV,GACVW,MAAMX,GAAO,KALfq1C,6CAAuC,EAAO,KAC9CC,kDAA4C,OAC5CC,kDAA4C,EAK1C10C,KAAKS,MAAQ,CACX4H,MAAOrI,KAAKb,MAAMkJ,MAClB8O,WAAOvZ,EACP+2C,mCAAmC,EACnCC,iCAAkC,EAClCC,kCAAmC,GAEvC,CAEAC,yBAAAA,CAA0BC,GACnBA,EAAS1sC,QAAUrI,KAAKb,MAAMkJ,OAAW0sC,EAAS1sC,QAAUrI,KAAKS,MAAM4H,OAC1ErI,KAAKO,SAAS,CAAC8H,MAAO0sC,EAAS1sC,OAEnC,CAEAnG,oBAAAA,GACMlC,KAAKS,MAAM0W,QACbR,aAAa3W,KAAKS,MAAM0W,OACxBnX,KAAKg1C,qBAET,CAEAnpB,YAAAA,CAAa3tB,GACX8B,KAAKO,SAAS,CAAC8H,MAAOnK,EAAEC,OAAOkK,QAE3BrI,KAAKS,MAAM0W,OAASR,aAAa3W,KAAKS,MAAM0W,OAChDnX,KAAKO,SAAS,CAAC4W,MAAOP,WAAW5W,KAAKg1C,mBAAmBpiC,KAAK5S,MAAO,MACvE,CAEAi1C,SAAAA,GACEj1C,KAAKb,MAAM4nB,YAAYyD,SAAS,CAC9B,CAACxqB,KAAKb,MAAM+K,KAAM,CAAC7B,MAAOrI,KAAKS,MAAM4H,QAEzC,CAEA2sC,kBAAAA,GACEh1C,KAAKi1C,YACLj1C,KAAKO,SAAS,CAAC4W,WAAOvZ,GACxB,CAEAs3C,4BAAAA,GACE,MAAA7yC,EAKIrC,KAAKb,MAJPg2C,EAAuB9yC,EAAvB8yC,wBACAzd,EAAer1B,EAAfq1B,gBACAxtB,EAAG7H,EAAH6H,IACA6c,EAAW1kB,EAAX0kB,YAGF/mB,KAAKO,SAAS,CACZo0C,mCAAmC,EACnCS,2CAA6C,IAAIv2C,KACjDw2C,qCAAqC,IAGvCr1C,KAAKw0C,wCC/GM,UAAqD,mBAACc,EAAkB,2BAAEC,EAA0B,YAAEC,EAAW,eAAEC,EAAc,WAAEC,IAChJ,OAAOC,GAASC,cAAcC,OAAO,CAAEC,QAAS,mCAAoCC,qBAAsBT,GAAsB,CAC9HU,QAAAA,CAASt+C,GACP69C,EAA2B79C,EAC7B,EAEAu+C,SAAAA,GACET,GACF,EAEAU,YAAAA,GACET,GACF,EAEAU,QAAAA,GACET,GACF,EAEAU,WAAAA,CAAYC,GACVr2C,KAAKs2C,QAAQ,cAAeD,EAC9B,GAEJ,CDyFmDE,CAA4C,CACzFjB,mBAAqB,GAAEvuB,EAAYpoB,OAAOuL,IAC1CqrC,2BAA4Bv1C,KAAKu1C,2BAA2B3iC,KAAK5S,MACjEw1C,YAAaA,KACX/iC,QAAQwK,IAAI,eAEPjd,KAAKy0C,+CACRz0C,KAAKy0C,8CAA+C,EAEpDz0C,KAAKw0C,wCAAwC4B,YAAY,CACvDI,wBAAyBrB,EACzBsB,uBAAwBz2C,KAAKS,MAAM4H,QAGrCrI,KAAK00C,6CAA+C99B,YAAW,KAC7DmQ,EAAYyD,SAAS,CACnB,CAACtgB,GAAM,CACLwsC,mCAAmC,EACnCC,gCAAiC,uBAEnC,GApFqB,KAsF3B,EAEFlB,eAAgBA,OAChBC,WAAY11C,KAAK42C,yBAAyBhkC,KAAK5S,QAGjDrI,GAAAA,EAAKH,MAAM,0CAA2C,CAACq/C,YAAanf,EAAgB/4B,IACtF,CAEAm4C,sBAAAA,GACErkC,QAAQwK,IAAI,yBACd,CAEA25B,wBAAAA,GACEnkC,QAAQwK,IAAI,4BAEZ,MACE03B,EACE30C,KAAKS,MADPk0C,kCAGFoC,EAII/2C,KAAKb,MAHPw3C,EAA+BI,EAA/BJ,gCACAzsC,EAAG6sC,EAAH7sC,IACA6c,EAAWgwB,EAAXhwB,YAGE4tB,IAAsCgC,GACxC5vB,EAAYyD,SAAS,CACnB,CAACtgB,GAAM,CACLwsC,mCAAmC,EACnCC,gCAAiC,wBAIzC,CAEApB,0BAAAA,CAA2ByB,GACzB,MAAAC,EAKIj3C,KAAKb,MAJP+K,EAAG+sC,EAAH/sC,IACA6c,EAAWkwB,EAAXlwB,YACAouB,EAAuB8B,EAAvB9B,wBAKAC,GAJqB6B,EAArBC,sBAKEl3C,KAAKS,MADP20C,4CAGEp1C,KAAK00C,+CACP/9B,aAAa3W,KAAK00C,8CAClB10C,KAAK00C,kDAA+C92C,GAGlDo5C,EAASxkC,MACXuU,EAAYyD,SAAS,CACnB,CAACtgB,GAAM,CACLwsC,mCAAmC,EACnCC,gCAAiCK,EAASxkC,MAAMW,YAOtDnT,KAAKO,SAAS,CAACo0C,mCAAmC,IAClD5tB,EAAYyD,SAAS,CACnB,CAACtgB,GAAM,CACLwsC,mCAAmC,EACnCS,oCAAoC,EACpCR,gCAAiC,KACjCS,gCAAiC,IAAIv4C,MAAQirC,UAAYsL,EAA2CtL,UACpGuN,2BAA4BL,EAASM,YACrCC,0BAA2BP,EAASQ,aACpCC,mCAAoCT,EAASU,aAC7CvC,wBAAyBA,KAG/B,CAEA/yC,MAAAA,GACE,MAAAu1C,EAoBI33C,KAAKb,MAnBPy4C,EAAQD,EAARC,SACAC,EAAcF,EAAdE,eACA70B,EAAO20B,EAAP30B,QACA0U,EAAeigB,EAAfjgB,gBACA1Q,EAAc2wB,EAAd3wB,eACAokB,EAAMuM,EAANvM,OACA3H,EAAYkU,EAAZlU,aACAv5B,EAAGytC,EAAHztC,IACA6c,EAAW4wB,EAAX5wB,YACA+wB,EAAsBH,EAAtBG,uBACAC,EAA+BJ,EAA/BI,gCAA+BC,EAAAL,EAC/BjB,kCAAAA,OAAiC,IAAAsB,GAAKA,EACtCb,EAAkCQ,EAAlCR,mCACAR,EAA+BgB,EAA/BhB,gCACAU,EAA0BM,EAA1BN,2BACAY,EAA4BN,EAA5BM,6BACAC,EAA6BP,EAA7BO,8BACAC,EAAqCR,EAArCQ,sCACAjB,EAAqBS,EAArBT,sBAGF12C,EAKIR,KAAKS,MAJPk0C,EAAiCn0C,EAAjCm0C,kCACAU,EAAmC70C,EAAnC60C,oCACAT,EAAgCp0C,EAAhCo0C,iCACAC,EAAiCr0C,EAAjCq0C,kCAGIlL,EAAWlG,GAAgBkR,GAAqCwC,EAEtE,IAAIiB,EACAp1B,GAAS7d,SAAS,qBACpBizC,EAAgBv6C,EAAAA,cAAA,KAAGC,UAAU,mBAAkB,4FACvCstC,IACRgN,EAAgBv6C,EAAAA,cAAA,KAAGC,UAAU,mBAAkB,yCAGjD,MAAMu6C,EACJx6C,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,YACEkyC,KAAM,GACNzrC,KAAMszC,EACNU,UAAWT,EACXx4C,SAAUsqC,EACVthC,MAAOrI,KAAKS,MAAM4H,MAClBpK,SAAU+B,KAAK6rB,aAAajZ,KAAK5S,SAEjC2pC,GAAY9rC,EAAAA,cAAA,KAAGC,UAAU,gBAAe,kBAAgBkC,KAAKS,MAAM4H,OAAS,IAAInL,OAAO,IAAE26C,IAI/F,IAOIU,EACAC,EARAC,EACF56C,EAAAA,cAAA,WACGu6C,EACAC,GAML,GAAIN,EACF,GAAMpO,GAAYgL,GAAqCwC,EAqDhD,GAAIT,IAAsC/B,GAAqCwC,GAAqC,CACzH,IAAIuB,EAAYC,EAuDZC,EAtDAzB,IACFwB,EACE96C,EAAAA,cAAA,OAAKO,MAAO,CAACgS,UAAW,SACtBvS,EAAAA,cAAC2yC,GAAat0C,OAAAia,OAAA,GAAAzd,GAAAA,GAAA,GACJsH,KAAKb,OAAK,IAAEskC,cAAc,IAAK,CACvCvvB,QAAS,CAAC4jC,GACV9tB,WAAW,UACXkX,uBAAqB,EACrB+H,QAAM,EACNwH,mBAAoBzpB,EAAemJ,cAKzCuoB,EACE76C,EAAAA,cAAA,WACEA,EAAAA,cAAA,WACAA,EAAAA,cAAA,OAAKO,MAAO,CAACoR,aAAc,SACzB3R,EAAAA,cAAA,SAAG,sDAAmDA,EAAAA,cAAA,QAAMO,MAAO,CAAC2M,MAAO,QAAQ,MACnFlN,EAAAA,cAACs2C,GAAa,CACZ9rC,MAAO8vC,EAAwCF,EAA+BrD,EAC9Ev1C,SAAU84C,EACVl6C,SAAW46C,IACT74C,KAAKO,SAAS,CAACq0C,iCAAkCiE,GAAW,KAIlEh7C,EAAAA,cAAA,OAAKO,MAAO,CAACoR,aAAc,SACzB3R,EAAAA,cAAA,SAAG,gDACHA,EAAAA,cAAA,YACEwK,MAAO8vC,EAAwCD,EAAgCrD,EAC/Ex1C,SAAU84C,EACVl6C,SAAWC,IAAO8B,KAAKO,SAAS,CAACs0C,kCAAmC32C,EAAEC,OAAOkK,OAAO,KAGxFxK,EAAAA,cAAA,OAAKO,MAAO,CAACoR,aAAc,SACzB3R,EAAAA,cAACqB,GAAAA,EAAQ,CACPO,QAASA,KACP,MAAMq5C,GAAeC,EAAAA,GAAAA,IAAgC,CAAE,CAAC7uC,GAAM,CAC5D+tC,6BAA8BrD,EAC9BsD,8BAA+BrD,EAC/BsD,uCAAuC,KAEzC7O,GAAc4N,EAAsB3oC,OAAOuqC,GAAe94C,KAAKb,MAAM,EAEvEE,SAAUu1C,EAAmC,GAAKuD,GACnD,aASLxB,EACFiC,EACE/6C,EAAAA,cAAC8iB,EAAAA,EAAQ,CAACC,MAAI,GACZ/iB,EAAAA,cAAA,OAAKC,UAAU,kBAAkBM,MAAO,CAAC,GACvCP,EAAAA,cAAA,SAAG,2JAEHA,EAAAA,cAAA,OAAKO,MAAO,CAAC8J,QAAS,OAAQ8wC,IAAK,OAAQzpC,eAAgB,SAAUpH,MAAO,SAC1EtK,EAAAA,cAACqB,GAAAA,EAAQ,CACPO,QAASA,KACPsnB,EAAYyD,SAAS,CACnB,CAACtgB,GAAM,CACLwsC,mCAAmC,KAGvC12C,KAAKO,SAAS,CAACo0C,mCAAmC,GAAO,GAE5D,gBAODU,GAAuCV,KAC/CiE,EACE/6C,EAAAA,cAAC8iB,EAAAA,EAAQ,CAACC,MAAI,GACZ/iB,EAAAA,cAAA,OAAKC,UAAU,kBAAkBM,MAAO,CAAC,GACvCP,EAAAA,cAAA,SAAGA,EAAAA,cAAA,UAAI,seAEPA,EAAAA,cAAA,OAAKO,MAAO,CAAC8J,QAAS,OAAQ8wC,IAAK,OAAQzpC,eAAgB,SAAUpH,MAAO,SAExEktC,EACEx3C,EAAAA,cAACqB,GAAAA,EAAQ,CACPO,QAASA,KACPO,KAAKO,SAAS,CAAC80C,qCAAqC,IACpDx9C,GAAAA,EAAUL,MAAM,kDAAmD,CAAEiO,KAAMiyB,EAAgBruB,MAAOsH,OAAQ,OAAQD,KAAM9Y,OAAO6J,SAASC,MAAO,GAElJ,QAID7D,EAAAA,cAACkW,GAAAA,EAAiB,UAShC0kC,EACE56C,EAAAA,cAAA,WACEA,EAAAA,cAAA,OAAKO,MAAO,CAAC8J,QAAS,OAAQ8wC,IAAK,SACjCn7C,EAAAA,cAAA,OAAKO,MAAO,CAAC66C,KAAM,YACjBp7C,EAAAA,cAAA,UAAI,0BACHu6C,GAEHv6C,EAAAA,cAAA,OAAKO,MAAO,CAAC66C,KAAM,YACjBp7C,EAAAA,cAAA,MAAIO,MAAO,CAACugB,cAAe,SAAS,2BAGxC9gB,EAAAA,cAAA,OAAKO,MAAO,CAAC8J,QAAS,OAAQ8wC,IAAK,SACjCn7C,EAAAA,cAAA,OAAKO,MAAO,CAAC66C,KAAM,YAChBZ,GAEHx6C,EAAAA,cAAA,OAAKO,MAAO,CAAC66C,KAAM,UAAWh6C,gBAAiB,QAAS4D,QAAS,OAAQ2M,aAAc,SACpFmlC,IAAsC0C,EAA6Bx5C,EAAAA,cAACkW,GAAAA,EAAiB,MAAK+f,GAAAA,EAAOujB,GAA4B35C,MAAM,OAAOY,KAAI,CAAC46C,EAAmBj8C,IAAMY,EAAAA,cAAA,KAAGxB,IAAKY,GAAIi8C,OAGxLP,EACD96C,EAAAA,cAAA,OAAKO,MAAO,CAAC8J,QAAS,OAAQ8wC,IAAK,OAAQ5oC,UAAW,SACpDvS,EAAAA,cAAA,OAAKO,MAAO,CAAC66C,KAAM,YAChBP,GAEH76C,EAAAA,cAAA,OAAKO,MAAO,CAAC66C,KAAM,cAGpBL,EAGP,MAAYlC,GAAqC/M,IAC/C8O,EACE56C,EAAAA,cAAA,WACGu6C,EACAC,EACDx6C,EAAAA,cAAA,OAAKO,MAAO,CAACgS,UAAW,SACtBvS,EAAAA,cAAC2yC,GAAat0C,OAAAia,OAAA,GAAAzd,GAAAA,GAAA,GACJsH,KAAKb,OAAK,IAAEskC,cAAc,IAAK,CACvCvvB,QAAS,CAAC4jC,GACV9tB,WAAW,UACXkX,uBAAqB,EACrB+H,QAAM,EACNwH,mBAAoBzpB,EAAemJ,qBAzM3CqoB,EACE36C,EAAAA,cAAA,OAAKO,MAAO,CAAC8J,QAAS,OAAQixC,WAAY,SAAU3pC,aAAc,SAChE3R,EAAAA,cAACo2C,GAAQ,CACPj2C,QAAS04C,EACTz4C,SAAUA,KAAO8oB,EAAYyD,SAAS,CAAE,CAACtgB,GAAM,CAACwsC,mCAAoCA,IAAqC,EACzHr3C,SAAUsqC,KAAcgN,IAE1B94C,EAAAA,cAAA,QAAMO,MAAO,CAAC6E,OAAQ,WAAW,yDAGjCpF,EAAAA,cAAA,WACEA,EAAAA,cAACk2C,GAAY,CACXzvB,SAC6D,YAA3DyC,GAAaqyB,qBAAqBC,gBAAgB/4C,KAClD,8FACA,qOAEF0zC,aAAcA,KAAOr8C,GAAAA,EAAKH,MAAM,6CAA8C,CAACq/C,YAAanf,EAAgB/4B,IAAI,MAMxH45C,EACE16C,EAAAA,cAAA,OAAKO,MAAO,CAACoR,aAAc,SACzB3R,EAAAA,cAACqB,GAAAA,EAAQ,CACPO,QAASA,KACHi3C,EACF12C,KAAKk1C,gCAEL5L,GAAc4N,EAAuBl3C,KAAKb,OAErCw3C,GACHh/C,GAAAA,EAAKH,MAAM,wCAAyC,CAACq/C,YAAanf,EAAgB/4B,KAEtF,EAEFU,SAAUy0B,EAAAA,EAAU9zB,KAAKS,MAAM4H,QAChC,WAMLowC,EACE56C,EAAAA,cAAA,WACGu6C,EACAC,EACAG,EACAD,GAgKT,OACE16C,EAAAA,cAAA,OACEc,GAAIuL,EACJ,kBACA,WAAUA,EACVpM,UAAW4B,EAAW,iBAAkBwK,EAAK,CAACy/B,SAAUA,IACxDvrC,OAAOilC,EAAAA,EAAAA,IAAwBrjC,KAAKb,OACpC0iC,iBAAiB,GAEhB4W,EAGP,EE1eF,SAASa,GAAsBn6C,GAC7B,MACE+K,EAKE/K,EALF+K,IACA8Y,EAIE7jB,EAJF6jB,QACAgE,EAGE7nB,EAHF6nB,eAGE7nB,EAFFo6C,cAEEp6C,EADFq6C,gBAGF,OAAKxyB,EAAemJ,UAGlBtyB,EAAAA,cAAA,OACEc,GAAIQ,EAAM+K,IACV,kBACA,WAAU/K,EAAM+K,IAChBpM,UAAW4B,EAAW,0BAA2BwK,EAAK8Y,GACtD6e,iBAAiB,GAEjBhkC,EAAAA,cAAA,YAAM,eAV8B,IAa1C,CAEA,SAAeA,EAAAA,KAAWy7C,I,6EChB1B,SAASG,GAASt6C,GAChB,MACE6nB,EACE7nB,EADF6nB,eAUF,IAAI3d,EAAQ,MACgB,kBAAhBlK,EAAMkK,OAAsBlK,EAAMkK,MAAMnM,OAAS,GAAM8pB,EAAemJ,aAChF9mB,EACExL,EAAAA,cAAA,kBACEA,EAAAA,cAACwkC,GAAa,CACZn4B,IAAK/K,EAAM+K,IACXgK,QAAS/U,EAAMkK,MACf2gB,WAAY,QACZhD,eAAgBA,EAChBvgB,YAAa,wBACby6B,uBAAqB,EACrBD,wBAAyB9hC,EAAM8hC,4BAMvC,IAAIyY,EAAc,KAClB,OAAQv6C,EAAMwR,QACZ,IAAK,QACH,IAAIiuB,EAAgB,KACpB,GAAIz/B,EAAMxG,IAAK,CACb,MAAM2nC,EAAoCnhC,EAAMu9B,aAAaiC,OAAO3lB,MAAMc,GAAYA,EAAEukB,kBAAoBl/B,EAAMxG,KAAOwG,EAAMxG,IAAIwM,SAAS2U,EAAEi1B,eAAiB,CAAC,EAC1JjQ,EAAW3/B,EAAMu9B,aAAaoC,SAASnjC,QAAQmN,GAAYA,EAAEO,OAASi3B,EAAWj3B,QACvF,GAAIy1B,EAAS5hC,OAAQ,CACnB,IAAIqjC,EAAU,KAEZA,EADEzB,EAAS5hC,OAAS,EACV4hC,EAAS1iC,QAAO,CAACokC,EAAQC,IAAUD,EAAOtC,oBAAsBuC,EAAKvC,oBAAuBsC,EAASC,IAErG3B,EAAS,GAErBF,EAAgB/gC,EAAAA,cAAA,SAAOxB,IAAI,KAAKsW,MAAM,UAAUqsB,KAAK,YAAYC,QAAQ,KAAK70B,IAAKm2B,EAAQlC,kBAC7F,CACAqb,EACE77C,EAAAA,cAAA,SAAOxB,IAAK8C,EAAMxG,IAAKumC,YAAY,YAAYR,QAAQ,OAAO5G,UAAQ,GACpEj6B,EAAAA,cAAA,UAAQuM,IAAKjL,EAAMxG,MAClBimC,EAGP,MAAO,GAAIz/B,EAAMuhC,KAAoB,aAAbvhC,EAAMuhC,IAAoB,CAChDwI,QAAQC,QAAQ,8CAChB,MAAMwQ,EAAe,GAAEx6C,EAAMuhC,IAAIhjC,MAAM,KAAK,SACxCyB,EAAMu4B,gBAAgBoH,SAAS35B,SAASw0C,KAC1C/a,EAAgB/gC,EAAAA,cAAA,SAAOxB,IAAI,KAAKsW,MAAM,UAAUqsB,KAAK,YAAYC,QAAQ,KAAK70B,IAAKjL,EAAM25B,eAAe8gB,gBAAgBD,MAE1HD,EACE77C,EAAAA,cAAA,OAAKC,UAAU,oBAAoBM,OAAOilC,EAAAA,EAAAA,IAAwBlkC,IAChEtB,EAAAA,cAAA,SAAOqhC,YAAY,YAAYR,QAAQ,OAAO5G,UAAQ,GACpDj6B,EAAAA,cAAA,UAAQuM,IAAKjL,EAAM25B,eAAe+gB,cAAc16C,EAAMuhC,OACrD9B,GAIT,MACE8a,EACE77C,EAAAA,cAAA,OAAKC,UAAU,oBAAoBM,OAAOilC,EAAAA,EAAAA,IAAwBlkC,IAChEtB,EAAAA,cAAA,OAAKuM,IAAK0vC,MAKhB,MACF,IAAK,UACHJ,EAAc77C,EAAAA,cAAA,UAAQsK,MAAM,MAAM+H,OAAO,MAAM9F,IAAM,iCAAgCjL,EAAMuhC,MAAOqZ,YAAY,IAAIC,iBAAe,IACjI,MACF,IAAK,QACHN,EAAc77C,EAAAA,cAAA,UAAQuM,IAAM,kCAAiCjL,EAAMuhC,MAAOv4B,MAAM,MAAM+H,OAAO,MAAM6pC,YAAY,IAAIE,MAAM,2CAA2CD,iBAAe,IACnL,MACF,QAEE,OADA9Q,QAAQC,QAAS,8CAA6ChqC,EAAMwR,UAC7D,KAGX,OACE9S,EAAAA,cAAA,OACEc,GAAIQ,EAAM+K,IACV,kBACA,WAAU/K,EAAM+K,IAChBpM,UAAW4B,EAAW,YAAc,aAAYP,EAAMwR,SAAUxR,EAAM+K,IAAK,CAAC,mBAAoB/K,EAAM6pC,oBAAsB7pC,EAAM8pC,SAClIpH,iBAAiB,GAEjBhkC,EAAAA,cAAA,OAAKC,UAAU,qBACZ47C,EACA1yB,EAAemJ,WAAahxB,EAAM4nB,YAAY/c,YAAYsxB,iBAAmBz9B,EAAAA,cAACioB,EAAAA,EAAS,CACpFzpB,IAAI,gBACJyB,UAAU,0BACVwC,KAAMzC,EAAAA,cAAA,KAAGC,UAAU,gBACnB0V,aAAW,EACXE,OAAK,EACLjU,QAhGUvB,IAClBA,EAAE8U,kBACEgU,EAAemJ,WACjBnJ,EAAeY,eAAemY,EAAAA,GAAc,CAAEvE,UAAW,QAAStxB,IAAK/K,EAAM+K,KAC/E,KA+FGb,EACDxL,EAAAA,cAACmqC,GAAgB7oC,GACjBtB,EAAAA,cAACwqC,GAAYlpC,GAGnB,CAEA,SAAetB,EAAAA,KAAW47C,I,k/BCxEX,SAASjJ,GAAcrxC,GACpC,MACE+U,EAqBE/U,EArBF+U,QACAuvB,EAoBEtkC,EApBFskC,aACA/L,EAmBEv4B,EAnBFu4B,gBACAoB,EAkBE35B,EAlBF25B,eACA9R,EAiBE7nB,EAjBF6nB,eACAD,EAgBE5nB,EAhBF4nB,YACAgS,EAeE55B,EAfF45B,eACA2D,EAcEv9B,EAdFu9B,aACA/D,EAaEx5B,EAbFw5B,YACAxR,EAYEhoB,EAZFgoB,YACA4e,EAWE5mC,EAXF4mC,eACAkD,EAUE9pC,EAVF8pC,OACAhG,EASE9jC,EATF8jC,YACAnS,EAQE3xB,EARF2xB,MACA4S,EAOEvkC,EAPFukC,uBACA+M,EAMEtxC,EANFsxC,mBACAzmB,EAKE7qB,EALF6qB,WACAiX,EAIE9hC,EAJF8hC,wBACAC,EAGE/hC,EAHF+hC,sBACAgZ,EAEE/6C,EAFF+6C,4BACAC,EACEh7C,EADFg7C,gBAGIC,EAAa,CACjBC,MAAOtR,GACPljB,OAAQwkB,GACRiQ,gBAAiBtP,GACjBuP,YAAanO,GACboO,SAAUvM,GACVwM,eAAgBvM,GAChBgB,MAAOb,GACPqM,aAAcpL,GACdqL,kBAAmBzK,GACnB0K,uBAAwBrK,GACxBsK,eAAgB1J,GAChB2J,aAAc7J,GACd8J,UAAWlJ,GACXmJ,UAAW/I,GACXgJ,YAAahK,GACbiK,QAASC,GACTl3B,MAAOuvB,GACP4H,UAAW7G,GACX8G,mBAAoB/B,GACpBgC,MAAO7B,IAGT,IAAI8B,EAEJ,SAASC,EAAoB9jD,GAC3B,MAAM+jD,EAAwB/jD,EAAKshB,MAAKjU,GACtC,CAAC,iBAAkB,cAAe,YAAa,YAAa,mBAAmBI,SAASJ,EAAKhH,QAG/F,IAAK09C,EAAuB,OAAO,EAEnC,OAAQA,EAAsB19C,MAC5B,IAAK,iBACL,IAAK,cACH,OAAOxB,MAAMC,QAAQi/C,EAAsBvnC,UACpCunC,EAAsBvnC,QAAQjP,MAAK0B,IAA2B,IAAjBA,EAAO0B,QAE7D,IAAK,YACL,IAAK,kBACH,MAAuC,KAAhCozC,EAAsBpzC,MAE/B,IAAK,YACH,OAAOozC,EAAsBpzC,MAAQ,EAEvC,QACE,OAAO,EAEb,CAEA,IAAIqzC,EAAexnC,EAAQvY,QAAQ8tB,GAASA,IAAMnrB,KAAI,CAACmrB,EAAMhrB,KAC3D,MAAMk9C,EAAkBlyB,EAAKuoB,eAAe,aAAkC,IAAlBvoB,EAAKkgB,SAAoC,IAAlBlgB,EAAKkgB,SAAiBlG,EAEnGmY,EAAqB1B,GAA+BjZ,EACxD,CAACA,yBAAyB,GAAQ,CAAC,EAErC,IAAI4a,EAUAC,EATc,YAAdryB,EAAK1rB,OACP89C,EAAuB,CACrB/qB,MAAOA,EAAQ,EACf4S,uBAAwBA,EACxBT,YAAaxZ,EAAKwZ,aAAeA,EACjCkX,gBAAiBA,IAKjB1J,IACFqL,EACEj+C,EAAAA,cAACgoC,GAAU,CACTxpC,IAAM,GAAEotB,EAAKvf,QAAQzL,EAAQ,IAC7B+yB,UAAW/H,EAAK+H,UAChB4F,WAAY3N,EAAKvf,IACjBwtB,gBAAiBA,EACjB1Q,eAAgBA,EAChBD,YAAaA,EACbI,YAAaA,EACb4e,eAAgBA,EAChBD,WAAY3mC,EACZiyB,iBAAkBpH,EAClBgc,iBACG,CAAC,YAAa,cAAe,gBAAgB7gC,SAASskB,EAAK1rB,QAC3D,CAAC,YAAa,cAAe,gBAAgBoH,SAASo2C,MAM/DA,EAAe9xB,EAAK1rB,KAEpB,MAAMg+C,EAAU3B,EAAW3wB,EAAK1rB,MAChC,OAAIg+C,EACM,CACND,EACAj+C,EAAAA,cAACk+C,EAAO7/C,OAAAia,OAAA,GACFsT,EAAI,CACRptB,IAAKotB,EAAKvf,IACVwtB,gBAAiBA,EACjBoB,eAAgBA,EAChB9R,eAAgBA,EAChBD,YAAaA,EACbgS,eAAgBA,EAChB2D,aAAcA,EACd/D,YAAaA,EACbsQ,OAAQA,EACRxF,aAA0B,UAAXha,EAAK1rB,MAA8B,UAAZ0rB,EAAKpgB,OAAmBmyC,EAAoBtnC,GAAWynC,EAC7F1Y,YAAaA,GACT2Y,EACAC,KAKD,EACT,IAsBF,GAnBIpL,GACFiL,EAAaj/C,KAAK,CAChBoB,EAAAA,cAACgoC,GAAU,CACTxpC,IAAK,MACLq7B,gBAAiBA,EACjB1Q,eAAgBA,EAChBD,YAAaA,EACbI,YAAaA,EACb4e,eAAgBA,EAChBD,WAAY3mC,EACZiyB,iBAAkBpH,EAClBgc,iBACG,CAAC,YAAa,cAAe,gBAAgB7gC,SAASo2C,OAO3Dv0B,EAAemJ,UAAW,CAC5B,IAAIyR,EAAe,CAAC,EAkBpB,OAjBIV,IACFU,EAAe,CACb,kCAAkC,EAClCxjC,MAAO,CACL,WAAc,OACd,iBAAoB,SAInB6iC,IACHW,EAAYlpC,GAAAA,GAAA,GACPkpC,GAAY,IACfC,iBAAiB,MAMrBhkC,EAAAA,cAAA,MAAA3B,OAAAia,OAAA,CAAKrY,UAAU,eACb,0BACI8jC,EAAY,CAChBQ,gCAA8B,EAC9BJ,YAAa,MACbC,eAAgB,MAChBC,YAAY,EACZ8Z,OAAS99C,IAAOA,EAAE8U,kBAAmB9U,EAAEqT,gBAAgB,KAEtDm8B,EAAAA,EAAAA,UAAQkC,EAAAA,EAAAA,SAAQ8L,IAGvB,CACE,OACE79C,EAAAA,cAAA,OAAKC,UAAU,iBACZ4vC,EAAAA,EAAAA,UAAQkC,EAAAA,EAAAA,SAAQ8L,IAIzB,C,4pCC9OA,SAASO,GAAY98C,GACnB,MACEizC,EAGEjzC,EAHFizC,SACA3yC,EAEEN,EAFFM,QACA4I,EACElJ,EADFkJ,MAGIgqC,EAAQ,GACd,IAAK,IAAIp1C,EAAI,EAAGA,EAAIm1C,EAAUn1C,GAAK,EAAG,CACpC,MAAMa,EAAY4B,EAAW,sBAAuB,CAAC,6BAA+BzC,GAAKm1C,EAAW/pC,IACpGgqC,EAAM51C,KAAKoB,EAAAA,cAAA,QAAMC,UAAWA,EAAWzB,IAAKY,EAAGwC,QAASA,IAAMA,EAAQ2yC,EAAWn1C,IAAI,UACvF,CAEA,OACEY,EAAAA,cAAA,OAAKC,UAAW,kBACbu0C,EAGP,CASe,SAAS6J,GAAiB/8C,GACvC,MACE45B,EAIE55B,EAJF45B,eACAhS,EAGE5nB,EAHF4nB,YACAtnB,EAEEN,EAFFM,QACA08C,EACEh9C,EADFg9C,eAG6C1wB,EAAAvxB,GAAjB2D,EAAAA,SAAe,GAAE,GAAxCu+C,EAAO3wB,EAAA,GAAE4wB,EAAU5wB,EAAA,GACqB+G,EAAAt4B,GAAjB2D,EAAAA,SAAe,GAAE,GAAxCy+C,EAAO9pB,EAAA,GAAE+pB,EAAU/pB,EAAA,GACsBE,EAAAx4B,GAAlB2D,EAAAA,SAAe,IAAG,GAAzC2+C,EAAO9pB,EAAA,GAAE+pB,EAAU/pB,EAAA,GACmCG,EAAA34B,GAArB2D,EAAAA,UAAe,GAAM,GAAtD6+C,EAAY7pB,EAAA,GAAE8pB,EAAe9pB,EAAA,GAEpC,IAAI+pB,EAsHJ,OApHEA,EADEF,EAEA7+C,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAACg/C,KAAQ,CACP10C,MAAOvQ,OAAOgU,WACdsE,OAAQtY,OAAOojB,YACf5c,MAAO,CAAE6P,SAAU,QAASiN,IAAK,EAAG4hC,KAAM,KAE5Cj/C,EAAAA,cAAA,OAAKO,MAAO,CACV6P,SAAU,QACViN,IAAK,MACL4hC,KAAM,MACNC,UAAW,wBACX99C,gBAAiB,QACjB4D,QAAS,OACTye,UAAW,+BACX07B,OAAQ,MAERn/C,EAAAA,cAAA,OAAKO,MAAO,CAAC6+C,WAAY,mBAAmBt6C,SAAU,OAAOC,WAAY,QAAQ,mBAGjF/E,EAAAA,cAAA,OAAKO,MAAO,CAAC6+C,WAAY,mBAAmBt6C,SAAU,OAAOC,WAAY,QAAQ,8BAGjF/E,EAAAA,cAAA,OAAKO,MAAO,CAAC8J,QAAS,OAAQqH,eAAgB,WAC5C1R,EAAAA,cAAA,OAAKuM,IAAK8yC,GAAiB7yC,IAAI,wBAOrCxM,EAAAA,cAAA,OAAKC,UAAU,kBACbD,EAAAA,cAAA,OAAKC,UAAU,oBACbD,EAAAA,cAAA,KAAGC,UAAU,0BAAyB,8BAEtCD,EAAAA,cAAA,KAAGC,UAAU,6BAA4B,+CAEzCD,EAAAA,cAAA,OAAKC,UAAU,kCAEfD,EAAAA,cAAA,KAAGC,UAAU,sCAAqC,mCAElDD,EAAAA,cAAA,KAAGC,UAAU,8BAA6B,oIAI1CD,EAAAA,cAAA,KAAGO,MAAO,CAACuE,SAAU,OAAQC,WAAY,IAAKq6C,WAAY,SAAU5+C,WAAY,SAAS,4CAEzFR,EAAAA,cAAA,OAAKO,MAAO,CAACC,WAAY,SACvBR,EAAAA,cAACo+C,GAAW,CACV7J,SAAU,EACV/pC,MAAO+zC,EACP38C,QAAS48C,KAIbx+C,EAAAA,cAAA,KAAGO,MAAO,CAACuE,SAAU,OAAQC,WAAY,IAAKq6C,WAAY,SAAU5+C,WAAY,SAAS,gDAEzFR,EAAAA,cAAA,OAAKO,MAAO,CAACC,WAAY,SACvBR,EAAAA,cAACo+C,GAAW,CACV7J,SAAU,EACV/pC,MAAOi0C,EACP78C,QAAS88C,KAIb1+C,EAAAA,cAAA,KACEO,MAAO,CACLwE,WAAY,IACZD,SAAU,OACVs6C,WAAY,mBACZlyC,MAAO,UAEV,uFAEDlN,EAAAA,cAAA,YACEkyC,KAAM,GACNzrC,KAAM,EACN+D,MAAOm0C,EACPv+C,SAAWC,GAAMu+C,EAAWv+C,EAAEC,OAAOkK,SAGvCxK,EAAAA,cAACqB,GAAAA,EAAQ,CACPG,SAAU+8C,EAAU,GAAKE,EAAU,EACnC78C,QAASA,KACPk9C,GAAgB,GAChBR,IAEAp1B,EAAYyD,SAAS,CACnB2yB,2BAA4B,CAAC90C,MAAO+zC,GACpCgB,2BAA4B,CAAC/0C,MAAOi0C,KAGtB,KAAZE,GACFz1B,EAAYyD,SAAS,CACnB6yB,mCAAoC,CAACh1C,MAAOm0C,KAIhD5lC,YAAW,KACT,MAAM0mC,EAAoB,CACxBvkB,iBACAhS,eAGF41B,GAAgB,GAChBrT,GAAc7pC,EAAS69C,EAAkB,GACxC,IAAK,GAEX,0BASPz/C,EAAAA,cAAA,OAAKC,UAAU,6BACZ8+C,EAGP,C,k/BCpJe,MAAMzB,WAAmBt9C,EAAAA,cACtCgC,WAAAA,CAAYV,GACVW,MAAMX,GAAO,KAcPo+C,WAA8C1/C,EAAAA,YAAkC,KAChFsZ,WAAK,OACLqmC,2BAAqB,EAf3B,IAAIC,EAAiC,CACnCC,UAAiD,SAAtCC,aAAaC,QAAQ,cAGlC,MAAMC,EAAW79C,KAAK89C,oBAClBD,IACFJ,EAAa/kD,GAAAA,GAAA,GAAO+kD,GAAa,IAAEM,kBAAmBF,KAGxD79C,KAAKS,MAAQg9C,EACbz9C,KAAKg+C,gBAAkBh+C,KAAKg+C,gBAAgBprC,KAAK5S,KACnD,CAMA+B,iBAAAA,GACO/B,KAAKb,MAAM4nB,YAAYld,SAAW7J,KAAKi+C,YAC9C,CAEA/7C,oBAAAA,GACMlC,KAAKmX,OACP+mC,cAAcl+C,KAAKmX,MAEvB,CAEA8mC,UAAAA,GACMj+C,KAAKb,MAAMg/C,aACRn+C,KAAKb,MAAM0qC,yBAA2B7pC,KAAKb,MAAMi/C,8BAAgCp+C,KAAKb,MAAMi/C,6BAA6B,GAC5Hp+C,KAAKb,MAAM4nB,YAAYyD,SAAS,CAC9B,CAACxqB,KAAKb,MAAM+K,KAAM,CAAC2/B,wBAAyBp/B,KAAK4U,OAAM,IAAIxgB,MAAOirC,UAAY,QAIlF9pC,KAAKmX,MAAQknC,YAAYr+C,KAAKs+C,KAAK1rC,KAAK5S,MAAO,KAEnD,CAEA89C,iBAAAA,GACE,GAAI99C,KAAKb,MAAMg/C,UAAW,CACxB,IAAIN,EAAW79C,KAAKb,MAAMg/C,UAS1B,OARIn+C,KAAKb,MAAMi/C,+BACbP,GAAsB79C,KAAKb,MAAMi/C,8BAG/Bp+C,KAAKb,MAAM0qC,0BACbgU,IAAuBU,EAAAA,GAAAA,MAAyBv+C,KAAKb,MAAM0qC,yBAGtDgU,CACT,CAGF,CAEAS,IAAAA,GACOt+C,KAAKb,MAAMg/C,WAAan+C,KAAKb,MAAM0qC,yBACtC7pC,KAAKO,SAAS,CAACw9C,kBAAmB/9C,KAAK89C,qBAE3C,CAEAU,mBAAAA,CAAoBC,EAA4BC,GAC1C1+C,KAAKb,MAAM0M,YAAc4yC,EAAU5yC,YACrC7L,KAAKw9C,sBAAwBx9C,KAAKu9C,WAAW/vC,SAASmN,wBAE1D,CAEAgkC,kBAAAA,CAAmBC,EAA4BjxC,GAC7C,GAAKixC,EAAU/yC,YAAc7L,KAAKb,MAAM0M,WAAc7L,KAAKb,MAAM0M,UAAW,CAC1E,MAAM2xC,EAAwBx9C,KAAKw9C,sBAC7BqB,EAAwB7+C,KAAKu9C,WAAW/vC,SAASmN,wBACnD6iC,GAAyBqB,IACvBrB,EAAsBviC,OAAS,EACjCrjB,OAAOknD,SAAS,EAAED,EAAsB3uC,OAASstC,EAAsBttC,QAC9DstC,EAAsBtiC,IAAM,GACjClb,KAAKb,MAAM0M,WACbjU,OAAOknD,SAAS,EAAED,EAAsB5jC,OAAS,IAIzD,CACF,CAGA+iC,eAAAA,GACEL,aAAaoB,QAAQ,YAAa,QAClCnoC,YAAW,KACT+mC,aAAaqB,WAAW,YAAY,GACnC,IACL,CAEA58C,MAAAA,GACE,MAAAC,EAKIrC,KAAKb,MAJPkK,EAAKhH,EAALgH,MACA0vB,EAAc12B,EAAd02B,eACAhS,EAAW1kB,EAAX0kB,YACA7S,EAAO7R,EAAP6R,QAGI+qC,EAAiBj/C,KAAKb,MAAM6jB,SAAS7d,SAAS,iBACpD,GAAI85C,GAAkBlmB,EAAeW,cAAgBG,GAAAA,EAAaC,QAAS,CACzE,MAAMjU,EAAS3R,EAAQ8E,MAAMkmC,GAAwB,UAAdA,EAAMnhD,OAE7C,OAAOF,EAAAA,cAACq+C,GAAgB,CACtBnjB,eAAgBA,EAChBhS,YAAaA,EACbtnB,QAASomB,EAAOpmB,QAChB08C,eAAgBn8C,KAAKg+C,iBAEzB,CAEA,IAAKh+C,KAAKb,MAAM4nB,YAAYld,QAAS,CACnC,GAAI7J,KAAKb,MAAMggD,UAGb,OAFAjB,cAAcl+C,KAAKmX,OACnBnX,KAAKb,MAAM4nB,YAAYqjB,WAAW,6CAC3B,KACF,GAAIpqC,KAAKb,MAAMg/C,WAAan+C,KAAKS,MAAMs9C,mBAAqB/9C,KAAKS,MAAMs9C,mBAAqB,EAGjG,OAFAG,cAAcl+C,KAAKmX,OACnBnX,KAAKb,MAAM4nB,YAAYqjB,WAAW,oEAC3B,KACF,GAAIpqC,KAAKb,MAAMigD,OAEpB,OADAp/C,KAAKb,MAAM4nB,YAAYs4B,YAChB,IAEX,CAEA,IAmBI3b,EAnBA4b,EAAiBt/C,KAAKb,MAAM+U,QAC5BqrC,EAA+Bv/C,KAAKb,MAAM6jB,SAAS7d,SAAS,uBAAyBnF,KAAKb,MAAMw5B,YAAY6mB,aAE3Gx/C,KAAKb,MAAM45B,eAAe0mB,gBACH,IAArBz/C,KAAKb,MAAM2xB,QAAgB9wB,KAAKb,MAAMugD,QAAY1/C,KAAKb,MAAM0M,WAAe7L,KAAKb,MAAMskC,gBAC1F6b,EAAiB,GACjBC,GAA+B,GAI9Bv/C,KAAKb,MAAM45B,eAAe4mB,YAC7BL,EAAiBA,EAAe3jD,QAAQ8tB,GAASA,IAA2B,IAAnBA,EAAKmgB,aAG5D5pC,KAAKb,MAAM45B,eAAe6mB,2BAC5BN,EAAiBA,EAAe3jD,QAAQ8tB,GAAuB,YAAdA,EAAK1rB,OACtDwhD,GAA+B,GAIR,IAArBv/C,KAAKb,MAAM2xB,OAAgB9wB,KAAKb,MAAM45B,eAAemL,eACvDR,EAAyB4b,EAAe3jD,QAAQ8tB,GAE9B,YAAdA,EAAK1rB,OACiB,IAAnB0rB,EAAK5d,YACgB,IAArB4d,EAAK+Z,cAETllC,KAAKmrB,GAASA,EAAKvf,OAGxB,MAAM8Y,EAAUtjB,EAAW,cAAeM,KAAKb,MAAM+K,IAAKlK,KAAKb,MAAM6jB,QACnE,CACE08B,OAAQ1/C,KAAKb,MAAMugD,OACnBlc,YAAaxjC,KAAKb,MAAMqkC,YACxB33B,UAAW7L,KAAKb,MAAM0M,UACtB89B,SAAU3pC,KAAKb,MAAMskC,aACrB,mBAAoBzjC,KAAKb,MAAM6pC,oBAG7B6W,EAA4C,kBAAVx2C,GAAsB,sBAAsBy2C,KAAKz2C,GACnF02C,EAAY//C,KAAKb,MAAM6jB,SAAS7d,SAAS,YACzC66C,EAAmBhgD,KAAKb,MAAM6jB,SAAS7d,SAAS,oBACtD,IAAI86C,EAAUvnD,GAAA,GAAOsH,KAAKb,OAE1B,GAAI45B,EAAemnB,kCAAoCL,EAA0B,CAC/E,MAAMM,EAAuBb,EAAec,WAAW32B,GAAsB,WAAbA,EAAK1rB,MAAqB0rB,EAAKzG,SAAS7d,SAAS,cAC3Gk7C,EAAkBf,EAAetmC,MAAMyQ,GAA2D,YAAdA,EAAK1rB,QAAwB0rB,EAAKzG,SAAS7d,SAAS,cAExIm7C,EAAqBD,GAAiBnsC,SAASksC,WAAW32B,GAA2D,YAAdA,EAAK1rB,QAAwB0rB,EAAKzG,SAAS7d,SAAS,oBAC3JwzC,EAAuB0H,GAAiBnsC,SAAS8E,MAAMyQ,GAA2D,YAAdA,EAAK1rB,QAAwB0rB,EAAKzG,SAAS7d,SAAS,oBACxJo7C,EAAwB5H,GAAsBzkC,SAAS8E,MAAMyQ,GAA6D,cAAdA,EAAK1rB,OAA0B,mCAAmC+hD,KAAKr2B,EAAKvV,YAAYA,QACpMssC,EAA4BH,GAAiBnsC,SAAS8E,MAAMyQ,GAAiD,cAAdA,EAAK1rB,OACpG0iD,EAAoCJ,GAAiBnsC,SAASksC,WAAW32B,GAA0D,WAAdA,EAAK1rB,OAC1H2iD,EAA+BL,GAAiBnsC,SAAS8E,MAAMyQ,GAA0D,WAAdA,EAAK1rB,OAEtH,GAAIwiD,GAAyBC,GAA6BE,EAA8B,CACtF,MAAMC,EAAsCD,EAA6BjhD,QAEzE6/C,EAAiBxrB,GAAAA,EAAOA,GAAAA,EAAW,CAACqsB,EAAsB,YAAarsB,GAAAA,EAASwsB,EAAoB,GAAIhB,GACxGA,EAAiBxrB,GAAAA,EAAOA,GAAAA,EAAW,CAACqsB,EAAsB,YAAarsB,GAAAA,EAAS2sB,EAAmC,GAAInB,GAEvHkB,EAA0B1I,uBAAyBa,EACnD6H,EAA0BrL,wBAA0BoL,EACpDC,EAA0BzI,iCAAkC,EAC5DyI,EAA0BtJ,sBAAwByJ,CACpD,CACF,CAEA,GAAGZ,EACD,OAAOliD,EAAAA,cAAAA,EAAAA,SAAA,MAGT,GAAGmiD,EAAkB,CACnB,MAAMY,EAAe5gD,KAAKb,MAAMu4B,gBAAgBmpB,QAAgB,mDAE1D7gD,KAAKb,MAAMu4B,gBAAgBmpB,QAAQ17C,SAAS,qBAAwB,oDAC/BnF,KAAKb,MAAMu4B,gBAAgBmpB,yGAAyG7gD,KAAKb,MAAMu4B,gBAAgBmpB,sDACjM,+FAGU7gD,KAAKb,MAAMu4B,gBAAgBmpB,wsBAS6F7gD,KAAKb,MAAMu4B,gBAAgBruB,0BAA0BrJ,KAAKb,MAAMu4B,gBAAgBopB,8IAGpK9gD,KAAKb,MAAMu4B,gBAAgBmpB,iFAG1E7gD,KAAKb,MAAMu4B,gBAAgBqpB,QAAgB,qDAEhC/gD,KAAKb,MAAMu4B,gBAAgBqpB,uqBASuF/gD,KAAKb,MAAMu4B,gBAAgBruB,0BAA0BrJ,KAAKb,MAAMu4B,gBAAgBopB,8KAK3M9gD,KAAKb,MAAMu4B,gBAAgBspB,2CAhBQ,2CAtBa,GA6CpD9sC,EAAW,kNAMTlU,KAAKb,MAAMu4B,gBAAgBmpB,QAAW,qUAK6B7gD,KAAKb,MAAMu4B,gBAAgBupB,wNAG5FL,sCAEA,mZAMyC5gD,KAAKb,MAAMu4B,gBAAgBwpB,+IAA+IlhD,KAAKb,MAAMu4B,gBAAgBruB,0BAA0BrJ,KAAKb,MAAMu4B,gBAAgBopB,0aAWvSK,EAAgB,sfAQVnhD,KAAKb,MAAMu4B,gBAAgBmpB,QAAW,+LAIpC,2EAEA7gD,KAAKb,MAAMu4B,gBAAgBmpB,QAAW,8RAI6B7gD,KAAKb,MAAMu4B,gBAAgBupB,0OAG5FL,kDAEA,qXAKyC5gD,KAAKb,MAAMu4B,gBAAgBwpB,8KAA8KlhD,KAAKb,MAAMu4B,gBAAgBruB,0BAA0BrJ,KAAKb,MAAMu4B,gBAAgBopB,sYAY5UM,EAAephD,KAAKS,MAAMi9C,UAAa,aACzCxpC,cACAitC,YACC,GAAEjtC,IAEP+rC,EAAW52C,MAAQ,aACf42C,EAAW/rC,QAAQ,KACrB+rC,EAAW/rC,QAAQ,GAAGA,QAAUktC,EAEpC,CAEA,OACEvjD,EAAAA,cAAA,OACEc,GAAIqB,KAAKb,MAAM+K,IACf,kBACA,WAAUlK,KAAKb,MAAM+K,IACrBpM,UAAWklB,EACX5kB,OAAOilC,EAAAA,EAAAA,IAAwBrjC,KAAKb,OACpC0iC,iBAAiB,EACjB7zB,IAAKhO,KAAKu9C,YAEV1/C,EAAAA,cAAC0lC,GAAqB0c,GACtBpiD,EAAAA,cAAA,OAAKC,UAAU,oBACbD,EAAAA,cAACmlC,GAAmBhjC,KAAKb,OACzBtB,EAAAA,cAAC2yC,GAAat0C,OAAAia,OAAA,GACRnW,KAAKb,MAAK,CACd+U,QAASorC,EACTt1B,WAAW,UACXkX,uBAAqB,EACrBwC,uBAAwBA,EACxB+M,mBAAoBzwC,KAAKb,MAAM6nB,eAAemJ,YAAcnwB,KAAKb,MAAM45B,eAAe0mB,gBAAkBz/C,KAAKb,MAAM0M,cAEpH0zC,GACC1hD,EAAAA,cAACyoB,GAAAA,EACKtmB,KAAKb,MAAMg7C,kBAM3B,E,qGCnYa,SAASkH,IAA6B,SACnD7hD,EAAW,GAAE,WACb8hD,IAEA,OACEzjD,EAAAA,cAAA,OAAKC,UAAU,oCACbD,EAAAA,cAAA,OACEC,UAAU,iDACV2B,QAAS6hD,GAETzjD,EAAAA,cAAA,KAAGC,UAAW,gBAEhBD,EAAAA,cAAA,OAAKC,UAAU,6CACZ0B,GAIT,CCAe,SAAS+hD,IAAmB,MACzCl4C,EAAQ,GAAE,QACVm4C,EAAU,KAAI,WACdC,GAAa,EAAK,eAClBC,EAAc,aACdC,EAAe,KAAI,UACnBC,GAAY,EAAK,KACjBC,GAAO,EAAK,SACZriD,EAAQ,mBACRspC,EAAkB,QAClBgT,EAAO,WACPwF,EAAU,eACVvoB,IAGA,IAAI+oB,EAAkBtiD,EAyBtB,OAxBIiiD,IACFK,EAAkBjkD,EAAAA,SAAeS,IAAIkB,GAAW0/C,GAC1CrhD,EAAAA,eAAqBqhD,GAErBrhD,EAAAA,cAACwjD,GAA4B,CAC3BhlD,IAAK6iD,EAAM//C,MAAM+K,IACjBo3C,WAAYA,KACNvoB,GACFA,EAAe8K,sBAAsB,MAEnCyd,GACFA,EAAWpC,EAAM//C,MAAM+K,IACzB,GAGDg1C,GAIEA,KAMXrhD,EAAAA,cAAA,OAAKC,UAAW4B,EAAW,uBAAyBmiD,EAAO,OAAS,UAClEhkD,EAAAA,cAAA,OAAKC,UAAU,+BACbD,EAAAA,cAAA,OAAKC,UAAU,oCACbD,EAAAA,cAAA,UAAKwL,GACJq4C,GACC7jD,EAAAA,cAAA,OACEC,UAAW4B,EAAW,4CAA6C,CAAC20C,OAAQoN,IAC5EhiD,QAASiiD,GAET7jD,EAAAA,cAAA,KAAGC,UAAU,uBAGhB6jD,GAEH9jD,EAAAA,cAAA,OAAKC,UAAU,uCAGhB0jD,GAAW3jD,EAAAA,cAAA,OAAKC,UAAU,+BACzBD,EAAAA,cAAA,SAAGA,EAAAA,cAAA,SAAI2jD,KAET3jD,EAAAA,cAAA,WACGikD,GAEFF,GAAa/jD,EAAAA,cAAA,OAAKC,UAAU,4BAA4BzB,IAAI,SAASoD,QAASA,KAC7E,GAAIq8C,GAAWhT,EAAoB,CACjC,MAAML,GAASb,EAAAA,GAAAA,KACfkU,EAAQrT,GACRK,EAAmBL,EACrB,IAEE5qC,EAAAA,cAAA,YAAMA,EAAAA,cAAA,KAAGC,UAAU,kBAAoB,QAAMikD,GAAUC,SAAS34C,GAAO,QAIjF,C,k/BCxEe,MAAM44C,WAAiDpkD,EAAAA,UACpEgC,WAAAA,CAAYV,GACVW,MAAMX,GAENa,KAAKS,MAAQ,CACXyhD,kBAAmBliD,KAAKb,MAAM8nB,oBAAoBk7B,mBAAmBD,kBACrEz7B,gBAAiBzmB,KAAKb,MAAM8nB,oBAAoBk7B,mBAAmB17B,gBACnE27B,YAAapiD,KAAKb,MAAM8nB,oBAAoBk7B,mBAAmBC,YAC/DC,qBAAsBriD,KAAKb,MAAM8nB,oBAAoBk7B,mBAAmBE,qBACxE17B,oBAAqB3mB,KAAKb,MAAM8nB,oBAAoBk7B,mBAAmBx7B,oBACvEliB,OAAQzE,KAAKb,MAAM8nB,oBAAoBk7B,mBAAmB19C,OAC1DC,eAAgB1E,KAAKb,MAAM8nB,oBAAoBk7B,mBAAmBz9C,eAClE49C,YAAatiD,KAAKb,MAAM8nB,oBAAoBk7B,mBAAmBG,YAEnE,CAEArnB,IAAAA,CAAKp/B,GACHA,EAAM0V,iBACN,MAAMgxC,EAAY7pD,GAAAA,GAAA,GACbsH,KAAKb,MAAM8nB,oBAAoBk7B,oBAAkB,IACpDxjD,GAAIqB,KAAKb,MAAM8nB,oBAAoBk7B,mBAAmBxjD,GACtDujD,kBAAmBliD,KAAKS,MAAMyhD,kBAC9Bz7B,gBAAiBzmB,KAAKS,MAAMgmB,gBAC5B27B,YAAapiD,KAAKS,MAAM2hD,YACxB39C,OAAQzE,KAAKS,MAAMgE,OACnBC,eAAgB1E,KAAKS,MAAMiE,eAC3B49C,YAAatiD,KAAKS,MAAM6hD,YACxBD,qBAAsBriD,KAAKS,MAAM4hD,sBAAwB,GACzD17B,oBAAqB3mB,KAAKS,MAAMkmB,qBAAuB,KAEzD3mB,KAAKb,MAAM8nB,oBAAoBu7B,0BAA0BD,EAC3D,CAEAE,qBAAAA,CAAsBhqD,GACpB,OAAOA,EAAQ6F,KAAK4uB,IACX,CAAC7kB,MAAO6kB,EAAYva,MAAOua,KAEtC,CAEA9qB,MAAAA,GACE,MAAAC,EAGIrC,KAAKb,MAFP6nB,EAAc3kB,EAAd2kB,eACAC,EAAmB5kB,EAAnB4kB,oBAGIk7B,EAAqBl7B,EAAoBk7B,mBACzCO,EAA+Bz7B,EAAoBy7B,6BACnDC,EAAsCD,EAA6B1pC,MAAM4pC,GAASA,EAAKjwC,QAAU3S,KAAKS,MAAMkS,SAAU+vC,EAA6B,GACnJH,EAAet7B,EAAoB47B,8BACnCC,EAA0B9iD,KAAKyiD,sBAAsBx7B,EAAoB87B,2CACzEC,EAAwBhjD,KAAKyiD,sBAAsBx7B,EAAoBg8B,yCACvEC,EAAoBljD,KAAKyiD,sBAAsBx7B,EAAoBk8B,qCACnEC,EAAgBpjD,KAAKyiD,sBAAsBx7B,EAAoBo8B,iCAC/DC,EAAuBtjD,KAAKyiD,sBAAsBx7B,EAAoBs8B,wCACtEC,EAAqBxjD,KAAKyiD,sBAAsBx7B,EAAoBw8B,sCACpEC,EAA4B1jD,KAAKyiD,sBAAsBx7B,EAAoB08B,6CAC3EC,EAA4B5jD,KAAKyiD,sBAAsBx7B,EAAoB48B,6CAEjF,OACEhmD,EAAAA,cAAC0jD,GAAkB,CACjBllD,IAAI,2BACJgN,MAAM,4BAENxL,EAAAA,cAAA,UAAI,iCAEJA,EAAAA,cAAA,WACAA,EAAAA,cAAA,OAAKC,UAAU,uBACXD,EAAAA,cAAA,QAAMC,UAAU,6BAA4B,iBAC5CD,EAAAA,cAAA,QAAMC,UAAU,gEACdD,EAAAA,cAACikB,EAAAA,GAAM,CACLC,SAAS,EACT+hC,aAAa,EACbrrD,QAAS+qD,EACT/hC,aAAczhB,KAAKS,MAAM6hD,aAAekB,EAAmB7nD,QAAOgL,GAAS3G,KAAKS,MAAM6hD,aAAe37C,EAAc,QACnH1I,SAAY0I,IAAa3G,KAAKO,SAAS,CAAC+hD,YAAa37C,GAAUA,EAAO0B,OAAO,EAC7E07C,iBAAkB/hD,SAAS8mB,KAC3Bk7B,OAAQ,CACJC,WAAYC,GAAIxrD,GAAAA,GAAA,GAAUwrD,GAAI,IAAElH,OAAQ,YAMlDn/C,EAAAA,cAAA,OAAKC,UAAU,uBACbD,EAAAA,cAAA,QAAMC,UAAU,6BAA4B,sBAC5CD,EAAAA,cAAA,QAAMC,UAAU,gEACdD,EAAAA,cAACikB,EAAAA,GAAM,CACLC,SAAS,EACT+hC,aAAa,EACbrrD,QAASqqD,EACTrhC,aAAczhB,KAAKS,MAAMyhD,mBAAqBY,EAAwBnnD,QAAOgL,GAAS3G,KAAKS,MAAMyhD,mBAAqBv7C,EAAc,QACpI1I,SAAY0I,IAAa3G,KAAKO,SAAS,CAAC2hD,kBAAmBv7C,GAAUA,EAAO0B,OAAO,EACnF07C,iBAAkB/hD,SAAS8mB,KAC3Bk7B,OAAQ,CACJC,WAAYC,GAAIxrD,GAAAA,GAAA,GAAUwrD,GAAI,IAAElH,OAAQ,YAMlDn/C,EAAAA,cAAA,OAAKC,UAAU,uBACbD,EAAAA,cAAA,QAAMC,UAAU,6BAA4B,oBAC5CD,EAAAA,cAAA,QAAMC,UAAU,gEACdD,EAAAA,cAACikB,EAAAA,GAAM,CACHC,SAAS,EACT+hC,aAAa,EACbrrD,QAASuqD,EACTvhC,aAAczhB,KAAKS,MAAMgmB,iBAAmBu8B,EAAsBrnD,QAAOgL,GAAS3G,KAAKS,MAAMgmB,iBAAmB9f,EAAc,QAC9H1I,SAAY0I,IAAa3G,KAAKO,SAAS,CAACkmB,gBAAiB9f,GAAUA,EAAO0B,OAAO,EACjF07C,iBAAkB/hD,SAAS8mB,KAC3Bk7B,OAAQ,CACJC,WAAYC,GAAIxrD,GAAAA,GAAA,GAAUwrD,GAAI,IAAElH,OAAQ,YAMpDn/C,EAAAA,cAAA,OAAKC,UAAU,uBACbD,EAAAA,cAAA,QAAMC,UAAU,6BAA4B,gBAC5CD,EAAAA,cAAA,QAAMC,UAAU,gEACdD,EAAAA,cAACikB,EAAAA,GAAM,CACDC,SAAS,EACT+hC,aAAa,EACbrrD,QAASyqD,EACTzhC,aAAczhB,KAAKS,MAAM2hD,aAAec,EAAkBvnD,QAAOgL,GAAS3G,KAAKS,MAAM2hD,aAAez7C,EAAc,QAClH1I,SAAY0I,IAAa3G,KAAKO,SAAS,CAAC6hD,YAAaz7C,GAAUA,EAAO0B,OAAO,EAC7E07C,iBAAkB/hD,SAAS8mB,KAC3Bk7B,OAAQ,CACJC,WAAYC,GAAIxrD,GAAAA,GAAA,GAAUwrD,GAAI,IAAElH,OAAQ,YAMtDn/C,EAAAA,cAAA,OAAKC,UAAU,uBACbD,EAAAA,cAAA,QAAMC,UAAU,6BAA4B,WAC5CD,EAAAA,cAAA,QAAMC,UAAU,gEACdD,EAAAA,cAACikB,EAAAA,GAAM,CACDC,SAAS,EACT+hC,aAAa,EACbrrD,QAAS2qD,EACT3hC,aAAczhB,KAAKS,MAAMgE,QAAU2+C,EAAcznD,QAAOgL,GAAS3G,KAAKS,MAAMgE,QAAUkC,EAAc,QACpG1I,SAAY0I,IAAa3G,KAAKO,SAAS,CAACkE,OAAQkC,GAAUA,EAAO0B,OAAO,EACxE07C,iBAAkB/hD,SAAS8mB,KAC3Bk7B,OAAQ,CACJC,WAAYC,GAAIxrD,GAAAA,GAAA,GAAUwrD,GAAI,IAAElH,OAAQ,YAMtDn/C,EAAAA,cAAA,OAAKC,UAAU,uBACbD,EAAAA,cAAA,QAAMC,UAAU,6BAA4B,mBAC5CD,EAAAA,cAAA,QAAMC,UAAU,gEACdD,EAAAA,cAACikB,EAAAA,GAAM,CACDC,SAAS,EACT+hC,aAAa,EACbrrD,QAAS6qD,EACT7hC,aAAczhB,KAAKS,MAAMiE,gBAAkB4+C,EAAqB3nD,QAAOgL,GAAS3G,KAAKS,MAAMiE,gBAAkBiC,EAAc,QAC3H1I,SAAY0I,IAAa3G,KAAKO,SAAS,CAACmE,eAAgBiC,GAAUA,EAAO0B,OAAO,EAChF07C,iBAAkB/hD,SAAS8mB,KAC3Bk7B,OAAQ,CACJC,WAAYC,GAAIxrD,GAAAA,GAAA,GAAUwrD,GAAI,IAAElH,OAAQ,YAMtDn/C,EAAAA,cAAA,OAAKC,UAAU,uBACbD,EAAAA,cAAA,QAAMC,UAAU,6BAA4B,wBAC5CD,EAAAA,cAAA,QAAMC,UAAU,gEACdD,EAAAA,cAACikB,EAAAA,GAAM,CACLC,SAAS,EACTtpB,QAASirD,EACTjiC,aAAczhB,KAAKS,MAAM4hD,sBAAwBqB,EAA0B/nD,QAAOgL,GAAS3G,KAAKS,MAAM4hD,qBAAqBl9C,SAASwB,EAAc,SAClJ1I,SAAYxF,IAAcuH,KAAKO,SAAS,CAAC8hD,qBAAsB5pD,GAAWA,EAAQ6F,KAAKqI,GAAWA,EAAO0B,SAAS,EAClH07C,iBAAkB/hD,SAAS8mB,KAC3Bk7B,OAAQ,CACJC,WAAYC,GAAIxrD,GAAAA,GAAA,GAAUwrD,GAAI,IAAElH,OAAQ,YAOlDn/C,EAAAA,cAAA,OAAKC,UAAU,uBACbD,EAAAA,cAAA,QAAMC,UAAU,6BAA4B,wBAC5CD,EAAAA,cAAA,QAAMC,UAAU,gEACdD,EAAAA,cAACikB,EAAAA,GAAM,CACLC,SAAS,EACTtpB,QAASmrD,EACTniC,aAAczhB,KAAKS,MAAMkmB,qBAAuBi9B,EAA0BjoD,QAAOgL,GAAS3G,KAAKS,MAAMkmB,oBAAoBxhB,SAASwB,EAAc,SAChJ1I,SAAYxF,IAAcuH,KAAKO,SAAS,CAAComB,oBAAqBluB,GAAWA,EAAQ6F,KAAKqI,GAAWA,EAAO0B,SAAS,EACjH07C,iBAAkB/hD,SAAS8mB,KAC3Bk7B,OAAQ,CACJC,WAAYC,GAAIxrD,GAAAA,GAAA,GAAUwrD,GAAI,IAAElH,OAAQ,YAMlDn/C,EAAAA,cAAA,OAAKC,UAAU,uBACbD,EAAAA,cAAA,QAAMC,UAAU,6BACdD,EAAAA,cAAA,UAAQC,UAAU,YAAW2B,QAASO,KAAKi7B,KAAKroB,KAAK5S,OAAQ,WAKnEnC,EAAAA,cAAA,UAAI,yCAEJA,EAAAA,cAAA,WACEA,EAAAA,cAAA,OAAKC,UAAU,uBACbD,EAAAA,cAAA,QAAMC,UAAU,6BAA4B,kBAC5CD,EAAAA,cAAA,OAAKC,UAAW4B,EAAW,+DAAgE,CAACykD,QAASnkD,KAAKb,MAAMilD,YAAepkD,KAAKb,MAAMilD,aAAejC,EAAmBiC,cAC1KvmD,EAAAA,cAAA,UAAQwK,MAAO4e,EAAoBm9B,WAAYnmD,SAAWC,IACxD8oB,EAAe6D,WAAU+B,EAAAA,EAAAA,IAAqB3F,EAAoBo9B,QAAS,aAAcnmD,EAAEC,OAAOkK,OAAO,GAExG4e,EAAoBq9B,iBAAiBhmD,KAAKimD,GAAc1mD,EAAAA,cAAA,UAAQxB,IAAKkoD,EAAUloD,IAAKgM,MAAOk8C,EAAUloD,KAAMkoD,EAAUz0B,kBAK5HjyB,EAAAA,cAAA,OAAKC,UAAU,uBACbD,EAAAA,cAAA,QAAMC,UAAU,6BAA4B,gCAC5CD,EAAAA,cAAA,QAAMC,UAAU,gEACdD,EAAAA,cAAA,UAAQwK,MAAOs6C,GAAqChwC,MAAOtT,UAAU,EAAOpB,SAAWC,IAAO8B,KAAKO,SAAS,CAACoS,MAAOzU,EAAEC,OAAOkK,OAAO,GACjIq6C,EAA6BpkD,KAAKkmD,GAAc3mD,EAAAA,cAAA,UAAQxB,IAAKmoD,EAAU7xC,MAAOtK,MAAOm8C,EAAU7xC,OAAQ6xC,EAAU7xC,YAKxH9U,EAAAA,cAAA,OAAKC,UAAU,uBACbD,EAAAA,cAAA,QAAMC,UAAU,6BAA4B,sBAC5CD,EAAAA,cAAA,QAAMC,UAAU,6BAA6B6kD,GAAqC8B,wBAGpF5mD,EAAAA,cAAA,OAAKC,UAAU,uBACbD,EAAAA,cAAA,QAAMC,UAAU,6BAA4B,uBAC5CD,EAAAA,cAAA,QAAMC,UAAU,6BAA6B6kD,GAAqC+B,aAGpF7mD,EAAAA,cAAA,OAAKC,UAAU,uBACbD,EAAAA,cAAA,QAAMC,UAAU,6BAA4B,yBAC5CD,EAAAA,cAAA,QAAMC,UAAU,6BAA6B6kD,GAAqCgC,iBAGpF9mD,EAAAA,cAAA,OAAKC,UAAU,uBACbD,EAAAA,cAAA,QAAMC,UAAU,6BAA4B,yBAC5CD,EAAAA,cAAA,QAAMC,UAAU,6BAA6BmpB,EAAoB29B,mBAGnE/mD,EAAAA,cAAA,OAAKC,UAAU,uBACbD,EAAAA,cAAA,QAAMC,UAAU,6BAA4B,uBAC5CD,EAAAA,cAAA,QAAMC,UAAU,6BAA6BykD,IAAiBA,GAAcsC,UAAY,MAAQ,SAIpGhnD,EAAAA,cAAA,WAEAA,EAAAA,cAAA,WACEA,EAAAA,cAAA,UAAI,4BAEH,IAAItB,MAAM,GAAGJ,QAAQmC,KAAKG,IACzB,MAAMqmD,EAAgBpiB,OAAO8J,aAAa,IAAIuY,WAAW,GAAKtmD,GACxDumD,EAActiB,OAAO8J,aAAa,IAAIuY,WAAW,GAAKtmD,GACtDstC,EAAUttC,IAAU0jD,GAAoBjuC,SAAS+wC,qBAEvD,OACEpnD,EAAAA,cAAA,OAAKxB,IAAKoC,EAAOX,UAAW4B,EAAW,sBAAuB,CAACqsC,QAASA,KACtEluC,EAAAA,cAAA,QAAMC,UAAU,6BAA4B,SAAOgnD,EAAc,KACjEjnD,EAAAA,cAAA,QAAMC,UAAU,6BAA6B6kD,GAAuCA,EAAqC,UAASqC,YACjIjZ,GAAWluC,EAAAA,cAAA,QAAMC,UAAU,+BAA8B,YACtD,IAIVD,EAAAA,cAAA,OAAKC,UAAU,uBACbD,EAAAA,cAAA,QAAMC,UAAU,6BAA4B,eAC5CD,EAAAA,cAAA,QAAMC,UAAU,6BAA6B6kD,GAAqCuC,eAGtFrnD,EAAAA,cAAA,WAGN,E,gBCjTF,MAsOA,GAtOmBsnD,EAAGl8C,cAEpB,IAAKA,EAAS,OAAOpL,EAAAA,cAAA,WAAK,cAE1B,MAAMunD,EAAU,CACd,CACE/oD,IAAK,KACLiE,KAAM,KACN+kD,SAAUA,CAACtgD,EAAMsD,IACfxK,EAAAA,cAAA,KACE6D,KAAO,aAAYqD,EAAKugD,iBAAiBC,mCACzCpnD,OAAO,UAENkK,IAIP,CACEhM,IAAK,0BACLiE,KAAM,aACN+kD,SAAUA,CAACtgD,EAAMsD,IACfxK,EAAAA,cAAA,KACE6D,KAAO,aAAYqD,EAAKugD,iBAAiBC,mCACzCpnD,OAAO,UAENkK,IAIP,CACEhM,IAAK,cACLiE,KAAM,UAER,CACEjE,IAAK,iBACLiE,KAAM,OACN+kD,SAAUA,CAACtgD,EAAMsD,IACfxK,EAAAA,cAAA,KACE6D,KAAO,cAAaqD,EAAK8xC,cACzB14C,OAAO,UAENkK,IAIP,CACEhM,IAAK,cACLiE,KAAM,gBAER,CACEjE,IAAK,iCACLiE,KAAM,aAER,CACEjE,IAAK,mBACLiE,KAAM,YAER,CACEjE,IAAK,eACLiE,KAAM,QAER,CACEjE,IAAK,iBACLiE,KAAM,UAER,CACEjE,IAAK,+BACLiE,KAAM,kBAER,CACEjE,IAAK,WACLiE,KAAM,YAER,CACEjE,IAAK,WACLiE,KAAM,YAER,CACEjE,IAAK,WACLiE,KAAM,YAER,CACEjE,IAAK,WACLiE,KAAM,YAER,CACEjE,IAAK,WACLiE,KAAM,YAER,CACEjE,IAAK,aACLiE,KAAM,cAER,CACEjE,IAAK,iBACLiE,KAAM,kBAER,CACEjE,IAAK,SACLiE,KAAM,mBAER,CACEjE,IAAK,6DACLiE,KAAM,uBAER,CACEjE,IAAK,2DACLiE,KAAM,QACN+kD,SAAUA,CAACtgD,EAAMsD,IACfxK,EAAAA,cAAA,KACE6D,KAAO,4CAA2C2G,IAClDlK,OAAO,UAENkK,IAIP,CACEhM,IAAK,0DACLiE,KAAM,mBAER,CACEjE,IAAK,wDACLiE,KAAM,QACN+kD,SAAUA,CAACtgD,EAAMsD,IACfxK,EAAAA,cAAA,KACE6D,KAAO,yCAAwC2G,IAC/ClK,OAAO,UAENkK,IAIP,CACEhM,IAAK,mBACLiE,KAAM,OACN+kD,SAAUA,CAACtgD,EAAMsD,IACfxK,EAAAA,cAAA,WACEA,EAAAA,cAAA,KACE6D,KAAO,+CAA8CqD,EAAKpG,KAC1DR,OAAO,SACPqnD,IAAI,uBAEHzgD,EAAK0gD,cAAcvoD,OAAO,UAG5B6H,EAAK0gD,cAAcnnD,KAAKyG,GACvBlH,EAAAA,cAAA,OAAKxB,IAAK0I,EAAKpG,IACbd,EAAAA,cAAA,KACE6D,KAAO,sCAAqCqD,EAAKpG,KACjDR,OAAO,SACPqnD,IAAI,uBAEHzgD,EAAKsE,YAOlB,CACEhN,IAAK,6BACLiE,KAAM,sBAER,CACEjE,IAAK,SACLiE,KAAM,UAER,CACEjE,IAAK,iBACLiE,KAAM,kBAER,CACEjE,IAAK,oBACLiE,KAAM,qBAER,CACEjE,IAAK,cACLiE,KAAM,eAER,CACEjE,IAAK,kBACLiE,KAAM,mBAER,CACEjE,IAAK,uBACLiE,KAAM,uBAER,CACEjE,IAAK,sBACLiE,KAAM,uBAER,CACEjE,IAAK,YACLiE,KAAM,aAER,CACEjE,IAAK,YACLiE,KAAM,aAER,CACEjE,IAAK,aACLiE,KAAM,gBAER,CACEjE,IAAK,aACLiE,KAAM,kBAIV,OACEzC,EAAAA,cAAA,MAAIC,UAAU,gBACXsnD,EAAQ9mD,KAAI,EAAGjC,MAAKiE,OAAM+kD,eACzB,MAAMtzC,GAAM2zC,EAAAA,GAAAA,IAAaz8C,EAAS5M,GAAK,GAEvC,OACEwB,EAAAA,cAACA,EAAAA,SAAc,CAACxB,IAAKA,GACnBwB,EAAAA,cAAA,MAAIC,UAAU,gBAAgBwC,GAC9BzC,EAAAA,cAAA,MAAIC,UAAU,gBACVunD,EACEA,EAASp8C,EAAS8I,GAClBlU,EAAAA,cAAA,OAAK2mB,wBAAyB,CAAEC,OAAQ1S,MAE/B,IAGlB,E,ojCCnOT,MAoFA,GApFsB4zC,EAAGC,iBACvB,MAAgD3rD,EAAAC,IAAZC,EAAAA,EAAAA,UAAS,IAAG,GAAzC0rD,EAAU5rD,EAAA,GAAE6rD,EAAa7rD,EAAA,IAShCiB,EAAAA,EAAAA,YAAU,KAPcC,WACtB,MAAMC,QAAa7B,EAAAA,GAAAA,IAA6B,CAC9C8B,MAAO,CAAE0qD,uBAAwBH,EAAYpqD,IAAK,OAEpDsqD,EAAc1qD,EAAK1D,KAAKA,KAAK,EAI7BsuD,EAAiB,GAChB,CAACJ,IAEJ,MAAMxtD,EAAU,CACd,KACA,yBACA,QACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,cACA,wBACA,aACA,iBACA,uBACA,aACA,cA4CF,OACEyF,EAAAA,cAAA,OAAKC,UAAU,mBACbD,EAAAA,cAAA,SAAOC,UAAU,2BAA2ByjB,OAAQ,GAClD1jB,EAAAA,cAAA,aA3CJA,EAAAA,cAAA,UACGzF,EAAQkG,KAAK2V,GACZpW,EAAAA,cAAA,MAAIxB,IAAK4X,GAASA,OA0ClBpW,EAAAA,cAAA,aApCsB,IAAtBgoD,EAAW3oD,OAEXW,EAAAA,cAAA,UACEA,EAAAA,cAAA,MAAIU,QAASnG,EAAQ8E,OAAQkB,MAAO,CAAEI,UAAW,WAAY,yBAO5DqnD,EAAWvnD,KAAKskD,GACrB/kD,EAAAA,cAAA,MAAIxB,IAAKumD,EAAKjkD,IACZd,EAAAA,cAAA,UAAK+kD,EAAKjkD,IACVd,EAAAA,cAAA,UAAK+kD,EAAKmD,wBACVloD,EAAAA,cAAA,UAAK+kD,EAAKjwC,OACV9U,EAAAA,cAAA,UAAK+kD,EAAKqD,gBACVpoD,EAAAA,cAAA,UAAK+kD,EAAKsD,gBACVroD,EAAAA,cAAA,UAAK+kD,EAAKuD,gBACVtoD,EAAAA,cAAA,UAAK+kD,EAAKwD,gBACVvoD,EAAAA,cAAA,UAAK+kD,EAAKyD,gBACVxoD,EAAAA,cAAA,UAAK+kD,EAAK0D,gBACVzoD,EAAAA,cAAA,UAAK+kD,EAAKsC,aACVrnD,EAAAA,cAAA,UAAK+kD,EAAK6B,uBACV5mD,EAAAA,cAAA,UAAK+kD,EAAK8B,YACV7mD,EAAAA,cAAA,UAAK+kD,EAAK+B,gBACV9mD,EAAAA,cAAA,UAAK+kD,EAAK2D,0BACV1oD,EAAAA,cAAA,UAAK,IAAIgB,KAAK+jD,EAAK9jD,YAAYC,kBAC/BlB,EAAAA,cAAA,UAAK,IAAIgB,KAAK+jD,EAAK4D,YAAYznD,uBAW7B,E,gkCCxEK,SAAS0nD,IAAuB,SAC7CC,EAAQ,SACRC,GAAW,EAAK,KAChBrmD,EAAO,GAAE,SACTsmD,EAAQ,SACRC,EAAQ,WACRC,EAAU,SACVC,IAEA,IAAKD,EAAc,OAAO,KAY1B,OACEjpD,EAAAA,cAAA,KAAG6D,KAAK,IAAI5D,UAAW4B,EAAW,4BAA6B,CAAC20C,OAAQsS,IAAYlnD,QAXrEvB,IACfA,EAAEqT,iBACEs1C,EACFjvD,OAAOgpB,KAAKimC,EAAU,UACdD,IACRA,EAAS1oD,GACT6oD,MACF,GAKGL,GAAY7oD,EAAAA,cAAAA,EAAAA,SAAA,KACXA,EAAAA,cAAA,QAAMC,UAAmC,QAAxB4oD,EAASv9B,MAAM,EAAE,GAAeu9B,EAAY,WAAUA,MACvE7oD,EAAAA,cAAA,YAEFA,EAAAA,cAAA,QAAMC,UAAU,eAAewC,GAGrC,C,gBCjBe,SAAS0mD,GAA6B7nD,GACnD,MACEu4B,EAQEv4B,EARFu4B,gBACAoB,EAOE35B,EAPF25B,eACA/R,EAME5nB,EANF4nB,YACAgS,EAKE55B,EALF45B,eACA2D,EAIEv9B,EAJFu9B,aACA/D,EAGEx5B,EAHFw5B,YACAsuB,EAEE9nD,EAFF8nD,eACAC,EACE/nD,EADF+nD,sBAGIlgC,GAAiBmgC,EAAAA,GAAAA,MAOvB,IAAIC,EAAc,KAClB,OAAQH,EAAelpD,MACrB,IAAK,YACHqpD,EACEvpD,EAAAA,cAACg0C,GAAY31C,OAAAia,OAAA,CACX9Z,IAAK4qD,EAAe/8C,IACpB++B,QAAM,EACNvR,gBAAiBA,EACjBoB,eAAgBA,EAChB/R,YAAaA,EACbC,eAAgBA,EAChB+R,eAAgBA,EAChB2D,aAAcA,EACd/D,YAAaA,GACTsuB,IAGR,MACF,IAAK,eACL,IAAK,cACHG,EACEvpD,EAAAA,cAACozC,GAAO/0C,OAAAia,OAAA,CACN9Z,IAAK4qD,EAAe/8C,IACpB++B,QAAM,EACNvR,gBAAiBA,EACjBoB,eAAgBA,EAChB/R,YAAaA,EACbC,eAAgBA,EAChB+R,eAAgBA,EAChB2D,aAAcA,EACd/D,YAAaA,GACTsuB,IAGR,MACF,QACEG,EAAcvpD,EAAAA,cAAA,UAAIwpD,EAAAA,EAAAA,YAAWJ,EAAelpD,MAAM,6BAGtD,IAAKqpD,EAAe,OAAO,KAE3B,MAAME,EAAmBJ,EAAsBvrD,QAAQ4rD,GAAuE,YAAlBA,EAASxpD,OAC/GypD,EAAyBF,EAAiB,GAAKA,EAAiB,GAAGj+C,MAAQ,GAEjF,OACExL,EAAAA,cAAA,OAAKC,UAAU,kCAAkC2B,QAlDnCA,MACd8qB,EAAAA,EAAAA,IAAgB28B,EAAuBngC,EAAYyD,UACnDuO,EAAe8K,sBAAsBojB,EAAe/8C,IAAI,GAiDtDrM,EAAAA,cAAA,MAAIC,UAAU,8CACZD,EAAAA,cAACwkC,GAAa,CACZnuB,QAASszC,EACTxgC,eAAgBA,KAGnBogC,EAGP,CCvFe,SAASK,GAAwBtoD,GAC9C,MACE6nB,EAME7nB,EANF6nB,eACAC,EAKE9nB,EALF8nB,oBACAF,EAIE5nB,EAJF4nB,YACAs9B,EAGEllD,EAHFklD,QAAOqD,EAGLvoD,EAFFwoD,sBAAAA,OAAqB,IAAAD,GAAQA,EAC7BE,EACEzoD,EADFyoD,yBAGF,OAAK7gC,EAAY/c,YAAY69C,8BAK3BhqD,EAAAA,cAAA,OAAKO,MAAO,CAACyE,QAAS,UACpBhF,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,6FAEXA,EAAAA,cAAA,aACEA,EAAAA,cAAA,SACEE,KAAK,WACLC,QAAS2pD,EACT1pD,SAAUA,KACR+oB,EAAe6D,WAAU+B,EAAAA,EAAAA,IAAqBy3B,EAAS,yBAA0BsD,GAAuB,EAE1GtoD,WAAYuoD,IAA6B7gC,EAAY/c,YAAY69C,gCACjE,iCAGJhqD,EAAAA,cAAA,KAAGO,MAAO,CAACgS,UAAW,SAASvS,EAAAA,cAAA,cAAQ,uHAEvCA,EAAAA,cAAA,UACEwK,MAAOu/C,EACP3pD,SAAWC,IACT,MAAM4pD,EAAkD,KAAnB5pD,EAAEC,OAAOkK,MAAe,KAAOnK,EAAEC,OAAOkK,MAC7E2e,EAAe6D,WAAU+B,EAAAA,EAAAA,IAAqBy3B,EAAS,2BAA4ByD,GAA8B,EAEnHzoD,SAAUsoD,IAA0B5gC,EAAY/c,YAAY69C,+BAE5DhqD,EAAAA,cAAA,UAAQwK,MAAO,IAAI,4BAClB4e,EAAoB8gC,8BAA8BzpD,KAAI0pD,GACrDnqD,EAAAA,cAAA,UACExB,IAAK2rD,EAA6BrpD,GAClC0J,MAAO2/C,EAA6BrpD,IAEnCqpD,EAA6B3+C,WAlC/B,IAwCX,C,gBC/Ce,MAAM4+C,WAAgCpqD,EAAAA,UACnDgC,WAAAA,CAAYV,GACVW,MAAMX,GAENa,KAAKS,MAAQ,CAAC,CAChB,CAEAynD,uBAAAA,CAAwBrsD,GACtBA,EAAM0V,iBACNvR,KAAKO,SAAS,CAAC4nD,2BAAuBvqD,GACxC,CAEAwqD,sBAAAA,CAAuBC,GACrBroD,KAAKO,SAAS,CAAC4nD,sBAAuBE,GACxC,CAEAjmD,MAAAA,GACE,IAAIw6C,EA8BJ,OA7BI58C,KAAKS,MAAM0nD,wBACbvL,EAAQ/+C,EAAAA,cAAC8iB,EAAAA,EAAQ,CAACC,KAAM5gB,KAAKS,MAAM0nD,uBACjCtqD,EAAAA,cAAA,OAAKC,UAAU,uCAAuCM,MAAO,CAACgS,UAAW,SACvEvS,EAAAA,cAAA,WACEA,EAAAA,cAAA,OAAKO,MAAO,CAAC,WAAc,OAAQ,SAAY,UAC7CP,EAAAA,cAACyqD,GAAAA,EAAmB,CAClBh/C,QAAQ,iBACRC,WAAYvJ,KAAKS,MAAM0nD,sBAAsBxpD,GAC7C8K,UAAWzJ,KAAKS,MAAM0nD,sBAAsBI,kBAC5C5+C,YAAa,CACXhL,GAAIqB,KAAKb,MAAM4nB,YAAYpoB,GAC3B6pD,WAAYxoD,KAAKb,MAAM4nB,YAAY0hC,UACnCC,UAAW1oD,KAAKb,MAAM4nB,YAAY4hC,SAClC73C,MAAO9Q,KAAKb,MAAM4nB,YAAYjW,OAEhCjH,QAAS7J,KAAKb,MAAM4nB,YAAYld,QAChCG,YAAa,CAAC,EACdm+B,WAAS,EACTygB,0BAA2BvsB,EAAAA,GAAoBwsB,yBAGnDhrD,EAAAA,cAAA,WACEA,EAAAA,cAAA,UAAQ4B,QAASO,KAAKkoD,wBAAwBt1C,KAAK5S,OAAO,cAO5DnC,EAAAA,cAAAA,EAAAA,SAAA,KACL++C,EACD/+C,EAAAA,cAAC0jD,GAAkB,CACjBllD,IAAI,uBACJgN,MAAM,wBAENxL,EAAAA,cAAA,UAAKmC,KAAKb,MAAM+nB,WAAW7d,MAAM8e,MACjCtqB,EAAAA,cAAA,UAEImC,KAAKb,MAAMkzB,eAAey2B,gBAAgBxqD,KAAK+pD,IAC3C,IAAIU,EAAYV,EAAeW,uBAAyB,CAACj+C,MAAO,OAAS,CAAC,EAC1E,OAAOlN,EAAAA,cAAA,MAAIxB,IAAKgsD,EAAe1pD,IAC7Bd,EAAAA,cAAA,KAAG6D,KAAM,GAAItD,MAAO2qD,EACjBtpD,QAASA,IAAMO,KAAKooD,uBAAuBC,IAAkBA,EAAeY,eAC5E,MAMnB,E,kgCChEa,MAAMC,WAAqBrrD,EAAAA,UACxCgC,WAAAA,CAAYV,GACVW,MAAMX,GACNa,KAAKS,MAAQ,CAAC,CAChB,CAEAynD,uBAAAA,CAAwBrsD,GACtBA,EAAM0V,iBACNvR,KAAKO,SAAS,CAAC4nD,2BAAuBvqD,GACxC,CAEAwqD,sBAAAA,CAAuBC,GACrBxsD,MAAM0V,iBACNvR,KAAKO,SAAS,CAAC4nD,sBAAuBE,GACxC,CAEAc,4BAAAA,CAA6BttD,GAC3BA,EAAM0V,iBACNvR,KAAKO,SAAS,CAAC6oD,gCAA4BxrD,GAC7C,CAEAyrD,2BAAAA,CAA4BlH,GAC1BtmD,MAAM0V,iBACNvR,KAAKO,SAAS,CAAC6oD,2BAA4BjH,GAC7C,CAEA//C,MAAAA,GACE,IAAIw6C,EA4BA0M,EACJ,GA5BItpD,KAAKS,MAAM0nD,wBACbvL,EAAQ/+C,EAAAA,cAAC8iB,EAAAA,EAAQ,CAACC,KAAM5gB,KAAKS,MAAM0nD,uBACjCtqD,EAAAA,cAAA,OAAKC,UAAU,uCAAuCM,MAAO,CAACgS,UAAW,SACvEvS,EAAAA,cAAA,OAAKO,MAAO,CAAC,WAAc,OAAQ,SAAY,UAC7CP,EAAAA,cAACyqD,GAAAA,EAAmB,CAClBh/C,QAAQ,iBACRC,WAAYvJ,KAAKS,MAAM0nD,sBAAsBxpD,GAC7C8K,UAAWzJ,KAAKS,MAAM0nD,sBAAsBI,kBAC5C5+C,YAAa,CACXhL,GAAIqB,KAAKb,MAAM4nB,YAAYpoB,GAC3B6pD,WAAYxoD,KAAKb,MAAM4nB,YAAY0hC,UACnCC,UAAW1oD,KAAKb,MAAM4nB,YAAY4hC,SAClC73C,MAAO9Q,KAAKb,MAAM4nB,YAAYjW,OAEhCjH,QAAS7J,KAAKb,MAAM4nB,YAAYld,QAChCG,YAAa,CAAC,EACdm+B,WAAS,EACTygB,0BAA2BvsB,EAAAA,GAAoBwsB,yBAGnDhrD,EAAAA,cAAA,WACEA,EAAAA,cAAA,UAAQ4B,QAASO,KAAKkoD,wBAAwBt1C,KAAK5S,OAAO,aAO9DA,KAAKS,MAAM2oD,2BAA4B,CACzC,IAAIzO,EAMA4O,EAMAC,EAVF7O,EADC36C,KAAKS,MAAM2oD,2BAA2BK,iCACnB5rD,EAAAA,cAAA,SAAOO,MAAO,CAAC2M,MAAO,QAAS/K,KAAKS,MAAM2oD,2BAAsD,2BAEjGvrD,EAAAA,cAAAA,EAAAA,SAAA,KAAGmC,KAAKS,MAAM2oD,2BAAsD,2BAIvFG,EADCvpD,KAAKS,MAAM2oD,2BAA2BM,6BACvB7rD,EAAAA,cAAA,SAAOO,MAAO,CAAC2M,MAAO,QAAS/K,KAAKS,MAAM2oD,2BAAkD,uBAE7FvrD,EAAAA,cAAAA,EAAAA,SAAA,KAAGmC,KAAKS,MAAM2oD,2BAAkD,uBAI/EI,EADCxpD,KAAKS,MAAM2oD,2BAA2BO,cACvB9rD,EAAAA,cAAA,SAAOO,MAAO,CAAC2M,MAAO,QAAS/K,KAAKS,MAAM2oD,2BAAsD,2BAEjGvrD,EAAAA,cAAAA,EAAAA,SAAA,KAAGmC,KAAKS,MAAM2oD,2BAAsD,2BAGrFE,EAA0BzrD,EAAAA,cAAC8iB,EAAAA,EAAQ,CAACC,KAAM5gB,KAAKS,MAAM2oD,2BAA4B3pD,QAAUvB,GAAMA,EAAE8U,mBACjGnV,EAAAA,cAAA,OAAKC,UAAU,uCAAuCM,MAAO,CAACgS,UAAW,SACvEvS,EAAAA,cAAA,OAAKO,MAAO,CAAC,WAAc,OAAQ,SAAY,UAC7CP,EAAAA,cAACyqD,GAAAA,EAAmB,CAClB/+C,WAAYvJ,KAAKS,MAAM2oD,2BAA2BQ,oBAClDngD,UAAWzJ,KAAKS,MAAM2oD,2BAA2B9D,iBAAiBC,4BAClE57C,YAAa,CACXhL,GAAIqB,KAAKb,MAAM4nB,YAAYpoB,GAC3B6pD,WAAYxoD,KAAKb,MAAM4nB,YAAY0hC,UACnCC,UAAW1oD,KAAKb,MAAM4nB,YAAY4hC,SAClC73C,MAAO9Q,KAAKb,MAAM4nB,YAAYjW,OAEhCjH,QAAS7J,KAAKb,MAAM4nB,YAAYld,QAChCG,YAAa,CAAC,EACdm+B,WAAS,EACTygB,0BAA2BvsB,EAAAA,GAAoBwsB,yBAGnDhrD,EAAAA,cAAA,WAAKA,EAAAA,cAAA,UAAI,mBAAiB2rD,IAAyB3rD,EAAAA,cAAA,WACnDA,EAAAA,cAAA,WAAKA,EAAAA,cAAA,UAAM,aAAYmC,KAAKS,MAAM2oD,2BAA2C,mBAAevrD,EAAAA,cAAA,WAC5FA,EAAAA,cAAA,WAAKA,EAAAA,cAAA,UAAM,aAAYmC,KAAKS,MAAM2oD,2BAA2B,iBAA0BvrD,EAAAA,cAAA,WACvFA,EAAAA,cAAA,WAAKA,EAAAA,cAAA,UAAM,eAAcmC,KAAKS,MAAM2oD,2BAAuC,eAAevrD,EAAAA,cAAA,WAC1FA,EAAAA,cAAA,WAAKA,EAAAA,cAAA,UAAM,mBAAkBmC,KAAKS,MAAM2oD,2BAA2C,mBAAevrD,EAAAA,cAAA,WAClGA,EAAAA,cAAA,WAAKA,EAAAA,cAAA,UAAM,WAAUmC,KAAKS,MAAM2oD,2BAAmC,WAAevrD,EAAAA,cAAA,WAClFA,EAAAA,cAAA,WAAKA,EAAAA,cAAA,UAAM,sBAAqBmC,KAAKS,MAAM2oD,2BAAmC,OAAIppD,KAAKS,MAAM2oD,2BAA2BS,+BAA+BroD,WAAa,OAAgB3D,EAAAA,cAAA,WACpLA,EAAAA,cAAA,WAAKA,EAAAA,cAAA,UAAI,uBAAqB88C,IAA6B98C,EAAAA,cAAA,WAC3DA,EAAAA,cAAA,WAAKA,EAAAA,cAAA,UAAI,mBAAiB0rD,IAAyB1rD,EAAAA,cAAA,WACnDA,EAAAA,cAAA,WAAKA,EAAAA,cAAA,UAAM,2BAA0BmC,KAAKS,MAAM2oD,2BAAuC,eAAevrD,EAAAA,cAAA,WACtGA,EAAAA,cAAA,WAAKA,EAAAA,cAAA,UAAM,+BAA8BmC,KAAKS,MAAM2oD,2BAA2C,mBAAevrD,EAAAA,cAAA,WAC9GA,EAAAA,cAAA,WAAKA,EAAAA,cAAA,UAAM,sCAAqCmC,KAAKS,MAAM2oD,2BAAkD,0BAAevrD,EAAAA,cAAA,WAC5HA,EAAAA,cAAA,WACAA,EAAAA,cAAA,WACEA,EAAAA,cAAA,UAAQ4B,QAASO,KAAKmpD,6BAA6Bv2C,KAAK5S,OAAO,WAIvE,CAEA,IAAI8pD,EAAa,GACbC,EAAW,CAAC,EACZC,EAAM,EACPhqD,KAAKb,MAAMkzB,eAAeoB,kCAAoCzzB,KAAKb,MAAMkzB,eAAeoB,iCAAiCv2B,OAAS,GACnI8C,KAAKb,MAAMkzB,eAAeoB,iCAAiC72B,SAASqtD,IAClE,IAAIC,EAAY,CACd3kD,mBAAoB0kD,EAAgC1kD,mBAAmBjF,KACvEkJ,eAAgBygD,EAAgCt2B,gBAAgBs1B,cAChEkB,sBAAuBF,EAAgCt2B,gBAAgBq1B,uBACvEZ,uBAAwBpoD,KAAKooD,uBAAuBx1C,KAAK5S,MACzDoqD,oBAAqBH,EAAgCt2B,iBAEF,GAAlDs2B,EAAgCI,UAAUntD,QAC3C8sD,GAAU,EACVD,EAAQrxD,GAAAA,GAAA,GACHwxD,GAAS,IACZvrD,GAAIqrD,EACJM,oBAAqB,GACrBC,YAAa,KAEfT,EAAWrtD,KAAKstD,IAEhBE,EAAgCI,UAAUztD,SAAS4tD,IACjDR,GAAU,EACVD,EAAQrxD,GAAAA,GAAA,GACHwxD,GAAS,IACZvrD,GAAIqrD,EACJM,oBAAqBE,EAASC,wBAC9BF,YAAaC,EAASE,cACtBpI,YAAakI,EAASlI,YACtBqI,yBAA0BH,EAC1BnB,4BAA6BrpD,KAAKqpD,4BAA4Bz2C,KAAK5S,MACnE4qD,qBAAsBJ,EAASK,wBAC/BC,2BAA4BN,EAASO,gBACrCC,sCAAuCR,EAASS,yBAElDnB,EAAWrtD,KAAKstD,EAAS,GAE7B,IAIJ,IAAImB,EAAe,KAWnB,OATEA,EADoB,GAAnBpB,EAAW5sD,OACGW,EAAAA,cAAA,UAAI,4CAEJA,EAAAA,cAACstD,GAAAA,EAAa,CAC3BC,UAAU,WACVC,YAAY,mCACZ/mD,KAAMwlD,IAIFjsD,EAAAA,cAAAA,EAAAA,SAAA,KACL++C,EACA0M,EACDzrD,EAAAA,cAAC0jD,GAAkB,CACjBllD,IAAI,WACJgN,MAAQ,qBAAoBrJ,KAAKb,MAAM+nB,WAAW7d,MAAM8e,KAAKzqB,MAAM,KAAK,KACxEmkD,MAAM,GAENhkD,EAAAA,cAAA,SAAG,uIACFqtD,GAGP,EC/Ka,SAASI,IAA6B,MACnD7sD,EAAK,SACL+rD,EAAW,GAAE,MACbniD,EAAQ,EAAC,UACT82C,GAAY,EAAK,QACjB3C,EAAU,GAAE,SACZpK,EAAW,EAAC,YACZrrB,EAAW,eACXgS,EAAc,eACdD,EAAc,gBACdpB,EAAe,YACfiB,EAAW,aACX+D,IAEA,OACE7+B,EAAAA,cAAA,OAAKC,UAAY,mCAAkCqhD,GAAa,eAC7DqL,EAED3sD,EAAAA,cAACo0C,GAAY,CACXl0C,KAAM,YACNmM,IAAM,uBAAsBzL,IAC5B4J,MAAOA,EACPo7B,aAAc0b,EACd/M,SAAUA,EACVprB,gBAAgBmgC,EAAAA,GAAAA,MAChBpgC,YAAaA,EACbgS,eAAgBA,EAChBD,eAAgBA,EAChBpB,gBAAiBA,EACjBiB,YAAaA,EACb+D,aAAcA,IAGhB7+B,EAAAA,cAAA,UAAI,sBACJA,EAAAA,cAAC02C,GAAY,CACXx2C,KAAM,YACNmM,IAAM,uBAAsBzL,IAC5B4J,MAAOm0C,EACP/Y,aAAc0b,EACdtH,eAAgB,IAChB7wB,gBAAgBmgC,EAAAA,GAAAA,MAChBpgC,YAAaA,EACbgS,eAAgBA,EAChBD,eAAgBA,EAChBpB,gBAAiBA,EACjBiB,YAAaA,EACb+D,aAAcA,IAItB,CCzDA,MAAM6uB,GAAkB,CACtB,yEACA,mFACA,wEClBa,SAASC,GAAOrsD,GAC7B,MAAAssD,EAGItsD,EAFFusD,QAAAA,OAAO,IAAAD,GAAKA,EAAAE,EAEVxsD,EADFK,SAGF,OAAIksD,OAHM,IAAAC,EAAC,GAAEA,EAMJ,IAEX,CCTe,SAASC,GAAQzsD,GAc1BA,EAZFkJ,MADF,MAEEpK,EAWEkB,EAXFlB,SAAQ4tD,EAWN1sD,EAVF2sD,QAAAA,OAAO,IAAAD,GAAKA,EAAAE,EAUV5sD,EATFgxB,UAAAA,OAAS,IAAA47B,GAAMA,EACfC,EAQE7sD,EARF6sD,YAAW7qB,EAQThiC,EAPFsH,YAAAA,OAAW,IAAA06B,EAAC,GAAEA,EAAAwqB,EAOZxsD,EANFK,SAAAA,OAAQ,IAAAmsD,EAAC,GAAEA,EACX99B,EAKE1uB,EALF0uB,OACAo+B,EAIE9sD,EAJF8sD,gBAAeC,EAIb/sD,EAHFgtD,gBAAAA,OAAe,IAAAD,GAAMA,EACZE,GAEPjtD,EAFFrB,UAEEqB,EADFktD,cAAAA,OAAY,IAAAD,GAAMA,EAGpB,SAAShgD,EAAWlO,GACa,MAA1BA,EAAEouD,OAASpuD,EAAEquD,WAChBruD,EAAEqT,iBACF06C,EAAgB/tD,GAEpB,CAEA,OAAOL,EAAAA,cAAC2tD,GAAWrsD,EAChB2sD,GAAW37B,EACVk8B,EACExuD,EAAAA,cAAA,SACExB,IAAI,iBACJyB,UAAU,iBACVC,KAAK,OACLsK,MAAO7I,EACPiH,YAAaA,EACbxI,SAAUA,EACV4vB,OAAQA,EACRzhB,WAAYA,EACZkgB,UAAW6/B,IAGbtuD,EAAAA,cAAA,SACExB,IAAI,iBACJyB,UAAU,iBACVC,KAAK,OACL0jB,aAAcjiB,EACdiH,YAAaA,EACbxI,SAAUA,EACV4vB,OAAQA,EACRzhB,WAAYA,EACZkgB,UAAW6/B,IAIftuD,EAAAA,cAAA,QAAM4B,QAASusD,GAAcxsD,GAGnC,CCpDe,SAASgtD,GAAartD,GAe/BA,EAbFkJ,MADF,MAEEpK,EAYEkB,EAZFlB,SAAQ4tD,EAYN1sD,EAXF2sD,QAAAA,OAAO,IAAAD,GAAKA,EAAAE,EAWV5sD,EAVFgxB,UAAAA,OAAS,IAAA47B,GAAMA,EACfC,EASE7sD,EATF6sD,YACAC,EAQE9sD,EARF8sD,gBAAe9qB,EAQbhiC,EAPFsH,YAAAA,OAAW,IAAA06B,EAAC,GAAEA,EAAAwqB,EAOZxsD,EANFK,SAAAA,OAAQ,IAAAmsD,EAAC,GAAEA,EACX99B,EAKE1uB,EALF0uB,OAAMq+B,EAKJ/sD,EAJFgtD,gBAAAA,OAAe,IAAAD,GAAMA,EAAAO,EAInBttD,EAHFmF,KAAAA,OAAI,IAAAmoD,EAAC,EAACA,EACN3uD,EAEEqB,EAFFrB,UAASsuD,EAEPjtD,EADFktD,aAAAA,OAAY,IAAAD,GAAMA,EAGpB,SAAShgD,EAAWlO,GACa,MAA1BA,EAAEouD,OAASpuD,EAAEquD,WAChBruD,EAAEqT,iBACF06C,EAAgB/tD,GAEpB,CAEA,OAAOL,EAAAA,cAAC2tD,GAAWrsD,EAChB2sD,GAAW37B,EACVk8B,EACExuD,EAAAA,cAAA,YACExB,IAAI,sBACJyB,UAAU,sBACVuK,MAAO7I,EACPiH,YAAaA,EACbxI,SAAUA,EACV4vB,OAAQA,EACRzhB,WAAYA,EACZkgB,UAAW6/B,EACX7nD,KAAMA,IAGRzG,EAAAA,cAAA,YACExB,IAAI,sBACJyB,UAAU,sBACV2jB,aAAcjiB,EACdiH,YAAaA,EACbxI,SAAUA,EACV4vB,OAAQA,EACRzhB,WAAYA,EACZkgB,UAAW6/B,EACX7nD,KAAMA,IAIVzG,EAAAA,cAAA,KAAGC,UAAW4B,EAAW5B,EAAW,iBAAkB2B,QAASusD,GAC5DxsD,GAIT,C,k/BCjDA,MAAMktD,GAAS,CACb,CAACC,GAAAA,IAAY,YACb,CAACC,GAAAA,IAAW,WACZ,CAAC/jB,GAAAA,IAAQ,SAGLgkB,GAAY,CAChB,CAAChkB,GAAAA,IAAQ,wEAGLikB,GAAkB,CACtB,CAACH,GAAAA,ICRY,UAAuC,IACpDziD,EAAG,QACHgK,EAAU,GAAE,UACZic,EAAS,cACT48B,EAAa,YACbC,EAAW,mBACXC,GAAqB,EAAK,qBAC1BC,GAAuB,EAAK,wBAC5BC,EAAuB,sBACvBC,IAEA,OACEvvD,EAAAA,cAAA,OAAKC,UAAU,oCACbD,EAAAA,cAAA,OAAKC,UAAU,4CACbD,EAAAA,cAAC+tD,GAAO,CACNvjD,MAAO6L,EACPzN,YAAY,qBACZ0lD,iBAAe,EACfh8B,UAAWA,EACX67B,YAAae,EACbl/B,OAAQm/B,EACRf,gBAAiBe,GAEhB94C,IAGLrW,EAAAA,cAAA,OAAKC,UAAU,4CACbD,EAAAA,cAAA,KAAG4B,QAASA,IAAM0tD,EAAwBjjD,GAAMgjD,GAAuBpvD,UAAW4B,EAAW,eAAgB,YAAa,CAAC20C,OAAQ6Y,MACnIrvD,EAAAA,cAAA,KAAG4B,QAASA,IAAM2tD,EAAsBljD,GAAMpM,UAAW4B,EAAW,YAAa,UAAW,CAAC20C,OAAQ4Y,OAI7G,EDvBE,CAACL,GAAAA,IEfY,UAAqC,QAClD14C,EAAU,GAAE,UACZic,EAAS,cACT48B,EAAa,YACbC,IAEA,OACEnvD,EAAAA,cAAA,OAAKC,UAAU,kCACbD,EAAAA,cAAC2uD,GAAY,CACXnkD,MAAO6L,EACPzN,YAAY,mBACZ0lD,iBAAe,EACfh8B,UAAWA,EACX67B,YAAae,EACbl/B,OAAQm/B,EACRf,gBAAiBe,GAEhB94C,GAIT,EFLE,CAAC20B,GAAAA,IGIY,SAAkC1pC,GAC/C,MAAA6hC,EAYI7hC,EAXF+U,QAAAA,OAAO,IAAA8sB,EAAG,GAAEA,EACZ7Q,EAUEhxB,EAVFgxB,UACA48B,EASE5tD,EATF4tD,cACAC,EAQE7tD,EARF6tD,YACAK,EAOEluD,EAPFkuD,gBACAv0B,EAME35B,EANF25B,eACAC,EAKE55B,EALF45B,eACArB,EAIEv4B,EAJFu4B,gBACA3Q,EAGE5nB,EAHF4nB,YACA2V,EAEEv9B,EAFFu9B,aACA/D,EACEx5B,EADFw5B,YAGF,IAAIyuB,EAAa3nD,EACjB,GAAI4tD,EAAiB,CACnB,MAAMC,GAAWC,EAAAA,EAAAA,MAAKF,GAEtB5tD,EAAUA,MACR8qB,EAAAA,EAAAA,IAAgB8iC,EAAiBtmC,EAAYyD,UAC7CuO,EAAe8K,sBAAsBypB,EAASpjD,IAAI,EAGpD,MAAM8c,GAAiBmgC,EAAAA,GAAAA,MACvB,OAAQmG,EAASvvD,MACf,IAAK,YACHqpD,EACEvpD,EAAAA,cAACg0C,GAAY31C,OAAAia,OAAA,CACX9Z,IAAKixD,EAASpjD,IACd++B,QAAM,EACNnQ,eAAgBA,EAChBpB,gBAAiBA,EACjBqB,eAAgBA,EAChB/R,eAAgBA,EAChBD,YAAaA,EACb2V,aAAcA,EACd/D,YAAaA,GACT20B,IAGR,MACF,IAAK,eACL,IAAK,cACHlG,EACEvpD,EAAAA,cAACozC,GAAO/0C,OAAAia,OAAA,CACN9Z,IAAKixD,EAASpjD,IACd++B,QAAM,EACNnQ,eAAgBA,EAChBpB,gBAAiBA,EACjBqB,eAAgBA,EAChB/R,eAAgBA,EAChBD,YAAaA,EACb2V,aAAcA,EACd/D,YAAaA,GACT20B,IAGR,MAKF,QACElG,EAAcvpD,EAAAA,cAAA,UAAIy+B,EAAAA,EAAAA,WAAUgxB,EAASvvD,MAAM,yBAE/CqpD,EACEvpD,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,UAAI,YACHupD,EACDvpD,EAAAA,cAAA,WAGN,CAEA,OACEA,EAAAA,cAAA,OAAKC,UAAW4B,EAAW,8BAA+B,CAAC6oC,MAAO8kB,IAAmB5tD,QAASA,GAC3F2nD,EACDvpD,EAAAA,cAAA,UAAI,eACJA,EAAAA,cAAC2uD,GAAY,CACXnkD,MAAO6L,EACPzN,YAAY,gBACZ0lD,iBAAe,EACfh8B,UAAWA,EACX67B,YAAae,EACbl/B,OAAQm/B,EACRf,gBAAiBe,GAEhB94C,GAIT,GHzEe,SAASs5C,GAA2BruD,GACjD,MACE0iD,EASE1iD,EATF0iD,KACAnqB,EAQEv4B,EARFu4B,gBACAqB,EAOE55B,EAPF45B,eACAhS,EAME5nB,EANF4nB,YACA0mC,EAKEtuD,EALFsuD,qBACAC,EAIEvuD,EAJFuuD,iBAAgBC,EAIdxuD,EAHFyuD,UAAAA,OAAS,IAAAD,EAAG,GAAEA,EAAAE,EAGZ1uD,EAFF2uD,SAAAA,OAAQ,IAAAD,EAAG,GAAEA,EAAAE,EAEX5uD,EADF6uD,MAAAA,OAAK,IAAAD,EAAG,GAAEA,EAIVE,EAMER,EANFQ,YACAC,EAKET,EALFS,oBACAplB,EAIE2kB,EAJF3kB,mBACAqlB,EAGEV,EAHFU,iBACAC,EAEEX,EAFFW,gBACAC,EACEZ,EADFY,kBAIF,IACIC,EADAC,EAAQ,GASZ,OAAQN,GACN,KAAKtB,GAAAA,GACH2B,EAAY,CACVxS,QAAS/0B,EAAYynC,aACrBC,WAAY1nC,EAAY2nC,gBACxBpN,WAAYv6B,EAAY4nC,gBACxBxB,wBAAyBpmC,EAAYomC,wBACrCC,sBAAuBrmC,EAAYqmC,uBAGrCmB,EAAQX,EACR,MACF,KAAKhB,GAAAA,GACH0B,EAAY,CACVxS,QAAS/0B,EAAY6nC,WACrBH,WAAY1nC,EAAY8nC,cACxBvN,WAAYv6B,EAAY+nC,eAG1BP,EAAQT,EACR,MACF,KAAKjlB,GAAAA,GACHylB,EAAY,CACVxS,QAAS/0B,EAAY2hB,QACrB+lB,WAAY1nC,EAAYgoC,WACxBzN,WAAYv6B,EAAYyhB,WACxBzhB,YAAaA,GAGfwnC,EAjFN,SAA4BP,EAAuBgB,GACjD,MAAMC,EAAgBjB,EAAM1vD,KAAK4wD,GAASA,EAAKvmB,eAAchtC,QAAQuO,GAAQA,IACvEilD,GAAmBC,EAAAA,EAAAA,IAAkBJ,GAAMvlC,GAASA,EAAK1rB,MAAQkxD,EAAc9pD,SAASskB,EAAKvf,OAC7FmlD,EAAyBnzD,OAAOozD,YAAYH,EAAiB7wD,KAAK+uD,GAAgC,EAACE,EAAAA,EAAAA,MAAKF,GAAiBnjD,IAAKmjD,MAEpI,OAAOW,EAAM1vD,KAAK4wD,GAAWx2D,GAAAA,GAAA,GAAWw2D,GAAI,IAAE7B,gBAAiBgC,EAAuBH,EAAKvmB,iBAC7F,CA2Ec4mB,CAAmBvB,EAAO7uD,GAClC,MACF,QACE,OAAO,KAGX,MAAMqwD,EAAiB1C,GAAgBmB,GACjCwB,EAAgBlB,EAAMjwD,KAAKyG,GAe7BlH,EAAAA,cAAC2xD,EAActzD,OAAAia,OAAA,GACTpR,EAAI,CACR1I,IAAK0I,EAAKmF,IACVimB,YAAak+B,GAAqBtpD,EAAKmF,MAAQmkD,EAC/CtB,cAlBkBA,IAAMjkB,EAAmB/jC,EAAKmF,KAmBhD8iD,YAjBiB9uD,KACfmmC,EAAAA,EAAAA,UAAQ17B,EAAAA,EAAAA,MAAKzK,EAAEC,OAAOkK,SACxBimD,EAAUhN,WAAWv8C,EAAKmF,KAC1B6uB,EAAe8K,sBAAsB,QAErCyqB,EAAUG,WAAW1pD,EAAKmF,IAAK,CAACgK,QAAShW,EAAEC,OAAOkK,QAClD8lD,EAAiBppD,EAAKmF,KACtBwlD,EAAW3qD,EAAKhH,MAClB,EAUEkvD,qBAAsBS,GAAoB3oD,EAAKmF,MAAQwjD,EACvDh2B,gBAAiBA,EACjBqB,eAAgBA,GACZu1B,MAKJoB,EAAc3xD,IAClB,MAAMusC,EAAW5S,EAAgBruB,MAEjC,OAAOtL,GACL,IAAK,YACHxG,GAAAA,EAAgBC,MAAM,kBAAmB,CAAEkZ,KAAM9Y,OAAO6J,SAASC,KAAMiP,OAAQ,OAAQlL,KAAM6kC,IAC7F,MACF,IAAK,UACH/yC,GAAAA,EAAgBC,MAAM,gBAAiB,CAAEkZ,KAAM9Y,OAAO6J,SAASC,KAAMiP,OAAQ,OAAQlL,KAAM6kC,IAC3F,MACF,IAAK,OACH/yC,GAAAA,EAAgBC,MAAM,gCAAiC,CAAEkZ,KAAM9Y,OAAO6J,SAASC,KAAMiP,OAAQ,OAAQlL,KAAM6kC,IAE/G,EAGF,OACEzsC,EAAAA,cAAC0jD,GAAkBrlD,OAAAia,OAAA,CACjB9M,MAAOqjD,GAAOuB,GACdzM,QAASqL,GAAUoB,GACnBxM,WAAY2M,EACZ1M,eAAgBwM,EAChBtM,WAAS,EACTC,KAAMA,EACN/Y,mBAAoBA,EACpB/P,eAAgBA,GACZu1B,GAEHmB,EAGP,C,eI1KA,SAASE,GAAYxwD,GACnB,MAAMywD,EAAW,CACf1/C,OAAQ,OACR/H,MAAO,OACPlJ,gBAAkB,QAAOE,EAAM0wD,cAC/BC,aAAc,MACd5nD,QAAS,eACTgZ,YAAa,MACb7iB,WAAY,OAGd,OACER,EAAAA,cAAA,QACEC,UAAU,MACVM,MAAOwxD,GAGb,CASe,SAASG,GAAgB5wD,GACtC,OACEtB,EAAAA,cAAA,OAAKO,MAAO,CAAC8J,QAAS,SACpBrK,EAAAA,cAAA,OAAKO,MAAO,CAAC4xD,SAAU,IACrBnyD,EAAAA,cAAA,MAAIO,MAAO,CAACoR,aAAc,IACvBrQ,EAAM8wD,WACPpyD,EAAAA,cAAC8xD,GAAW,CAACE,WAAY1wD,EAAM0wD,cAEjChyD,EAAAA,cAAA,KAAGO,MAAO,CAACuE,SAAU,OAAQoI,MAAO,WAAYyE,aAAc,IAAKrQ,EAAM+wD,YAAaC,EAAAA,GAAAA,IAAoBhxD,EAAM+wD,aAElHryD,EAAAA,cAAA,WACGsB,EAAMK,UAIf,CCrCe,SAAS4wD,GAA6BjxD,GACnD,MACE4nB,EAGE5nB,EAHF4nB,YACAC,EAEE7nB,EAFF6nB,eACAqpC,EACElxD,EADFkxD,gBAGF,OACExyD,EAAAA,cAAA,OAAKC,UAAU,kCACbD,EAAAA,cAACkyD,GAAe,CACdE,WAAYI,EAAgBC,iBAC5BT,WAAY7oC,EAAe2a,YAAY0uB,EAAgBrf,WACvDkf,UAAWG,EAAgBvxD,aAEzBuxD,EAAgBrf,YAAcjqB,EAAYpoB,IAAMqoB,EAAe6Q,mBAAqBh6B,EAAAA,cAAA,KAAGO,MAAO,CAAC8iB,YAAa,OAAQpjB,UAAU,cAAc2B,QAAUvB,IACtJA,EAAE8U,kBACFgU,EAAe6D,WAAU0lC,EAAAA,EAAAA,IAA+BF,EAAgBG,qBAAqB,KAGjG3yD,EAAAA,cAAA,SAAIwyD,EAAgBloC,MAG1B,C,gBClCA,UACEsoC,QAAS,CACPxxD,gBAAiB,OACjB0D,SAAU,GACVC,WAAY,UAGd,aAAc,CACZ6tD,QAAS,CACPxT,WAAY,YACZyT,UAAW,IAEbC,YAAa,CACX9tD,QAAS,EACT0e,OAAQ,yBAEVqvC,MAAO,CACL/tD,QAAS,EACT0e,OAAQ,qBAIZ,cAAe,CACbrZ,QAAS,eACTC,MAAO,IAEPwoD,YAAa,CACX9tD,QAAS,EACT0e,OAAQ,yBAEVqvC,MAAO,CACL/tD,QAAS,EACT0e,OAAQ,cAIZsvC,YAAa,CACXC,KAAM,CACJ7xD,gBAAiB,QACjBsiB,OAAQ,6BACR5e,SAAU,IAEZoC,KAAM,CACJlC,QAAS,WACTge,aAAc,6BACd,WAAY,CACV5hB,gBAAiB,cC9CzB,IACEA,gBAAiB,WCuBJ,MAAM8xD,WAAwBlzD,EAAAA,UAC3CgC,WAAAA,CAAYV,GACVW,MAAMX,GAENa,KAAKS,MAAQ,CACXuwD,cAAe,GAEnB,CAEAnlC,YAAAA,CAAahwB,GACXmE,KAAKO,SAAS,CAACywD,cAAen1D,EAAMsC,OAAOkK,OAC7C,CAEAjG,MAAAA,GACE,MAAM6uD,EAAQA,KACZjxD,KAAKb,MAAM+xD,WAAWlxD,KAAKS,MAAMuwD,eACjChxD,KAAKO,SAAS,CAACywD,cAAe,IAAI,EAc9BviC,EAAsBC,EAAAA,QAC5B,OACE7wB,EAAAA,cAAC4wB,EAAc,CACbE,SAAU,CACRH,OAAS3yB,IAA0Bo1D,KAAgB,GACnDE,UAAYt1D,IAA0Bo1D,KAAgB,KAGxDpzD,EAAAA,cAAA,OAAKC,UAAU,oBAAoB2B,QAAUvB,GAAMA,EAAE8U,mBACrDnV,EAAAA,cAACuzD,GAAAA,EAAa,CACZhzD,MAAOizD,GACPhpD,MAAOrI,KAAKS,MAAMuwD,cAClB/yD,SAAU+B,KAAK6rB,aAAajZ,KAAK5S,MACjCyG,YAAY,UACZ6lB,UAAWtsB,KAAKb,MAAMmtB,UACtBglC,QAAStxD,KAAKb,MAAMmyD,SAEpBzzD,EAAAA,cAAC0zD,GAAAA,EAAO,CACNnzD,MAAOozD,GACPC,QAAQ,IACR/5D,KAhCY2D,IAClB,MAAMq2D,EAAQ1xD,KAAKb,MAAMwyD,QACzB,IAAKt2D,EACH,OAAOq2D,EAMV,OAHuBA,EAAM/1D,QAAQiO,GAClCA,EAAK1B,QAAQpE,cAAcqB,SAAS9J,IAEnB,EAwBbu2D,OAAQ,2BAKV5xD,KAAKS,MAAMuwD,cAAc9zD,OAAS,GAAK8C,KAAKb,MAAMwnD,WAClD9oD,EAAAA,cAAA,OAAKC,UAAU,6BACbD,EAAAA,cAACioB,EAAAA,EAAS,CACRxlB,KAAK,MACLkT,aAAW,EACXnU,SAA8C,IAApCW,KAAKS,MAAMuwD,cAAc9zD,OACnCuC,QAASwxD,IAEXpzD,EAAAA,cAACioB,EAAAA,EAAS,CACRxlB,KAAK,SACLkT,aAAW,EACX/T,QAASA,KAAOO,KAAKO,SAAS,CAACywD,cAAe,KAAMhxD,KAAKb,MAAM0yD,eAAe,MAO1F,ECnFa,SAASC,GAA2B3yD,GACjD,MACE4nB,EAIE5nB,EAJF4nB,YACAC,EAGE7nB,EAHF6nB,eACA+qC,EAEE5yD,EAFF4yD,cACAC,EACE7yD,EADF6yD,qBASF,OACEn0D,EAAAA,cAAA,OAAKC,UAAU,iCAAiC2B,QAPlCA,KACVuyD,IACFznC,EAAAA,EAAAA,IAAgBynC,EAAsBjrC,EAAYyD,SACpD,GAKE3sB,EAAAA,cAACkyD,GAAe,CACdE,WAAY8B,EAAczB,iBAC1BT,WAAY7oC,EAAe2a,YAAYowB,EAAc/gB,WACrDkf,UAAW6B,EAAcjzD,aAEvBkoB,EAAe6Q,kBAAoBk6B,EAAc/gB,YAAcjqB,EAAYpoB,KAAOd,EAAAA,cAAA,KAAGO,MAAO,CAAC8iB,YAAa,OAAQpjB,UAAU,cAAc2B,QAAUvB,IACpJA,EAAE8U,kBACFgU,EAAe6D,WAAUonC,EAAAA,EAAAA,IAA6BF,EAAcG,oBAAoB,KAG5Fr0D,EAAAA,cAAA,SAAIk0D,EAAc5pC,MAGxB,C,kgCCxBe,MAAMgqC,WAA2Ct0D,EAAAA,UAC9DgC,WAAAA,CAAYV,GACVW,MAAMX,GAAO,KAUfiB,qBAAwBvE,IACtBoK,OAAM2W,EAAAA,EAAAA,GAAU,6BAA4B/gB,EAAM8C,MAAO,CACvDskB,OAAQ,MACR7qB,QAAS+Z,aAAaigD,oBAAoB,CACxC,OAAU,mBACV,eAAgB,qBAElBtpC,KAAMvrB,KAAKC,UAAU,CACnB60D,wBAAyB,CACvBr0D,SAAUnC,EAAMmC,aAIrBgL,MAAKoJ,IACJ,IAAKA,EAAS8V,GACZ,MAAM,IAAIE,MAAMhW,EAASkgD,WAC3B,IAED//C,OAAMC,IACLC,QAAQwK,IAAIzK,EAAM,IAGpB,IAAI7T,EAAK9C,EAAM8C,GACXX,GAAWgC,KAAKS,MAAM9B,GAAIX,QAE9BgC,KAAKO,SAAS,CAAC,CAAC5B,GAAEjG,GAAAA,GAAA,GAAOsH,KAAKS,MAAM9B,IAAG,IAAEX,QAASA,KAAU,EAjC5D,IAAIu0D,EAAevyD,KAAKb,MAAMqzD,kBAAkBp2D,QAAO,CAACkC,EAA8CyG,KACpGzG,EAAIyG,EAAKpG,IAAM,CAAEmqB,KAAM/jB,EAAK+jB,KAAM9qB,QAAS+G,EAAK/G,QAAS6N,WAAW,GAC7DvN,IACN,CAAC,GAEJ0B,KAAKS,MAAQ8xD,CACf,CA8BAnwD,MAAAA,GACE,IAUIqwD,EAVAC,EAAsB,CAACr0D,WAAY,QACnCs0D,EAAiB3yD,KAAKb,MAAMqzD,kBAC5BI,EAAsBh7D,OAAO6J,SAASoxD,OAAS,6BAA+B7yD,KAAKb,MAAM2zD,eACzFC,EAAa,IAAI5xD,gBAAgBvJ,OAAO6J,SAAS2C,QAAQpM,IAAI,cAmDjE,OAlDKgI,KAAKb,MAAM6zD,cAGdJ,GAAuB,gBAAkB5yD,KAAKb,MAAM8zD,oBAAsB,uBAAyBr7D,OAAO6J,SAASoxD,OAAS,aAAe7yD,KAAKb,MAAM6zD,cAAgB,oBAAsBD,EAF5LH,GAAsB,oBAOtBH,EADEE,GAAgBz1D,OACFW,EAAAA,cAAA,SAAOC,UAAU,mCAC/BD,EAAAA,cAAA,aACG80D,EAAer0D,KAAI,CAAEyG,EAAMtG,KAC1B,IAAIqyD,EAAO/rD,EAAK+jB,KAAKprB,MAAM,WACvBwW,EAAU48C,EAAKoC,OAAO,GAAG50D,KAAI,CAACJ,EAAGjB,KAC5B,CAAEZ,IAAM,GAAE0I,EAAKpG,MAAM1B,IAAKiX,QAAShW,MAE5C,OACEL,EAAAA,cAAA,UACEA,EAAAA,cAAA,MAAIO,MAAO,CAAC+J,MAAO,KAAMgrD,cAAc,MAAOv0C,WAAW,SACvD/gB,EAAAA,cAAA,SAAOE,KAAK,WAAWC,QAASgC,KAAKS,MAAMsE,EAAKpG,IAAIX,QAASC,SAAU+B,KAAKI,qBAAqBwS,KAAK5S,KAAM+E,MAE9GlH,EAAAA,cAAA,UACEA,EAAAA,cAACmW,GAAAA,EAAmB,CAACC,OAAQ68C,EAAM58C,QAASA,KAE3C,KAIXrW,EAAAA,cAAA,UAAQE,KAAK,SAASK,MAAOs0D,EAAqBjzD,QAAUvB,IAC1DA,EAAEqT,iBACF3Z,OAAO6J,SAASC,KAAOkxD,CAAmB,GACvC,uBAGS/0D,EAAAA,cAAA,SAAOC,UAAU,mCAC/BD,EAAAA,cAAA,aACEA,EAAAA,cAAA,UACEA,EAAAA,cAAA,MAAIO,MAAO,CAAC+J,MAAO,SAEnBtK,EAAAA,cAAA,UACEA,EAAAA,cAAA,cAAQ,gCAIdA,EAAAA,cAAA,UAAQE,KAAK,SAASK,MAAOs0D,EAAqBjzD,QAAUvB,IAC1DA,EAAEqT,iBACF3Z,OAAO6J,SAASC,KAAOkxD,CAAmB,GACvC,uBAKP/0D,EAAAA,cAAC0jD,GAAkB,CACjBllD,IAAI,qBACJgN,MAAM,sBAELopD,EAGP,ECzGa,MAAMW,WAA2Bv1D,EAAAA,UAG9CgC,WAAAA,CAAYV,GACVW,MAAMX,GAAO,KAHfgY,WAAK,EAKH,MAAM0mC,EAAW79C,KAAK89C,oBAEpB99C,KAAKS,MADHo9C,EACW,CAACE,kBAAmBF,GAEpB,CAAC,CAElB,CAEA97C,iBAAAA,GACO/B,KAAKb,MAAMg/C,YACdn+C,KAAKmX,MAAQknC,YAAYr+C,KAAKs+C,KAAK1rC,KAAK5S,MAAO,KAEnD,CAEAkC,oBAAAA,GACOlC,KAAKmX,OACR+mC,cAAcl+C,KAAKmX,MAEvB,CAEAmnC,IAAAA,GACE,MAAMT,EAAW79C,KAAK89C,oBAClBD,GACF79C,KAAKO,SAAS,CAACw9C,kBAAmBF,GAEtC,CAEAC,iBAAAA,GACE,GAAI99C,KAAKb,MAAMg/C,UAAW,CACxB,IAAIN,EAAW79C,KAAKb,MAAMg/C,UAS1B,OARIn+C,KAAKb,MAAMi/C,+BACbP,GAAsB79C,KAAKb,MAAMi/C,8BAG/Bp+C,KAAKb,MAAM0qC,0BACbgU,IAAuBU,EAAAA,GAAAA,MAAyBv+C,KAAKb,MAAM0qC,yBAGtDgU,CACT,CACE,OAAO,IAEX,CAEAz7C,MAAAA,GACE,MAAAC,EAGIrC,KAAKb,MAFP45B,EAAc12B,EAAd02B,eAAcs6B,EAAAhxD,EACdykD,WAGF,UAHY,IAAAuM,GAAOA,GAGA,OAAO,KAE1B,GAAIrzD,KAAKS,MAAMs9C,mBAAqBhlB,EAAeu6B,SAAU,CAC3D,GAAItzD,KAAKS,MAAMs9C,kBAAoB,EAAG,CACpC,MAAMwV,GAAMC,EAAAA,EAAAA,UAAS/oD,KAAK4U,MAAMrf,KAAKS,MAAMs9C,kBAAoB,MAAMv8C,WAAY,EAAG,KAIpF,IAAIiyD,EAAc,IAHLD,EAAAA,EAAAA,UAAS/oD,KAAK4U,MAAOrf,KAAKS,MAAMs9C,kBAAoB,KAAQ,IAAIv8C,WAAY,EAAG,SAC/EgyD,EAAAA,EAAAA,WAAUxzD,KAAKS,MAAMs9C,kBAAoB,IAAIv8C,WAAY,EAAG,OAOzE,OAJIg5B,OAAO+4B,GAAO,IAChBE,EAAc,GAAEF,KAAOE,KAIvB51D,EAAAA,cAAA,OAAKC,UAAU,kDACbD,EAAAA,cAAA,SAAG,kBACHA,EAAAA,cAAA,QAAMC,UAAU,6BACb21D,GAIT,CACE,OAAO,IAEX,CACE,OAAO,IAEX,EC5CF,MAAMC,GAAyB,CAE7B,CAACC,GAAAA,IC/CY,SAAsCx0D,GACnD,MACE6nB,EAGE7nB,EAHF6nB,eACAD,EAEE5nB,EAFF4nB,YACAG,EACE/nB,EADF+nB,WAGF,OACErpB,EAAAA,cAAC0jD,GAAkB,CACjBllD,IAAI,kBACJgN,MAAM,mBAENxL,EAAAA,cAACkxB,EAA2B,CAC1B/H,eAAgBA,EAChBD,YAAaA,EACb0C,KAAMvC,EACN8H,SAAU,CACR,4BACA,mBACA,eACA,kBACA,mBACA,sBAKV,EDqBE,CAAC4kC,GAAAA,IAA2B3R,GAC5B,CAAC4R,GAAAA,IE9CY,SAAwC10D,GACrD,MACE8nB,EACE9nB,EADF8nB,oBAGmDhtB,EAAAC,IAAnBC,EAAAA,EAAAA,UAAS,WAAU,GAA9C25D,EAAS75D,EAAA,GAAE85D,EAAY95D,EAAA,GACcK,EAAAJ,IAAdC,EAAAA,EAAAA,UAAS,MAAK,GAArC8O,EAAO3O,EAAA,GAAE05D,EAAU15D,EAAA,GAEpBsrD,EAAa3+B,EAAoBk7B,mBAAmBxjD,IAO1DzD,EAAAA,EAAAA,YAAU,KALWC,WACnB,MAAMC,QAAajC,EAAAA,GAAAA,IAA2B,CAAEsE,KAAM,CAAEkB,GAAIinD,EAAWpkD,cACvEwyD,EAAW54D,EAAK1D,KAAK,EAIrBu8D,EAAc,GACb,CAACrO,IAEJ,MAAMsO,EAAmBC,IACvBJ,EAAaI,EAAM,EAqBrB,OAAKlrD,EAEGpL,EAAAA,cAAAA,EAAAA,SAAA,KACNA,EAAAA,cAAC0jD,GAAkB,CACjBllD,IAAI,8BACJgN,MAAQ,8BACRw4C,MAAM,GAENhkD,EAAAA,cAAA,QAAMO,MAAO,CAAE6E,OAAQ,SACrBpF,EAAAA,cAAA,UAAQO,MAAO,CAAE8J,QAAS,OAAQixC,WAAY,WAC5Ct7C,EAAAA,cAAA,UAAI,iBAAe+nD,GACnB/nD,EAAAA,cAAA,WACEA,EAAAA,cAAA,UAAQO,MAAO,CAAEC,WAAY,QAAUoB,QA9BzBtE,UAOtB,UAN+Bi5D,GAAAA,EAAOC,KAAK,CACzChrD,MAAO,oDACPirD,kBAAkB,EAClBC,kBAAmB,eAGAC,YAAa,CAChC,MAAM32C,QAAevkB,EAAAA,GAAAA,IAA4B,CAAEmE,KAAM,CAAEkB,GAAIinD,EAAWpkD,cAEtEqc,EAAOrL,MACT4hD,GAAAA,EAAOC,KAAK,SAAW,6BAA6Bx2C,EAAwCrL,MAAMA,QAAS,SAE3G4hD,GAAAA,EAAOC,KAAK,sBAAuBx2C,EAAOnmB,KAAKyb,QAAS0K,EAAOnmB,KAAKqlB,QAAU,UAAY,QAE9F,IAeyE,YAKrElf,EAAAA,cAAA,OAAKO,MAAO,CAAEyE,QAAS,SAAU4xD,UAAW,SAAU1pD,MAAO,YAC1D9B,EAAQyrD,iBAEX72D,EAAAA,cAAA,WAASC,UAAU,sBACjBD,EAAAA,cAAA,MAAIC,UAAU,eAAea,GAAG,SAC9Bd,EAAAA,cAAA,MAAIC,UAAU,YACZD,EAAAA,cAAA,KACEC,UAAY,aAAyB,YAAdg2D,EAA0B,SAAW,IAC5Dn1D,GAAG,cACHc,QAASA,IAAMy0D,EAAgB,YAChC,YAIHr2D,EAAAA,cAAA,MAAIC,UAAU,YACZD,EAAAA,cAAA,KACEC,UAAY,aAAyB,eAAdg2D,EAA6B,SAAW,IAC/Dn1D,GAAG,iBACHc,QAASA,IAAMy0D,EAAgB,eAChC,eAIHr2D,EAAAA,cAAA,MAAIC,UAAU,YACZD,EAAAA,cAAA,KACEC,UAAY,aAAyB,aAAdg2D,EAA2B,SAAW,IAC7Dn1D,GAAG,eACHc,QAASA,IAAMy0D,EAAgB,aAChC,cAKLr2D,EAAAA,cAAA,OAAKC,UAAU,kBAAkBa,GAAG,gBAClCd,EAAAA,cAAA,OAAKC,UAAY,kBAA8B,YAAdg2D,EAA0B,cAAgB,IAAMn1D,GAAG,WAClFd,EAAAA,cAACsnD,GAAU,CAACl8C,QAASA,KAEvBpL,EAAAA,cAAA,OAAKC,UAAY,kBAA8B,eAAdg2D,EAA6B,cAAgB,IAAMn1D,GAAG,cACrFd,EAAAA,cAAC8nD,GAAa,CAACC,WAAYA,KAE7B/nD,EAAAA,cAAA,OAAKC,UAAY,kBAA8B,aAAdg2D,EAA2B,cAAgB,IAAMn1D,GAAG,YACnFd,EAAAA,cAAChE,GAAAA,EAAY,CAACC,OAAQ8rD,EAAY7rD,SAAS,uBAAuBC,SAAUiP,UA1DnEpL,EAAAA,cAAA,WAAK,aAiE5B,EF3DE,CAAC82D,GAAAA,IG9CY,SAA2Bx1D,GACxC,MACE6nB,EAIE7nB,EAJF6nB,eACAC,EAGE9nB,EAHF8nB,oBACAF,EAEE5nB,EAFF4nB,YACAG,EACE/nB,EADF+nB,WAGI0tC,EAAqC3tC,EAAoB2tC,mCACzDnrC,EAAOmrC,GAAoCl9D,MAAQwvB,EAEzD,OACErpB,EAAAA,cAAC0jD,GAAkB,CACjBllD,IAAI,gBACJgN,MAAM,iBAELurD,GAAoCl9D,MAAM2R,OAASxL,EAAAA,cAAA,UAAKklC,GAAAA,GAA2B6xB,GAAoCl9D,MAAM2R,QAC9HxL,EAAAA,cAACkxB,EAA2B,CAC1B/H,eAAgBA,EAChBD,YAAaA,EACb0C,KAAMA,EACNkD,sBAAuBioC,IAAuC7tC,EAAYld,QAC1EmlB,SAAU,CACR,MACA,aACA,OACA,qBACA,uBACA,UACA,mBACA,sBACA,sBACA,4BACA,yBACA,sBACA,kBACA,yBACA,0BAGJnxB,EAAAA,cAAA,WACAA,EAAAA,cAAC4pD,GAAuB,CACtBzgC,eAAgBA,EAChBC,oBAAqBA,EACrBo9B,QAAS56B,EAAKvf,IACdy9C,sBAAuBl+B,EAAKk+B,sBAC5BC,yBAA0Bn+B,EAAKm+B,yBAC/B7gC,YAAaA,IAIrB,EHJE,CAAC8tC,GAAAA,IAAuBC,GACxB,CAACC,GAAAA,IItCY,SAAqC51D,GAClD,MACEy7C,EASEz7C,EATFy7C,uBACAljB,EAQEv4B,EARFu4B,gBACAoB,EAOE35B,EAPF25B,eAEA/R,GAKE5nB,EANF6nB,eAME7nB,EALF4nB,aACAgS,EAIE55B,EAJF45B,eACA2D,EAGEv9B,EAHFu9B,aACArK,EAEElzB,EAFFkzB,eACAsG,EACEx5B,EADFw5B,YAGF,IAAIq8B,EAEFA,EADEpa,EAEA/8C,EAAAA,cAAC0yC,GAAyBr0C,OAAAia,OAAA,GACpBykC,EAAsB,CAC1BljB,gBAAiBA,EACjBoB,eAAgBA,EAChB9R,gBAAgBmgC,EAAAA,GAAAA,MAChBpgC,YAAaA,EACbgS,eAAgBA,EAChB2D,aAAcA,EACd/D,YAAaA,KAGRtG,GAAgB+B,oBAAsB/B,EAAe+B,mBAAmBl3B,OAAS,EAC7DW,EAAAA,cAAAA,EAAAA,SAAA,KAC3BA,EAAAA,cAAA,SAAG,kEAEDw0B,EAAe+B,mBAAmB91B,KAAIq8C,GACpC98C,EAAAA,cAAA,OAAKxB,IAAKs+C,EAAkBh8C,GAAIb,UAAU,0BACxCD,EAAAA,cAAA,OAAKC,UAAU,6BACfD,EAAAA,cAAA,OAAKC,UAAU,8BACZ68C,EAAkBr6C,UAOAzC,EAAAA,cAAA,UAAI,0BAGnC,MAAMo3D,EAAyC,4BAAzBv9B,EAAgBsH,MACpCnhC,EAAAA,cAAA,OAAKO,MAAO,CAAC8J,QAAS,OAAQixC,WAAY,SAAU5pC,eAAgB,SAAUC,aAAc,SAC1F3R,EAAAA,cAACqB,GAAAA,EAAQ,CACPpB,UAAU,eACV2B,QAASA,KACP,MAAMy1D,EAAwBlzD,SAASmzD,cAAc,6BAErD,GAAID,EAAuB,CACzB,MAAME,EAAiBF,EAAsBv6C,wBAAwBO,IAAOtjB,OAAOy9D,YAAc,IACjGz9D,OAAOsyC,SAAS,CAAChvB,IAAKk6C,EAAgBE,SAAU,UAClD,IAGFz3D,EAAAA,cAAA,OAAKC,UAAU,iBAAiBM,MAAO,CAAC8iB,YAAa,SAAS,4BAI9DrjB,EAAAA,cAAA,WACEA,EAAAA,cAAA,OAAKuM,IAAKkmC,GAAmBlyC,MAAO,CAAC8R,OAAQ,aAMrD,OACErS,EAAAA,cAAC0jD,GAAkB,CACjBllD,IAAI,2BACJgN,MAAM,4BAENxL,EAAAA,cAAA,OAAKC,UAAU,gCACZm3D,EACAD,GAIT,EJzCE,CAACO,GAAAA,IAAWC,GACZ,CAACC,GAAAA,IKnCY,SAA0Ct2D,GAOnDA,EALFu4B,gBADF,MAEE3Q,EAIE5nB,EAJF4nB,YACAC,EAGE7nB,EAHF6nB,eACAC,EAEE9nB,EAFF8nB,oBACAC,EACE/nB,EADF+nB,WAIF,IAAIwuC,EAAmB,KACvB,GAAIzuC,EAAoBE,aAAaC,OAASuuC,EAAAA,GAAsB,CAClE,MAAMC,EAAS7uC,EACf2uC,EACI73D,EAAAA,cAAA,OAAKC,UAAU,kCACfD,EAAAA,cAACkyD,GAAe,CACdE,WAAa,GAAE2F,EAAOnN,aAAamN,EAAOjN,WAC1CkH,WAAY7oC,EAAe2a,YAAYi0B,EAAOj3D,MAEhDd,EAAAA,cAACkzD,GAAe,CACdpK,UAAQ,EACRuK,WAAa/oC,IACXnB,EAAe6D,WAAUgrC,EAAAA,EAAAA,IACvB5uC,EAAoBiE,qBAAqBnB,OAAO7f,IAChD+c,EAAoBiE,qBAAqBnB,OAAOC,WAChD/C,EAAoBiE,qBAAqBnB,OAAOtrB,MAChD0pB,IAEFnB,EAAeW,kBAAkB,EAEnCkqC,cAAeA,IAAM7qC,EAAeW,mBACpC2pC,QAASA,SAIjB,CAEA,IAAIwE,EAAiB5uC,EAAW6uC,kBAAoB,GACpDD,EAAiBhiC,GAAAA,GAAUi+B,GAAuBA,EAAcjzD,YAAYg3D,GAAgB1hB,UAE5F,MAAM4hB,EAAgBF,EAAex3D,KAAKyzD,GAEtCl0D,EAAAA,cAACi0D,GAA0B,CACzBz1D,IAAK01D,EAAckE,UACnBlvC,YAAaA,EACbC,eAAgBA,EAChB+qC,cAAeA,EACfC,qBAAsBD,EAAc7nD,MAAOogB,EAAAA,EAAAA,IAAqBpD,EAAY6qC,EAAc7nD,SAKhG,OACErM,EAAAA,cAAC0jD,GAAkB,CACjBllD,IAAI,mBACJgN,MAAM,mBACNs4C,aACE9jD,EAAAA,cAACioB,EAAAA,EAAS,CACRzpB,IAAI,uBACJiE,KAAK,cACLkT,YAAayT,EAAoBE,aAAaC,OAASuuC,EAAAA,GACvDjiD,OAAK,EACLjU,QAASA,KAAQunB,EAAeY,eAAe+tC,EAAAA,GAAqB,KAIvED,EACAM,EAGP,ELlCE,CAACE,GAAAA,IMxCY,SAA8B/2D,GAOvCA,EALFu4B,gBADF,MAEE3Q,EAIE5nB,EAJF4nB,YACAC,EAGE7nB,EAHF6nB,eACAC,EAEE9nB,EAFF8nB,oBACAC,EACE/nB,EADF+nB,WAGF,IAAIivC,EAAqB,KACzB,GAAIlvC,EAAoBE,aAAaC,OAASgvC,EAAAA,GAAsB,CAClE,MAAMR,EAAS7uC,EACfovC,EACEt4D,EAAAA,cAAA,OAAKC,UAAU,kCACbD,EAAAA,cAACkyD,GAAe,CACdE,WAAa,GAAE2F,EAAOnN,aAAamN,EAAOjN,WAC1CkH,WAAY7oC,EAAe2a,YAAYi0B,EAAOj3D,MAEhDd,EAAAA,cAACkzD,GAAe,CACdpK,UAAQ,EACRuK,WAAa/oC,IACXnB,EAAe6D,WAAUwrC,EAAAA,EAAAA,IAA4BluC,IACrDnB,EAAeW,kBAAkB,EAEnCkqC,cAAeA,IAAM7qC,EAAeW,mBACpC2pC,QAASA,SAIjB,CAEA,IAAIgF,EAAyBpvC,EAAWqvC,mBAAqB,GAC7DD,EAAyBxiC,GAAAA,GAAU0iC,GAA+BA,EAAsB13D,YAAYw3D,GAAwBliB,UAC5H,MAAM4hB,EAAgBM,EAAuBh4D,KAAKk4D,GAE9C34D,EAAAA,cAACuyD,GAA4B,CAC3B/zD,IAAKm6D,EAAsBtsD,IAC3B6c,YAAaA,EACbC,eAAgBA,EAChBqpC,gBAAiBmG,MAKvB,OACE34D,EAAAA,cAAC0jD,GAAkB,CACjBllD,IAAI,mBACJgN,MAAM,mBACNs4C,aACE9jD,EAAAA,cAACioB,EAAAA,EAAS,CACRzpB,IAAI,qBACJiE,KAAK,uBACLkT,aAAW,EACXE,OAAK,EACLjU,QAASA,KACPunB,EAAeY,eAAewuC,EAAAA,GAAqB,KAKxDD,EACAH,EAGP,ENvBE,CAACS,GAAAA,IAAoBC,GAGrB,CAACC,GAAAA,IOlDY,UAAqC,gBAClDj/B,EAAe,eACfqB,EAAc,eACdD,EAAc,YACd/R,EAAW,aACX2V,EAAY,YACZ/D,EAAW,WACXzR,IAEA,MACM8uC,GADqB5G,EAAAA,EAAAA,IAAkBloC,GAAauC,GAAS,eAAgBA,KAAUA,EAAKwe,aACzD3pC,KAAK4oD,IAC5C,MAAMD,GAAiBsG,EAAAA,EAAAA,MAAKrG,GAE5B,OACErpD,EAAAA,cAACmpD,GAA4B,CAC3B3qD,IAAK4qD,EAAe/8C,IACpBwtB,gBAAiBA,EACjBoB,eAAgBA,EAChB/R,YAAaA,EACbgS,eAAgBA,EAChB2D,aAAcA,EACd/D,YAAaA,EACbsuB,eAAgBA,EAChBC,sBAAuBA,GACvB,IAIN,OACErpD,EAAAA,cAAC0jD,GAAkB,CACjBllD,IAAI,YACJgN,MAAM,YACNm4C,QAAS3jD,EAAAA,cAAA,YAAMA,EAAAA,cAAA,QAAMC,UAAU,gBAAgBM,MAAO,CAACuE,SAAU,YAAkB,sFAElFqzD,EAGP,EPcE,CAACrJ,GAAAA,IAAYa,GACb,CAACoJ,GAAAA,IhBxCY,UAAoC,UACjDC,EAAS,YACT9vC,EAAW,eACXgS,EAAc,eACdD,EAAc,gBACdpB,EAAe,YACfiB,EAAW,aACX+D,IAEA,MAAMo6B,GAAgBC,EAAAA,GAAAA,IAAWF,GAE3BG,EAAoB,CACxBC,YAAYzrB,EAAAA,EAAAA,QAAOsrB,GAAe,CAACzuD,EAAOhM,IAAQgM,IAASs6B,EAAAA,EAAAA,YAAWtmC,EAAK,yBAC3E66D,UAAU1rB,EAAAA,EAAAA,QAAOsrB,GAAe,CAACzuD,EAAOhM,IAAQgM,IAASs6B,EAAAA,EAAAA,YAAWtmC,EAAK,yBACzE8iD,eAA+DvhD,KAApDob,EAAAA,EAAAA,MAAK89C,EAAe,CAACK,oBAAoB,KAGhDnB,EAAgBzK,GAAgBjtD,KAAI,CAACksD,EAAU/rD,KACnD,MAAM24D,EAAc34D,EAAQ,EAE5B,OACEZ,EAAAA,cAACytD,GAA4B,CAC3BjvD,IAAM,oBAAmB+6D,IACzB34D,MAAO24D,EACP5M,SAAUA,EACVniD,MAAO2uD,EAA8B,WAAG,uBAAsBI,MAAkBJ,EAA8B,WAAG,uBAAsBI,KAAe/uD,MACtJ82C,UAAW6X,EAA6B,UACxCxa,QAASwa,EAA4B,SAAG,uBAAsBI,MAAkBJ,EAA4B,SAAG,uBAAsBI,KAAe/uD,MACpJ0e,YAAaA,EACbgS,eAAgBA,EAChBD,eAAgBA,EAChBpB,gBAAiBA,EACjBiB,YAAaA,EACb+D,aAAcA,GACd,IAIA26B,GAAoBC,EAAAA,EAAAA,MAAKN,EAA8B,YACvDO,EAA4BF,EAAoB,GAAKA,IAAsB9L,GAAgBruD,OAC3Fs6D,EAAmC,IAAtBH,EAEnB,OACEx5D,EAAAA,cAAC0jD,GAAkB,CACjBllD,IAAI,sBACJgN,MAAM,sBACNm4C,QAAQ,wIACRzoB,eAAgBA,GAEfi9B,EACDn4D,EAAAA,cAACioB,EAAAA,EAAS,CACRxlB,KAAMi3D,EAA6B,GAAEF,YAA4B9L,GAAgBruD,SAAW85D,EAA6B,UAAI,YAAc,SAC3IlkD,aAAa,mBACbjS,eAAe,wDACfkS,cAAc,SACdS,aAAW,EACXnU,SAAUm4D,GAAcD,GAA6BP,EAA6B,UAClFv3D,QAAUvB,IACR6oB,EAAYyD,SAAS,CACnB,uBAA4B,CAC1B2sC,oBAAoB,KAIxBv/D,OAAOsb,iBAAiB,CACtB7J,MAAO,aACP8J,QAAS,+NACTC,SAAUA,OACVqkD,aAAa,GACb,IAKZ,EgBjCE,CAAC7K,GAAAA,IAAWY,GACZ,CAACkK,GAAAA,IQrEY,SAAoCv4D,GACjD,OACEtB,EAAAA,cAAC0jD,GAAkB,CACjBllD,IAAI,aACJgN,MAAM,cAENxL,EAAAA,cAAA,SAAOC,UAAU,mCACfD,EAAAA,cAAA,aACEA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UACEA,EAAAA,cAAA,cAAQ,yBAEVA,EAAAA,cAAA,UACEA,EAAAA,cAAA,cAAQ,uBAEVA,EAAAA,cAAA,UACEA,EAAAA,cAAA,cAAQ,cAGZA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,yCACJA,EAAAA,cAAA,UAAI,mCACJA,EAAAA,cAAA,UAAI,wDAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,mCAAgCA,EAAAA,cAAA,WAAK,KAAO,MAChDA,EAAAA,cAAA,UAAI,cACJA,EAAAA,cAAA,UAAI,qBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,kBACJA,EAAAA,cAAA,UAAI,cACJA,EAAAA,cAAA,UAAI,0BAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,2CACJA,EAAAA,cAAA,UAAI,mCACJA,EAAAA,cAAA,UAAI,wDAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,gDACJA,EAAAA,cAAA,UAAI,gCACJA,EAAAA,cAAA,UAAI,4CAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,kBACJA,EAAAA,cAAA,UAAI,kBACJA,EAAAA,cAAA,UAAI,qBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,sBACJA,EAAAA,cAAA,UAAI,cACJA,EAAAA,cAAA,UAAI,iBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,mBACJA,EAAAA,cAAA,UAAI,4DACJA,EAAAA,cAAA,UAAI,gCAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,UAAI,8BACJA,EAAAA,cAAA,UAAI,eAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,0BACJA,EAAAA,cAAA,UAAI,yCACJA,EAAAA,cAAA,UAAI,gEAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,qBACJA,EAAAA,cAAA,UAAI,+CACJA,EAAAA,cAAA,UAAI,0DAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,uBACJA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,YAGFA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,UACJA,EAAAA,cAAA,UAAI,iBACJA,EAAAA,cAAA,UAAI,mBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,aACJA,EAAAA,cAAA,UAAI,iBACJA,EAAAA,cAAA,UAAI,mBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,YACJA,EAAAA,cAAA,UAAI,gBACJA,EAAAA,cAAA,UAAI,kBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,eACJA,EAAAA,cAAA,UAAI,eACJA,EAAAA,cAAA,UAAI,iBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,aACJA,EAAAA,cAAA,UAAI,iBACJA,EAAAA,cAAA,UAAI,oBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,wCACJA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,YAGFA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,aACJA,EAAAA,cAAA,UAAI,cACJA,EAAAA,cAAA,UAAI,kBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,aACJA,EAAAA,cAAA,UAAI,gBACJA,EAAAA,cAAA,UAAI,mBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,aACJA,EAAAA,cAAA,UAAI,iBACJA,EAAAA,cAAA,UAAI,mBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,mBACJA,EAAAA,cAAA,UAAI,6CACJA,EAAAA,cAAA,UAAI,sDAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,8CACJA,EAAAA,cAAA,UAAI,yBACJA,EAAAA,cAAA,UAAI,kBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,UAAI,2CACJA,EAAAA,cAAA,UAAI,iBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,UAAI,iCACJA,EAAAA,cAAA,UAAI,kBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,UAAI,+BACJA,EAAAA,cAAA,UAAI,iBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,UAAI,mCACJA,EAAAA,cAAA,UAAI,mBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,oCACJA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,YAGFA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,MACJA,EAAAA,cAAA,UAAI,aACJA,EAAAA,cAAA,UAAI,sBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,QACJA,EAAAA,cAAA,UAAI,eACJA,EAAAA,cAAA,UAAI,gBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,OACJA,EAAAA,cAAA,UAAI,gBACJA,EAAAA,cAAA,UAAI,kBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,kBACJA,EAAAA,cAAA,UAAI,yBACJA,EAAAA,cAAA,UAAI,mBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,UAAI,iCACJA,EAAAA,cAAA,UAAI,gBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,yCACJA,EAAAA,cAAA,UAAI,cACJA,EAAAA,cAAA,UAAI,mBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,0BACJA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,YAGFA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,OACJA,EAAAA,cAAA,UAAI,gBACJA,EAAAA,cAAA,UAAI,eAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,OACJA,EAAAA,cAAA,UAAI,eACJA,EAAAA,cAAA,UAAI,cAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,OACJA,EAAAA,cAAA,UAAI,kBACJA,EAAAA,cAAA,UAAI,iBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,OACJA,EAAAA,cAAA,UAAI,gBACJA,EAAAA,cAAA,UAAI,gBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,QACJA,EAAAA,cAAA,UAAI,qBACJA,EAAAA,cAAA,UAAI,qBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,gCACJA,EAAAA,cAAA,UAAI,eACJA,EAAAA,cAAA,UAAI,wBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,qCACJA,EAAAA,cAAA,UAAI,wBACJA,EAAAA,cAAA,UAAI,iBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,UAAI,4CACJA,EAAAA,cAAA,UAAI,kBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,UAAI,kCACJA,EAAAA,cAAA,UAAI,mBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,UAAI,gCACJA,EAAAA,cAAA,UAAI,kBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,UAAI,mCACJA,EAAAA,cAAA,UAAI,mBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,qBACJA,EAAAA,cAAA,UAAI,yBACJA,EAAAA,cAAA,UAAI,0BAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,0CACJA,EAAAA,cAAA,UAAI,eACJA,EAAAA,cAAA,UAAI,eAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,iCACJA,EAAAA,cAAA,UAAI,iBACJA,EAAAA,cAAA,UAAI,qBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,2BACJA,EAAAA,cAAA,UAAI,iDACJA,EAAAA,cAAA,UAAI,0DAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,mBACJA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,YAGFA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,SACJA,EAAAA,cAAA,UAAI,gBACJA,EAAAA,cAAA,UAAI,cAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,WACJA,EAAAA,cAAA,UAAI,gBACJA,EAAAA,cAAA,UAAI,cAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,gDACJA,EAAAA,cAAA,UAAI,uBACJA,EAAAA,cAAA,UAAI,kBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,yBACJA,EAAAA,cAAA,UAAI,2DACJA,EAAAA,cAAA,UAAI,gDAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,wBACJA,EAAAA,cAAA,UAAI,cACJA,EAAAA,cAAA,UAAI,iBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,sCACJA,EAAAA,cAAA,UAAI,wBACJA,EAAAA,cAAA,UAAI,qBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,UAAI,wBACJA,EAAAA,cAAA,UAAI,qBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,wBACJA,EAAAA,cAAA,UAAI,cACJA,EAAAA,cAAA,UAAI,mBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,oBACJA,EAAAA,cAAA,UAAI,+CACJA,EAAAA,cAAA,UAAI,uDAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UACEA,EAAAA,cAAA,cAAQ,0BAEVA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,YAGFA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,mBACJA,EAAAA,cAAA,UAAI,sBACJA,EAAAA,cAAA,UAAI,uBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UACEA,EAAAA,cAAA,cAAQ,wBAEVA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,YAGFA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,cACJA,EAAAA,cAAA,UAAI,YACJA,EAAAA,cAAA,UAAI,gBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,kBACJA,EAAAA,cAAA,UAAI,yBACJA,EAAAA,cAAA,UAAI,cAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,WACJA,EAAAA,cAAA,UAAI,eACJA,EAAAA,cAAA,UAAI,mBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,YACJA,EAAAA,cAAA,UAAI,iBACJA,EAAAA,cAAA,UAAI,kBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,mBACJA,EAAAA,cAAA,UAAI,gCACJA,EAAAA,cAAA,UAAI,eAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,UAAI,+BACJA,EAAAA,cAAA,UAAI,gBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UACEA,EAAAA,cAAA,cAAQ,gBAEVA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,YAGFA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,4BACJA,EAAAA,cAAA,UAAI,eACJA,EAAAA,cAAA,UAAI,gBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,qBACJA,EAAAA,cAAA,UAAI,2BAAwBA,EAAAA,cAAA,WAAK,MAEjCA,EAAAA,cAAA,UAAI,cAAWA,EAAAA,cAAA,WAAK,MAAQ,OAE9BA,EAAAA,cAAA,UACEA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,UAAI,4BAAyBA,EAAAA,cAAA,WAAK,MAElCA,EAAAA,cAAA,UAAI,cAAWA,EAAAA,cAAA,WAAK,MAAQ,OAE9BA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,+CACJA,EAAAA,cAAA,UAAI,mBACJA,EAAAA,cAAA,UAAI,cAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,UAAI,qBACJA,EAAAA,cAAA,UAAI,cAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,cACJA,EAAAA,cAAA,UAAI,mBACJA,EAAAA,cAAA,UAAI,cAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,UAAI,mBACJA,EAAAA,cAAA,UAAI,cAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,kBACJA,EAAAA,cAAA,UAAI,QACJA,EAAAA,cAAA,UAAI,UAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,qBACJA,EAAAA,cAAA,UAAI,wBACJA,EAAAA,cAAA,UAAI,gBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,UAAI,0BACJA,EAAAA,cAAA,UAAI,gBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,sBACJA,EAAAA,cAAA,UAAI,YACJA,EAAAA,cAAA,UAAI,sBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,oCACJA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,YAGFA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,mBACJA,EAAAA,cAAA,UAAI,oBAAiBA,EAAAA,cAAA,WAAK,KAAO,YACjCA,EAAAA,cAAA,UAAI,qBAAkBA,EAAAA,cAAA,WAAK,KAAO,OAEpCA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,yBACJA,EAAAA,cAAA,UAAI,WACJA,EAAAA,cAAA,UAAI,cAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,SACJA,EAAAA,cAAA,UAAI,SACJA,EAAAA,cAAA,UAAI,cAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,eACJA,EAAAA,cAAA,UAAI,SACJA,EAAAA,cAAA,UAAI,cAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,aACJA,EAAAA,cAAA,UAAI,SACJA,EAAAA,cAAA,UAAI,cAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,eACJA,EAAAA,cAAA,UAAI,WACJA,EAAAA,cAAA,UAAI,cAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,aACJA,EAAAA,cAAA,UAAI,SACJA,EAAAA,cAAA,UAAI,cAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,+BACJA,EAAAA,cAAA,UAAI,iBACJA,EAAAA,cAAA,UAAI,wBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,4CACJA,EAAAA,cAAA,UAAI,mBACJA,EAAAA,cAAA,UAAI,wBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,2BACJA,EAAAA,cAAA,UAAI,gBAAQA,EAAAA,cAAA,WAAK,MAEjBA,EAAAA,cAAA,UAAI,aAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,2CACJA,EAAAA,cAAA,UAAI,iBACJA,EAAAA,cAAA,UAAI,kBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,kBACJA,EAAAA,cAAA,UAAI,oBAAiBA,EAAAA,cAAA,WAAK,MAE1BA,EAAAA,cAAA,UAAI,cAAWA,EAAAA,cAAA,WAAK,KAAO,OAE7BA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,oBACJA,EAAAA,cAAA,UAAI,iBACJA,EAAAA,cAAA,UAAI,kBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,sBACJA,EAAAA,cAAA,UAAI,aACJA,EAAAA,cAAA,UAAI,gBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,iBACJA,EAAAA,cAAA,UAAI,qCACJA,EAAAA,cAAA,UAAI,sCAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UACEA,EAAAA,cAAA,cAAQ,UAEVA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,YAGFA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,YACJA,EAAAA,cAAA,UAAI,aACJA,EAAAA,cAAA,UAAI,gBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UACEA,EAAAA,cAAA,cAAQ,UAEVA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,YAGFA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,YACJA,EAAAA,cAAA,UAAI,iBACJA,EAAAA,cAAA,UAAI,mBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,wBACJA,EAAAA,cAAA,UAAI,yBACJA,EAAAA,cAAA,UAAI,6BAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,UAAI,2BACJA,EAAAA,cAAA,UAAI,4BAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,iCACJA,EAAAA,cAAA,WAEAA,EAAAA,cAAA,YAGFA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,UACJA,EAAAA,cAAA,UAAI,gBACJA,EAAAA,cAAA,UAAI,mBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,UACJA,EAAAA,cAAA,UAAI,gBACJA,EAAAA,cAAA,UAAI,oBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,cACJA,EAAAA,cAAA,UAAI,yBACJA,EAAAA,cAAA,YAGFA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,aACJA,EAAAA,cAAA,UAAI,gBACJA,EAAAA,cAAA,UAAI,kBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,mBACJA,EAAAA,cAAA,UAAI,eACJA,EAAAA,cAAA,UAAI,gBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,UACJA,EAAAA,cAAA,UAAI,iDACJA,EAAAA,cAAA,UAAI,gDAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,aACJA,EAAAA,cAAA,UAAI,kBACJA,EAAAA,cAAA,UAAI,sBAENA,EAAAA,cAAA,UACEA,EAAAA,cAAA,MAAIoS,QAAS,EAAG1R,QAAS,GACvBV,EAAAA,cAAA,cAAQ,iBAGZA,EAAAA,cAAA,UACEA,EAAAA,cAAA,MAAIoS,QAAS,EAAG1R,QAAS,GAAG,sIAE9BV,EAAAA,cAAA,UACEA,EAAAA,cAAA,MAAIoS,QAAS,EAAG1R,QAAS,GAAG,oJAMxC,ER/jBE,CAACsqC,GAAAA,IAAQ2kB,IAoBI,SAASmK,GAAcx4D,GACpC,MACEu4B,EAUEv4B,EAVFu4B,gBACA1Q,EASE7nB,EATF6nB,eACAC,EAQE9nB,EARF8nB,oBACA8R,EAOE55B,EAPF45B,eACAhS,EAME5nB,EANF4nB,YACA4Q,EAKEx4B,EALFw4B,eACA81B,EAIEtuD,EAJFsuD,qBACAvmC,EAGE/nB,EAHF+nB,WACA0wC,EAEEz4D,EAFFy4D,WACAf,EACE13D,EADF03D,UAIA5I,EAEER,EAFFQ,YACArlB,EACE6kB,EADF7kB,YAGFivB,EAUI3wC,EATF4wC,iBAAAA,OAAgB,IAAAD,GAAQA,EAAAE,EAStB7wC,EARF8wC,gBAAAA,OAAe,IAAAD,GAAQA,EAAAE,EAQrB/wC,EAPFgxC,aAAAA,OAAY,IAAAD,GAAQA,EAAAE,EAOlBjxC,EANFghB,iBAAAA,OAAgB,IAAAiwB,GAAQA,EAAAC,EAMtBlxC,EALFmxC,gBAAAA,OAAe,IAAAD,GAAOA,EAAAE,EAKpBpxC,EAJFqxC,iBAAAA,OAAgB,IAAAD,GAAQA,EAAAE,EAItBtxC,EAHFi3B,UAAAA,OAAS,IAAAqa,EAAG,KAAIA,EAAAC,EAGdvxC,EAFF2iB,wBAAAA,OAAuB,IAAA4uB,EAAG,KAAIA,EAAAC,EAE5BxxC,EADFk3B,6BAAAA,OAA4B,IAAAsa,EAAG,EAACA,EAGWzxC,GAAqB2tC,oCAAoCrrD,YAAcmuB,EAAgB/4B,GACpI,IAAIg6D,EAA8Bx5D,EAAMw5B,YAAYC,kBAAoB,0BAA4B,GAEpG,MAAMggC,EACJ/6D,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAC4oD,GAAsB,CACrBpqD,IAAI,kBACJiE,KAAK,kBACLqmD,SAAUsH,IAAgB0F,GAAAA,GAC1B/M,SAAUA,KAAKhe,EAAY+qB,GAAAA,GAAgB,EAC3C7M,WAAY9/B,EAAemJ,WAAapJ,EAAYld,UAEtDhM,EAAAA,cAAC4oD,GAAsB,CACrBpqD,IAAI,gBACJiE,KAAK,gBACLqmD,SAAUsH,IAAgB0G,GAAAA,GAC1B/N,SAAUA,KAAKhe,EAAY+rB,GAAAA,GAAc,EACzC7N,WAAY9/B,EAAemJ,YAE7BtyB,EAAAA,cAAC4oD,GAAsB,CACrBpqD,IAAI,WACJiE,KAAK,WACLqmD,SAAUsH,IAAgBsH,GAAAA,GAC1B3O,SAAUA,KAAKhe,EAAY2sB,GAAAA,GAAS,EACpCzO,WAAY9/B,EAAemJ,YAE7BtyB,EAAAA,cAAC4oD,GAAsB,CACrBpqD,IAAI,2BACJiE,KAAK,2BACLqmD,SAAUsH,IAAgB8G,GAAAA,GAC1BnO,SAAUA,KAAKhe,EAAYmsB,GAAAA,GAAyB,EACpDjO,WAAY9/B,EAAemJ,YAE7BtyB,EAAAA,cAAC4oD,GAAsB,CACrBpqD,IAAI,uBACJiE,KAAK,uBACLqmD,SAAUsH,IAAgB4G,GAAAA,GAC1BjO,SAAUA,KAAKhe,EAAYisB,GAAAA,GAAqB,EAChD/N,WAAY9/B,EAAemJ,YAE7BtyB,EAAAA,cAAC4oD,GAAsB,CACrBpqD,IAAI,4BACJiE,KAAK,4BACLumD,UAAUjqC,EAAAA,EAAAA,GAAU,2CAA0C8a,EAAgB/4B,MAC9EmoD,WAAY9/B,EAAemJ,WAAsC,4BAAzBuH,EAAgBsH,OAE1DnhC,EAAAA,cAAC4oD,GAAsB,CACrBpqD,IAAI,2BACJiE,KAAK,2BACLqmD,SAAUsH,IAAgB2F,GAAAA,GAC1BhN,SAAUA,KAAKhe,EAAYgrB,GAAAA,GAAyB,EACpD9M,WAAY9/B,EAAemJ,WAAsC,4BAAzBuH,EAAgBsH,OAE1DnhC,EAAAA,cAAC4oD,GAAsB,CACrBpqD,IAAI,mBACJiE,KAAK,mBACLqmD,SAAUsH,IAAgB4F,GAAAA,GAC1BjN,SAAUA,KAAKhe,EAAYirB,GAAAA,GAAiB,EAC5C/M,WAAY9/B,EAAemJ,WAAsC,4BAAzBuH,EAAgBsH,OAE1DnhC,EAAAA,cAAC4oD,GAAsB,CACrBpqD,IAAI,kBACJiE,KAAK,mBACLqmD,SAAUsH,IAAgBiI,GAAAA,GAC1BtP,SAAUA,KAAKhe,EAAYstB,GAAAA,GAAiB,EAC5CpP,WAAY9/B,EAAemJ,YAE7BtyB,EAAAA,cAAC4oD,GAAsB,CACrBpqD,IAAI,iBACJiE,KAAK,mBACLomD,SAAS,aACTC,SAAUsH,IAAgBwH,GAAAA,GAC1B7O,SAAUA,KAAKhe,EAAY6sB,GAAAA,GAAiB,EAC5C3O,WAAY9/B,EAAemJ,YAE7BtyB,EAAAA,cAAC4oD,GAAsB,CACrBpqD,IAAI,qBACJiE,KAAK,qBACLomD,SAAS,uBACTC,SAAUsH,IAAgBwI,GAAAA,GAC1B7P,SAAUA,KAAKhe,EAAY6tB,GAAAA,GAAkB,EAC7C3P,aAAcnvB,EAAem7B,gBAAkBn7B,EAAekhC,eAAiB9xC,EAAYpoB,KAE7Fd,EAAAA,cAAC4oD,GAAsB,CACrBpqD,IAAI,YACJiE,KAAK,YACLomD,SAAS,iBACTC,SAAUsH,IAAgBtB,GAAAA,GAC1B/F,SAAUA,KAAKA,EAAS+F,GAAAA,GAAU,EAClC7F,YAAagR,IAAqB9wC,EAAemJ,YAEnDtyB,EAAAA,cAAC4oD,GAAsB,CACrBpqD,IAAI,WACJiE,KAAK,WACLomD,SAAS,gBACTC,SAAUsH,IAAgBrB,GAAAA,GAC1BhG,SAAUA,KAAKA,EAASgG,GAAAA,GAAS,EACjC9F,YAAakR,IAAoBhxC,EAAemJ,YAElDtyB,EAAAA,cAAC4oD,GAAsB,CACrBpqD,IAAI,QACJiE,KAAK,QACLomD,SAAS,aACTC,SAAUsH,IAAgBplB,GAAAA,GAC1B+d,SAAUA,KAAKA,EAAS/d,GAAAA,GAAM,EAC9Bie,YAAaoR,IAAiBlxC,EAAemJ,YAE/CtyB,EAAAA,cAAC4oD,GAAsB,CACrBpqD,IAAI,YACJiE,KAAK,YACLomD,SAAS,gBACTC,SAAUsH,IAAgB0I,GAAAA,GAC1B/P,SAAUA,KAAKA,EAAS+P,GAAAA,GAAU,EAClC7P,YAAa5e,IAAqBlhB,EAAemJ,YAEnDtyB,EAAAA,cAAC4oD,GAAsB,CACrBpqD,IAAI,WACJiE,KAAK,WACLomD,SAAS,sBACTC,SAAUsH,IAAgB2I,GAAAA,GAC1BhQ,SAAUA,KAAKhe,EAAYguB,GAAAA,GAAS,EACpC9P,YAAauR,IAAoBrxC,EAAemJ,YAElDtyB,EAAAA,cAAC4oD,GAAsB,CACrBpqD,IAAI,YACJiE,KAAK,aACLomD,SAAS,oBACTC,SAAUsH,IAAgByJ,GAAAA,GAC1B9Q,SAAUA,KACJqH,IAAgByJ,GAAAA,IAAa3wC,EAAY+c,SAASg1B,EAAAA,IACtDlS,EAAS8Q,GAAAA,GAAU,EAErB5Q,YAAayR,IAAqBvxC,EAAemJ,YAEnDtyB,EAAAA,cAACu1D,GAAkB,CACjB/2D,IAAI,QACJ8hD,UAAWA,EACXtU,wBAAyBA,EACzBuU,6BAA8BA,EAC9BrlB,eAAgBA,EAChB+tB,YAAa9/B,EAAemJ,YAE9BtyB,EAAAA,cAAC4oD,GAAsB,CACrBpqD,IAAI,sBACJiE,KAAK,sBACLumD,UAAUjqC,EAAAA,EAAAA,GAAU,oCAAmCmc,EAAeggC,gBACtEjS,cAAe9/B,EAAemJ,YAAa4I,EAAeggC,iBAK1DnS,EAAYoS,IACb/K,GAAe+K,GAChBtJ,EAAWsJ,GAEbpwB,EAAYowB,EAAM,EAGdtJ,EAAcsJ,IAClB,MAAM1uB,EAAW5S,EAAgBruB,MAEjC,OAAO2vD,GACL,KAAKrM,GAAAA,GACHp1D,GAAAA,EAAgBC,MAAM,qBAAsB,CAAEkZ,KAAM9Y,OAAO6J,SAASC,KAAMiP,OAAQ,OAAQlL,KAAM6kC,IAChG,MACF,KAAKsiB,GAAAA,GACHr1D,GAAAA,EAAgBC,MAAM,oBAAqB,CAAEkZ,KAAM9Y,OAAO6J,SAASC,KAAMiP,OAAQ,OAAQlL,KAAM6kC,IAC/F,MACF,KAAKzB,GAAAA,GACHtxC,GAAAA,EAAgBC,MAAM,4BAA6B,CAAEkZ,KAAM9Y,OAAO6J,SAASC,KAAMiP,OAAQ,OAAQlL,KAAM6kC,IACvG,MACF,KAAKqsB,GAAAA,GACHp/D,GAAAA,EAAgBC,MAAM,+BAAgC,CAAEkZ,KAAM9Y,OAAO6J,SAASC,KAAMiP,OAAQ,OAAQlL,KAAM6kC,IAC1G,MACF,KAAKotB,GAAAA,GACHngE,GAAAA,EAAgBC,MAAM,sBAAuB,CAAEkZ,KAAM9Y,OAAO6J,SAASC,KAAMiP,OAAQ,OAAQlL,KAAM6kC,IAErG,EAGF,IAAI2uB,EACJ,GAAIhL,GAAeyF,GAAuBzF,GAAc,CACtD,IAAIn8C,EAAiB,CAAC,EACtB,OAAQm8C,GACN,KAAKtB,GAAAA,GACH76C,EAAY,CACV87C,UAAW1mC,EAAW0mC,UACtBF,iBAAkBxmC,EAAWwmC,kBAE/B,MACF,KAAKd,GAAAA,GACH96C,EAAY,CACVg8C,SAAU5mC,EAAW4mC,UAEvB,MACF,KAAKjlB,GAAAA,GACH/2B,EAAY,CACVk8C,MAAO9mC,EAAW8mC,OAEpB,MACF,KAAKyI,GAAAA,GACH3kD,EAAY,CACVmhD,oBAAqBt7B,EAAes7B,oBACpCD,cAAer7B,EAAeq7B,cAC9BR,kBAAmB76B,EAAe66B,kBAClCM,eAAgBn7B,EAAem7B,gBAEjC,MACF,KAAK8D,GAAAA,GACH9kD,EAAY,CACV+kD,UAAWA,GAEb,MACF,KAAK9B,GAAAA,GACH,GAA6B,4BAAzBr9B,EAAgBsH,KAAoC,CAC3B44B,IAAe9jC,EAAAA,EAAU8jC,KAClDsB,EAAAA,EAAAA,IAA4BtB,EAAYv7B,EAAAA,GAAoBwsB,uBAK9D/2C,EAAY,CACV8oC,wBAH6Bue,EAAAA,EAAAA,IAASjyC,GAAauC,GAAuB,2BAAdA,EAAK1rB,OAKrE,EAKJ,MAAMq7D,EAAY1F,GAAuBzF,GACzCgL,EAAYp7D,EAAAA,cAACu7D,EAASl9D,OAAAia,OAAA,GAAKhX,EAAW2S,GACxC,CAEA,OACEjU,EAAAA,cAAA,OACEC,UAAY,kBAAiB66D,IAC7B,qBAA+B/6D,IAAhBqwD,GACfpwD,EAAAA,cAAA,OAAKC,UAAU,qBAAqB,aAAW,wBAC/CD,EAAAA,cAAA,OAAKC,UAAU,6BAA6BM,MAAO,CAAEi7D,SAAU,SAC5DT,EACD/6D,EAAAA,cAAA,OAAKC,UAAU,wCACbD,EAAAA,cAAA,OAAKuM,IAAKkvD,OAGbL,EAGP,C,oiCSpVe,SAASM,GAAiCp6D,GACvD,MACE6nB,EAIE7nB,EAJF6nB,eACAqL,EAGElzB,EAHFkzB,eACAmnC,EAEEr6D,EAFFq6D,4BACAtyC,EACE/nB,EADF+nB,WAGqDuE,EAAAvxB,GAArB2D,EAAAA,UAAe,GAAM,GAAhDilB,EAAS2I,EAAA,GAAEguC,EAAYhuC,EAAA,GACsC+G,EAAAt4B,GAApB2D,EAAAA,SAAe,MAAK,GAA7D67D,EAAgBlnC,EAAA,GAAEmnC,EAAmBnnC,EAAA,GAC8BE,EAAAx4B,GAApB2D,EAAAA,SAAe,MAAK,GAAnE80B,EAAmBD,EAAA,GAAEE,EAAsBF,EAAA,GACgCG,EAAA34B,GAAlB2D,EAAAA,SAAe,IAAG,GAA3E+7D,EAAwB/mC,EAAA,GAAEgnC,EAA2BhnC,EAAA,GA6CtDinC,EAA0BnnC,EAAsB6mC,EAA4BxgD,MAAMqb,GAAOA,EAAG11B,KAAOg0B,EAAoBtqB,QAAS,KAEhI0xD,EAA2BP,EAA4Bl7D,KAAK07D,IAAQ,CAEtErnD,MAAOqnD,EAAS15D,KAChB+H,MAAO2xD,EAASr7D,OAIds7D,EAAwB5nC,EAAey2B,gBAAgBntD,QAAQu+D,GAAmB,mBAAZA,EAAGl7B,OAA4B1gC,KAAK47D,IAAE,CAE9G7xD,MAAO6xD,EAAGv7D,GACVgU,MAAOunD,EAAGjR,kBAId,OACEprD,EAAAA,cAAC8iB,EAAAA,EAAQ,CAACC,MAAI,GACZ/iB,EAAAA,cAAA,OAAKC,UAAU,mBACbD,EAAAA,cAAA,OAAKC,UAAU,wBAAuB,iCAGtCD,EAAAA,cAAA,WACEA,EAAAA,cAAA,OAAKC,UAAU,kBAAiB,iDAGhCD,EAAAA,cAACikB,EAAAA,GAAM,CACLrpB,QAASshE,EACT97D,SAAW2Z,IAAYgb,EAAuBhb,EAAS,IAGvDkiD,GACEj8D,EAAAA,cAAA,WACEA,EAAAA,cAAA,OAAKC,UAAU,kBAAiB,qCAChCD,EAAAA,cAAA,UACGi8D,EAAwB3lC,UAAU71B,KAAK0D,GAAanE,EAAAA,cAAA,MAAIxB,IAAK2F,EAASrD,IAAId,EAAAA,cAAA,KAAG6D,KAAO,cAAaM,EAASrD,KAAMR,OAAO,UAAU6D,EAASqH,aAMrJxL,EAAAA,cAAA,OAAKC,UAAU,YAAW,MAC1BD,EAAAA,cAAA,WACEA,EAAAA,cAAA,SAAOC,UAAU,iBAAiB4uB,QAAQ,SAAQ,iCAClD7uB,EAAAA,cAAA,YACEyC,KAAK,QACL3B,GAAG,QACHoxC,KAAM,GACNzrC,KAAM,EACN+D,MAAOuxD,EACP37D,SAAWC,GAAM27D,EAA4B37D,EAAEC,OAAOkK,UAI1DxK,EAAAA,cAAA,OAAKC,UAAU,qBAEfD,EAAAA,cAAA,WACEA,EAAAA,cAAA,OAAKC,UAAU,kBAAiB,2BAGhCD,EAAAA,cAACikB,EAAAA,GAAM,CACLrpB,QAASwhE,EACTh8D,SAAW2Z,IAAa+hD,EAAoB/hD,EAAS,KAGzD/Z,EAAAA,cAAA,OAAKC,UAAU,8BACbD,EAAAA,cAACqB,GAAAA,EAAQ,CAACO,QA7GD06D,KACfV,GAAa,GAEb,MAAMW,EAA0BC,IAC9B,MAAMC,EAA4B,CAChCv8D,KAAM,qBACNmM,KAAK09B,EAAAA,GAAAA,KACL2R,cAAe8gB,EACf7gB,gBAAiB,qBAGboB,GAAyBue,EAAAA,EAAAA,IAASjyC,GAAauC,GAAuB,2BAAdA,EAAK1rB,OAE7Dw8D,EAAW3f,EAAuB1mC,QAAQhX,OAGhD,GAFA8pB,EAAe6D,WAAU8kB,EAAAA,EAAAA,IAAiB2qB,EAA2B1f,EAAuB1wC,IAAK,UAAWqwD,IAExGb,EAAkB,CACpB,IAAIjlC,EAAyD,CAC3DD,sBAAuB6lC,EACvB3lC,mBAAoBglC,EAAiBrxD,OAGnCusB,EAAmBvC,EAAewC,0CAA4C,GAClFD,EAAmBA,EAAiBrmB,OAAO,CAACkmB,IAC5CpC,EAAeyC,4CAA4CF,EAC7D,GAGF,GAAIglC,EAAyBjxD,OAAOzL,OAAS,EAAG,CAC9C,MAAMs9D,EAAU,EACVC,EAA2Bt7D,EAAMu7D,kCAAkCF,GACzEC,EAAyBE,4BACzBF,EAAyBG,6BAA6B,CAACt6D,KAAMs5D,EAAyBjxD,SACtF8xD,EAAyBI,yBAAyBnjE,GAAS0iE,EAAuB1iE,EAAK2Q,MAAM3Q,KAAKiH,KACpG,MACEy7D,EAAuBznC,EAAoBtqB,OAI7CoxD,GAAa,GACbzyC,EAAeW,kBAAkB,GAqEG7E,EAAYjlB,EAAAA,cAACkW,GAAAA,EAAiB,MAAM,oBAClElW,EAAAA,cAACqB,GAAAA,EAAQ,CAACpB,UAAU,gBAAgB2B,QAASunB,EAAeW,kBAAkB,YAKxF,CC9Ie,SAASmzC,GAAiC37D,GACvD,MACE6nB,EAEE7nB,EAFF6nB,eACAC,EACE9nB,EADF8nB,oBAGIE,EAAcF,EAAoBE,YACxC,MAA0B,qCAAtBA,GAAaC,KACR,KAIPvpB,EAAAA,cAAC8iB,EAAAA,EAAQ,CAACC,MAAI,GACZ/iB,EAAAA,cAAA,OAAKC,UAAU,mBACbD,EAAAA,cAAA,OAAKC,UAAU,uBAAuBM,MAAO,CAAC+E,cAAe,SAAS,wEAGtEtF,EAAAA,cAAA,WACEA,EAAAA,cAAA,SAAG,yDAGHA,EAAAA,cAAA,SAAG,4GAILA,EAAAA,cAAA,OAAKC,UAAU,8BACbD,EAAAA,cAACqB,GAAAA,EAAQ,CAACO,QAASA,KACjBwnB,EAAoB8zC,+BAA+B5zC,EAAYkpB,sBAC/DrpB,EAAeoD,uBAAuB,CAACL,MAAO,CAAC7f,IAAKid,EAAYkpB,qBAAsBrmB,WAAY,UAAWvrB,MAAO,GAAIwrB,IAAK,CAAC/f,IAAKid,EAAYkpB,qBAAsBrmB,WAAY,UAAWvrB,MAAO,KACnMuoB,EAAeW,kBAAkB,GAChC,2BACH9pB,EAAAA,cAACqB,GAAAA,EAAQ,CAACpB,UAAU,gBAAgB2B,QAASunB,EAAeW,kBAAkB,6BAKxF,CChCe,SAASqzC,GAAU77D,GAChC,MACE6nB,EAEE7nB,EAFF6nB,eACAC,EACE9nB,EADF8nB,oBAGF,GAAKA,EAAoBE,aAAgBH,EAAemJ,UAExD,OAAQlJ,EAAoBE,YAAYC,MACtC,IAAK,mCACH,OACEvpB,EAAAA,cAACi9D,GAAgC5+D,OAAAia,OAAA,GAC3BhX,EAAK,CACT6nB,eAAgBA,KAGtB,IAAK,8BACH,MAAMqL,EAAiBlzB,EAAMkzB,eAE7B,OACEx0B,EAAAA,cAAC07D,GAAgCr9D,OAAAia,OAAA,GAC3BhX,EAAK,CACT6nB,eAAgBA,EAChBqL,eAAgBA,KAGtB,QACE,OAAO,KAEb,C,wCClCe,MAAM4oC,WAAuCp9D,EAAAA,UAC1DgC,WAAAA,CAAYV,GACVW,MAAMX,GAENa,KAAKS,MAAQ,CACXy6D,4BAA8Bl7D,KAAKb,MAAMg8D,2CAA6Cn7D,KAAKb,MAAMs0B,iCAAiCza,MAAKoiD,GAAWA,EAAQz8D,KAAOqB,KAAKb,MAAMg8D,4CAA8Cn7D,KAAKb,MAAMs0B,iCAAiCza,MAAKoiD,GAAWA,EAAQz8D,KAAOqB,KAAKb,MAAMg8D,4CAA2C51D,mBAAmB5G,GAAK,GACnX08D,yBAA2Br7D,KAAKb,MAAMg8D,2CAA6Cn7D,KAAKb,MAAMs0B,iCAAiCza,MAAKoiD,GAAWA,EAAQz8D,KAAOqB,KAAKb,MAAMg8D,4CAA8Cn7D,KAAKb,MAAMs0B,iCAAiCza,MAAKoiD,GAAWA,EAAQz8D,KAAOqB,KAAKb,MAAMg8D,4CAA2CxnC,gBAAgBh1B,GAAK,GAC7W28D,YAAct7D,KAAKb,MAAMg8D,0CAE7B,CAEAI,6BAAAA,CAA8B1/D,GAC5B,IAAIq/D,EAEFA,EADsB,KAArBr/D,EAAMsC,OAAOkK,MACgB6Q,SAASrd,EAAMsC,OAAOkK,OAExB,GAE9BrI,KAAKO,SAAS,CAAC26D,4BAA6BA,GAC9C,CAEAM,0BAAAA,CAA2B3/D,GACzB,IAAIw/D,EAEFA,EADsB,KAArBx/D,EAAMsC,OAAOkK,MACa6Q,SAASrd,EAAMsC,OAAOkK,OAExB,GAE3BrI,KAAKO,SAAS,CAAC86D,yBAA0BA,GAC3C,CAEAI,eAAAA,CAAgB5/D,GACdA,EAAM0V,iBACN,MAAMmqD,EAA0E,KAA3C17D,KAAKS,MAAMy6D,4BAC1CS,EAAoE,KAAxC37D,KAAKS,MAAM46D,yBAE7C,GAAIK,GAAiCC,GAE/B,GAAGD,IAAiCC,EACxCrpD,MAAM,qCACD,GAAGqpD,IAA8BD,EACtCppD,MAAM,yCACD,GAAIopD,GAAgCC,EAA2B,CACpE,IAAIxzC,EAAK,GAEPA,EADCuzC,GAAgCC,EAC5B,4KAEA,8JAEH76D,QAAQqnB,KACVnoB,KAAKb,MAAMs0B,iCAAiC72B,SAASqtD,IAC/CA,EAAgC1kD,mBAAmB5G,KAAOqB,KAAKS,MAAMy6D,6BAA+BjR,EAAgCt2B,gBAAgBh1B,KAAOqB,KAAKS,MAAM46D,0BACxKr7D,KAAKb,MAAMy8D,qCAAqC3R,EAAgCtrD,GAClF,IAEFqB,KAAKO,SAAS,CAAC+6D,YAAY,IAE/B,OApBEhpD,MAAM,wBAqBV,CAEAupD,gBAAAA,CAAiBhgE,GACfA,EAAM0V,iBAEFzQ,QADK,qLAEPd,KAAKO,SAAS,CACZ+6D,YAAY,EACZJ,4BAA6B,GAC7BG,yBAA0B,IAGhC,CAEAS,kBAAAA,CAAmBjgE,GACjBA,EAAM0V,iBACNvR,KAAKb,MAAMy8D,qCAAqC57D,KAAKb,MAAM48D,0CAC3D,MAAMC,EAAyCh8D,KAAKb,MAAM48D,0CAA4C/7D,KAAKb,MAAMs0B,iCAAiCza,MAAKoiD,GAAWA,EAAQz8D,KAAOqB,KAAKb,MAAM48D,2CAC5L/7D,KAAKO,SAAS,CACZ26D,4BAA6Bc,EAAyCA,EAAuCz2D,mBAAmB5G,GAAK,GACrI08D,yBAA0BW,EAAyCA,EAAuCroC,gBAAgBh1B,GAAK,IAEnI,CAEAyD,MAAAA,GACE,IAAI23D,EAA2B/5D,KAAKb,MAAMs0B,iCACvC93B,QAAQsuD,IAAqCjqD,KAAKS,MAAM46D,0BAA4Br7D,KAAKS,MAAM46D,2BAA2BpR,EAAgCt2B,gBAAgBh1B,KAC1KL,KAAK2rD,GAAoCA,EAAgC1kD,qBAE5Ew0D,EAA2BjmC,GAAAA,GAAUO,GAAOA,EAAG11B,IAAIo7D,GAEnD,IAMIkC,EACAC,EAPAjC,EAAwBj6D,KAAKb,MAAMs0B,iCACpC93B,QAAQsuD,IAAqCjqD,KAAKS,MAAMy6D,6BAA+Bl7D,KAAKS,MAAMy6D,8BAA8BjR,EAAgC1kD,mBAAmB5G,KACnLL,KAAK2rD,GAAoCA,EAAgCt2B,kBAE5EsmC,EAAwBnmC,GAAAA,GAAUomC,GAAOA,EAAGv7D,IAAIs7D,GAKhD,IAmEIkC,EAOAC,EAKAC,EA/EAC,EAA4Bt8D,KAAKb,MAAM48D,yCAA2C/7D,KAAKb,MAAMs0B,iCAAiCza,MAAKoiD,GAAWA,EAAQz8D,KAAOqB,KAAKb,MAAM48D,2CAA0Cx2D,mBAAmBjF,KAAO,GAC5Oi8D,EAA2Bv8D,KAAKb,MAAM48D,yCAA2C/7D,KAAKb,MAAMs0B,iCAAiCza,MAAKoiD,GAAWA,EAAQz8D,KAAOqB,KAAKb,MAAM48D,2CAA0CpoC,gBAAgBs1B,cAAgB,GAEjPuT,EAA0B3+D,EAAAA,cAAA,UAAQI,SAAU+B,KAAKu7D,8BAA8B3oD,KAAK5S,MAAOqI,MAAOrI,KAAKS,MAAMy6D,4BAA6B77D,UAAWW,KAAKb,MAAMs9D,iCAClK5+D,EAAAA,cAAA,UAAQwK,MAAM,IAAG,UAEf0xD,EAAyBz7D,KAAKq8C,GAC1B98C,EAAAA,cAAA,UAAQxB,IAAKs+C,EAAkBh8C,GACvB0J,MAAOsyC,EAAkBh8C,IAAKg8C,EAAkBr6C,SAM5Do8D,EAAsB7+D,EAAAA,cAAA,UAAQI,SAAU+B,KAAKw7D,2BAA2B5oD,KAAK5S,MAAOqI,MAAOrI,KAAKS,MAAM46D,yBAA0Bh8D,UAAWW,KAAKb,MAAMs9D,iCACxJ5+D,EAAAA,cAAA,UAAQwK,MAAM,IAAG,UAEf4xD,EAAsB37D,KAAK+pD,GACvBxqD,EAAAA,cAAA,UAAQxB,IAAKgsD,EAAe1pD,GACpB0J,MAAOggD,EAAe1pD,IAAK0pD,EAAeY,kBAM1D,GAAIjpD,KAAKS,MAAM66D,WA+BbW,EAAuBp+D,EAAAA,cAAA,WACrBA,EAAAA,cAAA,OAAKO,MAAO,CAAC6M,eAAgB,iBAAkBqxD,GAC5CE,GAGLN,EAAsBr+D,EAAAA,cAAA,WACpBA,EAAAA,cAAA,OAAKO,MAAO,CAAC6M,eAAgB,iBAAkBsxD,GAC5CG,OAtCoB,CACzB,MAAMjpC,EAA+CzzB,KAAKb,MAAMs0B,iCAEhE,GAAIzzB,KAAKb,MAAM48D,0CAA4CjoC,GAAAA,EAAOA,GAAAA,EAAS,KAAM9zB,KAAKb,MAAM48D,0CAA2CtoC,GAAkCluB,mBAAmB5G,KAAOm1B,GAAAA,EAAOA,GAAAA,EAAS,KAAM9zB,KAAKb,MAAMg8D,2CAA4C1nC,GAAkCluB,mBAAmB5G,GACnUs9D,EAAuBp+D,EAAAA,cAAA,WAAMy+D,OAC1B,CACH,IAAIK,EAAqC38D,KAAKb,MAAMg8D,2CAA6Cn7D,KAAKb,MAAMs0B,iCAAiCza,MAAKoiD,GAAWA,EAAQz8D,KAAOqB,KAAKb,MAAMg8D,4CAA8Cn7D,KAAKb,MAAMs0B,iCAAiCza,MAAKoiD,GAAWA,EAAQz8D,KAAOqB,KAAKb,MAAMg8D,4CAA2C51D,mBAAmBjF,KAAO,GAE9X27D,EADoC,IAAnCU,EACoB9+D,EAAAA,cAAA,WAAM2+D,GAEJ3+D,EAAAA,cAAA,WACrBA,EAAAA,cAAA,OAAKO,MAAO,CAAC6M,eAAgB,iBAAkBqxD,GAC/Cz+D,EAAAA,cAAA,OAAKO,MAAO,CAAC2M,MAAO,QAAS4xD,GAGnC,CAEA,GAAI38D,KAAKb,MAAM48D,0CAA4CjoC,GAAAA,EAAOA,GAAAA,EAAS,KAAM9zB,KAAKb,MAAM48D,0CAA2CtoC,GAAkCE,gBAAgBh1B,KAAOm1B,GAAAA,EAAOA,GAAAA,EAAS,KAAM9zB,KAAKb,MAAMg8D,2CAA4C1nC,GAAkCE,gBAAgBh1B,GAC7Tu9D,EAAsBr+D,EAAAA,cAAA,WAAM0+D,OACzB,CACH,IAAIK,EAAoC58D,KAAKb,MAAMg8D,2CAA6Cn7D,KAAKb,MAAMs0B,iCAAiCza,MAAKoiD,GAAWA,EAAQz8D,KAAOqB,KAAKb,MAAMg8D,4CAA8Cn7D,KAAKb,MAAMs0B,iCAAiCza,MAAKoiD,GAAWA,EAAQz8D,KAAOqB,KAAKb,MAAMg8D,4CAA2CxnC,gBAAgBs1B,cAAgB,GAEnYiT,EADmC,IAAlCU,EACqB/+D,EAAAA,cAAA,WAAM6+D,GAEN7+D,EAAAA,cAAA,WACpBA,EAAAA,cAAA,OAAKO,MAAO,CAAC6M,eAAgB,iBAAkBsxD,GAC/C1+D,EAAAA,cAAA,OAAKO,MAAO,CAAC2M,MAAO,QAAS6xD,GAGnC,CACF,CA6BA,OAhBG58D,KAAKb,MAAMs9D,kCAAoCz8D,KAAKb,MAAM09D,oBAC3DV,EAA4Bn8D,KAAKb,MAAM48D,2CAA6C/7D,KAAKb,MAAMg8D,0CAC3Ft9D,EAAAA,cAAA,UAAQC,UAAU,YAAY2B,QAASO,KAAK67D,iBAAiBjpD,KAAK5S,OAAO,QACzEnC,EAAAA,cAAA,UAAQC,UAAU,YAAY2B,QAASO,KAAK87D,mBAAmBlpD,KAAK5S,OAAO,YAI9EA,KAAKb,MAAMs9D,kCAAoCz8D,KAAKb,MAAM09D,oBAC3DT,EAAoBv+D,EAAAA,cAAA,UAAQC,UAAU,YAAY2B,QAASO,KAAKy7D,gBAAgB7oD,KAAK5S,OAAO,SAI3FA,KAAKb,MAAM09D,oBACZR,EAAwBx+D,EAAAA,cAAA,KAAGC,UAAU,qBAIrCD,EAAAA,cAAA,WACEA,EAAAA,cAAA,MAAIO,MAAO,CAAEa,gBAAiB,UAAW4D,QAAS,QAAS,yBAC3DhF,EAAAA,cAAA,WACEA,EAAAA,cAAA,WACAA,EAAAA,cAAA,KAAGO,MAAO,CAAEwE,WAAY,SAAU,yGAGlC/E,EAAAA,cAAA,SAAOC,UAAU,oBACfD,EAAAA,cAAA,aACEA,EAAAA,cAAA,UACEA,EAAAA,cAAA,MAAIC,UAAU,2BAA0B,uBACxCD,EAAAA,cAAA,MAAIC,UAAU,2BAA0B,6BACxCD,EAAAA,cAAA,MAAIC,UAAU,2BAA0B,0BAE1CD,EAAAA,cAAA,MAAIO,MAAO,CAAEa,gBAAiB,UAC5BpB,EAAAA,cAAA,MAAIC,UAAU,qCAAqCkC,KAAKb,MAAM29D,gBAAgB,IAAET,GAChFx+D,EAAAA,cAAA,MAAIC,UAAU,wBACZD,EAAAA,cAAA,OAAKO,MAAO,CAACI,UAAW,WACrBy9D,IAGLp+D,EAAAA,cAAA,MAAIC,UAAU,wBACZD,EAAAA,cAAA,OAAKO,MAAO,CAACI,UAAW,WACrB09D,IAGLr+D,EAAAA,cAAA,UACEA,EAAAA,cAAA,OAAKO,MAAO,CAACI,UAAW,WACrB29D,OAMXt+D,EAAAA,cAAA,OAAKO,MAAO,CAACI,UAAW,WACrB49D,GAEHv+D,EAAAA,cAAA,YAIR,E,4BChOF,SAASk/D,GAA6Cp5D,EAA4CC,GAChG,OAAOD,EAAE6wB,wBAA0B5wB,EAAE4wB,uBAAyB7wB,EAAE+wB,qBAAuB9wB,EAAE8wB,kBAC3F,CAEe,MAAMsoC,WAAiCn/D,EAAAA,UACpDgC,WAAAA,CAAYV,GACVW,MAAMX,GACNa,KAAKS,MAAQ,CACXw8D,eAAe,EACf5B,8BAA0Bz9D,EAE9B,CAEA49D,0BAAAA,CAA2B3/D,GACzBmE,KAAKO,SAAS,CAAC86D,yBAAiD,KAAvBx/D,EAAMsC,OAAOkK,MAAe6Q,SAASrd,EAAMsC,OAAOkK,OAAS,MACtG,CAEA60D,qBAAAA,CAAsBxpC,IACpBypC,EAAAA,GAAAA,IAAa,CACXC,SAAUA,EAAGl9D,aAETrC,EAAAA,cAAA,OAAKC,UAAU,4BACbD,EAAAA,cAAA,UAAI,iCACJA,EAAAA,cAAA,SAAG,uKACHA,EAAAA,cAAA,UAAQC,UAAU,YAChBM,MAAO,CAAC8iB,YAAa,OACrBzhB,QAASA,KACPO,KAAKq9D,iBAAiB3pC,GACtBxzB,GAAS,GAEZ,YAGDrC,EAAAA,cAAA,UAAQC,UAAU,YAAY2B,QAASS,GAAS,YAK1D,CAEAm9D,gBAAAA,CAAiB3pC,GACf,MAAArxB,EAGIrC,KAAKb,MAFP01B,EAAwCxyB,EAAxCwyB,0CAKFC,EAJ6CzyB,EAA3CyyB,6CAGuBD,EAAyCl5B,QAAQ2hE,IAAkBP,GAA6CO,EAAc5pC,KAEzJ,CAEA6pC,iBAAAA,CAAkB7pC,GAChB,MAAAqjB,EAGI/2C,KAAKb,MAFP01B,EAAwCkiB,EAAxCliB,0CAKFC,EAJ6CiiB,EAA3CjiB,6CAGuBD,EAAyCtmB,OAAO,CAACmlB,IAE5E,CAEA8pC,mBAAAA,IACEL,EAAAA,GAAAA,IAAa,CACXC,SAAUA,EAAGl9D,aAETrC,EAAAA,cAAA,OAAKC,UAAU,4BACbD,EAAAA,cAAA,SAAG,uNACHA,EAAAA,cAAA,UAAQC,UAAU,YAChBM,MAAO,CAAC8iB,YAAa,OACrBzhB,QAASA,KACPO,KAAKy9D,oBACLv9D,GAAS,GAEZ,YAGDrC,EAAAA,cAAA,UAAQC,UAAU,YAAY2B,QAASS,GAAS,YAK1D,CAEAu9D,iBAAAA,GACE,MAAAxmB,EAIIj3C,KAAKb,MAHP26D,EAAuB7iB,EAAvB6iB,wBACAjlC,EAAwCoiB,EAAxCpiB,yCACAC,EAA2CmiB,EAA3CniB,4CAIAumC,EACEr7D,KAAKS,MADP46D,yBAGF,IAAKA,EAEH,YADA/oD,MAAM,oCAIR,IAAImiB,EAAgB,CAClBD,sBAAuBslC,EAAwBn7D,GAC/C+1B,mBAAoB2mC,GAItBvmC,EADyBD,EAAyCtmB,OAAO,CAACkmB,KAE1Ez0B,KAAKO,SAAS,CAAE08D,eAAe,EAAO5B,8BAA0Bz9D,GAClE,CAEA8/D,mBAAAA,GACE19D,KAAKO,SAAS,CAAC08D,eAAe,GAChC,CAEA76D,MAAAA,GACE,MAAAu1C,EAMI33C,KAAKb,MALP2pD,EAAenR,EAAfmR,gBACAgR,EAAuBniB,EAAvBmiB,wBACA6D,EAAuChmB,EAAvCgmB,wCACA9oC,EAAwC8iB,EAAxC9iB,yCACA9N,EAAW4wB,EAAX5wB,YAGFvmB,EAGIR,KAAKS,MAFPw8D,EAAaz8D,EAAby8D,cACA5B,EAAwB76D,EAAxB66D,yBAIF,IAAKvB,EACH,OACEj8D,EAAAA,cAAA,WACEA,EAAAA,cAAA,MAAIO,MAAO,CAACa,gBAAiB,UAAW4D,QAAS,QAAQ,uCAK/D,MAAM+6D,EAAiBD,EAAsFpvD,OAAOsmB,GAA0Cl5B,QAAQ+3B,GAASA,EAAKc,wBAA0BslC,EAAwBn7D,IAAM+0B,EAAKgB,qBAC3OmpC,EAAsB/pC,GAAAA,EAAWipC,GAA8Ca,GAErF,IAuCI9lC,EAAUgmC,EAvCVC,EAAYF,EAAoBv/D,KAAKo1B,IACvC,MAAMsqC,EAAgBL,EAAwC14D,MAAMg5D,GAAgBlB,GAA6CkB,EAAavqC,KACxIwqC,EAAiBrpC,EAAyC5vB,MAAMq4D,GAAiBP,GAA6CO,EAAc5pC,KAElJ,IAAIyqC,EACAC,EAAW,CAAC,EACgC,YAA5Cr3C,EAAY/c,YAAY4xB,kBACrBsiC,EAGMF,GAAmBtqC,EAAK22B,WAAuC,IAA1B32B,EAAK22B,UAAUntD,SAC7DihE,EAAatgE,EAAAA,cAAA,UAAQ4B,QAASA,IAAMO,KAAKk9D,sBAAsBxpC,IAAO,YAHtEyqC,EAAatgE,EAAAA,cAAA,UAAQ4B,QAASA,IAAMO,KAAKu9D,kBAAkB7pC,IAAO,WAClE0qC,EAAW,CAACC,mBAAoB,eAAgBC,oBAAqB,WAMzE,MAAMjW,EAAiBS,EAAgB9vC,MAAK2E,GAAKA,EAAEhf,KAAO+0B,EAAKgB,qBAE/D,OACE72B,EAAAA,cAAA,MAAIO,MAAOggE,GACTvgE,EAAAA,cAAA,UAAK0gE,UAAUzE,EAAwBx5D,OACvCzC,EAAAA,cAAA,UAAKwqD,GAAgB/nD,MACrBzC,EAAAA,cAAA,UACEA,EAAAA,cAAA,OAAKO,MAAO,CAACI,UAAW,WAEpBk1B,EAAK22B,WAAW/rD,KAAKksD,GACnB3sD,EAAAA,cAAA,SAAGA,EAAAA,cAAA,KAAG6D,KAAO,aAAY8oD,EAASlF,iBAAiBC,oCAAqCiF,EAASC,8BAKzG5sD,EAAAA,cAAA,UACEA,EAAAA,cAAA,OAAKO,MAAO,CAACI,UAAW,WACrB2/D,IAGF,IAKT,GAAgD,YAA5Cp3C,EAAY/c,YAAY4xB,gBAC1B,GAAIqhC,EAMG,CACL,IAAIuB,EAAgBX,EAAoBv/D,KAAKo1B,GAASA,EAAKgB,qBACvDulC,EAAwBnR,EAAgBntD,QAAQu+D,IAAQsE,EAAcr5D,SAAS+0D,EAAGv7D,MAEtFm/D,EACEjgE,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAK0gE,UAAUzE,EAAwBx5D,OACvCzC,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAQI,SAAU+B,KAAKw7D,2BAA2B5oD,KAAK5S,MAAOqI,MAAOgzD,GAA4B,IAC/Fx9D,EAAAA,cAAA,UAAQwK,MAAM,IAAG,UAEf4xD,EAAsB37D,KAAK+pD,GACzBxqD,EAAAA,cAAA,UACExB,IAAKgsD,EAAe1pD,GACpB0J,MAAOggD,EAAe1pD,IAAK0pD,EAAeY,mBAMpDprD,EAAAA,cAAA,WACAA,EAAAA,cAAA,YAIJi6B,EACEj6B,EAAAA,cAAA,OAAKO,MAAO,CAACI,UAAW,SAAUgR,aAAc,QAC9C3R,EAAAA,cAAA,UAAQC,UAAU,YAAYM,MAAO,CAAC8iB,YAAa,OAAQzhB,QAASA,IAAMO,KAAKw9D,sBAAuBn+D,UAAWg8D,GAA0B,QAC3Ix9D,EAAAA,cAAA,UAAQC,UAAU,YAAY2B,QAASA,IAAMO,KAAK09D,uBAAuB,UAG/E,MApCE5lC,EACEj6B,EAAAA,cAAA,OAAKO,MAAO,CAACI,UAAW,SAAUgR,aAAc,QAC9C3R,EAAAA,cAAA,UAAQC,UAAU,YAAY2B,QAASA,IAAMO,KAAKO,SAAS,CAAC08D,eAAe,KAAQ,YAqC3F,OACEp/D,EAAAA,cAAA,WACEA,EAAAA,cAAA,MAAIO,MAAO,CAACa,gBAAiB,UAAW4D,QAAS,QAAQ,kCACzDhF,EAAAA,cAAA,WACEA,EAAAA,cAAA,KAAGO,MAAO,CAACwE,WAAY,SAAS,+OAKhC/E,EAAAA,cAAA,SAAOC,UAAU,oBACfD,EAAAA,cAAA,aACEA,EAAAA,cAAA,UACEA,EAAAA,cAAA,MAAIC,UAAU,2BAA0B,sBACxCD,EAAAA,cAAA,MAAIC,UAAU,2BAA0B,kCACxCD,EAAAA,cAAA,MAAIC,UAAU,2BAA0B,4CACxCD,EAAAA,cAAA,MAAIC,UAAU,6BAEfigE,EACAD,IAGJhmC,GAIT,ECrPa,MAAM2mC,WAA8B5gE,EAAAA,UACjDgC,WAAAA,CAAYV,GACVW,MAAMX,GAENa,KAAKS,MAAQ,CACXi+D,aAAa,EAEjB,CAEAt8D,MAAAA,GACE,MAAAC,EAIIrC,KAAKb,MAHPu4B,EAAer1B,EAAfq1B,gBACAzQ,EAAmB5kB,EAAnB4kB,oBACAoL,EAAchwB,EAAdgwB,eAIAqsC,EACE1+D,KAAKS,MADPi+D,YAG2BhnC,EAAgBsH,KAC7C,IAEI2/B,EAFAC,EAA8B5+D,KAAKb,MAAMw5B,YAAYC,kBAAoB,2BAA6B,GAG1G,IAAK8lC,EAAa,CAChB,IAAIG,EACJ,GAAI,yCAA0CxsC,EAC5CwsC,EACEhhE,EAAAA,cAACo9D,GAA8B,CAC7BxnC,iCAAkCpB,EAAeoB,iCACjDsoC,yCAA0C1pC,EAAe0pC,yCACzDZ,0CAA2C9oC,EAAe8oC,0CAC1DS,qCAAsCvpC,EAAeupC,qCACrDkB,gBAAiB98D,KAAKb,MAAMkK,MAAM8e,KAClCs0C,gCAAiCz8D,KAAKb,MAAM4nB,YAAY/c,YAAY80D,sBACpEjC,kBAAmB78D,KAAKb,MAAM8nB,oBAAoB41C,wBAGjD,CACL,IAAI/C,EACJ,GAAI7yC,EAAoBmJ,4BAA6B,CACnD,IAAI2uC,EAAc93C,EAAoBmJ,4BAA4BpX,MAAKyQ,GAAsB,sBAAdA,EAAK1rB,QAAwEY,GAC5Jm7D,EAA0BznC,EAAe+B,mBAAmBpb,MAAMqb,GAAMA,EAAG11B,KAAOogE,GACpF,CACAF,EACEhhE,EAAAA,cAACm/D,GAAwB,CACvBlU,gBAAiBz2B,EAAey2B,gBAChC6U,wCAAyCtrC,EAAeoB,iCACxDoB,yCAA0CxC,EAAewC,0CAA4C,GACrGC,4CAA6CzC,EAAeyC,4CAC5DglC,wBAAyBA,EACzB/yC,YAAa/mB,KAAKb,MAAM4nB,aAG9B,CAEA43C,EACE9gE,EAAAA,cAAA,OAAKC,UAAU,oBACZ+gE,EAGP,CAEA,OACEhhE,EAAAA,cAAA,OAAKC,UAAY,mBAAkB8gE,KACjC/gE,EAAAA,cAAA,OAAKC,UAAU,yBAAyB2B,QAASA,IAAMO,KAAKO,SAAS,CAACm+D,aAAcA,KAClF7gE,EAAAA,cAAA,UACEA,EAAAA,cAAA,QAAMC,UAAW4gE,EAAc,gBAAkB,mBACjD7gE,EAAAA,cAAA,QAAMC,UAAU,yBAAwB,0BAG3C6gE,EAGP,E,k/BCtEF,MAAMK,GAAc,CAACz9C,OAAQ,kBAAmBljB,WAAY,MAAOmR,aAAc,MAAO3M,QAAS,OAcjG,SAASo8D,GAAiB9/D,GACxB,MACE6nB,EAKE7nB,EALF6nB,eACAD,EAIE5nB,EAJF4nB,YACAm4C,EAGE//D,EAHF+/D,cACApmC,EAEE35B,EAFF25B,eACAqmC,EACEhgE,EADFggE,OAGIC,EAAqBj3C,IACzBliB,MAAO,aAAY6yB,EAAen6B,2BAA4B,CAC5DskB,OAAQ,OACR7qB,QAAS+Z,aAAaigD,oBAAoB,CACxC,OAAU,mBACV,eAAgB,qBAElBtpC,KAAMvrB,KAAKC,UAAU,CAAE2qB,KAAMA,EAAMk3C,UAAWlgE,EAAM4nB,YAAYpoB,MAChE,EAGE2gE,EAAuBn3C,GACjBA,EAAK1lB,QAAQ,WAAW,IAIpC,GA7BF,SAA4By8D,GAC1B,MAA8B,uBAAvBA,EAAcnhE,IACvB,CA2BMwhE,CAAmBL,GAAgB,CACrC,MAAMtJ,EAAS7uC,EACgBm4C,EAAc19B,MAE7C,OACE3jC,EAAAA,cAAA,OACEc,GAAI,kCACJb,UAAU,mDACVzB,IAAK6iE,EAAcM,cACnBphE,MAAK1F,GAAAA,GAAA,GAAMsmE,IAAW,IAAE72D,MAAO,QAAS8F,SAAU,WAAYiN,IAAM,GAAEikD,MAAYM,MAAO,UAEzF5hE,EAAAA,cAACkyD,GAAe,CACdE,WAAa,GAAE2F,EAAOnN,aAAamN,EAAOjN,WAC1CkH,WAAY7oC,EAAe2a,YAAYi0B,EAAOj3D,MAEhDd,EAAAA,cAACkzD,GAAe,CACdpK,UAAQ,EACRuK,WAAa/oC,IACXi3C,EAAkBj3C,GAClBnB,EAAe6D,WAAU60C,EAAAA,EAAAA,IAA0BR,EAAchnC,UAAW/P,GAAO+2C,EAAclzC,WACjGhF,EAAeW,kBAAkB,EAEnCkqC,cAAeA,IAAM7qC,EAAeW,mBACpC2pC,QAASA,OACThlC,WAAS,EACTqlC,QAAS3qC,EAAe2qC,UAIhC,CAAO,CACL,IAAIgO,EACAC,EAAgB,GAEpB,MAAMngE,EAAWvB,IACXghE,EAAc7iE,MACZ6iE,EAAcW,gBAAmD,cAAjCX,EAAcW,gBAChDC,EAAAA,EAAAA,IAAYZ,EAAch1D,MAE1B8c,EAAeoD,uBAAuB,CACpCL,MAAO,CAAC7f,IAAKg1D,EAAch1D,IAAK8f,WAAYk1C,EAAc7iE,IAAKoC,MAAOygE,EAAc19B,MAAMzX,OAC1FE,IAAK,CAAC/f,IAAKg1D,EAAch1D,IAAK8f,WAAYk1C,EAAc7iE,IAAKoC,MAAOygE,EAAc19B,MAAMzX,UAG1Fg2C,EAAAA,EAAAA,IAAyBb,EAAch1D,IAAKg1D,EAAc7iE,MAE9D,EAGE2jE,EAAAA,KAAuBd,EAAcnhE,MACvC4hE,EAAoBL,EAAoBJ,EAAc/2C,OAClD+2C,EAAcluB,YAAcjqB,EAAYpoB,IAAMooB,EAAY/c,YAAYi2D,kBACxEL,EAAcnjE,KACZoB,EAAAA,cAAA,KACExB,IAAI,iBACJ+B,MAAO,CAAC8iB,YAAa,MAAOve,SAAU,QAASu9D,WAAY,OAC3DpiE,UAAU,cACV2B,QAAUvB,IACR8oB,EAAe6D,WAAUs1C,EAAAA,EAAAA,IAA4BjB,EAAcjJ,WAAYiJ,EAAclzC,WAC7F9tB,EAAE8U,iBAAiB,OAM3B2sD,GAAoBS,EAAAA,EAAAA,IAAyBlB,EAAe//D,GACxD4nB,EAAY/c,YAAYq2D,sBAC1BT,EAAcnjE,KACZoB,EAAAA,cAAA,KACExB,IAAI,SACJ+B,MAAO,CAAC8iB,YAAa,MAAOve,SAAU,QAASu9D,WAAY,OAC3DpiE,UAAU,cACV2B,QAAUvB,IACR8oB,EAAe6D,WAAUy1C,EAAAA,EAAAA,IAAuBpB,EAAcjJ,WAAYiJ,EAAclzC,WACxF9tB,EAAE8U,iBAAiB,MAKvB+T,EAAY/c,YAAYu2D,sBAAwBx5C,EAAYpoB,KAAOugE,EAAcluB,YACnF4uB,EAAcnjE,KACZoB,EAAAA,cAAA,KACExB,IAAI,SACJ+B,MAAO,CAAC8iB,YAAa,MAAOve,SAAU,QAASu9D,WAAY,OAC3DpiE,UAAU,cACV2B,QAAUvB,IACR8oB,EAAe6D,WAAU21C,EAAAA,EAAAA,IAAuBtB,EAAcjJ,WAAYiJ,EAAclzC,WACxF9tB,EAAE8U,iBAAiB,MAO7B,MAAMytD,EAAgBvB,EAAcjJ,UAE9ByK,GAAoBxB,EAAchI,UAAY,IAAI54D,KAAKk+C,GAEzD3+C,EAAAA,cAAA,OAAKxB,IAAKmgD,EAAQmkB,YAChB9iE,EAAAA,cAACkyD,GAAe,CACdE,WAAYzT,EAAQ8T,iBACpBT,WAAY7oC,EAAe2a,YAAY6a,EAAQxL,WAC/Ckf,UAAW1T,EAAQ19C,YAElB09C,EAAQxL,YAAcjqB,EAAYpoB,IACjCd,EAAAA,cAAA,KACEO,MAAO,CAAC8iB,YAAa,OACrBpjB,UAAU,cACV2B,QAAUvB,IACR8oB,EAAe6D,WAAU+1C,EAAAA,EAAAA,IAA6BpkB,EAAQmkB,YAAazB,EAAclzC,WACzF9tB,EAAE8U,iBAAiB,KAK3BnV,EAAAA,cAAA,KAAGO,MAAO,CAACoR,aAAc,IAAK8vD,EAAoB9iB,EAAQr0B,OAC1DtqB,EAAAA,cAAA,MAAIO,MAAO,CAAC6E,OAAQ,cAKpB49D,EAAuBA,KAC3B,GAAI95C,EAAY/c,YAAY82D,kBAE1B,OACEjjE,EAAAA,cAACkzD,GAAe,CACdpK,SAAU3/B,EAAeG,aAAaC,OAAS25C,EAAAA,IAAgB/5C,EAAeG,aAAa65C,aAAeP,EAC1GvP,WAAa/oC,IACXi3C,EAAkBj3C,GAClBnB,EAAe6D,WAAUo2C,EAAAA,EAAAA,IAA0BR,EAAet4C,GAAO+2C,EAAclzC,WACvFhF,EAAeW,kBAAkB,EAEnCkqC,cAAeA,IAAM7qC,EAAeW,mBACpC2pC,QAASA,KACPtqC,EAAe+K,2BACf/K,EAAeY,eAAem5C,EAAAA,GAAc,CAACC,WAAYP,EAAejB,cAAeN,EAAcM,gBAEjGN,EAAc7iE,MACZ6iE,EAAcW,gBAAmD,cAAjCX,EAAcW,gBAChDC,EAAAA,EAAAA,IAAYZ,EAAch1D,MAE1B61D,EAAAA,EAAAA,IAAyBb,EAAch1D,IAAKg1D,EAAc7iE,KAE9D,EAEFs1D,QAAS3qC,EAAe2qC,SAG9B,EAGF,OACE9zD,EAAAA,cAAA,OACEc,GAAK,kBAAiBugE,EAAcM,gBACpC1hE,UAAU,0BACVzB,IAAK6iE,EAAcM,cACnBphE,MAAK1F,GAAAA,GAAA,GAAMsmE,IAAW,IAAE72D,MAAO,QAAS8F,SAAU,WAAYiN,IAAM,GAAEikD,MAAYM,MAAO,SACzFhgE,QAASA,GAET5B,EAAAA,cAACkyD,GAAe,CACdE,WAAYiP,EAAc5O,iBAC1BT,WAAY7oC,EAAe2a,YAAYu9B,EAAcluB,WACrDkf,UAAWgP,EAAcpgE,YAExB8gE,GAEH/hE,EAAAA,cAAA,KAAGC,UAAU,iCAAiCM,MAAO,CAACoR,aAAc,IAAKmwD,GACzE9hE,EAAAA,cAAA,MAAIO,MAAO,CAAC6E,OAAQ,WACnBy9D,EACAG,IAGP,CACF,CAEA,SAAehjE,EAAAA,KAAWohE,IC9NX,SAASiC,GAAuB/hE,GAC7C,MACE6nB,EAKE7nB,EALF6nB,eACAD,EAIE5nB,EAJF4nB,YACAgS,EAGE55B,EAHF45B,eAAcooC,EAGZhiE,EAFFiiE,gBAAAA,OAAe,IAAAD,EAAG,GAAEA,EACpBroC,EACE35B,EADF25B,eAGF,GAAK9R,EAAemJ,WAAc4I,EAAemL,aAEjD,OAAOrmC,EAAAA,cAAAA,EAAAA,SAAA,KAEHujE,EAAgB9iE,KAAK+iE,GAEjBxjE,EAAAA,cAACohE,GAAgB,CACf5iE,IAAKglE,EAAoBnC,cAAcM,cACvCx4C,eAAgBA,EAChBD,YAAaA,EACbm4C,cAAemC,EAAoBnC,cACnCpmC,eAAgBA,EAChBqmC,OAAQkC,EAAoBlC,WAMxC,C,oiCC7Be,SAASmC,GAAUniE,GAChC,MACEu4B,EAGEv4B,EAHFu4B,gBACA1Q,EAEE7nB,EAFF6nB,eACAC,EACE9nB,EADF8nB,oBAGF,IAAKD,EAAemJ,WAAyC,mBAA5BuH,EAAgBpuB,QAAgC,OAAO,KAExF,MAA4EmiB,EAAAvxB,GAApC2D,EAAAA,SAAe65B,EAAgBp3B,MAAK,GAArEihE,EAAY91C,EAAA,GAAE+1C,EAAe/1C,EAAA,GAEpC,IAAIg2C,EAoDJ,OAnDIx6C,EAAoBE,aAAaC,OAASs6C,EAAAA,KAC5CD,EACE5jE,EAAAA,cAAC8iB,EAAAA,EAAQ,CAACC,MAAI,GACZ/iB,EAAAA,cAAA,OAAKC,UAAU,mBACbD,EAAAA,cAAA,OAAKC,UAAU,oBACbD,EAAAA,cAAA,OAAKC,UAAU,yBACbD,EAAAA,cAAA,MAAIC,UAAU,SAAQ,kCAExBD,EAAAA,cAAA,OAAKC,UAAU,0BACbD,EAAAA,cAAA,UACEE,KAAK,SACLD,UAAU,eACV2B,QAASA,IAAMunB,EAAeW,oBAE9B9pB,EAAAA,cAAA,KAAGC,UAAU,mBAInBD,EAAAA,cAAA,WACAA,EAAAA,cAAA,SAAO6uB,QAAQ,WAAU,aAEvB7uB,EAAAA,cAAA,SACEc,GAAG,UACHZ,KAAK,OACLsK,MAAOk5D,EACPtjE,SAAWC,GAAMsjE,EAAgBtjE,EAAEC,OAAOkK,UAG9CxK,EAAAA,cAAA,SAAG,6FACHA,EAAAA,cAAA,OAAKC,UAAU,4BACbD,EAAAA,cAAA,UACEE,KAAK,SACL0B,QAASA,KACPwnB,EAAoB06C,aAAaJ,GACjCv6C,EAAeW,kBAAkB,GAEpC,QAGD9pB,EAAAA,cAAA,UACEE,KAAK,SACL0B,QAASA,IAAMunB,EAAeW,oBAC/B,cAUT9pB,EAAAA,cAAA,OAAKC,UAAU,eACbD,EAAAA,cAAA,UAAI,2BACJA,EAAAA,cAAA,OAAKC,UAAU,yBACbD,EAAAA,cAAA,UACG65B,EAAgBp3B,MAEnBzC,EAAAA,cAAA,WACEA,EAAAA,cAACioB,EAAAA,EAAS,CACRxlB,KAAMzC,EAAAA,cAAA,KAAGC,UAAU,eACnB0V,aAAW,EACXE,OAAK,EACLjU,QAASA,IAAMunB,EAAeY,eAAe85C,EAAAA,QAIlDD,EAGP,C,shECvFe,SAASG,GAAuBziE,GAC7C,MAAsEssB,EAAAvxB,GAApB2D,EAAAA,SAAe,MAAK,GAA/DgkE,EAAiBp2C,EAAA,GAAEq2C,EAAoBr2C,EAAA,GAY9C,OACE5tB,EAAAA,cAAA,OAAKO,MAAO,CAACyE,QAAS,KACpBhF,EAAAA,cAAA,WACEA,EAAAA,cAAA,MAAIO,MAAO,CAACugB,cAAe,KAAK,uBAChC9gB,EAAAA,cAAA,YACEA,EAAAA,cAAA,YAAUwK,MAAOw5D,GAAqB1iE,EAAM8nB,oBAAoBk7B,mBAAmB4f,oBAAsB,GAAI9jE,SAAWC,GAAM4jE,EAAqB5jE,EAAEC,OAAOkK,UAE9JxK,EAAAA,cAAA,YACEA,EAAAA,cAAA,UAAQC,UAAU,YAAY2B,QAlBzB,WACPoiE,IACF1iE,EAAM8nB,oBAAoBu7B,0BAAyB9pD,GAAAA,GAAC,CAAC,EAChDyG,EAAM8nB,oBAAoBk7B,oBAAkB,IAC/C4f,mBAAoBF,KAEtBC,EAAqB,MAEzB,GAUqD,UAKvD,C,shEC6Be,SAASE,GAAW7iE,GACjC,MACEu4B,EAmBEv4B,EAnBFu4B,gBACAoB,EAkBE35B,EAlBF25B,eACA/R,EAiBE5nB,EAjBF4nB,YACAgS,EAgBE55B,EAhBF45B,eACA/R,EAeE7nB,EAfF6nB,eACAC,EAcE9nB,EAdF8nB,oBACAoL,EAaElzB,EAbFkzB,eACAqK,EAYEv9B,EAZFu9B,aACA/E,EAWEx4B,EAXFw4B,eACA81B,EAUEtuD,EAVFsuD,qBACAtT,EASEh7C,EATFg7C,gBACAjzB,EAQE/nB,EARF+nB,WACA0wC,EAOEz4D,EAPFy4D,WACA3tD,EAME9K,EANF8K,WACAm3D,EAKEjiE,EALFiiE,gBACAvK,EAIE13D,EAJF03D,UACAl+B,EAGEx5B,EAHFw5B,YACA6gC,EAEEr6D,EAFFq6D,4BACAkB,EACEv7D,EADFu7D,kCAGF78D,EAAAA,WAAgB,KACd,MACEkpB,EAIE5nB,EAJF4nB,YACAk7C,EAGE9iE,EAHF8iE,cACAj7C,EAEE7nB,EAFF6nB,eACAC,EACE9nB,EADF8nB,oBAGED,EAAemJ,WAAyD,eAA5CpJ,EAAY/c,YAAY4xB,iBACtD3U,EAAoB0U,wBAAwBE,EAAAA,EAAsBE,iBAGpE,MAAMmmC,EAAwBD,EAAgB,CAACE,gBAAiBF,GAAiB,CAAC,EAClFl7C,EAAY+c,SAASs+B,EAAAA,GAAqBF,EAAsB,GAC/D,IAEH,MAAMG,EAA6BxkE,EAAAA,aAAkBhC,IAC7CmrB,EAAemJ,WAAalJ,EAAoB+T,mBAC7Cl6B,QAAQ,sGACXjF,EAAM0V,iBAEV,GACD,CAACyV,EAAemJ,UAAWlJ,EAAoB+T,mBAElDn9B,EAAAA,WAAgB,KACZjG,OAAOqK,iBAAiB,qBAAsBogE,GACvC,KACHzqE,OAAOuK,oBAAoB,qBAAsBkgE,EAA2B,IAEjF,CAACA,IAMJ,MAAgE52C,EAAAvxB,GAA5B2D,EAAAA,SAAe6+B,GAAa,GAAzD4lC,EAAU72C,EAAA,GAAE82C,EAAa92C,EAAA,GAEhC5tB,EAAAA,WAAgB,MACd2kE,EAAAA,EAAAA,IAAgB,CACdr6B,UAAWpP,EAAeoP,UAC1BvK,QAASlG,EAAgB/4B,GACzBk/B,UAAW,WACXJ,gBAAiB8kC,GACjB,GACD,IAEH,MAAME,EAAqB/qE,IACzB,MAAMgrE,GAAWC,EAAAA,EAAAA,IAAejrE,GAChC6qE,GAAej9C,GAAI5sB,GAAAA,GAAA,GACd4sB,GAAI,IACP,CAACo9C,GAAW,IAAIp9C,EAAKo9C,GAAWhrE,MAC/B,EAGCkrE,EAAqBlrE,IACzB,MAAMgrE,GAAWC,EAAAA,EAAAA,IAAejrE,GAChC6qE,GAAej9C,GAAI5sB,GAAAA,GAAA,GACd4sB,GAAI,IACP,CAACo9C,GAAWp9C,EAAKo9C,GAAU/mE,QAAQoJ,GAASA,EAAKm5B,sBAAwBxmC,EAAKwmC,yBAC7E,EAGC2kC,EAAsBnrE,IACtBA,EAAKorE,KACPL,EAAkB/qE,EAAKorE,KAErBprE,EAAKqrE,KACPH,EAAkBlrE,EAAKqrE,IACzB,EAGIC,EACJnlE,EAAAA,cAAC8iB,EAAAA,EAAQ,CAACC,MAAOmY,EAAeu6B,WAAav6B,EAAeoP,WAC1DtqC,EAAAA,cAAA,OAAKC,UAAU,mBAEXopB,EAAWi3B,UACTtgD,EAAAA,cAAA,SAAG,8QACHA,EAAAA,cAAA,SAAG,oKAMb,IAAIolE,EAAa,KACjB,GAAIj8C,EAAemJ,WAAalJ,EAAoBE,aAAaC,OAASmU,EAAAA,GAAe,CACvF,MAAMC,EAAYvU,EAAoBE,aAAaqU,UACnDynC,EACEplE,EAAAA,cAAC4+B,GAAsB,CACrBpgC,IAAM,GAAEm/B,QACR9D,gBAAiBA,EACjBoB,eAAgBA,EAChB/R,YAAaA,EACbC,eAAgBA,EAChBC,oBAAqBA,EACrByV,aAAc4lC,EACd3lC,cAAe8lC,EACf7lC,cAAegmC,EACf/lC,eAAgBgmC,GAGtB,CAEA,MAAMK,EAAiBxjE,EACrB,uBAGIyjE,EAAgBzjE,EACpB,WACC,GAAEq5B,EAAeW,2BAClB,CACE,aAAc1S,EAAemJ,YAI3BizC,EAAap8C,EAAe6Q,mBAAqB5tB,IAAe8uB,EAAeoP,UAErF,IAAIk7B,EAAqB,KACzB,GAAIlkE,EAAMmkE,WAAat8C,EAAe6Q,iBAAkB,CACtD,IAAI0rC,EAAc,CAChB1lE,EAAAA,cAAA,UAAQC,UAAU,6CAClBzB,IAAI,sBACJgM,MAAO0wB,EAAeW,YACtBz7B,SAAWC,KAAOy7B,EAAAA,GAAAA,GAAcz7B,EAAEC,OAAOkK,QAAU0wB,EAAea,eAAe17B,EAAEC,OAAOkK,MAAM,GAC9FxK,EAAAA,cAAA,UAAQwK,MAAOwxB,GAAAA,EAAaC,SAAS,WACrCj8B,EAAAA,cAAA,UAAQwK,MAAOwxB,GAAAA,EAAaE,SAAS,WACrCl8B,EAAAA,cAAA,UAAQwK,MAAOwxB,GAAAA,EAAaG,MAAM,QAClCn8B,EAAAA,cAAA,UAAQwK,MAAOwxB,GAAAA,EAAaI,SAAS,aAIzCopC,EACExlE,EAAAA,cAAA,OAAKC,UAAU,gBACZylE,EAEP,CAEA,MAAMC,GAAqBv5D,IAAe8uB,EAAeoP,UACzD,IAAIs7B,EAAyB18C,EAAY/c,YAAY05D,WACjDC,EAAeP,GAAcK,EAEjC,MAAMG,EAAY/lE,EAAAA,OAA6B,MACU20B,EAAAt4B,GAAjB2D,EAAAA,SAAe,GAAE,GAAlDgmE,EAAYrxC,EAAA,GAAEsxC,EAAetxC,EAAA,GAiBpC,OAfA30B,EAAAA,WAAgB,KACd,MAAMkmE,EAAW,IAAIC,gBAAe,KAC9BJ,EAAUp2D,UACZiF,QAAQwK,IAAI2mD,EAAUp2D,QAAQkW,cAC9BogD,EAAgBF,EAAUp2D,QAAQkW,cACpC,IAOF,OAJIkgD,EAAUp2D,SACZu2D,EAASE,QAAQL,EAAUp2D,SAGtB,IAAMu2D,EAASG,YAAY,GACjC,IAGDrmE,EAAAA,cAAA,OAAKC,UAAWolE,GACdrlE,EAAAA,cAAA,OAAKC,UAAU,sBACZ6lE,GACC9lE,EAAAA,cAAA,OAAKmQ,IAAK41D,EAAW9lE,UAAU,mBAC5BslE,GAAcvlE,EAAAA,cAAC4gE,GAAqBviE,OAAAia,OAAA,CACnCuhB,gBAAiBA,EACjB1Q,eAAgBA,EAChBC,oBAAqBA,EACrB8R,eAAgBA,EAChB1G,eAAgBA,EAChBtL,YAAaA,EACb4R,YAAaA,GACTzR,IAENrpB,EAAAA,cAAC8iC,GAAU,CACTtkC,IAAI,WACJq7B,gBAAiBA,EACjBoB,eAAgBA,EAChB/R,YAAaA,EACbgS,eAAgBA,EAChB/R,eAAgBA,EAChBC,oBAAqBA,EACrByV,aAAc4lC,EACd3qC,eAAgBA,EAChBzQ,WAAYA,EACZmL,eAAgBA,EAEhBsG,YAAaA,KAInB96B,EAAAA,cAAA,OACEc,GAAG,mBACHb,UAAU,mBACVM,MAAO,CAACgS,UAAWyzD,EAAc51D,SAAU,aAE3CpQ,EAAAA,cAAA,OACEC,UAAWqlE,GAEVH,EACAC,EACAI,EACDxlE,EAAAA,cAACyjE,GAAS,CACR5pC,gBAAiBA,EACjB1Q,eAAgBA,EAChBC,oBAAqBA,EAErB0R,YAAaA,IAEf96B,EAAAA,cAACs9C,GAAUj/C,OAAAia,OAAA,GACL+Q,EAAU,CACdwQ,gBAAiBA,EACjBoB,eAAgBA,EAChB/R,YAAaA,EACbgS,eAAgBA,EAChB/R,eAAgBA,EAChB0V,aAAc4lC,EAEd3pC,YAAaA,EAEb7H,MAAO,EACPqpB,gBAAiBA,MAInBlzB,EAAoBk7B,oBAAsBtkD,EAAAA,cAAC+jE,GAAsB,CAAC36C,oBAAqBA,IAEzFppB,EAAAA,cAACqjE,GAAsB,CACrBl6C,eAAgBA,EAChBD,YAAaA,EACbgS,eAAgBA,EAChBqoC,gBAAiBA,EACjBtoC,eAAgBA,EAEhBH,YAAaA,MAIlB6qC,GACI3lE,EAAAA,cAAC85D,GAAa,CACft7D,IAAI,iBACJq7B,gBAAiBA,EACjBoB,eAAgBA,EAChB/R,YAAaA,EACbgS,eAAgBA,EAChB/R,eAAgBA,EAChBC,oBAAqBA,EACrByV,aAAc4lC,EACd3qC,eAAgBA,EAChB81B,qBAAsBA,EACtBp7B,eAAgBA,EAChBnL,WAAYA,EACZ0wC,WAAYA,EACZf,UAAWA,EAEXl+B,YAAaA,IAGjB96B,EAAAA,cAACm9D,GAAS,CACRtjC,gBAAiBA,EACjBoB,eAAgBA,EAChB/R,YAAaA,EACbgS,eAAgBA,EAChB/R,eAAgBA,EAChBC,oBAAqBA,EACrByV,aAAc4lC,EACd3qC,eAAgBA,EAChBzQ,WAAYA,EACZmL,eAAgBA,EAChBmnC,4BAA6BA,EAC7BkB,kCAAmCA,EAEnC/hC,YAAaA,IAIrB,C,2OCvWe,MAAMwrC,EAInBtkE,WAAAA,GAAe,KAHfukE,eAAS,OACTC,eAAS,EAGPrkE,KAAKokE,UAAY,EACnB,CAEAr6C,KAAAA,GACO/pB,KAAKqkE,YACRrkE,KAAKqkE,WAAY,EACjBrkE,KAAKskE,sBAET,CAEAA,mBAAAA,GAAuB,CAEvBC,IAAAA,GACMvkE,KAAKqkE,YACPrkE,KAAKqkE,WAAY,EACjBrkE,KAAKwkE,qBAET,CAEAA,kBAAAA,GAAsB,CAEtBC,gBAAAA,CAAiBC,GACV1kE,KAAKokE,UAAUj/D,SAASu/D,KAC3B1kE,KAAKokE,UAAU3nE,KAAKioE,GACpB1kE,KAAK+pB,QACL/pB,KAAK2kE,6BAA6BD,GAEtC,CAEAC,4BAAAA,CAA6BD,GAAqB,CAElDE,kBAAAA,CAAmBF,GACjB1kE,KAAKokE,UAAYpkE,KAAKokE,UAAUzoE,QAAOkpE,GAAiBA,IAAkBH,IAC5C,IAA1B1kE,KAAKokE,UAAUlnE,QACjB8C,KAAKukE,MAET,ECnCa,MAAMO,UAA2BX,EAC9CG,mBAAAA,GACEtiE,SAASC,iBAAiB,YAAajC,KAAK+kE,mBAAmBnyD,KAAK5S,OAAO,GAC3EgC,SAASC,iBAAiB,UAAWjC,KAAK+kE,mBAAmBnyD,KAAK5S,OAAO,EAC3E,CAEAwkE,kBAAAA,GACExiE,SAASG,oBAAoB,YAAanC,KAAK+kE,mBAAmBnyD,KAAK5S,OAAO,GAC9EgC,SAASC,iBAAiB,UAAWjC,KAAK+kE,mBAAmBnyD,KAAK5S,OAAO,EAC3E,CAEA+kE,kBAAAA,CAAmBlpE,GACjBmE,KAAKokE,UAAUxnE,SAAS8nE,IAClBA,EAASM,mBACXN,EAASM,kBAAkBnpE,EAC7B,GAEJ,ECjBa,MAAMopE,UAA4Bd,EAC/CG,mBAAAA,GACEtiE,SAASC,iBAAiB,cAAejC,KAAKklE,oBAAoBtyD,KAAK5S,OAAO,EAChF,CAEAwkE,kBAAAA,GACExiE,SAASG,oBAAoB,cAAenC,KAAKklE,oBAAoBtyD,KAAK5S,OAAO,EACnF,CAEAklE,mBAAAA,CAAoBrpE,GAClBmE,KAAKokE,UAAUxnE,SAAQ8nE,GAAYA,EAASS,mBAAmBtpE,IACjE,ECTa,MAAMupE,UAAqBjB,EACxCG,mBAAAA,GACEtiE,SAASC,iBAAiB,OAAQjC,KAAKqlE,aAAazyD,KAAK5S,OAAO,GAChEgC,SAASC,iBAAiB,MAAOjC,KAAKslE,YAAY1yD,KAAK5S,OAAO,GAC9DgC,SAASC,iBAAiB,QAASjC,KAAKulE,cAAc3yD,KAAK5S,OAAO,EACpE,CAEAwkE,kBAAAA,GACExiE,SAASG,oBAAoB,OAAQnC,KAAKqlE,aAAazyD,KAAK5S,OAAO,GACnEgC,SAASG,oBAAoB,MAAOnC,KAAKslE,YAAY1yD,KAAK5S,OAAO,GACjEgC,SAASG,oBAAoB,QAASnC,KAAKulE,cAAc3yD,KAAK5S,OAAO,EACvE,CAEAqlE,YAAAA,CAAaxpE,GACXmE,KAAKokE,UAAUxnE,SAAS8nE,IAClBA,EAASc,aACXd,EAASc,YAAY3pE,EACvB,GAEJ,CAEAypE,WAAAA,CAAYzpE,GACVmE,KAAKokE,UAAUxnE,SAAS8nE,IAClBA,EAASe,YACXf,EAASe,WAAW5pE,EACtB,GAEJ,CAEA0pE,aAAAA,CAAc1pE,GACZmE,KAAKokE,UAAUxnE,SAAS8nE,IAClBA,EAASgB,cACXhB,EAASgB,aAAa7pE,EACxB,GAEJ,ECnCa,MAAM8pE,UAA2BxB,EAC9CG,mBAAAA,GACEtiE,SAASC,iBAAiB,YAAajC,KAAK4lE,uBAAuBhzD,KAAK5S,OAAO,GAC/EgC,SAASC,iBAAiB,UAAWjC,KAAK6lE,qBAAqBjzD,KAAK5S,OAAO,EAC7E,CAEAwkE,kBAAAA,GACExiE,SAASG,oBAAoB,YAAanC,KAAK4lE,uBAAuBhzD,KAAK5S,OAAO,GAClFgC,SAASG,oBAAoB,UAAWnC,KAAK6lE,qBAAqBjzD,KAAK5S,OAAO,EAChF,CAEA4lE,sBAAAA,CAAuB/pE,GACrBmE,KAAKokE,UAAUxnE,SAAQ8nE,GAAYA,EAASoB,kBAAkBjqE,IAChE,CAEAgqE,oBAAAA,CAAqBhqE,GACnBmE,KAAKokE,UAAUxnE,SAAQ8nE,GAAYA,EAASqB,gBAAgBlqE,IAC9D,E,eCba,MAAMmqE,UAAwB7B,EAAsCtkE,WAAAA,IAAA0rB,GAAA,SAAAA,GAAA,KACjF06C,uBAAiB,EAEjB3B,mBAAAA,GACE1sE,OAAOqK,iBAAiB,UAAWjC,KAAKkmE,cAActzD,KAAK5S,OAAO,GAClEpI,OAAOqK,iBAAiB,SAAUjC,KAAKmmE,aAAavzD,KAAK5S,OAAO,GAChEA,KAAKimE,kBAAoBrvD,WAAW5W,KAAKomE,aAAaxzD,KAAK5S,MAbtB,IAcvC,CAEAwkE,kBAAAA,GACE5sE,OAAOuK,oBAAoB,UAAWnC,KAAKkmE,cAActzD,KAAK5S,OAAO,GACrEpI,OAAOuK,oBAAoB,SAAUnC,KAAKmmE,aAAavzD,KAAK5S,OAAO,GAC9DA,KAAKimE,mBAAsBtvD,aAAa3W,KAAKimE,kBACpD,CAEAtB,4BAAAA,CAA6BD,GAC3B2B,UAAUC,OAAS5B,EAAS6B,cAAgB7B,EAAS8B,cACvD,CAEAN,aAAAA,GACElmE,KAAKokE,UAAUxnE,SAAQ8nE,GAAYA,EAAS8B,gBAC9C,CAEAL,YAAAA,GACEnmE,KAAKokE,UAAUxnE,SAAQ8nE,GAAYA,EAAS6B,eAC9C,CAEAH,YAAAA,GACE,MAAMppD,EAAM,IAAIypD,eAEVC,EAAkB9vD,YAAW,KACjCoG,EAAIyC,QACJzf,KAAKkmE,gBACLlmE,KAAKimE,kBAAoBrvD,WAAW5W,KAAKomE,aAAaxzD,KAAK5S,MAzCvB,IAyCgE,GACnG,KAEHgd,EAAI2pD,mBAAsBzoE,IACD,IAAnB8e,EAAI4pD,aAIRjwD,aAAa+vD,GACM,MAAf1pD,EAAI/N,QACNjP,KAAKmmE,eACLnmE,KAAKimE,kBAAoBrvD,WAAW5W,KAAKomE,aAAaxzD,KAAK5S,MAnD1B,OAqDjCA,KAAKkmE,gBACLlmE,KAAKimE,kBAAoBrvD,WAAW5W,KAAKomE,aAAaxzD,KAAK5S,MAvDzB,MAwDpC,EAEFgd,EAAI4D,KAAK,QAAQhE,EAAAA,EAAAA,GAAS,kBAAkB,GAC5CI,EAAI6pD,MACN,EC1Da,MAAMC,UAA0B3C,EAC7CG,mBAAAA,GACEtiE,SAASC,iBAAiB,kBAAmBjC,KAAK+mE,sBAAsBn0D,KAAK5S,OAAO,EACtF,CAEAwkE,kBAAAA,GACExiE,SAASG,oBAAoB,kBAAmBnC,KAAK+mE,sBAAsBn0D,KAAK5S,OAAO,EACzF,CAEA+mE,qBAAAA,CAAsBlrE,GACpBmE,KAAKokE,UAAUxnE,SAAQ8nE,GAAYA,EAASsC,mBAAmBnrE,IACjE,E,okCCFK,SAASorE,EAAO9gE,EAAsCoD,GAC3D,MAAM29D,EAAe/gE,EAErB,IAAIghE,EAAmBD,EAAahzD,QAAQ8E,MAAMyQ,GAAsB,qBAAbA,EAAKvf,MAsQlE,IAAuBb,EArQhB89D,IAqQgB99D,EApQc69D,EAAa79D,MAA9C89D,GAqQKC,EAAAA,EAAAA,IAAiC,CACtCrpE,KAAM,YACNmM,IAAK,mBACLgK,QAAU,4BAA2B23B,EAAAA,GAAgCxiC,MACrEugC,WAAW,KAtQb,IAKIy9B,EAAgBC,EAAiBC,EAAmBC,EACpDC,EAAqBC,EAA2BC,EAChDC,EAAkBC,EAAWC,EAP7BC,EAAQb,EAAahzD,QAAQvY,QAAQ8tB,GAAuB,YAAdA,EAAK1rB,OACvDgqE,EAAMnrE,SAASs+C,IACbA,EAAQl4B,SAAUsL,EAAAA,EAAAA,OAAM4sB,EAAQl4B,SAAW,IAAIzU,OAAO,CAAC,SAAS,IAOlE+4D,EAAkBS,EAAM,IAC8DC,EAAA9tE,EAAlD+tE,EAAiBX,EAAiB,iBAAgB,GAArFD,EAAcW,EAAA,GAAEV,EAAeU,EAAA,OAC4DE,EAAAhuE,EAArD+tE,EAAiBX,EAAiB,oBAAmB,GAA3FC,EAAiBW,EAAA,GAAEZ,EAAeY,EAAA,GACnCV,EAAmBD,EAAkB,GAAG,IACwDY,EAAAjuE,EAAvD+tE,EAAiBX,EAAiB,sBAAqB,GAA/FG,EAAmBU,EAAA,GAAEb,EAAea,EAAA,OAC8FC,EAAAluE,GAApFmuE,EAAAA,EAAAA,WAAUf,GAAkB79C,GAAU,uBAAwBq2B,KAAKr2B,EAAKpgB,MAAM8e,QAAM,GAAlIu/C,EAAyBU,EAAA,GAAEd,EAAec,EAAA,OACqDE,EAAApuE,EAAvD+tE,EAAiBX,EAAiB,sBAAqB,GAA/FK,EAAmBW,EAAA,GAAEhB,EAAegB,EAAA,OACuIC,EAAAruE,GAAtImuE,EAAAA,EAAAA,WAAUf,GAAkB79C,GAASA,EAAKzG,SAAWyG,EAAKzG,QAAQ7d,SAAS,oBAAuB,aAAc26C,KAAKr2B,EAAKpgB,MAAM8e,QAAM,GAA3Ky/C,EAAgBW,EAAA,GAAEjB,EAAeiB,EAAA,OAC0CC,EAAAtuE,EAA7C+tE,EAAiBX,EAAiB,YAAW,GAA3EO,EAASW,EAAA,GAAElB,EAAekB,EAAA,GAC3BV,EAAgBR,EAEhBE,EAAmBA,IAuPZJ,EAAAA,EAAAA,IAAiC,CACtCrpE,KAAM,UACNmM,IAAK,mBACL8Y,QAAS,CAAC,OAAQ,oBAClB3Z,MAAO,wBACP6K,QAAS,GACT4c,MAAO,IA5PqB,IAA1Bu2C,EAAenqE,SAAgBmqE,EAAiB,EAiQ7CD,EAAAA,EAAAA,IAAiC,CACtCrpE,KAAM,UACNmM,IAAM,kBACN8Y,QAAS,CAAC,OAAQ,iBAClB3Z,MAAQ,WACR6K,QAAS,CACP,CACEnW,KAAM,YACNmM,IAAM,uBACNgK,QAAS,4CAEX,CACEnW,KAAM,YACNmM,IAAM,6BACNkoC,SAAU,GAEZ,CACEr0C,KAAM,YACNmM,IAAM,uBACNgK,QAAS,gDAEX,CACEnW,KAAM,YACNmM,IAAM,6BACNkoC,SAAU,GAEZ,CACEr0C,KAAM,UACNmM,IAAM,qCACNw1C,QAAQ,EACR5uB,MAAO,EACPznB,MAAO,sFACP6K,QAAS,CACP,CACEnW,KAAM,YACNmM,IAAM,6BACN0tC,SAAU,EACVC,eAAgB,OAItB,CACE95C,KAAM,SACNmM,IAAM,yBACN8Y,QAAS,CAAC,mBACV3Z,MAAO,yBAGXynB,MAAO,MAhT0B,IAA/B22C,EAAoBvqE,SAAgBuqE,EAqTjC,EACLL,EAAAA,EAAAA,IAAiC,CAC/BrpE,KAAM,UACNmM,IAAK,qBACL8Y,QAAS,CAAC,OAAQ,sBAClB3Z,MAAO,gBACP6K,QAAS,GACT4c,MAAO,MA3T8B,IAArC42C,EAA0BxqE,SAAgBwqE,EAiUvC,EACLN,EAAAA,EAAAA,IAAiC,CAC/BrpE,KAAM,UACNmM,IAAK,2BACL8Y,QAAS,CAAC,OAAQ,4BAClB3Z,MAAO,sBACP6K,QAAS,GACT4c,MAAO,MAvUwB,IAA/B62C,EAAoBzqE,SAAgByqE,EA6UjC,EACLP,EAAAA,EAAAA,IAAiC,CAC/BrpE,KAAM,UACNmM,IAAK,qBACL8Y,QAAS,CAAC,OAAQ,sBAClB3Z,MAAO,gBACP6K,QAAS,GACT4c,MAAO,MAlVU62C,EAAoBp5D,OAAOq5D,GACnChrE,SAASs+C,IACpBA,EAAQtR,WAAY,CAAI,IAG1B,IAAI6+B,EAAqB,KACrBC,EAAmB,KACnBC,EAAsB,KACtBC,EAAuB,KAE3Bb,EAAMnrE,SAASs+C,IACbA,EAAQhnC,QAAUgnC,EAAQhnC,QAAQvY,QAAQ8tB,GACpCA,EAAKzG,SAAWyG,EAAKzG,QAAQ7d,SAAS,uBACxCsjE,EAAqBh/C,GACd,GACiB,cAAdA,EAAK1rB,OACZ,iCAAkC+hD,KAAKr2B,EAAKvV,QAAQiU,OACjDsB,EAAKzG,SAAWyG,EAAKzG,QAAQ7d,SAAS,sBAE5CujE,EAAmBj/C,GACZ,GACEA,EAAKzG,SAAWyG,EAAKzG,QAAQ7d,SAAS,wBAC/CwjE,EAAsBl/C,GACf,GACiB,cAAdA,EAAK1rB,OACO,yHAAtB0rB,EAAKvV,QAAQiU,MACY,iHAAtBsB,EAAKvV,QAAQiU,MACZsB,EAAKzG,SAAWyG,EAAKzG,QAAQ7d,SAAS,0BAE1CyjE,EAAuBn/C,GAChB,GACe,+BAAbA,EAAKvf,KAKhB,KAGuB2+D,EAAAA,EAAAA,YAAWd,EAAOD,GAC1BlrE,SAASs+C,IAC1BA,EAAQhnC,QAAUgnC,EAAQhnC,QAAQvY,QAAQ8tB,KAAWA,EAAKzG,SAAWyG,EAAKzG,QAAQ7d,SAAS,qBAAoB,KAGtF0jE,EAAAA,EAAAA,YAAWd,EAAOV,GAC1BzqE,SAASs+C,IAC1BA,EAAQhnC,QAAUgnC,EAAQhnC,QAAQvY,QAAQ8tB,KAAWA,EAAKzG,SAAWyG,EAAKzG,QAAQ7d,SAAS,qBAAoB,IAGjH,MAAM2jE,EAAqBhB,EAAcxpE,KAAKyqE,GAASA,EAAK7+D,MAoC5D,IAnC6B2lC,EAAAA,EAAAA,KAAIi4B,EAAegB,EAAmB3/C,MAAM,GAAG5a,OAAO,CAAC84D,EAAe,GAAGn9D,OAEjFtN,SAAQ,EAAEmsE,EAAMC,MACnC,MAAMC,EAAoBF,EAAK70D,QAAQvY,QAAQ8tB,GAAuB,YAAdA,EAAK1rB,MAAsB0rB,EAAKzG,SAAWyG,EAAKzG,QAAQ7d,SAAS,cACnH+jE,GAAiBx7B,EAAAA,EAAAA,SAAQu7B,EAAkB3qE,KAAK6qE,GAAqBA,EAAiBj1D,QAAQ8E,MAAMyQ,GAAuB,WAAdA,EAAK1rB,MAAyC,WAApB0rB,EAAKpgB,MAAM8e,UAClJihD,EAA6BF,EAAeG,SAASC,GAAuBA,EAAc7pE,UAEhGwpE,EAAkBrsE,SAASusE,IACzBI,EAAwCJ,EAAiB,IAG3D,IAAIK,EAAkBT,EAAK70D,QAAQvY,QAAQ8tB,GAASA,EAAKzG,SAAWyG,EAAKzG,QAAQ7d,SAAS,qBAAoB,GAoZlH,IAAwB+E,EAvYpB,GAZKs/D,IAmZet/D,EAlZgB,mBAAkB6+D,EAAK7+D,MAAzDs/D,GAmZGpC,EAAAA,EAAAA,IAAiC,CACtCrpE,KAAM,SACNmM,IAAKA,EACLb,MAAO,WACP2Z,QAAS,CAAC,qBAtZR+lD,EAAK70D,QAAU60D,EAAK70D,QAAQ3F,OAAOi7D,IAGrCA,EAAgB/pE,QAAUgqE,EAAgBD,EAAgB/pE,QAAS,CACjEiqE,EAA4BV,EAAU,aAAa,GACnDU,EAA4BV,EAAU,aAAa,GACnDU,EAA4BX,EAAK7+D,IAAK,aAAa,GACnDw/D,EAA4BF,EAAgBt/D,IAAK,aAAa,KAG5Dg/D,EAAehsE,OAAS,EAAG,CAC7B,MAAMosE,EAAqBJ,EAAe,GAE1CI,EAAc7pE,QAAU6pE,EAAc7pE,QAAQ8O,OAAOk7D,EAAgBL,EAA4BM,EAA4BF,EAAgBt/D,IAAK,WAAY,KAE9Js/D,EAAgB7/B,SAAW,CAC7B,aACS6/B,EAAgB7/B,QACzB,IAGEm+B,EAAc5qE,OAAS,EAAG,CAC5B,MAAMysE,GAkQDvC,EAAAA,EAAAA,IAAiC,CACtCl9D,IAAK,6BACLnM,KAAM,YACNilB,QAAS,CACP,8BAEF9O,QAAS,qMAtQsBq5C,EAAAA,EAAAA,MAAKua,GAClB5zD,QAAQg/C,QAAQ,EAAG,EAAGyW,EAC1C,CAEA,MAAMC,EAAsBvC,EAAe/oE,KAAKyqE,GAASA,EAAK7+D,OAChC2lC,EAAAA,EAAAA,KAAIw3B,EAAgBuC,EAAoBzgD,MAAM,GAAG5a,OAAO,CAACi5D,EAAiBt9D,OAElFtN,SAAQ,EAAEmsE,EAAMC,GAAuBvqE,KAC3D,IAAIorE,EAAkBd,EAAK70D,QAAQ8E,MAAMyQ,GAASA,EAAKzG,SAAWyG,EAAKzG,QAAQ7d,SAAS,qBAkQ5F,IAA8B+E,EAjQrB2/D,IAiQqB3/D,EAhQgB,iBAAgBzL,EAAM,WAA9DorE,GAiQGzC,EAAAA,EAAAA,IAAiC,CACtCrpE,KAAM,SACNmM,IAAKA,EACLb,MAAO,SACP2Z,QAAS,CAAC,qBApQR+lD,EAAK70D,QAAQzX,KAAKotE,IAGpBA,EAAgBpqE,QAAUgqE,EAAgBI,EAAgBpqE,QAAS,CACjEiqE,EAA4BV,EAAU,aAAa,GACnDU,EAA4BV,EAAU,aAAa,GACnDU,EAA4BX,EAAK7+D,IAAK,aAAa,GACnDw/D,EAA4BX,EAAK7+D,IAAK,aAAa,KAGrD,IAAI4/D,EAAef,EAAK70D,QAAQ8E,MAAMyQ,GAAsB,+BAAbA,EAAKvf,MAChD6/D,EAAehB,EAAK70D,QAAQ8E,MAAMyQ,GAAsB,+BAAbA,EAAKvf,MAEhD4/D,GAAgBC,IAClBF,EAAgBlgC,SAAW,EAC3BogC,EAAapgC,SAAW,EAExBmgC,EAAarqE,QAAUgqE,EAAgBK,EAAarqE,QAAS,CAC3DiqE,EAA4BK,EAAa7/D,IAAK,WAAY,KAG5D6/D,EAAatqE,QAAUgqE,EAAgBM,EAAatqE,QAAS,CAC3DiqE,EAA4BG,EAAgB3/D,IAAK,WAAY,KAEjE,IAGGu+D,IACHA,GA6OKrB,EAAAA,EAAAA,IAAiC,CACtCrpE,KAAM,SACNmM,IAAK,qBACLb,MAAO,cACP2Z,QAAS,CAAC,yBA/OZwkD,EAAiBtzD,QAAQzX,KAAKgsE,GAC9B,MAAMuB,EAAiCvB,EAA4B,QA4PrE,IAA2B5xB,EA9JzB,OA5FA4xB,EAAmBhpE,QAAUgqE,EAAgBhB,EAAmBhpE,QAC9DiqE,EAA4BjB,EAAmBv+D,IAAK,aAAa,IAG9Dw+D,IACHA,GA4OKtB,EAAAA,EAAAA,IAAiC,CACtCrpE,KAAM,YACNmM,IAAK,mBACL8Y,QAAS,CAAC,oBACV9O,QAAS,8EACT01B,WAAW,KA/Ob8+B,EAAiB1lD,SAAUsL,EAAAA,EAAAA,OAAMo6C,EAAiB1lD,SAAW,IAAIzU,OAAO,CAAC,sBACzEi5D,EAAiBtzD,QAAQzX,KAAKisE,GAE9BD,EAAmBhpE,QAAUgpE,EAAmBhpE,QAAQ8O,OAAOk7D,EAAgBO,EAC7EN,EAA4BhB,EAAiBx+D,IAAK,aAAa,KAG5Dy+D,IA4OoB9xB,EA3OiBttC,EAAxCo/D,GA4OKvB,EAAAA,EAAAA,IAAiC,CACtCrpE,KAAM,SACNmM,IAAK,sBACLb,MAAO,wBACP2Z,QAAS,CAAC,uBACV4mB,WAAW,EACXnqC,QAAS,CACP,CACE1B,KAAM,SACNkV,OAAQ,mBACRy2B,UAAW,CACT/wC,IAAM,uCAAsCk+C,qBAC5Cx6C,IAAK,YACLgM,OAAO,GAET6B,KAAK09B,EAAAA,EAAAA,UAzPX4/B,EAAiBtzD,QAAQzX,KAAKksE,GAE9BF,EAAmBhpE,QAAUgpE,EAAmBhpE,QAAQ8O,OAAOk7D,EAAgBO,EAC7EN,EAA4Bf,EAAoBz+D,IAAK,aAAa,KAGpEu9D,EAAoB7qE,SAASmsE,IACvBA,EAAc,QAAE7rE,OAAS,IAC3BurE,EAAmBhpE,QAAUgpE,EAAmBhpE,QAAQ8O,OAAOk7D,EAAgBO,EAC7EN,EAA4BX,EAAK7+D,IAAK,aAAa,KAEvD,IAGFw9D,EAA0B9qE,SAASmsE,IACjCN,EAAmBhpE,QAAUgpE,EAAmBhpE,QAAQ8O,OAAOk7D,EAAgBO,EAC7EN,EAA4BX,EAAK7+D,IAAK,aAAa,IACnD,IAGA29D,EAAU3qE,OAAS,IAChB0rE,IACHA,GA0OGxB,EAAAA,EAAAA,IAAiC,CACtCrpE,KAAM,YACNmM,IAAK,uBACL8Y,QAAS,CAAC,wBACV9O,QAAS,uHACT01B,WAAW,KA7OXg/B,EAAqB5lD,SAAUsL,EAAAA,EAAAA,OAAMs6C,EAAqB5lD,SAAW,IAAIzU,OAAO,CAAC,0BACjFi5D,EAA0B,QAE1BiB,EAAmBhpE,QAAUgpE,EAAmBhpE,QAAQ8O,OAAOk7D,EAAgBO,EAC7EN,EAA4Bd,EAAqB1+D,IAAK,aAAa,KAGrE29D,EAAUjrE,SAASqtE,IACjBxB,EAAmBhpE,QAAUgpE,EAAmBhpE,QAAQ8O,OAAOk7D,EAAgBO,EAC7EN,EAA4BO,EAAS//D,IAAK,aAAa,IACvD,KAINu+D,EAAmBhpE,QAAUgpE,EAAmBhpE,QAAQ8O,OAAOk7D,EAAgBO,EAC7EN,EAA4BvC,EAAiBj9D,IAAK,aAAa,KAGjE29D,EAAUjrE,SAASqtE,IACSA,EAAS/1D,QAAQvY,QAAQ8tB,GAAuB,YAAdA,EAAK1rB,MAAsB0rB,EAAKzG,SAAWyG,EAAKzG,QAAQ7d,SAAS,cAC3GvI,SAASusE,IACzBI,EAAwCJ,EAAiB,GACzD,IAGJpB,EAAQD,EAAcv5D,OACpB84D,EACA,CAACG,GACDC,EACAC,EACAG,EACAF,EACAC,GAGFG,EAAMnrE,SAASmsE,IACbA,EAAKn/B,WAAY,EACjBm/B,EAAKvlC,aAAc,EACnBulC,EAAKl9D,WAAY,EACjBk9D,EAAKrpB,QAAS,CAAI,IAGpBooB,EAAc,GAAGj8D,WAAY,EAC7Bi8D,EAAc,GAAGl+B,WAAY,EAE7Bs9B,EAAahzD,QAAUgzD,EAAahzD,QAAQvY,QAAQ8tB,GAAuB,YAAdA,EAAK1rB,OAClEmpE,EAAahzD,QAAUgzD,EAAahzD,QAAQ3F,OAAOw5D,GAEnDb,EAAahzD,QAAUgzD,EAAahzD,QAAQvY,QAAQ8tB,GAAsB,qBAAbA,EAAKvf,MAClEg9D,EAAahzD,QAAUgzD,EAAahzD,QAAQ3F,OAAO,CAAC44D,IAE7CD,CACT,CAEA,SAASe,EAAiBiC,EAAuCC,GAC/D,OAAO9B,EAAAA,EAAAA,WAAU6B,GAAQzgD,GAASA,EAAKzG,SAAWyG,EAAKzG,QAAQ7d,SAASglE,IAC1E,CAyLA,SAASZ,EAAwCJ,GAC/C,MAAMG,EAAgBH,EAAiBj1D,QAAQ8E,MAAMyQ,GAAuB,WAAdA,EAAK1rB,MAAyC,WAApB0rB,EAAKpgB,MAAM8e,OAEnG,GAAImhD,EAAe,CACjB,MAAMc,EAA4Bd,EAAc7pE,QAChD6pE,EAAc7pE,QAAU,GAExB,MAAM+qD,EAAW2e,EAAiBj1D,QAAQ8E,MAAMyQ,GAAS,CAAC,kBAAmB,iBAAkB,YAAa,eAAetkB,SAASskB,EAAK1rB,QACrIysD,IACF8e,EAAc7pE,QAAU6pE,EAAc7pE,QAAQ8O,OAAOk7D,EAAgBW,EAA2B,CAC9FV,EAA4Blf,EAAStgD,IAAK,UAAU,GACpDw/D,EAA4Blf,EAAStgD,IAAK,WAAY,OAI1D,MAAMmgE,EAAiBlB,EAAiBj1D,QAAQ8E,MAAMyQ,GAAuB,YAAdA,EAAK1rB,MAAsB0rB,EAAKzG,SAAWyG,EAAKzG,QAAQ7d,SAAS,oBAC5HklE,IACFf,EAAc7pE,QAAU6pE,EAAc7pE,QAAQ8O,OAAOk7D,EAAgBW,EAA2BV,EAA4BW,EAAengE,IAAK,aAAa,KAC7JmgE,EAAezgC,WAAY,GAG7B0/B,EAAc7pE,QAAU6pE,EAAc7pE,QAAQ8O,OAAOk7D,EAAgBW,EAA2BV,EAA4BJ,EAAcp/D,IAAK,WAAY,IAC7J,CACF,CAEA,SAASu/D,EAAgBa,EAAgCC,GAMvD,OALAD,EAAeA,GAAgB,GAC1B/tE,MAAMC,QAAQ+tE,KACjBA,EAAc,CAACA,IAGVA,EAAYjsE,KAAKksE,GAAeF,EAAatxD,MAAMyxD,GAAgBA,EAAWx3D,SAAWu3D,EAAWv3D,SAAa,cAAew3D,GAAcA,EAAW/gC,cAAgB,cAAe8gC,GAAcA,EAAW9gC,cAAgB8gC,GAC1O,CAWA,SAASd,EAA4Bx/D,EAAa7N,EAAagM,GAC7D,MATO,CACLtK,KAAM,SACNkV,OAOoB,gBANpBy2B,UAMqC,CACrCx/B,IAAKA,EACL7N,IAAKA,EACLgM,MAAOA,GARP6B,KAAK09B,EAAAA,EAAAA,KAUT,CC1fO,MAAM8iC,EAAqBC,KAC3B,SAAgBxkE,EAAMykE,EAA4BrhE,GACvD,MAAMshE,GAAaC,EAAAA,EAAAA,WAAU3kE,GAE7B,OAAQykE,GACN,IAAK,iBACL,IAAK,qBACH,OAAOG,EAAoBF,EAAYthE,GACzC,QACE,OAAOshE,EAEb,I,2hCCsEO,SAAS/vC,EAAQkwC,GACtB,OAAQA,GAAeC,WAAW/tE,QAAU,GAAK,CACnD,C,sNCvDe,SAASguE,IAAkB,KACxCxzE,EAAI,gBACJyzE,EAAe,YACfhkD,EAAW,WACX6D,EAAU,uBACVZ,EAAsB,gBACtBgF,IAEA,MAAMlE,EAAsBgN,EAAAA,KAE5B,IAAKhN,GAAuB/D,EAAe,OAAO,EAElD,MAAMikD,EAAYlgD,EAAoBc,UAAYm/C,EAAgBjgD,EAAoBc,WAAat0B,EAEnG2zE,EAIIngD,EAAoBnB,MAHjBuhD,EAAQD,EAAbnhE,IAEOqhE,GADaF,EAApBrhD,WACiBqhD,EAAjB5sE,OAGF,IAAI+sE,EAAoBtgD,EACpBugD,EAAevzC,EAAAA,GAAsChN,GAEzD,GAAIgN,EAAAA,GAAsBhN,GAAsB,CAC9C,MAAMwgD,GAAgBv6C,EAAAA,EAAAA,IAAkBi6C,EAAWE,GAC7CK,EAAsB73C,GAAAA,EAAO43C,GAC7BE,GAAYC,EAAAA,EAAAA,IAAeT,EAAWM,GAEtCI,EAxCV,SAA2CriD,EAAqChrB,GAC9E,GAAkB,cAAdgrB,EAAK1rB,KAAsB,CAC7B,MAAMguE,EAAetiD,EAAKvV,QAAQ83D,uBAAuBrwE,QAAQ0M,GAAyB,mBAAfA,EAAMtK,OAA2BO,KAAK2tE,GAAcA,EAAUzqC,QACnI0qC,EAAmBziD,EAAKvV,QAAQmtB,sBAAsB/iC,KAAK6tE,GAAoBA,EAAgB3qC,QAGrG,OAFqB4qC,EAAAA,GAAAA,IAAgBL,EAAax9D,OAAO29D,IAAmB93B,UAExDh4C,QAAO,CAACiwE,EAAW7qC,KAAU8qC,EAAAA,GAAAA,IAAe9qC,EAAO6qC,GAAa7qC,EAAMzX,MAAQsiD,GAAW5tE,EAC/G,CACE,OAAOA,CAEX,CA8B0B8tE,CAAkCX,EAAWJ,EAAkBzhD,MAAMtrB,OAM3F,GALA+sE,EAAoBtzC,EAAAA,GAAmCszC,EAAkBzhD,MAAM7f,IAAKshE,EAAkBzhD,MAAMC,WAAY8hD,GACxHL,EAAevzC,EAAAA,GAAsCszC,GAErDA,EAAoBtzC,EAAAA,GAAmCszC,GAAoB,GAEpD,cAAnBI,EAAU7tE,KACZ,GAAIytE,EAAkBzhD,MAAMtrB,MAAQ,EAAG,CACrC,MAAMqnC,GAAa0mC,EAAAA,EAAAA,IAAoBpB,EAAWE,GAC5CmB,GAAkBC,EAAAA,EAAAA,IAA4BtB,EAAWM,GAE/D,GAAuB,IAAnBC,GAA4C,aAApB7lC,EAAW/nC,KACS,mBAA1C+nC,EAAWgL,sBAAsB/yC,OAEnCytE,EAAoBtzC,EAAAA,GAA8BszC,GAAoB,QAEnE,IAA8B,cAA1BiB,GAAiB1uE,KAK1B,OAAO,EALyC,CAChD,MAAM4uE,EAAkBF,EAAgBv4D,QAAQiU,KAAK1lB,QAAQ,MAAO,IAAIvF,OACxEuuE,EAAevzC,EAAAA,GAAmCu0C,EAAgBviE,IAAK,UAAWyiE,EACpF,CAGA,CACF,MACElB,EAAevzC,EAAAA,GAA8BuzC,GAAe,OAEzD,CACL,GAAmB,IAAfF,EAEF,OAAO,EAEPE,EAAevzC,EAAAA,GAA8BuzC,GAAe,EAEhE,CACF,CAOA,OALA3jD,EAAAA,EAAAA,KAAM,KACJkD,EAAW,EAACF,EAAAA,EAAAA,IAA4B0gD,EAAmB,OAAQtgD,EAAoBc,WACvF5B,EAAuBqhD,EAAa,KAG/B,CACT,C,wCCjFO,SAASmB,GAAwBnjD,GACtC,OAAQA,EAAK1rB,MACX,IAAK,YACL,IAAK,WACL,IAAK,uBACL,IAAK,YACH,MAAO,UACT,QACE,OAAO,KAEb,CA6BO,SAAS8uE,GAA4Cz9C,EAAkC3F,EAA6BqjD,GACzH,OAAOA,EAAMxuE,KAAKyuE,IAChB,MAAMllC,EA7BH,SAA4BzY,EAAkC3F,GACnE,OAAQA,EAAK1rB,MACX,IAAK,YACL,IAAK,WACL,IAAK,uBACL,IAAK,YAGH,OAFgBqxB,EAAgB3F,EAAK1rB,MAAM+pC,SAAS1Y,EAAiB,CAAC,GAGxE,QACE,OAAO,KAEb,CAiBoB49C,CAAmB59C,EAAiB3F,GACpD,OAZG,SAAgCA,EAAMtB,GAC3C,MAAM8kD,EAAcL,GAAwBnjD,GAK5C,OAJIwjD,IACFxjD,EAAOqK,GAAAA,EAAQm5C,EAAaC,EAAAA,GAAwC/kD,GAAOsB,IAGtEA,CACT,CAKW0jD,CAAuBtlC,EAASklC,EAAK,GAEhD,CA6LO,SAASK,GAAc3jD,GAC5B,OAAQA,EAAK1rB,MACX,IAAK,WACL,IAAK,eACL,IAAK,cACL,IAAK,UACL,IAAK,YACH,MAAO,CAAC,WAqBV,QACE,MAAO,GAEb,CAEO,SAASsvE,GAAe5jD,GAC7B,OAAQA,EAAK1rB,MACX,IAAK,WACL,IAAK,YACL,IAAK,aACL,IAAK,oBACL,IAAK,YACL,IAAK,uBACH,MAAO,CAAC,WAmBV,QACE,MAAO,GAEb,CC5Se,SAASuvE,GAAiBC,GAAc,KACrD71E,EAAI,gBACJyzE,EAAe,YACfhkD,EAAW,WACX6D,EAAU,uBACVZ,EAAsB,gBACtBgF,IAEA,MAAMlE,EAAsBgN,EAAAA,KAE5B,IAAKhN,GAAuB/D,EAAe,OAAO,EAElD,MAAMikD,EAAYlgD,EAAoBc,UAAYm/C,EAAgBjgD,EAAoBc,WAAat0B,EAEnG2zE,EAIIngD,EAAoBnB,MAHjBuhD,EAAQD,EAAbnhE,IACoBmhE,EAApBrhD,WACiBqhD,EAAjB5sE,MAGF,IAAI+uE,EAAgB,CAClBrlD,KAAM,GACNyC,YAAa,IAEX6iD,EAAW,GAEXC,EAAqB,EAEzB,IADkBH,EAAaI,MACjBxoE,SAAS,cAsBrB,OAAO,EAtB6B,CACpC,MAEMyoE,EAuCV,SAAuCC,GACrC,IAAIf,EAAQe,EAAUnwE,MAAM,SAE5B,OADAovE,EAAQA,EAAMxuE,KAAKyuE,GAASj5C,GAAAA,EAAOi5C,EAAKtqE,QAAQ,cAAe,QACxDqqE,EAAMnxE,QAAQoxE,GAAkB,KAATA,GAAuB,KAARA,GAC/C,CA3C2Be,CAFLP,EAAaQ,QAAQ,eAIjCC,EAAiBJ,EAAe,GACtCJ,EAAgB,CACdrlD,KAAM6lD,EACNpjD,YAAa,IAGf8iD,EAAqBM,EAAe9wE,OAEpC,IAAI+wE,EAAiBn6C,GAAAA,EAAO85C,GAE5B,GAAIK,EAAe/wE,OAAS,EAAG,CAC7B,MAAMwuE,GAAgBv6C,EAAAA,EAAAA,IAAkBi6C,EAAWE,GAC7CM,GAAYC,EAAAA,EAAAA,IAAeT,EAAWM,GAE5C+B,EAAWZ,GAA4Cz9C,EAAiBw8C,EAAWqC,EACrF,CACF,CAIA,OAAkC,IAA9BT,EAAcrlD,KAAKjrB,QAAoC,IAApBuwE,EAASvwE,WAE3Cg7B,EAAAA,GAA0BhN,EAAoBnB,UAEnDjC,EAAAA,EAAAA,KAAM,KACJkD,EAAW,EAACF,EAAAA,EAAAA,IAA4BI,EAAqBsiD,EAAeC,IAAYviD,EAAoBc,WAC5G5B,EAAuB8N,EAAAA,GAA8BA,EAAAA,GAAsChN,GAAsBwiD,GAAoB,KAGhI,GACT,C,gBCpDe,SAASQ,IAAkB,KACxCx2E,EAAI,gBACJyzE,EAAe,YACfhkD,EAAW,WACX6D,EAAU,uBACVZ,EAAsB,gBACtBgF,IAEA,IAAIlE,EAAsBgN,EAAAA,KAE1B,IAAKhN,GAAuB/D,EAAe,OAAO,EAElD,MAAMikD,EAAYlgD,EAAoBc,UAAYm/C,EAAgBjgD,EAAoBc,WAAat0B,EAEnG2zE,EAIIngD,EAAoBnB,MAHjBuhD,EAAQD,EAAbnhE,IACYikE,EAAQ9C,EAApBrhD,WACOuhD,EAAUF,EAAjB5sE,MAGIitE,GAAgBv6C,EAAAA,EAAAA,IAAkBi6C,EAAWE,GAC7CM,GAAYC,EAAAA,EAAAA,IAAeT,EAAWM,GAEtC0C,GAAsBC,EAAAA,EAAAA,IAAuBjD,EAAWM,GACxD4C,GAAkBzC,EAAAA,EAAAA,IAAeT,EAAWgD,GAE5CX,EAAW,EAACrG,EAAAA,EAAAA,IAAiCmH,GAAgB3C,EAAW0C,EAAiBl/C,KAEzFo/C,EAAgBC,GAAwB36C,GAAAA,EAAO25C,IAC/ChC,EAAe+C,EAAgBt2C,EAAAA,GAAmCs2C,EAActkE,IAAK0iE,GAAwB4B,GAAgB,QAAK5wE,EAExI,IAAI8wE,EAAAA,EAAAA,IAA6B9C,GAAWzmE,SAASgpE,GAAW,CAC9D,MAAMz2D,EAASoc,GAAAA,GAAO,EAAG43C,GAEnBnR,EADmBzmC,GAAAA,GAAO,EAAG43C,GACP,GAE5B5jD,EAAAA,EAAAA,KAAM,KACJkD,EAAW,EAAC2kB,EAAAA,EAAAA,IAAiB7b,GAAAA,EAAO25C,GAAWa,EAAgBpkE,IAAKwN,EAAQ6iD,IAAYrvC,EAAoBc,WAC5G5B,EAAuBqhD,EAAa,GAExC,MAGIvzC,EAAAA,GAAsBhN,IACP,IAAfqgD,GAC0B,aAA1B+C,GAAiBvwE,MACG,IAApB0vE,EAASvwE,QACa,aAAtBuwE,EAAS,IAAI1vE,OAEbmtB,EAAsBgN,EAAAA,GAA8BhN,GAAsB,KAG5EpD,EAAAA,EAAAA,KAAM,KACJkD,EAAW,EAACF,EAAAA,EAAAA,IAA4BI,OAAqBttB,EAAW6vE,IAAYviD,EAAoBc,WACxG5B,EAAuBqhD,EAAa,IAIxC,OAAO,CACT,CAEA,SAAS8C,GAAgB9kD,EAA6BwH,EAAQ7B,GAC5D,IAAIu/C,EAEFA,EADmB,aAAjB19C,GAAQlzB,KACI,WACS,WAAf0rB,GAAM1rB,KACA,aAEAmxB,EAAAA,EAAAA,IAAWzF,GAG3B,MAAMoe,EAAUzY,EAAgBu/C,GAAa7mC,SAAS1Y,EAAiB,CAAC,GAOxE,MALqB,aAAjByY,EAAQ9pC,OACV8pC,EAAQ+mC,QAAU39C,EAAO29C,QACzB/mC,EAAQgnC,gBAAkB59C,EAAO49C,iBAG5BhnC,CACT,CAEA,SAAS4mC,GAAwBhlD,GAG/B,GAFmB4jD,GAAe5jD,GAEnBvsB,OAAS,EACtB,OAAOusB,EAGT,MAAMqlD,EAAY1B,GAAc3jD,GAEhC,GAAIqlD,EAAU5xE,OAAS,EAAG,CACxB,MAAM6xE,EAAYtlD,EAAKqlD,EAAU,IAAI,GAErC,GAAIC,EACF,OAAON,GAAwBM,EAEnC,CAEA,OAAO,IACT,C,omECKA,SAASC,GAAoBC,EAAQC,EAAmBC,GACtD,OAAOC,EAAAA,EAAAA,SAAQH,GAAQ,CAACl9D,EAAK1V,IAAQA,EAAIoG,QAAQysE,EAAWC,GAAa1sE,SAAQ4sE,EAAAA,EAAAA,YAAWH,IAAYG,EAAAA,EAAAA,YAAWF,KACrH,CAEA,SAASG,GAAuChmE,GAC9C,MAAgB,mBAAZA,EACO3K,GAAOqwE,IAAoBO,EAAAA,GAAAA,GAA8B5wE,GAAK,iBAAkB,YAElF6wE,EAAAA,CAEX,CAEA,SAASC,GAAsCnmE,GAC7C,MAAgB,mBAAZA,EACO3K,GAAOqwE,IAAoBU,EAAAA,GAAAA,IAAuB/wE,GAAK,UAAW,WAEpEgxE,GAAAA,CAEX,CA6CA,SAASC,GAAmCl4E,GAC1C,OAAOm4E,EAAAA,EAAAA,IAAen4E,GAAO+xB,GAAsB,sBAAbA,EAAK1rB,MAC7C,CAEA,SAAS+xE,GAAmBntD,GAC1B,OAAKA,EAAQi1C,YAAc9jC,EAAAA,EAAUnR,EAAQi1C,aACpCmY,EAAAA,EAAAA,IAAmDptD,EAAQjrB,MAE3DirB,EAAQi1C,UAEnB,CAEA,SAASoY,GAAsBrtD,EAA4BstD,EAA0Bj0C,EAAwCk0C,GAC3H,GAAIvtD,GAASjrB,KACX,OAAIw4E,GAAiBvtD,EAAQhkB,KAAOsxE,GAC3B/W,EAAAA,EAAAA,IAA4B4W,GAAmBntD,GAAUqZ,GAEzDrZ,EAAQjrB,IAGrB,CAmIA,SAASy4E,GAAmBC,EAAsD7mE,EAAoBE,EAAmB4mE,EAAsC1mE,GAC7J,MAAM2mE,EAAU53E,GAAAA,GAAAA,GAAAA,GAAA,CACd63E,wBAAyBH,EAAcG,wBACvC7V,kCAAmC0V,EAAc3V,0BAC9C2V,EAAcI,gBAAgBjnE,IAC9B6mE,EAAcK,eAAehnE,IAC7B2mE,EAAcM,yBAAyBL,IACvCD,EAAcO,sBAGnB,OAAAj4E,GAAAA,GAAA,GACK43E,GAAU,IACb12C,eAAiBg3C,GAAsBN,EAAWO,oBAAoB,CAACn3C,YAAak3C,IACpFxmD,uBAAyB1yB,IACvBE,OAAOk5E,kBAAoBp5E,EAC3B44E,EAAWO,oBAAoB,CAC7B3lD,oBAAqBxzB,EACrBq5E,gBAAiB,GACjBC,kBAAmB,KAErB94C,EAAAA,GAA0BxgC,EAAK,EAEjCq6B,yBAA0BA,KACxBmG,EAAAA,QAA0Bt6B,GAC1B0yE,EAAWO,oBAAoB,CAC7B3lD,yBAAqBttB,EACrBmzE,gBAAiB,GACjBC,kBAAmB,IACnB,EAEJppD,eAAgBA,CAACR,EAAM1vB,EAAO,CAAC,IAAM44E,EAAWO,oBAAoB,CAAC1pD,YAAWzuB,GAAA,CAAG0uB,QAAS1vB,KAC5FiwB,iBAAkBA,IAAM2oD,EAAWO,oBAAoB,CAAC1pD,iBAAavpB,IACrEqzE,kBAAoBv5E,GAA8B44E,EAAWO,oBAAoB,CAAC9qC,eAAgBruC,IAClGw5E,eAAiBx5E,GAAmB44E,EAAWO,oBAAoB,CAACM,YAAaz5E,IACjFqwB,YAAcrwB,GAAkB44E,EAAWO,oBAAoB,CAACvpD,SAAU5vB,IAC1E05E,mBAAqB15E,GAA4B44E,EAAWO,oBAAoB,CAACE,gBAAiBr5E,IAClG25E,qBAAuB35E,GAA4B44E,EAAWO,oBAAoB,CAACG,kBAAmBt5E,IACtG+yB,eAAiB/yB,GAAkB44E,EAAWO,oBAAoB,CAACtpD,YAAa7vB,IAChF6iC,aAAe9wB,GAAsB6mE,EAAWgB,qBAAqB,CAAC7nE,cACtEkyB,wBAA0Bi1C,GAA+BN,EAAWO,oBAAoB,CAACp1C,qBAAsBm1C,IAC/G10C,sBAAwB00C,GAA6BN,EAAWO,oBAAoB,CAAC70C,mBAAoB40C,IACzG/sC,sBAAwB35B,GAAgBomE,EAAWO,oBAAoB,CAACU,mBAAoBrnE,IAC5FsnE,mBAAqBpQ,GAAgDkP,EAAWO,oBAAoB,CAACzP,gBAAiBA,IACtHrG,+BAAiC3qB,GAAyCkgC,EAAWO,oBAAoB,CAACzgC,gCAC1G7Q,qCAAsCA,CAACxhC,EAAiB0zE,IAA8BnB,EAAWoB,iCAAiC5/D,IAChI,MAAM6/D,EAAiB7/D,EAAW,GAAE/T,iBAAsB,EAC1D,OAAArF,GAAAA,GAAA,GAAWoZ,GAAS,IAClB,CAAE,GAAE/T,gBAAoB4zE,EAAiBF,GAAiB,IAG9DzmD,WAAYA,CAAC4mD,EAA2B5lD,KA4CtCokD,EAAcyB,UA3CkBC,CAACD,EAAUE,KACzC,MAEMt2C,EAFQs2C,IAEqB33E,SAASqP,GAAWqI,UAAU2pB,sBAElCzP,EAC/BskD,EAAWC,wBAAwBvkD,GAAWgmD,8BAC9C1B,EAAW2B,gCAEY,CAACC,EAAUC,EAA6BrgE,KAC7D,IAAIsgE,EAAgBD,EAASva,YAAcsa,EAASta,WAE/Cwa,IAAiBt+C,EAAAA,EAAUs+C,KAC9BA,GAAgBrC,EAAAA,EAAAA,IAAmDmC,EAASx6E,OAI9E,MAEMwzB,EAAsBpZ,EAAUoZ,oBAChCmnD,GL1W6BrH,EK0Wcl5D,EAAUk5D,cL1WoBsH,EK0WL,CAAC1a,WAAYwa,EAAelnD,oBAAqBA,GLzWnI8/C,EAAgBA,GAkBT,CACLC,UAAW,GACXsH,UAAW,GACXC,kBAAmB,IKiVU,GLpWJxH,EAAcwH,kBAJL,GAKlC95E,EAAAA,EAAA,GACKsyE,GAAa,IAChBC,UAAW,GACXuH,kBAAmBxH,EAAcwH,kBAAoB,IAGhD,CACLvH,UAAW,GACXsH,UAAW,CAACD,GAAa/jE,OAAOy8D,EAAcuH,WAAWppD,MAAM,EAAG,IAClEqpD,kBAAmB,IAblB,IAAsCxH,EAA4CsH,EK4W/E,MAAMG,EAAmBh3C,IAAyBI,GAAAA,EAAsBE,gBAElE22C,GAAc9qC,EAAAA,EAAAA,KAGd+qC,GAFNf,EAAaA,EAAWtzE,KAAKs0E,GAAMl6E,GAAAA,GAAA,GAAUk6E,GAAM,IAAEpT,cAAekT,OAClCp0E,KAAKu0E,IAAcC,EAAAA,EAAAA,IAAaD,EAAWlpE,EAAa8oE,KACrDr2E,QAAO,CAAC4yD,EAAK4jB,KAAWG,EAAAA,EAAAA,IAAe/jB,EAAK4jB,IAASR,GAE1F,MAAO,CACLF,WACAC,SAAQz5E,GAAAA,GAAA,GACHy5E,GAAQ,IACXva,WAAY+a,IAEd7gE,UAASpZ,GAAAA,GAAA,GACJoZ,GAAS,IACZk5D,cAAeqH,IAElB,GACD,GAGsC,EAE5Cx3C,KAAMA,KACJy1C,EAAW2B,+BAA8B,CAACC,EAAUC,EAAUrgE,KAC5D,MAAM8lD,EAAaua,EAASva,YAAcsa,EAASta,WAInDob,ELlcD,SAA4BhI,EAA4CsH,GAG7E,GAAuC,KAFvCtH,EAAgBA,GA2ET,CACLC,UAAW,GACXsH,UAAW,GACXC,kBAAmB,IA5EHD,UAAUr1E,OAAc,CACxC,IAAI+1E,EAAejI,EAAcC,UACjC,MAAMiI,EAAUlI,EAAcuH,UAAU,GAClCY,EAAenI,EAAcuH,UAAUppD,MAAM,GAQnD,OANImpD,IACFW,EAAe,CAACX,GAAa/jE,OAAO0kE,IAGtCA,EAAeA,EAAa9pD,MAAM,EAAG,IAE9B,CACL+pD,EACA,CACEjI,UAAWgI,EACXV,UAAWY,EACXX,kBAAmB,GAGzB,CAEE,OADAlgE,MAAM,kBACC,CAACggE,EAAatH,EAEzB,CKwakDoI,CAHpBthE,EAAUk5D,cAK9B,CACEpT,WAAYA,EACZ1sC,oBANwBpZ,EAAUoZ,sBAQrCmoD,EAAAn5E,GAAA84E,EAAA,GANMM,EAAaD,EAAA,GAAEhB,EAAgBgB,EAAA,GAUtC,OAFAn7C,EAAAA,GAA0Bo7C,EAAcpoD,qBAEjC,CACLgnD,WACAC,SAAQz5E,GAAAA,GAAA,GACHy5E,GAAQ,IACXva,WAAY0b,EAAc1b,aAE5B9lD,UAASpZ,GAAAA,GAAA,GACJoZ,GAAS,IACZk5D,cAAeqH,EACfnnD,oBAAqBooD,EAAcpoD,oBACnC6lD,gBAAiB,GACjBC,kBAAmB,KAEtB,GACD,EAEJj2C,KAAMA,KACJu1C,EAAW2B,+BAA8B,CAACC,EAAUC,EAAUrgE,KAC5D,MAAM8lD,EAAaua,EAASva,YAAcsa,EAASta,WAInD2b,ELtcD,SAA4BvI,EAA4CsH,GAG7E,GAAuC,KAFvCtH,EAAgBA,GA+CT,CACLC,UAAW,GACXsH,UAAW,GACXC,kBAAmB,IAhDHvH,UAAU/tE,OAAc,CACxC,MAAM+1E,EAAejI,EAAcC,UAAU9hD,MAAM,GAC7C+pD,EAAUlI,EAAcC,UAAU,GACxC,IAAIkI,EAAenI,EAAcuH,UAQjC,OANID,IACFa,EAAe,CAACb,GAAa/jE,OAAO4kE,IAGtCA,EAAeA,EAAahqD,MAAM,EAAG,IAE9B,CACL+pD,EACA,CACEjI,UAAWgI,EACXV,UAAWY,EACXX,kBAAmB,GAGzB,CAEE,OADAlgE,MAAM,kBACC,CAACggE,EAAatH,EAEzB,CK4akDoI,CAHpBthE,EAAUk5D,cAK9B,CACEpT,WAAYA,EACZ1sC,oBANwBpZ,EAAUoZ,sBAQrCsoD,EAAAt5E,GAAAq5E,EAAA,GANMD,EAAaE,EAAA,GAAEnB,EAAgBmB,EAAA,GAUtC,OAFAt7C,EAAAA,GAA0Bo7C,EAAcpoD,qBAEjC,CACLgnD,WACAC,SAAQz5E,GAAAA,GAAA,GACHy5E,GAAQ,IACXva,WAAY0b,EAAc1b,aAE5B9lD,UAASpZ,GAAAA,GAAA,GACJoZ,GAAS,IACZk5D,cAAeqH,EACfnnD,oBAAqBooD,EAAcpoD,oBACnC6lD,gBAAiB,GACjBC,kBAAmB,KAEtB,GACD,GAGR,CAEA,MAAMyC,GAAwC9I,KAC9C,SAAmCyF,EAAsDzmE,EAAmBJ,EAAoBE,EAAmBiqE,GACjJ,MAAMrD,EAAuB,GAAE9mE,KAAcI,EAAcA,EAAYhL,GAAK,KAEtE2xE,EAAaH,GAAmBC,EAAe7mE,EAAYE,EAAW4mE,EAAqB1mE,GAEjG,OAAAjR,GAAAA,GAAA,GACK43E,GAAU,IACbqD,qDAAsDA,IAAMvD,EAAcK,eAAeiD,GAAsCE,cAC/H9vC,SAAUA,CAAC+vC,EAAStoD,EAAO,CAAC,KAAY5hB,IAAemqE,EAAAA,EAAAA,IAAoBvqE,EAAYsqE,EAAStoD,EAAO,EACvGwS,qBAAuBg2C,GAAiCzD,EAAW0D,mBAAmB,CAAC11C,WAAYy1C,IACnGE,YAAaA,CAACz4C,EAAW04C,KACvB5D,EAAW6D,iCAAgC,CAAChC,EAAUD,EAAUpgE,KAC9D,MACMsiE,IADiBlC,GAAY,CAAC,GAAG12C,KAAiB22C,GAAY,CAAC,GAAG32C,IACtC7/B,QAAQ2E,GAASA,IAAS4zE,IAE5D,OAAAx7E,GAAAA,GAAA,GAAWy5E,GAAQ,IACjB,CAAC32C,GAAY44C,GAAY,IAG7B9D,EAAW+D,gBAAgB,EAE7BjqC,WAAakqC,IACXruE,OAAM2W,EAAAA,EAAAA,GAAU,cAAarT,cAAwB,CACnD0Z,OAAQ,MACR7qB,QAAS+Z,aAAaigD,oBAAoB,CACxC,OAAU,mBACV,eAAgB,qBAElBtpC,KAAMvrB,KAAKC,UAAU,CAAC,KAEvBwL,MAAKoJ,IACAA,EAAS8V,IACX5V,MAAMgiE,GACN18E,OAAO6J,SAASgB,SAAQma,EAAAA,EAAAA,GAAS,QAEjCnK,QAAQwK,IAAI7K,EAASkgD,YACrB7/C,QAAQwK,IAAI7K,EAASnD,QACvB,IAEDsD,OAAMC,IACLC,QAAQwK,IAAIzK,EAAM,GAClB,EAEJ6sC,UAAWA,KACT/sC,MAAM,mGACN1a,OAAO6J,SAASgB,SAAQma,EAAAA,EAAAA,GAAS,KAAK,GAG5C,IAEA,MAAM23D,GAA8C5J,KACpD,SAAyCyF,EAAsDzmE,EAAmBJ,EAAoBE,GACpI,MAEM6mE,EAAaH,GAAmBC,EAAe7mE,EAAYE,EAFpC,UAEoEE,GAEjG,OAAAjR,GAAAA,GAAA,GACK43E,GAAU,IACbxsC,SAAUA,CAAC+vC,EAAStoD,EAAO,CAAC,KAAQ9Y,QAAQwK,IAAI,kCAAkC,EAClFg3D,YAAaA,CAACz4C,EAAW04C,KACvBzhE,QAAQwK,IAAI,iDAAiD,EAE/D0kD,aAAe6S,IACblE,EAAWmE,oBAAoB,CAACn0E,KAAMk0E,IACtClE,EAAW+D,gBAAgB,GAGjC,IAEA,MAiFMK,GAAS,CACb75C,KAAM,QACNE,KAAM,QACNE,KAAM,QACNk2B,UAAW,YACX3iC,OAAQ,QACRt1B,OAAQ,CAAC,MAAO,aAChBy7E,IAAK,MACLC,SAAU,YACVC,KAAM,QACNC,OAAQ,QACRC,UAAW,QACXC,YAAa,cACbC,UAAW,QACXj8D,KAAM,SAwGR,MAAMsvC,WAA4BzqD,EAAAA,UAYhCgC,WAAAA,CAAYV,GACVW,MAAMX,GAAO,KAZf+1E,iBAAW,OACXC,yBAAmB,OACnBC,wBAAkB,OAClBC,kBAAY,OACZC,wBAAkB,OAClBC,qBAAe,OACfC,uBAAiB,OACjBC,kBAAY,OACZC,wCAAkC,OAClCC,gCAA0B,EAKxB,MAAMC,EAAUC,EAAAA,UAAiBj+E,OAAOyuE,UAAUyP,WAClD91E,KAAKk1E,YAAcU,EAAQG,iBAE3B/1E,KAAKS,MAAQ,CACXu1E,iBAAiB,EACjB1iB,SAAU+S,UAAUC,OACpBxwC,cAAe,GAEnB,CAEAmgD,qBAAAA,GACOj2E,KAAKb,MAAM+2E,kBACdl2E,KAAKb,MAAMy0E,cAEP5zE,KAAKb,MAAM04B,kBACb73B,KAAKb,MAAMg3E,oBAIVn2E,KAAKb,MAAMi3E,mBACdp2E,KAAKb,MAAMk3E,eAEPr2E,KAAKb,MAAM04B,kBACb73B,KAAKb,MAAMm3E,qBAIXt2E,KAAKb,MAAMi1B,oBACbp0B,KAAKb,MAAMi1B,mBAAmBx3B,SAAS+9C,IACrC,IAAKA,EAAkB47B,SAAU,CACEv2E,KAAKb,MAAMu7D,kCAAkC/f,EAAkBh8C,IACvE63E,uBAC3B,KAIAx2E,KAAKb,MAAMs3E,UACbz2E,KAAKb,MAAMs3E,SAAS75E,SAAS+lB,IAC3B,IAAKA,EAAQ4zD,SAAU,CACrB,MAAMG,EAAiB12E,KAAKb,MAAMoxE,wBAAwB5tD,EAAQhkB,IAClE+3E,EAAeC,cAEX32E,KAAKb,MAAM04B,kBACb6+C,EAAeE,kBAEnB,IAGN,CAEA70E,iBAAAA,GACE/B,KAAKm1E,oBAAsB,IAAIlQ,EAC/BjlE,KAAKm1E,oBAAoB1Q,iBAAiBzkE,MAE1CA,KAAKq1E,aAAe,IAAIjQ,EACxBplE,KAAKq1E,aAAa5Q,iBAAiBzkE,MAEnCA,KAAKu1E,gBAAkB,IAAIvP,EAC3BhmE,KAAKu1E,gBAAgB9Q,iBAAiBzkE,MAElCA,KAAKb,MAAM04B,mBACb73B,KAAKo7B,iBAELp7B,KAAK62E,mCAEL72E,KAAKw1E,kBAAoB,IAAI1O,EAC7B9mE,KAAKw1E,kBAAkB/Q,iBAAiBzkE,MAExCA,KAAKs1E,mBAAqB,IAAI3P,EAC9B3lE,KAAKs1E,mBAAmB7Q,iBAAiBzkE,MAEzCA,KAAKo1E,mBAAqB,IAAItQ,EAC9B9kE,KAAKo1E,mBAAmB3Q,iBAAiBzkE,MACzCA,KAAKy1E,aAAe52E,KAAKi4E,OAG3B92E,KAAKi2E,wBAEDj2E,KAAKb,MAAMwK,cACc,mBAAvB3J,KAAKb,MAAMmK,SACbtJ,KAAKb,MAAM43E,4BACX/2E,KAAKb,MAAM63E,6BAA6B,CAACr4E,GAAI,UAAkB8B,MAAO,CAAC,MAEvET,KAAKb,MAAM83E,wBACXj3E,KAAK01E,mCAAqCr3B,YAAYr+C,KAAKb,MAAM+3E,8BAA+B,OAIhGl3E,KAAKb,MAAMu0E,sCACb1zE,KAAKb,MAAMw0E,uDAGTp3E,MAAMC,QAAQwD,KAAKb,MAAMg4E,kBAAoBn3E,KAAKb,MAAMg4E,gBAAgB,IAC1En3E,KAAKb,MAAM0xE,oBAAoB,CAC7Bn3C,YAAaG,GAAAA,EAAaG,MAGhC,CAEA68C,gCAAAA,GACE,MAAAx0E,EAKIrC,KAAKb,MAJPi4E,EAAiB/0E,EAAjB+0E,kBACAztE,EAAWtH,EAAXsH,YACAusB,EAAS7zB,EAAT6zB,UACAmhD,EAAQh1E,EAARg1E,SAGI1hC,EAAW0hC,GAAUC,MAE3B,GAAI3hC,EAAU,CACZ,MAAM4hC,EAAYv3E,KACZw3E,EAA6B7hC,EAASC,cAAcC,OAAO,CAC/DC,QAAS,iBACT2hC,WAAYL,EACZM,WAAYxhD,GACX,CACD+f,SAAAA,GACExjC,QAAQwK,IAAI,iCAEPs6D,EAAU5B,6BACb31E,KAAK23E,UAELJ,EAAU5B,2BAA6Bt3B,YAAYr+C,KAAK23E,QAAQ/kE,KAAK5S,MAAO,KAEhF,EACAk2C,YAAAA,GACEzjC,QAAQwK,IAAI,mCACd,EACA+4B,QAAAA,CAASt+C,GACP,MACEo+B,EAOEp+B,EAPFo+B,cACAK,EAMEz+B,EANFy+B,cACAF,EAKEv+B,EALFu+B,WACA2hD,EAIElgF,EAJFkgF,kBACAC,EAGEngF,EAHFmgF,qBACAC,EAEEpgF,EAFFogF,kBACAC,EACErgF,EADFqgF,yBAIAhiD,EACEwhD,EAAU92E,MADZs1B,UAGIiiD,EAAUruE,EAAYhL,KAAOo3B,GAAWE,YAAcC,IAAcH,GAAWI,cAC/EjB,EAAUvrB,EAAYhL,KAAOjH,EAAKu+B,YAAcC,IAAcx+B,EAAKy+B,cAEzEohD,EAAUh3E,SAAS,CACjBu1B,gBACAC,UAAW,CACTb,UACAiB,gBACAF,aACA2hD,oBACAC,uBACAC,oBACAC,8BAIAC,IAAY9iD,IACVA,GACFqiD,EAAUp4E,MAAMy0E,cAChB2D,EAAUp4E,MAAMg3E,oBAEhBoB,EAAUp4E,MAAM84E,oBAGtB,EACAN,OAAAA,GACEH,EAA2BlhC,QAAQ,WAAY,CAAC4hC,YAAaztE,KAAKC,MAAM6sE,EAAU9B,aAAa,MACjG,EACArgD,UAAAA,GACEoiD,EAA2BlhC,QAAQ,eACrC,EACAjhB,aAAAA,GACEmiD,EAA2BlhC,QAAQ,kBACrC,EACA6hC,WAAAA,GACEX,EAA2BlhC,QAAQ,eACrC,EACAhhB,SAAAA,GACEkiD,EAA2BlhC,QAAQ,aACrC,IAGFt2C,KAAKO,SAAS,CAACi3E,2BAA4BA,GAE7C,CACF,CAEAY,qCAAAA,GACE,MACEZ,EACEx3E,KAAKS,MADP+2E,2BAGEA,IACFA,EAA2Ba,cAC3Br4E,KAAKO,SAAS,CAACi3E,2BAA4B,QAGzCx3E,KAAK21E,4BACPh/D,aAAa3W,KAAK21E,2BAEtB,CAEAvgD,UAAAA,GAGMp1B,KAAKS,MADP+2E,2BAGyBpiD,YAC7B,CAEAC,aAAAA,GACE,MACEmiD,EACEx3E,KAAKS,MADP+2E,2BAGmB12E,QAAQ,8FAE3B02E,GAA4BniD,eAEhC,CAEAC,SAAAA,GACE,MACEkiD,EACEx3E,KAAKS,MADP+2E,2BAGsB12E,QAAQ,sHAE9B02E,GAA4BliD,WAEhC,CAEAgjD,uBAAAA,CAAwB15B,EAAqCjxC,GAC3D,MAAO,CACL4qE,yBAA0BrgD,EAAAA,KAE9B,CAEAymB,kBAAAA,CAAmBC,EAAqCjxC,EAAqC6qE,GAG3F,GAFAx4E,KAAKy4E,iBAAiBD,EAASD,2BAE1B5qE,EAAUqoE,iBAAmBz5E,MAAMC,QAAQoiD,EAAUu4B,iBAAkB,EAC1DuB,EAAAA,GAAAA,IAAuB95B,EAAUu4B,mBAE/Cn3E,KAAKb,MAAM0kC,sBAAsB+a,EAAUu4B,gBAAgB,IAC3Dn3E,KAAKO,SAAS,CAACy1E,iBAAiB,IAEpC,CAEAh2E,KAAKi2E,wBAEDj2E,KAAKb,MAAM04B,kBAAoB+mB,EAAUw4B,oBAAsBp3E,KAAKb,MAAMi4E,oBAC5Ep3E,KAAKo4E,wCACLp4E,KAAK62E,qCAGH72E,KAAKS,MAAM6yD,UAAa3lD,EAAU2lD,UAAatzD,KAAKb,MAAMgpC,WAC5D71B,MAAM,6FAGR,MAAAykC,EAGI/2C,KAAKb,MAFP+nB,EAAU6vB,EAAV7vB,WACAyxD,EAAgB5hC,EAAhB4hC,iBAGF,GAAI34E,KAAKb,MAAM04B,kBAAoB3Q,EAAY,CAC7C,MAAM0xD,EAAiCD,EAAiBvX,iBAAiBpoD,MAAMkmD,GAAkBA,EAAc2Z,mBACzGzX,GAAkB0X,EAAAA,EAAAA,IAA6B5xD,EAAYyxD,EAAiBxxD,YAAawxD,EAAiBztD,oBAAqB0tD,GAEhI9kD,EAAAA,EAASstC,EAAiBuX,EAAiBvX,kBAC9CphE,KAAKb,MAAMqyE,mBAAmBpQ,EAElC,CACF,CAEAl/D,oBAAAA,GACElC,KAAKm1E,qBAAqBvQ,mBAAmB5kE,MAC7CA,KAAKq1E,cAAczQ,mBAAmB5kE,MAEtCA,KAAKu1E,iBAAiB3Q,mBAAmB5kE,MAEpCA,KAAK01E,oCAAuCx3B,cAAcl+C,KAAK01E,oCAE/D11E,KAAKS,MAAMs4E,kBAAqB76B,cAAcl+C,KAAKS,MAAMs4E,kBAE9D/4E,KAAKw1E,mBAAmB5Q,mBAAmB5kE,MAC3CA,KAAKs1E,oBAAoB1Q,mBAAmB5kE,MAC5CA,KAAKo1E,oBAAoBxQ,mBAAmB5kE,KAC9C,CAEAg5E,0BAAAA,CAA2B9tD,GACzB,MAAMkF,GAA8B9F,EAAAA,EAAAA,IAAqBtqB,KAAKb,MAAM+nB,WAAYgE,EAAoBnB,MAAM7f,KAE1G,IAAI4vD,EAA0B,KAC9B,GAAI1pC,EAA6B,CAC/B,IAAI2uC,EAAa3uC,EAA4BpX,MAAMyQ,GAAsB,sBAAdA,EAAK1rB,QAA+BmM,IAC/F4vD,EAA0B95D,KAAKb,MAAM85E,YAAY7kD,mBAAmBpb,MAAMqb,GAAMA,EAAG11B,KAAOogE,GAC5F,CAEA,IAAIma,EAAoBl5E,KAAKb,MAAM85E,YAAYxlD,iCAAiCn1B,KAAIo1B,GAAQA,EAAKgB,qBAC7FykD,EAA4Bn5E,KAAKb,MAAM+nB,WAAW2N,yCAA2C70B,KAAKb,MAAM+nB,WAAW2N,yCAAyCv2B,KAAIo1B,GAAQA,EAAKgB,qBAAsB,GACnM0kD,EAAuB78E,MAAMS,KAAK,IAAIL,IAAIu8E,EAAkB3qE,OAAO4qE,KACnEE,EAAqBr5E,KAAKb,MAAM+nB,WAAW2N,yCAA2CukD,EAAuB96E,KAAIK,GAAMqB,KAAKb,MAAM85E,YAAYnwB,gBAAgB9vC,MAAKkhD,GAAMA,EAAGv7D,KAAOA,KAAKuL,MAAO,GAE/LovE,EAAkClpD,EAA4B9xB,KAAItC,GAAOA,EAAIkO,MAC7EqvE,EAAgCzf,QAA+Jl8D,IAApIoC,KAAKb,MAAM85E,YAAYxlD,iCAAiCza,MAAK0a,GAAQA,EAAKc,wBAA0BslC,EAAwBn7D,KACvL66E,EAAmC1f,GAA2B95D,KAAKb,MAAM+nB,WAAW2N,+CAAuLj3B,IAA3IoC,KAAKb,MAAM+nB,WAAW2N,yCAAyC7b,MAAK0a,GAAQA,EAAKc,wBAA0BslC,EAAwBn7D,KACnQ86E,EAAgCJ,GAA6H,IAAvGC,EAAgC39E,QAAOy/D,IAAoD,IAAzCie,EAAmBnwE,QAAQkyD,KAAiBl+D,OAEpJw8E,GAAe,EACnB,GAAItpD,EAA6B,CAC/B,MAAM+G,EAAkB/G,EAA4BpX,MAAKyQ,GAAQA,EAAK0N,kBACtEuiD,EAAeviD,GAAmBA,EAAgBA,gBAAkB,CACtE,CAEGoiD,GAAiCC,GAAoCC,GACtEnnE,MAAM,mEACNtS,KAAKb,MAAMw8B,wBAAwB,oBAC3B+9C,IACRpnE,MAAM,+EACNtS,KAAKb,MAAMw8B,wBAAwB,mBAEvC,CAEAwpC,kBAAAA,CAAmBtpE,GACjB,MAAMqvB,EAAsBgN,EAAAA,KAE5B,IAAKhN,EAAuB,OAAO,EAWnC,OATArvB,EAAM0V,kBAEYvR,KAAKb,MAAMw5E,iBAAiBl9C,sBAAyBz7B,KAAKb,MAAM6K,YAAY4xB,iBAAoB,GAAE57B,KAAKb,MAAM6K,YAAY4xB,gBAAgB+9C,sBAAyB99C,GAAAA,EAAsBC,gBACtLD,GAAAA,EAAsBC,eACnC97B,KAAKb,MAAM0K,SAAkC,mBAAvB7J,KAAKb,MAAMmK,SACpCtJ,KAAKg5E,2BAA2B9tD,IAI5BrvB,EAAM+9E,WACZ,IAAK,aACH,OAAO55E,KAAKb,MAAM06E,kBAAkBh+E,EAAMnE,MAC5C,IAAK,kBACL,IAAK,iBACL,IAAK,iBACH,OAAOsI,KAAKb,MAAMmuE,iBAAiBzxE,EAAM0xE,cAC3C,IAAK,kBACL,IAAK,kBACH,OAAOvtE,KAAKb,MAAM+uE,oBACpB,IAAK,cACHluE,KAAK85E,6BACP,IAAK,eACL,IAAK,gBACL,IAAK,wBACL,IAAK,uBACL,IAAK,yBACL,IAAK,yBACL,IAAK,qBACH,OAAO95E,KAAKb,MAAM+rE,oBACpB,IAAK,cACH,OAAOlrE,KAAKb,MAAM07B,OACpB,IAAK,cACH,OAAO76B,KAAKb,MAAM47B,OAkCpB,QACEtoB,QAAQwK,IAAI,uBAElB,CAEAuoD,WAAAA,CAAY3pE,GACVmE,KAAK85E,4BACP,CAEA9U,iBAAAA,CAAkBnpE,GAChBmE,KAAKy1E,aAAe52E,KAAKi4E,KAC3B,CAEAgD,0BAAAA,GACE,MAAA7iC,EAGIj3C,KAAKb,MAFPvD,EAAOq7C,EAAPr7C,QACA+8E,EAAgB1hC,EAAhB0hC,iBAGIxxD,EAAcwxD,GAAkBxxD,YACtC,IAAI+D,EAAsBgN,EAAAA,KAE1B,IAAKhN,GAAuB/D,EAAe,OAAO,EAElD,IAAIywC,EAAah8D,EAAQg8D,WACpBA,IAAc9jC,EAAAA,EAAU8jC,KAC3BA,GAAamY,EAAAA,EAAAA,IAAmDn0E,EAAQlE,OAG1EwzB,GAAsB6uD,EAAAA,EAAAA,IAA8CniB,EAAY1sC,GAEhF,MAAM8uD,GAAsBC,EAAAA,EAAAA,IAA8BriB,EAAY1sC,GAEtE,IAAK8uD,EAAuB,OAAO,EAEnC,MAAME,GAAqBC,EAAAA,EAAAA,IAA+BviB,EAAYoiB,GAEtE,IAAKE,GAA0D,IAApCA,EAAmBhQ,MAAMhtE,OAAgB,OAAO,EAE3E,MAAMk9E,GAAoBC,EAAAA,EAAAA,IAAmBH,EAAmBhQ,MAAOgQ,EAAmBI,UAAWj+C,EAAAA,GAAoBk+C,uBAEzHv6E,KAAKb,MAAM8xE,kBAAkBmJ,EAC/B,CAEA5T,YAAAA,GAAoBxmE,KAAKS,MAAM6yD,UAAYtzD,KAAKO,SAAS,CAAC+yD,UAAU,GAAY,CAChFiT,WAAAA,GAAoBvmE,KAAKS,MAAM6yD,UAAYtzD,KAAKO,SAAS,CAAC+yD,UAAU,GAAW,CAE/EwS,iBAAAA,CAAkBjqE,GAAqBmE,KAAKb,MAAM+xE,gBAAe,EAAO,CACxEnL,eAAAA,CAAgBlqE,GAAqBmE,KAAKb,MAAM+xE,gBAAe,EAAQ,CAEvElK,kBAAAA,CAAmBnrE,GAAgBmE,KAAKw6E,yBAA2B,CAEnEA,uBAAAA,GACE,MAAA7iC,EAII33C,KAAKb,MAHPwoB,EAAgBgwB,EAAhBhwB,iBACAkpD,EAAmBl5B,EAAnBk5B,oBACA8H,EAAgBhhC,EAAhBghC,iBAGIztD,EAAsBytD,EAAiBztD,oBACvCuvD,EAAkBviD,EAAAA,KAElB/Q,EAAcwxD,EAAiBxxD,YAEjCszD,IACGviD,EAAAA,GAAgChN,EAAqBuvD,KACpD,CAAC9kB,GAAAA,GAAsBr9B,GAAAA,GAAoByoC,GAAAA,GAAc9oC,GAAAA,GAAW7M,GAAAA,GAAmBib,GAAAA,IAAUlhC,SAASgiB,GAAaC,OACzHO,IAIFkpD,EAAoB,CAClB3lD,oBAAqBuvD,EACrB1J,gBAAiB,GACjBC,kBAAmB,MAI3B,CAEAyH,gBAAAA,CAAiBF,GACf,MACEI,EACE34E,KAAKb,MADPw5E,iBAGF,IAAI+B,EAAuBnC,EAEvB3gF,OAAOk5E,oBACT4J,EAAuB9iF,OAAOk5E,kBAC9Bl5E,OAAOk5E,uBAAoBlzE,GAG7B,MAAM+8E,EAAkBziD,EAAAA,KAClB0iD,EAAc1iD,EAAAA,GAAiCwiD,GAErD,IAAKxiD,EAAAA,GAA4ByiD,EAAiBC,GAAc,CAC9D,MAAMzzD,EAAcwxD,GAAkBxxD,YACjC,CAACwuC,GAAAA,GAAsBr9B,GAAAA,GAAoByoC,GAAAA,GAAc9oC,GAAAA,GAAW7M,GAAAA,IAAmBjmB,SAASgiB,GAAaC,OAEhH8Q,EAAAA,GAA0BwiD,EAE9B,CACF,CAEAt/C,cAAAA,GACMp7B,KAAKS,MAAMs4E,kBACb76B,cAAcl+C,KAAKS,MAAMs4E,kBACzB/4E,KAAKO,SAAS,CACZw4E,sBAAkBn7E,KAGpBoC,KAAKO,SAAS,CACZw4E,iBAAkB16B,YAAYr+C,KAAK66E,SAASjoE,KAAK5S,MAAO,MAG9D,CAEA66E,QAAAA,GACM76E,KAAKb,MAAM27E,gBACb96E,KAAKb,MAAM87B,MAEf,CAEA8/C,sBAAAA,CAAuB7zD,GACrB,IAKI8zD,EALuBh7E,KAAKb,MAAM85E,YAAYxlD,iCAAiCn1B,KAAKo1B,GAAQA,EAAKc,wBAEpDl2B,KAAIK,GAAMqB,KAAKb,MAAM85E,YAAY7kD,mBAAmBpb,MAAKqb,GAAMA,EAAG11B,KAAOA,KAAKuL,MAC3F5L,KAAI4L,IAAO+wE,EAAAA,EAAAA,IAAc/zD,EAAYhd,KAC9CvO,QAAOu/E,GAAKA,IACP58E,KAAImrB,GAAQA,EAAKvV,QAAQ,GAAGA,SAASinE,kBAAkB5sE,OAAOkb,EAAKvf,OAK/FkxE,EAHoBp7E,KAAKb,MAAM85E,YAAYxlD,iCAAiCn1B,KAAKo1B,GAAQA,EAAKgB,qBACvDp2B,KAAIK,GAAMqB,KAAKb,MAAM85E,YAAYnwB,gBAAgB9vC,MAAKkhD,GAAMA,EAAGv7D,KAAOA,KAAKuL,MACrF5L,KAAI4L,IAAO+wE,EAAAA,EAAAA,IAAc/zD,EAAYhd,KAC3CvO,QAAOu/E,GAAKA,IACnCG,EAAiBD,EAAa98E,KAAImrB,GAAQA,EAAKpgB,OAAO8xE,mBAAkBx/E,QAAOi3E,GAAUA,IACzF0I,EAAmBF,EAAa98E,KAAImrB,GAAQA,EAAKvV,QAAQ,GAAGA,SAASinE,mBAAkBx/E,QAAOi3E,GAAUA,IACxG2I,EAAuBP,EAAar/E,QAAOi3E,GAAUA,IAAQj3E,QAAOi3E,GAAUA,EAAOA,GAAQ11E,OAAS,IAAIs+E,cAAiB,IAAI38E,MAAQirC,UAAY,MACnJ2xC,EAA4BJ,EAAe1/E,QAAOi3E,GAAUA,EAAOA,GAAQ11E,OAAS,IAAIs+E,cAAiB,IAAI38E,MAAQirC,UAAY,MACjI4xC,EAA8BJ,EAAiB3/E,QAAOi3E,GAAUA,EAAOA,GAAQ11E,OAAS,IAAIs+E,cAAiB,IAAI38E,MAAQirC,UAAY,MAGzI,OAF4ByxC,EAAqBhtE,OAAOktE,GAA2BltE,OAAOmtE,EAG5F,CAEAC,iBAAAA,GACE,MAAAC,EAOI57E,KAAKb,MANPwK,EAAWiyE,EAAXjyE,YACA3H,EAAQ45E,EAAR55E,SACApG,EAAOggF,EAAPhgF,QACA66E,EAAQmF,EAARnF,SACAoF,EAAuBD,EAAvBC,wBACAvyE,EAAOsyE,EAAPtyE,QAGI8oE,EAAgBtC,GAAmBl0E,GAEnCkgF,GAAgBhJ,EAAAA,EAAAA,KAAaiJ,EAAAA,EAAAA,MAAoBpyE,GAAa,GACpE,IAAIud,GAAa6rD,EAAAA,EAAAA,IAAeX,EAAe0J,GAE/C50D,GAAagyC,EAAAA,EAAAA,IAA4BhyC,EAAYmV,EAAAA,GAAoB2/C,kBAEzE,MACMC,GAD0B/0D,EAAa0oD,GAAgC1oD,GAAc,IACzBvrB,QAAQugF,GAA8D,uBAAnDC,EAAAA,EAAAA,IAAWj1D,EAAYg1D,GAAQ1iC,kBAAyC79C,QAAQ8B,IAAUA,EAAK0H,SAAS,sBACvLi3E,EAAiClgF,OAAOozD,YAAY2sB,EAAkC39E,KAAK+9E,GAAsB,EAACF,EAAAA,EAAAA,IAAWj1D,EAAYm1D,GAAmB9iC,cAAe8iC,MAEjL,GAAIr6E,EAAU,CACZ,MAAMg3B,GAAcC,EAAAA,EAAAA,IAAqBj3B,EAAiBpG,EAAQ+C,IAC5D29E,GAAcC,EAAAA,EAAAA,IAAoCvjD,GAClDwjD,GAAaC,EAAAA,EAAAA,IAA6BH,GAEhD7F,EAAS75E,SAAS8/E,IAChB,GAAIA,GAA0Bx1D,WAAY,CACxC,MAAMy1D,EAA0Bd,EAAwB7iE,MAAMqb,GAAOA,GAAInN,aAAas1D,KAAgBE,EAAyB/9E,KACzHi+E,EAA4BR,EAA+BO,EAAwBh+E,IAEzF,GAAIi+E,EAA2B,CAC7B,MAAMC,EAAc7M,GAAsB0M,EAAyBx1D,WAAYy1D,GAAyBz1D,YAAY+oD,iBAAkB5zC,EAAAA,GAAoB2/C,kBAAkB,GAE5K90D,GAAa41D,EAAAA,EAAAA,IAAU51D,EAAY01D,EAA2BC,GAC9D31D,GAAa41D,EAAAA,EAAAA,IAAU51D,EAAY01D,EAA0BruE,OAAO,CAAC,cAAemuE,EAAyB/9E,GAC/G,CACF,IAEJ,CAMA,MAJgB,mBAAZ2K,IACF4d,EAAawjD,EAAmBxjD,EAAYllB,EAASg9B,KAAMh9B,EAASrD,KAG/Dm1B,EAAAA,EAAQ5M,EACjB,CAEA61D,qBAAAA,CAAsBC,GACpB,MAAAC,EAOIj9E,KAAKb,MANP6C,EAAQi7E,EAARj7E,SACApG,EAAOqhF,EAAPrhF,QACAovB,EAAUiyD,EAAVjyD,WACAiQ,EAAIgiD,EAAJhiD,KACAJ,EAAIoiD,EAAJpiD,KACAvxB,EAAO2zE,EAAP3zE,QAGI4d,EAAalnB,KAAK27E,oBAExB,IAAIuB,EAAcn6C,EAAAA,GAA2C7b,GAC7Dg2D,GAAcC,EAAAA,EAAAA,IAA2BD,GAEzC,IASIE,EAAYC,EATZC,EAAuB,GACL,4BAAnBt7E,GAAUg9B,MAAkD,mBAAZ11B,IACjDg0E,EAAuBt9E,KAAK+6E,uBAAuB7zD,IAGlDo2D,EAAqBpgF,OAAS,IAAM4D,QAAQ,uGAK/B,mBAAZwI,GACF8zE,GAAaxgE,EAAAA,EAAAA,GAAU,aAAYhhB,EAAQ+C,cAC3C0+E,EAAc,CACZ16D,QAAS,CAAC,KAGZy6D,GAAaxgE,EAAAA,EAAAA,GAAU,cAAa5a,EAASrD,cAC7C0+E,EAAc,CACZr7E,SAAU,CACRu7E,qBAAsBP,EACtBtlF,KAAMwlF,EACNM,YAAa5hF,EAAQ0iC,WACrBm/C,uBAAwB7hF,EAAQ8hF,wBAKtCzrE,EAAAA,EAAAA,GAAM,CACJgR,OAAQ,OACR06D,iBAAiB,EACjBhlF,IAAKykF,EACLhlF,QAAS+Z,aAAaigD,oBAAoB,CAACwrB,OAAQ,qBACnDlmF,KAAM2lF,IAEPr0E,MAAMoJ,IACLxa,OAAOimF,eAAe,CAACx0E,MAAO,cAAe8J,QAAS,oCACtD6X,EAAW,EAAC+wD,EAAAA,EAAAA,QACZ9gD,IACArkB,YAAW,WACThf,OAAO6J,SAASq8E,QAClB,GAAG,IAAK,IAETvrE,OAAOC,IAGN,MAFA5a,OAAOimF,eAAe,CAACx0E,MAAO,oBAAqB8J,QAAS,mCAC5D0nB,IACOroB,CAAK,IAEhB,CAEA4nB,OAAAA,GACE,MAAA2jD,EAGI/9E,KAAKb,MAFP6C,EAAQ+7E,EAAR/7E,SACAsH,EAAOy0E,EAAPz0E,QAGI4d,EAAalnB,KAAK27E,oBAEF,4BAAnB35E,GAAUg9B,MAAwC9X,EAAWi0C,0CAKhEvjE,OAAOsb,iBAAiB,CACtB7J,MAAO,kBACP8J,QAAS,mGACTE,QAAS,UACTD,SAAUA,KACQ,mBAAZ9J,GAAmD,4BAAnBtH,GAAUg9B,KAC5Ch/B,KAAK+8E,uBAAsB,GAE3BnlF,OAAOsb,iBAAiB,CACtB7J,MAAO,gBACP8J,QAAS,8CACTC,SAAUA,IAAMpT,KAAK+8E,uBAAsB,GAC3CiB,OAAQA,IAAMh+E,KAAK+8E,uBAAsB,IAE7C,IAlBFnlF,OAAOimF,eAAe,CAACx0E,MAAO,oBAAqB8J,QAAS,2EAqBhE,CAEA/Q,MAAAA,GACE,MAAA67E,EAqCIj+E,KAAKb,MApCPmK,EAAO20E,EAAP30E,QACA24D,EAAagc,EAAbhc,cACAjgE,EAAQi8E,EAARj8E,SACApG,EAAOqiF,EAAPriF,QACAumD,EAAkB87B,EAAlB97B,mBACAU,EAA6Bo7B,EAA7Bp7B,8BACAH,EAA4Bu7B,EAA5Bv7B,6BACAkS,EAAkCqpB,EAAlCrpB,mCACA8e,EAAoCuK,EAApCvK,qCACA3wB,EAAyCk7B,EAAzCl7B,0CACAE,EAAuCg7B,EAAvCh7B,wCACAE,EAAmC86B,EAAnC96B,oCACAQ,EAA2Cs6B,EAA3Ct6B,4CACAE,EAA2Co6B,EAA3Cp6B,4CACAR,EAA+B46B,EAA/B56B,gCACAE,EAAsC06B,EAAtC16B,uCACAE,EAAoCw6B,EAApCx6B,qCACAyyB,EAAe+H,EAAf/H,gBACAgI,EAAeD,EAAfC,gBACAvF,EAAgBsF,EAAhBtF,iBACAhvE,EAAWs0E,EAAXt0E,YACAw0E,EAA0BF,EAA1BE,2BACAC,EAAiBH,EAAjBG,kBACAv0E,EAAOo0E,EAAPp0E,QACAy6C,EAAgB25B,EAAhB35B,iBACAM,EAAgBq5B,EAAhBr5B,iBAEA36C,GADeg0E,EAAfI,gBACUJ,EAAVh0E,YACA+xB,EAAkBiiD,EAAlBjiD,mBACAi9C,EAAWgF,EAAXhF,YAEAtgD,GADSslD,EAAT91C,UACW81C,EAAXtlD,aACAzC,EAAS+nD,EAAT/nD,UACA2lD,EAAuBoC,EAAvBpC,wBAEAriB,GAD8BykB,EAA9BK,+BAC2BL,EAA3BzkB,6BAGF,IACEtyC,EACElnB,KAAKb,MADP+nB,WAGF,MAAA1mB,EAIIR,KAAKS,MAHP6yD,GAAQ9yD,EAAR8yD,SACAx9B,GAAat1B,EAAbs1B,cACAC,GAASv1B,EAATu1B,UAGF,GAAI/zB,GAAUrD,IAAM/C,GAAS+C,IAAMy/E,GAAmBz/E,GAAI,CAIxD,MAAMooB,GAAcw3D,EAAAA,GAAAA,IAClB50E,GAAe,CAAC,EAChBw0E,EACAt0E,EACAqsB,EACAl2B,KAAKb,MAAM6K,YACXhK,KAAKb,MAAM83E,sBACXj3E,KAAKb,MAAMq/E,0BACXx+E,KAAKb,MAAMs/E,yBACXz+E,KAAKb,MAAMirC,WACXpqC,KAAKb,MAAMkgD,UACXr/C,KAAKb,MAAM2kC,SACXloC,EAAQlE,KAAKwS,KAMTwvB,EAAci/C,EAAiBj/C,cAAgB15B,KAAKb,MAAM04B,iBAAmBgC,GAAAA,EAAaG,KAAQh6B,KAAKb,MAAMu/E,WAAa7kD,GAAAA,EAAaE,QAAUF,GAAAA,EAAaC,SAC9Jf,IAAiB4lD,EAAAA,GAAAA,IACrBjlD,EACA15B,KAAKb,MAAMy6B,eACX05B,GACAqlB,EAAiBpH,mBACjBvxE,KAAKb,MAAM0kC,sBACX7jC,KAAKb,MAAMypC,YACX5oC,KAAKb,MAAM2pC,mBACX9oC,KAAKb,MAAMgpC,UACXnoC,KAAKb,MAAM+gD,kCACVnqB,IAAWb,QACZl1B,KAAKb,MAAM45D,cAMPrhC,IAAkBknD,EAAAA,GAAAA,IACtB58E,EACAsH,EACAtJ,KAAKb,MAAMk3E,cAMP35C,IAAemiD,EAAAA,EAAAA,IAAoB78E,GAKzC,GAAIhC,KAAKb,MAAM04B,kBAAoBj8B,EAAQ+C,MAAO87B,EAAAA,EAAAA,IAAiB/C,IAAkB,CAMnF,GAJyB,WAArB13B,KAAKk1E,aAA4ByD,EAAiBztD,qBAAuBytD,EAAiBxH,cAC5FjqD,GAAa43D,EAAAA,EAAAA,IAA2C53D,EAAYyxD,EAAiBztD,sBAGnFytD,EAAiBxxD,YAAa,CAChCD,GAAa63D,EAAAA,EAAAA,IAAoC73D,EAAYyxD,EAAiBxxD,YAAawxD,EAAiB5yC,gBAE5G,IAAI7a,EAAsBytD,EAAiBztD,oBAE3C,GACE,CAACyqC,GAAAA,GAAsBr9B,GAAAA,GAAoByoC,GAAAA,GAAc9oC,GAAAA,GAAW7M,GAAAA,IAAmBjmB,SAASwzE,EAAiBxxD,aAAaC,OAC9H8D,GACAgN,EAAAA,GAAwBhN,IACxBA,EAAoBnB,MAAMC,WAC1B,CACA,MAAMg1D,GAAW7tD,EAAAA,EAAAA,IAAkBjK,EAAYgE,EAAoBnB,MAAM7f,KAEzEgd,EAAa4M,EAAAA,EACXA,EAAAA,EAAW,IAAIkrD,EAAU9zD,EAAoBnB,MAAMC,WAAY,oBAC/D,CAAC,CAACwX,MAAO,CAACzX,MAAOmB,EAAoBnB,MAAMtrB,MAAOwrB,IAAKiB,EAAoBjB,IAAIxrB,SAC/EyoB,EAEJ,CACF,CAEqB6R,GAAeW,cAAgBG,GAAAA,EAAaC,UAE/D5S,EAAawjD,EAAmBxjD,EAAYllB,EAASg9B,KAAMh9B,EAASrD,IAExE,CAKA,GAAIo6B,GAAeW,cAAgBG,GAAAA,EAAaG,OAASh6B,KAAKb,MAAM04B,iBAAkB,CACpF3Q,GAAa+3D,EAAAA,GAAAA,IAAqB/3D,EAAYk3D,EAAkB39E,QAEjDymB,EAAW8mC,OAAS,IAC7BryD,QAAQuzD,GAASA,EAAKvmB,eAAc/rC,SAASsyD,IACjDhoC,GAAag4D,EAAAA,EAAAA,GAAwBh4D,EAAYgoC,EAAKvmB,aAAc,UAAWumB,EAAKhlD,IAAI,GAE5F,CAEA,GAAI6uB,GAAew4C,mBAAoB,CACrC,MAAMyN,GAAW7tD,EAAAA,EAAAA,IAAkBjK,EAAY6R,GAAew4C,oBAC1DyN,IACF93D,GAAa41D,EAAAA,EAAAA,IAAU51D,EAAY,IAAI83D,EAAU,sBAAsB,GAE3E,CAEA,MAAM9rD,GAAgBd,IACpBpyB,KAAKO,SAAS,CAAC4+E,kBAAmB/sD,GAAK,EAEzC,IAAIa,GAAYjzB,KAAKS,MAAM0+E,kBAC3B,MAAMC,GAA4BlnD,EAAAA,KAElC,GAAGknD,GAA0B,CAC3B,MACO9T,EACH8T,GAA0Br1D,MAD5B7f,IAEImgB,GAAUC,EAAAA,EAAAA,IAAqBpD,EAAYokD,GAC7CjhD,IACF4I,GAAYa,EAAAA,GAAYrK,GAA8D,YAAjBA,EAAW,MAAmBA,EAAc,SAAKqK,EAAAA,EAAerK,EAAc,QAAG41D,GAAAA,IAAqBniF,OAAS,GAAGmtB,GAE3L,CAGA,MAAMi1D,GAAY,IAAIn+E,gBAAgBvJ,OAAO6J,SAAS2C,QACtD,GAAIk7E,GAAUC,IAAI,OAAQ,CACxB,MAAMr1E,EAAMo1E,GAAUtnF,IAAI,OAC1BkvB,GAAag4D,EAAAA,EAAAA,GAAwBh4D,EAAYhd,EAAK,qBAAqB,GAC3E,IAAIs1E,EAAY,EAChB,MAAMpkB,EAAUp5D,EAASuY,eAAerQ,GACxB,OAAZkxD,IACFokB,EAAYpkB,EAAQqkB,WAEtB7nF,OAAOsyC,SAAS,CACdhvB,IAAKzQ,KAAKC,MAAM80E,GAChBlqB,SAAU,UAEd,CAEGriC,IAAyC,mBAA5ByE,GAAgBpuB,SAAgCyd,EAAY/c,YAAYuuB,2BACtFrR,GAAag4D,EAAAA,EAAAA,GAAwBh4D,EAAY+L,GAAU/oB,IAAK,qBAAqB,IAKvF,MAAM4uB,IAAiB4mD,EAAAA,GAAAA,IACrB9jF,EAAQ+C,GACR/C,EAAQ+jF,UACR/jF,EAAQgkF,aACRhkF,EAAQ0iC,WACRpX,EAAW+c,0BACX/c,EAAWghB,iBACXloC,KAAKb,MAAMy0E,aAMb,IAAI5sD,GACAC,GACJ,GAAIjnB,KAAKb,MAAM04B,iBAAkB,CAC/B7Q,IAAiB64D,EAAAA,GAAAA,IACf7/E,KAAKb,MAAM04B,iBACXkB,GAAemL,eACbg6C,EACFliD,EACAlD,GAAen6B,MAAO87B,EAAAA,EAAAA,IAAiB/C,IACvCoB,GAAen6B,MAAO+7B,EAAAA,EAAAA,IAA2BhD,IACjD3Q,EAAY/c,YAAY81E,iBAAmB/4D,EAAY/c,YAAY+1E,qBACnE3wD,EAAAA,GACArI,EAAYpoB,GACZ/C,EAAQokF,gBACRhgF,KAAKb,MAAM6rB,WACXhrB,KAAKb,MAAMirB,uBACXpqB,KAAKb,MAAM4yB,yBACX/xB,KAAKb,MAAMyoB,eACX5nB,KAAKb,MAAMwoB,iBACX3nB,KAAKb,MAAM8xE,kBACXjxE,KAAKb,MAAMwyD,QACXgnB,EAAiBvoC,6BAGnB,MAAM6vC,EAAmL,CAAC/0D,oBAAqBytD,EAAiBztD,qBAE1N6lD,EAAkB4H,EAAiB5H,iBAAmB,GACtDC,EAAoB2H,EAAiB3H,mBAAqB,GAE5DiP,EAA0B/0D,sBAG5B+0D,EAA0B30D,wBAA0B40D,EAAAA,GAA2Ch5D,EAAY+4D,EAA0B/0D,qBACrI+0D,EAA0BE,cAAeC,EAAAA,EAAAA,KAAItsD,EAAAA,EAAOmsD,EAA0B30D,yBAAyB/c,OAAOwiE,GAAkBC,GAE5HiP,EAA0B/0D,oBAAoBnB,MAAM7f,MAAQ+1E,EAA0B/0D,oBAAoBjB,IAAI/f,MAChH+1E,EAA0BI,oBAAsBJ,EAA0B/0D,oBAAoBnB,MAAM7f,IACpG+1E,EAA0B7vD,6BAA8B9F,EAAAA,EAAAA,IAAqBpD,EAAY+4D,EAA0BI,uBAIvH,MAAMC,EAAkF,CAACn5D,YAAawxD,EAAiBxxD,aACnHm5D,EAAkBn5D,aAAe,QAASm5D,EAAkBn5D,cAC9Dm5D,EAAkBngD,iBAAkB86C,EAAAA,EAAAA,IAAc/zD,EAAYo5D,EAAkBn5D,YAAYjd,MAG9F,MAAMq2E,EAAcx5D,EAAY/c,YAAY4xB,iBAAmBC,GAAAA,EAAuB,GAAE9U,EAAY/c,YAAY4xB,gBAAgB+9C,sBAEhI1yD,GAAmBvuB,GAAAA,GAAA,CACjB2rD,QAASn9B,EAAWhd,IACpB8xB,mBAAoBA,EACpBhB,iBAAkBhU,GAAew5D,wBAA0BxgF,KAAKb,MAAM27E,eACtE5/C,YAAag7C,EAAgBh7C,UAC7B2F,aAAcq1C,EAAgBuK,QAAU,GACxClmD,aAAcv6B,KAAKb,MAAMo7B,aACzBkB,qBAAsBk9C,EAAiBl9C,sBAAwB8kD,GAAe1kD,GAAAA,EAAsBC,aACpGH,wBAAyB37B,KAAKb,MAAMw8B,wBACpCO,sBAAuBl8B,KAAKb,MAAM+8B,sBAClCjB,KAAMj7B,KAAKb,MAAM87B,KACjBE,eAAgBn7B,KAAKS,MAAMs4E,iBAC3B39C,eAAgBp7B,KAAKo7B,eAAexoB,KAAK5S,MACzCo6B,QAASp6B,KAAKo6B,QAAQxnB,KAAK5S,MAC3BizB,UAAWA,GACX4H,KAAM76B,KAAKb,MAAM07B,KACjBE,KAAM/6B,KAAKb,MAAM47B,KACjB7H,aAAcA,GACd0H,SLxoDcowC,GKwoDYhrE,KAAKb,MAAMw5E,iBAAiB3N,eLvoDtDA,IAAeuH,WAAWr1E,QAAU,GAAK,GKwoDzC49B,QAASs4C,EAAiBpzE,KAAKb,MAAMw5E,iBAAiB3N,eACtDiJ,YAAaj0E,KAAKb,MAAM80E,YACxBtS,aAAc3hE,KAAKb,MAAMwiE,aACzBtiC,0BAA2Br/B,KAAKb,MAAMkgC,0BACtCE,qCAAsCv/B,KAAKb,MAAMogC,qCACjDjY,SAAUqxD,EAAiBrxD,SAC3BC,YAAaoxD,EAAiBpxD,YAC9BQ,YAAa/nB,KAAKb,MAAM4oB,YACxB0C,eAAgBzqB,KAAKb,MAAMsrB,eAC3BsT,qBAAsB/9B,KAAKb,MAAM4+B,qBACjC5F,YAAan4B,KAAKb,MAAMuhF,uBACxB3P,gBAAiBA,EACjBC,kBAAmBA,EACnBI,mBAAoBpxE,KAAKb,MAAMiyE,mBAC/BC,qBAAsBrxE,KAAKb,MAAMkyE,qBACjClqD,YAAawxD,EAAiBxxD,YAC9Bi9B,WAAYl9B,EAAWk9B,WACvBE,iBAAkBA,EAClBM,iBAAkBA,EAClBzC,mBAAoBj7B,EAAWojC,qBAAuBnI,EACtDU,8BAA+BA,EAC/BH,6BAA8BA,EAC9BkS,mCAAoCA,EACpC8e,qCAAsCA,EACtC3wB,0CAA2CA,EAC3CE,wCAAyCA,EACzCE,oCAAqCA,EACrCQ,4CAA6CA,EAC7CE,4CAA6CA,EAC7CR,gCAAiCA,EACjCE,uCAAwCA,EACxCE,qCAAsCA,EACtCoZ,kBAAmB78D,KAAKb,MAAM09D,kBAC9B8jB,qCAAsCV,EAA0BI,qBAAuBJ,EAA0BI,sBAAwBx9B,GAA+B+9B,uBAAyB/9B,EAAgC,KACjOkF,8BAA+B/nD,KAAKb,MAAM4oD,8BAC1CjyB,cAAeA,GACfC,UAAWA,GACXX,WAAYp1B,KAAKo1B,WAAWxiB,KAAK5S,MACjCq1B,cAAer1B,KAAKq1B,cAAcziB,KAAK5S,MACvCs1B,UAAWt1B,KAAKs1B,UAAU1iB,KAAK5S,MAC/BwiD,0BAA4B58C,GAAWohB,GAAe6D,WAAU+B,EAAAA,EAAAA,IAAqBy3B,GAAS,sBAAuBz+C,IACrHm1D,+BAAgC/6D,KAAKb,MAAM47D,gCACxCulB,GACAL,EAEP,MACEj5D,IAAiBmgC,EAAAA,GAAAA,IACfpgC,EAAYpoB,GACZ/C,EAAQokF,iBAEV/4D,GAAsB,CAAC,EAMzB,MAAMo9B,GAAUn9B,EAAWhd,IAC3B,IAAImoB,GACJ,GAAIrL,GAAe6Q,iBAAkB,CACnC,MAAMgpD,EAAgD,4BAAzBnpD,GAAgBsH,KAE3C3M,GAAc35B,GAAAA,GAAA,GACTugF,GAAW,GAFd4H,EAEc,CACd1lB,0CAA2Cj0C,EAAWi0C,0CACtDS,qCAAuCklB,GAAmB95D,GAAe6D,WAAU+B,EAAAA,EAAAA,IAAqBy3B,GAAS,4CAA6Cy8B,IAC9JC,eAAgB75D,EAAWziB,OAC3Bu8E,UAAYC,GAAkBj6D,GAAe6D,WAAU+B,EAAAA,EAAAA,IAAqBy3B,GAAS,SAAU48B,IAC/FC,sBAAuBh6D,EAAWxiB,gBAAkB,GACpDy8E,iBAAmBF,GAAkBj6D,GAAe6D,WAAU+B,EAAAA,EAAAA,IAAqBy3B,GAAS,iBAAkB48B,KAIhG,CACd7sD,mBAAoBynD,EAAwBv9E,KAAK+1B,GAAOA,EAAGnN,aAC3D2N,yCAA0C3N,EAAW2N,yCACrDC,4CAA8CmsD,GAAUj6D,GAAe6D,WAAU+B,EAAAA,EAAAA,IAAqBy3B,GAAS,2CAA4C48B,KAGjK,CAKA,MAAMtpD,GAAiB,CACrBs7B,oBAAqBjzD,KAAKb,MAAM8zD,oBAChCD,cAAehzD,KAAKb,MAAM6zD,cAC1BF,eAAgB9yD,KAAKb,MAAM2zD,eAC3Bt6B,iBAAkBx4B,KAAKb,MAAMq5B,iBAC7BC,2BAA4Bz4B,KAAKb,MAAMs5B,2BACvCogC,aAAc74D,KAAKb,MAAM05D,aACzBrG,kBAAmBxyD,KAAKb,MAAMqzD,mBAM1B/E,GAAoB/0D,GAAAA,GAAA,GACrBsH,KAAKb,MAAMk/E,iBAAe,IAC7Bz1C,YAAa5oC,KAAKb,MAAMypC,YACxBslB,oBAAqBluD,KAAKb,MAAM+uD,oBAChCplB,mBAAoB9oC,KAAKb,MAAM2pC,mBAC/BqlB,iBAAkBnuD,KAAKb,MAAMgvD,mBAM/B,IAAI5/B,GACAvH,GAAe6Q,mBACjBtJ,GAAc,CACZsM,KAAOh/B,IAA2BmE,KAAKb,MAAM07B,QAAe,GAC5DE,KAAOl/B,IAA2BmE,KAAKb,MAAM47B,QAAe,GAC5DE,KAAOp/B,IAA2BmE,KAAKb,MAAM87B,QAAe,GAC5Dk2B,UAAYt1D,IACNjE,OAAOoK,SAASo/E,eAAiBxpF,OAAOoK,SAASo/E,yBAAyBC,aAAczpF,OAAOoK,SAASo/E,cAAcE,OAC1HthF,KAAKb,MAAM4yB,4BACJ,GAET4iD,IAAM94E,IAA2BmE,KAAKb,MAAMoiF,iBAC5C3M,SAAW/4E,IAA2BmE,KAAKb,MAAMqiF,sBACjD3M,KAAOh5E,IAA2BmE,KAAKb,MAAMuhF,uBAAuB,QACpE5L,OAASj5E,IAA2BmE,KAAKb,MAAMuhF,uBAAuB,UACtE3L,UAAYl5E,IAA2BmE,KAAKb,MAAMuhF,uBAAuB,aACzE1L,YAAcn5E,IAA2BmE,KAAKb,MAAMuhF,uBAAuB,eAC3EzL,UAAYp5E,IAA2BmE,KAAKb,MAAMuhF,uBAAuB,aACzE1nE,KAAOnd,GAA0B,KAAOmrB,GAAeY,eAAeC,GAAAA,KAA0B,KAOpG,MAAMsyB,IAAkBsnC,EAAAA,GAAAA,IACtBv6D,EAAWV,gBACXU,EAAWP,oBACXO,EAAWL,2BAGP4H,GAAiBC,EAAAA,QACvB,OACE7wB,EAAAA,cAAC4wB,GAAc,CAACimD,OAAQA,GAAQ/lD,SAAUJ,IACxC1wB,EAAAA,cAACmkE,GAAAA,EAAU,CACT3lE,IAAI,MACJq7B,gBAAiBA,GACjBoB,eAAgBA,GAChB/R,YAAaA,EACbgS,eAAgBA,GAChB/R,eAAgBA,GAChBC,oBAAqBA,GACrBoL,eAAgBA,GAChBqK,aAAcA,GACd+wB,qBAAsBA,GACtBtT,gBAAiBA,GACjBxiB,eAAgBA,GAChBzQ,WAAYA,EACZ0wC,WAAYh8D,EAAQg8D,WACpB3tD,WAAYA,EACZg4D,cAAeA,EACfb,gBAAiBuX,EAAiBvX,gBAClCvK,UAAWunB,GAAmB39E,MAC9Bk4B,YAAaA,EACb2qC,SAAUtjE,KAAKb,MAAMmkE,SACrB9J,4BAA6BA,EAC7BkB,kCAAmC16D,KAAKb,MAAMu7D,oCAE/C1zC,GAAemJ,WAAalJ,GAAoB+T,kBAAoBn9B,EAAAA,cAAC6jF,EAAAA,EAAY,CAACC,eAAgBA,IAAM,gCAG/G,CACE,OAAO9jF,EAAAA,cAACkW,GAAAA,EAAiB,MLlzDxB,IAAiBi3D,EKozDtB,EAGF,UAAe4W,EAAAA,EAAAA,KA/qDSC,CAACphF,EAAqBqhF,KAC5C,MACEx4E,EAKEw4E,EALFx4E,QACAK,EAIEm4E,EAJFn4E,YACAJ,EAGEu4E,EAHFv4E,WACAE,EAEEq4E,EAFFr4E,UACAiqE,EACEoO,EADFpO,qCAIIqO,EADgCzS,GAAuChmE,EACxC04E,CAA8Bz4E,GAE7D04E,EAAgB,CACpBjgF,SAAU+/E,EAA6BG,0BAA0BzhF,GACjE21E,iBAAkB2L,EAA6BI,0BAA0B1hF,GACzE2hF,kBAAmBL,EAA6BM,2BAA2B5hF,IAGvE22E,EAAoB6K,EAAcG,mBAAmB34E,WAAaA,EAGlE64E,EAD+B7S,GAAsCnmE,EACvCi5E,CAA6BnL,GAE3DoL,EAAe,CACnB5mF,QAAS0mF,EAA4BG,2BAA2BhiF,GAChEy1E,gBAAiBoM,EAA4BI,yBAAyBjiF,GACtEy9E,gBAAiBoE,EAA4BK,yBAAyBliF,GACtEk4E,iBAAkB2J,EAA4BM,0BAA0BniF,IAG1E,IAAIu7B,EACAwmD,EAAa5mF,SAASlE,OAGpBskC,EAFA8lD,EAASjqD,kBAAoBiqD,EAASl5B,0BACpC45B,EAAa5mF,QAAQ+C,KAAOsjF,GAAejgF,UAAUy4B,iBAClC4B,EAAAA,GAAoBwmD,eAEpBL,EAAa7J,kBAAkB38C,oBAAsB8lD,EAASl5B,2BAA6BvsB,EAAAA,GAAoBk+C,sBAGjH,MAIzB,MAAMrK,EAAgB4R,EAASjqD,oBAAsBiqD,EAASl5B,0BAC9D,IAAI1hC,EAAa8oD,GAAsBwS,EAAa5mF,QAASqmF,GAAejgF,UAAUy4B,iBAAkBuB,EAAoBk0C,GAE5H,MACM+L,GAD0B/0D,EAAa0oD,GAAgC1oD,GAAc,IACzBvrB,QAAQugF,GAA8D,uBAAnDC,EAAAA,EAAAA,IAAWj1D,EAAYg1D,GAAQ1iC,kBAAyC79C,QAAQ8B,IAAUA,EAAK0H,SAAS,sBACvLi3E,EAAiClgF,OAAOozD,YAAY2sB,EAAkC39E,KAAK+9E,GAAsB,EAACF,EAAAA,EAAAA,IAAWj1D,EAAYm1D,GAAmB9iC,cAAe8iC,MAE3KR,EADuB3/E,OAAOC,KAAKigF,GACyF99E,KAAKq0B,IAAwBmwD,EAAAA,GAAAA,IAA+BnwD,EAAqBlyB,KAC7M2zB,EAAqBynD,EAE3B,IAAIyC,EAA0F,GAC1F7H,EAAoE,GACxE,MAAMsM,EAAoD,CAAC,EAC3D,GAAId,EAAcjgF,SAAU,CAC1B,MAAMg3B,GAAcC,EAAAA,EAAAA,IAAqBgpD,EAAcjgF,SAAiBo1E,GAClEkF,GAAcC,EAAAA,EAAAA,IAAoCvjD,GAClDwjD,GAAaC,EAAAA,EAAAA,IAA6BH,GAEhDgC,EAAiCzC,EAC9BlgF,QAAQg/C,GAAsBA,GAAmBzzB,aAAas1D,KAC9Dl+E,KAAKq8C,IAAsBqoC,EAAAA,GAAAA,IAAqBroC,GAAmBzzB,aAAas1D,GAAa/7E,KAEhG69E,EAA+B1hF,SAAS8/E,IACtC,GAAIA,GAA0Bx1D,WAAY,CACxC,MAAMy1D,EAA0Bd,EAAwB7iE,MAAMqb,GAAOA,GAAInN,aAAas1D,KAAgBE,EAAyB/9E,KACzHi+E,EAA4BR,EAA+BO,EAAwBh+E,IACnFk+E,EAAc7M,GAAsB0M,EAAyBx1D,WAAYy1D,GAAyBz1D,YAAY+oD,iBAAkBj0C,EAAoBk0C,GACpJ+S,GAAqB9G,EAAAA,EAAAA,IAAWj1D,EAAY01D,GAElDmG,EAAsBrG,EAAyB/9E,IAAMk+E,EAErD31D,GAAa41D,EAAAA,EAAAA,IAAU51D,EAAY01D,EAA2BC,GAC9D31D,GAAa41D,EAAAA,EAAAA,IAAU51D,EAAY01D,EAA0BruE,OAAO,CAAC,cAAemuE,EAAyB/9E,IAC7GuoB,GAAa41D,EAAAA,EAAAA,IAAU51D,EAAY01D,EAA0BruE,OAAO,CAAC,eAAgB00E,EAAmB/4E,IAC1G,KAGFusE,EAAW6H,CACb,CAEA,MAAMxD,IAAoB0H,EAAatE,iBAAiBtmB,cAAgB4qB,EAAatE,iBAAiB5/C,YAAcm4C,EAASxxE,MAAM0d,GAAYA,EAAQwvD,UAAUva,aAE3JsrB,EAAoB,mBAAZ55E,GAAiCK,EAA2B,GAAEJ,KAAcI,EAAYhL,KAAzC,UAEvDwkF,EAAmB,CACvB/E,mBAF+BgF,EAAAA,GAAAA,IAAiCF,GAEpBG,qCAAqC5iF,IAG7E6iF,EAAyB,mBAAZh6E,EAA+B,CAAEsrD,oCAAoC+a,EAAAA,GAAAA,GAAuB+D,GAAsC6P,yBAAyB9iF,IAAW,CAAC,EAE1L,OAAA/H,GAAAA,GAAAA,GAAAA,GAAA,CACEsjC,qBACA9U,aACA67D,wBACAtM,WACAriD,qBACAgjD,oBACA0D,kBACGmH,GACAO,GACAW,GAAgB,IACnBtH,0BACAyC,iCACAD,gBAAiB59E,EAAM+iF,GAAGC,cAC1BpkD,0BAA4BthC,GAAqBykF,EAAa7J,iBAAkB,GAAE56E,iBAAsB,GACrGulF,EAAU,IAIUI,CAAC7R,EAAoBiQ,KAC9C,MACEx4E,EACEw4E,EADFx4E,QAGF,MAAO,CACLknE,gBAAkB7xE,IAAeglF,EAAAA,EAAAA,IAAmBrU,GAAuChmE,EAAvCgmE,CAAgD3wE,GAAKkzE,GACzGpB,eAAiB9xE,IAAeglF,EAAAA,EAAAA,IAAmBlU,GAAsCnmE,EAAtCmmE,CAA+C9wE,GAAKkzE,GACvGnB,yBAA2B/xE,IAAwBglF,EAAAA,EAAAA,KAAmBP,EAAAA,GAAAA,IAAiCzkF,GAAKkzE,GAC5GpX,yBAA2B97D,IAAeglF,EAAAA,EAAAA,KAAmBC,EAAAA,GAAAA,IAAiCjlF,GAAKkzE,GACnGtB,wBAA0B5xE,IAAeglF,EAAAA,EAAAA,KAAmBjU,EAAAA,GAAAA,IAAuB/wE,GAAKkzE,GACxFgS,sBAAwBllF,IAAeglF,EAAAA,EAAAA,KAAmBpU,EAAAA,GAAAA,GAA8B5wE,GAAKkzE,GAC7FlB,sBAAsBgT,EAAAA,EAAAA,IAAmBG,GAAAA,GAA6BjS,GACtEA,SAAUA,EACX,IA4OgBkS,CAACC,EAAgD5T,EAAsD0R,KACxH,MACEx4E,EAIEw4E,EAJFx4E,QACAK,EAGEm4E,EAHFn4E,YACAJ,EAEEu4E,EAFFv4E,WACAmqE,EACEoO,EADFpO,qCAIA0D,EACE4M,EADF5M,kBAGF,IAAI6M,EACU,mBAAZ36E,EACEirE,GAA4CnE,EAAezmE,EAAaJ,EAAY6tE,GACpF3D,GAAsCrD,EAAezmE,EAAaJ,EAAY6tE,EAAmB1D,GAEjGwQ,EAAuCxrF,GAAAA,GAAAA,GAAAA,GAAA,GACtCopF,GACAkC,GACAC,GAAe,IAClBhpD,KAAMA,KACJ,GAAI+oD,EAAW9F,iBAAiBtmB,YAAcosB,EAAW9F,iBAAiB5/C,WAAY,CACpF,IAAI40C,GAAUha,EAAAA,EAAAA,IAA4B8qB,EAAWpoF,QAAQg8D,WAAYv7B,EAAAA,GAAoBk+C,uBAE7FrH,EAAUp/C,EAAAA,EAAQo/C,GAClBA,EAAUnwC,EAAAA,GAA2CmwC,GAAS,GAC9DA,GAAUiK,EAAAA,EAAAA,IAA2BjK,GAErC+Q,EAAgBjQ,mBAAmB,CAACt8E,KAAMw7E,IAC1C+Q,EAAgBE,eAClB,CAEAH,EAAWvN,SAAS75E,SAAS+lB,IAC3B,GAAIA,EAAQwvD,UAAUva,WAAY,CAChC,IAAIsb,GAAUha,EAAAA,EAAAA,IAA4Bv2C,EAAQwvD,SAASva,WAAYv7B,EAAAA,GAAoBk+C,uBAE3FrH,EAAUp/C,EAAAA,EAAQo/C,GAClBA,EAAUnwC,EAAAA,GAA2CmwC,GAAS,GAC9DA,GAAUiK,EAAAA,EAAAA,IAA2BjK,GAErC,MAAMwD,EAAiBtG,EAAcG,wBAAwB5tD,EAAQhkB,IAErE+3E,EAAe0N,mBAAmB,CAAC1sF,KAAMw7E,IACzCwD,EAAe2N,eACjB,IACA,IAIN,GAAIH,EAActoF,SAASlE,OACrBwsF,EAAcrsD,kBAAoBqsD,EAAct7B,2BAA2B,CAC7E,MAAM07B,EAAoB,CACxB5sF,KAAMssF,EAAW98D,WACjBikD,gBAAiB6Y,EAAWjB,sBAC5B57D,YAAa+8D,EAAcvL,kBAAkBxxD,YAC7C4pD,gBAAiBmT,EAAcvL,kBAAkB5H,iBAAmB,GACpEC,kBAAmBkT,EAAcvL,kBAAkB3H,mBAAqB,GACxEI,mBAAoB8S,EAAc9S,mBAClCC,qBAAsB6S,EAAc7S,qBACpCrmD,WAAYk5D,EAAcl5D,WAC1BZ,uBAAwB85D,EAAc95D,uBACtCgF,gBAAiBA,EAAAA,IAGnB80D,EAAaxrF,GAAAA,GAAA,GACRwrF,GAAa,IAChBrK,kBAAmBA,CAAC1xD,EAAM1vB,EAAQ,CAAC,IC7nB5B,SAA2B8rF,GAAS,KACjD7sF,EAAI,gBACJyzE,EAAe,YACfhkD,EAAW,WACX6D,EAAU,uBACVZ,EAAsB,gBACtB2mD,EAAkB,GAAE,kBACpBC,EAAoB,KAEpB,MAAM9lD,EAAsBgN,EAAAA,KAE5B,IAAKhN,GAAuB/D,GAAkC,IAAnBo9D,EAAQrnF,OAAgB,OAAO,EAO1E,MAAMsnF,EAAezT,EAAgBzyE,KAAIF,IAAK,CAC5CL,KAAMK,EACNojC,MAAO,CACLzX,MAAO,EACPE,IAAKs6D,EAAQrnF,YAIXswE,EAAgB,CACpBrlD,KAAMo8D,EACN35D,YAAa45D,GAQf,OALA18D,EAAAA,EAAAA,KAAM,KACJkD,EAAW,EAACF,EAAAA,EAAAA,IAA4BI,EAAqBsiD,IAAiBtiD,EAAoBc,WAClG5B,EAAuB8N,EAAAA,GAA8BA,EAAAA,GAAsChN,GAAsBq5D,EAAQrnF,QAAQ,KAG5H,CACT,CDwlBiD28E,CAAkB1xD,EAAMm8D,GACjEhX,iBAAkBA,CAACC,EAAc90E,EAAQ,CAAC,IAAM60E,GAAiBC,EAAc+W,GAC/EpW,kBAAmBA,CAACz1E,EAAQ,CAAC,IAAMy1E,GAAkBoW,GACrDpZ,kBAAmBA,CAACzyE,EAAQ,CAAC,IAAMyyE,GAAkBoZ,GACrD/C,eAAgBA,CAAC9oF,EAAQ,CAAC,IE9nBnB,UAAwB,KACrCf,EAAI,gBACJyzE,EAAe,YACfhkD,EAAW,WACX6D,EAAU,uBACVZ,EAAsB,gBACtBgF,IAEA,MAAMlE,EAAsBgN,EAAAA,KAE5B,IAAKhN,GAAuB/D,EAAe,OAAO,EAElD,MAAMikD,EAAYlgD,EAAoBc,UAAYm/C,EAAgBjgD,EAAoBc,WAAat0B,EAEnG2zE,EAIIngD,EAAoBnB,MAHjBuhD,EAAQD,EAAbnhE,IAKFu6E,GAJsBpZ,EAApBrhD,WACiBqhD,EAAjB5sE,MAOEysB,EAAoBjB,KAExB,GALaw6D,EAAXv6E,IACkBu6E,EAAlBz6D,WACey6D,EAAfhmF,MAGEy5B,EAAAA,GAAwBhN,GAAsB,CAChD,MAAMoF,GAAchG,EAAAA,EAAAA,IAAqB8gD,EAAWE,GAC9CoZ,EAAwB5wD,GAAAA,GAAiBrK,GAA4B,aAAdA,EAAK1rB,MAAqBuyB,GACjF4gB,EAAWpd,GAAAA,EAAO4wD,GAEpBxzC,IACFppB,EAAAA,EAAAA,KAAM,KACJkD,EAAW,EAAC4B,EAAAA,EAAAA,IAAqBskB,EAAShnC,IAAK,mBAAqBgnC,EAAS29B,iBAAmB,GAAK,IAAM3jD,EAAoBc,UAAU,GAG/I,CAEA,OAAO,CACT,CFulBwCu1D,CAAe+C,GAC/C9C,oBAAqBA,CAAC/oF,EAAQ,CAAC,IG/nBxB,UAA6B,KAC1Cf,EAAI,gBACJyzE,EAAe,YACfhkD,EAAW,WACX6D,EAAU,uBACVZ,EAAsB,gBACtBgF,IAEA,MAAMlE,EAAsBgN,EAAAA,KAE5B,IAAKhN,GAAuB/D,EAAe,OAAO,EAElD,MAAMikD,EAAYlgD,EAAoBc,UAAYm/C,EAAgBjgD,EAAoBc,WAAat0B,EAEnG2zE,EAIIngD,EAAoBnB,MAHjBuhD,EAAQD,EAAbnhE,IAKFu6E,GAJsBpZ,EAApBrhD,WACiBqhD,EAAjB5sE,MAOEysB,EAAoBjB,KAExB,GALaw6D,EAAXv6E,IACkBu6E,EAAlBz6D,WACey6D,EAAfhmF,MAGEy5B,EAAAA,GAAwBhN,GAAsB,CAChD,MAAMoF,GAAchG,EAAAA,EAAAA,IAAqB8gD,EAAWE,GAC9CoZ,EAAwB5wD,GAAAA,GAAiBrK,GAA4B,aAAdA,EAAK1rB,MAAqBuyB,GACjF4gB,EAAWpd,GAAAA,EAAO4wD,GAEpBxzC,IACFppB,EAAAA,EAAAA,KAAM,KACJkD,EAAW,EAAC4B,EAAAA,EAAAA,IAAqBskB,EAAShnC,IAAK,kBAAmBO,KAAKoQ,KAAKq2B,EAAS29B,iBAAmB,GAAK,EAAG,KAAM3jD,EAAoBc,UAAU,GAG1J,CAEA,OAAO,CACT,CHwlB6Cw1D,CAAoB8C,GACzD5D,uBAAyBtiF,GI7nBlB,SAAgCA,EAAkBkmF,GAC/D,MACE5sF,EAUE4sF,EAVF5sF,KACAyzE,EASEmZ,EATFnZ,gBACAhkD,EAQEm9D,EARFn9D,YACA6D,EAOEs5D,EAPFt5D,WAEe25D,GAKbL,EANFl6D,uBAMEk6D,EALFl1D,gBAKEk1D,EAJFvT,iBAAAA,OAAe,IAAA4T,EAAG,GAAEA,EAAAC,EAIlBN,EAHFtT,kBAAAA,OAAiB,IAAA4T,EAAG,GAAEA,EACtBxT,EAEEkT,EAFFlT,mBACAC,EACEiT,EADFjT,qBAGInmD,EAAsBgN,EAAAA,KAE5B,IAAKhN,GAAuB/D,EAAe,OAAO,EAElD,MAAMikD,EAAYlgD,EAAoBc,UAAYm/C,EAAgBjgD,EAAoBc,WAAat0B,EAE7F4zB,EAA0B40D,EAAAA,GAA2C9U,EAAWlgD,GAChFi1D,GAAeC,EAAAA,EAAAA,KAAItsD,EAAAA,EAAOxI,GAAyB/c,OAAOwiE,GAAkBC,GAElF,GAAI94C,EAAAA,GAAsBhN,GACnB4I,EAAAA,EAAOxI,GAAyBnmB,SAAS/G,GAG5CizE,GAAqB+O,EAAAA,EAAAA,KAAIpP,EAAmB,CAAC5yE,KAF7CgzE,GAAmBgP,EAAAA,EAAAA,KAAIrP,EAAiB,CAAC3yE,SAItC,CACL,MAAAitE,EAIIngD,EAAoBnB,MAExB06D,GALepZ,EAAbnhE,IACoBmhE,EAApBrhD,WACiBqhD,EAAjB5sE,MAOEysB,EAAoBjB,KAHXw6D,EAAXv6E,IACkBu6E,EAAlBz6D,WACey6D,EAAfhmF,MAKFusB,EAAW,EAFYm1D,EAAah7E,SAAS/G,GAASmuB,EAAAA,GAAuBR,EAAAA,IAElDb,EAAqB9sB,IAAS8sB,EAAoBc,UAC/E,CAEA,OAAO,CACT,CJ6kBsD00D,CAAuBtiF,EAAOkmF,IAEhF,CAGF,OAAOJ,CAAa,GAuvCtB,CAAwE57B,G,mFKh3DzD,MAAMl/C,UAA2BvL,EAAAA,UAC9CgC,WAAAA,CAAYV,GACVW,MAAMX,GAENa,KAAKS,MAAQ,CAACR,QAAQ,EACxB,CAEAR,OAAAA,CAAQvB,GACNA,EAAEqT,iBACEvR,KAAKS,MAAMR,QACbpI,EAAAA,EAAUL,MAAM,4BAA6B,CAAEkZ,KAAM9Y,OAAO6J,SAASC,KAAMiP,OAAQ,oBAAqBk0E,iBAAkB7kF,KAAKb,MAAM2lF,iBAEvI9kF,KAAKO,SAAS,CAACN,QAASD,KAAKS,MAAMR,QACrC,CAEA8kF,UAAAA,GACE,OAAI/kF,KAAKb,MAAM6lF,aACNnnF,EAAAA,cAACyqD,EAAAA,EAAmB,CACzBh/C,QAAQ,iBACRC,WAAYvJ,KAAKb,MAAMoK,YAAcvJ,KAAKb,MAAM03C,YAChDptC,UAAWzJ,KAAKb,MAAMsK,WAAazJ,KAAKb,MAAM8lF,mBAC9Ct7E,YAAa3J,KAAKb,MAAMwK,YACxBE,QAAS7J,KAAKb,MAAM0K,QACpBG,YAAahK,KAAKb,MAAM6K,YACxB4+C,0BAA2B5oD,KAAKb,MAAMypD,0BACtC3+C,WAAYjK,KAAKb,MAAM8K,YAAcjK,KAAKb,MAAM+lF,qBAG3CrnF,EAAAA,cAACsnF,EAAAA,EAAsB,CAC5B77E,QAAQ,iBACRC,WAAYvJ,KAAKb,MAAMoK,YAAcvJ,KAAKb,MAAM03C,YAChDptC,UAAWzJ,KAAKb,MAAMsK,WAAazJ,KAAKb,MAAM8lF,mBAC9Ct7E,YAAa3J,KAAKb,MAAMwK,YACxBE,QAAS7J,KAAKb,MAAM0K,QACpBG,YAAahK,KAAKb,MAAM6K,YACxB4+C,0BAA2B5oD,KAAKb,MAAMypD,0BACtC3+C,WAAYjK,KAAKb,MAAM8K,YAAcjK,KAAKb,MAAM+lF,mBAChD/8C,WAAS,GAGf,CAEA/lC,MAAAA,GACE,OACEvE,EAAAA,cAAA,YACEA,EAAAA,cAAA,KAAGC,UAAU,sBAAsB4D,KAAK,IAAIjC,QAASO,KAAKP,QAAQmT,KAAK5S,OAAQA,KAAKb,MAAMkK,OACzFrJ,KAAKS,MAAMR,QAAUpC,EAAAA,cAAA,OAAKC,UAAU,kCACnCD,EAAAA,cAAA,OAAKC,UAAU,mBACbD,EAAAA,cAAA,OAAKC,UAAU,+BACbD,EAAAA,cAAA,QAAMC,UAAU,UAAU2B,QAASO,KAAKP,QAAQmT,KAAK5S,OAAO,MAE7DA,KAAK+kF,aACNlnF,EAAAA,cAAA,UAAQC,UAAU,YAAY2B,QAASO,KAAKP,QAAQmT,KAAK5S,OAAO,WAK1E,E,wKC9EF,MA6CA,EA7CkBolF,EAAGC,aAAYC,QAAOC,cACtC1nF,EAAAA,cAAA,OAAKC,UAAU,cACbD,EAAAA,cAAC2nF,EAAAA,EAAOC,QAAO,CACb3nF,UAAU,oBACV4nF,SAAUC,IAAW,CACnBj1E,KAAM20E,EAAW30E,KACjB40E,QACAM,WAAY,EACZC,SAAU,EACVC,UAAW,IAEbP,SAAUA,GAEV1nF,EAAAA,cAAC2nF,EAAAA,EAAOO,OAAM,CAACr1E,KAAM20E,EAAW30E,KAAO,GAAG,YAE1C7S,EAAAA,cAAC2nF,EAAAA,EAAOQ,QAAO,CAACC,MAAM,eAEtBpoF,EAAAA,cAAC2nF,EAAAA,EAAOU,SAAQ,CACdpoF,UAAU,WACVqoF,cAAc,aACdC,UAAU,kBAGZvoF,EAAAA,cAAC2nF,EAAAA,EAAOQ,QAAO,CAACC,MAAM,kBACtBpoF,EAAAA,cAAC2nF,EAAAA,EAAOQ,QAAO,CAACC,MAAM,aAAanoF,UAAU,aAC7CD,EAAAA,cAAC2nF,EAAAA,EAAOQ,QAAO,CAACC,MAAM,cAEtBpoF,EAAAA,cAAC2nF,EAAAA,EAAOU,SAAQ,CACdpoF,UAAU,WACVqoF,cAAc,YACdC,UAAU,aAGZvoF,EAAAA,cAAC2nF,EAAAA,EAAOQ,QAAO,CAACC,MAAM,aAEtBpoF,EAAAA,cAAC2nF,EAAAA,EAAOO,OAAM,CAACr1E,KAAM20E,EAAW30E,KAAO,GAAG,UCtBhD,EAfgB21E,EAAGh+E,QAAOpK,cACxBJ,EAAAA,cAAA,WACEA,EAAAA,cAAA,YAAM,aACNA,EAAAA,cAAA,SACEE,KAAK,OACL0jB,aAAcpZ,EACdpK,SAAUC,GAAKD,EAASC,EAAEC,OAAOkK,U,8dCJvC,MAoCA,EApCwBi+E,IAAA,IACtBC,EAAOD,EAAPC,QAASnhC,EAAOkhC,EAAPlhC,QAAS9gD,EAAIgiF,EAAJhiF,KAAMkiF,EAAMF,EAANE,OAAQnrF,EAAKirF,EAALjrF,MAChCorF,EAASH,EAATG,UAAWC,EAAQJ,EAARI,SAAUC,EAAcL,EAAdK,eACrBC,EAAeN,EAAfM,gBACGznF,EAAK0nF,EAAAP,EAAAQ,GAAA,OAERjpF,EAAAA,cAAA,MAASsB,EACNynF,GACC/oF,EAAAA,cAAA,OAAKC,UAAU,sBACbD,EAAAA,cAACwoF,EAAO,CAACh+E,MAAOk+E,EAAStoF,SAAUwoF,KAGvC5oF,EAAAA,cAAA,OAAKC,UAAU,oBACbD,EAAAA,cAAA,YAAM,UACNA,EAAAA,cAACuG,EAAAA,GAAY,CACXoiF,OAAQA,EACRnrF,MAAOA,EACP+pD,QAASA,EACT9gD,KAAMA,EACNrG,SAAUyoF,EACVC,eAAgBA,KAGhB,E,0BCYD,SAASI,IAYd,OA7CF,SAAoBC,EAAUC,GAC5B,MAAO,CAAC5+E,GAASwqC,kBACf,MAAMq0C,EAAiBD,KAAuB,GAExCE,EAAcD,EAAer0C,IAAgBq0C,EAAer0C,GAAas0C,YAC/E,OACEtpF,EAAAA,cAAA,OAAKO,MAAO,CAAE8J,QAAS,WACrBrK,EAAAA,cAAA,QAAMC,UAAU,SAASuK,GACxB8+E,GACCtpF,EAAAA,cAAA,QAAMC,UAAU,6BAA4BD,EAAAA,cAAA,QAAMC,UAAU,eAAeqpF,IAE5EtpF,EAAAA,cACC,OACAmpF,EACE3+E,EACA,CACEwqC,eAEF,CACEz0C,MAAO,CAAE8E,MAAO,YAIrBgkF,EAAer0C,IAChBh1C,EAAAA,cAAA,QAAMC,UAAU,aAAaM,MAAO,CAAEC,WAAY,QAAS6E,MAAO,UAC7DgkF,EAAer0C,GAAa5kC,SAAW,GAGxC,CAGZ,CAcSm5E,CAXU1jF,EAAAA,GAAU,CACzBujF,kBAAmBA,IAAMjnF,KAAKS,MAAMymF,gBAAkB,GACtDh6E,OAAQm6E,IACNrnF,KAAKO,SAAS,CACZ2mF,eAAgBxjF,EAAAA,GAAc,CAC5BwjF,eAAgBlnF,KAAKS,MAAMymF,eAC3BG,oBAEF,KAGsB,IAAMrnF,KAAKS,MAAMymF,gBAC/C,CAEO,SAASI,EAAYC,GAC1B,OAAOC,EAAAA,GAAU,CACfr3D,UAAWA,EAAG0iB,cAAa/uB,aAAc+uB,IAAgB/uB,EAAQ2jE,QACjEC,WAAYA,EAAG70C,cAAa/uB,cAC1B,MAAMrlB,GAAQ2hD,EAAAA,EAAAA,WAAUpgD,KAAKS,MAAM6D,KAAM,CAAE3F,GAAImlB,EAAQnlB,KACjD2F,GAAOwmE,EAAAA,EAAAA,WAAU9qE,KAAKS,MAAM6D,MAE7BijF,IAAyBjjF,EAAK7F,GAAO8oF,KACxCjjF,EAAK7F,GAAOgpF,QAAU50C,GAGxB7yC,KAAKO,SAAS,CAAE+D,QAAO,EAEzBqjF,QAASA,EAAGt/E,QAAOyb,UAAS8jE,eAC1B,MAAMnpF,GAAQ2hD,EAAAA,EAAAA,WAAUpgD,KAAKS,MAAM6D,KAAM,CAAE3F,GAAImlB,EAAQnlB,KACjD2F,GAAOwmE,EAAAA,EAAAA,WAAU9qE,KAAKS,MAAM6D,MAElCA,EAAK7F,GAAOmpF,GAAYv/E,EACxB/D,EAAK7F,GAAOgpF,SAAU,EAEtBznF,KAAKO,SAAS,CAAE+D,QAAO,GAG7B,CAEO,SAASujF,EAAS75E,GACvB,IAAI3F,EAAQ2F,EAAI3F,MAKhB,OAFAs/E,EAFY35E,EAAI25E,UAEPt/E,GAEF,IACT,CAEO,SAASy/E,EAAiBF,EAAU5hF,EAAQ/J,EAAQ8rF,GACzD,OAAOlqF,EAAAA,cAAA,WACLA,EAAAA,cAAA,SACEE,KAAK,SACLuC,KAAO,GAAErE,OAAY2rF,KACrBv/E,MAAOrC,EAAO8d,QAAQ8jE,KAEvBG,EAEL,CAUO,SAAShC,EAAOhoF,EAAMiqF,EAAS/0E,EAAQ9U,EAAQL,EAAWuB,GAC/D,OAAOxB,EAAAA,cAAA,UAAQC,UAAWA,EAAWC,KAAMA,EAAM,cAAaI,EAAQ,cAAa8U,EAAQ5T,SAAUA,GAAW2oF,EAClH,C,4GC/FA,MAAMC,EAA2B,CAC/B,CAAC3nF,KAAM,WAAY+H,MAAO,GAC1B,CAAC/H,KAAM,OAAY+H,MAAO,KAC1B,CAAC/H,KAAM,OAAY+H,MAAO,IAqBtB6/E,EAA2B,CAC/B,CAAC5nF,KAAM,WAAY+H,MAAO,YAC1B,CAAC/H,KAAM,cAAe+H,MAAO,eAC7B,CAAC/H,KAAM,uBAAwB+H,MAAO,wBACtC,CAAC/H,KAAM,mBAAoB+H,MAAO,oBAClC,CAAC/H,KAAM,kBAAmB+H,MAAO,mBACjC,CAAC/H,KAAM,kBAAmB+H,MAAO,oBAG7B8/E,EAA0C,CAC9C,CAAC7nF,KAAM,iBAAkB+H,MAAO,kBAChC,CAAC/H,KAAM,uBAAwB+H,MAAO,wBACtC,CAAC/H,KAAM,gBAAiB+H,MAAO,iBAC/B,CAAC/H,KAAM,iBAAkB+H,MAAO,kBAChC,CAAC/H,KAAM,kBAAmB+H,MAAO,mBACjC,CAAC/H,KAAM,kBAAmB+H,MAAO,mBACjC,CAAC/H,KAAM,cAAe+H,MAAO,gBAGzB+/E,EAAsC,CAC1C,CAAC9nF,KAAM,SAAU+H,MAAO,UACxB,CAAC/H,KAAM,uBAAwB+H,MAAO,wBACtC,CAAC/H,KAAM,gBAAiB+H,MAAO,iBAC/B,CAAC/H,KAAM,iBAAkB+H,MAAO,kBAChC,CAAC/H,KAAM,kBAAmB+H,MAAO,mBACjC,CAAC/H,KAAM,kBAAmB+H,MAAO,mBACjC,CAAC/H,KAAM,cAAe+H,MAAO,gBAGlBggF,EAAa,CACxBC,6BAA8B,WACXhB,EAAYiB,KAAKvoF,MAAlC,MACMwoF,EAAiBzB,EAAcwB,KAAKvoF,MAE1C,MAAO,CACL,CACE4nF,SAAU,aACV3zE,OAAQ,CACNtB,MAAO,aACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjB60C,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,YACV3zE,OAAQ,CACNtB,MAAO,YACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjB60C,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,QACV3zE,OAAQ,CACNtB,MAAO,QACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjB60C,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,eACV3zE,OAAQ,CACNtB,MAAO,eACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjB60C,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,SACV3zE,OAAQ,CACNtB,MAAO,SACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjB60C,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,eACV3zE,OAAQ,CACNtB,MAAO,yBAET0gC,KAAM,CACJo1C,WAAY,CACV,CAACE,EAAcC,IAC6C,QAAtDA,EAAgB9kE,QAAQ+kE,0BACnB,MAEAhrF,EAAAA,cAAA,KAAG6D,KAAMknF,EAAgB9kE,QAAQ+kE,0BAA2B1qF,OAAO,UAAUwqF,IAI1FxpF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBW,MAAO,CACLf,MAAO,CACLI,UAAW,UAEbV,UAAW,iBAEb4qF,SAAS,GAEX,EAEJI,8BAA+B,WAC7B,MAAMN,EAAiBzB,EAAcwB,KAAKvoF,MAE1C,MAAO,CACL,CACE4nF,SAAU,cACV3zE,OAAQ,CACNtB,MAAO,gBACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,SACV3zE,OAAQ,CACNtB,MAAO,SACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,OACV3zE,OAAQ,CACNtB,MAAO,SACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CAEP,IAGJsqF,SAAS,GAEX,CACEd,SAAU,eACV3zE,OAAQ,CACNtB,MAAO,eACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,aACV3zE,OAAQ,CACNtB,MAAO,aACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,oBACV3zE,OAAQ,CACNtB,MAAO,sBACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,yBACV3zE,OAAQ,CACNtB,MAAO,2BACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,gCACV3zE,OAAQ,CACNtB,MAAO,kCACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,EAEJM,2BAA4B,WACT1B,EAAYiB,KAAKvoF,MAAlC,MACMwoF,EAAiBzB,EAAcwB,KAAKvoF,MAE1C,MAAO,CACL,CACE4nF,SAAU,uBACV3zE,OAAQ,CACNtB,MAAO,iBACP81E,WAAY,CAACD,IAEfn1C,KAAM,CACJo1C,WAAY,CACV,CAACQ,EAAsBL,IAEnB/qF,EAAAA,cAACuL,EAAAA,EAAkB,CACjBC,MAAO4/E,EACPpyC,YAAa+xC,EAAgB9kE,QAAQ+yB,YACrCouC,mBAAoB2D,EAAgB9kE,QAAQmhE,mBAC5CC,mBAAoB0D,EAAgB9kE,QAAQohE,uBAMtDwD,SAAS,GAEX,CACEd,SAAU,SACV3zE,OAAQ,CACNtB,MAAO,SACP81E,WAAY,CAACD,IAEfn1C,KAAM,CACJo1C,WAAY,CAACrkF,EAAAA,IACbjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,qBACV3zE,OAAQ,CACNtB,MAAO,qBACP81E,WAAY,CAACD,IAEfn1C,KAAM,CACJo1C,WAAY,CAACrkF,EAAAA,KAEfskF,SAAS,GAEX,CACEd,SAAU,WACV3zE,OAAQ,CACNtB,MAAO,WACP81E,WAAY,CAACD,IAEfn1C,KAAM,CACJo1C,WAAY,CAACrkF,EAAAA,IACbjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,YACV3zE,OAAQ,CACNtB,MAAO,YACP81E,WAAY,CAACD,IAEfn1C,KAAM,CACJo1C,WAAY,CAACrkF,EAAAA,IACbjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,gCACV3zE,OAAQ,CACNtB,MAAO,gCACP81E,WAAY,CAACD,IAEfn1C,KAAM,CACJo1C,WAAY,CAACrkF,EAAAA,IACbjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,iBACV3zE,OAAQ,CACNtB,MAAO,iBACP81E,WAAY,CAACD,IAEfn1C,KAAM,CACJo1C,WAAY,CAACrkF,EAAAA,IACbjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,YACV3zE,OAAQ,CACNtB,MAAO,OACP81E,WAAY,CAACD,IAEfn1C,KAAM,CACJo1C,WAAY,CACR,CAACS,EAAWN,IAAoB/qF,EAAAA,cAAA,KAAG6D,KAAMknF,EAAgB9kE,QAAQqlE,UAAWhrF,OAAO,UAAU+qF,KAGnGR,SAAS,GAEX,EAEJU,0BAA2B,WACzB,MAAMZ,EAAiBzB,EAAcwB,KAAKvoF,MAE1C,MAAO,CACL,CACE4nF,SAAU,cACV3zE,OAAQ,CACNtB,MAAO,SACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,cACV3zE,OAAQ,CACNtB,MAAO,SACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,aACV3zE,OAAQ,CACNtB,MAAO,aACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CAEP,IAGJsqF,SAAS,GAEX,CACEd,SAAU,+BACV3zE,OAAQ,CACNtB,MAAO,yBACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,wBACV3zE,OAAQ,CACNtB,MAAO,kBACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,oCACV3zE,OAAQ,CACNtB,MAAO,sBACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,6BACV3zE,OAAQ,CACNtB,MAAO,eACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,8CACV3zE,OAAQ,CACNtB,MAAO,gCACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,uCACV3zE,OAAQ,CACNtB,MAAO,yBACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,yCACV3zE,OAAQ,CACNtB,MAAO,2BACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,kCACV3zE,OAAQ,CACNtB,MAAO,oBACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,mDACV3zE,OAAQ,CACNtB,MAAO,qCACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,4CACV3zE,OAAQ,CACNtB,MAAO,8BACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,mCACV3zE,OAAQ,CACNtB,MAAO,qBACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,4BACV3zE,OAAQ,CACNtB,MAAO,cACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,SACX2J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,EAEJW,mBAAoB,WAClB,MAAMC,EAAWhC,EAAYiB,KAAKvoF,MAC5BupF,EAAevpF,KAAKb,MAAMqqF,cAC1BC,EAAkBzpF,KAAKb,MAAMuqF,kBAC7BC,EAAcA,CAACh8D,EAAYva,KAC/B,IAAIza,EAAM,IAAIiwB,IAAI5oB,KAAKb,MAAMyqF,aAC7BjxF,EAAIkxF,aAAaC,IAAI,IAAKn8D,GAE1B1nB,MAAMtN,GACHqQ,MAAKoJ,GAAYA,EAASjM,SAC1B6C,MAAK+gF,IACJA,EAAa,CAAC,CAACp3E,MAAO,SAAUtK,MAAO,SAAU0hF,GACjD32E,EAAS22E,EAAW,GACpB,EAGN/pF,KAAKgqF,kBAAqBpyE,IACxB,MAAM+V,EAAa/V,EAASnV,QAAQ,MAAO,IAE3C,OADAzC,KAAKO,SAAS,CAAEotB,eACTA,CAAU,EAGnB3tB,KAAKiqF,cAAgB,CAACryE,EAAUjf,KAC9B+jB,EAAEC,KAAK,CACLhkB,IAAKA,EACLoF,KAAM,QACNrG,KAAM,CAAEwyF,QAAStyE,EAASvP,OAC1BlN,OAAO,EACP0hB,SAAU,OACVE,QAAS,SAAU3K,GACnB,EACAI,MAAO,SAASW,GACdb,MAAMa,EAAQ+J,aAChB,GACA,EAGJ,IAAIitE,EAAqB,GASzB,OAPEA,EAD4B,yBAA3BnqF,KAAKb,MAAMirF,aACSlC,EACa,sCAA3BloF,KAAKb,MAAMirF,aACGjC,EAEAC,EAGhB,CACL,CACEn0E,OAAQ,CAAC,EACTo/B,KAAM,CACJo1C,WAAY,CACV,CAAC4B,EAAGC,IACKzsF,EAAAA,cAAA,OAAKuM,IAAKmgF,EAAUlgF,IAAI,2BAIrClL,MAAO,CACLf,MAAO,CACL+J,MAAO,GACPlJ,gBAAiB,WAEnBnB,UAAW,8BAEb4qF,SAAS,GAEX,CACEd,SAAU,SACV3zE,OAAQ,CACNtB,MAAO,SACP81E,WAAY,IAEdp1C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACV,CAACnoF,EAAMsoF,IAAoB/qF,EAAAA,cAAA,QAAMO,MAAQ,CAACa,gBAAmD,aAAlC2pF,EAAgB9kE,QAAQ7U,OAAwB,UAA8C,UAAlC25E,EAAgB9kE,QAAQ7U,OAAqB,UAAY,OAAS,IAAE25E,EAAgB9kE,QAAQ7U,SAErN9P,MAAO,CAAC,GAEVA,MAAO,CACLf,MAAO,CACL+J,MAAO,MAGXugF,SAAS,GAEX,CACEd,SAAU,OACV3zE,OAAQ,CACNtB,MAAO,eACP81E,WAAY,GACZtpF,MAAO,CAAC,GAEVk0C,KAAM,CACJ01C,WAAY,CACVO,EACE9B,EAAAA,GAAc,CACZ/uF,QAAS0xF,MAEf1B,WAAY,CACV,CAACtnE,EAAMynE,IAAoBd,EACzB,OACAc,EACA5oF,KAAKb,MAAMksD,YACXxtD,EAAAA,cAAA,QAAMC,UAAU,iBAAiBqsF,EAAmBnxE,MAAKL,GAAQA,EAAKtQ,OAASugF,EAAgB9kE,QAAQ3C,OAAM7gB,SAInHnB,MAAO,CACLf,MAAO,CACL+J,MAAO,MAGXugF,SAAS,GAEX,CACEd,SAAU,aACV3zE,OAAQ,CACNtB,MAAO,OACP81E,WAAY,GACZtpF,MAAO,CACLf,MAAO,CACL+J,MAAO,SAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACV,CAAC12E,EAAKu4E,IACGzsF,EAAAA,cAAC2sF,EAAAA,EAAW,CACjBC,cAAY,EACZd,YAAaA,EACbe,gBAAc,EACdpqF,KAAMN,KAAKb,MAAMwrF,+BACjBlpE,aAAc,CAAC9O,MAAO23E,EAAMxmE,QAAoB,WAAGzb,MAAOiiF,EAAMxmE,QAAiB,aAOzF4kE,SAAS,GAEX,CACEd,SAAU,YACV3zE,OAAQ,CACNtB,MAAO,GACP81E,WAAY,GACZtpF,MAAO,CAACf,MAAO,CACb8J,QAAS,UAIbmrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACV,CAAC12E,EAAKu4E,IACGzsF,EAAAA,cAAC2sF,EAAAA,EAAW,CACjBlqF,KAAMN,KAAKb,MAAMyrF,qBACjBnpE,aAAc,CAAC9O,MAAO23E,EAAMxmE,QAAmB,UAAGzb,MAAOiiF,EAAMxmE,QAAmB,WAClF1lB,MAAM,mBAIZe,MAAO,CAACf,MAAO,CACb8J,QAAS,UAIb2iF,YAAY,EACZnC,SAAS,GAEX,CACEz0E,OAAQ,CACNtB,MAAO,sBAET0gC,KAAM,CACJo1C,WAAY,CACV,CAACnoF,EAAMsoF,IAAoB/qF,EAAAA,cAAA,KAAG6D,KAAMknF,EAAgB9kE,QAAQgnE,sBAAuB1sF,MAAQ,CAAC2M,MAAO,SAAU5M,OAAO,UAASN,EAAAA,cAAA,KAAGC,UAAU,+BAE5IqB,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBW,MAAO,CACLf,MAAO,CACL+J,MAAO,GACP3J,UAAW,UAEbV,UAAW,iBAEb4qF,QAASe,GAEX,CACEx1E,OAAQ,CACNtB,MAAO,oBAET0gC,KAAM,CACJo1C,WAAY,CAEV,CAACnoF,EAAMsoF,IAAoB/qF,EAAAA,cAAA,KAAG6D,KAAMknF,EAAgB9kE,QAAQinE,sBAAuB3sF,MAAQ,CAAC2M,MAAO,SAAU5M,OAAO,UAASN,EAAAA,cAAA,KAAGC,UAAU,+BAE5IqB,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBW,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,UAEbV,UAAW,iBAEb4qF,QAASe,GAEX,CACEx1E,OAAQ,CAAC,EACTo/B,KAAM,CACJo1C,WAAY,CACV,CAAC4B,EAAGC,IACKzsF,EAAAA,cAAA,KAAG,cAAa0rF,EAAcnrF,MAAO,CAAC2M,MAAO,QAAQ,cAIlE5L,MAAO,CACLf,MAAO,CACL+J,MAAO,IAETrK,UAAW,iBAEb4qF,SAAS,GAEX,EAEJsC,2BAA4B,WACT1D,EAAYiB,KAAKvoF,MAAlC,MACMwoF,EAAiBzB,EAAcwB,KAAKvoF,MAC1C,MAAO,CACL,CACE4nF,SAAU,WACV3zE,OAAQ,CACNtB,MAAO,aACP81E,WAAY,GACZtpF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACV,CAACvpE,EAAU0pE,IACT/qF,EAAAA,cAAA,SACEC,UAAU,iBACVC,KAAK,QACLuC,KAAO,GAAEN,KAAKb,MAAMksD,kBACpBhjD,MAAOugF,EAAgB9kE,QAAY,GACnC2tB,eAAgBm3C,EAAgB9kE,QAAiB,QACjD7lB,SAAUA,IAAM,QAGtBkB,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBqsF,YAAY,EACZnC,SAAS,GAEX,CACEd,SAAU,KACV3zE,OAAQ,CACNtB,MAAO,KACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CAAC,GAEVupF,SAAS,GAEX,CACEd,SAAU,QACV3zE,OAAQ,CACNtB,MAAO,qBACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,GACA,CAACiF,EAAOu/E,IAAoB/qF,EAAAA,cAAA,KAAG6D,KAAMknF,EAAgB9kE,QAAQmnE,uBAAwB9sF,OAAO,UAAUkL,IAExGlK,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,aACV3zE,OAAQ,CACNtB,MAAO,eACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,EAEJwC,uBAAwB,WACtB,MAAM1C,EAAiBzB,EAAcwB,KAAKvoF,MAEpCmrF,GADW7D,EAAYiB,KAAKvoF,MACLA,KAAKb,MAAMisF,yBAClCC,EAA8BrrF,KAAKb,MAAMmsF,+BAG/C,MAAO,CACL,CACE1D,SAAU,cACV3zE,OAAQ,CACNtB,MAAO,SACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,GACZN,WAAY,GAEZtpF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,wBACV3zE,OAAQ,CACNtB,MAAO,wBACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjBkqF,QAASyC,GAEX,CACEvD,SAAU,wBACV3zE,OAAQ,CACNtB,MAAO,oBACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjBkqF,QAAS2C,GAEX,CACEzD,SAAU,gBACV3zE,OAAQ,CACNtB,MAAO,gBACPo2E,WAAY,GACZN,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,oBACV3zE,OAAQ,CACNtB,MAAO,oBACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,eACV3zE,OAAQ,CACNtB,MAAO,gBAET0gC,KAAM,CACJo1C,WAAY,GACZtpF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjBW,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,UAEbV,UAAW,iBAEb4qF,SAAS,GAEX,CACEd,SAAU,eACV3zE,OAAQ,CACNtB,MAAO,2BAET0gC,KAAM,CACJo1C,WAAY,CACV,CAACE,EAAcC,IACN/qF,EAAAA,cAAA,KAAG6D,KAAMknF,EAAgB9kE,QAAQynE,qBAAsBptF,OAAO,UAAUwqF,IAGnFxpF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBW,MAAO,CACLf,MAAO,CACLI,UAAW,UAEbV,UAAW,iBAEb4qF,SAAS,GAEX,EAEJ8C,wBAAyB,WACvB,MAAMhD,EAAiBzB,EAAcwB,KAAKvoF,MACpCyrF,EAAuBzrF,KAAKb,MAAMusF,uBAClCC,EAA0B3rF,KAAKb,MAAMysF,2BACrCT,EAAuBnrF,KAAKb,MAAMisF,wBAClCC,EAA8BrrF,KAAKb,MAAMmsF,+BAC9BhE,EAAYiB,KAAKvoF,MACbA,KAAKb,MAAM0sF,cAEhC,MAAO,CACL,CACEjE,SAAU,OACV3zE,OAAQ,CACNtB,MAAO,eACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,GACA,CAAC9D,EAAMsoF,IACF+C,EACM9tF,EAAAA,cAAA,KAAG6D,KAAMknF,EAAgB9kE,QAAQgoE,UAAW3tF,OAAO,UAAUmC,GAE7DzC,EAAAA,cAAAA,EAAAA,SAAA,KAAGyC,IAIhBnB,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,aACV3zE,OAAQ,CACNtB,MAAO,aACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,GACA,CAAC2nF,EAAYnD,IAAoB/qF,EAAAA,cAAA,KAAG6D,KAAMknF,EAAgB9kE,QAAQkoE,SAAU7tF,OAAO,UAAU4tF,IAE/F5sF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,WACV3zE,OAAQ,CACNtB,MAAO,WACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,aACV3zE,OAAQ,CACNtB,MAAO,aACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,SACV3zE,OAAQ,CACNtB,MAAO,SACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,kBACV3zE,OAAQ,CACNtB,MAAO,kBACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,QAASyC,GAEX,CACEl3E,OAAQ,CACNtB,MAAO,mBAET0gC,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,GACA,CAAC9D,EAAMsoF,IAAoB/qF,EAAAA,cAAA,KAAG6D,KAAMknF,EAAgB9kE,QAAQmoE,qBAAsB7tF,MAAQ,CAAC2M,MAAO,SAAU5M,OAAO,UAASN,EAAAA,cAAA,KAAGC,UAAU,+BAE3IqB,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBW,MAAO,CACLf,MAAO,CACLI,UAAW,UAEbV,UAAW,iBAEb4qF,QAAS2C,GAEX,CACEp3E,OAAQ,CACNtB,MAAO,WAET0gC,KAAM,CACJo1C,WAAY,CACV,CAAC4B,EAAGC,IACKzsF,EAAAA,cAAA,KAAG,cAAa4tF,EAAsB,WAAUnB,EAAMxmE,QAAQooE,aAAaruF,EAAAA,cAAA,KAAGC,UAAU,+BAGnGqB,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBqsF,YAAY,EACZ1rF,MAAO,CACLf,MAAO,CACL+J,MAAO,GACP3J,UAAW,UAEbV,UAAW,iBAEb4qF,SAAS,GAEX,CACEd,SAAU,gBACV3zE,OAAQ,CACNtB,MAAO,WAET0gC,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,GACA,CAAC9D,EAAMsoF,IAAoB/qF,EAAAA,cAAA,KAAG6D,KAAMknF,EAAgB9kE,QAAQqoE,YAAa/tF,MAAQ,CAAC2M,MAAO,SAAU5M,OAAO,UAASN,EAAAA,cAAA,KAAGC,UAAU,+BAElIqB,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBW,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,UAEbV,UAAW,iBAEb4qF,QAASyC,GAEX,CACEvD,SAAU,gBACV3zE,OAAQ,CACNtB,MAAO,WAET0gC,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,GACA,CAAC9D,EAAMsoF,IAAoB/qF,EAAAA,cAAA,KAAG6D,KAAMknF,EAAgB9kE,QAAQqoE,YAAa/tF,MAAQ,CAAC2M,MAAO,SAAU5M,OAAO,UAASN,EAAAA,cAAA,KAAGC,UAAU,+BAElIqB,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBW,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,UAEbV,UAAW,iBAEb4qF,QAAS2C,GAEX,EAGJe,kBAAmB,WACjB,MAAM5D,EAAiBzB,EAAcwB,KAAKvoF,MAE1C,MAAO,CACL,CACE4nF,SAAU,aACV3zE,OAAQ,CACNtB,MAAO,aACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,YACV3zE,OAAQ,CACNtB,MAAO,YACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,QACV3zE,OAAQ,CACNtB,MAAO,QACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,kBACV3zE,OAAQ,CACNtB,MAAO,kBACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,aACV3zE,OAAQ,CACNtB,MAAO,aACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,SACV3zE,OAAQ,CACNtB,MAAO,SACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,aACV3zE,OAAQ,CACNtB,MAAO,aACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,mBACV3zE,OAAQ,CACNtB,MAAO,mBACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,EAEJ2D,6BAA8B,WACX/E,EAAYiB,KAAKvoF,MAAlC,MACMwoF,EAAiBzB,EAAcwB,KAAKvoF,MAE1C,MAAO,CACL,CACE4nF,SAAU,cACV3zE,OAAQ,CACNtB,MAAO,SACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLgJ,MAAO,MAGXkrC,KAAM,CACJo1C,WAAY,CAACrkF,EAAAA,KAEfskF,SAAS,GAEX,CACEd,SAAU,QACV3zE,OAAQ,CACNtB,MAAO,eACP81E,WAAY,CAACD,IAEfn1C,KAAM,CAACo1C,WAAY,CAACrkF,EAAAA,KACpBskF,SAAS,GAEX,CACEd,SAAU,aACV3zE,OAAQ,CACNtB,MAAO,eACPxT,MAAO,CACLf,MAAO,CACLI,UAAW,WAGfiqF,WAAY,CAACD,IAEfn1C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,kBACV3zE,OAAQ,CACNtB,MAAO,sBACPxT,MAAO,CACLf,MAAO,CACLI,UAAW,UAGfiqF,WAAY,CAACD,IAEfn1C,KAAM,CACJo1C,WAAY,CAACrkF,EAAAA,IACbjF,MAAO,CACLf,MAAO,CACLI,UAAW,WAIjBkqF,SAAS,GAEX,CACEd,SAAU,SACV3zE,OAAQ,CACNtB,MAAO,SACPxT,MAAO,CACLf,MAAO,CACLI,UAAW,WAGfiqF,WAAY,CAACD,IAEfn1C,KAAM,CACJo1C,WAAY,GACZtpF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,SAAS,GAEX,CACEd,SAAU,yBACV3zE,OAAQ,CACNtB,MAAQ,UAAS3S,KAAKb,MAAMmtF,uBAC5BntF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,WAGfiqF,WAAY,IAEdp1C,KAAM,CACJo1C,WAAY,CACT9vF,GAAQkF,EAAAA,cAAA,KAAG6D,KAAM/I,GAAKkF,EAAAA,cAAA,KAAGC,UAAU,iBAEtCqB,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBqsF,YAAY,EACZnC,SAAS,GAEX,CACEd,SAAU,mBACV3zE,OAAQ,CACNtB,MAAO,SACPxT,MAAO,CACLf,MAAO,CACLI,UAAW,WAGfiqF,WAAY,IAEdp1C,KAAM,CACJo1C,WAAY,CACT9vF,GAAQkF,EAAAA,cAAA,KAAG6D,KAAM/I,EAAKwF,OAAO,UAASN,EAAAA,cAAA,KAAGC,UAAU,iBAEtDqB,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBqsF,YAAY,EACZnC,SAAS,GAEX,EAEJ6D,gCAAiC,WAC/B,MAAMjD,EAAiBhC,EAAYiB,KAAKvoF,MAClCwoF,EAAiBzB,EAAcwB,KAAKvoF,MACpCwsF,EAAiBxsF,KAAKb,MAAMstF,eAC5BC,EAAiB1sF,KAAKb,MAAMwtF,cACX3sF,KAAKb,MAAMytF,cAElC,MAAO,CACL,CACEhF,SAAU,YACV3zE,OAAQ,CACNtB,MAAO3S,KAAKb,MAAM0tF,WAClBpE,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACL+J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,KAGJskF,SAAS,GAEX,CACEd,SAAU,YACV3zE,OAAQ,CACNtB,MAAO,OACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,KAGJskF,SAAS,GAEX,CACEd,SAAU,UACV3zE,OAAQ,CACNtB,MAAO,UACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACL+E,cAAe,gBAIrBulF,SAAS,GAEX,CACEd,SAAU,SACV3zE,OAAQ,CACNtB,MAAO,SACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJ01C,WAAY,CACV,CAACsB,EAAGzB,KACK,CACL,0BAA2BA,EAAgB9kE,QAAQgpE,qBAGvDxD,EACE9B,EAAAA,GAAc,CACZroF,MAAO,CACL,cAAgButF,GAElBj0F,QAAS+zF,MAIf/D,WAAY,CACV,CAACx5E,EAAQ25E,IACA/qF,EAAAA,cAAA,QAAMC,UAAU,iBAAiB8qF,EAAgB9kE,QAAQ7U,SAGpE9P,MAAO,CACLf,MAAO,CACL+E,cAAe,gBAIrBulF,SAAS,GAEX,CACEd,SAAU,eACV3zE,OAAQ,CACNtB,MAAO,eACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,KAGJskF,SAAS,GAEX,CACEd,SAAU,mBACV3zE,OAAQ,CACNtB,MAAO,iBACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJo1C,WAAY,CACV,CAACsE,EAAiBnE,KAChB,IAAIjwF,EAAMiwF,EAAgB9kE,QAAQkpE,kBAElC,OAAwB,IAApBD,EACKA,EAEAlvF,EAAAA,cAAA,KAAG6D,KAAM/I,EAAKwF,OAAO,UAAU4uF,EACxC,GAGJ5tF,MAAO,CACLf,MAAO,CACLI,UAAW,WAIjBkqF,SAAS,GAEX,CACEd,SAAU,YACV3zE,OAAQ,CACNtB,MAAO,SACPxT,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjB60C,KAAM,CACJo1C,WAAY,CACT9vF,GAAQkF,EAAAA,cAAA,KAAG6D,KAAM/I,GAAKkF,EAAAA,cAAA,KAAGC,UAAU,iBAEtCqB,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBqsF,YAAY,EACZnC,SAAS,GAEX,EAEJuE,2BAA4B,WACT3F,EAAYiB,KAAKvoF,MAAlC,MACMwoF,EAAiBzB,EAAcwB,KAAKvoF,MACpC2rF,EAA0B3rF,KAAKb,MAAMysF,2BAE3C,MAAO,CACL,CACEhE,SAAU,SACV3zE,OAAQ,CACNtB,MAAO,SACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJo1C,WAAY,CACV,CAACx5E,EAAQ25E,IAAoB/qF,EAAAA,cAAA,KAAG6D,KAAMknF,EAAgB9kE,QAAQgoE,UAAW3tF,OAAO,UAAU8Q,KAG9Fy5E,SAAS,GAEX,CACEd,SAAU,aACV3zE,OAAQ,CACNtB,MAAO,UACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,KAGJskF,QAASiD,GAEX,CACE/D,SAAU,aACV3zE,OAAQ,CACNtB,MAAO3S,KAAKb,MAAM0tF,WAClBpE,WAAY,CACVD,IAGJn1C,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,KAGJskF,SAAS,GAEX,CACEd,SAAU,WACV3zE,OAAQ,CACNtB,MAAO,WACP81E,WAAY,IAEdp1C,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,KAGJskF,SAAS,GAEX,CACEd,SAAU,qBACV3zE,OAAQ,CACNtB,MAAO,qBACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,KAGJjF,MAAO,CACLf,MAAO,CACL+J,MAAO,MAGXugF,SAAS,GAEX,CACEd,SAAU,UACV3zE,OAAQ,CACNtB,MAAO,UACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,KAGJskF,SAAS,GAEX,CACEd,SAAU,eACV3zE,OAAQ,CACNtB,MAAO,eACP81E,WAAY,IAEdp1C,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,KAGJymF,YAAY,EACZnC,QAASiD,GAEX,CACE/D,SAAU,WACV3zE,OAAQ,CACNtB,MAAO,WACP81E,WAAY,IAEdp1C,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,KAGJymF,YAAY,EACZnC,QAASiD,GAEX,CACE/D,SAAU,kBACV3zE,OAAQ,CACNtB,MAAO,kBACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,KAGJskF,SAAS,GAEX,CACEd,SAAU,aACV3zE,OAAQ,CACNtB,MAAO,aACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,KAGJskF,SAAS,GAEX,CACEd,SAAU,2BACV3zE,OAAQ,CACNtB,MAAO,2BACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,KAGJskF,SAAS,GAEX,CACEd,SAAU,0BACV3zE,OAAQ,CACNtB,MAAO,0BACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,KAGJskF,SAAS,GAEX,EAEJwE,WAAY,WACV,MAAM5D,EAAWhC,EAAYiB,KAAKvoF,MAC5BmtF,EAA0B7F,EAAYiB,KAAKvoF,KAAM,YACjDwoF,EAAiBzB,EAAcwB,KAAKvoF,MAE1C,MAAO,CACL,CACE4nF,SAAU,WACV3zE,OAAQ,CACNtB,MAAO,WACP81E,WAAY,CACV,CAACvpE,EAAU0pE,KACT,IAAIwE,EAAcptF,KAAKqtF,aAAa/oF,KAChCgpF,EAAwBF,EAAYvzE,OAAMhS,GAAOA,EAAc,WAEnE,OAAOhK,EAAAA,cAAA,OAAKO,MAAO,CAAC8J,QAAS,WAC3BrK,EAAAA,cAAA,SACEE,KAAK,WACLC,QAASsvF,EACT7tF,QAASA,IAAMO,KAAKutF,aAAaH,GAAcE,GAC/CrvF,SAAUA,IAAM,KAChBG,MAAO,CAAC+J,MAAO,UAEhBqgF,EAAetpE,EAAU0pE,GACtB,GAGVzpF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,SACXw+C,OAAQ,MAId3J,KAAM,CACJ01C,WAAY,CAACO,EAASzB,IACtBY,WAAY,CACV,CAACvpE,EAAU0pE,IAAoBd,EAC7B,WACAc,EACA5oF,KAAKb,MAAMksD,aACX,IACSxtD,EAAAA,cAAA,SACLC,UAAU,oBACVC,KAAK,WACLC,QAASkhB,EACTjhB,SAAUA,IAAM,QAEjBsqF,SAGPppF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBqsF,YAAY,EACZnC,SAAS,GAEX,CACEd,SAAU,SACV3zE,OAAQ,CACNtB,MAAO,SACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACL+J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,CAACoE,EAAuBtF,IACpCY,WAAY,CACV,CAAC+E,EAAQ5E,IACHA,EAAgB9kE,QAAQ2pE,SACnB3F,EACL,SACAc,EACA5oF,KAAKb,MAAMksD,aACX,IACSxtD,EAAAA,cAAA,SACLC,UAAU,oBACVC,KAAK,WACLC,QAASwvF,EACTvvF,SAAUA,IAAM,QAEjBsqF,QAEE1qF,EAAAA,cAAA,QAAMO,MAAO,CAAE2M,MAAO,QAChB1B,MAAM,+EAA8E,QAMvGlK,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBqsF,YAAY,EACZnC,SAAS,GAEX,CACEd,SAAU,WACV3zE,OAAQ,CACNtB,MAAO,WACP81E,WAAY,GACZtpF,MAAO,CACLf,MAAO,CACL+J,MAAO,MAIbkrC,KAAM,CACJ01C,WAAY,CACV,CAACsB,EAAGzB,KACK,CACL,UAAaA,EAAgB9kE,QAAQ5E,SAAW,GAAK,cAGzDoqE,EAAS9B,EAAAA,GAAW,CAClBroF,MAAO,CAEL,UAAgBuuF,IACE,IAAZA,EAAGphC,OACLohC,EAAGn8E,gBACL,OAKRk3E,WAAY,CACV,CAAC12E,EAAKu4E,IAAUxC,EACd,WACAwC,EACAtqF,KAAKb,MAAMksD,YACXxtD,EAAAA,cAAA,QAAMC,UAAU,eAAeiU,KAEnC5S,MAAO,CACLf,MAAO,CACLI,UAAW,WAIjBqsF,YAAY,EACZnC,SAAS,GAEX,CACEd,SAAU,cACV3zE,OAAQ,CACNtB,MAAO,KACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACL+J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACV,CAAC12E,EAAKu4E,IAAUxC,EACd,cACAwC,EACAtqF,KAAKb,MAAMksD,YACXjnD,EAAAA,GAAqB2N,EAAKu4E,KAE9BnrF,MAAO,CACLf,MAAO,CACL+J,MAAO,GACP3J,UAAW,WAIjBkqF,SAAS,GAEX,CACEd,SAAU,aACV3zE,OAAQ,CACNtB,MAAO,aACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACL+J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,KAGJskF,SAAS,GAEX,CACEd,SAAU,WACV3zE,OAAQ,CACNtB,MAAO,WACP81E,WAAY,CACVD,GAEFrpF,MAAO,CAAC,GAEVk0C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACV,CAAC12E,EAAKu4E,IAAUxC,EACd,eACAwC,EACAtqF,KAAKb,MAAMksD,YACXjnD,EAAAA,GAAqB2N,EAAKu4E,MAGhC5B,SAAS,GAEX,CACEd,SAAU,kBACV3zE,OAAQ,CACNtB,MAAO,kBACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACL+J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACLI,UAAW,WAIjBkqF,SAAS,GAEX,CACEd,SAAU,iBACV3zE,OAAQ,CACNtB,MAAO,QACP81E,WAAY,CACVD,GAEFrpF,MAAO,CACLf,MAAO,CACL+J,MAAO,MAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACL+J,MAAO,GACP3J,UAAW,WAIjBkqF,SAAS,GAEX,EAEJiF,gCAAiC,WACRrG,EAAYiB,KAAKvoF,MAAxC,MACMwoF,EAAiBzB,EAAcwB,KAAKvoF,MAE1C,MAAO,CACL,CACE4nF,SAAU,eACV3zE,OAAQ,CACNtB,MAAO,eACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACV,CAACmF,EAAchF,IAAoB/qF,EAAAA,cAAA,KAAG6D,KAAMknF,EAAgB9kE,QAAQ+pE,mBAAoB1vF,OAAO,UAAUyvF,KAG7GlF,SAAS,GAEX,CACEd,SAAU,UACV3zE,OAAQ,CACNtB,MAAO,UACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CACLf,MAAO,CACL+E,cAAe,gBAIrBulF,SAAS,GAEX,CACEd,SAAU,eACV3zE,OAAQ,CACNtB,MAAO,kBACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,KAGJskF,SAAS,GAEX,CACEd,SAAU,gBACV3zE,OAAQ,CACNtB,MAAO,gBACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,KAGJskF,SAAS,GAEX,CACEd,SAAU,iBACV3zE,OAAQ,CACNtB,MAAO,iBACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,KAGJskF,SAAS,GAEX,CACEd,SAAU,mBACV3zE,OAAQ,CACNtB,MAAO,oBACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,KAGJskF,SAAS,GAEX,EAEJoF,eAAgB,WACd,MAAMxE,EAAWhC,EAAYiB,KAAKvoF,MAC5BwoF,EAAiBzB,EAAcwB,KAAKvoF,MAE1C,MAAO,CACL,CACE4nF,SAAU,WACV3zE,OAAQ,CACNtB,MAAO,WACP81E,WAAY,CACV,CAACvpE,EAAU0pE,KACT,IAAIwE,EAAcptF,KAAKqtF,aAAa/oF,KAChCgpF,EAAwBF,EAAYvzE,OAAMhS,GAAOA,EAAc,WAEnE,OAAOhK,EAAAA,cAAA,OAAKO,MAAO,CAAC8J,QAAS,WAC3BrK,EAAAA,cAAA,SACEE,KAAK,WACLC,QAASsvF,EACT7tF,QAASA,IAAMO,KAAKutF,aAAaH,GAAcE,GAC/CrvF,SAAUA,IAAM,KAChBG,MAAO,CAAC+J,MAAO,UAEhBqgF,EAAetpE,EAAU0pE,GACtB,GAGVzpF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,YAIjB60C,KAAM,CACJ01C,WAAY,CAACO,EAASzB,IACtBY,WAAY,CACV,CAACvpE,EAAU0pE,IAAoBd,EAC7B,WACAc,EACA5oF,KAAKb,MAAMksD,aACX,IACSxtD,EAAAA,cAAA,SACLC,UAAU,oBACVC,KAAK,WACLC,QAASkhB,EACTjhB,SAAUA,IAAM,QAEjBsqF,SAGPppF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBqsF,YAAY,EACZnC,SAAS,GAEX,CACEd,SAAU,UACV3zE,OAAQ,CACNtB,MAAO,UACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CAAC,GAEVupF,SAAS,GAEX,CACEd,SAAU,QACV3zE,OAAQ,CACNtB,MAAO,QACP81E,WAAY,CACV,CAACvpE,EAAU0pE,IACF/qF,EAAAA,cAAA,OAAKO,MAAO,CAAC8J,QAAS,WAC1BsgF,EAAetpE,EAAU0pE,GACzB5oF,KAAKb,MAAM4uF,aACVhI,EAAO,SAAU,wBAAyB,2BAA4B,KAAM,0BAA0B,MAKhH1yC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACV,CAAC12E,EAAKu4E,IAAUxC,EACd,UACAwC,EACAtqF,KAAKb,MAAMksD,YACXjnD,EAAAA,GAAqB2N,EAAKu4E,KAE9BnrF,MAAO,CAAC,GAEVupF,SAAS,GAEX,CACEd,SAAU,YACV3zE,OAAQ,CACNtB,MAAO,YACP81E,WAAY,CACVD,GAEFrpF,MAAO,CAAC,GAEVk0C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,KAGJskF,SAAS,GAEX,CACEd,SAAU,aACV3zE,OAAQ,CACNtB,MAAO,aACP81E,WAAY,CACVD,GAEFrpF,MAAO,CAAC,GAEVk0C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,KAGJskF,SAAS,GAEX,CACEd,SAAU,SACV3zE,OAAQ,CACNtB,MAAQ,GAAE3S,KAAKb,MAAM6uF,yBACrBvF,WAAY,CACVD,GAEFrpF,MAAO,CAAC,GAEVk0C,KAAM,CACJ01C,WAAY,CACVO,EACE9B,EAAAA,GAAc,CACZ/uF,QAASwvF,MAEfQ,WAAY,CACV,CAACwF,EAAQrF,IAAoBd,EAC3B,SACAc,EACA5oF,KAAKb,MAAMksD,YACXxtD,EAAAA,cAAA,QAAMC,UAAU,iBAAiBmqF,EAAyBjvE,MAAKL,GAAQA,EAAKtQ,OAASugF,EAAgB9kE,QAAQmqE,SAAQ3tF,SAI3HooF,SAAS,GAEX,EAEJwF,gBAAiB,WACf,MAAM5E,EAA0BhC,EAAYiB,KAAKvoF,MAC3CmuF,EAA0B7G,EAAYiB,KAAKvoF,KAAM,mBACjDouF,EAA0B9G,EAAYiB,KAAKvoF,KAAM,eACjDwoF,EAA0BzB,EAAcwB,KAAKvoF,MAC7CquF,EAA0BruF,KAAKb,MAAMmvF,mBAAqB,CAAC,CAAChuF,KAAM,SAAU+H,MAAO,WACnFkmF,EAA0BvuF,KAAKb,MAAMqvF,iBACrCC,EAA0BzuF,KAAKb,MAAMuvF,eACrC/C,EAA0B3rF,KAAKb,MAAMysF,2BACrC38E,EAA+C,aAArBjP,KAAKb,MAAM8P,OACrC0/E,EAA0B3uF,KAAKb,MAAMyvF,aAE3C,MAAO,CACL,CACEhH,SAAU,WACV3zE,OAAQ,CACNtB,MAAO,WACP81E,WAAY,CACV,CAACvpE,EAAU0pE,KACT,IAAIiG,EAAwB7uF,KAAKqtF,aAAa/oF,KAAK3I,QAAOkM,IAAQA,EAAsB,mBACpFylF,EAAwBuB,EAAsBh1E,OAAMhS,GAAOA,EAAc,WAE7E,OAAOhK,EAAAA,cAAA,OAAKO,MAAO,CAAC8J,QAAS,WAC3BrK,EAAAA,cAAA,SACEE,KAAK,WACLC,QAASsvF,EACT7tF,QAASA,IAAMO,KAAKutF,aAAasB,GAAwBvB,GACzDrvF,SAAUA,IAAM,KAChBG,MAAO,CAAC+J,MAAO,UAEhBqgF,EAAetpE,EAAU0pE,GACtB,GAGVzpF,MAAO,CACLf,MAAO,CACL+J,MAAO,IACP3J,UAAW,SACXw+C,OAAQ,MAId3J,KAAM,CACJ01C,WAAY,CAACO,EAASzB,IACtBY,WAAY,CACV,CAACvpE,EAAU0pE,IAAoBd,EAC7B,WACAc,EACA5oF,KAAKb,MAAMksD,aACX,IACSxtD,EAAAA,cAAA,SACLC,UAAY,sBAAoB8qF,EAAgB9kE,QAAQgrE,iBAAmB,iBAAmB,IAC9F/wF,KAAK,WACLC,QAASkhB,EACT7f,SAAUupF,EAAgB9kE,QAAQgrE,iBAClCzlF,MAAOu/E,EAAgB9kE,QAAQgrE,iBAAmBlG,EAAgB9kE,QAAQirE,yBAA2B,KACrG9wF,SAAUA,IAAM,QAEjBsqF,SAGPppF,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBqsF,YAAY,EACZnC,SAAS,GAEX,CACEd,SAAU,UACV3zE,OAAQ,CACNtB,MAAO,UACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,IAEFjF,MAAO,CAAC,GAEVupF,SAAS,GAEX,CACEd,SAAU,QACV3zE,OAAQ,CACNtB,MAAO,QACP81E,WAAY,CACV,CAACvpE,EAAU0pE,IACF/qF,EAAAA,cAAA,OAAKO,MAAO,CAAC8J,QAAS,WAC1BsgF,EAAetpE,EAAU0pE,GACzB5oF,KAAKb,MAAM4uF,aACVhI,EAAO,SAAU,wBAAyB,2BAA4B,KAAM,yBAA0B92E,KAI9G9P,MAAO,CACLf,MAAO,CACL+J,MAAO,OAIbkrC,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACV,CAAC12E,EAAKu4E,IAAUxC,EACd,UACAwC,EACAtqF,KAAKb,MAAMksD,YACXjnD,EAAAA,GAAqB2N,EAAKu4E,KAE9BnrF,MAAO,CACLrB,UAAW,iBAGf4qF,SAAS,GAEX,CACEd,SAAU,YACV3zE,OAAQ,CACNtB,MAAO,YACP81E,WAAY,CACVD,GAEFrpF,MAAO,CAAC,GAEVk0C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,KAGJskF,SAAS,GAEX,CACEd,SAAU,aACV3zE,OAAQ,CACNtB,MAAO,aACP81E,WAAY,CACVD,GAEFrpF,MAAO,CAAC,GAEVk0C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACVrkF,EAAAA,KAGJskF,SAAS,GAEX,CACEd,SAAU,SACV3zE,OAAQ,CACNtB,MAAO,SACP81E,WAAY,CACVD,GAEFrpF,MAAO,CAAC,GAEVk0C,KAAM,CACJ01C,WAAY,GACZN,WAAY,CACV,CAAC3uE,EAAGwwE,IDlmGT,SAAoB0E,EAAa1E,EAAOr3E,EAAQg8E,GACrD,OAAI3E,EAAMxmE,QAAQmrE,GACTpxF,EAAAA,cAAA,KAAG6D,KAAK,sBAAsB,cAAauR,GAAS+7E,GAEpDA,CAEX,CC4lG0BE,CACZ9qF,EAAAA,GAAqB0V,EAAGwwE,GACxBA,EACAtqF,KAAKb,MAAMgwF,sBACXnvF,KAAKb,MAAMiwF,yBAIjB1G,SAAS,GAEX,CACEd,SAAU,YACV3zE,OAAQ,CACNtB,MAAO3S,KAAKb,MAAMmtF,qBAClB7D,WAAY,CACVD,GAEFrpF,MAAO,CAAC,GAEVk0C,KAAM,CACJ01C,WAAY,CACVoF,EACE3G,EAAAA,GAAc,CACZroF,MAAO,CAAC,cAAgBovF,GACxB91F,QAAS41F,MAEf5F,WAAY,CACV,CAAC4B,EAAGzB,KACF,IAAKA,EAAgB9kE,QAAQurE,YAAa,OAC1C,MAAMC,EAAW1G,EAAgB9kE,QAAQyrE,gBAAkB,gBAAkB,KAEvEC,EAAuB5G,EAAgB9kE,QAAQ2rE,UAC/CC,EAAuB9G,EAAgB9kE,QAAQ6rE,kBAE/CC,EAAavB,EAAgBr1E,MAAKL,GAAQA,EAAKtQ,OAASmnF,IAC9D,IAAIK,EAAWD,EAAaA,EAAWtvF,KAAO,UAK9C,MAJiB,WAAbkvF,GAA0BE,IAC5BG,EAAY,GAAEA,MAAaH,MAGtB5H,EACL,YACAc,EACA5oF,KAAKb,MAAMksD,YACXxtD,EAAAA,cAAA,QAAMC,UAAWwxF,GAAWO,GAC7B,IAIP1wF,MAAO,CACLf,MAAO,CACL+J,MAAO,MAGXugF,QAASiD,GAEX,CACE/D,SAAU,qBACV3zE,OAAQ,CACNtB,MAAO,qBACP81E,WAAY,CACVD,IAGJn1C,KAAM,CACJl0C,MAAO,CACLf,MAAO,CACLI,UAAW,YAIjBkqF,QAASiD,GAEX,CACE/D,SAAU,SACV3zE,OAAQ,CACNtB,MAAQ,GAAE3S,KAAKb,MAAM6uF,yBACrBvF,WAAY,CACVD,GAEFrpF,MAAO,CAAC,GAEVk0C,KAAM,CACJ01C,WAAY,CACVqF,EACE5G,EAAAA,GAAc,CACZ/uF,QAASwvF,MAEfQ,WAAY,CACV,CAAC4B,EAAGzB,KACF,GAAKA,EAAgB9kE,QAAQurE,YAC7B,OAAOvH,EACL,SACAc,EACA5oF,KAAKb,MAAMksD,YACXxtD,EAAAA,cAAA,QAAMC,UAAU,iBAAiBmqF,EAAyBjvE,MAAKL,GAAQA,EAAKtQ,OAASugF,EAAgB9kE,QAAQmqE,SAAQ3tF,MACtH,IAIPooF,SAAS,GAEX,CACEz0E,OAAQ,CACNtB,MAAO,WAET0gC,KAAM,CACJo1C,WAAY,CACV,CAAC4B,EAAGC,KACF,GAAIA,EAAMxmE,QAAQgsE,YAChB,OAAOjyF,EAAAA,cAAA,UACLE,KAAK,SACLD,UAAU,6CACV,cAAa2wF,EACb,WAAUnE,EAAMxmE,QAAQisE,YACxB1mF,MAAQ,kCAAiCrJ,KAAKb,MAAM6uF,gBAAgBlqF,kBAGxE,IAIN3E,MAAO,CACLf,MAAO,CACL+J,MAAO,IAETrK,UAAW,iBAEb4qF,UAASiG,GAAuBhD,GAElC,EAEJqE,mBAAoB,WAClB,MAAMxH,EAAiBzB,EAAcwB,KAAKvoF,MAE1C,MAAO,CACL,CACE4nF,SAAU,QACV3zE,OAAQ,CACNtB,MAAO,QACP81E,WAAY,CAAED,GACdrpF,MAAO,CAAEgJ,MAAO,MAElBkrC,KAAM,CAAEo1C,WAAY,CAChBrkF,EAAAA,GACA,CAACiF,EAAOu/E,KACN,IAAIjwF,EAAMiwF,EAAgB9kE,QAAQmsE,kBAElC,OAAOpyF,EAAAA,cAAA,KAAG6D,KAAM/I,EAAKwF,OAAO,UAAUkL,EAAU,IAGtDq/E,SAAS,GAEX,CACEd,SAAU,gBACV3zE,OAAQ,CACNtB,MAAO,gBACP81E,WAAY,CAAED,GACdrpF,MAAO,CAAEgJ,MAAO,MAElBkrC,KAAM,CAAEo1C,WAAY,CAACrkF,EAAAA,KACrBskF,SAAS,GAEX,CACEd,SAAU,WACV3zE,OAAQ,CACNtB,MAAO,WACP81E,WAAY,CAAED,GACdrpF,MAAO,CAAEgJ,MAAO,MAElBkrC,KAAM,CAAEo1C,WAAY,CAACrkF,EAAAA,KACrBskF,SAAS,GAEX,CACEd,SAAU,SACV3zE,OAAQ,CACNtB,MAAO,SACP81E,WAAY,CAACD,GACbrpF,MAAO,CAAEgJ,MAAO,MAElBkrC,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,GACA,CAACg6B,EAAQwqD,KAEP,MAAM93B,EAAO83B,EAAgB9kE,QAAQsa,OAGrC,OAAQ7hC,MAAMC,QAAQs0D,GAAQA,EAAO,IAAIxyD,KAAI,CAAC3F,EAAK8F,IAE/CZ,EAAAA,cAAA,KACExB,IAAKoC,EACLiD,KAAM/I,EACNwF,OAAO,SACPC,MAAO,CAAE,eAAiB,OAAMzF,MAChCmF,UAAU,eACV0nD,IAAI,uBACL,SACQ/mD,EAAQ,IAGnB,IAIRiqF,SAAS,GAEX,CACEd,SAAU,OACV3zE,OAAQ,CACNtB,MAAO,OACP81E,WAAY,CAAED,GACdrpF,MAAO,CAAEgJ,MAAO,MAElBkrC,KAAM,CAAEo1C,WAAY,CAACrkF,EAAAA,KACrBskF,SAAS,GAEX,CACEd,SAAU,aACV3zE,OAAQ,CACNtB,MAAO,aACP81E,WAAY,CAAED,GACdrpF,MAAO,CAAEgJ,MAAO,MAElBkrC,KAAM,CAAEo1C,WAAY,CAACrkF,EAAAA,KACrBskF,SAAS,GAGf,EAEAwH,SAAU,WACR,MAAM1H,EAAiBzB,EAAcwB,KAAKvoF,MAE1C,MAAO,CACL,CACE4nF,SAAU,qBACV3zE,OAAQ,CACNtB,MAAO,qBACP81E,WAAY,CAAED,IAEhBn1C,KAAM,CAAEo1C,WAAY,CAACrkF,EAAAA,KACrBskF,SAAS,GAEX,CACEd,SAAU,iBACV3zE,OAAQ,CACNtB,MAAO,iBACP81E,WAAY,CAAED,IAEhBn1C,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,GACA,CAACoF,EAAgBo/E,KACf,MAAM7/B,EAAY6/B,EAAgB9kE,QAAQqmC,sBAAwB,CAACp/C,MAAO,OAAS,CAAC,EACpF,OAAOlN,EAAAA,cAAA,KAAG6D,KAAM,GAAItD,MAAO2qD,EAAWtpD,QAASA,IAAMmpF,EAAgB9kE,QAAQskC,uBAAuBwgC,EAAgB9kE,QAAQsmC,sBAAuB5gD,EAAmB,IAI5Kk/E,SAAS,GAEX,CACEd,SAAU,sBACV3zE,OAAQ,CACNtB,MAAO,sBACP81E,WAAY,CAAED,IAEhBn1C,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,GACA,CAACkmD,EAAqBs+B,KACpB,GAAwB,IAArBt+B,EAAyB,CAC1B,IAAI+R,EACDusB,EAAgB9kE,QAAQknC,wCACzBqR,EAAwBx+D,EAAAA,cAAA,KAAGC,UAAU,qBAEvC,MAAMirD,EAAY6/B,EAAgB9kE,QAAQgnC,2BAA6B,CAAC//C,MAAO,OAAS,CAAC,EACzF,OAAOlN,EAAAA,cAAAA,EAAAA,SAAA,KAAEA,EAAAA,cAAA,KAAG6D,KAAM,GAAItD,MAAO2qD,EACjBtpD,QAASA,IAAMmpF,EAAgB9kE,QAAQulC,4BAA4Bu/B,EAAgB9kE,QAAQ6mC,2BAA4BL,GACxH+R,EACb,CACE,MAAO,EACT,IAINqsB,SAAS,GAEX,CACEd,SAAU,cACV3zE,OAAQ,CACNtB,MAAO,gBACP81E,WAAY,CAAED,IAEhBn1C,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,GACA,CAACk+C,EAAasmC,IACL/qF,EAAAA,cAAAA,EAAAA,SAAA,KAAGykD,KAIhBomC,SAAS,GAEX,CACEd,SAAU,cACV3zE,OAAQ,CACNtB,MAAO,cACP81E,WAAY,CAAED,IAEhBn1C,KAAM,CACJo1C,WAAY,CACVrkF,EAAAA,GACA,CAACmmD,EAAaq+B,IACTA,EAAgB9kE,QAAQ8mC,qBAClB/sD,EAAAA,cAAA,SAAOO,MAAO,CAAC2M,MAAO,QAASw/C,GAE/B1sD,EAAAA,cAAAA,EAAAA,SAAA,KAAG0sD,KAKlBm+B,SAAS,GAGf,G,4+BCv/Ga,MAAMv9B,UAAsBttD,EAAAA,UACzCgC,WAAAA,CAAYV,GACVW,MAAMX,GAENa,KAAKS,MAAQ,CACX6D,KAAMnF,EAAMmF,KACZ6rF,aAAc,MACd90F,MAAO,CAAC,EACR6rF,eAAgB/nF,EAAMixF,mBAAqB,CAAC,EAAG,CAACx7E,UAAWzV,EAAMixF,kBAAmBniF,SAAU,EAAGk5E,YAAahoF,EAAMkxF,oBACpHjrC,QAASplD,KAAKswF,aACdjL,WAAY,CACV30E,KAAM,EACN61E,QAAS,YAIbvmF,KAAKuwF,MAAQvwF,KAAKuwF,MAAM39E,KAAK5S,MAC7BA,KAAKwwF,cAAgBxwF,KAAKwwF,cAAc59E,KAAK5S,MAC7CA,KAAK2mF,eAAiB3mF,KAAK2mF,eAAe/zE,KAAK5S,MAC/CA,KAAK0mF,SAAW1mF,KAAK0mF,SAAS9zE,KAAK5S,MACnCA,KAAKulF,SAAWvlF,KAAKulF,SAAS3yE,KAAK5S,MACnCA,KAAKymF,UAAYzmF,KAAKymF,UAAU7zE,KAAK5S,MACrCA,KAAKywF,SAAWzwF,KAAKywF,SAAS79E,KAAK5S,MACnCA,KAAK0wF,eAAiB1wF,KAAK0wF,eAAe99E,KAAK5S,KACjD,CAEA+B,iBAAAA,GAQE,IAAK,MAAMioC,KAAMmF,EAAAA,YAAqBnvC,MAAMiqC,uBAAuB,kBACjED,EAAG2mD,QAAQ,MAAM1uF,iBAAiB,SAAUpG,IAC1CA,EAAMmX,iBAAiB,GAG7B,CAEAs9E,UAAAA,GACE,OAAOjI,EAAWroF,KAAKb,MAAMisD,WAAWm9B,KAAKvoF,KAC/C,CAEAutF,YAAAA,CAAaqD,EAAcC,GACzB,IAAIC,EAAiBF,EAAatyF,KAAIuJ,GAAOA,EAAIlJ,KAC7C2F,GAAOwmE,EAAAA,EAAAA,WAAU9qE,KAAKS,MAAM6D,MAAMhG,KAAIuJ,IACpCipF,EAAe3rF,SAAS0C,EAAIlJ,MAC9BkJ,EAAIqX,SAAW2xE,GAEVhpF,KAGT7H,KAAKO,SAAS,CAAE+D,QAClB,CAEA+oF,UAAAA,GACE,MAAA7sF,EAEIR,KAAKS,MADP2kD,EAAO5kD,EAAP4kD,QAAS9gD,EAAI9D,EAAJ8D,KAAM+gF,EAAU7kF,EAAV6kF,WAAY6B,EAAc1mF,EAAd0mF,eAA8B7rF,GAAFmF,EAAZ2vF,aAAmB3vF,EAALnF,OAErD00C,EAAOqV,EAAQzpD,QAAO6qF,GAAUA,EAAOkC,UAC7C,OAAOqI,EAAAA,EAAAA,ICjFI,UAAkB,KAAErgF,EAAI,QAAE61E,IACvC,MAAO,CAACjiF,EAAO,MAEb,MAAMuE,EAAI6H,EAAO,GAAK,EAEhBsgF,EAAgBvmF,KAAKwmF,KAAK3sF,EAAKpH,OAASqpF,GACxC2K,EAAYroF,EAAImoF,EAAgBnoF,EAAI,EAE1C,MAAO,CACLsoF,OAAQH,EACR1sF,KAAMA,EAAK6kB,MAAM+nE,EAAY3K,EAAU2K,EAAY3K,EAAWA,GAC9D71E,KAAMwgF,EACP,CAEL,CDoEME,CAAS/L,GACT3hF,EAAAA,GAAY,CAAE0hD,QAASrV,EAAMm3C,iBAAgBxjF,KAAM2tF,EAAAA,UACnDjtF,EAAAA,GAAmB,CAAEghD,QAASrV,EAAMuhD,QAASltF,EAAAA,GAAgB/I,UAC7D+I,EAAAA,GAAuB,CAAEghD,QAASrV,EAAM10C,UACxCk2F,EAAAA,GAAgB,CACdnsC,QAASrV,EACT9sB,OAASqnE,IAAUyG,EAAAA,EAAAA,IACjBQ,EAAAA,GAAmB,eAAnBA,CAAmCjH,GACnCiH,EAAAA,GAAejH,MATdyG,CAYLzsF,EACJ,CAEAlC,MAAAA,GACE,MAAApB,EAEIhB,KAAKS,MADP2kD,EAAOpkD,EAAPokD,QAAS9gD,EAAItD,EAAJsD,KAAM+gF,EAAUrkF,EAAVqkF,WAA4B8K,GAAFnvF,EAAdkmF,eAA4BlmF,EAAZmvF,cAAc90F,EAAK2F,EAAL3F,MAErD00C,EAAOqV,EACXzpD,QAAO6qF,GAAUA,EAAOkC,UACxBpqF,KAAIkoF,IACEA,GAAUA,EAAOoB,aAAe,eAAgBpB,IAAWA,EAAOqE,cACpErE,EAAOgL,kBAAoB,kBAEtBhL,KAELiL,EAAYzxF,KAAKqtF,aACjBqE,EAAkB1xF,KAAKb,MAAMwyF,mBAAqB,gBAClDC,EAAc5xF,KAAKb,MAAM0yF,cAAgB,qBAE/C,OACEh0F,EAAAA,cAAA,OAAKmQ,IAAKA,KAAQpW,OAAO85F,GAAmB1xF,IAAI,GAC7CA,KAAKb,MAAM2yF,oBACVj0F,EAAAA,cAACk0F,EAAAA,EAAiB,CAChB3sC,QAASA,EACTsrC,eAAgB1wF,KAAK0wF,iBAGzB7yF,EAAAA,cAACm0F,EAAe,CACdl0F,UAAU,WACVyoF,QAASlB,EAAWkB,QACpBC,OAAQ2J,EACR90F,MAAOA,EACP+pD,QAASrV,EACTzrC,KAAMA,EACNmiF,UAAWzmF,KAAKymF,UAChBE,eAAgB3mF,KAAK2mF,eACrBD,SAAU1mF,KAAK0mF,SACfE,gBAAiB5mF,KAAKb,MAAMynF,kBAG9B/oF,EAAAA,cAAA,OAAKC,UAAW8zF,GAChB/zF,EAAAA,cAACo0F,EAAAA,GAAc,CACbn0F,UAAU,gCACVsnD,QAASrV,EACT3xC,MAAO,CAAE8zF,UAAW,SAEpBr0F,EAAAA,cAACo0F,EAAAA,GAAY,CACXtzF,GAAI+yF,GAEJ7zF,EAAAA,cAACuG,EAAAA,EAAc,CAAC/I,MAAOA,EAAO+pD,QAASrV,EAAM9xC,SAAU+B,KAAK0mF,YAG9D7oF,EAAAA,cAACo0F,EAAAA,GAAU,CACT1B,MAAOvwF,KAAKuwF,MACZjsF,KAAMmtF,EAAUntF,KAChB6tF,OAAO,OAGTt0F,EAAAA,cAACu0F,EAAY,CAAChtC,QAASrV,EAAMzrC,KAAMmtF,EAAUntF,SAI/CzG,EAAAA,cAAA,OAAKC,UAAU,YACZkC,KAAKb,MAAMynF,iBACV/oF,EAAAA,cAACunF,EAAS,CACRC,WAAYA,EACZC,MAAOmM,EAAUN,OACjB5L,SAAUvlF,KAAKulF,YAM3B,CACAgL,KAAAA,CAAM1oF,GAAK,SAAE8qC,IACX,MAAO,CACL70C,UAAW+J,EAAIwqF,UACf,cAAgBryF,KAAKb,MAAMmzF,WAC3B7yF,QAASA,IAAMO,KAAKwwF,cAAc3oF,GAEtC,CACA2oF,aAAAA,CAAc3oF,GACZ,CAEF8+E,cAAAA,CAAewJ,GACbnwF,KAAKO,SAAS,CACZ4vF,gBAEJ,CACAzJ,QAAAA,CAASrrF,GACP2E,KAAKO,SAAS,CACZlF,SAEJ,CACAkqF,QAAAA,CAAS70E,GACP,MAAM40E,EAAQ76E,KAAKwmF,KACjBjxF,KAAKS,MAAM6D,KAAKpH,OAAS8C,KAAKS,MAAM4kF,WAAWkB,SAGjDvmF,KAAKO,SAAS,CACZ8kF,WAAU3sF,EAAAA,EAAA,GACLsH,KAAKS,MAAM4kF,YAAU,IACxB30E,KAAMjG,KAAK8nF,IAAI9nF,KAAKoQ,IAAInK,EAAM,GAAI40E,MAGxC,CACAmB,SAAAA,CAAUp+E,GACRrI,KAAKO,SAAS,CACZ8kF,WAAU3sF,EAAAA,EAAA,GACLsH,KAAKS,MAAM4kF,YAAU,IACxBkB,QAASrtE,SAAS7Q,EAAO,OAG/B,CACAooF,QAAAA,CAAS9xF,GACP,MAAM2F,GAAOwmE,EAAAA,EAAAA,WAAU9qE,KAAKS,MAAM6D,MAC5B0lD,GAAM5J,EAAAA,EAAAA,WAAU97C,EAAM,CAAE3F,OAG9B2F,EAAK4uD,OAAOlJ,EAAK,GAEjBhqD,KAAKO,SAAS,CAAE+D,QAClB,CACAosF,cAAAA,EAAe,YAAE79C,IACf,MAAMuS,GAAU0lB,EAAAA,EAAAA,WAAU9qE,KAAKS,MAAM2kD,SAC/BohC,EAASphC,EAAQvS,GAEvB2zC,EAAOkC,SAAWlC,EAAOkC,QAEzB,MAAMrtF,GAAQyvE,EAAAA,EAAAA,WAAU9qE,KAAKS,MAAMpF,cAC5BA,EAAMmrF,EAAOoB,UAEpB5nF,KAAKO,SAAS,CAAE6kD,UAAS/pD,SAC3B,EAGF,MAAM+2F,EAAeA,EAAGhtC,UAAS9gD,UAE7BzG,EAAAA,cAAA,aACAA,EAAAA,cAAA,UACGunD,EAAQ9mD,KAAI,CAACkoF,EAAQvpF,IACpBY,EAAAA,cAAA,MAAIxB,IAAM,UAASY,KAAMupF,EAAOgM,OAAShM,EAAOgM,OAAOluF,GAAQ,S,6HElOvE,MA6BA,EA7B6BmuF,EAC3BrgE,MACA3yB,UACAD,WACA0V,UACAlL,cACAwsB,qBAGE34B,EAAAA,cAAA,MAAIC,UAAc4B,EAAW,kBAAmB,wBAA0BD,QAAYA,GACpF5B,EAAAA,cAAA,MAAIC,UAAY,mBAAmBM,MAAO,CAAC8P,OAAQ,YACrC,UAAXgH,EACGlL,GAAa+8B,sBAAwBlpC,EAAAA,cAAA,KAAG4B,QAASA,IAAM+2B,EAAgBpE,GAAMt0B,UAAY,eAAeM,MAAO,CAAC8P,OAAQ,YAAa,OACrIlE,GAAa0oF,uBAAyB70F,EAAAA,cAAA,KAAG6D,KAAO,qBAAoB0wB,EAAIzzB,KAAMb,UAAY,gBAAgB,SAGhHD,EAAAA,cAAA,MAAIO,MAAO,CAAC8P,OAAQ,YAChBkkB,EAAI+B,UAAUj3B,OAAS,GACvBW,EAAAA,cAAA,OAAKuM,IAAKgoB,EAAI+B,UAAUj3B,OAAS,EAAIwoC,EAAgBC,EAAgBz1B,OAAO,KAAK/H,MAAM,QAG3FtK,EAAAA,cAAA,MAAIC,UAAY,QAAQM,MAAO,CAAC8P,OAAQ,UAAW+lB,WAAY,iBAC7Dp2B,EAAAA,cAAA,SAAGA,EAAAA,cAAA,UAAIy+B,EAAAA,EAAAA,WAAUlK,EAAI4M,OAAU,KAAG5M,EAAI9xB,OAExCzC,EAAAA,cAAA,MAAIC,UAAY,QAAQ,IAAG0B,EAAU,M,28CCxB3C,MAAMmzF,EAAmBA,EAAGvgE,MAAKwgE,oBAC/B/0F,EAAAA,cAACg1F,EAAW,CACVxpF,MAAM,+BACN+oB,IAAKA,EACL0gE,YAAaF,GAEb/0F,EAAAA,cAAA,SAAGA,EAAAA,cAAA,SAAG,gBACNA,EAAAA,cAAA,SAAIu0B,EAAIrlB,cAGNgmF,EAAmBA,EAAE3gE,UACzB,GAA6B,IAAzBA,EAAI+B,UAAUj3B,OAChB,OAAOW,EAAAA,cAAA,SAAG,sDACL,GAA6B,IAAzBu0B,EAAI+B,UAAUj3B,OACvB,OAAOW,EAAAA,cAAA,SAAG,oEACL,CACL,MAAMm1F,EAAe5gE,EAAI+B,UAAU71B,KAAK0D,IACtC,MAAMoyB,EAAqBhC,EAAI6gE,oCAAoC30F,KAAIo1B,GAAQ1xB,EAASkxF,oBAAoBl6E,MAAKqb,GAAMA,EAAG11B,KAAO+0B,EAAKc,0BAAwB74B,QAAOu/E,GAAKA,IAC1K,OACEr9E,EAAAA,cAAA,MAAIxB,IAAK2F,EAASrD,IAChBd,EAAAA,cAAA,MAAIO,MAAO,CAACmjB,OAAQ,iBAAkB0S,WAAY,WAChDp2B,EAAAA,cAAA,KAAG6D,KAAO,aAAYM,EAASujD,uCAAuCnzB,EAAIloB,MAAOzK,QAAUvB,IAAQA,EAAE8U,mBAA0B,IAC7HnV,EAAAA,cAAA,KAAG2mB,wBAAyB,CAACC,OAAQziB,EAASqH,WAGlDxL,EAAAA,cAAA,MAAIO,MAAO,CAACmjB,OAAQ,iBAAkB0S,WAAY,SAAUrxB,WAAY,SACtE/E,EAAAA,cAAA,UACIu2B,EAAmB91B,KAAK+1B,GAASx2B,EAAAA,cAAA,MAAIxB,IAAKg4B,EAAG11B,IAAI,IAAE01B,EAAG/zB,KAAK,SAGjEzC,EAAAA,cAAA,MAAIO,MAAO,CAACmjB,OAAQ,iBAAkB0S,WAAY,WAAW,IAAEjyB,EAASmxF,WAAW,KACnFt1F,EAAAA,cAAA,MAAIO,MAAO,CAACmjB,OAAQ,iBAAkB0S,WAAY,WAAW,IAAEjyB,EAASoxF,mBAAmB,KAC3Fv1F,EAAAA,cAAA,MAAIO,MAAO,CAACmjB,OAAQ,iBAAkB0S,WAAY,WAAW,IAAEjyB,EAASqgD,qBAAqB,KAC7FxkD,EAAAA,cAAA,MAAIO,MAAO,CAACmjB,OAAQ,iBAAkB0S,WAAY,WAAW,IAAEjyB,EAASqxF,QAAQ,KAChFx1F,EAAAA,cAAA,MAAIO,MAAO,CAACmjB,OAAQ,iBAAkB0S,WAAY,WAAW,IAAEjyB,EAASsxF,oBAAoB,KAC5Fz1F,EAAAA,cAAA,MAAIO,MAAO,CAACmjB,OAAQ,iBAAkB0S,WAAY,WAAW,IAAEjyB,EAASwkB,gBAAgB,KACxF3oB,EAAAA,cAAA,MAAIO,MAAO,CAACmjB,OAAQ,iBAAkB0S,WAAY,WAAW,IAAEjyB,EAASuxF,qBAAqB,KAC7F11F,EAAAA,cAAA,MAAIO,MAAO,CAACmjB,OAAQ,iBAAkB0S,WAAY,WAAW,IAAEjyB,EAASwxF,iBAAiB,KACtF,IAIT,OACE31F,EAAAA,cAAA,aACEA,EAAAA,cAAA,aACEA,EAAAA,cAAA,MAAIO,MAAO,CAACmjB,OAAQ,mBAClB1jB,EAAAA,cAAA,MAAIO,MAAO,CAACmjB,OAAQ,iBAAkB0S,WAAY,WAAW,eAC7Dp2B,EAAAA,cAAA,MAAIO,MAAO,CAACmjB,OAAQ,iBAAkB0S,WAAY,SAAU9rB,MAAO,QAAQ,uBAC3EtK,EAAAA,cAAA,MAAIO,MAAO,CAACmjB,OAAQ,iBAAkB0S,WAAY,WAAW,QAC7Dp2B,EAAAA,cAAA,MAAIO,MAAO,CAACmjB,OAAQ,iBAAkB0S,WAAY,WAAW,uBAC7Dp2B,EAAAA,cAAA,MAAIO,MAAO,CAACmjB,OAAQ,iBAAkB0S,WAAY,WAAW,wBAC7Dp2B,EAAAA,cAAA,MAAIO,MAAO,CAACmjB,OAAQ,iBAAkB0S,WAAY,WAAW,WAC7Dp2B,EAAAA,cAAA,MAAIO,MAAO,CAACmjB,OAAQ,iBAAkB0S,WAAY,WAAW,uBAC7Dp2B,EAAAA,cAAA,MAAIO,MAAO,CAACmjB,OAAQ,iBAAkB0S,WAAY,WAAW,oBAC7Dp2B,EAAAA,cAAA,MAAIO,MAAO,CAACmjB,OAAQ,iBAAkB0S,WAAY,WAAW,yBAC7Dp2B,EAAAA,cAAA,MAAIO,MAAO,CAACmjB,OAAQ,iBAAkB0S,WAAY,WAAW,oBAE9D++D,GAIT,GAGIH,EAAcA,EAAExpF,QAAO+oB,MAAK0gE,cAAatzF,eAC7C,MAAMi0F,EAAiC3/D,EAAAA,GAASO,GAAMA,EAAG11B,IAAIyzB,EAAI+B,UAAUk1C,SAAQrnE,GAAYA,EAASkxF,uBAClGQ,EAAyBthE,EAAI6gE,oCAAoC30F,KAAIo1B,GAAQ+/D,EAA+Bz6E,MAAKqb,GAAMA,EAAG11B,KAAO+0B,EAAKc,0BAAwB74B,QAAOu/E,GAAKA,IAEhL,OACEr9E,EAAAA,cAAC8iB,EAAAA,EAAQ,CAACC,MAAI,GACZ/iB,EAAAA,cAAA,OAAKC,UAAU,yCACbD,EAAAA,cAAA,OAAKO,MAAO,CAACi7D,SAAU,OAAQ16C,cAAe,QAC5C9gB,EAAAA,cAAA,UAAQO,MAAO,CAAC8E,MAAO,SAAUzD,QAASqzF,GAAa,MAEzDj1F,EAAAA,cAAA,OAAKO,MAAO,CAACa,gBAAiB,UAAWiJ,QAAS,SAChDrK,EAAAA,cAAA,MAAIO,MAAO,CAAC2M,MAAO,OAAQvM,UAAW,SAAUwxD,SAAU,MAAO3mD,GACjExL,EAAAA,cAAA,OAAKO,MAAO,CAAC6E,OAAQ,SACnBpF,EAAAA,cAACioB,EAAAA,EAAS,CACRxlB,KAAM,SACNoB,KAAO,qBAAoB0wB,EAAIzzB,sBAC/Bb,UAAW,kBAIjBD,EAAAA,cAAA,OAAKO,MAAO,CAAC2M,MAAO,OAAQ9L,gBAAiB,OAAQT,UAAW,OAAQqE,QAAS,QAC/EhF,EAAAA,cAAA,WAAKy+B,EAAAA,EAAAA,WAAUlK,EAAI4M,MAAM,KAAG5M,EAAI9xB,OAElCzC,EAAAA,cAAA,OAAKO,MAAO,CAACyE,QAAS,QACpBhF,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,kBAAuB,IAAEu0B,EAAI8B,eAAe5zB,KAAK,KAC5DzC,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,gBAAqB,IAAEu0B,EAAI+B,UAAU,IAAI9qB,MAAM,KAC1DxL,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,+BACXA,EAAAA,cAAA,UACI61F,EAAuBp1F,KAAK+1B,GAASx2B,EAAAA,cAAA,MAAIxB,IAAKg4B,EAAG11B,IAAId,EAAAA,cAAA,KAAGO,MAAO,CAAC61B,WAAY,WAAYI,EAAG/zB,WAG9Fd,EACH3B,EAAAA,cAAA,OAAKO,MAAO,CAACI,UAAW,WACtBX,EAAAA,cAAA,UAAQ4B,QAASqzF,GAAa,WAGzB,EAITa,EAAiBA,EAAGvhE,MAAKwhE,yBAC7B/1F,EAAAA,cAACg1F,EAAW,CACVxpF,MAAM,oDACN+oB,IAAKA,EACL0gE,YAAac,GAEb/1F,EAAAA,cAACk1F,EAAgB,CAAC3gE,IAAKA,KAmC3B,EAhC8Bk0D,IAKvB,IAJLl0D,EAAGk0D,EAAHl0D,IACAld,EAAOoxE,EAAPpxE,QACAlL,EAAWs8E,EAAXt8E,YACG7K,EAAK0nF,EAAAP,EAAAQ,GAER,MAAyD7sF,EAAAC,GAAfC,EAAAA,EAAAA,WAAS,GAAM,GAAlD05F,EAAa55F,EAAA,GAAE65F,EAAgB75F,EAAA,GAG6BK,EAAAJ,GAAfC,EAAAA,EAAAA,WAAS,GAAM,GAA5D45F,EAAkBz5F,EAAA,GAAE05F,EAAqB15F,EAAA,GAGhD,OACEuD,EAAAA,cAAC40F,EAAoBv2F,OAAAia,OAAA,GAAKhX,EAAK,CAAOizB,MAAKld,UAASlL,gBAClDnM,EAAAA,cAAA,UACEA,EAAAA,cAAA,UACEA,EAAAA,cAAA,KAAG4B,QAASA,IAAMq0F,GAAiB,IAAO,gBAI5Cj2F,EAAAA,cAAA,UACEA,EAAAA,cAAA,KAAG4B,QAASA,IAAMu0F,GAAsB,IAAO,UAKlDH,GAAiBh2F,EAAAA,cAAC80F,EAAgB,CAAMvgE,MAAKwgE,eAnB3BA,IAAMkB,GAAiB,KAoBzCC,GAAsBl2F,EAAAA,cAAC81F,EAAc,CAAMvhE,MAAKwhE,oBAjBzBA,IAAMI,GAAsB,KAkB/B,ECjJdC,EAA6B,CACxCp0E,SAAS,oBACTqC,SAAUA,IAAMrkB,EAAAA,cAACq2F,EAAqB,CAAC9hE,IAAKA,IAAK/1B,IAAK+1B,IAAIzzB,KAC1Dsf,kBAAkB,EAClB7Z,QAAO,EACP4c,YAAY,GC4Bd,EAtB2B4V,EACzB1hB,UACA2K,WACArK,sBACAghB,kBACAxsB,iBAGEnM,EAAAA,cAAA,OAAKC,UAAY,iBACfD,EAAAA,cAACwX,EAAAA,EAAOnZ,OAAAia,OAAA,CACNjB,QAAQ,KACRyM,eAAa,EACb7D,oBAAkB,GACbm2E,EAA0B,CACxBz+E,sBAAqBqK,WAC5BxB,YAvBNxgB,EAAAA,cAAA,MAAIC,UAAY,6BAA6BM,MAAS,CAAC8R,OAAQ,OAAQrN,QAAS,QAC9EhF,EAAAA,cAAA,MAAIO,MAAS,CAAC+J,MAAO,OAAQtF,QAAS,SACtChF,EAAAA,cAAA,MAAIO,MAAS,CAAC+J,MAAO,QAAStF,QAAS,SACvChF,EAAAA,cAAA,MAAIO,MAAS,CAAC+J,MAAO,OAAQtF,QAAS,SACtChF,EAAAA,cAAA,MAAIO,MAAS,CAAC+J,MAAO,QAAStF,QAAS,UAoBnCqf,SAAakQ,GAAQv0B,EAAAA,cAACq2F,EAAqB,CAAQ9hE,MAAKld,UAASshB,kBAAiBxsB,cAAe3N,IAAS,OAAM+1B,EAAIzzB,U,2pCCnB5H,MAAMw1F,EAAY,CAChB,CAAC,SAAU,MACX,CAAC,OAAQ,UACT,CAAC,YAAa,KACd,CAAC,cAAe,OAChB,CAAC,YAAa,OACd,CAAC,OAAQ,QACT,CAAC,eAAgB,QAGZ,SAASC,EAAeC,EAAgDC,GAA6B,GAC1G,OAAOD,EAAgB/1F,KAAKmrB,IAC1B,OAAQA,EAAK1rB,MACX,IAAK,OACH,MAAQ,YAAW0rB,EAAK9wB,wBAAwBy7F,EAAe3qE,EAAKpgB,MAAOirF,SAC7E,IAAK,QACH,MAAQ,sBAAqB7qE,EAAK+B,aAAa4oE,EAAe3qE,EAAKvV,QAASogF,YAC9E,IAAK,OACH,OAuJ6BC,EAvJM9qE,EAAKvV,UAwJ7BqgF,EACd9xF,QAAQ,KAAM,SACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,QA1Jb,IAAK,kBAEL,IAAK,qBACH,OAAO6xF,EAAqB,yDAAwD7qE,EAAK1e,kBAAkBqpF,EAAe3qE,EAAKvV,kBAAoBkgF,EAAe3qE,EAAKvV,QAASogF,GAClL,IAAK,cACL,IAAK,aACL,IAAK,eACH,OAAOA,EAAqB,wFAAuF7qE,EAAK1e,YAAYqpF,EAAe3qE,EAAKvV,kBAAoBkgF,EAAe3qE,EAAKvV,QAASogF,GAC3M,IAAK,iBACL,IAAK,eACH,OAAOA,EAAqB,yCAAwC7qE,EAAK1e,oCAAoCqpF,EAAe3qE,EAAKvV,iBAAmB,GACtJ,IAAK,cACL,IAAK,gBACH,OAAOogF,EAAqB,8CAA6C7qE,EAAK1e,YAAYqpF,EAAe3qE,EAAKvV,kBAAoBkgF,EAAe3qE,EAAKvV,QAASogF,GACjK,IAAK,YACH,OAAOA,EAAqB,iDAAgDzoD,EAAAA,GAAmCpiB,EAAKvV,SAAS,YAAiB,GAChJ,QACE,MAAMsgF,EAAUL,EAAUn7E,MAAMw7E,GACvBA,EAAQ,KAAO/qE,EAAK1rB,OAG7B,GAAIy2F,EAAS,CACX,MAAAC,EAAAv6F,EAA0Bs6F,EAAO,GAApBE,GAAFD,EAAA,GAAWA,EAAA,IACtB,MAAQ,IAAGC,KAAaN,EAAe3qE,EAAKvV,QAASogF,OAAuBI,IAC9E,CACE,MAAO,GA6HjB,IAAqCH,CA3HjC,IACCnnE,KAAK,GACV,CA0BO,SAASunE,EAAaC,GAI3B,OAAOC,GAHQ,IAAIC,WACIC,gBAAgBH,EAAY,aAEX9rE,KAAKksE,WAC/C,CAEA,SAASH,EAAyBI,GA+ChC,MA9CmB,IAAIA,GAAU5rB,SAAS5/C,IACxC,OAAQA,EAAKwF,UACX,KAAKimE,KAAKC,UACR,MAAQ,CACNp3F,KAAM,OACNmM,KAAK09B,EAAAA,EAAAA,KACL1zB,QAASuV,EAAKmZ,aAAe,IAGjC,KAAKsyD,KAAKE,aAER,IAgHD,SAAmB3rE,GAA+B,OAAyB,IAAlBA,EAAKwF,QAAgB,CAhHxEomE,CAAU5rE,GAAQ,OAAO,KAE9B,MAAM6rE,EArCd,SAA6BC,GAC3B,OAAQA,GACN,IAAK,KACH,MAAO,SACT,IAAK,SACH,MAAO,OACT,IAAK,IACH,MAAO,YACT,IAAK,MACH,MAAO,cACT,IAAK,MACH,MAAO,YAGb,CAuB2BC,CAAoB/rE,EAAK8rE,UAC5C,OAAID,EACM,CACNv3F,KAAMu3F,EACNprF,KAAK09B,EAAAA,EAAAA,KACL1zB,QAAS2gF,EAAyBprE,EAAKurE,aAIrB,MAAlBvrE,EAAK8rE,SACC,CACNx3F,KAAM,OACNmM,KAAK09B,EAAAA,EAAAA,KACLv+B,MAAOwrF,EAAyBprE,EAAKurE,YACrCr8F,IAAK8wB,EAAKgsE,aAAa,SAAW,IAIhB,SAAlBhsE,EAAK8rE,UAAuB9rE,aAAgB43D,aAAeqU,EAAQjsE,EAAKrrB,MAAM2M,QAA6B,KAAnB0e,EAAK3rB,UACvF,CACNC,KAAM,QACNmM,KAAK09B,EAAAA,EAAAA,KACL1zB,QAAS2gF,EAAyBprE,EAAKurE,YACvCxpE,QAASkqE,EAAQjsE,EAAKrrB,MAAM2M,QAAU,IAInC8pF,EAAyBprE,EAAKurE,YACvC,QACE,OAAO,KACX,IACCr5F,OAAOg6F,EAGZ,CAEA,SAASD,EAAQE,GACf,MAAMttE,EAAQstE,EAAIttE,MAAM,oCAExB,OAAIA,EACM,IAAGA,EAAMa,MAAM,GAAG7qB,KAAI48E,GAAKhiE,SAASgiE,EAAG,IAAI15E,SAAS,IAAIgyD,SAAS,EAAG,OAAMpmC,KAAK,MAEhF,IAEX,CAqCO,SAASyoE,EAA4BpsE,EAAqC6qE,GAAoB,GACnG,OAAOwB,EAAAA,EAAAA,IAAiBrsE,GAAOssE,KACHrsE,EAAAA,EAAAA,IAAsBqsE,GAE9Bn5F,SAASotB,IACzB,IAAIgsE,EAAgBD,EAAU/rE,IAE1B8Y,EAAAA,EAAAA,IAAkBkzD,KACpBA,EAAgBt0D,EAAAA,GAAuCs0D,IAGrDA,IAAiBplD,EAAAA,EAAAA,IAAiBolD,KAEb,aAAnBD,EAAUh4F,OAAuB6yC,EAAAA,EAAAA,IAAiBolD,GACpDD,EAAU/rE,GAAcoqE,EAAe4B,GAAe,GAEtDD,EAAU/rE,GAAc+rE,EAAU/rE,GAAY1rB,KAAK23F,GAAsBJ,EAA4BI,EAAmB3B,KAE5H,IAGKyB,IAEX,CAQA,SAASJ,EAAiBttF,GACxB,OAAiB,OAAVA,QAA4BzK,IAAVyK,CAC3B,C,iFCvNO,SAAS+rF,EAAeC,EAAiB6B,GAAa,GAC3D,OAAO7B,EAAgB/1F,KAAKmrB,IAC1B,OAAQA,EAAK1rB,MACX,IAAK,OACH,OAAOq2F,EAAe3qE,EAAKpgB,MAAO6sF,GACpC,IAAK,OACH,OAAOzsE,EAAKvV,QACd,IAAK,YACH,OAAOgiF,EAAe9B,EAAe3qE,EAAKvV,QAASgiF,GAAgB,GACrE,QACE,OAAO9B,EAAe3qE,EAAKvV,QAASgiF,GACxC,IACC9oE,KAAK,GACV,CAgBO,SAAS+oE,EAAYC,GAC1B,OAAItzD,EAAAA,EAAAA,IAAkBszD,GACb10D,EAAAA,GAAsC00D,IACpCxlD,EAAAA,EAAAA,IAAiBwlD,GACnBhC,EAAegC,GACS,kBAAfA,EAnBb,SAAkBr2E,GACvB,MAAMs2E,EAAUr0F,SAAS0mB,cAAc,OAEvC,OADA2tE,EAAQC,UAAYv2E,EACbs2E,EAAQzzD,aAAeyzD,EAAQE,WAAa,EACrD,CAgBWC,CAASJ,GAET,EAEX,C,0nCCrBA,SAASK,EAAoBC,GAC3B,OAAOA,EAAgBt6F,QAAO,CAAC4Z,EAAcyT,KAC3C,MAAMktE,EAAej+F,EAAA,GAAOsd,GAC5B,GACO,SADCyT,EAAK1rB,KAET44F,EAAgBxuE,MAAQsB,EAAKvV,QAC7ByiF,EAAgBz5F,QAAUusB,EAAKvV,QAAQhX,WAEzC,CACE,MAAM05F,EAAaH,EAAkC,SAAdhtE,EAAK1rB,KAAkB0rB,EAAKpgB,MAAQogB,EAAKvV,SAE1E2iF,EAAW,CACf94F,KAAM0rB,EAAK1rB,KACXyjC,MAAO,CACLzX,MAAO,EACPE,IAAK2sE,EAAW15F,SAIdquB,GAAOurE,EAAAA,EAAAA,MAAKrtE,EAAM,CAAC,OAAQ,UAAW,QAAS,SACjDttB,EAAAA,EAAAA,MAAKovB,GAAMruB,OAAS,IACtB25F,EAAStrE,KAAOA,GAGlB,MAAMie,EAAY,CAACqtD,GAAUtoF,OAAOqoF,EAAWhsE,aAAatsB,KAAKy4F,IAC/D,MAAMC,EAAat+F,EAAA,GAAOq+F,GAK1B,OAHAC,EAAcx1D,MAAMzX,OAAS/T,EAAa9Y,OAC1C85F,EAAcx1D,MAAMvX,KAAOjU,EAAa9Y,OAEjC85F,CAAa,IAGtBL,EAAgBxuE,MAAQyuE,EAAWzuE,KACnCwuE,EAAgBz5F,QAAU05F,EAAW15F,OACrCy5F,EAAgB/rE,YAAc+rE,EAAgB/rE,YAAYrc,OAAOi7B,EAAU,CAG/E,OAAOmtD,CAAe,GACrB,CAACxuE,KAAM,GAAIyC,YAAa,GAAI1tB,OAAQ,GACzC,CAEO,SAASy3F,EAAasC,EAAat1D,EAAc,CAAC,GACvD,MACExZ,EAGE8uE,EAHF9uE,KAAI+uE,EAGFD,EAFF51D,sBAAAA,OAAqB,IAAA61D,EAAG,GAAEA,EAAAC,EAExBF,EADFjrB,uBAAAA,OAAsB,IAAAmrB,EAAG,GAAEA,EAG7B,IAAIC,EAAiBH,EAAYrsE,YAMjC,GAJIyW,EAAsBnkC,OAAS,IACjCk6F,EAAiBA,EAAe7oF,OAAO8yB,IAGrC2qC,EAAuB9uE,OAAS,EAAG,CACrC,MAAMm6F,EAAkCrrB,EAAuB1tE,KAAKg5F,IAClE,MAAMvsF,EAAQ42B,EAAY21D,EAAsBtmD,YAAc,CAAC,IAAI,EAAE,GAErE,OAAAt4C,EAAAA,EAAA,GACK4+F,GAAqB,IACxB/rE,KAAI7yB,EAAAA,EAAA,GACC4+F,EAAsB/rE,MAAI,IAC7BxgB,WACD,IAGLqsF,EAAiBA,EAAe7oF,OAAO8oF,EACzC,CAEA,GAAIJ,EAAYM,gBAAiB,CAC/B,MAAMC,EAA0BP,EAAYM,gBAAgBj5F,KAAKm5F,IACxD,CACL15F,KAAM,kBACNyjC,MAAOi2D,EAAej2D,MACtBjW,KAAM,CACJxgB,MAAO,CAAC,EAAE,EAAE,UAIlBqsF,EAAiBA,EAAe7oF,OAAOipF,EACzC,CAEA,MAAME,GAAeC,EAAAA,EAAAA,IAA2BP,GAE1CQ,EAAeF,EAAat7F,QAAO,CAAC4Z,EAAc6hF,EAAeC,KACrE,MAAMC,EAAgBC,EAAAA,GAAiChiF,EAAaiiF,YAAajiF,EAAakiF,gBAAgBh7F,QAE1G8Y,EAAamiF,cAAgBN,EAAcr2D,MAAMzX,QACnDguE,EAAct7F,KAAK,CACjBsB,KAAM,OACNmW,QAASiU,EAAKgB,MAAMnT,EAAamiF,cAAeN,EAAcr2D,MAAMzX,SAEtE/T,EAAamiF,cAAgBN,EAAcr2D,MAAMzX,OAGnDguE,EAAct7F,KAAK27F,EAA6BP,IAChD7hF,EAAakiF,gBAAgBz7F,KAAKo7F,GAElC,MAAMQ,EAAcX,EAAaI,EAAqB,GACtD,IAAIQ,GAASC,EAAAA,EAAAA,OAAMviF,EAAakiF,iBAAkBM,GAAoBA,EAAWh3D,MAAMvX,MACvF,KAAOquE,KAAYD,GAAeC,EAAO92D,MAAMvX,KAAOouE,EAAY72D,MAAMzX,QAAQ,CAC9E,GAAI/T,EAAamiF,cAAgBG,EAAO92D,MAAMvX,IAAK,CACjD,MAAMwuE,EAAkBT,EAAAA,GAA8BhiF,EAAaiiF,YAAajiF,EAAakiF,gBAAgBh7F,OAAS,GACtH86F,EAAAA,GAAgCS,EAAiBtwE,EAAKgB,MAAMnT,EAAamiF,cAAeG,EAAO92D,MAAMvX,MACrGjU,EAAamiF,cAAgBG,EAAO92D,MAAMvX,GAC5C,CAEA,MAAMyuE,GAAkBt4C,EAAAA,EAAAA,WAAUpqC,EAAakiF,iBAAkBM,GAAqBA,EAAWh3D,MAAMvX,KAAOquE,EAAO92D,MAAMvX,MACrH0uE,GAAiCh9F,EAAAA,EAAAA,QAAOqa,EAAakiF,iBAAkBM,GAAgBA,EAAWh3D,MAAMvX,IAAMquE,EAAO92D,MAAMvX,MAG3H2uE,GADuBD,EAA+BxvE,MAAM,EAAGuvE,GACxCC,EAA+BxvE,MAAMuvE,IAElE,GAAIE,EAAqB17F,OAAS,EAAG,CACV86F,EAAAA,GAAiChiF,EAAaiiF,YAAaS,GAEnEj8F,KAAKo8F,EAA2BD,GACnD,CAEA5iF,EAAakiF,gBAAkBS,EAE/BL,GAASC,EAAAA,EAAAA,OAAMviF,EAAakiF,iBAAkBM,GAAeA,EAAWh3D,MAAMvX,KAChF,CAEA,OAAOjU,CAAY,GAClB,CACDiiF,YAAa,GACbE,cAAe,EACfD,gBAAiB,KAUnB,OAPIN,EAAaO,cAAgBhwE,EAAKjrB,QACpC06F,EAAaK,YAAYx7F,KAAK,CAC5BsB,KAAM,OACNmW,QAASiU,EAAKgB,MAAMyuE,EAAaO,iBAI9BP,EAAaK,WACtB,CAEO,SAASa,EAAO7B,EAAat1D,EAAc,CAAC,GACjD,OAAOoB,EAAAA,GAA8B4xD,EAAasC,EAAat1D,GACjE,CAEO,SAASo3D,EAAY9B,EAAat1D,EAAc,CAAC,GACtD,OAAOkK,EAAAA,GAAmC8oD,EAAasC,EAAat1D,GACtE,CAEA,SAASk3D,EAA2BX,GAClC,GAAIA,EAAgBh7F,OAAS,EAAG,CAC9B,MAAM87F,EAAcZ,EAA6BF,EAAgB,IAEjE,GAAIA,EAAgBh7F,OAAS,EAAG,CAC9B,MAAMgX,EAAU2kF,EAA2BX,EAAgB/uE,MAAM,IAEjE,GACO,SADC6vE,EAAYj7F,KAEhBi7F,EAAY3vF,MAAQ,CAAC6K,QAGrB8kF,EAAY9kF,QAAU,CAACA,EAE7B,CAEA,OAAO8kF,CACT,CACE,OAAO,IAEX,CAEA,SAASZ,EAA6BY,GACpC,MAAMf,EAAWv/F,EAAA,CACfqF,KAAMi7F,EAAYj7F,MACfi7F,EAAYztE,MAGjB,GACO,SADCytE,EAAYj7F,KAEhBk6F,EAAY5uF,MAAQ,QAGpB4uF,EAAY/jF,QAAU,GAG1B,OAAO+jF,CACT,CAEO,SAAS7wB,EAAiC39C,GAC/C,OAAOqsE,EAAAA,EAAAA,IAAiBrsE,GAAOssE,KACHrsE,EAAAA,EAAAA,IAAsBqsE,GAE9Bn5F,SAASotB,IACzB,IAAIgsE,EAAgBD,EAAU/rE,GAvM7B,IAAwB0sE,GAyMrBuC,EAAAA,EAAAA,UAASjD,KACXA,EAAgBjzD,EAAAA,GAA4BizD,IAG1CA,KAAkBiD,EAAAA,EAAAA,UAASjD,EAAoB,QAE1B,aAAnBD,EAAUh4F,OAAuB6yC,EAAAA,EAAAA,IAAiBolD,GACpDD,EAAU/rE,IAhNW0sE,EAgNkBV,GA/MnCc,EAAAA,EAAAA,MAAKL,EAAoBC,GAAkB,WAChDwC,EAAAA,EAAAA,KAAoBpC,EAAAA,EAAAA,MAAKL,EAAoBC,GAAkB,YAgN9DX,EAAU/rE,GAAc+rE,EAAU/rE,GAAY1rB,KAAK23F,GAAsB7uB,EAAiC6uB,KAE9G,IAGKF,IAEX,C,2jCC1NA,MAAMoD,EClBN,gnGDkBuDz7F,MAAM,MACvD07F,EEnBN,0oDFmBqD17F,MAAM,MACrD27F,EGpBN,wjNHoB2D37F,MAAM,MAC3D47F,EIrBN,ooJJqB6C57F,MAAM,MAC7C67F,EKtBN,y3GLsBqD77F,MAAM,MACrD87F,EMvBN,k6FNuB2D97F,MAAM,MAEjE,SAAS+7F,IACPz5F,KAAK05F,YAAa,EAClB15F,KAAK25F,YAAa,EAClB35F,KAAK45F,YAAa,EAClB55F,KAAK65F,gBAAiB,CACxB,CAiFA,SAASC,IACT,CAMO,SAASC,IACd,OAAO,IAAID,CACb,CAuBA,SAASE,EAAWxyD,GAClBxnC,KAAKwnC,QAAUA,CACjB,CAIO,SAASyyD,EAAMzyD,GACpB,OAAO,IAAIwyD,EAAWxyD,EACxB,CAmCA,SAAS0yD,EAAiB1yD,EAASd,GACjCszD,EAAWzR,KAAKvoF,KAAMwnC,GACtBxnC,KAAK0mC,YAAcA,CACrB,CAIO,SAASyzD,EAAY3yD,EAASd,GACnC,OAAO,IAAIwzD,EAAiB1yD,EAASd,EACvC,CAmBA,SAAS0zD,IACPX,EAAQlR,KAAKvoF,MACbA,KAAKq6F,YAAc,EACrB,CAIA,SAASC,IACP,OAAO,IAAIF,CACb,CAIA,SAASG,IACPd,EAAQlR,KAAKvoF,MACbA,KAAKq6F,aAAc,CACrB,CAIA,SAASG,IACP,OAAO,IAAID,CACb,CAIA,SAASE,IACPhB,EAAQlR,KAAKvoF,MACbA,KAAKq6F,YAAc,CACrB,CAIA,SAASK,IACP,OAAO,IAAID,CACb,CAIA,SAASE,IACPlB,EAAQlR,KAAKvoF,MACbA,KAAKq6F,YAAc,CACrB,CAUA,SAASO,EAAatxF,GACpBmwF,EAAQlR,KAAKvoF,MACbA,KAAKsJ,QAAUA,EACftJ,KAAKq6F,YAAc,EACrB,CAsBO,SAASQ,EAAQvxF,GACtB,OAAO,IAAIsxF,EAAatxF,EAC1B,CAIA,SAASwxF,IACPrB,EAAQlR,KAAKvoF,MACbA,KAAKq6F,YAAc,CAAC,CACtB,CAIA,SAASU,IACP,OAAO,IAAID,CACb,CAIA,SAASE,EAAct0D,GACrB+yD,EAAQlR,KAAKvoF,MACbA,KAAKq6F,YAAc,CAAC,EACpBr6F,KAAK0mC,YAAcA,CACrB,CAyDA,SAASu0D,EAASv0D,GAChB,OAAO,IAAIs0D,EAAct0D,EAC3B,CAEA,SAASw0D,IACPzB,EAAQlR,KAAKvoF,MACbA,KAAKm7F,QAAU5+F,MAAM6+F,UAAUjyE,MAAMo/D,KAAK7+C,UAC5C,CAOA,SAAS2xD,KAAQ9vE,GAEf,OAAO,IAAI2vE,KAAa3+F,MAAM6+F,UAAUjyE,MAAMo/D,KAAKh9D,GACrD,CAEA,SAAS+vE,IACP7B,EAAQlR,KAAKvoF,MACbA,KAAKu7F,YAAch/F,MAAM6+F,UAAUjyE,MAAMo/D,KAAK7+C,UAChD,CAaA,SAAS8xD,KAAUjwE,GAEjB,OAAO,IAAI+vE,KAAe/+F,MAAM6+F,UAAUjyE,MAAMo/D,KAAKh9D,GACvD,CA1XArvB,OAAOu/F,iBAAiBhC,EAAQ2B,UAAW,CACzC,SAAY,CAAE,IAAO,WAAqC,OAAxBp7F,KAAK05F,YAAa,EAAa15F,IAAM,GACvE,YAAe,CAAE,IAAO,WAAsC,OAAzBA,KAAK05F,YAAa,EAAc15F,IAAM,GAC3E,SAAY,CAAE,IAAO,WAAqC,OAAxBA,KAAK25F,YAAa,EAAa35F,IAAM,GACvE,YAAe,CAAE,IAAO,WAAsC,OAAzBA,KAAK25F,YAAa,EAAc35F,IAAM,GAC3E,KAAQ,CAAE,IAAO,WAAqC,OAAxBA,KAAK45F,YAAa,EAAa55F,IAAM,GACnE,QAAW,CAAE,IAAO,WAAkE,OAArDA,KAAK45F,YAAa,EAAM55F,KAAK65F,gBAAiB,EAAc75F,IAAM,KAGrGy5F,EAAQ2B,UAAUM,SAAW,SAASC,GAIpC,OAHA37F,KAAK45F,YAAa,EAClB55F,KAAK65F,gBAAiB,EACtB75F,KAAK47F,YAAcD,EACZ37F,IACT,EAEAy5F,EAAQ2B,UAAUS,YAAc,SAASp6E,GAEvC,OADAzhB,KAAKyhB,aAAeA,EACbzhB,IACT,EAEAy5F,EAAQ2B,UAAUU,SAAW,SAASH,GAEpC,OADA37F,KAAK+7F,eAAiBJ,EACf37F,IACT,EAEAy5F,EAAQ2B,UAAUY,mBAAqB,WACrC,MAAO,CACLvvE,QAASzsB,KAAKyhB,aAElB,EAEAg4E,EAAQ2B,UAAUtzD,SAAW,SAAS1Y,EAAiBla,GACrD,IAAI+mF,EAOJ,OALEA,EADEj8F,KAAK65F,eACI75F,KAAK47F,YAEL57F,KAAKq6F,YAGXr6F,KAAKk8F,aAAaD,EAAU7sE,EAAiBla,EACtD,EAEAukF,EAAQ2B,UAAUc,aAAe,SAASD,EAAU7sE,EAAiBla,GACnE,OAAIinF,EAAAA,EAAAA,YAAWF,GACNA,EAAS7sE,EAAiBla,GAE1B+mF,CAEX,EAEAxC,EAAQ2B,UAAUgB,cAAgB,SAASC,EAAWjtE,EAAiBla,GACrE,OAAIinF,EAAAA,EAAAA,YAAWE,GACNA,EAAUjtE,EAAiBla,GACzBmnF,aAAqBrC,EAEvBqC,EAAUv0D,SAAS1Y,EAAiBla,GAEpCmnF,CAEX,EAEA5C,EAAQ2B,UAAUkB,IAAM,WACtB,OAAOC,EAAAA,EAAAA,OAAMv8F,KACf,EAEAy5F,EAAQ2B,UAAU/rE,MAAQ,SAASD,GACjC,OAAOpvB,IACT,EAEAy5F,EAAQ2B,UAAUoB,gBAAkB,SAAS1sE,GAE3C,OADA9vB,KAAKy8F,kBAAoB3sE,EAClB9vB,IACT,EACAy5F,EAAQ2B,UAAUtrE,YAAc,WAC9B,OAAO9vB,KAAKy8F,iBACd,EAMA3C,EAAYsB,WAAYvlD,EAAAA,EAAAA,QAAO4jD,EAAQ2B,UAAW,CAChD,YAAetB,IAOjBA,EAAYsB,UAAUsB,MAAQ,SAASC,GACrC,MAAMC,GAAuBL,EAAAA,EAAAA,OAAMI,GAiBnC,MAfuB,CACrB,aACA,aACA,aACA,iBACA,cACA,qBAGa//F,SAASigG,SACSj/F,IAA3BoC,KAAK68F,KACPD,EAAqBC,GAAoB78F,KAAK68F,GAChD,IAGKD,CACT,EAKA5C,EAAWoB,WAAYvlD,EAAAA,EAAAA,QAAO4jD,EAAQ2B,UAAW,CAC/C,YAAepB,IAKjBA,EAAWoB,UAAU/rE,MAAQ,SAASD,GACpC,MAAMD,GAAiBotE,EAAAA,EAAAA,OAAMntE,EAAgBpvB,KAAKwnC,UAiBlD,MAfuB,CACrB,aACA,aACA,aACA,iBACA,cACA,qBAGa5qC,SAASigG,SACSj/F,IAA3BoC,KAAK68F,KACP1tE,EAAe0tE,GAAoB78F,KAAK68F,GAC1C,IAGK1tE,EAAeE,MAAMD,EAC9B,EACA4qE,EAAWoB,UAAUtzD,SAAW,SAAS1Y,EAAiBla,GACxD,OAAOlV,KAAKqvB,MAAMD,GAAiB0Y,SAAS1Y,EAAiBla,EAC/D,EACA8kF,EAAWoB,UAAUz0D,gBAAkB,SAASvX,GAC9C,OAAOpvB,KAAKqvB,MAAMD,GAAiBuX,gBAAgBvX,EACrD,EACA4qE,EAAWoB,UAAUruF,YAAc,SAASqiB,GAC1C,OAAOpvB,KAAKqvB,MAAMD,GAAiBriB,YAAYqiB,EACjD,EACA4qE,EAAWoB,UAAUtrE,YAAc,SAASV,GAC1C,OAAOpvB,KAAKqvB,MAAMD,GAAiBU,YAAYV,EACjD,EAOA8qE,EAAiBkB,WAAYvlD,EAAAA,EAAAA,QAAOmkD,EAAWoB,UAAW,CACxD,YAAelB,IAKjBA,EAAiBkB,UAAU/rE,MAAQ,SAASD,GAC1C,MAAM0tE,EAAY9C,EAAWoB,UAAU/rE,MAAMk5D,KAAKvoF,KAAMovB,GAaxD,OAXA0tE,EAAUp2D,aAAc61D,EAAAA,EAAAA,OAAMO,EAAUp2D,cAExC9pC,EAAAA,EAAAA,SAAQoD,KAAK0mC,aAAa,CAACq2D,EAAuB1gG,KAG9CygG,EAAUp2D,YAAYrqC,GAFpB0gG,aAAiCjD,EAENiD,EAAsBL,MAAMI,EAAUp2D,YAAYrqC,IAElD0gG,CAC/B,IAGKD,CACT,EAOA1C,EAAcgB,WAAYvlD,EAAAA,EAAAA,QAAO4jD,EAAQ2B,UAAW,CAClD,YAAehB,IAYjBG,EAAea,WAAYvlD,EAAAA,EAAAA,QAAO4jD,EAAQ2B,UAAW,CACnD,YAAeb,IAYjBE,EAAeW,WAAYvlD,EAAAA,EAAAA,QAAO4jD,EAAQ2B,UAAW,CACnD,YAAeX,IAYjBE,EAAaS,WAAYvlD,EAAAA,EAAAA,QAAO4jD,EAAQ2B,UAAW,CACjD,YAAeT,IAajBC,EAAaQ,WAAYvlD,EAAAA,EAAAA,QAAO4jD,EAAQ2B,UAAW,CACjD,YAAeR,IAEjBA,EAAaQ,UAAUc,aAAe,SAASD,EAAU7sE,EAAiBla,GACxE,OAAIinF,EAAAA,EAAAA,YAAWF,GACNA,EAAS7sE,EAAiBla,GAE1B+mF,EAAS39F,KAAK+9F,GACZr8F,KAAKg9F,KAAKZ,cAAcC,EAAWjtE,EAAiBla,IAGjE,EACA0lF,EAAaQ,UAAUz0D,gBAAkB,SAASvX,GAChD,OAAOpvB,KAAKsJ,QAAQq9B,gBAAgBvX,EACtC,EACAwrE,EAAaQ,UAAUY,mBAAqB,WAC1C,OAAAtjG,EAAAA,EAAA,GACKsH,KAAKsJ,QAAQ0yF,sBAAoB,IACpCvvE,QAASzsB,KAAKyhB,cAElB,EAWAq5E,EAAWM,WAAYvlD,EAAAA,EAAAA,QAAO4jD,EAAQ2B,UAAW,CAC/C,YAAeN,IAajB5+F,OAAOu/F,iBAAiBT,EAAcI,UAAW,CAC/C,YAAe,CAAE,IAAO,SAAS10D,GAAe1mC,KAAK0mC,YAAcA,CAAY,KAEjFs0D,EAAcI,WAAYvlD,EAAAA,EAAAA,QAAO4jD,EAAQ2B,UAAW,CAClD,YAAeJ,IAEjBA,EAAcI,UAAUc,aAAe,SAASD,EAAU7sE,EAAiBla,GACzE,IAAIinF,EAAAA,EAAAA,YAAWF,GACb,OAAOA,EAAS7sE,EAAiBla,GAC5B,CACL,MAAM+nF,EAAkB,CAAC,EAgBzB,OAfArgG,EAAAA,EAAAA,SAAQoD,KAAK0mC,aAAa,CAACq2D,EAAuB1gG,KAC5CA,KAAO4/F,EACTgB,EAAgB5gG,GAAO2D,KAAKo8F,cAAcH,EAAS5/F,GAAM+yB,EAAiBla,GAEtE6nF,aAAiCtD,EAE/BsD,EAAsBnD,aAExBqD,EAAgB5gG,GAAO0gG,EAAsBj1D,SAAS1Y,EAAiBla,IAGzE+nF,EAAgB5gG,GAAO0gG,CAE3B,IAEKE,CACT,CACF,EAEAjC,EAAcI,UAAU5rE,qBAAuB,WAC7C,OAAOke,EAAAA,EAAAA,UAAQpvC,EAAAA,EAAAA,KAAI0B,KAAK0mC,aAAa,CAACq2D,EAAuB1gG,KAC3D,KAAM0gG,aAAiCtD,GAAU,OAAO,KAGxD,MAAMqC,EAAWiB,EAAsBhB,eACvC,IAAKD,EAAU,OAAO,KAGtB,MAAMhsE,EAAcitE,EAAsBjtE,cAG1C,MAAO,CAACzzB,EAAKy/F,EAAUiB,EAAsBf,qBAAsBlsE,EAAY,IAEnF,EAGAkrE,EAAcI,UAAUruF,YAAc,SAASqiB,GAC7C,OAAOpvB,KAAK0mC,YAAqB,SAAK1mC,KAAK0mC,YAAkB,IAC/D,EACAs0D,EAAcI,UAAUtrE,YAAc,SAASV,GAC7C,OAAOpvB,KAAKy8F,mBAAqBz8F,KAAK0mC,YAAqB,SAAK1mC,KAAK0mC,YAAkB,IACzF,EACAs0D,EAAcI,UAAU/rE,MAAQ,SAASD,GACvC,OAAOpvB,IACT,EASAk7F,EAAUE,WAAYvlD,EAAAA,EAAAA,QAAO4jD,EAAQ2B,UAAW,CAC9C,YAAeF,IAEjBA,EAAUE,UAAUz0D,gBAAkB,SAASvX,GAC7C,OAAOpvB,KAAKm7F,OACd,EAUAG,EAAYF,WAAYvlD,EAAAA,EAAAA,QAAO4jD,EAAQ2B,UAAW,CAChD,YAAeE,IAEjBA,EAAYF,UAAUz0D,gBAAkB,SAASvX,GAC/C,OAAOpvB,KAAKu7F,WACd,EACAD,EAAYF,UAAUY,mBAAqB,WACzC,MAAO,CACLvjG,QAASuH,KAAKu7F,YACd9uE,QAASzsB,KAAKyhB,aAElB,EAgBO,MAAM2N,EAAkB,CAC7BllB,IAAKowF,IAAWoB,SAAS9zD,EAAAA,GACzBs1D,eAAgBrC,EAAQQ,EACtBpB,EAAM,SACNA,EAAM,kBACNA,EAAM,SACNA,EAAM,gBACNA,EAAM,gBACNA,EAAM,aACNA,EAAM,eACNA,EAAM,SACNA,EAAM,yBACNA,EAAM,sBACNA,EAAM,gBACNA,EAAM,iBACNA,EAAM,iBACNA,EAAM,cACNA,EAAM,WAERkD,qBAAsBtC,EAAQQ,EAC5BpB,EAAM,SACNA,EAAM,SACNA,EAAM,kBACNA,EAAM,SACNA,EAAM,gBACNA,EAAM,gBACNA,EAAM,aACNA,EAAM,eACNA,EAAM,WACNA,EAAM,SACNA,EAAM,YACNA,EAAM,yBACNA,EAAM,sBACNA,EAAM,gBACNA,EAAM,iBACNA,EAAM,iBACNA,EAAM,cACNA,EAAM,WAERmD,aAAcvC,EAAQQ,EACpBpB,EAAM,SACNA,EAAM,kBACNA,EAAM,SACNA,EAAM,gBACNA,EAAM,aACNA,EAAM,eACNA,EAAM,WACNA,EAAM,SACNA,EAAM,WAERoD,uBAAwBxC,EAAQQ,EAC9BpB,EAAM,SACNA,EAAM,SACNA,EAAM,kBACNA,EAAM,SACNA,EAAM,gBACNA,EAAM,gBACNA,EAAM,aACNA,EAAM,eACNA,EAAM,WACNA,EAAM,SACNA,EAAM,WAERqD,iBAAkBzC,EAAQQ,EACxBpB,EAAM,SACNA,EAAM,kBACNA,EAAM,SACNA,EAAM,gBACNA,EAAM,aACNA,EAAM,eACNA,EAAM,WACNA,EAAM,WAERsD,mBAAoB1C,EAAQQ,EAC1BpB,EAAM,SACNA,EAAM,SACNA,EAAM,kBACNA,EAAM,SACNA,EAAM,gBACNA,EAAM,gBACNA,EAAM,aACNA,EAAM,eACNA,EAAM,WACNA,EAAM,SACNA,EAAM,WAERuD,qBAAsB3C,EAAQQ,EAC5BpB,EAAM,SACNA,EAAM,kBACNA,EAAM,SACNA,EAAM,gBACNA,EAAM,aACNA,EAAM,eACNA,EAAM,WACNA,EAAM,SACNA,EAAM,WAERwD,kBAAmB5C,EAAQQ,EACzBpB,EAAM,4BACNA,EAAM,mBAERyD,mBAAoB7C,EAAQQ,EAC1BpB,EAAM,uBACNA,EAAM,cAER0D,gBAAiB9C,EAAQQ,EACvBpB,EAAM,SACNA,EAAM,kBACNA,EAAM,SACNA,EAAM,gBACNA,EAAM,gBACNA,EAAM,aACNA,EAAM,eACNA,EAAM,YACNA,EAAM,WACNA,EAAM,SACNA,EAAM,WAER2D,kBAAmB/C,EAAQQ,EACzBpB,EAAM,kBACNA,EAAM,gBACNA,EAAM,aACNA,EAAM,eACNA,EAAM,aAER4D,gBAAiBhD,EAAQQ,EACvBpB,EAAM,SACNA,EAAM,SACNA,EAAM,kBACNA,EAAM,SACNA,EAAM,gBACNA,EAAM,gBACNA,EAAM,aACNA,EAAM,eACNA,EAAM,WACNA,EAAM,SACNA,EAAM,WAER6D,gBAAiBjD,EAAQQ,EACvBpB,EAAM,SACNA,EAAM,SACNA,EAAM,kBACNA,EAAM,SACNA,EAAM,gBACNA,EAAM,gBACNA,EAAM,aACNA,EAAM,eACNA,EAAM,WACNA,EAAM,SACNA,EAAM,WAER8D,wBAAyBlD,EAAQQ,EAC/BpB,EAAM,SACNA,EAAM,kBACNA,EAAM,SACNA,EAAM,gBACNA,EAAM,aACNA,EAAM,eACNA,EAAM,WACNA,EAAM,SACNA,EAAM,WAER+D,gBAAiBnD,EAAQQ,EACvBpB,EAAM,aACNA,EAAM,eACNA,EAAM,gBACNA,EAAM,SACNA,EAAM,WAERgE,iBAAkBpD,EAAQQ,EACxBpB,EAAM,gBACNA,EAAM,aACNA,EAAM,iBAERiE,UAAWrD,EAAQQ,EACjBpB,EAAM,SACNA,EAAM,SACNA,EAAM,kBACNA,EAAM,SACNA,EAAM,gBACNA,EAAM,gBACNA,EAAM,aACNA,EAAM,eACNA,EAAM,YACNA,EAAM,WACNA,EAAM,SACNA,EAAM,WAERkE,eAAgB9C,EACdf,IACAO,EAAQQ,EACNpB,EAAM,QACNA,EAAM,QACNA,EAAM,UACNA,EAAM,aACNA,EAAM,eACNA,EAAM,aACNA,EAAM,QACNA,EAAM,SACNA,EAAM,iBAERyB,SAAS,IACXxgD,QAAS+/C,EAAS,CAChBl9F,KAAM,UACNmM,IAAK+vF,EAAM,OAAO+C,KAClBlsE,MAAO4pE,IACPrxF,MAAO4wF,EAAM,kBAAkB+C,KAC/B9oF,QAAS+lF,EAAM,kBAAkB+C,KACjCt9C,OAAQ86C,IAAYqB,aAAY,GAAOH,UAAS,GAChDl4D,YAAag3D,IAAYqB,aAAY,GAAOC,SAAS,gBACrDjwF,UAAW2uF,IAAYqB,aAAY,GAAOC,SAAS,gBACnD94E,QAAS63E,EAAQP,KAAYuB,YAAY,IAAIC,SAAS,aACtDnyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,GAAOC,SAAS,gBACnD7zD,WAAYuyD,IAAYqB,aAAY,GACpCuC,cAAe,UACd5B,gBAAgB,kBACnBtrD,SAAU+pD,EAAS,CACjBl9F,KAAM,WACNmM,IAAK+vF,EAAM,OAAO+C,KAClB9oF,QAAS+lF,EAAM,mBAAmByB,SAAS,CAACzB,EAAM,aAAa+C,OAC/Dh6E,QAAS63E,EAAQP,KAAYuB,YAAY,IACzClyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,KAErCwC,aAAclE,EAAY,WAAY,CACpCjmF,QAAS6lF,IAAS2B,SAAS,CAACzB,EAAM,aAAa+C,SAEjD/4E,MAAOg3E,EAAS,CACdl9F,KAAM,QACNmM,IAAK+vF,EAAM,OAAO+C,KAClB14F,KAAMu2F,EAAQZ,EAAM,aAAayB,SAAS,CAACzB,EAAM,YAAY+C,OAC7Dh6E,QAAS63E,EAAQP,KAAYuB,YAAY,IACzClyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,GACnC5zD,WAAYuyD,IAAYqB,aAAY,KACnCW,gBAAgB,SACnB8B,SAAUrD,EAAS,CACjBl9F,KAAM,WACNmM,IAAK+vF,EAAM,OAAO+C,KAClB5pD,MAAOynD,EAAQZ,EAAM,cAAcyB,SAAS,CAACzB,EAAM,aAAa+C,KAAK/C,EAAM,aAAa+C,OACxFh6E,QAAS63E,EAAQP,KAAYuB,YAAY,IACzClyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,KAErC0C,UAAWtD,EAAS,CAClBl9F,KAAM,YACNmM,IAAK+vF,EAAM,OAAO+C,KAClB9oF,QAAS2mF,EAAQZ,EAAM,qBAAqByB,SAAS,CAACzB,EAAM,eAAe+C,KAC3Eh6E,QAAS63E,EAAQP,KAAYuB,YAAY,IACzClyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,KAErCzgD,UAAW6/C,EAAS,CAClBl9F,KAAM,YACNmM,IAAK+vF,EAAM,OAAO+C,KAClB30F,MAAOiyF,IACPziD,eAAgB6iD,IAAYgB,SAAS,KAAMI,SAAS,oBACpDlkD,SAAU8iD,IAAYgB,SAAS,GAAGI,SAAS,oBAC3C1wD,OAAQovD,IAAYqB,aAAY,GAChC74E,QAAS63E,EAAQP,KAAYuB,YAAY,IACzClyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,GACnC5zD,WAAYuyD,IAAYqB,aAAY,KAEtChhD,eAAgBogD,EAAS,CACvBl9F,KAAM,iBACNmM,IAAK+vF,EAAM,OAAO+C,KAClB1rD,eAAgBkpD,IAAYkB,UAAS,GAAMI,SAAS,gBACpD5nF,QAAS2mF,EAAQZ,EAAM,yBAAyByB,SAAS,CAACzB,EAAM,wBAAwB+C,KAAM/C,EAAM,wBAAwB+C,KAAM/C,EAAM,wBAAwB+C,KAAM/C,EAAM,wBAAwB+C,KAAM/C,EAAM,wBAAwB+C,OACxO5xD,OAAQovD,IAAYqB,aAAY,GAChC74E,QAAS63E,EAAQP,KAAYuB,YAAY,IAAIC,SAAS,aACtDnyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,GACnC5zD,WAAYuyD,IAAYqB,aAAY,KAEtC2C,qBAAsBvD,EAAS,CAC7Bl9F,KAAM,uBACNmM,IAAK+vF,EAAM,OAAO+C,KAClB9oF,QAAS+lF,EAAM,kBAAkB+C,KACjC30F,MAAOmyF,IACPvvD,OAAQuvD,IACRx3E,QAAS63E,EAAQP,KAAYuB,YAAY,IACzClyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,GACnCuC,cAAe,YAEjBK,iBAAkB5D,EAAQQ,EACxBpB,EAAM,aACNA,EAAM,eACNA,EAAM,gBACNA,EAAM,SACNA,EAAM,SACNA,EAAM,gBACNA,EAAM,SACNA,EAAM,SACNA,EAAM,kBAERyE,SAAUvE,EAAY,eAAgB,CACpCwE,QAAS,WACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,aACpCryF,MAAOixF,IAAWoB,SAAS,aAC3BxnF,QAAS+lF,EAAM,oBAAoByB,SAAS,CAC1CzB,EAAM,aACNA,EAAM,kBAERh3D,YAAa43D,EAAQZ,EAAM,eAAeyB,SAAS,CAACzB,EAAM,cAAc+C,KAAM/C,EAAM,cAAc+C,KAAM/C,EAAM,cAAc+C,SAE9H75D,WAAY83D,EAAS,CACnBl9F,KAAM,aACNmM,IAAK+vF,EAAM,OAAO+C,KAClB9oF,QAASomF,IAAWoB,SAAS,WAC7B0C,cAAe,YAEjB7jD,YAAa0gD,EAAS,CACpBl9F,KAAM,cACNmM,IAAK+vF,EAAM,OAAO+C,KAClB/vD,MAAOouD,EAAKX,IAAaF,KAAaqB,aAAY,GAAOH,UAAS,GAAOI,SAAS,sBAClF5uD,gBAAiBstD,IAAYqB,aAAY,GAAOC,SAAS,gBACzD5nF,QAAS2mF,EAAQZ,EAAM,sBAAsByB,SAAS,CAACzB,EAAM,qBAAqB+C,KAAM/C,EAAM,qBAAqB+C,KAAM/C,EAAM,qBAAqB+C,OACpJ4B,aAAcpD,EAAO,SAAU,SAASK,YAAY,UAAUC,SAAS,eACvE+C,gBAAiBrE,IAAYqB,aAAY,GACzCzwD,OAAQovD,IAAYqB,aAAY,GAChC74E,QAAS63E,EAAQP,KAAYuB,YAAY,IACzClyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,GACnC5zD,WAAYuyD,IAAYqB,aAAY,KAEtCiD,kBAAmB7D,EAAS,CAC1Bl9F,KAAM,oBACNmM,IAAK+vF,EAAM,OAAO+C,KAClBnwD,QAASytD,IACTpmF,QAAS+lF,EAAM,kBAAkB+C,KACjC30F,MAAOmyF,IACPvvD,OAAQuwD,GAAO,GAAM,EAAO,UAC5Bx4E,QAAS63E,EAAQP,KAAYuB,YAAY,IACzClyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,GACnCuC,cAAe,YAEjB9jD,gBAAiB2gD,EAAS,CACxBl9F,KAAM,kBACNmM,IAAK+vF,EAAM,OAAO+C,KAClB9xD,kBAAmB2vD,EAAQZ,EAAM,cAAcyB,SAAS,CAACzB,EAAM,aAAa+C,OAC5E7xD,aAAc0vD,EAAQZ,EAAM,cAAcyB,SAAS,CAACzB,EAAM,aAAa+C,OACvE30F,MAAO0yF,IACP9vD,OAAQ8vD,IACR/3E,QAAS63E,EAAQP,KAAYuB,YAAY,IACzClyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,GACnC5zD,WAAYuyD,IAAYqB,aAAY,KAEtCkD,UAAW9D,EAAS,CAClBl9F,KAAM,YACNmM,IAAK+vF,EAAM,OAAO+C,KAClB9oF,QAAS+lF,EAAM,kBAAkB+C,KACjCh6E,QAAS63E,EAAQP,KAAYuB,YAAY,IACzClyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,GACnC5zD,WAAYuyD,IAAYqB,aAAY,GACpCuC,cAAe,YAEjBv4E,OAAQo1E,EAAS,CACfl9F,KAAM,SACNsL,MAAO4wF,EAAM,kBAAkB+C,KAC/Bv9F,QAASo7F,EAAQZ,EAAM,WAAW+C,KAClC9yF,IAAK+vF,EAAM,OAAO+C,KAClBh6E,QAAS63E,EAAQP,KAAYuB,YAAY,IACzClyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,GACnC5zD,WAAYuyD,IAAYqB,aAAY,GACpCuC,cAAe,UAEjBpjD,UAAWigD,EAAS,CAClBl9F,KAAM,YACNmM,IAAK+vF,EAAM,OAAO+C,KAClB5qD,SAAUsoD,IAAYgB,SAAS,GAAGI,SAAS,oBAC3CsC,cAAe,CAACp0E,WAAY,cAE9B/W,OAAQgoF,EAAS,CACfl9F,KAAM,SACNmM,IAAK+vF,EAAM,OAAO+C,KAClBtzD,UAAWqxD,MAEb5yE,KAAM8yE,EAAS,CACbl9F,KAAM,OACNmM,IAAK+vF,EAAM,OAAO+C,KAClB9oF,QAAS+lF,EAAM,mBAEjBplB,KAAMomB,EAAS,CACbl9F,KAAM,OACNmM,IAAK+vF,EAAM,OAAO+C,KAClB9oF,QAAS+lF,EAAM,mBAEjBllB,UAAWkmB,EAAS,CAClBl9F,KAAM,YACNmM,IAAK+vF,EAAM,OAAO+C,KAClB9oF,QAAS+lF,EAAM,mBAEjBnlB,OAAQmmB,EAAS,CACfl9F,KAAM,SACNmM,IAAK+vF,EAAM,OAAO+C,KAClB9oF,QAAS+lF,EAAM,mBAEjBjlB,YAAaimB,EAAS,CACpBl9F,KAAM,cACNmM,IAAK+vF,EAAM,OAAO+C,KAClB9oF,QAAS+lF,EAAM,mBAEjBhlB,UAAWgmB,EAAS,CAClBl9F,KAAM,YACNmM,IAAK+vF,EAAM,OAAO+C,KAClB9oF,QAAS+lF,EAAM,mBAEjB+E,WAAY/D,EAAS,CACnBl9F,KAAM,aACNmM,IAAK+vF,EAAM,OAAO+C,KAClB9oF,QAAS+lF,EAAM,mBAEjB5tE,KAAM4uE,EAAS,CACbl9F,KAAM,OACNmM,IAAK+vF,EAAM,OAAO+C,KAClB9oF,QAAS+lF,EAAM,mBAEjBlvF,MAAOkwF,EAAS,CACdl9F,KAAM,QACNmM,IAAK+vF,EAAM,OAAO+C,KAClB9oF,QAAS+lF,EAAM,mBAEjBgF,KAAM9E,EAAY,UAAW,CAC3BwE,QAAS,OACTzqF,QAAS2mF,EAAQQ,EACfpB,EAAM,UACNA,EAAM,wBACNA,EAAM,sBACNA,EAAM,2BACNA,EAAM,6BACNA,EAAM,gBACNA,EAAM,gBACNA,EAAM,4BACNA,EAAM,mBACNA,EAAM,sBACNA,EAAM,YACNA,EAAM,iBACNA,EAAM,gBACNA,EAAM,qBACNA,EAAM,iBACNA,EAAM,yBACNA,EAAM,qBACNA,EAAM,oCACNA,EAAM,wCACNA,EAAM,kBAERv6C,OAAQq6C,IAAS2B,UAAS,GAC1B14E,QAAS+2E,IAAS2B,SAAS,CAAC,SAC5BwD,IAAK1D,EAAO,cAAe,SAAU,OAAQ,SAASK,YAAY,eAAeH,SAAS,eAAeI,SAAS,eAAeU,gBAAgB,OACjJ2C,KAAM3D,EAAO,UAAW,QAAS,QAAS,8BAA+B,QAAS,YAAYK,YAAY,WAAWH,SAAS,WAAWI,SAAS,eAAeU,gBAAgB,QACjLpJ,mBAAoByH,EAAQW,EAC1B,uBACA,aACA,qBACA,iBACA,gCACA,2BACA,UACCK,YAAY,IAAIH,SAAS,IAAII,SAAS,oBAAoBU,gBAAgB,sBAC7En6C,qBAAsBw4C,EAAQW,EAC5B,gBACA,qBACA,kBACA,aACA,oBACA,YACA,0BACA,kBACA,aACA,aACA,YACA,YACCK,YAAY,IAAIH,SAAS,IAAII,SAAS,oBAAoBU,gBAAgB,wBAC7EnJ,QAASwH,EAAQW,EACf,2BACA,iBACA,YACA,+BACA,mBACA,uBACA,cACA,oBACA,gBACA,oBACA,wBACA,oBACA,kBACA,UACA,kBACA,cACA,6BACCK,YAAY,IAAIH,SAAS,IAAII,SAAS,oBAAoBU,gBAAgB,WAC7EhJ,iBAAkBqH,EAAQW,EACxB,YACA,oBACA,kBACA,aACA,eACCK,YAAY,IAAIH,SAAS,IAAII,SAAS,oBAAoBU,gBAAgB,oBAC7ErJ,WAAY0H,EAAQW,EAClB,4BACA,qBACA,2BACA,sBACA,oCACA,QACCK,YAAY,IAAIH,SAAS,IAAII,SAAS,oBAAoBU,gBAAgB,cAC7E71E,oBAAqBk0E,EAAQW,EAC3B,wBACA,kBACA,kBACA,gCACA,eACA,yBACCK,YAAY,IAAIH,SAAS,IAAII,SAAS,oBAAoBU,gBAAgB,mCAC7E4C,oBAAqBvE,EAAQW,KAAUpC,IAAsByC,YAAY,IAAIH,SAAS,IAAII,SAAS,oBAAoBU,gBAAgB,uBACvI31E,0BAA2Bg0E,EAAQW,EACjC,UACA,eACA,aACA,wBACA,4BACA,eACA,oBACA,eACA,YACA,eACA,eACCK,YAAY,IAAIH,SAAS,IAAII,SAAS,oBAAoBU,gBAAgB,wBAC7E6C,uBAAwBxE,EAAQW,KAAUhC,IAAyBqC,YAAY,IAAIH,SAAS,IAAII,SAAS,oBAAoBU,gBAAgB,0BAC7IlJ,oBAAqBuH,EAAQW,KAAUjC,IAAsBsC,YAAY,IAAIH,SAAS,IAAII,SAAS,oBAAoBU,gBAAgB,sBACvIh2E,gBAAiBq0E,EAAQW,KAAUlC,IAAkBuC,YAAY,IAAIH,SAAS,IAAII,SAAS,oBAAoBU,gBAAgB,mBAC/H8C,uBAAwBzE,EAAQW,KAAUnC,IAAyBwC,YAAY,IAAIH,SAAS,IAAII,SAAS,oBAAoBU,gBAAgB,0BAC7IjJ,qBAAsBsH,EAAQW,KAAUrC,IAAuB0C,YAAY,IAAIH,SAAS,IAAII,SAAS,oBAAoBU,gBAAgB,yBACzIh5D,YAAag3D,IAAYqB,aAAY,GAAOC,SAAS,gBACrDhkC,iBAAkB0iC,IAAYqB,aAAY,GAAOC,SAAS,gBAC1D5jC,aAAcsiC,IAAYqB,aAAY,GAAOC,SAAS,gBACtD9jC,gBAAiBwiC,IAAYqB,aAAY,GAAOC,SAAS,gBACzD5zD,iBAAkBsyD,IAAYqB,aAAY,GAAOC,SAAS,gBAC1DvjC,iBAAkBiiC,IAAYqB,aAAY,GAAMC,SAAS,gBACzD73D,0BAA2Bu2D,IAAYqB,aAAY,GAAOC,SAAS,kBAGrEyD,aAAcpF,EAAY,UAAW,CACnCwE,QAAS,eACTzqF,QAAS2mF,EAAQQ,EACfpB,EAAM,SACNA,EAAM,SACNA,EAAM,6BACNA,EAAM,uBACNA,EAAM,sBACNA,EAAM,aACNA,EAAM,cACNA,EAAM,sBACNA,EAAM,kBACNA,EAAM,kBACNA,EAAM,SACNA,EAAM,gBACNA,EAAM,sBACNA,EAAM,WACNA,EAAM,gBACNA,EAAM,eACNA,EAAM,cACNA,EAAM,gBACNA,EAAM,gBACNA,EAAM,aACNA,EAAM,cACNA,EAAM,eACNA,EAAM,YACNA,EAAM,WACNA,EAAM,qBACNA,EAAM,SACNA,EAAM,yBACNA,EAAM,sBACNA,EAAM,gBACNA,EAAM,iBACNA,EAAM,iBACNA,EAAM,cACNA,EAAM,WACL+C,KACHh6E,QAAS+2E,IAAS2B,SAAS,CAAC,SAC5Bl4D,YAAau2D,IAAS2B,UAAS,GAC/B7vF,UAAWkuF,IAAS2B,UAAS,KAC5Bc,gBAAgB,kBACnBgD,qBAAsBrF,EAAY,eAAgB,CAChDwE,QAAS,uBACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,2BACnCc,gBAAgB,0BACnBiD,mBAAoBtF,EAAY,UAAW,CACzCwE,QAAS,qBACTzqF,QAAS2mF,EAAQQ,EACfpB,EAAM,kBACNA,EAAM,SACNA,EAAM,gBACNA,EAAM,aACNA,EAAM,eACNA,EAAM,WACNA,EAAM,WACL+C,KACH9yF,IAAK6vF,IAAS2B,SAAS,sBACvB14E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,uBACpCryF,MAAOixF,IAAWoB,SAAS,mBAC1Bc,gBAAgB,mBACnBkD,cAAevF,EAAY,eAAgB,CACzCwE,QAAS,gBACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,oBACnCc,gBAAgB,mBACnBmD,wBAAyBxF,EAAY,eAAgB,CACnDwE,QAAS,0BACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,8BACnCc,gBAAgB,6BACnBoD,0BAA2BzF,EAAY,eAAgB,CACrDwE,QAAS,4BACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,8BACpCryF,MAAOixF,IAAWoB,SAAS,0BAC1Bc,gBAAgB,+BACnBqD,aAAc1F,EAAY,eAAgB,CACxCwE,QAAS,eACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,mBACnCc,gBAAgB,kBACnBsD,yBAA0B3F,EAAY,eAAgB,CACpDwE,QAAS,2BACTzqF,QAAS2mF,EAAQQ,EACfpB,EAAM,4BACLyB,SAAS,CACVzB,EAAM,0BAA0B+C,OAElCh6E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,+BACnCc,gBAAgB,8BACnBuD,gBAAiB5F,EAAY,eAAgB,CAC3CwE,QAAS,kBACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,sBACnCc,gBAAgB,qBACnBwD,mBAAoB7F,EAAY,eAAgB,CAC9CwE,QAAS,qBACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,yBACnCc,gBAAgB,wBACnByD,gBAAiB9F,EAAY,eAAgB,CAC3CwE,QAAS,kBACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,sBACnCc,gBAAgB,qBACnB0D,SAAU/F,EAAY,UAAW,CAC/BwE,QAAS,WACTzqF,QAAS2mF,EAAQQ,EACfpB,EAAM,6BACNA,EAAM,sBACNA,EAAM,sBACNA,EAAM,WACNA,EAAM,gBACNA,EAAM,eACNA,EAAM,gBACL+C,KACHh6E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,aACpCryF,MAAOixF,IAAWoB,SAAS,yBAC1Bc,gBAAgB,cACnB2D,cAAehG,EAAY,eAAgB,CACzCwE,QAAS,gBACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,oBACnCc,gBAAgB,mBACnB4D,aAAcjG,EAAY,eAAgB,CACxCwE,QAAS,eACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,mBACnCc,gBAAgB,kBACnB6D,kBAAmBlG,EAAY,eAAgB,CAC7CwE,QAAS,oBACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,wBACnCc,gBAAgB,uBACnB8D,cAAenG,EAAY,gBAAiB,CAC1CwE,QAAS,gBACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,kBACpCryF,MAAOixF,IAAWoB,SAAS,cAC1Bc,gBAAgB,mBACnB+D,sBAAuBpG,EAAY,wBAAyB,CAC1DwE,QAAS,wBACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,0BACpCryF,MAAOixF,IAAWoB,SAAS,sBAC1Bc,gBAAgB,2BACnBgE,kBAAmBrG,EAAY,oBAAqB,CAClDwE,QAAS,oBACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,sBACpCryF,MAAOixF,IAAWoB,SAAS,kBAC1Bc,gBAAgB,uBACnBiE,iCAAkCtG,EAAY,mCAAoC,CAChFwE,QAAS,mCACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,qCACpCryF,MAAOixF,IAAWoB,SAAS,yCAC1Bc,gBAAgB,8CACnBkE,qCAAsCvG,EAAY,uCAAwC,CACxFwE,QAAS,uCACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,yCACpCryF,MAAOixF,IAAWoB,SAAS,qCAC1Bc,gBAAgB,0CACnBmE,aAAcxG,EAAY,eAAgB,CACxCwE,QAAS,eACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,iBACpCryF,MAAOixF,IAAWoB,SAAS,0DAC1Bc,gBAAgB,+DACnBlqF,MAAO6nF,EAAY,UAAW,CAC5BwE,QAAS,QACTzqF,QAAS+lF,EAAM,gBAAgByB,SAAS,CAACzB,EAAM,aAAa+C,OAC5Dh6E,QAAS+2E,IAAS2B,SAAS,CAAC,YAC3Bc,gBAAgB,SACnBniD,MAAO4gD,EAAS,CACdl9F,KAAM,QACNmM,IAAK+vF,EAAM,OAAO+C,KAClB3zF,MAAO4wF,EAAM,kBAAkB+C,KAC/BrsF,OAAQ6qF,EAAO,SAASE,SAAS,SACjC/iG,IAAK2hG,IAAW0C,KAChBh6E,QAAS63E,EAAQP,KAAYuB,YAAY,IACzClyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,GACnC5zD,WAAYuyD,IAAYqB,aAAY,GACpCuC,cAAe,CAACh3E,KAAM,iBACrBo1E,gBAAgB,SACnBoE,0BAA2BzG,EAAY,WAAY,CACjDwE,QAAS,4BACTzqF,QAAS+lF,EAAM,0BAA0ByB,SAAS,CAACzB,EAAM,aAAa+C,KAAM/C,EAAM,mBAAmB+C,KAAM/C,EAAM,iBAAiB+C,KAAM/C,EAAM,kBAAkB+C,SAC/JR,gBAAgB,4BACnBqE,mBAAoB1G,EAAY,UAAW,CACzCwE,QAAS,qBACTt1F,MAAOixF,IAAWoB,SAAS,6BAC3BxnF,QAAS+lF,EAAM,mBAAmByB,SAAS,CAACzB,EAAM,aAAa+C,OAC/Dh6E,QAAS+2E,IAAS2B,SAAS,CAAC,yBAC3Bc,gBAAgB,sBACnBsE,UAAW3G,EAAY,UAAW,CAChCwE,QAAS,YACTt1F,MAAOixF,IAAWoB,SAAS,IAC3BxnF,QAAS+lF,EAAM,mBAAmByB,SAAS,CAACzB,EAAM,aAAa+C,OAC/Dh6E,QAAS+2E,IAAS2B,SAAS,CAAC,mBAC5Bl4D,YAAau2D,IAAS2B,UAAS,GAC/B7vF,UAAWkuF,IAAS2B,UAAS,KAC5Bc,gBAAgB,aACnBuE,WAAY5G,EAAY,UAAW,CACjCwE,QAAS,aACTzqF,QAAS+lF,EAAM,oBAAoByB,SAAS,CAACzB,EAAM,aAAa+C,OAChEh6E,QAAS+2E,IAAS2B,SAAS,CAAC,eAC5Bl4D,YAAau2D,IAAS2B,UAAS,GAC/B7vF,UAAWkuF,IAAS2B,UAAS,KAC5Bc,gBAAgB,cACnBwE,mBAAoB7G,EAAY,WAAY,CAC1Cn3E,QAAS+2E,IAAS2B,SAAS,CAAC,WAAY,uBACxCiD,QAAS,qBACTzqF,QAAS+lF,EAAM,mBAAmByB,SAAS,CAACzB,EAAM,aAAa+C,KAAM/C,EAAM,aAAa+C,KAAM/C,EAAM,iBAAiB+C,KAAM/C,EAAM,kBAAkB+C,SAClJR,gBAAgB,8BACnByE,eAAgB9G,EAAY,UAAW,CACrCwE,QAAS,iBACTzqF,QAAS+lF,EAAM,wBAAwByB,SAAS,CAACzB,EAAM,aAAa+C,OACpE3zF,MAAOixF,IAAWoB,SAAS,kBAC3B14E,QAAS+2E,IAAS2B,SAAS,CAAC,qBAC3Bc,gBAAgB,kBACnB/hD,eAAgBwgD,EAAS,CACvBl9F,KAAM,iBACNmM,IAAK+vF,EAAM,OAAO+C,KAClBh6E,QAAS63E,EAAQP,KAAYuB,YAAY,IACzClyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,KAClCW,gBAAgB,mBACnBttD,MAAO+rD,EAAS,CACdl9F,KAAM,QACNmM,IAAK+vF,EAAM,OAAO+C,KAClB3zF,MAAO4wF,EAAM,kBAAkB+C,KAC/BrsF,OAAQ6qF,EAAO,SAASE,SAAS,SACjC/iG,IAAK2hG,IAAW0C,KAChBh6E,QAAS63E,EAAQP,KAAYuB,YAAY,IAAIC,SAAS,aACtDnyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,GACnC5zD,WAAYuyD,IAAYqB,aAAY,GACpCxsD,UAAWmsD,EAAO,OAAQ,QAAS,QAAQK,YAAY,QAAQC,SAAS,eACxEsC,cAAe,CAACh3E,KAAM,iBACrBo1E,gBAAgB,SACnB9hD,aAAcugD,EAAS,CACrBl9F,KAAM,eACNmM,IAAK+vF,EAAM,OAAO+C,KAClB5+D,OAAQy8D,EAAQZ,EAAM,UAAUyB,SAAS,CAACzB,EAAM,SAAS+C,OACzDh6E,QAAS63E,EAAQP,KAAYuB,YAAY,IAAIC,SAAS,aACtDnyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,GACnC5zD,WAAYuyD,IAAYqB,aAAY,KACnCW,gBAAgB,iBACnB7hD,kBAAmBsgD,EAAS,CAC1Bl9F,KAAM,oBACNmM,IAAK+vF,EAAM,OAAO+C,KAClB9oF,QAAS+lF,EAAM,kBAAkB+C,KACjCh6E,QAAS63E,EAAQP,KAAYuB,YAAY,IACzClyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,KAClCW,gBAAgB,sBACnB5hD,uBAAwBqgD,EAAS,CAC/Bl9F,KAAM,yBACNmM,IAAK+vF,EAAM,OAAO+C,KAClB9oF,QAAS2mF,EAAQZ,EAAM,sBAAsByB,SAAS,IACtD14E,QAAS63E,EAAQP,KAAYuB,YAAY,IACzClyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,KAClCW,gBAAgB,2BACnB0E,mBAAoB/G,EAAY,WAAY,CAC1CwE,QAAS,qBACTzqF,QAAS+lF,EAAM,mBAAmByB,SAAS,CAACzB,EAAM,aAAa+C,KAAM/C,EAAM,kBAAkB+C,KAAM/C,EAAM,iBAAiB+C,KAAM/C,EAAM,kBAAkB+C,SACvJR,gBAAgB,8CACnB2E,QAAShH,EAAY,WAAY,CAC/BwE,QAAS,UACTzqF,QAAS+lF,EAAM,mBAAmByB,SAAS,CAACzB,EAAM,aAAa+C,KAAM/C,EAAM,kBAAkB+C,KAAM/C,EAAM,iBAAiB+C,KAAM/C,EAAM,kBAAkB+C,SACvJR,gBAAgB,2BACnB4E,aAAcjH,EAAY,WAAY,CACpCwE,QAAS,eACTzqF,QAAS+lF,EAAM,mBAAmByB,SAAS,CAACzB,EAAM,aAAa+C,KAAM/C,EAAM,aAAayB,SAAS,CAACxnF,QAAS,4CAA6C+lF,EAAM,kBAAkB+C,KAAM/C,EAAM,iBAAiB+C,KAAM/C,EAAM,kBAAkB+C,SAC1OR,gBAAgB,yCACnB6E,YAAalH,EAAY,WAAY,CACnCwE,QAAS,cACTzqF,QAAS+lF,EAAM,mBAAmByB,SAAS,CAACzB,EAAM,aAAa+C,KAAM/C,EAAM,aAAayB,SAAS,CAACxnF,QAAS,4CAA6C+lF,EAAM,kBAAkB+C,KAAM/C,EAAM,iBAAiB+C,KAAM/C,EAAM,kBAAkB+C,SAC1OR,gBAAgB,yCACnB8E,WAAYnH,EAAY,WAAY,CAClCwE,QAAS,aACTzqF,QAAS+lF,EAAM,mBAAmByB,SAAS,CAACzB,EAAM,aAAa+C,KAAM/C,EAAM,aAAayB,SAAS,CAACxnF,QAAS,oDAAqD+lF,EAAM,kBAAkByB,SAAS,CAACpqD,gBAAgB,IAAS2oD,EAAM,iBAAiB+C,KAAM/C,EAAM,kBAAkB+C,SAC/QR,gBAAgB,qCACnB+E,aAAcpH,EAAY,UAAW,CACnCwE,QAAS,eACTzqF,QAAS+lF,EAAM,sBAAsByB,SAAS,CAACzB,EAAM,aAAa+C,OAClEx5D,YAAau2D,IAAS2B,UAAS,GAC/B7vF,UAAWkuF,IAAS2B,UAAS,GAC7B14E,QAAS+2E,IAAS2B,SAAS,CAAC,mBAC3Bc,gBAAgB,uBACnB1hD,aAAcmgD,EAAS,CACrBl9F,KAAM,eACNmM,IAAK+vF,EAAM,OAAO+C,KAClB9oF,QAAS2mF,EAAQZ,EAAM,aAAayB,SAAS,CAACzB,EAAM,YAAY+C,OAChEh6E,QAAS63E,EAAQP,KAAYuB,YAAY,IACzClyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,GACnC5zD,WAAYuyD,IAAYqB,aAAY,KACnCW,gBAAgB,mBACnBzhD,UAAWkgD,EAAS,CAClBl9F,KAAM,YACNmM,IAAK+vF,EAAM,OAAO+C,KAClB9oF,QAAS+lF,EAAM,kBAAkB+C,KACjCh6E,QAAS63E,EAAQP,KAAYuB,YAAY,IACzClyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,GAAOC,SAAS,gBACnD7zD,WAAYuyD,IAAYqB,aAAY,GACpCuC,cAAe,YACd5B,gBAAgB,aACnBgF,WAAYrH,EAAY,UAAW,CACjCwE,QAAS,aACTt1F,MAAOixF,IAAWoB,SAAS,cAC3BxnF,QAAS+lF,EAAM,qBAAqByB,SAAS,CAACzB,EAAM,aAAa+C,OACjEh6E,QAAS+2E,IAAS2B,SAAS,CAAC,eAC5B0C,mBAAexgG,IACd4+F,gBAAgB,cACnBvhD,YAAaggD,EAAS,CACpBl9F,KAAM,cACNmM,IAAK+vF,EAAM,OAAO+C,KAClB9oF,QAAS2mF,EAAQZ,EAAM,aAAayB,SAAS,CAACzB,EAAM,YAAY+C,OAChEh6E,QAAS63E,EAAQP,KAAYuB,YAAY,IACzClyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,GACnC5zD,WAAYuyD,IAAYqB,aAAY,KACnCW,gBAAgB,mBACnBiF,SAAUxG,EAAS,CACjBl9F,KAAM,WACNmM,IAAK+vF,EAAM,OAAO+C,KAClB3zF,MAAO4wF,EAAM,kBAAkB+C,KAC/B9oF,QAAS+lF,EAAM,gBAAgByB,SAAS,CAACzB,EAAM,aAAa+C,OAC5Dh6E,QAAS63E,EAAQP,KAAYuB,YAAY,IAAIC,SAAS,aACtDnyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,GAAOC,SAAS,gBACnD7zD,WAAYuyD,IAAYqB,aAAY,GACpCn8C,OAAQ86C,IAAYqB,aAAY,GAAOH,UAAS,GAChDl4D,YAAag3D,IAAYqB,aAAY,GAAOC,SAAS,gBACrDjwF,UAAW2uF,IAAYqB,aAAY,GAAOC,SAAS,kBAClDU,gBAAgB,oBACnBkF,kBAAmBvH,EAAY,WAAY,CACzCwE,QAAS,oBACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,WAAY,+BACxCryF,MAAOixF,IAAWoB,SAAS,8BAC3BxnF,QAAS+lF,EAAM,2BAA2ByB,SAAS,CAACzB,EAAM,aAAa+C,KAAM/C,EAAM,aAAa+C,KAAM/C,EAAM,iBAAiB+C,KAAM/C,EAAM,kBAAkB+C,SAC1JR,gBAAgB,qBACnBmF,sBAAuBxH,EAAY,UAAW,CAC5CwE,QAAS,wBACTzqF,QAAS+lF,EAAM,aAAayB,SAAS,CAACzB,EAAM,aAAa+C,OACzDh6E,QAAS+2E,IAAS2B,SAAS,CAAC,yBAC3Bc,gBAAgB,2BACnBoF,mBAAoBzH,EAAY,UAAW,CACzCwE,QAAS,qBACTzqF,QAAS+lF,EAAM,aAAayB,SAAS,CAACzB,EAAM,aAAa+C,OACzDh6E,QAAS+2E,IAAS2B,SAAS,CAAC,sBAC3Bc,gBAAgB,wBACnBqF,aAAc1H,EAAY,UAAW,CACnCwE,QAAS,eACTzqF,QAAS+lF,EAAM,aAAayB,SAAS,CAACzB,EAAM,aAAa+C,OACzDh6E,QAAS+2E,IAAS2B,SAAS,CAAC,gBAC3Bc,gBAAgB,kBACnBsF,cAAe3H,EAAY,UAAW,CACpCwE,QAAS,gBACTzqF,QAAS+lF,EAAM,aAAayB,SAAS,CAACzB,EAAM,aAAa+C,OACzDh6E,QAAS+2E,IAAS2B,SAAS,CAAC,iBAC3Bc,gBAAgB,mBACnBuF,cAAe5H,EAAY,UAAW,CACpCwE,QAAS,gBACTzqF,QAAS+lF,EAAM,aAAayB,SAAS,CAACzB,EAAM,aAAa+C,OACzDh6E,QAAS+2E,IAAS2B,SAAS,CAAC,iBAC3Bc,gBAAgB,mBACnBwF,WAAY7H,EAAY,UAAW,CACjCwE,QAAS,aACTzqF,QAAS+lF,EAAM,aAAayB,SAAS,CAACzB,EAAM,aAAa+C,OACzDh6E,QAAS+2E,IAAS2B,SAAS,CAAC,cAC3Bc,gBAAgB,gBACnBlhD,MAAO2/C,EAAS,CACdl9F,KAAM,QACNmM,IAAK+vF,EAAM,OAAO+C,KAClB3zF,MAAO4wF,EAAM,kBAAkB+C,KAC/BrsF,OAAQ6qF,EAAO,QAAS,UAAW,SAASE,SAAS,SACrD/iG,IAAK2hG,IAAW0C,KAChBh6E,QAAS63E,EAAQP,KAAYuB,YAAY,IACzClyD,SAAU6wD,IAAYqB,YAAY,GAClCjyD,UAAW4wD,IAAYqB,aAAY,GACnC5zD,WAAYuyD,IAAYqB,aAAY,GACpCuC,cAAe,CAACh3E,KAAM,iBACrBo1E,gBAAgB,SACnBnyB,eAAgB8vB,EAAY,UAAW,CACrCwE,QAAS,iBACTzqF,QAAS+lF,EAAM,wBAAwByB,SAAS,CAACzB,EAAM,aAAa+C,OACpE3zF,MAAOixF,IAAWoB,SAAS,kBAC3B14E,QAAS+2E,IAAS2B,SAAS,CAAC,mBAC5B9xD,UAAWmwD,IAAS2B,UAAS,KAE/BpyB,cAAe6wB,EAAY,SAAU,CACnCwE,QAAS,gBACTt1F,MAAOixF,IAAWoB,SAAS,YAE7BuG,YAAa9H,EAAY,SAAU,CACjCwE,QAAS,gBACTt1F,MAAOixF,IAAWoB,SAAS,UAE7BlxC,SAAU2vC,EAAY,UAAW,CAC/BwE,QAAS,WACTzqF,QAAS+lF,EAAM,mBAAmByB,SAAS,CAACzB,EAAM,aAAa+C,OAC/D3zF,MAAOixF,IAAWoB,SAAS,YAC3B14E,QAAS+2E,IAAS2B,SAAS,CAAC,aAC5B0C,mBAAexgG,IACd4+F,gBAAgB,YACnB0F,aAAc/H,EAAY,WAAY,CACpCn3E,QAAS+2E,IAAS2B,SAAS,CAAC,aAC5BiD,QAAS,eACTzqF,QAAS6lF,IAAS2B,SAAS,CAACzB,EAAM,aAAa+C,KAAM/C,EAAM,eAAe+C,KAAM/C,EAAM,iBAAiB+C,SAEzGmF,iBAAkBhI,EAAY,eAAgB,CAC5CwE,QAAS,mBACTz0F,IAAK6vF,IAAS2B,SAAS,oBACvB14E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,qBACpCryF,MAAOixF,IAAWoB,SAAS,2BAE7B0G,mBAAoBjI,EAAY,eAAgB,CAC9CwE,QAAS,qBACTz0F,IAAK6vF,IAAS2B,SAAS,sBACvB14E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,uBACpCryF,MAAOixF,IAAWoB,SAAS,iBAC3BxnF,QAAS2mF,EAAQQ,EACfpB,EAAM,2BACL+C,OACFR,gBAAgB,iBACnB6F,sBAAuBlI,EAAY,UAAW,CAC5CwE,QAAS,wBACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,0BAC5BryF,MAAOixF,IAAWoB,SAAS,mBAC3Bl4D,YAAau2D,IAAS2B,UAAS,GAC/B7vF,UAAWkuF,IAAS2B,UAAS,GAC7BxnF,QAAS2mF,EAAQQ,EACfpB,EAAM,eACNA,EAAM,aACL+C,OACFR,gBAAgB,yBACnB8F,gBAAiBnI,EAAY,UAAW,CACtCwE,QAAS,kBACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,kCAC5BryF,MAAOixF,IAAWoB,SAAS,oBAC3BxnF,QAAS2mF,EAAQQ,EAAKpB,EAAM,iBAAiByB,SAAS,CAACzB,EAAM,eAAe+C,SAE9EuF,6BAA8BpI,EAAY,UAAW,CACnDwE,QAAS,+BACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,kCAC5BryF,MAAOixF,IAAWoB,SAAS,yBAC3BxnF,QAAS2mF,EAAQQ,EAAKpB,EAAM,iBAAiByB,SAAS,CAACzB,EAAM,eAAe+C,SAE9EwF,iCAAkCrI,EAAY,UAAW,CACvDwE,QAAS,mCACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,kCAC5BryF,MAAOixF,IAAWoB,SAAS,8BAC3BxnF,QAAS2mF,EAAQQ,EAAKpB,EAAM,iBAAiByB,SAAS,CAACzB,EAAM,eAAe+C,SAE9EyF,mBAAoBtI,EAAY,UAAW,CACzCwE,QAAS,qBACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,kCAC5BryF,MAAOixF,IAAWoB,SAAS,eAC3BxnF,QAAS2mF,EAAQQ,EAAKpB,EAAM,iBAAiByB,SAAS,CAACzB,EAAM,eAAe+C,SAE9E0F,eAAgBvI,EAAY,UAAW,CACrCwE,QAAS,iBACT37E,QAAS+2E,IAAS2B,SAAS,CAAC,kCAC5BryF,MAAOixF,IAAWoB,SAAS,IAC3BxnF,QAAS2mF,EAAQQ,EAAKpB,EAAM,iBAAiByB,SAAS,CAACzB,EAAM,eAAe+C,SAE9E2F,wBAAyBxI,EAAY,OAAQ,CAC3CjmF,QAAS6lF,IAAS2B,SAAS,CACzBzB,EAAM,UACNA,EAAM,gBACNA,EAAM,oBACNA,EAAM,sBACNA,EAAM,4BAA4ByB,SAAS,CACzCxxF,IAAK,2BACLb,MAAO,wBAET4wF,EAAM,0BAGV2I,kBAAmBzI,EAAY,OAAQ,CACrCjmF,QAAS2mF,EAAQQ,EACfpB,EAAM,cACLyB,SAAS,CACVzB,EAAM,gBAGV4I,mBAAoB1I,EAAY,OAAQ,CACtCjmF,QAAS6lF,IAAS2B,SAAS,CACzBzB,EAAM,gCAGV6I,wBAAyB3I,EAAY,OAAQ,CAC3CjmF,QAAS2mF,EAAQQ,EACfpB,EAAM,iBACNA,EAAM,qBACNA,EAAM,yBACNA,EAAM,wCACNA,EAAM,oCACNA,EAAM,kBACLyB,SAAS,CACVzB,EAAM,gBACNA,EAAM,wBACNA,EAAM,iBACNA,EAAM,qBACNA,EAAM,yBACNA,EAAM,yBACNA,EAAM,yBACNA,EAAM,yBACNA,EAAM,yBACNA,EAAM,yBACNA,EAAM,wCACNA,EAAM,oCACNA,EAAM,gBACNA,EAAM,sBACNA,EAAM,mBAER/hC,cAAc,EACdG,iBAAiB,EACjBL,iBAAiB,EACjB9vB,kBAAkB,EAClB4vB,kBAAkB,EAClBS,kBAAkB,IAEpBwqC,kBAAmB5I,EAAY,UAAW,CACxCwE,QAAS,oBACTt1F,MAAOixF,IAAWoB,SAAS,YAC3BxnF,QAAS2mF,EAAQQ,EACfpB,EAAM,SACNA,EAAM,gBACNA,EAAM,gBACNA,EAAM,aACNA,EAAM,iBACLyB,SAAS,CAACzB,EAAM,aAAa+C,OAChCh6E,QAAS+2E,IAAS2B,SAAS,CAAC,wBAE9BsH,cAAe7I,EAAY,UAAW,CACpCwE,QAAS,gBACTt1F,MAAOixF,IAAWoB,SAAS,QAC3BxnF,QAAS2mF,EAAQQ,EACfpB,EAAM,eACLyB,SAAS,CAACzB,EAAM,aAAa+C,OAChCh6E,QAAS+2E,IAAS2B,SAAS,CAAC,oBAE9BuH,wBAAyB9I,EAAY,eAAgB,CACnDwE,QAAS,0BACTt1F,MAAOixF,IAAWoB,SAAS,YAC3BxnF,QAAS2mF,EAAQQ,EACfpB,EAAM,qBACNA,EAAM,iBACNA,EAAM,oBACLyB,SAAS,CACVzB,EAAM,qBAAqB+C,KAC3B/C,EAAM,iBAAiB+C,KACvB/C,EAAM,kBAAkByB,SAAS,CAACpqD,gBAAgB,MAEpDtuB,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,4BACpC7vF,UAAWkuF,IAAS2B,UAAS,KAE/BwH,iCAAkC/I,EAAY,OAAQ,CACpDjmF,QAAS2mF,EAAQQ,EACfpB,EAAM,6BACLyB,SAAS,CAACzB,EAAM,2BAA2B+C,SAEhDpnC,OAAQukC,EAAY,YAAa,CAC/BjmF,QAASomF,IAAWoB,SAAS,+BAC7B14E,QAAS+2E,IAAS2B,SAAS,CAAC,cAC3Bc,gBAAgB,WACnB2G,aAAchJ,EAAY,YAAa,CACrCjmF,QAASomF,IAAWoB,SAAS,kCAC7B14E,QAAS+2E,IAAS2B,SAAS,CAAC,mBAE9B0H,qBAAsBjJ,EAAY,YAAa,CAC7CjmF,QAASomF,IAAWoB,SAAS,0CAC7B14E,QAAS+2E,IAAS2B,SAAS,CAAC,2BAE9B2H,cAAelJ,EAAY,eAAgB,CACzC9wF,MAAOixF,IAAWoB,SAAS,YAC3B14E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,kBACpC7vF,UAAWkuF,IAAS2B,UAAS,GAC7BxnF,QAAS6lF,IAAS2B,SAAS,CACzBzB,EAAM,iBAEPuC,gBAAgB,YACnB8G,kBAAmBnJ,EAAY,eAAgB,CAC7C9wF,MAAOixF,IAAWoB,SAAS,gBAC3B14E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,sBACpCxnF,QAAS6lF,IAAS2B,SAAS,CACzBzB,EAAM,iBAEPuC,gBAAgB,gBACnB+G,sBAAuBpJ,EAAY,eAAgB,CACjD9wF,MAAOixF,IAAWoB,SAAS,oBAC3B14E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,0BACpCxnF,QAAS6lF,IAAS2B,SAAS,CACzBzB,EAAM,aACNA,EAAM,eAGVuJ,aAAcrJ,EAAY,eAAgB,CACxC9wF,MAAOixF,IAAWoB,SAAS,8CAC3B14E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,iBACpCxnF,QAAS+lF,EAAM,qBAAqByB,SAAS,CAC3CzB,EAAM,iBACNA,EAAM,gCAGVwJ,cAAetJ,EAAY,QAAS,CAClC9qD,UAAW0qD,IAAS2B,SAAS,QAC7B14E,QAAS+2E,IAAS2B,SAAS,CAAC,oBAC3Bc,gBAAgB,iBACnBkH,cAAevJ,EAAY,UAAW,CACpCwE,QAAS,gBACTzqF,QAAS2mF,EAAQQ,EACfpB,EAAM,kBACNA,EAAM,SACNA,EAAM,gBACNA,EAAM,aACNA,EAAM,eACNA,EAAM,WACNA,EAAM,WACLyB,SAAS,CACVvB,EAAY,YAAa,CACvBjmF,QAASomF,IAAWoB,SAAS,wWAGjCxxF,IAAK6vF,IAAS2B,SAAS,iBACvB14E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,kBACpCryF,MAAOixF,IAAWoB,SAAS,YAC3Bl4D,YAAau2D,IAAS2B,UAAS,GAC/B7vF,UAAWkuF,IAAS2B,UAAS,GAC7B9xD,UAAWmwD,IAAS2B,UAAS,KAC5Bc,gBAAgB,mBACnBmH,yBAA0BxJ,EAAY,UAAW,CAC/CwE,QAAS,2BACTt1F,MAAOixF,IAAWoB,SAAS,4BAC3BxnF,QAAS+lF,EAAM,sBAAsByB,SAAS,CAACzB,EAAM,uBAAuB+C,OAC5Eh6E,QAAS+2E,IAAS2B,SAAS,CAAC,+BAC3Bc,gBAAgB,4BACnBoH,oBAAqBzJ,EAAY,UAAW,CAC1CwE,QAAS,sBACTzqF,QAAS6lF,IAAS2B,SAAS,CAACzB,EAAM,eAClCj3E,QAAS+2E,IAAS2B,SAAS,CAAC,wBAC5Bl4D,YAAau2D,IAAS2B,UAAS,GAC/B7vF,UAAWkuF,IAAS2B,UAAS,KAC5Bc,gBAAgB,uBACnBqH,qCAAsC1J,EAAY,eAAgB,CAChE9wF,MAAOixF,IAAWoB,SAAS,oCAC3B14E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,yCACpCxnF,QAAS6lF,IAAS2B,SAAS,CACzBvB,EAAY,YAAa,CACvBjmF,QAASomF,IAAWoB,SAAS,gKAE/BvB,EAAY,YAAa,CACvBjmF,QAASomF,IAAWoB,SAAS,+FAE/BzB,EAAM,6CAGV6J,sCAAuC3J,EAAY,UAAW,CAC5D9wF,MAAOixF,IAAWoB,SAAS,oCAC3BxnF,QAAS6lF,IAAS2B,SAAS,CAACzB,EAAM,4CAA4C+C,KAAM/C,EAAM,eAAe+C,OACzGh6E,QAAS+2E,IAAS2B,SAAS,CAAC,0CAC5Bl4D,YAAau2D,IAAS2B,UAAS,GAC/B7vF,UAAWkuF,IAAS2B,UAAS,KAE/BqI,yCAA0C5J,EAAY,YAAa,CACjEjwF,IAAK6vF,IAAS2B,SAAS,8CAEzBsI,iCAAkC7J,EAAY,eAAgB,CAC5D9wF,MAAOixF,IAAWoB,SAAS,+BAC3B14E,QAAS+2E,IAAS2B,SAAS,CAAC,OAAQ,qCACpCxnF,QAAS6lF,IAAS2B,SAAS,CACzBvB,EAAY,YAAa,CACvBjmF,QAASomF,IAAWoB,SAAS,4JAE/BvB,EAAY,YAAa,CACvBjmF,QAASomF,IAAWoB,SAAS,+FAE/BzB,EAAM,yCAGVgK,kCAAmC9J,EAAY,UAAW,CACxD9wF,MAAOixF,IAAWoB,SAAS,gCAC3BxnF,QAAS6lF,IAAS2B,SAAS,CAACzB,EAAM,wCAAwC+C,KAAM/C,EAAM,eAAe+C,OACrGh6E,QAAS+2E,IAAS2B,SAAS,CAAC,sCAC5Bl4D,YAAau2D,IAAS2B,UAAS,GAC/B7vF,UAAWkuF,IAAS2B,UAAS,KAE/BwI,qCAAsC/J,EAAY,YAAa,CAC7DjwF,IAAK6vF,IAAS2B,SAAS,0CAEzByI,yBAA0BhK,EAAY,OAAQ,CAC5CjmF,QAAS6lF,IAAS2B,SAAS,CACzBzB,EAAM,qBAKCmK,EAAqB,CAChClpD,QAAS,CACP,CAAC,QAAUggC,GAAMA,EAAEl4D,SAAS7d,SAAS,UACrC,CAAC,iBAAmB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,mBAC9C,CAAC,gBAAkB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,kBAC7C,CAAC,uBAAyB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,yBACpD,CAAC,qBAAuB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,uBAClD,CAAC,0BAA4B+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,4BACvD,CAAC,WAAa+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,aACxC,CAAC,iBAAmB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,kCAC9C,CAAC,2BAA6B+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,6BACxD,CAAC,aAAe+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,eAC1C,CAAC,YAAc+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,mBACzC,CAAC,4BAA8B+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,8BACzD,CAAC,iBAAmB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,mBAC9C,CAAC,mBAAqB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,qBAChD,CAAC,eAAiB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,iBAC5C,CAAC,eAAiB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,iBAC5C,CAAC,sBAAwB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,wBACnD,CAAC,wBAA0B+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,0BACrD,CAAC,2BAA6B+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,6BACxD,CAAC,kBAAoB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,oBAC/C,CAAC,qBAAuB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,uBAClD,CAAC,4BAA8B+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,aAAe+1E,EAAEhnE,QAAQjP,MAAMi6C,GAAyB,oBAAfA,EAAMnhD,QACxG,CAAC,qBAAuBm9E,GAAMA,EAAEl4D,SAAS7d,SAAS,uBAClD,CAAC,oBAAsB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,+BACjD,CAAC,WAAa+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,aACxC,CAAC,aAAe+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,eAC1C,CAAC,kBAAoB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,oBAC/C,CAAC,qBAAuB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,uBAClD,CAAC,WAAa+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,aACxC,CAAC,eAAiB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,iBAC5C,CAAC,gBAAkB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,kBAC7C,CAAC,oBAAsB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,sBACjD,CAAC,eAAiB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,iBAC5C,CAAC,uCAAyC+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,yCACpE,CAAC,mCAAqC+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,qCAChE,CAAC,gBAAkB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,kBAC7C,CAAC,gBAAkB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,kBAC7C,CAAC,oBAAsB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,sBACjD,CAAC,wBAA0B+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,0BACrD,CAAC,qBAAuB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,uBAClD,CAAC,eAAiB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,SAC5C,CAAC,wBAA0B+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,uBACrD,CAAC,qBAAuB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,oBAClD,CAAC,eAAiB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,cAC5C,CAAC,gBAAkB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,eAC7C,CAAC,gBAAkB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,eAC7C,CAAC,aAAe+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,YAC1C,CAAC,0BAA4B+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,4BACvD,CAAC,gBAAkB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,kBAC7C,CAAC,oBAAsB+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,sBACjD,CAAC,OAAS+1E,GAAMA,EAAEl4D,SAAS7d,SAAS,SAAuB,IAAZ+1E,EAAEpqD,SAI9C,SAAS5B,EAAWzF,GACzB,MAAM46E,EAAkBD,EAAmB36E,EAAK1rB,MAChD,GAAIsmG,EAAiB,CACnB,MAAMC,GAAsBtrF,EAAAA,EAAAA,MAAKqrF,GAAkBE,GAAeA,EAAW,GAAG96E,KAChF,GAAI66E,EACF,OAAOA,EAAmB,EAE9B,CAEA,OAAO76E,EAAKk1E,SAAWl1E,EAAK1rB,IAC9B,C,kBOrrDO,SAASymG,EAAiBhjE,GAC/B,OAAOA,EAAMzX,QAAUyX,EAAMvX,GAC/B,CAMO,SAASw6E,EAAYjjE,GAC1B,OAAOA,EAAMvX,IAAMuX,EAAMzX,KAC3B,CAEO,SAAS26E,EAAcC,EAAkBC,GAC9C,OAAOD,EAAO16E,KAAO26E,EAAO76E,OAAS46E,EAAO56E,OAAS66E,EAAO36E,GAC9D,CAMO,SAAS46E,EAAmBF,EAAkBC,GACnD,OAAOF,EAAcC,EAAQC,GAAU,CAAC76E,MAAOtf,KAAKoQ,IAAI8pF,EAAO56E,MAAO66E,EAAO76E,OAAQE,IAAKxf,KAAK8nF,IAAIoS,EAAO16E,IAAK26E,EAAO36E,MAAQ,IAChI,CAEO,SAAS66E,EAAYH,EAAkBC,GAC5C,OAAOF,EAAcC,EAAQC,GAAU,CAAC76E,MAAOtf,KAAK8nF,IAAIoS,EAAO56E,MAAO66E,EAAO76E,OAAQE,IAAKxf,KAAKoQ,IAAI8pF,EAAO16E,IAAK26E,EAAO36E,MAAQ,IAChI,CAEO,SAAS86E,EAAaJ,EAAkBC,GAC7C,GAAIF,EAAcC,EAAQC,GAAS,CACjC,IAAII,EAA6B,GAgBjC,OAdIL,EAAO56E,MAAQ66E,EAAO76E,OACxBi7E,EAAUvoG,KAAK,CACbstB,MAAO46E,EAAO56E,MACdE,IAAK26E,EAAO76E,QAIZ46E,EAAO16E,IAAM26E,EAAO36E,KACtB+6E,EAAUvoG,KAAK,CACbstB,MAAO66E,EAAO36E,IACdA,IAAK06E,EAAO16E,MAIT+6E,CACT,CACE,MAAO,CAACL,EAEZ,CAEO,SAASM,EAA0BzjE,EAAiB/iC,EAAe4J,GACxE,MAAO,CACL0hB,MAAOyX,EAAMzX,MAAQtrB,EAAQ+iC,EAAMzX,MAAQ1hB,EAAQm5B,EAAMzX,MACzDE,IAAKuX,EAAMvX,KAAOxrB,EAAQ+iC,EAAMvX,IAAM5hB,EAAOm5B,EAAMvX,IAEvD,CAEO,SAASi7E,EAAiC1jE,EAAiB/iC,EAAe4J,GAC/E,OAAIm5B,EAAMvX,KAAOxrB,EACR,CAAC+iC,GACAA,EAAMzX,OAAStrB,EAChB,CAAC0mG,EAAW3jE,EAAOn5B,IAEnB,CACL,CACE0hB,MAAOyX,EAAMzX,MACbE,IAAKxrB,GAEP,CACEsrB,MAAOtrB,EAAQ4J,EACf4hB,IAAKuX,EAAMvX,IAAM5hB,GAIzB,CAEO,SAAS+8F,EAA0B5jE,EAAiB/iC,EAAe4J,GACxE,MAAMg9F,EAAW7jE,EAAMzX,MAAQtrB,EAAQgM,KAAKoQ,IAAI2mB,EAAMzX,MAAQ1hB,EAAO5J,GAAS+iC,EAAMzX,MAC9Eu7E,EAAS9jE,EAAMvX,IAAMxrB,EAAQgM,KAAKoQ,IAAI2mB,EAAMvX,IAAM5hB,EAAO5J,GAAS+iC,EAAMvX,IAE9E,OAAIo7E,IAAaC,EACR,CACLv7E,MAAOs7E,EACPp7E,IAAKq7E,GAGA,IAEX,CAEO,SAASh5B,EAAe9qC,EAAiB/iC,GAC9C,OAAOA,EAAQ+iC,EAAMzX,OAAStrB,GAAS+iC,EAAMvX,GAC/C,CAuBO,SAASk7E,EAAW3jE,EAAiBn5B,GAC1C,MAAO,CACL0hB,MAAOyX,EAAMzX,MAAQ1hB,EACrB4hB,IAAKuX,EAAMvX,IAAM5hB,EAErB,CAyCO,SAAS+jE,EAAgBm5B,GAC9B,OAAOA,EAAO7hG,MAAK,CAACihG,EAAQC,IAAmBD,EAAO16E,IAAM26E,EAAO36E,KACrE,CAEO,SAASsX,EAAegkE,GAC7B,OATK,SAA2BA,GAChC,OAAOA,EAAO7hG,MAAK,CAACihG,EAAQC,IAAmBD,EAAO56E,MAAQ66E,EAAO76E,OACvE,CAOSy7E,CAAkBD,GAAQnpG,QAAO,CAACqpG,EAAkBjkE,KACzD,MAAMkkE,EAAYD,EAAiB1mE,MACnC,GAAK2mE,EAEE,CACL,MAAMC,EAAgBb,EAAYY,EAAWlkE,GAQ7C,OANImkE,EACFF,EAAiBhpG,KAAKkpG,GAEtBF,EAAiBhpG,KAAKipG,EAAWlkE,GAG5BikE,CACT,CAXE,MAAO,CAACjkE,EAWV,GACC,GACL,CAEO,SAASokE,EAAuBpkE,EAAiBqkE,GACtD,MACMC,EADwBvkE,EAAeskE,GACI7sF,MAAM+sF,GAAeA,EAAW97E,IAAMuX,EAAMzX,QAE7F,QACI+7E,GACCA,EAAmB/7E,OAASyX,EAAMzX,OAClC+7E,EAAmB77E,KAAOuX,EAAMvX,GAEvC,CAIO,SAAS+7E,EAAmDC,GACjE,OAAOA,EAAWtqG,QAAQuqG,IAAc,SApMb1kE,EAoM2B0kE,EAAU1kE,OAnMnDzX,OAASyX,EAAMvX,KADvB,IAAsBuX,CAoM2C,GACxE,CAEO,SAASm2D,EAAmDsO,GACjE,OAAOA,EAAWviG,MAAK,CAACyiG,EAAYC,IAAuBD,EAAW3kE,MAAMzX,MAAQq8E,EAAW5kE,MAAMzX,OACvG,C,k7BC7LA,SAASs8E,EAAsB7N,GAC7B,OAAQA,EAAWz6F,MACjB,IAAK,OACH,MAAO,CAACy6F,EAAWz6F,KAAMy6F,EAAWjtE,KAAK5yB,KAE3C,IAAK,QACH,MAAO,CAAC6/F,EAAWz6F,KAAMy6F,EAAWjtE,KAAKC,SAE3C,QACE,OAAOgtE,EAAWz6F,KAExB,CAGO,SAASm7F,EAAoBhsB,GAClC,MAAMtiD,EAAcsiD,EAAgBtiD,YAC9B07E,GAAqBN,EAAAA,EAAAA,IAA2Bp7E,GAEhD27E,GAAoB3kF,EAAAA,EAAAA,SAAQ0kF,GAAqB9N,GAAe6N,EAAsB7N,KAEtFgO,GAA2B7O,EAAAA,EAAAA,KAA2B/nD,EAAAA,EAAAA,UAAQhqC,EAAAA,EAAAA,QAAO2gG,GAAmBjoG,KAAKmoG,IAC1F9O,EAAAA,EAAAA,IAA2B8O,GAAkBrqG,QAAO,CAACsqG,EAAuBlO,KACjF,GAAqC,IAAjCkO,EAAsBxpG,OACxB,MAAO,CAACs7F,GACH,CACL,MAAMmO,EAAiBD,EAAsB3nE,MACvC6nE,GAAqB9B,EAAAA,EAAAA,IAAY6B,EAAenlE,MAAOg3D,EAAWh3D,OAExE,GAAIolE,EAAoB,CACtB,MAAM/O,E,+VAAan/F,CAAA,GAAOiuG,GAC1B9O,EAAcr2D,MAAQolE,EACtBF,EAAsBjqG,KAAKo7F,EAC7B,MACE6O,EAAsBjqG,KAAKkqG,EAAgBnO,GAG7C,OAAOkO,CACT,IACC,QAIL,OADAx5B,EAAgBtiD,YAAc47E,EACvBt5B,CACT,CAoBO,SAAS25B,EAAgC35B,EAAkC1rC,GAChF,MAAM5W,EAAcsiD,EAAgBtiD,aAAe,GAC7C07E,GAAqBN,EAAAA,EAAAA,IAA2Bp7E,GAEhD27E,GAAoB3kF,EAAAA,EAAAA,SAAQ0kF,GAAqB9N,GAAe6N,EAAsB7N,KAE5F,IAAIsO,EAAiB,GAMrB,OALIP,EAA6B,YAC/BO,EAAiBP,EAA6B,UAAEjoG,KAAKyoG,GAAuBA,EAAmBvlE,eACxF+kE,EAA6B,WAG/BzyE,EAAAA,GAAY4Z,EAAAA,EAAAA,UAAQ9nC,EAAAA,EAAAA,QAAO2gG,GAAmBjoG,KAAK0oG,IACxD,MAAMp8E,EAAco8E,EAAgB1oG,KAAKyoG,GAAuBA,EAAmBvlE,QACnF,OAAOokE,EAAAA,EAAAA,IAAuBpkE,EAAO5W,EAAYrc,OAAOu4F,IAAmB,CAACE,EAAgB,GAAGjpG,KAAMipG,EAAgB,IAAM,IAAI,KAEnI,CAEO,SAASC,EAA2BvvG,EAAqCwvG,GAC9E,MAAAC,EAIID,EAAan9E,MAHVuhD,EAAQ67B,EAAbj9F,IACYikE,EAAQg5B,EAApBn9E,WACOuhD,EAAU47B,EAAjB1oG,MAGF2oG,EAIIF,EAAaj9E,IAHVo9E,EAAMD,EAAXl9F,IACYo9F,EAAMF,EAAlBp9E,WACOu9E,EAAQH,EAAf3oG,MAGIitE,GAAgBv6C,EAAAA,EAAAA,IAAkBz5B,EAAM4zE,GAE9C,IAAKI,EAAiB,MAAO,CAAC,EAE9B,MAAME,GAAYC,EAAAA,EAAAA,IAAen0E,EAAMg0E,GAEvC,GAAIxzC,EAAAA,GAAwBgvE,GAC1B,OAAOt7B,EAAUuC,GAAY04B,EAAgCj7B,EAAUuC,GAAW,CAACpkD,MAAOwhD,EAAYthD,IAAKs9E,IAAa,CAAC,EACpH,CACL,MAAMC,GAAcr2E,EAAAA,EAAAA,IAAkBz5B,EAAM2vG,GACtCI,GAAU57B,EAAAA,EAAAA,IAAen0E,EAAM8vG,GAE/BE,EAAcv5B,EAAW04B,EAAgCj7B,EAAUuC,GAAW,CAACpkD,MAAOwhD,EAAYthD,IAAK2hD,EAAUuC,GAAUhmD,KAAKjrB,SAAW,CAAC,EAC5IyqG,EAAYL,EAAST,EAAgCY,EAAQH,GAAS,CAACv9E,MAAO,EAAGE,IAAKs9E,IAAa,CAAC,EAI1G,OAAOzzE,EAAAA,EAAOA,EAAAA,EAAO6zE,GAAYD,EACnC,CACF,CAGO,SAAS5kE,EAAkB8kE,GAChC,MAA0C,kBAA5BA,GAAyC,SAAUA,GAAqE,kBAAjCA,EAAwBz/E,IAC/H,CAEO,SAAS0/E,EAAwB1/E,EAAO,IAC7C,MAAO,CACLA,KAAMA,EACNyC,YAAa,GAEjB,C,kBCzIO,SAASk9E,EAAkBpR,EAA8Cxb,GAC9E,GAAIA,GAAK,EACP,OAAOwb,EACF,CACL,MAAMqR,EAAYrR,EAAgBvtE,OAAO,GAAG,GAC5C,IAAI4+E,EAYF,OAAO,KAXP,OAAQA,EAAUhqG,MAChB,IAAK,OACH,OAAO,KAET,IAAK,OACH,OAAO+pG,EAAkBC,EAAU1+F,MAAO6xE,EAAI,GAEhD,QACE,OAAO4sB,EAAkBC,EAAU7zF,QAASgnE,EAAI,GAKxD,CACF,CAEO,SAAS8sB,EAAetR,EAA8Cxb,GAC3E,MAAMhnE,EAAU4zF,EAAkBpR,EAAiBxb,GACnD,OAAOhnE,GAAWA,EAAQiV,OAAO,GAAG,EACtC,CAEO,SAAS8+E,EAAiBC,EAAsC//E,GACrE,OAAQ+/E,EAAenqG,MACrB,IAAK,OACHmqG,EAAeh0F,SAAWiU,EAC1B,MACF,IAAK,OACH+/E,EAAe7+F,MAAM5M,KAAK,CACxBsB,KAAM,OACNmW,QAASiU,IAEX,MACF,QACE+/E,EAAeh0F,QAAQzX,KAAK,CAC1BsB,KAAM,OACNmW,QAASiU,IAGf,OAAO+/E,CACT,CAEO,SAASt3D,EAAiBu3D,GAC/B,OACE5rG,MAAMC,QAAQ2rG,KAEsB,IAAlCA,EAAuBjrG,QACvB,CACE,OACA,OACA,SACA,YACA,YACA,cACA,OACA,QACA,YACA,kBACA,qBACA,cACA,aACA,eACA,iBACA,eACA,cACA,iBACAiI,SAASgjG,EAAuB,GAAGpqG,MAG3C,C,y+CCzEO,SAASqqG,EAAS1wG,EAAM2wG,GAC7B,IAAIxqF,EAAS,KACb,GAAInmB,aAAgB6E,OAClB,IAAK,IAAIU,EAAI,EAAGA,EAAIvF,EAAKwF,OAAQD,GAAK,EAEpC,GADA4gB,EAASuqF,EAAS1wG,EAAKuF,GAAIorG,GACvBxqF,EACF,OAAOA,OAGN,GAAInmB,aAAgBwE,OAAQ,CACjC,GAAImsG,EAAO3wG,GACT,OAAOA,EAGT,IAAK,MAAM4wG,KAAQ5wG,EACjB,IAAIA,EAAK4wG,aAAiBpsG,QAAUxE,EAAK4wG,aAAiB/rG,SACxDshB,EAASuqF,EAAS1wG,EAAK4wG,GAAOD,GAC1BxqF,GACF,OAAOA,CAIf,CACA,OAAOA,CACT,CAEO,SAAS0qF,EAAmB7wG,EAAM2wG,GACvC,GAAI3wG,aAAgB6E,MAClB,IAAK,IAAIU,EAAI,EAAGA,EAAIvF,EAAKwF,OAAQD,GAAK,EAAG,CACvC,MAAM4gB,EAAS0qF,EAAmB7wG,EAAKuF,GAAIorG,GAC3C,GAAIxqF,EACF,OAAOA,CAEX,KACK,CACL,GAAIwqF,EAAO3wG,GACT,MAAO,CAACA,GAGV,IAAK,MAAM4wG,KAAQ5wG,EACjB,IAAKA,EAAK4wG,aAAiBpsG,QAAUxE,EAAK4wG,aAAiB/rG,QAAmB,qBAAT+rG,EAA6B,CAChG,MAAMzqF,EAAS0qF,EAAmB7wG,EAAK4wG,GAAOD,GAC9C,GAAIxqF,EACF,MAAQ,CAACnmB,GAAM6W,OAAOsP,EAE1B,CAEJ,CACA,OAAO,IACT,CAEO,SAAS2qF,EAAuB9wG,EAAM2wG,GAC3C,GAAI3wG,aAAgB6E,MAClB,OAAO7E,EAAK2xE,SAASo/B,GAAUD,EAAuBC,EAAOJ,KACxD,CACL,IAAIK,EAAcxsG,OAAO2V,QAAQna,GAC9BiE,QAAO,EAAEU,EAAKosG,MAAYA,aAAiBvsG,QAAUusG,aAAiBlsG,QAAkB,qBAARF,IAChFgtE,SAAQ,EAAEhtE,EAAKosG,KAAWD,EAAuBC,EAAOJ,KACxD/pG,KAAKb,GAAS,CAAC/F,GAAM6W,OAAO9Q,KAM/B,OAJI4qG,EAAO3wG,KACTgxG,EAAc,CAAC,CAAChxG,IAAO6W,OAAOm6F,IAGzBA,CACT,CACF,CAEO,SAASC,EAAajxG,EAAM2wG,GACjC,GAAI3wG,aAAgB6E,MAClB,IAAK,IAAIU,EAAI,EAAGA,EAAIvF,EAAKwF,OAAQD,GAAK,EAAG,CACvC,MAAM4gB,EAAS8qF,EAAajxG,EAAKuF,GAAIorG,GACrC,GAAIxqF,EACF,MAAO,CAAC5gB,GAAGsR,OAAOsP,EAEtB,KACK,CACL,GAAIwqF,EAAO3wG,GACT,MAAO,GAGT,IAAK,MAAM4wG,KAAQ5wG,EACjB,GAAIA,EAAK4wG,aAAiBpsG,QAAUxE,EAAK4wG,aAAiB/rG,MAAO,CAC/D,MAAMshB,EAAS8qF,EAAajxG,EAAK4wG,GAAOD,GACxC,GAAIxqF,EACF,MAAQ,CAACyqF,GAAM/5F,OAAOsP,EAE1B,CAEJ,CACA,OAAO,IACT,CAEO,SAAS+qF,EAAiBlxG,EAAM2wG,GACrC,GAAI3wG,aAAgB6E,MAClB,OAAO7E,EAAK2xE,SAAQ,CAACo/B,EAAOhqG,IAAUmqG,EAAiBH,EAAOJ,GAAQ/pG,KAAKuqG,GAAe,CAACpqG,GAAO8P,OAAOs6F,OACpG,CACL,IAAIA,EAAa3sG,OAAO2V,QAAQna,GAC7BiE,QAAO,EAAEU,EAAKosG,KAAYA,aAAiBvsG,QAAUusG,aAAiBlsG,QACtE8sE,SAAQ,EAAEhtE,EAAKosG,GAAQhqG,IAAUmqG,EAAiBH,EAAOJ,GAAQ/pG,KAAKuqG,GAAe,CAACxsG,GAAKkS,OAAOs6F,OAMrG,OAJIR,EAAO3wG,KACTmxG,EAAc,CAAC,IAAKt6F,OAAOs6F,IAGtBA,CACT,CAEF,CAwBO,SAAS1sB,EAAWzkF,EAAMoxG,GAC/B,OAAOh1E,EAAAA,EAAOA,EAAAA,EAAWg1E,GAAYpxG,EACvC,CAiBO,SAASqxG,EAAiBt/E,GAC/B,MAAMu/E,EAAkBC,EAAqBx/E,GAEvCy/E,GAAsBt5D,EAAAA,EAAAA,SAAQo5D,EAAgB1qG,KAAKjC,GAChDotB,EAAKptB,IAAQ,MAGhBwrC,EAAOnvC,EAAA,GAAO+wB,GAOpB,OANAu/E,EAAgBpsG,SAASP,IACnBwrC,EAAQxrC,KACVwrC,EAAQxrC,GAAOwrC,EAAQxrC,GAAKiC,KAAKywE,GAAcA,EAAU7kE,MAC3D,KAGKiM,EAAAA,EAAAA,QAAO,CAAC,CAACsT,EAAKvf,KAAM29B,MAAcqhE,EAAoB5qG,KAAKywE,GACzDg6B,EAAiBh6B,KAE5B,CAuBO,SAASo6B,EAAmBC,EAAaC,EAAaC,EAAe,IAC1E,GAAIA,EAAankG,SAASkkG,GAExB,OADA52F,QAAQwK,IAAK,kDAAiDosF,KACvD,KAGT,MAAMxhE,EAAUuhE,EAAYC,IAAY3wG,EAAA,GAAQ0wG,EAAYC,IAE5D,IAAKxhE,EAEH,OADAp1B,QAAQwK,IAAK,4BAA2BosF,KACjC,KAaT,OAV0BJ,EAAqBphE,GAE7BjrC,SAASP,IACrBwrC,EAAQxrC,KACVwrC,EAAQxrC,GAAOwrC,EAAQxrC,GAAKiC,KAAKirG,GACxBJ,EAAmBC,EAAaG,EAAc,IAAID,EAAcD,MAE3E,IAGKxhE,CACT,CAGO,SAASohE,EAAwBx/E,GACtC,OAAQA,EAAK1rB,MACX,IAAK,UACH,MAAO,CAAC,UAAW,YAAa,WAAY,QAAS,WAAY,eACnE,IAAK,cACL,IAAK,eACL,IAAK,iBACL,IAAK,cACL,IAAK,YACL,IAAK,yBACH,MAAO,CAAC,WACV,IAAK,QACH,MAAO,CAAC,UAAW,QACrB,IAAK,WACH,MAAO,CAAC,UAAW,SACrB,IAAK,eACH,MAAO,CAAC,UACV,IAAK,kBACH,MAAO,CAAC,oBAAqB,gBAC/B,IAAK,WACH,QAAQyrG,EAAAA,EAAAA,UAAS//E,EAAKvV,WAAY4uB,EAAAA,EAAAA,IAAkBrZ,EAAKvV,SAAkB,GAAK,CAAC,WACnF,QACE,MAAO,GAEb,CAEO,SAASwV,EAAyBD,GACvC,OAAQA,EAAK1rB,MACX,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,SACH,MAAO,CAAC,SACV,IAAK,YACL,IAAK,uBACL,IAAK,WACL,IAAK,YACL,IAAK,oBACL,IAAK,aACL,IAAK,oBACH,MAAO,CAAC,WACV,IAAK,WACH,QAAQyrG,EAAAA,EAAAA,UAAS//E,EAAKvV,WAAY4uB,EAAAA,EAAAA,IAAkBrZ,EAAKvV,SAAkB,CAAC,WAAa,GAC3F,QACE,MAAO,GAEb,CAsBO,SAASw6D,EAAgCjlD,GAC9C,OAAQA,EAAK1rB,MACX,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,SACH,MAAO,CAAC,SACV,IAAK,uBACL,IAAK,WACL,IAAK,YACL,IAAK,oBACL,IAAK,aACL,IAAK,oBACH,MAAO,CAAC,WAGV,QACE,MAAO,GAEb,CAEO,SAAS0rG,EAAsBhgF,GACpC,OAAOC,EAAsBD,GAAMlb,OAAO06F,EAAqBx/E,GACjE,CAEO,SAASigF,EAAUjgF,GACxB,OAAOkgF,EAAAA,EAAAA,eAAclgF,IAASA,EAAW,MAAKA,EAAU,MAAMA,EAAgB,YAAMA,EAAKmgF,iBAC3F,CAEO,SAASC,EAAa76C,EAA4BgwB,GACvD,OAAO0qB,EAAO79B,EAAe7c,EAAKgwB,GACpC,CAEO,SAAS8qB,EAAkCC,EAA2BtsG,EAAMusG,GACjF,MAAMvgF,EAAO0yD,EAAW4tB,EAAUtsG,GAClC,OAAIisG,EAAOjgF,IAASugF,EAAWvgF,GACtBhsB,EACEA,EAAKP,OAAS,EAChB4sG,EAA+BC,EAAUj2E,EAAAA,EAAOr2B,GAAOusG,GAEvD,IAEX,CAMO,SAAS7wC,EAAY4wC,EAA2BC,GACrD,OAAO5B,EAAS2B,GAAWtgF,GAASigF,EAAOjgF,IAASugF,EAAWvgF,IACjE,CAGO,SAASwxD,EAAiB8uB,EAA2B7/F,GAC1D,OAAOivD,EAAS4wC,GAAWtgF,GAASA,EAAU,MAAMvf,GACtD,CAYO,SAAS+/F,EAAmBF,EAA2BC,GAC5D,OAAOzB,EAAmBwB,GAAWtgF,GAASigF,EAAOjgF,IAASugF,EAAWvgF,IAC3E,CAEO,SAASa,EAAwBy/E,EAA2B7/F,GACjE,OAAO+/F,EAAgBF,GAAWtgF,GAASA,EAAU,MAAMvf,GAC7D,CAEO,SAASklD,EAAqB26C,EAA2BC,GAC9D,OAAOxB,EAAuBuB,GAAWtgF,GAASigF,EAAOjgF,IAASugF,EAAWvgF,IAC/E,CAEO,SAASygF,EAAqBH,EAA2BC,GAC9D,OAAOC,EAAgBF,EAAUC,GAAY7gF,MAAM,GAAG,EACxD,CAWO,SAASqjD,EAAuBu9B,EAA2B7/F,GAChE,MAAMigG,EAVD,SAAmCJ,EAA2B7/F,GACnE,OAAOggG,EAAkBH,GAAWtgF,GAASA,EAAU,MAAMvf,GAC/D,CAQoBkgG,CAAuBL,EAAU7/F,GACnD,OAAQigG,GAAaA,EAAUA,EAAUjtG,OAAS,EACpD,CAEO,SAASwvE,EAA+Bq9B,EAA2B/qB,GACxE,GAAgC,kBAArBlrD,EAAAA,EAAOkrD,IAA0BlrD,EAAAA,EAAOkrD,GAAY,EAAG,CAEhE,OAAOnT,EAAek+B,EADFj2E,EAAAA,GAAU,EAAGA,EAAAA,EAAOkrD,GAE1C,CAGF,CAyBO,SAASqrB,EAAgBN,EAA2BC,GACzD,OAAOrB,EAAaoB,GAAWtgF,GAASigF,EAAOjgF,IAASugF,EAAWvgF,IACrE,CAEO,SAAS0H,EAAqB44E,EAA2B7/F,GAC9D,OAAOmgG,EAAaN,GAAWtgF,GAASA,EAAU,MAAMvf,GAC1D,CAEO,SAAS2lE,EAAkBk6B,EAA2BC,GAC3D,OAAOpB,EAAiBmB,GAAWtgF,GAASigF,EAAOjgF,IAASugF,EAAWvgF,IACzE,CAEO,SAASoiD,EAAkBk+B,EAA2BtsG,GAC3D,OAAOq2B,EAAAA,EAAOA,EAAAA,EAAWr2B,GAAOssG,EAClC,CAEA,SAASO,EAA4BP,EAA2BtsG,GAC9D,OAAIosG,EAAaE,EAAUtsG,GAClBA,EAEAA,EAAKP,OAAS,EAAIotG,EAAyBP,EAAUj2E,EAAAA,EAAOr2B,SAASG,CAEhF,CAEO,SAASywE,EAA0B07B,EAA2BtsG,GACnE,OAAO6sG,EAAyBP,EAAUj2E,EAAAA,EAAOr2B,GACnD,CAEO,SAAS8sG,EAAqBR,EAA2BtsG,GAC9D,MAAM+sG,EAAan8B,EAAuB07B,EAAUtsG,GAE9CgtG,EAAgB32E,EAAAA,GAAO,EAAGr2B,GAChC,GAAI+sG,GAAcA,EAAWttG,OAAS,IAAMO,EAAKP,QAAqC,kBAAnButG,EACjE,OAAOA,CAIX,CAEO,SAASC,EAA0BX,EAA2BtsG,GACnE,MAAM+sG,EAAan8B,EAAuB07B,EAAUtsG,GAEpD,GAAI+sG,EAAY,CACd,GAAIA,EAAWttG,OAAS,IAAMO,EAAKP,QAAqC,kBAApB42B,EAAAA,GAAO,EAAGr2B,GAC5D,OAAOq2B,EAAAA,GAAO,EAAGr2B,GACZ,GAAG+sG,EAAWttG,OAAS,IAAMO,EAAKP,QAAqC,kBAApB42B,EAAAA,GAAO,EAAGr2B,GAClE,OAAOq2B,EAAAA,GAAO,EAAGr2B,EAErB,CAGF,CA+BO,SAASktG,EAAgBZ,EAA2B/qB,GACzD,MAAM4rB,EAAY92E,EAAAA,EAAOkrD,GACnBvgF,EAAaq1B,EAAAA,EAAOkrD,GAEpB6rB,EAAY/2E,EAAAA,EAAW82E,GAE7B,OAAO92E,EAAAA,EAAO+2E,EAAW/2E,EAAAA,EAASr1B,EAAO,GAAIsrG,EAC/C,CAoBO,SAASjtB,EAAaitB,EAA2B/qB,EAAoB32E,GAC1E,OAAOyiG,EAAWf,EAAU/qB,EAAUlrD,EAAAA,EAASzrB,GACjD,CAEO,SAASyiG,EAAcf,EAA2B/qB,EAAoB+rB,GAC3E,OAAOj3E,EAAAA,EAAOA,EAAAA,EAAWkrD,GAAW+rB,EAAMhB,EAC5C,CA6DO,SAASiB,EAAuCjB,EAA2B7/F,EAAU7N,EAAiB0uG,GAC3G,MAAM/rB,EAAW7tD,EAAkB44E,EAAU7/F,GAE7C,OAAO80E,EAAWlrD,EAAAA,EAAOA,EAAAA,EAAW,IAAIkrD,EAAU3iF,IAAO0uG,EAAMhB,GAAYA,CAC7E,CAEO,SAAS7qB,GAA2B6qB,EAA2B7/F,EAAU7N,EAAiBgM,GAC/F,OAAO2iG,EAAoCjB,EAAU7/F,EAAK7N,EAAKy3B,EAAAA,EAASzrB,GAC1E,CAgBA,SAAS4iG,GAAoCxhF,EAAuBrW,EAA+CoW,EAAY0hF,GAC7H,MAAMC,EAAW/3F,EAASoW,EAAOC,GAE3B2hF,EAAeF,EAAYzhF,GAE3B4hF,GAAmBz7D,EAAAA,EAAAA,SAAQw7D,EAAa9sG,KAAKjC,GAC1CotB,EAAKptB,IAAQ,MAGtB,OAAOD,EAAAA,EAAAA,QAAOivG,GAAkB,CAACC,EAAYv8B,IAAck8B,GAA4Bl8B,EAAW37D,EAAUk4F,EAAYJ,IAAcC,EACxI,CAMO,SAAS5hF,GAA4BE,EAAuBrW,EAA+CoW,GAChH,OAAOyhF,GAA4BxhF,EAAMrW,EAAUoW,EAAOy/E,EAC5D,CAMO,SAASvhE,GAAkBje,EAAuBrW,GACvD,MAAMy0B,EAAUz0B,EAASqW,GAczB,OAZoBggF,EAAmB5hE,GAE3BjrC,SAASotB,IACf6d,EAAQ7d,KACNztB,MAAMC,QAAQqrC,EAAQ7d,IACxB6d,EAAQ7d,GAAc6d,EAAQ7d,GAAY1rB,KAAKywE,GAAcrnC,GAAeqnC,EAAW37D,KAC9Ey0B,EAAQ7d,aAAuB9tB,SACxC2rC,EAAQ7d,GAAc5W,EAASy0B,EAAQ7d,KAE3C,IAGK6d,CACT,CA4BO,SAASiuD,GAA+CrsE,EAASrW,GACtE,MAAMy0B,EAAUz0B,EAASqW,GAUzB,OARoBw/E,EAAqBphE,GAE7BjrC,SAASotB,IACf6d,EAAQ7d,KACV6d,EAAQ7d,GAAc6d,EAAQ7d,GAAY1rB,KAAKywE,GAAc+mB,GAAiB/mB,EAAW37D,KAC3F,IAGKy0B,CACT,CAEO,SAAS0jE,GAAe9hF,GAC7B,IAAIoe,EAAUpe,EACd,MAAM+hF,EAAc/hF,EAAKvV,SAAWuV,EAAKnlB,MAAQmlB,EAAK2pB,MACtD,GAAI72C,MAAMC,QAAQgvG,GAAc,CAC9B,MAAMC,EAAcD,EAAYltG,KAAKywE,GAC3Bw8B,GAAex8B,KAGzB,GAAI08B,EAAYvuG,OAAS,EACvB,OAAQusB,EAAK1rB,MACX,IAAK,QACH8pC,EAAU3rC,OAAOia,OAAO,CAAC,EAAGsT,EAAM,CAACnlB,KAAMmnG,IACzC,MACF,IAAK,WACH5jE,EAAU3rC,OAAOia,OAAO,CAAC,EAAGsT,EAAM,CAAC2pB,MAAOq4D,IAC1C,MAEF,QACE5jE,EAAU3rC,OAAOia,OAAO,CAAC,EAAGsT,EAAM,CAACvV,QAASu3F,IAIpD,CAMA,YAJoB7tG,IAAhBiqC,EAAQ39B,MACV29B,EAAU3rC,OAAOia,OAAO,CAAC,EAAG0xB,EAAS,CAAC39B,KAAK09B,EAAAA,EAAAA,QAGrCC,CACV,CAoBO,SAASkyC,GAAiD/qB,EAAsB92B,GACrF,GAAmC,YAA/BA,EAAUnO,MAAMC,YAAsD,IAA1BkO,EAAUnO,MAAMtrB,MAC9D,OAAOy5B,EAGT,MAAMwzE,EAAYv6E,EAAkB69B,EAAK92B,EAAUnO,MAAM7f,KACzD,IAAKwhG,EACH,OAAOxzE,EAGT,MAAMyzE,EAAgBj/B,EAA4B1d,EAAK08C,GACvD,OAAKC,GAAwC,aAAvBA,EAAc5tG,KAIpCrF,EAAAA,EAAA,GAEOw/B,GAAS,IACZnO,MAAO,CACL7f,IAAKyhG,EAAczhG,IACnB8f,WAAY,UACZvrB,MAAO,KATJy5B,CAaX,C,igCCxwBO,SAAS0zE,EAAgCC,GAC9C,MAAMC,GAAgBhhC,EAAAA,EAAAA,WAAU17C,EAAAA,GAA0B,UAE1D,OADA08E,EAAcplE,YAAY0M,MAAMsoD,UAASqQ,EAAAA,EAAAA,OAAMF,GAAW,KAAM5R,EAAAA,EAAAA,IAAM,aAAa+C,QAC5E8O,EAAchkE,SAAS1Y,EAAAA,GAAiB,CAAC,EAClD,CAOO,SAAS48E,KAEd,OADuBlhC,EAAAA,EAAAA,WAAU17C,EAAAA,GAA2B,WACtC0Y,SAAS1Y,EAAAA,GAAiB,CAAC,EACnD,CAkDO,SAAS68E,GAA0BhoF,GACxC,GAjDF,SAAiCA,GAC/B,OAAOA,EAAM3f,KAAKW,MAAK4C,GACrBA,EAAIurC,MAAMnuC,MAAKouC,GACZA,EAAKZ,YAAkC,IAApBY,EAAKZ,YAAsBY,EAAKpjC,SAA4B,IAAjBojC,EAAKpjC,WAG1E,CA2CKi8F,CAAwBjoF,KAzC7B,SAAsCA,GACpC,OAAkE,IAA3D6P,EAAAA,EAAO7P,EAAM3f,KAAKhG,KAAIuJ,GAAOA,EAAIurC,MAAMl2C,UAASA,MACzD,CAwCSivG,CAA6BloF,GAAQ,CACxC,MAAMmoF,EAnCZ,SAAqBnoF,GAsBnB,OArB0BA,EAAM3f,KAAKhG,KAAIuJ,GAAOA,EAAIurC,MAAM,KACnBh3C,QACrC,CAACkpB,EAAM+tB,KACL,GAAI/tB,EAAK+mF,YAAc,EACrB,MAAO,CACLD,SAAU9mF,EAAK8mF,SACfC,YAAa/mF,EAAK+mF,YAAc,GAE7B,CACL,MAAMD,EAAW/4D,EAAKpjC,SAAW,EAEjC,MAAO,CACLm8F,SAAU9mF,EAAK8mF,SAAWA,EAC1BC,YAAaD,EAAW,EAE5B,IAGF,CAACC,YAAa,EAAGD,SAAU,IAGTA,QACtB,CAYuBE,CAAYroF,GACvBsoF,EAxCZ,SAAwBtoF,GACtB,OAAO6P,EAAAA,EAAM7P,EAAM3f,KAAK,GAAG8uC,MAAM90C,KAAI+0C,GAAQA,EAAKZ,YAAc,IAClE,CAsC0B+5D,CAAevoF,GAE7BwoF,EAAqC,GAE3C34E,EAAAA,EAAQ,EAAGs4E,GAAUxvG,SAAQ+1C,IAC3B,IAAK1uB,EAAM3f,KAAKquC,GAAW,CACzB,MAAM+5D,EAASd,EAAgC,GAC/C3nF,EAAQ6P,EAAAA,EAAOA,EAAAA,EAAW,CAAC,SAAUA,EAAAA,EAAS6e,EAAU+5D,GAASzoF,EACnE,CAEA6P,EAAAA,EAAQ,EAAGy4E,GAAa3vG,SAAQi2C,IAC9B,GAAI45D,EAAcxnG,MAAK0nG,GAtBjC,SAAiB95D,EAAqBF,EAAkBg6D,GACtD,OACI95D,GAAe85D,EAAK95D,aAAiBA,EAAc85D,EAAK95D,YAAc85D,EAAKl6D,YAC3EE,GAAYg6D,EAAKh6D,UAAcA,EAAWg6D,EAAKh6D,SAAWg6D,EAAK18F,OAErE,CAiByC28F,CAAQ/5D,EAAaF,EAAUg6D,KAAQ,CACpE,MAAME,EAAUb,KAChB/nF,EAAQ6P,EAAAA,EAAOA,EAAAA,EAAW,CAAC,OAAQ6e,EAAU,UAAW7e,EAAAA,EAAS+e,EAAag6D,GAAU5oF,EAC1F,KAAO,CACL,MAAMovB,EAAOpvB,EAAM3f,KAAKquC,GAAUS,MAAMP,GAElCJ,EAAaY,EAAKZ,YAAc,EAChCxiC,EAAUojC,EAAKpjC,SAAW,EAEb,IAAfwiC,GAAgC,IAAZxiC,GACtBw8F,EAAchwG,KAAK,CACjBk2C,SAAUA,EACV1iC,QAASA,EACT4iC,YAAaA,EACbJ,WAAYA,GAGlB,IACA,GAEN,CAGF,OAAOxuB,CACT,C,6jECrDO,MAAMoY,GAAsB,CACjCwmD,eAAgB,iBAChB7G,iBAAkB,mBAClBzB,sBAAuB,wBACvB1xB,sBAAuB,yBAGlB,SAAS5sB,GAAqB6wE,GACnC,QAAS5wG,OAAO0J,OAAOy2B,IAAqBrjB,MAAM0gB,GAAgBozE,IAAQpzE,GAC5E,CAEO,MAAMqzE,GAAgB,CAC3BC,SAAU,WACVC,SAAU,YAICC,GAAwB,wBACxBC,GAAY,YACZC,GAAkB,kBAClBC,GAAY,YACZC,GAAe,eACfC,GAAgB,gBAChBC,GAAmB,mBACnBC,GAAmB,mBACnBC,GAAsB,sBACtBC,GAAoB,oBACpBC,GAAsB,sBACtBC,GAAiB,iBACjBC,GAAiB,iBACjBC,GAAU,UACV/tC,GAAqB,qBACrBguC,GAAuB,uBACvBC,GAAqB,qBACrBC,GAAwB,wBACxBC,GAAsB,sBACtBC,GAAyB,yBACzBC,GAAuB,uBACvBC,GAA0B,0BAG1BjoE,GAAW,WACXkoE,GAAiC,iCACjCC,GAA6B,6BAC7BC,GAAc,cACdC,GAAe,eACfC,GAAiB,iBAEjBC,GAAc,cACdC,GAAiB,iBAGjBC,GAAa,aACbC,GAAe,eAKfC,GAAe,eACfC,GAAa,aACbC,GAAe,eACfC,GAAc,cACdC,GAAgB,gBAUhBC,GAAY,YAElB,SAASt8B,GAAe/jB,EAAK4jB,GAGlC,GAAIA,EAAO16C,UAAW,CACpB,MAAMo3E,EAAkBr1B,GAA8BjrB,EAAK4jB,EAAO16C,WAElE,IAAIo3E,EAQF,OADA78F,QAAQwK,IAAI,sDACL+xC,GANP4jB,EAAS9+C,EAAAA,EAAS,YAAa8+C,IACxB1oE,IAAMolG,EAAgBplG,IAC7B0oE,EAAOv2E,IAAMizG,EAAgBtlF,WAC7B4oD,EAAOpxC,MAAQ8tE,EAAgB9tE,KAKnC,CAEA,OAAQoxC,EAAO70E,MACb,KAAKmvG,GACH,OA0uCN,SAAqCl+C,EAAK4jB,GACxC,MAAMnpD,GAAOwxD,EAAAA,EAAAA,IAAcjsB,EAAK4jB,EAAO1oE,KAEvC,OAAKwkE,EAAAA,EAAAA,IAA6BjlD,GAAMtkB,SAASytE,EAAOv2E,KA2L1D,SAAgD2yD,EAAK4jB,GACnD,MAAMoM,GAAW7tD,EAAAA,EAAAA,IAAkB69B,EAAK4jB,EAAO1oE,KACzCqlG,EAAoB,IAAIvwB,EAAUpM,EAAOv2E,KAkD/C,OAhDA2yD,GAAM87C,EAAAA,EAAAA,IAAW97C,EAAKugD,GAAoBriC,IACxC,MAAMsiC,EAAqBtiC,EAAgBiO,kBAAkBniE,MAAKy2F,GAE9DC,GAAmB98B,EAAQ68B,KAC3B/K,EAAAA,GAAAA,IAAc9xB,EAAOpxC,MAAOiuE,EAAcjuE,SAI1CguE,IACF58B,EAAMl6E,GAAAA,GAAAA,GAAA,GACDk6E,GACA+8B,GAAeH,IAAmB,IACrCv5C,UAAWu5C,EAAmBv5C,aAIlC,MAAM25C,EAAah9B,EAAOg9B,YAAc,CAACznF,KAAM,GAAIyC,YAAa,IAEhEsiD,EAAkB2iC,GAA6B3iC,EAAiB0iC,EAAYh9B,EAAOpxC,MAAMzX,OAEzF,MAAM+lF,EAAgBh8E,EAAAA,EAAO,CAAC,QAAS,cAAe8+C,GAEtD,KAAK4xB,EAAAA,GAAAA,IAAiB5xB,EAAOpxC,OAAQ,CAOnC0rC,EAAkB6iC,GAAkC7iC,EAAiB,mBANnDx0E,GAAAA,GAAA,GACbo3G,GAAa,IAChB/xG,KAAM8wG,GACNrtE,OAAO2jE,EAAAA,GAAAA,IAAWvyB,EAAOpxC,MAAOouE,EAAWznF,KAAKjrB,UAIpD,CAEA,GAAI0yG,EAAWznF,KAAKjrB,OAAS,EAAG,CAU9BgwE,EAAkB6iC,GAAkC7iC,EAAiB,mBATtDx0E,GAAAA,GAAA,GACVo3G,GAAa,IAChB/xG,KAAM6wG,GACNptE,MAAO,CACLzX,MAAO6oD,EAAOpxC,MAAMzX,MACpBE,IAAK2oD,EAAOpxC,MAAMzX,MAAQ6lF,EAAWznF,KAAKjrB,UAKhD,CAEA,OAAOgwE,CAAe,IAGjBle,CACT,CA7OWghD,CAAuChhD,EAAK4jB,GAuBvD,SAA2C5jB,EAAK4jB,GAC9C,MAAMoM,GAAW7tD,EAAAA,EAAAA,IAAkB69B,EAAK4jB,EAAO1oE,KACzC+lG,EAAW,IAAIjxB,EAAUpM,EAAOv2E,KAChC6zG,EAAoB,IAAIlxB,EAAW,GAAEpM,EAAOv2E,gBAElD,IAAI8zG,EAAiB,CAAC,EAyJtB,OAvJAnhD,GAAM87C,EAAAA,EAAAA,IAAW97C,EAAKihD,GAAWG,IAC/B,IAAIlmC,EAAQkmC,GAAa,GAEzB,MAAMZ,EA7BV,SAAmCY,EAAWC,EAAYC,GACxD,MAAMC,EAAuBH,EAAUh0G,QAAO,CAACo0G,EAAiB/mF,KASvD,CACL5L,OATgBwyF,EAChBG,EAAgB3yF,OAChB4L,EACA+mF,EAAgBrxC,QAOhBA,OAJgBqxC,EAAgBrxC,OAASsxC,GAAoBhnF,MAM9D,CAAC5L,OAAQyyF,EAAcnxC,OAAQ,IAElC,OAAOoxC,EAAqB1yF,MAC9B,CAY+B6yF,CAA0BxmC,GAAO,CAACrsD,EAAQ4L,EAAM01C,KACzE,GAAKthD,EAAW,OAAOA,EAEvB,GAAI4L,EAAK0xD,iBAAkB,CACzB,MAAMw1B,GAAgBxL,EAAAA,GAAAA,IAAWvyB,EAAOpxC,OAAQ,EAAI29B,GAE9CyxC,EAAgCnnF,EAAK0xD,iBAAiBniE,MAAKy2F,IAC/DC,GAAmB98B,EAAQ68B,KAC3B/K,EAAAA,GAAAA,IAAciM,EAAelB,EAAcjuE,MAAM,IAGnD,GAAIovE,EAAiC,OAAOA,CAC9C,CAEA,GAAkB,cAAdnnF,EAAK1rB,MAAwB0rB,EAAKvV,QAAQinE,iBAAkB,CAC9D,MAAMw1B,GAAgBxL,EAAAA,GAAAA,IAAWvyB,EAAOpxC,OAAQ,EAAI29B,EAAS,GACvD0xC,EAAmCpnF,EAAKvV,QAAQinE,iBAAiBniE,MAAKy2F,GAExEC,GAAmB98B,EAAQ68B,KAC3B/K,EAAAA,GAAAA,IAAciM,EAAelB,EAAcjuE,SAI/C,GAAIqvE,EAAoC,OAAOA,CACjD,IACC,MAECrB,IACF58B,EAAMl6E,GAAAA,GAAAA,GAAA,GACDk6E,GACA+8B,GAAeH,IAAmB,IACrCv5C,UAAWu5C,EAAmBv5C,aAIlC,IAAI66C,EAAal+B,EAAO1I,OAAS,GACjC,MAAM6mC,EAAiBC,GAAmBF,GAE1CA,EAAaC,EAAe7mC,MAC5BimC,EAAiBY,EAAez2B,UAEhC,IAAI22B,EAAkBr+B,EAAOg9B,WAE7B,MAAMsB,EAAkBC,GAAiCjnC,EAAO0I,EAAOpxC,MAAMzX,OACvE6hD,EAAYslC,GAAmBhnC,EAAMgnC,EAAgBE,WAE3D,GAAIH,KAECrlC,GACkB,cAAnBA,EAAU7tE,MACqB,IAA/BmzG,EAAgBG,YAChB,CACA,MAAMC,EAAe,CACnBvzG,KAAM,YACNmM,KAAK09B,EAAAA,EAAAA,KACL1zB,QAAS+8F,GAGXA,EAAkB,KAClBH,EAAah9E,EAAAA,EAASw9E,EAAcR,EACtC,CAGF,IAAIS,EAAYz9E,EAAAA,EAAMg9E,EAAWxyG,KAAImrB,GAAQgnF,GAAoBhnF,MAKjE,GAJIwnF,IACFM,GAAwBN,EAAgB9oF,KAAKjrB,QAG3C4zG,EAAW5zG,OAAS,GAEpB0uE,GACmB,cAAnBA,EAAU7tE,MACVmzG,EAAgBG,WAAa,GAC7BzlC,EAAU13D,QAAQiU,KAAKjrB,OAAS,EAAIg0G,EAAgBG,WACpD,CACA,MAG6EG,EAAAt3G,IA5HrD8+F,EA4HGptB,EAAU13D,QA5HAzV,EA4HSyyG,EAAgBG,WAAa,EA3H1E,CACLI,GAAwBzY,EAAav6F,GACrCizG,GAAuB1Y,EAAav6F,KAyH6C,GAF3EkzG,EAAYH,EAAA,GACZI,EAAWJ,EAAA,GAKb,GAFAtnC,EAAQp2C,EAAAA,EAAMA,EAAAA,EAAW,CAACo9E,EAAgBE,UAAW,YAAaO,EAAcznC,GAEvC,cAArCp2C,EAAAA,EAAOg9E,GAAqB/yG,KAC9B+yG,EAAah9E,EAAAA,EAAOA,EAAAA,EAAW,CAACg9E,EAAW5zG,OAAS,EAAG,aAAagX,GAAW29F,GAAsB39F,EAAS09F,IAAcd,OACvH,CACL,MAAMQ,EAAe,CACnBvzG,KAAM,YACNmM,KAAK09B,EAAAA,EAAAA,KACL1zB,QAAS09F,GAGXL,GAAwB,EACxBT,EAAah9E,EAAAA,EAASw9E,EAAcR,EACtC,CACF,CA5IN,IAAgC9X,EAAav6F,EAqJzC,GANIwyG,IACF/mC,EAAQp2C,EAAAA,EAAOA,EAAAA,EAAW,CAACo9E,EAAgBE,UAAW,aAAcU,GAC3DjC,GAA6BiC,EAAYb,EAAiBC,EAAgBG,WAAa,IAC7FnnC,IAGD4mC,EAAW5zG,OAAS,EAAG,CACzB,IAAI60G,EAAc,EAEdb,IAEAa,EADiC,IAA/Bb,EAAgBG,WACJH,EAAgBE,UAEhBF,EAAgBE,UAAY,GAI9ClnC,EAAQp2C,EAAAA,EAAYi+E,EAAajB,EAAY5mC,EAC/C,CAEA,MAAM4lC,EAAgBh8E,EAAAA,EAAO,CAAC,QAAS,cAAe8+C,GAEtD,KAAK4xB,EAAAA,GAAAA,IAAiB5xB,EAAOpxC,OAAQ,CAOnC0oC,EAAQ8nC,GAAiC9nC,EAAO,mBAN9BxxE,GAAAA,GAAA,GACbo3G,GAAa,IAChB/xG,KAAM8wG,GACNrtE,OAAO2jE,EAAAA,GAAAA,IAAWvyB,EAAOpxC,MAAO+vE,KAIpC,CAGA,GAAIA,EAAY,EAAG,CAUjBrnC,EAAQ8nC,GAAiC9nC,EAAO,mBATlCxxE,GAAAA,GAAA,GACTo3G,GAAa,IAChB/xG,KAAM6wG,GACNptE,MAAO,CACLzX,MAAO6oD,EAAOpxC,MAAMzX,MACpBE,IAAK2oD,EAAOpxC,MAAMzX,MAAQwnF,KAKhC,CAEA,OAAOrnC,CAAK,IAGdlb,GAAM87C,EAAAA,EAAAA,IAAW97C,EAAKkhD,GAAoB51B,GAlnB5C,SAAmB23B,EAAK,CAAC,EAAGC,EAAK,CAAC,GAChC,OAAOp+E,EAAAA,EAAOo+E,GAAMh1G,OAAS,EAAI42B,EAAAA,EAAam+E,EAAMC,GAAQD,CAC9D,CAgnB0DE,CAAU73B,EAAW61B,KAEtEnhD,CACT,CAxLWojD,CAAkCpjD,EAAK4jB,EAIlD,CAlvCay/B,CAA4BrjD,EAAK4jB,GAC1C,KAAKvsC,GACH,OA69CN,SAA0B2oB,EAAK4jB,GAC7B,MAAM43B,GAAar5E,EAAAA,EAAAA,IAAkB69B,EAAK4jB,EAAO0/B,YAC3Cp+F,GAAUioE,EAAAA,EAAAA,IAAWntB,EAAK,IAAIw7C,EAAY53B,EAAO2/B,aACjDC,EAAgBt+F,EAAQiV,MAAM,EAAGypD,EAAO6/B,cAExCC,EAAe5+E,EAAAA,EAAM0+E,EAAcl0G,KAAImrB,GAAQgnF,GAAoBhnF,MAEnEkpF,EAAcj6G,GAAAA,GAAA,GACfk6E,GAAM,IACT70E,KAAMmvG,GACNhjG,IAAK0oE,EAAO0/B,WACZj2G,IAAKu2E,EAAO2/B,WACZ/wE,MAAO,CACLzX,MAAO2oF,EACPzoF,IAAKyoF,GAEPxoC,MAAO,EAAC9C,EAAAA,GAAAA,IAAiCwL,EAAOnpD,SAGlD,OAAOspD,GAAe/jB,EAAK2jD,EAC7B,CAj/CaC,CAAiB5jD,EAAK4jB,GAC/B,KAAK27B,GACH,OAi/CN,SAA4Cv/C,EAAK4jB,GAC/C,MACE1I,EAGE0I,EAHF1I,MACA0lC,EAEEh9B,EAFFg9B,WACAiD,EACEjgC,EADFigC,YAGIC,GAAc3hF,EAAAA,EAAAA,IAAkB69B,EAAK6jD,GACrCE,GAAUlnC,EAAAA,EAAAA,IAAe7c,EAAK8jD,GAEpC,IAAI7hF,EAAQ+hF,EAAWC,EACvB,GAAI,CAAC,cAAe,gBAAgB9tG,SAAS4tG,EAAQh1G,MAAO,CAE1D,IAAIysG,EAAa12E,EAAAA,GAAYonD,GAAW,qBAANA,GAA0B43B,GAC5D7hF,GAAS46C,EAAAA,EAAAA,IAAe7c,EAAKw7C,GAE7B,MAAM0I,EAAYjiF,EAAO/c,QAAQksC,WAAU32B,GAAQA,EAAKmlD,UAAYmkC,EAAQ7oG,MAE5E,GAAIgpG,EAAY,EAAK,OAAOlkD,EAE5BgkD,EAAY,UACZC,EAAcC,CAChB,MACEjiF,GAASu7C,EAAAA,EAAAA,IAAoBxd,EAAK6jD,GAClCG,GAAYtI,EAAAA,EAAAA,IAAuB17C,EAAK8jD,GACxCG,GAAc1I,EAAAA,EAAAA,IAAkBv7C,EAAK8jD,GAGvC,MAAMN,EAAgBvhF,EAAO/c,QAAQiV,MAAM,EAAG8pF,GACxCP,EAAe5+E,EAAAA,EAAM0+E,EAAcl0G,KAAImrB,GAAQgnF,GAAoBhnF,MAEnEkpF,EAAcj6G,GAAAA,GAAA,GACfk6E,GAAM,IACT70E,KAAMmvG,GACNhjG,IAAK+mB,EAAO/mB,IACZ7N,IAAK22G,EACLxxE,MAAO,CACLzX,MAAO2oF,EACPzoF,IAAKyoF,GAEP9C,WAAYA,EACZ1lC,MAAOA,IAGT,OAAO6I,GAAe/jB,EAAK2jD,EAC7B,CA9hDaQ,CAAmCnkD,EAAK4jB,GACjD,KAAK47B,GACH,OA8hDN,SAAwCx/C,EAAK4jB,GAC3C,MACE1I,EAIE0I,EAJF1I,MACA0lC,EAGEh9B,EAHFg9B,WACA0C,EAEE1/B,EAFF0/B,WACAC,EACE3/B,EADF2/B,WAGIthF,GAASgqD,EAAAA,EAAAA,IAAcjsB,EAAKsjD,GAC5Bc,EAAiBt/E,EAAAA,EAAM7C,EAAOshF,GAAYj0G,KAAImrB,GAAQgnF,GAAoBhnF,MAE1EkpF,EAAcj6G,GAAAA,GAAA,GACfk6E,GAAM,IACT70E,KAAMmvG,GACNhjG,IAAKooG,EACLj2G,IAAKk2G,EACL/wE,MAAO,CACLzX,MAAOqpF,EACPnpF,IAAKmpF,GAEPxD,WAAYA,EACZ1lC,MAAOA,IAGT,OAAO6I,GAAe/jB,EAAK2jD,EAC7B,CAvjDaU,CAA+BrkD,EAAK4jB,GAC7C,KAAK67B,GACH,OAujDN,SAA6Bz/C,EAAK4jB,GAChC,MAAMoM,GAAW7tD,EAAAA,EAAAA,IAAkB69B,EAAK4jB,EAAO1oE,KACzCuf,GAAO0yD,EAAAA,EAAAA,IAAWntB,EAAKgwB,GAE7B,IAAI/tD,EAAQ+hF,EAAWM,EAAkBC,EACzC,GAAI,CAAC,cAAe,gBAAgBpuG,SAASskB,EAAK1rB,MAAO,CAEvD,IAAIysG,EAAa12E,EAAAA,GAAYonD,GAAW,qBAANA,GAA0B8D,GAO5D,GANA/tD,GAAS46C,EAAAA,EAAAA,IAAe7c,EAAKw7C,GAE7BwI,EAAY,UAEZM,EAAmBriF,EAAO/c,QAAQksC,WAAU86B,GAAKA,EAAEtM,UAAYnlD,EAAKvf,MAEhEopG,EAAmB,EAAK,OAAOtkD,EAInC,GAFAukD,EAAiBtiF,EAAO/c,QAAQs/F,eAAct4B,GAAKA,EAAEtM,UAAYnlD,EAAKvf,MAElEqpG,EAAiB,EAAK,OAAOvkD,EAEjCukD,GAAgC,CAClC,MACEtiF,GAASu7C,EAAAA,EAAAA,IAAoBxd,EAAKvlC,EAAKvf,KACvC8oG,GAAYtI,EAAAA,EAAAA,IAAuB17C,EAAKgwB,GACxCs0B,GAAmB/I,EAAAA,EAAAA,IAAkBv7C,EAAKgwB,GAGxCu0B,EADE,CAAC,YAAYpuG,SAASskB,EAAK1rB,MACZu1G,EAAmB,EAEnBA,EAAmB,EAIxC,MAAMp/F,EAAU+c,EAAO+hF,GAEjBR,EAAgBt+F,EAAQiV,MAAM,EAAGmqF,GACjCZ,EAAe5+E,EAAAA,EAAM0+E,EAAcl0G,KAAImrB,GAAQgnF,GAAoBhnF,MAEnEgqF,EAAa3/E,EAAAA,EAAM5f,EAAQiV,MAAMmqF,EAAkBC,GAAgBj1G,KAAImrB,GAAQgnF,GAAoBhnF,MAEnGkpF,EAAcj6G,GAAAA,GAAA,GACfk6E,GAAM,IACT70E,KAAMmvG,GACNhjG,IAAK+mB,EAAO/mB,IACZ7N,IAAK22G,EACLxxE,MAAO,CACLzX,MAAO2oF,EACPzoF,IAAKyoF,EAAee,KAIxB,OAAO1gC,GAAe/jB,EAAK2jD,EAC7B,CA3mDae,CAAoB1kD,EAAK4jB,GAClC,KAAKu6B,GACH,OA2mDN,SAA2Bn+C,GACzB,OAAOA,CA2BT,CAvoDa2kD,CAAkB3kD,GAC3B,KAAK0/C,GACH,OAuoDN,SAA6B1/C,EAAK4jB,GAChC,OAAOghC,GAA0B5kD,EAAK4jB,GAAQ,EAChD,CAzoDaihC,CAAoB7kD,EAAK4jB,GAClC,KAAK+7B,GACH,OAyoDN,SAA+B3/C,EAAK4jB,GAClC,OAAOghC,GAA0B5kD,EAAK4jB,GAAQ,EAChD,CA3oDakhC,CAAsB9kD,EAAK4jB,GACpC,KAAKw6B,GACH,OAk3DN,SAA+Bp+C,EAAK4jB,GAClC,OAAOo4B,EAAAA,EAAAA,IAAoCh8C,EAAK4jB,EAAO1oE,IAAK,qBAAsB6pG,GAAYC,GAAsBD,EAASnhC,IAC/H,CAp3DaqhC,CAAsBjlD,EAAK4jB,GACpC,KAAKy6B,GACL,KAAKC,GACH,OAwyDN,SAAwBt+C,EAAK4jB,GAC3B,MAAMnpD,GAAOwxD,EAAAA,EAAAA,IAAcjsB,EAAK4jB,EAAO1oE,KAEvC,OAAIgqG,GAAiBzqF,EAAK1rB,KAAM60E,EAAOv2E,KAQzC,SAA8B2yD,EAAK4jB,GACjC,MAAMoM,GAAW7tD,EAAAA,EAAAA,IAAkB69B,EAAK4jB,EAAO1oE,KACzC+lG,EAAW,IAAIjxB,EAAUpM,EAAOv2E,KAItC,OAFA2yD,GAAM87C,EAAAA,EAAAA,IAAW97C,EAAKihD,GAAWG,GAAc4B,GAAiC5B,EAAW,eAAgBx9B,KAEpG5jB,CACT,CAdWmlD,CAAqBnlD,EAAK4jB,GAgBrC,SAAmC5jB,EAAK4jB,GACtC,MAAMoM,GAAW7tD,EAAAA,EAAAA,IAAkB69B,EAAK4jB,EAAO1oE,KACzCqlG,EAAoB,IAAIvwB,EAAUpM,EAAOv2E,KAS/C,OAPA2yD,GAAM87C,EAAAA,EAAAA,IAAW97C,EAAKugD,GAAoBriC,GACxCx0E,GAAAA,GAAA,GACKw0E,GAAe,IAClBknC,aAAcC,GAAWnnC,EAAgBknC,aAAcxhC,OAIpD5jB,CACT,CA1BWslD,CAA0BtlD,EAAK4jB,EAE1C,CAhzDa2hC,CAAevlD,EAAK4jB,GAC7B,KAAK26B,GACH,OAs3DN,SAA2Cv+C,EAAK4jB,GAC9C,MAAMoM,GAAW7tD,EAAAA,EAAAA,IAAkB69B,EAAK4jB,EAAO4hC,WAE/CxlD,EAAMylD,GAAqBzlD,EAAKgwB,GAChChwB,GAAM87C,EAAAA,EAAAA,IAAW97C,EAAK,IAAIgwB,EAAU,cAAelrD,EAAAA,EAAS8+C,EAAOn0E,MAAO,KAC1EuwD,GAAM87C,EAAAA,EAAAA,IAAW97C,EAAK,IAAIgwB,EAAU,aAAcpM,EAAOn0E,QAASs1G,GAAYC,GAAsBD,EAASnhC,KAE7G,MAAM1/B,GAAW24B,EAAAA,EAAAA,IAAe7c,EAAK,IAAIgwB,EAAU,OAAQ,IACrDutB,EAAcr5D,EAASE,MAAMl2C,OAC7BwvG,GAAStlC,EAAAA,GAAAA,IAAiCwkC,EAAgCW,IAIhF,OAFAv9C,GAAM87C,EAAAA,EAAAA,IAAW97C,EAAK,IAAIgwB,EAAU,QAASlrD,EAAAA,EAAS8+C,EAAOn0E,MAAOiuG,IAE7D19C,CACT,CAp4Da0lD,CAAkC1lD,EAAK4jB,GAChD,KAAK46B,GACH,OAo4DN,SAA8Cx+C,EAAK4jB,GACjD,MAAMoM,GAAW7tD,EAAAA,EAAAA,IAAkB69B,EAAK4jB,EAAO4hC,WAI/C,OAFAxlD,EAAMylD,GAAqBzlD,EAAKgwB,GAChChwB,GAAM87C,EAAAA,EAAAA,IAAW97C,EAAK,IAAIgwB,EAAU,aAAcpM,EAAOn0E,QAASs1G,GAAYC,GAAsBD,EAASnhC,KACtG5jB,CACT,CA14Da2lD,CAAqC3lD,EAAK4jB,GACnD,KAAK66B,GACH,OAi5DN,SAAiCz+C,EAAK4jB,GACpC,MAAMoM,GAAW7tD,EAAAA,EAAAA,IAAkB69B,EAAK4jB,EAAO4hC,WAW/C,OATAxlD,EAAM4lD,GAAwB5lD,EAAKgwB,GACnChwB,GAAM87C,EAAAA,EAAAA,IAAW97C,EAAK,IAAIgwB,EAAU,iBAAkBlrD,EAAAA,EAAS8+C,EAAOn0E,MAAO,KAC7EuwD,GAAM87C,EAAAA,EAAAA,IAAW97C,EAAK,IAAIgwB,EAAU,gBAAiBpM,EAAOn0E,QAASs1G,GAAYC,GAAsBD,EAASnhC,KAEhH5jB,GAAM87C,EAAAA,EAAAA,IAAW97C,EAAK,IAAIgwB,EAAU,QAASlrD,EAAAA,GAAOjsB,IAClD,MAAMglG,GAAUzlC,EAAAA,GAAAA,IAAiC4kC,MACjD,OAAOlB,EAAAA,EAAAA,IAAWjjG,EAAK,CAAC,SAAUisB,EAAAA,EAAS8+C,EAAOn0E,MAAOouG,GAAS,KAG7D79C,CACT,CA95Da6lD,CAAwB7lD,EAAK4jB,GACtC,KAAK86B,GACH,OA85DN,SAAoC1+C,EAAK4jB,GACvC,MAAMoM,GAAW7tD,EAAAA,EAAAA,IAAkB69B,EAAK4jB,EAAO4hC,WAI/C,OAFAxlD,EAAM4lD,GAAwB5lD,EAAKgwB,GACnChwB,GAAM87C,EAAAA,EAAAA,IAAW97C,EAAK,IAAIgwB,EAAU,gBAAiBpM,EAAOn0E,QAASs1G,GAAYC,GAAsBD,EAASnhC,KACzG5jB,CACT,CAp6Da8lD,CAA2B9lD,EAAK4jB,GACzC,KAAK+6B,GACL,KAAKC,GACH,OA06DN,SAA6C5+C,EAAK4jB,GAChD,MAAMoM,GAAW7tD,EAAAA,EAAAA,IAAkB69B,EAAK4jB,EAAO4hC,WAC/C,OAAO1J,EAAAA,EAAAA,IAAW97C,EAAK,IAAIgwB,EAAU,oBAAqB+0B,GAAYC,GAAsBD,EAASnhC,IACvG,CA76DamiC,CAAoC/lD,EAAK4jB,GAClD,KAAKi7B,GAOH,OALA7+C,EAD0BgmD,GAA6BhmD,EAAK4jB,EAAOqiC,kBAC3C74G,QAAO,CAAC84G,EAAWC,IAm9DjD,SAAkCnmD,EAAKvxD,EAAMm1E,GAC3C,OAAO9+C,EAAAA,EAAOA,EAAAA,EAAWr2B,GAAOq2B,EAAAA,EAAQ,CAACshF,SAAUrI,GAAcC,SAAUqI,YAAaziC,EAAO9zE,WAAYw2G,YAAa1iC,EAAO5hC,YAAage,EAC9I,CAr9DgEumD,CAAyBL,EAAWC,EAAYviC,IAAS5jB,GAMrH,KAAK8+C,GAOH,OALA9+C,EAD0BgmD,GAA6BhmD,EAAK4jB,EAAO4iC,kBAC3Cp5G,QAAO,CAAC84G,EAAWC,IA+8DjD,SAAkCnmD,EAAKvxD,EAAMm1E,GAC3C,OAAO9+C,EAAAA,EAAOA,EAAAA,EAAWr2B,GAAOq2B,EAAAA,EAAQ,CAACshF,SAAUrI,GAAcE,SAAUoI,YAAaziC,EAAO9zE,WAAYw2G,YAAa1iC,EAAO5hC,YAAage,EAC9I,CAj9DgEymD,CAAyBP,EAAWC,EAAYviC,IAAS5jB,GAMrH,KAAK++C,GACH,MAAM2H,EAg8DZ,SAAuC1mD,GACrC,OAAO45C,EAAAA,EAAAA,IAAiB55C,GAAMhzD,GAAQA,EAAIi6D,WAkW5C,SAA6B2c,GAC3B,OAAO+iC,GAAiB/iC,KAAYgjC,GAAkBhjC,EACxD,CApWyDijC,CAAoB75G,IAC7E,CAl8D0B85G,CAA8B9mD,GAKlD,OAJAA,EAAM0mD,EAAYt5G,QAAO,CAAC84G,EAAWC,IA28D3C,SAAmCnmD,EAAKvxD,EAAMm1E,GAC5C,OAAO9+C,EAAAA,EAAOA,EAAAA,EAAWr2B,GAAOq2B,EAAAA,EAAQ,CAAC0nD,aAAc5I,EAAO9zE,WAAYi3G,aAAcnjC,EAAO5hC,YAAage,EAC9G,CA78D0DgnD,CAA0Bd,EAAWC,EAAYviC,IAAS5jB,GAIvGA,EACT,KAAKgR,GACH,OAsyDN,SAA6BhR,EAAK4jB,GAChC,MAAMnpD,GAAOwxD,EAAAA,EAAAA,IAAcjsB,EAAK4jB,EAAO1oE,KAEvC,OAAIgqG,GAAiBzqF,EAAK1rB,KAAM60E,EAAOv2E,KAOzC,SAAyC2yD,EAAK4jB,GAC5C,MAAMoM,GAAW7tD,EAAAA,EAAAA,IAAkB69B,EAAK4jB,EAAO1oE,KACzC+lG,EAAW,IAAIjxB,EAAUpM,EAAOv2E,KAItC,OAFA2yD,GAAM87C,EAAAA,EAAAA,IAAW97C,EAAKihD,GAAWG,GAAc4B,GAAiC5B,EAAW,uBAAwBx9B,KAE5G5jB,CACT,CAbWinD,CAAgCjnD,EAAK4jB,GAehD,SAA8C5jB,EAAK4jB,GACjD,MAAMoM,GAAW7tD,EAAAA,EAAAA,IAAkB69B,EAAK4jB,EAAO1oE,KACzCqlG,EAAoB,IAAIvwB,EAAUpM,EAAOv2E,KAS/C,OAPA2yD,GAAM87C,EAAAA,EAAAA,IAAW97C,EAAKugD,GAAoBriC,GACxCx0E,GAAAA,GAAA,GACKw0E,GAAe,IAClBgpC,qBAAsBlC,GAAsB9mC,EAAgBgpC,qBAAsBtjC,OAI/E5jB,CACT,CAzBWmnD,CAAqCnnD,EAAK4jB,EAErD,CA9yDawjC,CAAoBpnD,EAAK4jB,GAClC,KAAKo7B,GACH,OAo5DN,SAA4Bh/C,EAAK4jB,GAC/B,MAAMoM,GAAW2pB,EAAAA,EAAAA,IAAa35C,GAAMvlC,GAASA,EAAKwsC,YAAc2c,EAAOyjC,2BACvE,OAAO1L,EAAAA,EAAAA,IAAa37C,EAAKgwB,EAC3B,CAv5Das3B,CAAmBtnD,EAAK4jB,GACjC,KAAKq7B,GACH,OAu5DN,SAAkCj/C,EAAKunD,EAAkB3jC,GACvD,MAAMoM,GAAW2pB,EAAAA,EAAAA,IAAa35C,GAAMvlC,GAASA,EAAKwsC,YAAcsgD,IAChE,OAAOzL,EAAAA,EAAAA,IAAW97C,EAAK,IAAIgwB,EAAU,aAAc+0B,GAAYC,GAAsBD,EAASnhC,IAChG,CA15Da4jC,CAAyBxnD,EAAK4jB,EAAO2jC,iBAAkB3jC,GAChE,KAAKs7B,GACH,OA05DN,SAA6Bl/C,EAAK2R,GAChC,MAAMqe,GAAW2pB,EAAAA,EAAAA,IAAa35C,GAAMvlC,GAASA,EAAKk3C,aAAeA,IACjE,OAAOgqC,EAAAA,EAAAA,IAAa37C,EAAKgwB,EAC3B,CA75Day3B,CAAoBznD,EAAK4jB,EAAOjS,YACzC,KAAKwtC,GACH,OA65DN,SAAgCn/C,EAAK4jB,GACnC,OAAOk4B,EAAAA,EAAAA,IAAW97C,EAAK,CAAC,qBAAsB+kD,GAAYC,GAAsBD,EAASnhC,IAC3F,CA/5Da8jC,CAAuB1nD,EAAK4jB,GACrC,KAAKw7B,GACH,OA+5DN,SAAmCp/C,EAAK4jB,GACtC,OAAOk4B,EAAAA,EAAAA,IAAW97C,EAAK,CAAC,qBAAsB+kD,GAAYA,EAAQp4G,QAAQg7G,GAAYA,EAAQzkD,qBAAuB0gB,EAAO1gB,sBAC9H,CAj6Da0kD,CAA0B5nD,EAAK4jB,GACxC,KAAKy7B,GACH,OAi6DN,SAAkCr/C,EAAK4jB,GACrC,OAAOk4B,EAAAA,EAAAA,IAAW97C,EAAK,CAAC,sBAAuB+kD,GAAYC,GAAsBD,EAASnhC,IAC5F,CAn6DaikC,CAAyB7nD,EAAK4jB,GACvC,KAAK07B,GACH,OAm6DN,SAAqCt/C,EAAK4jB,GACxC,OAAOk4B,EAAAA,EAAAA,IAAW97C,EAAK,CAAC,sBAAuB+kD,GAAYA,EAAQp4G,QAAQg7G,GAAYA,EAAQnmD,sBAAwBoiB,EAAOpiB,uBAChI,CAr6DasmD,CAA4B9nD,EAAK4jB,GAE9C,CAOO,MAAM1Z,GAA8ByR,KACpC,SAAyBlhD,EAAMuS,EAAoBxK,EAAY,GACpE,GAAIulF,GAActtF,KAAUutF,GAAevtF,EAAMuS,GAAuB,OAAO,KAM/EvS,EA8kEF,SAA0CA,EAAMuS,GAC9C,MAAAi7E,EAEIxtF,EADF0xD,iBAGI+7B,QAHY,IAAAD,EAAG,GAAEA,GAG2Bt7G,QAAQi3E,GAAWukC,GAAiBvkC,EAAQ52C,KAG9F,GAF6Bk7E,EAAyBl+F,MAAM45D,GAAW+iC,GAAiB/iC,IAAWA,EAAO70E,OAAS8wG,MAEvF7yE,IAAuBK,GAAoBwsB,sBACrE,OAAOp/B,EAGT,MAAM2tF,EAAwBF,EAAyBl+F,MAAM45D,GAAWA,EAAO70E,OAAS8wG,IAAkBwI,GAAkBzkC,EAAQ52C,KAEpI,GAAIo7E,EACF,OAAA1+G,GAAAA,GAAA,GACK+wB,GAAI,IACPqnB,qBAAsBsmE,IAI1B,MAAME,EAAqBJ,EAAyBl+F,MAAM45D,GAAWA,EAAO70E,OAAS6wG,IAAeyI,GAAkBzkC,EAAQ52C,KAE9H,GAAIs7E,EACF,OAAA5+G,GAAAA,GAAA,GACK+wB,GAAI,IACPqnB,qBAAsBwmE,IAI1B,OAAO7tF,CACT,CA7mES8tF,CADP9tF,EAggEF,SAAiCA,EAAMuS,GACrC,GAAkB,UAAdvS,EAAK1rB,KAAoB,OAAO0rB,EAEpC,MAAM+tF,EAAc/tF,EAAKnlB,KAAKpH,OACxBu6G,EAAiBhuF,EAAKnlB,KAAK,IAAI8uC,OAAOl2C,QAAU,EAEhDw6G,GA0GsBzzF,EA1GmBwF,EA4G7CxF,EAAM3f,KAAK+kE,SAAQ,CAACxhE,EAAK8qC,IACvB9qC,EAAIurC,MAAMi2B,SAAQ,CAACh2B,EAAMR,KACvB,MAAM5iC,EAAUojC,EAAKpjC,SAAW,EAC1BwiC,EAAaY,EAAKZ,YAAc,EACtC,OAAIxiC,EAAU,GAAKwiC,EAAa,EACvB,CACL,CACEC,SAAU,CACR3oB,MAAO4oB,EACP1oB,IAAK0oB,EAAW1iC,EAAU,GAE5B2iC,YAAa,CACX7oB,MAAO8oB,EACP5oB,IAAK4oB,EAAcJ,EAAa,KAK/B,EACT,OA7HAklE,EAAoBluF,EAAKmuF,YAAcvtB,EAAAA,MAAQmtB,GAAa,IAAM,KAClEK,EAAuBpuF,EAAKquF,eAAiBztB,EAAAA,MAAQotB,GAAgB,IAAM,KAC3EM,EAAkBtuF,EAAKsuF,iBAAmB,GAE1CC,EAAuBL,EAAkBr5G,KAAIs5G,GAAcK,GAAcL,EAAY57E,KACrFk8E,EAA0BL,EAAqBv5G,KAAIw5G,GAAiBK,GAAiBL,EAAe97E,KAmG5G,IAA8B/X,EAhG5B,IAAIm0F,EA2HN,SAA2CL,EAAiBM,EAAc,IACxE,OAAON,EAAgB37G,QAAO,CAACk8G,EAAWC,KACxC,MAAMC,EAAU,CACd9lE,SAAU6lE,EAAe7lE,SACzBE,YAAa2lE,EAAe3lE,aAG9B,IAA2G6lE,EAAAv+G,GAAvE45B,EAAAA,GAAa4kF,IAAaC,OAyB1CC,EAzByDJ,EAyBlDK,EAzB2DH,GA0BjFhU,EAAAA,GAAAA,IAAckU,EAAMlmE,SAAUmmE,EAAMnmE,YAAagyD,EAAAA,GAAAA,IAAckU,EAAMhmE,YAAaimE,EAAMjmE,aADjG,IAAwBgmE,EAAOC,CAzBoE,GAAEP,GAAU,GAAtGQ,EAAgBL,EAAA,GAAEM,EAASN,EAAA,GAEhC,OAAQF,EAAex6G,MACrB,KAAK4vG,GACH,MAAMqL,EAAe,CAACR,KAAYM,GAAkB18G,QAAO,CAACw8G,EAAOC,IAyB3E,SAAoBD,EAAOC,GACzB,MAAO,CACLnmE,UAAUoyD,EAAAA,GAAAA,IAAY8T,EAAMlmE,SAAUmmE,EAAMnmE,UAC5CE,aAAakyD,EAAAA,GAAAA,IAAY8T,EAAMhmE,YAAaimE,EAAMjmE,aAEtD,CA9BqFqmE,CAAWL,EAAOC,KAC/F,MAAO,IAAIE,EAAWC,GACxB,KAAKpL,GACH,OAAOmL,EACT,QACE,OAAOT,EACX,GACCD,EACL,CA9I2Ba,CADOC,GAAsBpB,EAAiB/7E,GACa07E,GAEpF,MAAM0B,EAAa3vF,EAAKnlB,KAAKhG,KAAI,CAACuJ,EAAK8qC,KACrC,MAAMslE,EAAgBD,EAAqBrlE,GAErC0mE,EAAcxxG,EAAIurC,MAAM90C,KAAI,CAAC+0C,EAAMR,KACvC,MAAMslE,EAAmBD,EAAwBrlE,GAEjD,IAAIymE,EACArpG,EAAUojC,EAAKpjC,SAAW,EAC1BwiC,EAAaY,EAAKZ,YAAc,EACpC,GAAIwlE,GAAiBE,EAAkB,CACrC,MAAMoB,EAqId,SAAuB5mE,EAAUE,EAAaulE,GAC5C,OAAOA,EAAmBp/F,MAAK0/F,GAC7BA,EAAShmE,SAAS3oB,OAAS4oB,GACxB+lE,EAAShmE,SAASzoB,KAAO0oB,GACzB+lE,EAAS9lE,YAAY7oB,OAAS8oB,GAC9B6lE,EAAS9lE,YAAY3oB,KAAO4oB,GAEnC,CA5IoC2mE,CAAc7mE,EAAUE,EAAaulE,GAE7DmB,EACGA,EAAoBE,QAMvBH,GAAiB,GALjBC,EAAoBE,SAAU,EAC9BxpG,EAAU+nG,EAAqB7uF,MAAMwpB,EAAU4mE,EAAoB7mE,SAASzoB,IAAM,GAAGtuB,QAAOgiB,IAAW,IAANA,IAAYzgB,OAC7Gu1C,EAAaylE,EAAwB/uF,MAAM0pB,EAAa0mE,EAAoB3mE,YAAY3oB,IAAM,GAAGtuB,QAAOgiB,IAAW,IAANA,IAAYzgB,OACzHo8G,GAAiB,GAKnBA,GAAiB,CAErB,MACEA,GAAiB,EAGnB,OAAA5gH,GAAAA,GAAA,GACK26C,GAAI,IACPqmE,WAAYJ,EACZ3mE,WACAE,cACA5iC,UACAwiC,cAAU,IAIRknE,EAAgBN,EAAY19G,QAAOi+G,GAAcA,EAAWF,aAElE,OAAAhhH,GAAAA,GAAA,GACKmP,GAAG,IACNpJ,MAAOk0C,EACPS,MAAOumE,EACPD,WAAYzB,GAAa,IAIvB4B,EAAeT,EAAWz9G,QAAOm+G,GAAaA,EAAUJ,aAGxDhmE,GADqBskE,EAAqB15G,KAAI,CAACyG,EAAMtG,IAAUsG,GAAQtG,IAAO9C,QAAQoJ,GAASslF,EAAAA,SAAWtlF,KAClFmzG,EAAwB55G,KAAI,CAACyG,EAAMtG,IAAUsG,GAAQtG,IAAO9C,QAAQoJ,GAASslF,EAAAA,SAAWtlF,MAEtH,OAAArM,GAAAA,GAAA,GACK+wB,GAAI,IACPnlB,KAAMu1G,EACNnmE,yBAGJ,CA7kESqmE,CADPtwF,EAAOuwF,GADPvwF,EA+MF,SAAkCA,EAAMuS,GACtC,OAAOtS,EAAAA,EAAAA,IAAsBD,GAAMrtB,QAAO,CAACqtB,EAAMwwF,IACxCnmF,EAAAA,EACLA,EAAAA,EAAMmmF,GACNnmF,EAAAA,EAAOA,EAAAA,EAAWmmF,IAAW/sC,GA0iF5B,SAA6CA,EAAiBlxC,GACnE,MAAAk+E,EAIIhtC,EAHFiO,iBAAAA,OAAgB,IAAA++B,EAAG,GAAEA,EAAAC,EAGnBjtC,EAFFknC,aAAAA,OAAY,IAAA+F,EAAG,GAAEA,EAAAC,EAEfltC,EADFgpC,qBAAAA,OAAoB,IAAAkE,EAAG,GAAEA,EAG3B,IAAAC,EAIIntC,EAHFtiD,YAAAA,OAAW,IAAAyvF,EAAG,GAAEA,EAAAC,EAGdptC,EAFF7rC,sBAAAA,OAAqB,IAAAi5E,EAAG,GAAEA,EAAAC,EAExBrtC,EADFlB,uBAAAA,OAAsB,IAAAuuC,EAAG,GAAEA,EAuJ7B,OApJAp/B,EAAiBv+E,SAASg2E,IACxB,GAAIukC,GAAiBvkC,EAAQ52C,GAC3B,GAAIq7E,GAAkBzkC,EAAQ52C,GAC5BgwC,EAAuBvvE,KACrB,CACEsB,KAAM60E,EAAO70E,KACbk4D,UAAW2c,EAAO3c,UAClBz0B,MAAOoxC,EAAOpxC,MACdwP,UAAW4hC,EAAO5hC,gBAGjB,CACL,GAAI4hC,EAAO70E,OAAS8wG,GASlB,OAAO,KARPxtE,EAAsB5kC,KACpB,CACEsB,KAAMsxG,GACNp5C,UAAW2c,EAAO3c,UAClBz0B,MAAOoxC,EAAOpxC,OAMtB,KACK,CACL,GAAIoxC,EAAO70E,OAAS6wG,GASlB,OAAO,KARPvtE,EAAsB5kC,KACpB,CACEsB,KAAMsxG,GACNp5C,UAAW2c,EAAO3c,UAClBz0B,MAAOoxC,EAAOpxC,OAMtB,KAGF4yE,EAAax3G,SAASg2E,IACpB,GAAIukC,GAAiBvkC,EAAQ52C,GAC3B,OAAQ42C,EAAO70E,MACb,KAAKsvG,GACH,MAAMxV,EAAqB,CACzB95F,KAAM60E,EAAOx0E,MACbojC,MAAK9oC,GAAA,GAAMk6E,EAAOpxC,QAGhBoxC,EAAOrnD,OACTssE,EAActsE,KAAI7yB,GAAA,GAAOk6E,EAAOrnD,OAGlCX,EAAcA,EAAYy+C,SAASmxC,IACjC,GAAIA,EAASz8G,OAAS85F,EAAc95F,OAAQ2mG,EAAAA,GAAAA,IAAc8V,EAASh5E,MAAOq2D,EAAcr2D,OAAQ,CAE9F,OADkBujE,EAAAA,GAAAA,IAAayV,EAASh5E,MAAOq2D,EAAcr2D,OAC5CljC,KAAIm8G,GAAQ/hH,GAAAA,GAAA,GAAS8hH,GAAQ,IAAEh5E,MAAOi5E,KACzD,CACE,MAAO,CAACD,EACV,IAGF5vF,EAAcA,EAAYrc,OAAO,CAACspF,IAE9Bwf,GAAkBzkC,EAAQ52C,IAAwC,UAAjB42C,EAAOx0E,OAC1D4tE,EAAuBvvE,KACrB,CACEsB,KAAMoxG,GACNl5C,UAAW2c,EAAO3c,UAClBz0B,MAAOoxC,EAAOpxC,MACdpjC,MAAOw0E,EAAOx0E,MACd4yC,UAAW4hC,EAAO5hC,YAKxB,MACF,KAAKs8D,GACH1iF,EAAcy/D,EAAAA,QAAUA,EAAAA,QAAUz/D,EAAYtsB,KAAKk6F,IACjD,GAAIA,EAAWz6F,OAAS60E,EAAOx0E,MAC7B,GAAIo6F,EAAWh3D,MAAMzX,MAAQ6oD,EAAOpxC,MAAMzX,MAAO,CAC/C,GAAIyuE,EAAWh3D,MAAMvX,IAAM2oD,EAAOpxC,MAAMvX,IACtC,MAAO,CAAAvxB,GAAAA,GAAA,GAEA8/F,GAAU,IACbh3D,MAAO,CACLzX,MAAOyuE,EAAWh3D,MAAMzX,MACxBE,IAAK2oD,EAAOpxC,MAAMzX,SACnBrxB,GAAAA,GAAA,GAGE8/F,GAAU,IACbh3D,MAAO,CACLzX,MAAO6oD,EAAOpxC,MAAMvX,IACpBA,IAAKuuE,EAAWh3D,MAAMvX,QAKvB,GAAIuuE,EAAWh3D,MAAMvX,IAAM2oD,EAAOpxC,MAAMzX,MAE7C,OAAO+J,EAAAA,EAAY,CAAC,QAAS,OAAQ8+C,EAAOpxC,MAAMzX,MAAOyuE,EAE7D,KAAO,CACL,GAAIA,EAAWh3D,MAAMvX,KAAO2oD,EAAOpxC,MAAMvX,IACvC,OAAO,KACF,GAAIuuE,EAAWh3D,MAAMzX,MAAQ6oD,EAAOpxC,MAAMvX,IAE/C,OAAO6J,EAAAA,EAAY,CAAC,QAAS,SAAU8+C,EAAOpxC,MAAMvX,IAAKuuE,EAE7D,CAGF,OAAOA,CAAU,MAGf6e,GAAkBzkC,EAAQ52C,IAC5BgwC,EAAuBvvE,KACrB,CACEsB,KAAMqxG,GACNn5C,UAAW2c,EAAO3c,UAClBz0B,MAAOoxC,EAAOpxC,MACdpjC,MAAOw0E,EAAOx0E,MACd4yC,UAAW4hC,EAAO5hC,YAU9B,IAGFklE,EAAqBt5G,SAASg2E,IACxBukC,GAAiBvkC,EAAQ52C,IAAuBq7E,GAAkBzkC,EAAQ52C,IAC5EgwC,EAAuBvvE,KACrB,CACEsB,KAAM60E,EAAO70E,KACbk4D,UAAW2c,EAAO3c,UAClBz0B,MAAOoxC,EAAOpxC,MACdwP,UAAW4hC,EAAO5hC,WAGxB,IAGFt4C,GAAAA,GAAA,GACKw0E,GAAe,IAClBtiD,cACAyW,wBACA2qC,0BAEJ,CAjtFuD0uC,CAAoCxtC,EAAiBlxC,KACtGvS,IAEDA,EACL,CAvNSkxF,CADPlxF,EA4MF,SAA8BA,EAAM+H,GAClC,OAAOsC,EAAAA,EAAQ,YAAatC,EAAW/H,EACzC,CA9MSmxF,CAAqBnxF,EAAM+H,GACIwK,GACEA,GACHA,GACSA,GAG1C,CAAC,UAAW,aAAa72B,SAASskB,EAAK1rB,QAEzC0rB,EAuNJ,SAAkDA,EAAMuS,GACtD,OAAOitE,EAAAA,EAAAA,IAAqBx/E,GAAMrtB,QAAO,CAACqtB,EAAMwwF,IACvCnmF,EAAAA,EACLA,EAAAA,EAAMmmF,GACNnmF,EAAAA,EACEA,EAAAA,EAAWmmF,GAAUnmF,EAAAA,EACrBA,EAAAA,GAAOiiE,GACkB,aAAnBA,EAAUh4F,KACL88G,GAAiD9kB,EAAW/5D,GAE5D+5D,MAIbtsE,IAEDA,EACL,CAxOWqxF,CAAyCrxF,EAAMuS,GAEtDvS,EAAI/wB,GAAAA,GAAA,GACC+wB,GAAI,IACPvV,QAASmmE,GAAmB5wD,EAAKvV,QAASuV,EAAKsxF,iBAAkB/+E,MAMrE,OAFAvS,EAwOF,SAAmCA,EAAMuS,GACvC,OAAOitE,EAAAA,EAAAA,IAAqBx/E,GAAMrtB,QAAO,CAACqtB,EAAMwwF,IACvCnmF,EAAAA,EACLA,EAAAA,EAAMmmF,GACNnmF,EAAAA,EAAOA,EAAAA,EAAWmmF,GAAUnmF,EAAAA,EAC1BA,EAAAA,EAAWA,EAAAA,EAAXA,EAAkB,CAACiiE,EAAWt3F,IAAUy6D,GAA4B68B,EAAW/5D,EAAoBv9B,KACnGq1B,EAAAA,EAASA,EAAAA,KAEXrK,IAEDA,EACL,CAnPSuxF,CAA0BvxF,EAAMuS,EAGzC,IAGA,SAASi/E,GAAgBC,EAAMC,GAC7B,UAAA70B,KAA2B60B,EAAM,CAAC,IAADC,EAAAlhH,GAAAosF,EAAA,SAArBjqF,EAAG++G,EAAA,GAAE/yG,EAAK+yG,EAAA,GAChBF,EAAKljH,IAAIqE,GACX6+G,EAAKpxB,IAAIztF,EAAK6+G,EAAKljH,IAAIqE,GAAKkS,OAAOlG,IAEnC6yG,EAAKpxB,IAAIztF,EAAKgM,EAElB,CAEA,OAAO6yG,CACT,CAEA,SAASG,GAAqBC,EAAW1oC,GACnC0oC,EAAUtjH,IAAI46E,EAAO3c,WACvBqlD,EAAUtjH,IAAI46E,EAAO3c,WAAWx5D,KAAKm2E,GAErC0oC,EAAUxxB,IAAIlX,EAAO3c,UAAW,CAAC2c,GAErC,CAEO,MAAM2oC,GAA0C5wC,KACvD,SAAqClhD,EAAMuC,OAAUpuB,GACnD,MAAM49G,EAAe,IAAIC,IAEnBC,EAAejyF,EAAKuC,WAAaA,EAQvC,OANAivF,GAAgBO,EAuBlB,SAA2C/xF,EAAMuC,GAC/C,MAAMwvF,EAAe,IAAIC,IAGzB,IAAIE,GADelyF,EAAK0xD,kBAAoB,IACTx/E,QAAQi3E,GAAWgpC,GAAuBhpC,KAEzE+oC,EAAkB,IAAMA,EAAkB,GAAGzxG,MAAQuf,EAAKvf,MAC5DyxG,EAAoBA,EAAkBr9G,KAAIs0E,GACxCl6E,GAAAA,GAAA,GACKk6E,GAAM,IACT1oE,IAAKuf,EAAKvf,IACV21D,eAAgBp2C,EAAK1rB,UAKvBiuB,IACF2vF,EAAoBA,EAAkBr9G,KAAIs0E,GACxCl6E,GAAAA,GAAA,GACKk6E,GAAM,IACT5mD,UAAWA,OASjB,OAJA2vF,EAAkB/+G,SAAQg2E,IACxByoC,GAAqBG,EAAc5oC,EAAO,IAGrC4oC,CACT,CArDgCK,CAAkCpyF,EAAMiyF,IACtET,GAAgBO,EAsDlB,SAA0C/xF,EAAMuC,GAC9C,MAAMwvF,EAAe,IAAIC,IAGzB,IAAIE,GADelyF,EAAKqyF,mBAAqB,IACVngH,QAAQi3E,GAAWgpC,GAAuBhpC,KAEzE5mD,IACF2vF,EAAoBA,EAAkBr9G,KAAIs0E,GACxCl6E,GAAAA,GAAA,GACKk6E,GAAM,IACT5mD,UAAWA,OASjB,OAJA2vF,EAAkB/+G,SAAQg2E,IACxByoC,GAAqBG,EAAc5oC,EAAO,IAGrC4oC,CACT,CA1EgCO,CAAiCtyF,EAAMiyF,IACrET,GAAgBO,EA2ElB,SAAwC/xF,EAAMuC,GAC5C,MAAMwvF,EAAe,IAAIC,IAsCzB,OApCA/xF,EAAAA,EAAAA,IAAsBD,GAAM7sB,SAASq9G,IACnC,GAAIxwF,EAAKwwF,GAAU,CAOjB,IAAI0B,EANe,IACdlyF,EAAKwwF,GAAS9+B,kBAAoB,MAClC1xD,EAAKwwF,GAAS7F,cAAgB,MAC9B3qF,EAAKwwF,GAAS/D,sBAAwB,IAGRv6G,QAAQi3E,GAAWgpC,GAAuBhpC,KAEzE+oC,EAAkB,KACpBA,EAAoBA,EAAkBr9G,KAAIs0E,GACxCl6E,GAAAA,GAAA,CACEyvB,KAAMsB,EAAKwwF,GAAS9xF,KAAKgB,MAAMypD,EAAOpxC,MAAMzX,MAAO6oD,EAAOpxC,MAAMvX,MAC7D2oD,GAAM,IACT1oE,IAAKuf,EAAKvf,IACV7N,IAAK49G,OAKPjuF,IACF2vF,EAAoBA,EAAkBr9G,KAAIs0E,GACxCl6E,GAAAA,GAAA,GACKk6E,GAAM,IACT5mD,UAAWA,OAKjB2vF,EAAkB/+G,SAAQg2E,IACxByoC,GAAqBG,EAAc5oC,EAAO,GAE9C,KAGK4oC,CACT,CAnHgCQ,CAA+BvyF,EAAMiyF,IACnET,GAAgBO,EAoHlB,SAAuC/xF,EAAMuC,GAC3C,MAAAiwF,EAIIxyF,EAHFmuF,WAAAA,OAAU,IAAAqE,EAAG,GAAEA,EAAAC,EAGbzyF,EAFFquF,cAAAA,OAAa,IAAAoE,EAAG,GAAEA,EAAAC,EAEhB1yF,EADFsuF,gBAAAA,OAAe,IAAAoE,EAAG,GAAEA,EAGhBX,EAAe,IAAIC,IA0BzB,MAxBwB,IACnB3nF,EAAAA,EAAU8jF,MACV9jF,EAAAA,EAAUgkF,MACVC,GAGWn7G,SAAQg2E,IAClBgpC,GAAuBhpC,KACzBA,EAAMl6E,GAAAA,GAAA,GACDk6E,GAAM,IACT1oE,IAAK0oE,EAAO4hC,YAGVxoF,IACF4mD,EAAMl6E,GAAAA,GAAA,GACDk6E,GAAM,IACT5mD,UAAWA,KAIfqvF,GAAqBG,EAAc5oC,GACrC,IAGK4oC,CACT,CAtJgCY,CAA8B3yF,EAAMiyF,IAClET,GAAgBO,EAKlB,SAAuC/xF,EAAMuC,GAC3C,MAAMwvF,EAAe,IAAIC,IAUzB,OARAxS,EAAAA,EAAAA,IAAqBx/E,GAAM7sB,SAASq9G,IAC9BxwF,EAAKwwF,IACPxwF,EAAKwwF,GAASr9G,SAAQm5F,IACpBklB,GAAgBO,EAAcD,GAAwCxlB,EAAW/pE,GAAW,GAEhG,IAGKwvF,CACT,CAjBgCa,CAA8B5yF,EAAMiyF,IAE3DF,CACT,IAkKA,SAASxB,GAA2BvwF,EAAMuS,GACxC,OAAOm9E,GAAsB1vF,EAAKqyF,mBAAqB,GAAI9/E,GAAoB5/B,QAAO,CAACqtB,EAAM6yF,IAC3F5jH,GAAAA,GAAA,GAAW+wB,GAAS6yF,EAASC,kBAC5B9yF,EACL,CAsBO,MAAMoxF,GAAmDlwC,KAChE,SAA8ClhD,EAAMuS,GAClD,OAAOg+E,GAA2BvwF,EAAMuS,EAC1C,IAeO,MAAM8iD,GAA6CnU,KAC1D,SAAwC3b,EAAKk4C,GAC3C,MAAMsV,EAAkBtV,EAAan9E,MAAM7f,IACrC80E,GAAW7tD,EAAAA,EAAAA,IAAkB69B,EAAKwtD,GAExC,IAAKx9B,EAAY,OAAOhwB,EAExB,MAAMvlC,GAAOoiD,EAAAA,EAAAA,IAAe7c,EAAKgwB,GAGjC,IAAK,CAAC,YAAa,YAAY75E,SAASskB,EAAK1rB,OAASmpG,EAAan9E,MAAMC,WAAc,OAAOglC,EAE9F,IAAIytD,EAAiBz9B,EAChBkoB,EAAan9E,MAAMC,aACtByyF,GAAiBpuC,EAAAA,EAAAA,IAAuBrf,EAAKgwB,IAG/C,MAAM09B,GAAqB5S,EAAAA,EAAAA,IAA+B96C,EAAKytD,GAAiBhzF,GAAS,CAAC,UAAW,aAAatkB,SAASskB,EAAK1rB,QAEhI,IAAK2+G,EAAsB,OAAO1tD,EAElC,OAAO8tB,EAAAA,EAAAA,IAAU9tB,EAAK,IAAI0tD,EAAoB,gCAAgC,EAChF,IAEO,MAAM39B,GAAsCpU,KACnD,SAAiC3b,EAAK7nC,EAAa4e,GACjD,GAAI5e,EAAYjd,IAAK,CACnB,MAAM80E,GAAW7tD,EAAAA,EAAAA,IAAkB69B,EAAK7nC,EAAYjd,KAChD80E,IACFhwB,GAAM8tB,EAAAA,EAAAA,IAAU9tB,EAAK,IAAIgwB,EAAU,eAAgB73D,GAE/CA,EAAYC,OAASu1F,GAAAA,KACvB3tD,GAAM8tB,EAAAA,EAAAA,IAAU9tB,EAAK,IAAIgwB,EAAU,kBAAmBj5C,IAG5D,CAEA,OAAOipB,CACT,IAMO,MAAM+gB,GAAqDpF,KAC3D,SAAgDlhD,GAKrD,OAJAA,EAAOmzF,GAA4BnzF,GAEnCA,EAAOozF,GADPpzF,GAAO29C,EAAAA,GAAAA,IAAiC39C,GAI1C,IAEO,SAASmzF,GAA4BnzF,GAa1C,MAZkB,UAAdA,EAAK1rB,OACP0rB,EAAOwiF,GAAuBxiF,IAGhCA,GAAOw/E,EAAAA,EAAAA,IAAqBx/E,GAAMrtB,QAAO,CAACqtB,EAAMwwF,IACvCnmF,EAAAA,EACLA,EAAAA,EAAMmmF,GACNnmF,EAAAA,EAAOA,EAAAA,EAAWmmF,IAAWjlB,GAAeA,EAAW12F,KAAIywE,GAAa6tC,GAA4B7tC,OACpGtlD,IAEDA,EAGL,CAEO,SAASozF,GAA6BpzF,GAC3C,OAAQA,EAAK1rB,MACX,IAAK,YACL,IAAK,WACH,OAAO0rB,EACT,IAAK,UACL,IAAK,YACH,IAAKA,EAAKsxF,iBAAkB,CAC1B,MAAA+B,EAGI9L,GAAmBvnF,EAAKvV,SAF1Bg2D,EAAK4yC,EAAL5yC,MACAoQ,EAASwiC,EAATxiC,UAGF7wD,EAAI/wB,GAAAA,GAAA,GACC+wB,GAAI,IACPvV,QAASg2D,EACT6wC,iBAAkBzgC,GAEtB,EAYJ,OARA7wD,GAAOw/E,EAAAA,EAAAA,IAAqBx/E,GAAMrtB,QAAO,CAACqtB,EAAMwwF,IACvCnmF,EAAAA,EACLA,EAAAA,EAAMmmF,GACNnmF,EAAAA,EAAOA,EAAAA,EAAWmmF,IAAWjlB,GAAeA,EAAW12F,KAAIywE,GAAa8tC,GAA6B9tC,OACrGtlD,IAEDA,EAGL,CAEA,SAASunF,GAAmB+L,EAAenuC,EAAQ,KAAMC,GAAkB,GAEzE,OADAkuC,EAAgBxgH,MAAMC,QAAQugH,GAAiBA,EAAgB,CAACA,IAC3C3gH,QAAO,CAAC4gH,EAAcC,KACzC,IAAIC,EAAetuC,GAAWquC,EAAaruC,QACvCuuC,EAA+D,kBAAjCF,EAAapuC,gBAA+BouC,EAAapuC,gBAAkBA,EAW7G,OAVAsuC,EAAuB1yG,KAAKoQ,IAAIsiG,EAAsB,GAElDD,IACFD,EAAYvkH,GAAAA,GAAA,GACPukH,GAAY,IACfruC,QAASsuC,EACTruC,gBAAiBsuC,KAIbF,EAAal/G,MACnB,IAAK,cACL,IAAK,eACH,MAAMq/G,EAAmBpM,GAAmBiM,EAAsB,QAAGC,GAAgBD,EAAa/yG,IAAK2kE,EAAkB,GACnHwuC,EAAkBvpF,EAAAA,EAAS,UAAWmpF,GAE5C,MAAO,CACL/yC,MAAOp2C,EAAAA,EAASkpF,EAAa9yC,MAAOkzC,EAAiBlzC,OACrDoQ,UAAWxmD,EAAAA,EAAQmpF,EAAa/yG,IAAKmzG,EAAiBL,EAAa1iC,YAEvE,IAAK,WACH,MAAMgjC,EAAuBtM,GAAmBiM,EAAsB,QAAGC,EAAcC,GACjFI,EAAsBzpF,EAAAA,EAAQ,UAAW,GAAImpF,GAEnD,OAAAvkH,GAAAA,GAAA,GACKskH,GAAY,IACf9yC,MAAO,IAAI8yC,EAAa9yC,MAAOqzC,KAAwBD,EAAqBpzC,SAGhF,QACE,OAAAxxE,GAAAA,GAAA,GACKskH,GAAY,IACf9yC,MAAO,IAAI8yC,EAAa9yC,MAAO+yC,KAErC,GACC,CAAC/yC,MAAO,GAAIoQ,UAAW,CAAC,GAC7B,CAEO,SAASD,GAAmBmjC,EAAeljC,EAAWt+C,GAC3D,OAAOwhF,EAAcphH,QAAO,CAAC2gH,EAAeU,KAC1C,MAAMC,EAAmB5pF,EAAAA,EAAOipF,GAChC,IAAKW,EACH,OAAI1G,GAAeyG,EAAczhF,IAC/ByhF,EAAeE,GAA4BF,EAAcnjC,GAClDxmD,EAAAA,EAAS2pF,EAAcV,IAEvBA,EAGT,OAAQW,EAAiB3/G,MACvB,IAAK,YACH,GAAIi5G,GAAeyG,EAAczhF,GAE/B,OADAyhF,EAAeE,GAA4BF,EAAcnjC,GAClDxmD,EAAAA,EAAS2pF,EAAcV,GACzB,CACL,MAAMa,EAAcC,GAAkCH,EAAkBD,GACxE,OAAO3pF,EAAAA,GAAU,EAAG8pF,EAAab,EACnC,CACF,IAAK,cACL,IAAK,eACH,GAAI/F,GAAeyG,EAAczhF,GAAqB,CACpD,GAAI,CAAC,YAAa,YAAY72B,SAASs4G,EAAa1/G,OAAS0/G,EAAa7uC,UAAY8uC,EAAiBxzG,IAAI,CACzG,MAAM0zG,EAAcE,GAA6BJ,EAAkBD,GACnE,OAAO3pF,EAAAA,GAAU,EAAG8pF,EAAab,EACnC,CAEE,OADAU,EAAeE,GAA4BF,EAAcnjC,GAClDxmD,EAAAA,EAAS2pF,EAAcV,EAElC,CAAO,CACL,MAAMa,EAAcG,GAA4CL,EAAkBD,GAClF,OAAO3pF,EAAAA,GAAU,EAAG8pF,EAAab,EACnC,CACF,QACE,OAAI/F,GAAeyG,EAAczhF,IAC/ByhF,EAAeE,GAA4BF,EAAcnjC,GAClDxmD,EAAAA,EAAS2pF,EAAcV,IAEvBA,EAGf,GACC,GACL,CAEO,SAAS5iC,GAA+BnrB,EAAKgvD,GAClD,MAAMl4E,GAAam1C,EAAAA,EAAAA,IAAcjsB,EAAKgvD,EAAU9zG,KAC1CwxC,EAAe5V,EAAWk4E,EAAUh0F,YACpC+wF,EAAmBj1E,EAAY,GAAEk4E,EAAUh0F,uBAEjD,IAAKi0F,GAAQviE,KAAkBwiE,GAAiBxiE,GAAiB,OAAO,KAExE,MAAMw1D,EAAkBC,GAAiCz1D,EAAcsiE,EAAUx8E,MAAMzX,OACjFo0F,EAAgBhN,GAAiCz1D,EAAcsiE,EAAUx8E,MAAMvX,KAErF,IAAIm0F,EAAuB,GAEvBxyC,EAAYlwB,EAAaw1D,EAAgBE,WAC7C,GAAIF,EAAgBG,WAAaZ,GAAoB7kC,GAAY,CAC/D,GAAuB,cAAnBA,EAAU7tE,KAAsB,CAClC,IAAIsgH,EAAazyC,EAAU13D,QAEvBg9F,EAAgBE,YAAc+M,EAAc/M,YAC9CiN,EAAa5M,GAAwB4M,EAAYF,EAAc9M,WAAa,IAG9EgN,EAAa3M,GAAuB2M,EAAYnN,EAAgBG,WAAa,GAE7EzlC,EAASlzE,GAAAA,GAAA,GACJkzE,GAAS,IACZ13D,QAASmqG,GAEb,CAEAD,EAAqB3hH,KAAKmvE,EAC5B,CAMA,GAJIslC,EAAgBE,UAAY,EAAI+M,EAAc/M,YAChDgN,EAAuBA,EAAqB7vG,OAAOmtC,EAAavyB,MAAM+nF,EAAgBE,UAAY,EAAG+M,EAAc/M,aAGjHF,EAAgBE,WAAa+M,EAAc/M,WAAa+M,EAAc9M,WAAa,EAAG,CACxF,IAAI5J,EAAU/rD,EAAayiE,EAAc/M,WAEpB,cAAjB3J,EAAQ1pG,OACV0pG,EAAO/uG,GAAAA,GAAA,GACF+uG,GAAO,IACVvzF,QAASu9F,GAAwBhK,EAAQvzF,QAASiqG,EAAc9M,WAAa,MAIjF+M,EAAqB3hH,KAAKgrG,EAC5B,CAEA,MAAO,CACLv9B,MAAOk0C,EACP9jC,UAAWygC,EAEf,CAEA,MAAM4C,GAA8BhzC,KACpC,SAAyB8yC,EAAcnjC,EAAU,CAAC,GAChD,GAA0B,aAAtBmjC,EAAa1/G,KAAqB,CACpC,MAAM+yD,EAAOwpB,EAAUmjC,EAAa7uC,SACpC,OAAO0vC,GAAmCxtD,EAAM2sD,EAClD,CACE,OAAOA,CAEX,IAEA,MAAMa,GAAqC3zC,KAC3C,SAAgC7Z,EAAM5f,GACpC,OAAAx4C,GAAAA,GAAA,GACKo4D,GAAI,IACP58C,QAASmgG,GAAWvjD,EAAK58C,QAASg9B,IAEtC,IAEA,MAAM2sE,GAAoClzC,KAC1C,SAA+B4zC,EAAeC,GAC5C,IAAIH,EAAaxM,GACf0M,EAAcrqG,QACd,CACEiU,KAAM,IACNgzD,iBAAkB,CAChB,CACEp9E,KAAM,iBACNyjC,MAAO,CACLzX,MAAO,EACPE,IAAK,OAOQ,cAAnBu0F,EAAUzgH,OACZsgH,EAAaxM,GAAsBwM,EAAYG,EAAUtqG,UAG3D,OAAAxb,GAAAA,GAAA,GACK6lH,GAAa,IAChBrqG,QAASmqG,GAEb,IAEA,MAAMP,GAA+BnzC,KACrC,SAA0B8zC,EAAUD,GAClC,GACO,aADCA,EAAUzgH,KAChB,CACE,GAAyC,kBAA9BygH,EAAU3vC,gBAA8B,CACjD,MAAM6vC,EAAmBC,GAAyBF,EAAUD,EAAU3vC,iBAEtE,GAAI6vC,EACF,OAAO5qF,EAAAA,EAAOA,EAAAA,EAAW,IAAI4qF,EAAkB,aAAcxqG,GAAYmgG,GAAWngG,EAASsqG,IAAYC,GACpG,CACL,MAAMG,EAAmBC,GAAqBJ,GAC9C,GAAIG,EAAkB,CACpB,MAAME,EAAc,CAClB/gH,KAAM0gH,EAAS1gH,KACfmM,IAAM,QAAOs0G,EAAUt0G,MACvBgK,QAAS,CAACsqG,IAGZ,OAAO1qF,EAAAA,EAAOA,EAAAA,EAAW,IAAI8qF,EAAkB,aAAc1qG,GAAYmgG,GAAWngG,EAAS4qG,IAAcL,EAC7G,CAAO,CACL,MAAMM,EAAeC,GAAiBP,GACtC,OAAO3qF,EAAAA,EAAOA,EAAAA,EAAW,IAAIirF,EAAc,aAAc7qG,GAAYmgG,GAAWngG,EAASsqG,IAAYC,EACvG,CACF,CACF,CAAO,CACL,MAAMM,EAAeC,GAAiBP,GACtC,OAAO3qF,EAAAA,EAAOA,EAAAA,EAAW,IAAIirF,EAAc,aAAc7qG,GAAYmgG,GAAWngG,EAASsqG,IAAYC,EACvG,EAEF,CACE,MAAMG,EAAmBC,GAAqBJ,GAC9C,OAAO3qF,EAAAA,EAAOA,EAAAA,EAAW,IAAI8qF,EAAkB,aAAc1qG,GAAYmgG,GAAWngG,EAASsqG,IAAYC,EAAS,CAExH,IAGA,MAAMV,GAA8CpzC,KACpD,SAAyC8zC,EAAUD,GACjD,MAAMI,EAAmBC,GAAqBJ,GAE9C,IAAKG,EACH,OAAOH,EAGT,MAAMQ,EAAenrF,EAAAA,EAAOA,EAAAA,EAAW8qF,GAAmBH,GACpDS,EAAoBD,EAAa/qG,QAAQhX,OAAS,EAExD,IAA2B,IAAvBgiH,EACF,OAAOT,EAKT,GAAsB,cAFLQ,EAAa/qG,QAAQgrG,GAEzBnhH,KACX,OAAO0gH,EAGT,OAAO3qF,EAAAA,EAAOA,EAAAA,EAAW,IAAI8qF,EAAkB,UAAWM,KAAsBX,GAAkBV,GAAkCU,EAAeC,IAAYC,EACjK,IAGA,SAASE,GAAyBl1F,EAAM01F,GACtC,OAAQ11F,EAAK1rB,MACX,IAAK,cACL,IAAK,eACH,GAAe,IAAXohH,EACF,MAAO,GAGT,MAAMC,EAAgB31F,EAAKvV,QAAQhX,OAAS,EAC5C,IAAuB,IAAnBkiH,EACF,OAAO,KAGT,MAAMC,EAAoBV,GAAyBl1F,EAAKvV,QAAQkrG,GAAgBD,EAAS,GACzF,OAAKE,EAIE,CAAC,UAAWD,KAAkBC,GAH5B,KAIX,IAAK,WACH,MAAMH,EAAoBz1F,EAAKvV,QAAQhX,OAAS,EAChD,IAA2B,IAAvBgiH,EACF,OAAO,KAGT,MAAMI,EAAwBX,GAAyBl1F,EAAKvV,QAAQgrG,GAAoBC,GACxF,OAAKG,EAIE,CAAC,UAAWJ,KAAsBI,GAHhC,KAIX,QACE,OAAO,KAEb,CAEA,SAASN,GAAiBv1F,GACxB,OAAQA,EAAK1rB,MACX,IAAK,cACL,IAAK,eACH,MAAMqhH,EAAgB31F,EAAKvV,QAAQhX,OAAS,EAC5C,IAAuB,IAAnBkiH,EACF,MAAO,GAGT,MAAMC,EAAoBL,GAAiBv1F,EAAKvV,QAAQkrG,IACxD,OAAKC,EAIE,CAAC,UAAWD,KAAkBC,GAH5B,GAIX,IAAK,WACH,MAAMH,EAAoBz1F,EAAKvV,QAAQhX,OAAS,EAChD,IAA2B,IAAvBgiH,EACF,OAAO,KAGT,MAAMI,EAAwBN,GAAiBv1F,EAAKvV,QAAQgrG,IAC5D,OAAKI,EAIE,CAAC,UAAWJ,KAAsBI,GAHhC,KAIX,QACE,OAAO,KAEb,CAwBA,SAAST,GAAqBp1F,GAC5B,MAAMs1F,EAAeC,GAAiBv1F,GAEtC,IAAKs1F,EACH,OAAO,KAGT,MAAMQ,EAAWzrF,EAAAA,EAAOA,EAAAA,EAAWirF,GAAet1F,GAE5C+1F,EAAoBD,EAASrrG,QAAQhX,OAAS,EAEpD,OAA2B,IAAvBsiH,EACK,KAGwC,aAA7CD,EAASrrG,QAAQsrG,GAAmBzhH,KAC/B,IAAIghH,EAAc,UAAWS,GAE7B,IAEX,CAEA,SAASnL,GAAWoL,EAAM,GAAIrkD,GAC5B,OAAOtnC,EAAAA,EAASsnC,EAASqkD,EAC3B,CAEA,SAASC,GAAWC,EAAO,GAAIC,EAAO,IACpC,OAAOA,EAAO1iH,OAAS,EAAI42B,EAAAA,EAAS6rF,EAAQC,GAAUD,CACxD,CAMA,SAASE,GAAgBC,EAAaz3G,GACpC,OAAA3P,GAAAA,GAAA,GACKonH,GAAW,IACdt+E,OAAO2jE,EAAAA,GAAAA,IAAW2a,EAAYt+E,MAAOn5B,IAEzC,CAEA,SAASooG,GAAoBhnF,GAC3B,MAAkB,cAAdA,EAAK1rB,KACA,EAAI0rB,EAAKvV,QAAQiU,KAAKjrB,OAEtB,CAEX,CAEO,SAAS+8E,GAA8BjrB,EAAKk4C,GACjD,MAAMwE,GAAYv6E,EAAAA,EAAAA,IAAkB69B,EAAKk4C,EAAan9E,MAAM7f,KACtD61G,GAAU5uF,EAAAA,EAAAA,IAAkB69B,EAAKk4C,EAAaj9E,IAAI/f,KAExD,IAAKwhG,IAAcqU,EAAW,OAAO,KAErC,MAAMC,EAAgB9Y,EAAan9E,MAAMC,WAAa,IAAI0hF,EAAWxE,EAAan9E,MAAMC,YAAc0hF,EAChGuU,EAAc/Y,EAAaj9E,IAAID,WAAa,IAAI+1F,EAAS7Y,EAAaj9E,IAAID,YAAc+1F,EAExFG,EAAoBC,GAAqBnxD,EAAKgxD,GAC9CI,EAAkBD,GAAqBnxD,EAAKixD,GAElD,IAAKC,IAAsBpsF,EAAAA,EAASosF,EAAmBE,GAAoB,OAAO,KAElF,IAAIC,GAAclkC,EAAAA,EAAAA,IAAWntB,EAAKkxD,GAClC,MAAM92F,GAAW+yD,EAAAA,EAAAA,IAAWntB,EAAKl7B,EAAAA,EAAOosF,IAExC,GACEjC,GAAQoC,IACRnC,GAAiBmC,GACjB,CACA,MAAM10C,EAAiB00C,EAAYjgE,WAAU32B,GAAQA,EAAKvf,MAAQg9F,EAAan9E,MAAM7f,MAC/E0hE,EAAYy0C,EAAY10C,GACxB20C,EAAoBxsF,EAAAA,EAAMA,EAAAA,EAAQ,EAAG63C,EAAgB00C,GAAsB/hH,KAAImrB,GAAQgnF,GAAoBhnF,MAC3G8hD,EAAgC,cAAnBK,EAAU7tE,KAAuBuiH,EAAoBpZ,EAAan9E,MAAMtrB,MAAQ,EAAI6hH,EAAoBpZ,EAAan9E,MAAMtrB,MAExI8hH,EAAeF,EAAYjgE,WAAU32B,GAAQA,EAAKvf,MAAQg9F,EAAaj9E,IAAI/f,MAC3Eu9F,EAAU4Y,EAAYE,GACtBC,EAAkB1sF,EAAAA,EAAMA,EAAAA,EAAQ,EAAGysF,EAAcF,GAAsB/hH,KAAImrB,GAAQgnF,GAAoBhnF,MACvG89E,EAA4B,cAAjBE,EAAQ1pG,KAAuByiH,EAAkBtZ,EAAaj9E,IAAIxrB,MAAQ,EAAI+hH,EAAkBtZ,EAAaj9E,IAAIxrB,MAElI,MAAO,CACLyL,IAAKkf,EAASlf,IACd8f,WAAY8J,EAAAA,EAAOosF,GACnB1+E,MAAO,CACLzX,MAAOwhD,EACPthD,IAAKs9E,GAGX,CAAO,MA8BmB,kBA7Bf8Y,GAgCb,SAA2BnsG,GACzB,MAA0B,kBAAZA,GAAgD,kBAAjBA,EAAQiU,IACvD,CAjCIs4F,CAAkBJ,GAEX,CACLn2G,IAAKkf,EAASlf,IACd8f,WAAY8J,EAAAA,EAAOosF,GACnB1+E,MAAO,CACLzX,MAAOm9E,EAAan9E,MAAMtrB,MAC1BwrB,IAAKi9E,EAAaj9E,IAAIxrB,aATrB,CAeT,CAEO,SAASw/G,GAAQ/pG,GACtB,OAAO3X,MAAMC,QAAQ0X,KAAgC,IAAnBA,EAAQhX,QAG5C,SAAqBgX,GACnB,MAA0B,kBAAZA,KAA0BA,EAAQhK,OAASgK,EAAQnW,IACnE,CAL4D2iH,CAAYxsG,EAAQ,IAChF,CAMO,SAASgqG,GAAiBhqG,GAC/B,MAA0B,kBAAZA,KAA0BA,EAAQg2D,KAClD,CAUO,SAASi2C,GAAqBnxD,EAAKvxD,GACxC,MAAMkjH,EAAc7sF,EAAAA,EAAOr2B,GACrBmjH,EAAmB9sF,EAAAA,EAAOr2B,GAEhC,GAAIq2B,EAAAA,EAAQ6sF,GAAgB,OAAO,KAEnC,GAA2B,kBAAhBA,EAA4B,OAAOR,GAAqBnxD,EAAK4xD,GAExE,MAAMC,GAAe1kC,EAAAA,EAAAA,IAAWntB,EAAK4xD,GAErC,OAAKlX,EAAAA,EAAAA,IAAOmX,GAGT,CAAC,YAAa,WAAY,cAAe,gBAAgB17G,SAAS07G,EAAa9iH,MAIzEoiH,GAAqBnxD,EAAK4xD,GAF1B,IAAIA,EAAkBD,GALKR,GAAqBnxD,EAAK4xD,EAShE,CAEA,SAASzP,GAAiCjnC,EAAOzrE,GAC/C,GAAIA,GAAS,EACX,MAAO,CACL2yG,UAAW,EACXC,WAAY,GAIhB,IAAIyP,EAAa52C,EAAM9tE,QAAO,CAAC2kH,EAAKt3F,KAClC,GAAKs3F,EAAI1P,WAcP,OAAO0P,EAdY,CACnB,MAAMC,EAAcD,EAAIE,eAAiBxQ,GAAoBhnF,GAC7D,OAAIu3F,GAAe,EACV,CACL5P,UAAW2P,EAAI3P,UACfC,WAAY0P,EAAIE,gBAGX,CACLA,eAAgBD,EAChB5P,UAAW2P,EAAI3P,UAAY,EAGjC,CAEA,GACC,CAAC6P,eAAgBxiH,EAAO2yG,UAAW,IAEtC,OAAO0P,EAAWzP,WAAayP,EAAa,IAC9C,CAGA,SAAS9O,GAAiC9nC,EAAOg3C,EAAiBC,GAChE,OAAOj3C,EAAM9tE,QAAO,CAAC2kH,EAAKt3F,KACxB,MAAMgqF,EAAahD,GAAoBhnF,GAEvC,MAAO,CACL23F,iBAAgB1oH,GAAAA,GAAA,GACXqoH,EAAIK,kBAAgB,IACvB5/E,OAAO2jE,EAAAA,GAAAA,IAAW4b,EAAIK,iBAAiB5/E,OAAQ,EAAIiyE,KAErDhmC,SAAU,IACLszC,EAAItzC,SACP4zC,GAA2B53F,EAAMy3F,EAAiBH,EAAIK,mBAEzD,GAEA,CAACA,iBAAkBD,EAAY1zC,SAAU,KAAKA,QACnD,CAEA,SAAS4zC,GAA2B53F,EAAMy3F,EAAiBC,GACzD,GAAIA,EAAW3/E,MAAMzX,MAAQ,GAAKo3F,EAAW3/E,MAAMvX,IAAM,EAAG,CAC1D,MAAMq3F,EAAa5oH,GAAAA,GAAA,GACdyoH,GAAU,IACb3/E,MAAO,CACLzX,MAAO,EACPE,IAAK,KAIT,IAAIs3F,EAAiB93F,EAAKy3F,IAAoB,GAC1CM,EAAsB1tF,EAAAA,GAAiB2tF,GAEvCA,EAAY1jH,OAASujH,EAAcvjH,MACnC0jH,EAAYxrD,YAAcqrD,EAAcrrD,YACxCyuC,EAAAA,GAAAA,IAAc+c,EAAYjgF,MAAO8/E,EAAc9/E,QAEhD+/E,GAEDA,EADEC,GAAuB,EACR1tF,EAAAA,EAAS0tF,GAAsBC,GAC9C/oH,GAAAA,GAAA,GACK4oH,GAAa,IAChB9/E,OAAOsjE,EAAAA,GAAAA,IAAY2c,EAAYjgF,MAAO8/E,EAAc9/E,UAErD+/E,GAEcztF,EAAAA,EAASwtF,EAAeC,GAG3C93F,EAAOqK,EAAAA,EAAQotF,EAAiBK,EAAgB93F,EAClD,CAEA,GAAqB,cAAjBA,EAAW,MACT03F,EAAW3/E,MAAMzX,MAAQN,EAAKvV,QAAQiU,KAAKjrB,OAAS,GAAKikH,EAAW3/E,MAAMvX,IAAM,EAAG,CACrF,MAAMq3F,EAAa5oH,GAAAA,GAAA,GACdyoH,GAAU,IACb3/E,MAAO,CACLzX,MAAO+J,EAAAA,EAAM,EAAGqtF,EAAW3/E,MAAMzX,MAAQ,GACzCE,IAAK6J,EAAAA,EAAMrK,EAAKvV,QAAQiU,KAAKjrB,OAAQikH,EAAW3/E,MAAMvX,IAAM,MAIhER,EAAOqK,EAAAA,EAAOA,EAAAA,EAAW,CAAC,aAAco5C,GAC/B6iC,GAAkC7iC,EAAiBg0C,EAAiBI,IAC1E73F,EACL,CAGF,OAAOA,CACT,CAEA,SAASsmF,GAAkC7iC,EAAiBg0C,EAAiBC,GAC3E,IAAIO,EAAiB,GACrB,GAAwB,qBAApBR,GAA0CC,EAAWpjH,OAAS8wG,IAAkB3hC,EAAgBg0C,GAAkB,CASpHQ,EAR6Bx0C,EAAgBg0C,GAAiBvlH,QAAO8lH,GAEjE/R,GAAmByR,EAAYM,KAC/B/c,EAAAA,GAAAA,IAAcyc,EAAW3/E,MAAOigF,EAAYjgF,QAC5CigF,EAAY1jH,OAAS6wG,KAIatwG,KAAIqjH,IAAgB9c,EAAAA,GAAAA,IAAmB8c,EAAangF,MAAO2/E,EAAW3/E,QAC9G,CA8BA,OA5BA0rC,EAAkBp5C,EAAAA,EAAOA,EAAAA,EAAW,CAACotF,KAAoBU,IACvD,IAAIL,EAAiBK,GAAe,GAChCJ,EAAsB1tF,EAAAA,GAAiB2tF,GAEvCA,EAAY1jH,OAASojH,EAAWpjH,MAChC0jH,EAAYxrD,YAAckrD,EAAWlrD,YACrCyuC,EAAAA,GAAAA,IAAc+c,EAAYjgF,MAAO2/E,EAAW3/E,QAE7C+/E,GAaH,OAVEA,EADEC,GAAuB,EACR1tF,EAAAA,EAAS0tF,GAAsBC,GAC9C/oH,GAAAA,GAAA,GACKyoH,GAAU,IACb3/E,OAAOsjE,EAAAA,GAAAA,IAAY2c,EAAYjgF,MAAO2/E,EAAW3/E,UAElD+/E,GAEcztF,EAAAA,EAASqtF,EAAYI,GAGjCA,CAAc,GACpBr0C,GAEHp5C,EAAAA,EAAU4tF,GAAgB9kH,SAAQilH,IAChC30C,EAqGJ,SAAwC8rB,EAAax3D,GACnD,MAAMsgF,EAAa9oB,EAAY7wE,KAAKgB,MAAM,EAAGqY,EAAMzX,OAC7Cg4F,EAAY/oB,EAAY7wE,KAAKgB,MAAMqY,EAAMvX,KAE/C,IAAI+3F,EAAkBtpH,GAAAA,GAAA,GACjBsgG,GAAW,IACd7wE,KAAO,GAAE25F,IAAaC,MAmBxB,OAhBAE,GAAkBrlH,SAAQslH,IACpBF,EAAmBE,KACrBF,EAAmBE,GAAoBF,EAAmBE,GAAkB5jH,KAAK6iH,IAC/E,MAAM1G,GAAWrV,EAAAA,GAAAA,IAA0B+b,EAAW3/E,MAAOA,EAAMzX,OAAO06E,EAAAA,GAAAA,IAAYjjE,IACtF,OAAIi5E,EACF/hH,GAAAA,GAAA,GACKyoH,GAAU,IACb3/E,MAAOi5E,IAGF,IACT,IACC9+G,QAAOgiB,GAAKA,IACjB,IAGKqkG,CACT,CA/HsBG,CAA+Bj1C,EAAiB20C,EAAc,IAG3E30C,CACT,CAEA,SAASgnC,GAAiBn2G,EAAM1B,GAC9B,MACY,YAAT0B,GAA8B,YAAR1B,GACb,cAAT0B,GAAgC,YAAR1B,CAE7B,CAYA,SAAS23G,GAAsBD,EAASnhC,GACjCmhC,IAAUA,EAAU,IAEzB,MAAMqO,EAAiBtuF,EAAAA,EAAOigF,GAC9B,GAAIqO,EAAgB,CAClB,MAAMC,EAsoDH,SAAsCC,EAASC,GACpD,GAAID,EAAQp4B,UAAYq4B,EAAQr4B,SAAWo4B,EAAQE,gBAAkBD,EAAQC,cAC3E,OAAO,KAGT,OAAQF,EAAQvkH,MACd,KAAKsvG,GACL,KAAKC,GACH,OAAQiV,EAAQxkH,MACd,KAAKsvG,GACL,KAAKC,GACH,OACEgV,EAAQvkH,OAASwkH,EAAQxkH,MACtBukH,EAAQp4G,MAAQq4G,EAAQr4G,KACxBo4G,EAAQjmH,MAAQkmH,EAAQlmH,KACxBimH,EAAQlkH,QAAUmkH,EAAQnkH,OAC1BisF,EAAAA,QAAUi4B,EAAQ/2F,KAAM+2F,EAAQ/2F,QAChCm5E,EAAAA,GAAAA,IAAc4d,EAAQ9gF,MAAO+gF,EAAQ/gF,OAExC9oC,GAAAA,GAAA,GACK4pH,GAAO,IACV9gF,MAAO,CACLzX,MAAOtf,KAAK8nF,IAAI+vB,EAAQ9gF,MAAMzX,MAAOw4F,EAAQ/gF,MAAMzX,OACnDE,IAAKxf,KAAKoQ,IAAIynG,EAAQ9gF,MAAMvX,IAAKs4F,EAAQ/gF,MAAMvX,QAI5C,KAGX,QACE,OAAO,KAEX,MACF,KAAKkjF,GACH,GAAQoV,EAAQxkH,OACTovG,GAmBH,OAAO,KAlBP,GACEmV,EAAQp4G,MAAQq4G,EAAQr4G,IAExB,OACEo4G,EAAQhQ,aAAeiQ,EAAQjQ,YAC5BgQ,EAAQ/P,aAAegQ,EAAQhQ,YAC/B+P,EAAQ7P,aAAe8P,EAAQ9P,aAElC/5G,GAAAA,GAAA,GACK6pH,GAAO,IACV9P,aAAc8P,EAAQ9P,aAAe,IAGhC8P,EAOjB,QACE,OAAO,KAEb,CAlsD6BE,CAA6BL,EAAgBxvC,GAEtE,GAAIyvC,EACF,OAAOvuF,EAAAA,GAAU,EAAGuuF,EAAkBtO,EAE1C,CAEA,OAAOjgF,EAAAA,EAAS8+C,EAAQmhC,EAC1B,CAEA,MAAMkO,GAAoB,CACxB,cACA,eACA,mBACA,wBAIF,SAASpQ,GAAsB6Q,EAAcC,GAC3C,IAAIX,EAAkBtpH,GAAAA,GAAA,GACjBgqH,GAAY,IACfv6F,KAAO,GAAEu6F,EAAav6F,OAAOw6F,EAAax6F,SAU5C,OAPA85F,GAAkBrlH,SAAQslH,IACxB,GAAIS,EAAaT,GAAmB,CAClC,MAAMU,EAAgBD,EAAaT,GAAkB5jH,KAAIukH,GAAiBhD,GAAgBgD,EAAeH,EAAav6F,KAAKjrB,UAC3H8kH,EAAmBE,GAAoBxC,GAAWsC,EAAmBE,GAAmBU,EAC1F,KAGKZ,CACT,CAEA,SAASnS,GAA6B6S,EAAcC,EAAclkH,GAChE,MAAMqjH,EAAaY,EAAav6F,KAAKgB,MAAM,EAAG1qB,GACxCsjH,EAAYW,EAAav6F,KAAKgB,MAAM1qB,GAE1C,IAAIujH,EAAkBtpH,GAAAA,GAAA,GACjBgqH,GAAY,IACfv6F,KAAO,GAAE25F,IAAaa,EAAax6F,OAAO45F,MAG5C,MAAMe,EAAeH,EAAax6F,KAAKjrB,OA2BvC,OAzBA+kH,GAAkBrlH,SAAQslH,IAmBxB,GAlBIF,EAAmBE,KACjBA,EAAiB/8G,SAAS,oBAC5B68G,EAAmBE,GAAoBF,EAAmBE,GAAkB74C,SAAS83C,IACnFjc,EAAAA,GAAAA,IAAiCic,EAAW3/E,MAAO/iC,EAAOqkH,GAAcxkH,KAAK0mG,GAAStsG,GAAAA,GAAA,GAE/EyoH,GAAU,IACb3/E,MAAOwjE,QAKbgd,EAAmBE,GAAoBF,EAAmBE,GAAkB5jH,KAAK6iH,GAAUzoH,GAAAA,GAAA,GACtFyoH,GAAU,IACb3/E,OAAOyjE,EAAAA,GAAAA,IAA0Bkc,EAAW3/E,MAAO/iC,EAAOqkH,QAK5DH,EAAaT,GAAmB,CAClC,MAAMU,EAAgBD,EAAaT,GAAkB5jH,KAAIukH,GAAiBhD,GAAgBgD,EAAeH,EAAav6F,KAAKjrB,UAC3H8kH,EAAmBE,GAAoBxC,GAAWsC,EAAmBE,GAAmBU,EAC1F,KAGKZ,CACT,CA8BA,SAASvQ,GAAwBzY,EAAav6F,GAC5C,IAAIskH,EAAwBrqH,GAAAA,GAAA,GACvBsgG,GAAW,IACd7wE,KAAM6wE,EAAY7wE,KAAKgB,MAAM,EAAG1qB,KAmBlC,OAhBAwjH,GAAkBrlH,SAAQslH,IACpBa,EAAyBb,KAC3Ba,EAAyBb,GAAoBa,EAAyBb,GACnEvmH,QAAOmkH,GAAeA,EAAYt+E,MAAMzX,MAAQtrB,IAChDH,KAAIwhH,GAAWpnH,GAAAA,GAAA,GAETonH,GAAW,IACdt+E,MAAO,CACLzX,MAAO+1F,EAAYt+E,MAAMzX,MACzBE,IAAK6J,EAAAA,EAAMgsF,EAAYt+E,MAAMvX,IAAKxrB,QAI5C,IAGKskH,CACT,CAEA,SAASrR,GAAuB1Y,EAAav6F,GAC3C,IAAIukH,EAAuBtqH,GAAAA,GAAA,GACtBsgG,GAAW,IACd7wE,KAAM6wE,EAAY7wE,KAAKgB,MAAM1qB,KAmB/B,OAhBAwjH,GAAkBrlH,SAAQslH,IACpBc,EAAwBd,KAC1Bc,EAAwBd,GAAoBc,EAAwBd,GACjEvmH,QAAOmkH,GAAeA,EAAYt+E,MAAMvX,IAAMxrB,IAC9CH,KAAIwhH,GAAWpnH,GAAAA,GAAA,GAETonH,GAAW,IACdt+E,MAAO,CACLzX,MAAO+J,EAAAA,EAAMgsF,EAAYt+E,MAAMzX,MAAQtrB,EAAO,GAC9CwrB,IAAK61F,EAAYt+E,MAAMvX,IAAMxrB,OAIvC,IAGKukH,CACT,CA0bA,SAASpP,GAA0B5kD,EAAK4jB,EAAQqwC,GAC9C,MAAMjkC,GAAW7tD,EAAAA,EAAAA,IAAkB69B,EAAK4jB,EAAO1oE,KAC/C,IAKI8oG,EAAWC,EAEXxpF,EAPAy5F,GAAiBr3C,EAAAA,EAAAA,IAAe7c,EAAKgwB,GAErC/tD,GAASu7C,EAAAA,EAAAA,IAAoBxd,EAAK4jB,EAAO1oE,KACzCsgG,GAAar5E,EAAAA,EAAAA,IAAkB69B,EAAK/9B,EAAO/mB,KAK/C,GAAI,CAAC,cAAe,gBAAgB/E,SAAS+9G,EAAenlH,MAAO,CACjEysG,EAAaxrB,EAAS71D,MAAM,GAAI,GAChC8H,GAAS46C,EAAAA,EAAAA,IAAe7c,EAAKw7C,GAE7B,MAAM0I,EAAYjiF,EAAO/c,QAAQksC,WAAU+iE,GAASA,EAAMv0C,UAAYs0C,EAAeh5G,MAErF,GAAIgpG,EAAY,EAAK,OAAOlkD,EAE5BgkD,EAAY,UACZC,EAAcC,EACdzpF,EAAOwH,EAAO/c,QAAQ++F,EACxB,MACED,GAAYtI,EAAAA,EAAAA,IAAuB17C,EAAKgwB,GACxCi0B,GAAc1I,EAAAA,EAAAA,IAAkBv7C,EAAKgwB,GACrCv1D,EAAOy5F,EAGT,MAAME,EAAgBnyF,EAAO+hF,GAEvBqQ,EAAgBD,EAAcj6F,MAAM8pF,EAAc,GAElDqQ,EAAoBxvF,EAAAA,GAAaqvF,IACrC,OAAQD,EAAenlH,MACrB,IAAK,YACH,OACEg5G,GAAcoM,IACdI,GAA+BJ,GAEnC,IAAK,WACH,OACEpM,GAAcoM,IACdI,GAA+BJ,IAE7B15F,EAAKmlD,UAAYu0C,EAAMv0C,UACtBnlD,EAAKolD,iBAAmB,KAAOs0C,EAAMt0C,iBAAmB,IAC1C,aAAfs0C,EAAMplH,KAGZ,IAAK,cACL,IAAK,eACH,OACEg5G,GAAcoM,IACdI,GAA+BJ,IAC/BD,EAAeh5G,MAAQi5G,EAAMv0C,QAEjC,QACE,OAAO,EACX,GACCy0C,GAEGG,EAAc,CAAC/5F,KAAS65F,GAE9B,IAAI/oD,EACJ,GAAI0oD,EAAM,CACR,MAAMQ,EAAiBL,EAAcj6F,MAAM,EAAG8pF,GAExCyQ,EAAyB5vF,EAAAA,GAAiBqvF,IAC7CpM,GAAcoM,KACdI,GAA+BJ,MAC9BD,EAAet0C,SAAY+0C,GAAUT,IAAmBS,GAAUR,IAAUD,EAAet0C,UAAYu0C,EAAMv0C,UAC9G60C,GAEH,IAAgC,IAA5BC,EAAiC,OAAO10D,EAE5C,MAAM40D,EAAoBR,EAAcM,GAClCG,EAA8BT,EAAcj6F,MAAM,EAAGu6F,EAAyB,GAEpF,IAAII,EACJ,GAAIZ,EAAet0C,SAKjB,GAJAk1C,EAAoBhwF,EAAAA,GAAiBqvF,GACnCD,EAAet0C,UAAYu0C,EAAMv0C,SAAW+0C,GAAUT,IAAmBS,GAAUR,IAClFU,IAEwB,IAAvBC,EAA4B,OAAO90D,OAEvC,GAAI40D,EAAkBh1C,QAAS,CAK7Bk1C,EAJgChwF,EAAAA,GAAiBqvF,GAC/CS,EAAkBh1C,UAAYu0C,EAAMv0C,SACnCi1C,GAE2C,CAChD,MACEC,EAAoBJ,EAIxBnpD,GAAkC,IAAvBupD,EAA2B,EAAIA,CAC5C,KAAO,CACL,MAAMC,EAAqB9Q,EAAcuQ,EAAYtmH,OAC/CmmH,EAAgBD,EAAcj6F,MAAM46F,GAEpCC,EAAqBlwF,EAAAA,GAAaqvF,IACrCpM,GAAcoM,KACdI,GAA+BJ,KAE9BD,EAAet0C,QACb+0C,GAAUT,KAAoBS,GAAUR,IAAUD,EAAet0C,UAAYu0C,EAAMv0C,QACnF+0C,GAAUR,IAAU,IAEvBE,GAEH,IAA4B,IAAxBW,EAA6B,OAAOh1D,EAExC,MAAM80D,EAAoBC,EAAqBC,EAEzCC,EAAeb,EAAcU,GAC7BI,EAA4Bd,EAAcj6F,MAAM26F,EAAoB,GAG1E,IAAIK,EAA0BrwF,EAAAA,GAAaqvF,IACxCc,EAAar1C,UAEVs0C,EAAet0C,QACb+0C,GAAUM,IAAiBN,GAAUR,IAAUc,EAAar1C,UAAYu0C,EAAMv0C,SACxD,IAAtB+0C,GAAUR,IAAiBc,EAAar1C,UAAYu0C,EAAMv0C,UAE/Ds1C,GAEH3pD,GAAwC,IAA7B4pD,EAAiCf,EAAclmH,OAAS4mH,EAAoB,EAAIK,CAC7F,CAEI5pD,EAAW04C,IACb14C,EAAW9vD,KAAKoQ,IAAIo4F,EAAa14C,EAAWipD,EAAYtmH,SAG1D,IAAIknH,EAAmBhB,EAIvB,OAHAgB,EAAmBtwF,EAAAA,EAASm/E,EAAauQ,EAAYtmH,OAAQknH,GAC7DA,EAAmBtwF,EAAAA,EAAYymC,EAAUipD,EAAaY,IAE/CtnC,EAAAA,EAAAA,IAAU9tB,EAAK,IAAIw7C,EAAYwI,GAAYoR,EACpD,CAEA,SAAST,GAAUl6F,GACjB,GAAIA,EAAKmlD,QAAS,CAChB,MAAMy1C,EAAsB56F,EAAKolD,iBAAmB,EAEpD,MAAkB,aAAdplD,EAAK1rB,KACAsmH,EAEAA,EAAsB,CAEjC,CACE,OAAQ,CAEZ,CAEA,SAASd,GAA+B95F,GACtC,OAAQutF,GAAevtF,EAAM4S,GAAoBk+C,sBACnD,CA0GA,SAASk6B,GAAqBzlD,EAAKgwB,GACjC,MACMotB,GADOvgC,EAAAA,EAAAA,IAAe7c,EAAK,IAAIgwB,EAAU,SACzB9hF,OAEtB,OAAO4tG,EAAAA,EAAAA,IAAW97C,EAAK,IAAIgwB,EAAU,cAAelrD,EAAAA,EAAYA,EAAAA,EAAS,GAAIs4E,IAC/E,CAyBA,SAASwI,GAAwB5lD,EAAKgwB,GACpC,MACMutB,GADW1gC,EAAAA,EAAAA,IAAe7c,EAAK,IAAIgwB,EAAU,OAAQ,IAC9B5rC,MAAMl2C,OAEnC,OAAO4tG,EAAAA,EAAAA,IAAW97C,EAAK,IAAIgwB,EAAU,iBAAkBlrD,EAAAA,EAAYA,EAAAA,EAAS,GAAIy4E,IAClF,CAsCA,SAASyI,GAA6BhmD,EAAKiH,GACzC,OAAO2yC,EAAAA,EAAAA,IAAiB55C,GAAMhzD,GAAQA,EAAIi6D,YAAcA,GAC1D,CAkBA,SAAS8gD,GAActtF,GACrB,MAAqB,iBAAdA,EAAK1rB,IACd,CA4EO,MAAMumH,GAAmC35C,KAChD,SAA8B3b,GAC5B,OAAO+5C,EAAAA,EAAAA,IAAiB1e,EAAAA,UAAYr7B,GACtC,IA0LA,SAASu1D,GAA6BC,GACpC,MAAMC,EAAWp6B,EAAAA,OAASm6B,GAC1B,OAAOn6B,EAAAA,QAAUo6B,EAASnmH,KAAKomH,IAC7B,OAIgCj7F,EAJEi7F,EAK7Br6B,EAAAA,SAAU4e,EAAAA,EAAAA,IAAqBx/E,GAAMnrB,KAAKqmH,GAAiBl7F,EAAKk7F,KAAgBtwG,QAAQ1Y,QAAQipH,GAAyC,kBAAjBA,IADjI,IAAoCn7F,CAJe,IAC9CpV,OACL,CAMsCs2D,KACtC,SAA2B65C,EAAe/sB,GACxC,OAAIA,EACK3jE,EAAAA,EACLA,EAAAA,EAAW,CAAC2jE,EAAevtF,IAAKutF,EAAeztE,WAAY,oBAC3D,CAACytE,GACD+sB,GAGKA,CAEX,IAEgD75C,KAChD,SAAqC65C,GACnC,MAAMK,EAAqBN,GAA6BC,GAAe7oH,QAAQi3E,GAAWA,EAAO70E,OAASovG,KAC1G,OAAO9iB,EAAAA,QAAUw6B,GAAqBjyC,GAAWA,EAAO1oE,KAC1D,IAEO,SAAS8sG,GAAevtF,EAAMuS,GACnC,OAAO8oF,GAA4BlW,GAAaC,GAAzCiW,CAAyDr7F,EAAK0xD,kBAAoB,GAAIn/C,EAC/F,CAEO,MAAMi8E,GAAgB6M,GAA4BvX,GAAeC,IAE3D2K,GAAmB2M,GAA4BrX,GAAkBC,IAEvE,SAASoX,GAA4BC,EAAeC,GACzD,MAAO,CAACjR,EAAS/3E,KACf,MAAMipF,EAAgBlR,EAAQp4G,QAAQi3E,GAAWA,EAAO70E,OAASgnH,IAC3DG,EAAkBnR,EAAQp4G,QAAQi3E,GAAWukC,GAAiBvkC,EAAQ52C,KACtEmpF,EAAqBD,EAAgBvpH,QAAQi3E,GAAWA,EAAO70E,OAASgnH,IACxEK,EAAwBF,EAAgBvpH,QAAQi3E,GAAWA,EAAO70E,OAASinH,IAEjF,OAC4B,IAAzBC,EAAc/nH,QAAgBioH,EAAmBjoH,OAAS,KACtB,IAAjCkoH,EAAsBloH,QAAgBkoH,EAAsBvrG,OAAO+4D,GAAWykC,GAAkBzkC,EAAQ52C,KAAqB,CAGvI,CAEA,SAASm9E,GAAsBpF,EAAS/3E,GACtC,OAAO+3E,EAAQp4G,QAAQi3E,GAAWukC,GAAiBvkC,EAAQ52C,IAC7D,CAEO,SAAS4/E,GAAuBhpC,GACrC,OAAOA,EAAO4vC,gBAAkB5vC,EAAOwiC,QACzC,CAEO,SAASO,GAAiB/iC,GAC/B,OAAQA,EAAO4vC,eAAiB5vC,EAAOwiC,WAAarI,GAAcC,QACpE,CAEO,SAASqY,GAAiBzyC,GAC/B,OAAOA,EAAOwiC,WAAarI,GAAcE,QAC3C,CAEO,SAAS2I,GAAkBhjC,GAChC,OAAOA,EAAO4I,YAChB,CAMO,SAAS27B,GAAiBvkC,EAAQ52C,GACvC,OAAQA,GACN,KAAKK,GAAoBwmD,eACvB,OAAO+yB,GAAkBhjC,GAC3B,KAAKv2C,GAAoB2/C,iBACvB,OAAO25B,GAAiB/iC,GAC1B,KAAKv2C,GAAoBk+C,sBACzB,KAAKl+C,GAAoBwsB,sBACvB,OAAQw8D,GAAiBzyC,GAI/B,CAEO,SAASykC,GAAkBzkC,EAAQ52C,GACxC,OAAQA,GACN,KAAKK,GAAoBwmD,eACzB,KAAKxmD,GAAoB2/C,iBACvB,OAAO,EACT,KAAK3/C,GAAoBk+C,sBACvB,OAAOqhC,GAAuBhpC,GAChC,KAAKv2C,GAAoBwsB,sBACvB,OAAQw8D,GAAiBzyC,KAAYgjC,GAAkBhjC,GAI7D,CAOO,SAASvvC,GAAwBlkC,GACtC,MAAM2xC,EAAuB3xC,EAAM2xC,qBAC7BnP,EAAcxiC,EAAM6nB,eAAe2a,YAEzC,OAAQxiC,EAAMpB,MACZ,IAAK,YAUL,IAAK,WAMC,MAAO,CAAC,EAId,QACE,OAAQ+yC,GAAsB/yC,MAC5B,IAAK,iBAEH,MAAO,CACLunH,gBAAkB,wKAAuK3jF,EAAYmP,EAAqBE,0VAE9N,IAAK,eAOL,QACE,MAAO,CAAC,EANV,IAAK,cAEH,MAAO,CACL/xC,gBAAkB,QAAO0iC,EAAYmP,EAAqBE,qBAgBtE,CAqCO,SAAS8hC,GAAayyC,EAAa3vD,EAAQ4vD,GAChD,OAAA9sH,GAAA,CACEs4C,UAAW4kB,EAAOj3D,GAClB2xD,iBAAmB,GAAEsF,EAAOpN,cAAcoN,EAAOlN,YACjD85D,cAAegD,EACf1mH,YAAa,IAAID,MAAQirC,WACtBy7E,EAEP,CAEO,SAAS1yC,GAAU90E,EAAM0nH,GAC9B,OAAA/sH,GAAA,CACEu9D,WAAWruB,EAAAA,EAAAA,KACX7pC,KAAMA,GACH0nH,EAEP,CAEO,SAAS91E,GAAiBlmB,EAAM6oF,EAAYC,EAAYE,GAC7D,OAAO5/B,GAAUxsC,GAAU,CACzBn8B,IAAKuf,EAAKvf,IACVuf,MAAM29C,EAAAA,GAAAA,IAAiC39C,GACvC6oF,WAAYA,EACZC,WAAYA,EACZE,aAAcA,GAElB,CAEO,SAASp7E,GAAgCw7E,EAAajD,EAAY1lC,EAAM,IAC7E,OAAO2I,GAAU07B,GAAgC,CAC/CsE,YAAaA,EACbjD,WAAYA,EACZ1lC,MAAOA,EAAM5rE,KAAImrB,IAAQ29C,EAAAA,GAAAA,IAAiC39C,MAE9D,CAEO,SAAS6N,GAA+Bg7E,EAAYC,EAAY3C,EAAY1lC,EAAM,IACvF,OAAO2I,GAAU27B,GAA4B,CAC3C8D,WAAYA,EACZC,WAAYA,EACZ3C,WAAYA,EACZ1lC,MAAOA,EAAM5rE,KAAImrB,IAAQ29C,EAAAA,GAAAA,IAAiC39C,MAE9D,CAEO,SAASuI,GAAoB9nB,GAClC,OAAO2oE,GAAU47B,GAAa,CAC5BvkG,IAAKA,GAET,CAEO,SAAS4gB,GAA4BoN,EAAW03E,EAAY1lC,EAAM,IACvE,OAAO2I,GAAUq6B,GAAuB,CACtCh1E,UAAWA,EACX03E,WAAYA,EACZ1lC,MAAOA,EAAM5rE,KAAImrB,IAAQ29C,EAAAA,GAAAA,IAAiC39C,MAE9D,CAWO,SAASiI,GAAoBxnB,GAClC,OAAO2oE,GAAU67B,GAAc,CAC7BxkG,IAAKA,GAET,CAEO,SAAS0nB,GAAsB1nB,GACpC,OAAO2oE,GAAU87B,GAAgB,CAC/BzkG,IAAKA,GAET,CAEO,SAAS6iC,GAAuB7iC,EAAKqyG,GAC1C,OAAO1pC,GAAUu6B,GAAiB,CAChCljG,IAAKA,EACLqyG,gBAAiBA,GAErB,CAEO,SAAS3vF,GAAqB1iB,EAAK7N,EAAKgM,GAC7C,OAAO0kC,GAAuB7iC,EAAK,CAAC,CAAC7N,GAAMgM,GAC7C,CAEO,SAAS0jB,GAAkBmM,EAAW95B,EAAOmtB,EAAO,MACzD,MAAMk6F,EAAc,CAClBvtF,UAAWA,EACX95B,MAAOA,GAOT,OAJImtB,IACFk6F,EAAOl6F,KAAOA,GAGTsnD,GAAUw6B,GAAWoY,EAC9B,CAEO,SAASl5F,GAAqB2L,EAAW95B,GAC9C,OAAOy0E,GAAUy6B,GAAc,CAC7Bp1E,UAAWA,EACX95B,MAAOA,GAEX,CAEO,SAASk1C,GAAqBkhE,EAAW/1G,GAC9C,OAAOo0E,GAAU06B,GAAe,CAC9BiH,UAAWA,EACX/1G,MAAOA,GAEX,CAEO,SAAS80C,GAAwBihE,EAAW/1G,GACjD,OAAOo0E,GAAU26B,GAAkB,CACjCgH,UAAWA,EACX/1G,MAAOA,GAEX,CAEO,SAASo1C,GAAwB2gE,EAAW/1G,GACjD,OAAOo0E,GAAU46B,GAAkB,CACjC+G,UAAWA,EACX/1G,MAAOA,GAEX,CAEO,SAASq1C,GAA2B0gE,EAAW/1G,GACpD,OAAOo0E,GAAU66B,GAAqB,CACpC8G,UAAWA,EACX/1G,MAAOA,GAEX,CAEO,SAASw0C,GAAmBuhE,EAAW9hE,EAAUE,GACtD,OAAOigC,GAAU86B,GAAmB,CAClC6G,UAAWA,EACX9hE,SAAUA,EACVE,YAAaA,GAEjB,CAEO,SAASE,GAAqB0hE,EAAW9hE,EAAUE,GACxD,OAAOigC,GAAU+6B,GAAqB,CACpC4G,UAAWA,EACX9hE,SAAUA,EACVE,YAAaA,GAEjB,CAEO,SAAS0tB,GAAuBrK,GACrC,OAAO4c,GAAUg7B,GAAgB,CAC/BoH,iBAAkBh/C,GAEtB,CAEO,SAASuK,GAAuBvK,GACrC,OAAO4c,GAAUi7B,GAAgB,CAC/B0H,iBAAkBv/C,GAEtB,CAEO,SAAS8lB,KACd,OAAOlJ,GAAUk7B,GAAS,CAAC,EAC7B,CAEO,SAASruC,GAA0BxnC,EAAW/P,GACnD,OAAO0qD,GAAU7S,GAAoB,CACnC9nC,UAAWA,EACX/P,KAAMA,EACNu9F,mBAAmB99E,EAAAA,EAAAA,KACnB46E,eAAe,GAEnB,CAEO,SAASriD,GAA4Bk2C,GAC1C,OAAOxjC,GAAUm7B,GAAsB,CACrCqI,yBAA0BA,GAE9B,CAEO,SAASp1C,GAA0Bs1C,EAAkBpuF,GAC1D,OAAO0qD,GAAUo7B,GAAoB,CACnCsI,iBAAkBA,EAClB51C,YAAY/4B,EAAAA,EAAAA,KACZzf,KAAMA,GAEV,CAEO,SAASy4C,GAA6BD,GAC3C,OAAOkS,GAAUq7B,GAAuB,CACtCvtC,WAAYA,GAEhB,CAEO,SAAS9K,GAA0B3rD,EAAK7N,EAAKoC,EAAO0pB,GACzD,OAAO0qD,GAAUs7B,GAAqB,CACpCjkG,IAAKA,EACL7N,IAAKA,EACLoC,MAAOA,EACPyzD,oBAAoBtqB,EAAAA,EAAAA,KACpBzf,KAAMA,GAEV,CAEO,SAAS8pC,GAA6BC,GAC3C,OAAO2gB,GAAUu7B,GAAwB,CACvCl8C,mBAAoBA,GAExB,CAEO,SAASmE,GAA4BluC,GAC1C,OAAO0qD,GAAUw7B,GAAsB,CACrC79C,qBAAqB5oB,EAAAA,EAAAA,KACrBzf,KAAMA,GAEV,CAEO,SAASooC,GAA+BC,GAC7C,OAAOqiB,GAAUy7B,GAAyB,CACxC99C,oBAAqBA,GAEzB,CAEO,SAASk/C,GAAmB4S,EAASC,GAC1C,OACED,EAAQp4B,UAAYq4B,EAAQr4B,SAC5Bo4B,EAAQE,gBAAkBD,EAAQC,eAClCF,EAAQlN,WAAamN,EAAQnN,UAC7BkN,EAAQ9mC,eAAiB+mC,EAAQ/mC,YAErC,CAEA,MAAMmqC,GAAuB,CAC3B,aACA,YACA,mBACA,gBACA,WACA,WACA,cACA,cACA,eACA,gBAGF,SAAShW,GAAe/8B,GACtB,OAAO9+C,EAAAA,EAAO6xF,GAAsB/yC,EACtC,CAwEO,SAASxS,GAAyBlB,EAAez1C,GACtD,OAAQy1C,EAAcnhE,MACpB,KAAK6wG,GACL,KAAKC,GACH,MAAM+W,EAAsB1mD,EAAc2mD,WAAW7sG,MAAK45D,GAAUA,EAAO70E,OAAS6wG,IAAeh8B,EAAOzqD,OACpG29F,EAAyB5mD,EAAc2mD,WAAW7sG,MAAK45D,GAAUA,EAAO70E,OAAS8wG,IAAkBj8B,EAAOzqD,OAC1G49F,EAAsB7mD,EAAc2mD,WAAW7sG,MAAK45D,GAAUA,EAAO70E,OAAS6wG,IAAeh8B,EAAO/S,iBACpGmmD,EAAyB9mD,EAAc2mD,WAAW7sG,MAAK45D,GAAUA,EAAO70E,OAAS8wG,IAAkBj8B,EAAO/S,iBAEhH,GAAI+lD,EACF,OAAIE,EACM,iBAAgBF,EAAoBz9F,OAEpC,UAASy9F,EAAoBz9F,OAElC,GAAI29F,EACT,MAAQ,YAAWA,EAAuB39F,OACrC,GAAI49F,EACT,MAAQ,eAAcA,EAAoBlmD,iBACrC,GAAImmD,EACT,MAAQ,iBAAgBA,EAAuBnmD,iBAEnD,KAAKivC,GACH,MAAQ,aACV,KAAKC,GACH,MAAQ,eACV,KAAKC,GACH,MAAQ,iBAAgB9vC,EAAc/2C,OACxC,KAAK8mF,GACH,MAAQ,UAAS/vC,EAAc/2C,OACjC,KAAK+mF,GACH,MAAQ,YAAWhwC,EAAc/2C,OACnC,KAAKglF,GACH,MAAQ,aACV,KAAKC,GACH,MAAQ,qBAAoBlxG,OAAOC,KAAK+iE,EAAcq9C,iBAAiBnvF,KAAK,QAC9E,KAAKigF,GACH,MAAQ,SAAQnuC,EAAc9gE,UAAU8gE,EAAc/2C,OACxD,KAAKmlF,GACH,MAAQ,WAAUpuC,EAAc9gE,UAAU8gE,EAAc/2C,OAC1D,KAAKolF,GACH,MAAO,YACT,KAAKC,GACH,MAAO,cACT,KAAKC,GACH,MAAO,eACT,KAAKC,GACH,MAAO,iBACT,KAAKC,GACH,MAAO,eACT,KAAKC,GACH,MAAO,iBACT,QACE,MAAO,SAEb,CA6KO,SAAS90B,GAA6B9pB,EAAK7nC,EAAa+D,EAAmC+6F,GAChG,IAAI7kD,EAAqE7kE,MAAMS,KAAKu+G,GAAwCvsD,GAAKppD,UAAUtH,KAAK4nH,GAAGxtH,GAAAA,GAAA,GAAUwtH,EAAI,IAAE,IAAEL,WAAYK,MAEjL,GAAI/+F,GAAaC,OAASkR,GAAAA,GAAoB,CAC5C,MAAM6tF,EAAmB,CACvBpoH,KAAM,qBACNyhE,cAAe,mBACftnC,UAAWhN,EACXhhB,IAAKghB,EAAoBnB,MAAM7f,IAC/B8f,WAAYkB,EAAoBnB,MAAMC,WACtCwX,MAAO,CACLzX,MAAOmB,EAAoBnB,MAAMtrB,MACjCwrB,IAAKiB,EAAoBjB,IAAIxrB,OAE/ButB,UAAWd,EAAoBc,WAGjCo1C,EAAkBA,EAAgB7yD,OAAO,CAAC43G,GAC5C,CAEA,MAAMC,EAAexuH,OAAOoK,SACtBqkH,EAAcD,EAAa7rG,eAAe,oBAC1C+rG,EAAaD,EAAcA,EAAY1rG,wBAAwBO,IAAM,GAE3E,IAAIqrG,EAA+BnlD,EAAgB9iE,KAAK4gE,IACtD,MAAMsnD,EAAcJ,EAAa7rG,eAAe2kD,EAAch1D,KACxDu8G,EAAuBL,EAAa7rG,eAAgB,kBAAiB2kD,EAAcM,iBAEzF,MAAO,CACLN,cAAeA,EACfwnD,cAAeF,EAAcA,EAAY7rG,wBAAwBO,IAAMorG,GAAc,IACrFp2G,OAAQu2G,GAAsB1rG,aAC9B89D,kBAAkB,EACnB,IAGH0tC,EAA+BA,EAA6B7iH,MAAK,CAACC,EAAGC,KACnE,MAAM+iH,EAAahjH,EAAE+iH,cAAgB9iH,EAAE8iH,cAEvC,OAAmB,IAAfC,EACKA,GAEChjH,EAAEu7D,cAAc19B,OAAOzX,OAAS,IAAMnmB,EAAEs7D,cAAc19B,OAAOzX,OAAS,EAChF,IAGF,IAAI68F,GAAyB,EACzBz/F,GAAaC,OAASkR,GAAAA,GACxBsuF,EAAwBL,EAA6BnmE,WAAWihB,GAAmE,uBAA3CA,EAAoBnC,cAAcnhE,OACjHopB,GAAaC,OAAS25C,GAAAA,IAC/B6lD,EAAwB9yF,EAAAA,GAAautC,GACnCA,EAAoBnC,cAAcM,gBAAkBr4C,EAAYq4C,eAC/D+mD,GACH9zG,QAAQwK,IAAI2pG,IACH17F,EACT07F,EAAwB9yF,EAAAA,GAAiButC,GACvCA,EAAoBnC,cAAch1D,MAAQghB,EAAoBnB,OAAO7f,KAClEm3D,EAAoBnC,cAAc19B,OAAOzX,OAASmB,EAAoBnB,OAAOtrB,OAC/E8nH,GACKN,IACRW,EAAwB9yF,EAAAA,GAAautC,GACnCA,EAAoBnC,cAAcM,gBAAkBymD,EAAsCzmD,eACzF+mD,IAGDK,GAAyB,IAC3BL,EAA6BK,GAAuB/tC,kBAAmB,GAOzE,IAAIguC,EAAwBN,EAA6BnqH,QAAO,EAAE0qH,YAAWC,yBAAwB1lD,KACnG,IAAIlC,EAAS,EACT6nD,EAAeF,EAWnB,OAVIzlD,EAAoBqlD,cAAgB,EACtCvnD,EAASkC,EAAoBqlD,cACpBrlD,EAAoBwX,kBAC7B1Z,EAASkC,EAAoBqlD,cAC7BM,EAAe7nD,EAXJ,IAWuBkC,EAAoBnxD,QAVnC,OAYnBivD,EAAS10D,KAAKoQ,IAAIisG,EAAWzlD,EAAoBqlD,eACjDM,EAAe7nD,EAdJ,IAcuBkC,EAAoBnxD,QAbnC,MAgBd,CAAC42G,UAAWE,EAAcD,sBAAuB,IAAIA,EAAqBruH,GAAAA,GAAA,GAAM2oE,GAAmB,IAAElC,OAAQA,KAAS,GAC5H,CAAC2nD,UAAW,EAAGC,sBAAuB,KAA8BA,sBAsBvE,OAnBAF,EAAwBA,EAAsBI,aAAY,EAAEC,YAAWH,yBAAwB1lD,KAC7F,IAAIlC,EAAS,EACTgoD,EAAeD,EACnB,GAAI7lD,EAAoBqlD,cAAgB,EACtCvnD,EAASkC,EAAoBqlD,mBACxB,GAAIrlD,EAAoBwX,iBAC7B1Z,EAASkC,EAAoBqlD,cAC7BS,EAAehoD,EA5BJ,OA6BN,CACL,MACMioD,EAAoBF,GADS7lD,EAAoBnxD,QA7BpC,KAgCnBivD,EAAS10D,KAAK8nF,IAAI60B,EAAmB/lD,EAAoBlC,QACzDgoD,EAAehoD,EAlCJ,EAmCb,CAEA,MAAO,CAAC+nD,UAAWC,EAAcJ,sBAAuB,IAAIA,EAAqBruH,GAAAA,GAAA,GAAM2oE,GAAmB,IAAElC,OAAQA,KAAS,GAC5H,CAAC+nD,UAAW1sF,OAAO6sF,iBAAkBN,sBAAuB,KAAKA,sBAE7DF,CACT,CAKO,SAAS1pC,GAA2BnuB,GACzC,OAAOtnB,EAAAA,EAAAA,IAAesnB,GAAMvlC,GAC1BqK,EAAAA,EAAO,CACL,gBACA,YACA,kBACA,UACA,uBACA,mBACA,oBACA,eACA,aACA,gBACA,kBACA,mBACA,wBACA,6BACA,kBACA,wBACCrK,IAEP,C,wKC9xGA,MAAM69F,EAA0C,CAC9C,CAAC,IAAI,EAAE,GACP,CAAC,EAAE,EAAE,KACL,CAAC,EAAE,IAAI,GACP,CAAC,IAAI,IAAI,GACT,CAAC,IAAI,EAAE,KACP,CAAC,IAAI,IAAI,GACT,CAAC,EAAE,IAAI,KACP,CAAC,IAAI,EAAE,KACP,CAAC,EAAE,IAAI,GACP,CAAC,IAAI,EAAE,GACP,CAAC,EAAE,IAAI,KACP,CAAC,EAAE,EAAE,MAGA,SAASC,EAAoBprH,GAClC,MAAMqrH,EAAc/8G,KAAKwmF,KAAK90F,EAAKe,OAASoqH,EAAOpqH,QAC7CuqH,EAAsB3zF,EAAAA,EAASA,EAAAA,EAASwzF,EAAQE,IAEtD,OAAO1zF,EAAAA,EAAS33B,EAAMsrH,EACxB,C,qgCCpBA,SAASC,EAAoC3pH,EAAcysB,EAA4Bm9F,GACrF,MAAMC,EAAa7lE,EAAU8lE,OAAO9pH,GAEpC,MAAO,CACLjB,IAAKA,CAACoN,EAAaxS,EAAK,CAAC,KACvB8yB,EAAS,CACP,CAACtgB,GAAGxR,EAAA,CAAIqF,OAAMmM,OAAQxS,GACtB,CAACiwH,GAAU,CAAC,CAACC,GAAa,CAACE,EAAS,KAAO,IAAIA,EAAU59G,KACzD,EAEJhR,OAASgR,IACPsgB,EAAS,CACP,CAACm9F,GAAU,CAAC,CAACC,GAAa,CAACE,EAAS,KAAOA,EAASnsH,QAAOosH,GAAWA,IAAY79G,MAClF,EAEJ89G,OAAQA,CAAC99G,EAAaxS,EAAK,CAAC,KAC1B8yB,EAAS,CACP,CAACtgB,GAAMxS,GACP,EAGR,C,4+BCRO,MAAMknF,EAAsCjU,KAC5C,SACL3oE,EACAsH,EACAw0E,GAEA,OAAAplF,EAAAA,EAAA,GACKsJ,GAAQ,IACXsH,UACAw0E,UAEJ,IAEO,MAAM4B,EAAqC/U,KAC3C,SACLhsE,EACAghF,EACAC,EACAthD,EACA2F,EACAiE,EACA41C,GAEA,MAAO,CACLn/E,KACAghF,YACAC,eACA5wC,cAAgB1uC,GAAkB,GAAEs/E,uBAAkCt/E,IACtE2nH,cAAgB3nH,GAAkB,GAAEs/E,qBAAgCt/E,IACpEu5C,cAAgBv5C,GAAkB,GAAEs/E,qBAAgCt/E,IACpEs5C,gBAAkBt5C,GAAkB,GAAEs/E,uBAAkCt/E,IACxEg+B,aACA2F,4BACAiE,mBACA41C,SAEJ,IAEO,MAAMS,EAAkC5T,KACxC,SACLhhE,EACAw0E,EACAt0E,EACAqsB,EACAlsB,EACAitE,EACAuH,EACAC,EACAr0C,EACAiV,EACAvb,EACA6jF,GAEA,OAAAjvH,EAAAA,EAAAA,EAAA,CACEiG,GAAIgL,EAAYhL,GAChB8pD,UAAW9+C,EAAY6+C,WACvBG,SAAUh/C,EAAY++C,UACtB53C,MAAOnH,EAAYmH,MACnBsoC,oBAAqB+kC,EACrBt0E,QAASA,EACTqsB,UAAWA,EACXlsB,YAAaA,EACbwgB,SAAUg0D,EACVnjD,WAAYA,KACVojD,IACAxH,GAAuB,EAEzB7sC,WAAYA,EACZiV,UAAWA,EACXvb,SAAUA,GD3DP,SAAqCtZ,EAA4Bm9F,GACtE,MAAMO,EAAgBR,EAAoC,OAAQl9F,EAAUm9F,GAE5E,MAAO,CACLj/E,QAASw/E,EAAcprH,IACvB0rC,WAAY0/E,EAAchvH,OAC1B61D,WAAYm5D,EAAcF,OAE9B,CCoDOG,CAA4B3pC,EAA2BmpC,IDlDvD,SAAwCn9F,EAA4Bm9F,GACzE,MAAMS,EAAmBV,EAAoC,UAAWl9F,EAAUm9F,GAElF,MAAO,CACL/4D,WAAYw5D,EAAiBtrH,IAC7BgyD,cAAes5D,EAAiBlvH,OAChC21D,cAAeu5D,EAAiBJ,OAEpC,CC2COK,CAA+B7pC,EAA2BmpC,IDzC1D,SAAyCn9F,EAA4Bm9F,GAC1E,MAAMW,EAAqBZ,EAAoC,YAAal9F,EAAUm9F,GAEtF,MAAO,CACLn5D,aAAc85D,EAAmBxrH,IACjC6xD,gBAAiB25D,EAAmBpvH,OACpCw1D,gBAAiB45D,EAAmBN,OACpC76D,wBAAyBA,CAACjjD,EAAa7B,KACrCmiB,EAAS,CACP,CAACtgB,GAAM,CAACgjD,qBAAsB7kD,IAC9B,EAEJ+kD,sBAAwBljD,IACtBsgB,EAAS,CACP,CAACm9F,GAAU,CAACj6D,iBAAkBxjD,IAC9B,EAGR,CCwBOq+G,CAAgC/pC,EAA2BmpC,GAElE,IAEO,MAAMhpC,EAAqChU,KAC3C,SACLjxC,EACAE,EACA05B,EACAie,EACA1tC,EACA+E,EACAE,EACAX,EACA+X,EACAsoE,EACAzvD,GAEA,IAAItZ,GAAgB,EAChBE,GAAY,EACZC,GAA2B,EAC3B1b,GAAe,EAEnB,OAAQxK,GACN,KAAKG,EAAAA,EAAaC,QAChB2lB,GAAgB,EAChBE,GAAY,EACZC,GAA2B,EAC3B1b,GAAe,EACf,MACF,KAAKrK,EAAAA,EAAaE,QAChB0lB,GAAgB,EAChBE,GAAY,EACZC,GAA2B,EAC3B1b,GAAgBskF,EAChB,MACF,KAAK3uF,EAAAA,EAAaG,KAChBylB,GAAgB,EAChBE,GAAY,EACZC,GAA2B,EAC3B1b,GAAgBskF,EAChB,MACF,KAAK3uF,EAAAA,EAAaI,QAChBwlB,GAAgB,EAChBE,GAAY,EACZC,GAA2B,EAC3B1b,GAAe,EACf,MACF,QACEub,GAAgB,EAChBE,GAAY,EACZC,GAA2B,EAC3B1b,GAAe,EAGnB,MAAO,CACLxK,YAAaA,EACbE,eAAgBA,EAChB6lB,cAAeA,EACfE,UAAWA,EACXC,yBAA0BA,EAC1B0T,SAAUA,EACVpvB,aAAcA,EACdqtC,mBAAoBA,EACpB1tC,sBAAuBA,EACvB+E,YAAaA,EACbE,mBAAoBA,EACpBX,UAAWA,EACX+X,iCAAkCA,EAClC6Y,aAAcA,EAElB,IAEO,MAAM8mB,EAAqClV,KAC3C,SACL9yC,EACAqM,EACAs8C,EACAxkD,EACAysF,EACAC,EACAC,EACAv5F,EACAw5F,EACA5oC,EACAh1D,EACAZ,EACA2H,EACAnK,EACAD,EACAspD,EACAtf,EACAvhB,GAEA,MAAMjgB,EAAY+T,GAAgBs8C,KAC3BioC,GAAuB,CAACpsF,EAAAA,GAAoB2/C,iBAAkB3/C,EAAAA,GAAoBwmD,gBAAyC19E,SAAS62B,OACpI0sF,IAAyBC,GAEhC,MAAO,CACL9wF,mBACA2oD,yBACArwD,YACA6L,qBACA5M,kBACAuS,YAAa4lF,GAAoBj5F,EAAAA,EAAAA,MAAK,CAACs6F,GAAer6G,OAAOyxE,KAC7Dn1D,UAAWA,CAAC+nD,EAAgB5mD,IAAuBhB,EAAW,CAAC4nD,GAAS5mD,GACxEhB,WAAYA,EACZZ,yBACA2H,2BACAnK,iBACAD,mBACAspD,oBACAtf,UACAvhB,8BAEJ,IAEO,MAAM+W,EAA6CwjB,KACnD,SACLi+C,EAAwB,EACxB5oC,EAAiC,IAEjC,MAAO,CACLnoD,kBAAkB,EAClB2oD,wBAAwB,EACxBrwD,WAAW,EACXwR,YAAa4lF,GAAoBj5F,EAAAA,EAAAA,MAAK,CAACs6F,GAAer6G,OAAOyxE,KAEjE,IAEO,MAAMyB,EAAsC9W,KAC5C,SACLnkD,EACAG,EACAE,GAEA,MAAO,CACLL,kBACAG,sBACAE,4BAEJ,G,2CCpOO,MAAMgT,EAAe,CAC1BC,QAAS,UACTC,QAAS,UACTC,KAAM,OACNC,QAAS,WAGJ,SAASN,EAAcmzE,GAC5B,QAAS5wG,OAAO0J,OAAOi0B,GAAc7gB,MAAM0gB,GAAgBozE,IAAQpzE,GACrE,C,6GCOO,SAAS+P,EAAqDo/E,EAAWC,GAC9E,OAAOC,EAAAA,EAAAA,YAAW,CAAC,EAAGF,EAAQC,GAAQ,CAACE,EAAWC,EAAW/+G,IACvD8+G,GAAaC,GACRF,EAAAA,EAAAA,YAAW,CAAC,EAAGC,EAAWC,GAAW,CAACC,EAAUC,EAAU9sH,IAC3D6sH,GAAYC,EACVD,EAAoB,UAAIC,EAAoB,UACvCD,EAEAC,EAGFD,GAAYC,IAIhBH,GAAaC,GAG1B,CAGO,SAASlyD,EAAWt2D,GACzB,OAAOoqC,EAAAA,EAAAA,WAAUpqC,GAAQ2oH,IAChBv+E,EAAAA,EAAAA,WAAUu+E,GAAWC,GACnBA,EAAYhhH,SAGzB,CA0BO,SAAS42E,EAAqBjwB,EAAKvuD,GACxC,MAAM4oG,EAAcr6C,EAAI9kD,IAClBs6G,GAAgBF,EAAAA,EAAAA,IAAiCt1D,GAEjD8H,EAAgBC,EAAWt2D,GAC3B6oH,GA7B4BT,EA6BkBrE,EA7BSsE,EA6BMhyD,GA5B5DiyD,EAAAA,EAAAA,YAAW,CAAC,EAAGF,EAAQC,GAAQ,CAACE,EAAWC,EAAW/+G,IACvD8+G,GAAaC,GACR9yG,EAAAA,EAAAA,QAAO,CAAC,EAAG6yG,EAAWC,GAEtBD,GAAaC,KALnB,IAA6BJ,EAA2BC,EA+B7D,OAAO3f,EAAAA,EAAAA,IAAmBmgB,EAAyBjgB,EACrD,CAEO,SAAStwD,EAAgCt4C,GAC9C,OAAOqzB,EAAAA,EAAUrzB,GAAOnC,KAAI,EAAE4L,EAAKq/G,KACjCz1F,EAAAA,EAAUy1F,GAAUjrH,KAAI,EAAEjC,EAAKgM,MACgB,CAC3CtK,KAAM,SACNkV,OAAQ,gBACRy2B,UAAW,CACTx/B,MACA7N,MACAgM,eAMLgM,MACL,C,gJC/FO,MAAMgyB,EAAW,WACX06B,EAAe,eACf9oC,EAAY,YACZpQ,EAAmB,mBACnBmP,EAAiB,iBACjBuE,EAAgB,gBAChBwE,EAAe,eACfzH,EAAqB,qBACrB89B,EAAuB,uBACvBT,EAAuB,uBACvBp+B,EAAY,YACZnM,EAAoB,oBACpBs2C,EAAqB,oB,yjCCP3B,SAASn3C,EAAgBF,EAAqBm/F,GACnD,MACMC,EADmBp/F,EAAQ1uB,QAAQ4rD,GAA+B,YAAlBA,EAASxpD,OACjBO,KAAKipD,GAAaA,EAASr9C,MAOzEs/G,GAL0BE,EAAAA,EAAAA,MAAKD,GAAsBrtH,QAAO,CAACuB,EAAKgsH,IAAWjxH,EAAAA,EAAA,GACxEiF,GAAG,IACN,CAACgsH,GAAc,CAAC99G,WAAW,MACzB,CAAC,IAIL+K,YAAW,KACT,MAAMozB,EAAKhoC,SAASuY,eAAgB,YAAUgzC,EAAAA,EAAAA,MAAKljC,GAASngB,QAAUlI,SAASioC,wBAAuBsjB,EAAAA,EAAAA,MAAKljC,GAASngB,KAAK,GACrH8/B,GACFpyC,OAAOsyC,SAAS,EAAGtyC,OAAOuyC,QAAUH,EAAGrvB,wBAAwBO,IAAM,IACvE,GACC,IACL,CAEO,SAAS6kD,EAAyB71D,EAAa8f,GACpDpT,YAAW,KACT,MAAMozB,EAAKhoC,SAASuY,eAAgB,GAAErQ,MAAQ8f,KAC1CggB,GACFpyC,OAAOsyC,SAAS,EAAGtyC,OAAOuyC,QAAUH,EAAGrvB,wBAAwBO,IAAM,IACvE,GACC,IACL,CAEO,SAAS4kD,EAAY51D,GAC1B0M,YAAW,KACT,MAAMozB,EAAKhoC,SAASmzD,cAAe,cAAajrD,OAC5C8/B,GACFpyC,OAAOsyC,SAAS,EAAGtyC,OAAOuyC,QAAUH,EAAGrvB,wBAAwBO,IAAM,IACvE,GACC,IACL,CAEO,SAASw9D,EAAuBkxC,GACrC,MAGM5/E,EAHoB4/E,EACvBtrH,KAAK4L,GAAQlI,SAASioC,uBAAuB//B,GAAK,KAClDvO,QAAQgiB,KAAQA,IACU,GAE7B,GAAIqsB,EAAI,CACNpyC,OAAOsyC,SAAS,EAAGtyC,OAAOuyC,QAAUH,EAAGrvB,wBAAwBO,IAAM,KAKrE,MAAM2uG,EAAkBlxG,IAClBA,aAAgB0oE,aAAiB1oE,EAAKiqB,aACxCjqB,EAAKqQ,QAEP,IAAIrQ,EAAKnZ,UAAU5C,SAASsiD,IAC1B2qE,EAAe3qE,EAAM,GACrB,EAEJ2qE,EAAe7/E,EACjB,CACA,OAAOA,CACT,C,+pCCtDO,SAAS8/E,IACd,MAAMC,EANR,WACE,MAAMA,EAAenyH,OAAOoyH,eAC5B,OAAOD,GAAgBA,EAAaE,WAAa,EAAIF,EAAe,IACtE,CAGuBG,GACrB,OAAIH,EACKA,EAAaI,WAAW,GAExB,IAEX,CAaO,SAASC,EAAkBC,EAAmBC,GACnD,MAAMC,EAAgB,CACpB,0BACA,eACA,YACA,iBACA,eAGF,OAAOF,GAAaC,GAAax2F,EAAAA,EAASA,EAAAA,EAAUy2F,EAAeF,GAAYv2F,EAAAA,EAAUy2F,EAAeD,GAC1G,CAsBO,SAASE,IACd,OASF,SAAgCC,GAC9B,IAAKA,EAAY,OAAO,KAExB,MAAMC,EAAsCC,EAAiCF,EAASG,yBAEtF,IAAKF,EAAuC,OAAO,KAEnD,MAAMG,EAAeC,EAAqCL,EAASM,eAAgBN,EAASO,YAAaN,GACnGO,EAAaH,EAAqCL,EAASS,aAAcT,EAASU,UAAWT,GAEnG,GAAqB,OAAjBG,GAAwC,OAAfI,EAI3B,OAAO,KAGT,MAAMG,EAAgC,CACpCrhG,MAAO8gG,EACP5gG,IAAKghG,GAGDj/F,EAQR,SAAoCvC,EAAYihG,GAC9C,GAAIW,EAAwB5hG,GAAS,OAErC,MACM6hG,EADoCX,EAAiClhG,KACiBihG,EAE5F,GAAIY,EAA+C,CACjD,MAAMC,EAAyBC,EAAuC/hG,GACtE,GAAI8hG,aAAkClqC,YAAa,CACjD,MAAMr1D,EAAYu/F,EAAuBluF,QAAQouF,UACjD,OAAOz/F,GAAa9S,SAAS8S,EAC/B,CACF,CAEA,MACF,CAvBoB0/F,CAA2BjB,EAASM,eAAgBL,GAC7C,kBAAd1+F,IACTo/F,EAAgBp/F,UAAYA,GAG9B,OAAOo/F,CACT,CArCSO,CAAuB7B,IAChC,CAuDA,SAASgB,EAAqCrhG,EAAY01C,EAAgBurD,GACxE,GAAIW,EAAwB5hG,GAAS,OAAO,KAK5C,GAH0CkhG,EAAiClhG,KACiBihG,EAEzC,CACjD,MAAMa,EAAyBC,EAAuC/hG,GACtE,GAAI8hG,aAAkClqC,aAAekqC,EAAuBluF,QAAQnzB,IAAK,CACvF,MACM42G,EAAwD,SAA3CyK,EAAuBluF,QAAQgH,QAoLxD,SAAkCyB,EAAkBipC,GAClD,GAAIjpC,IAAeipC,EAAY,OAAO,EAEtC,MAAM68C,EAAY5pH,SAAS6pH,iBAAiB/lF,EAAYgmF,WAAWC,UAEnE,IAAI5sD,EAAS,EACb,KAAOysD,EAAUI,YAAY,CAC3B,MAAMC,EAAcL,EAAUK,YAE9B,GAAIA,IAAgBl9C,EAClB,OAAO5P,EAEPA,GAAkB+sD,EAAeD,EAErC,CAEA,OAAO,IACT,CApMUE,CAAyBZ,EAAwB9hG,GAAQ,EAE7D,OAAmB,OAAfq3F,EAA8B,KAE3B,CACL52G,IAAKqhH,EAAuBluF,QAAQnzB,IACpC8f,WAAYuhG,EAAuBluF,QAAQ+uF,WAC3C3tH,MAAkD,SAA3C8sH,EAAuBluF,QAAQgH,QAAqBy8E,EAAa3hD,EAAS,EAErF,CAEA,MAAMktD,EAAkBC,EAAgC7iG,GACxD,GAAI4iG,aAA2BhrC,aAAegrC,EAAgBhvF,QAAQnzB,IACpE,MAAO,CACLA,IAAKmiH,EAAgBhvF,QAAQnzB,IAC7BzL,MAAO0gE,EAAS,EAAI,EAAI,GAI5B,MAAMotD,EAAqBC,EAAuB/iG,GAClD,GAAI8iG,aAA8BlrC,aAAekrC,EAAmBlvF,QAAQnzB,IAC1E,MAAO,CACLA,IAAKqiH,EAAmBlvF,QAAQnzB,IAChCzL,MAAO,GAIX,MAAMguH,EAAyBC,EAA2BjjG,GAC1D,GAAIgjG,aAAkCprC,aAAeorC,EAAuBpvF,QAAQnzB,IAClF,MAAO,CACLA,IAAKuiH,EAAuBpvF,QAAQnzB,IACpCzL,MAAO,EAGb,KAAO,CACL,MAAM4tH,EAAkBM,EAAsDjC,EAAqCjhG,GACnH,GAAI4iG,aAA2BhrC,aAAegrC,EAAgBhvF,QAAQnzB,IACpE,MAAO,CACLA,IAAKmiH,EAAgBhvF,QAAQnzB,IAC7BzL,MAAO0gE,EAAS,GAAKktD,IAAoB5iG,EAAO,EAAI,EAG1D,CAEA,OAAO,IACT,CAEO,SAASmjG,EAAsBC,EAA0BC,GAC9D,OAAOD,GAAcC,GAAch5F,EAAAA,EAAS+4F,EAAYC,EAC1D,CAEO,SAASpuD,EAAYxmC,GAC1B,OAAOA,GAAapE,EAAAA,EAASoE,EAAUnO,MAAOmO,EAAUjO,IAC1D,CAEO,SAAS8iG,EAAc70F,GAC5B,OAAOpE,EAAAA,EAASoE,EAAUnO,MAAM7f,IAAKguB,EAAUjO,IAAI/f,QAAUguB,EAAUnO,MAAMC,YAAc8J,EAAAA,EAASoE,EAAUnO,MAAMC,WAAYkO,EAAUjO,IAAID,WAChJ,CAMO,SAASgjG,EAAY90F,GAC1B,OAAOpE,EAAAA,EAASoE,EAAUnO,MAAM7f,IAAKguB,EAAUjO,IAAI/f,IACrD,CAEO,SAAS+iH,EAAgBC,GAC9B,QAASA,EAAQljG,UACnB,CAmBO,SAASmjG,EAAyBjjH,EAAa8f,EAAoBvrB,GACxE,MAAO,CACLsrB,MAAOqjG,EAAuBljH,EAAK8f,EAAYvrB,GAC/CwrB,IAAKmjG,EAAuBljH,EAAK8f,EAAYvrB,GAEjD,CAEO,SAAS2uH,EAAuBljH,EAAa8f,EAAoBvrB,GACtE,MAAO,CACLyL,MACA8f,aACAvrB,QAEJ,CAEO,SAAS4uH,EAA4BnmB,GAC1C,MAAO,CACLn9E,MAAOm9E,EAAan9E,MACpBE,IAAKi9E,EAAan9E,MAEtB,CAEO,SAASujG,EAAoBpmB,EAA4BqmB,GAC9D,MAAO,CACLxjG,MAAOyjG,EAA2BtmB,EAAan9E,MAAOwjG,GACtDtjG,IAAKujG,EAA2BtmB,EAAaj9E,IAAKsjG,GAEtD,CAEO,SAASE,EAAyBvmB,EAA4BqmB,GACnE,MAAO,CACLxjG,MAAOyjG,EAA2BtmB,EAAan9E,MAAOwjG,GACtDtjG,IAAKi9E,EAAaj9E,IAEtB,CASO,SAASujG,EAA2BE,EAA0CH,GACnF,OAAA70H,EAAAA,EAAA,GACKg1H,GAAmB,IACtBjvH,MAAOivH,EAAoBjvH,MAAQ8uH,GAEvC,CAEO,SAASI,EAAgBzmB,GAC9B,MAAMujB,EAAWmD,EAAuB1mB,GAEpCujB,GA5PN,SAAqBA,GACnB,MAAMV,EAAenyH,OAAOoyH,eAC5BD,GAAc8D,kBACd9D,GAAc+D,SAASrD,EACzB,CAwPkBsD,CAAYtD,EAC9B,CAEO,SAASmD,EAAuB1mB,GACrC,IAAKA,EAAgB,OAAO,KAE5B,MAAM2jB,EAAemD,EAAqC9mB,EAAan9E,OACjEkhG,EAAa+C,EAAqC9mB,EAAaj9E,KAErE,IAAK4gG,IAAiBI,EAAc,OAAO,KAE3C,MAAMR,EAAWzoH,SAASisH,cAG1B,OAFAxD,EAASyD,YAAYrD,GACrBJ,EAAS0D,UAAUlD,GACZR,CACT,CAEA,SAASuD,EAAqCI,GAC5C,MAAMtoF,GA6G+C57B,EA7GYkkH,EAAWlkH,IA6GlB8f,EA7GuBokG,EAAWpkG,WA8GrFhoB,SAASmzD,cAAe,cAAajrD,EAAImkH,WAAW,IAAM,6BAA8BrkG,wBADjG,IAAuD9f,EAAK8f,EA3G1D,OAAK8b,EA+GP,SAAyCA,EAAkBwoF,GACzD,GAAmB,IAAfA,EACF,MAAO,CAACxoF,EAAY,GAGtB,MAAM8lF,EAAY5pH,SAAS6pH,iBAAiB/lF,EAAYgmF,WAAWC,UAEnE,IAAIwC,EAAgB,EACpB,KAAO3C,EAAUI,YAAY,CAC3B,MAAMC,EAAcL,EAAUK,YAIxBuC,EAAYD,EAFCrC,EAAeD,GAGlC,GAAIuC,GAAaF,EACf,MAAO,CAACrC,EAAaqC,EAAaC,GAElCA,EAAgBC,CAEpB,CAEA,OAAO,IACT,CAnISC,CAAgC3oF,EAAYsoF,EAAW3vH,OAFpC,IAG5B,CAOA,SAASytH,EAAeziG,GACtB,OAAIA,EAAKwF,WAAaimE,KAAKC,WAAa1rE,EAAKmZ,YACpCnZ,EAAKmZ,YAAY1lC,OAEjB,CAEX,CAqBA,SAASwxH,EAAcjlG,GACrB,OAAOA,aAAgB43D,eAAiB53D,EAAK4T,SAASqsE,MACxD,CAUA,SAASilB,EAA2BllG,GAClC,OAAOA,aAAgB43D,eAAiB53D,EAAK4T,SAASuxF,uBACxD,CAEA,SAASjE,EAAiClhG,GACxC,OAAKA,EAEEklG,EAA2BllG,GAAQA,EAAOkhG,EAAiClhG,EAAKqc,YAFnE,IAGtB,CAEA,SAAS0lF,EAAuC/hG,GAC9C,OAAKA,EAfP,SAA0BA,GACxB,OAAOA,aAAgB43D,eAAiB53D,EAAK4T,SAASwxF,YACxD,CAeSC,CAAiBrlG,GAAQA,EAAO+hG,EAAuC/hG,EAAKqc,YAF/D,IAGtB,CAEA,SAASulF,EAAwB5hG,GAC/B,QAAKA,IAKP,SAA+BA,GAC7B,OAAOA,aAAgB43D,aAAe53D,EAAKslG,WAAWthH,SAAS,wBACjE,CALSuhH,CAAsBvlG,IAAS4hG,EAAwB5hG,EAAKqc,YACrE,CAMA,SAASwmF,EAAgC7iG,GACvC,OAAKA,GAnCP,SAA0BA,GACxB,OAAOA,aAAgB43D,eAAiB53D,EAAK4T,SAAS4xF,YACxD,CAiCeC,CAAiBzlG,GAAgB,KAEvCilG,EAAcjlG,GAAQA,EAAO6iG,EAAgC7iG,EAAKqc,WAC3E,CAEA,SAAS6mF,EAAsDwC,EAAiCvjD,EAAwBwjD,EAA8B,MACpJ,OAAKxjD,IAEAwjD,GAAkBV,EAAc9iD,KACnCwjD,EAAiBxjD,GAGfujD,IAA8BvjD,EAAoBwjD,EAE/CzC,EAAsDwC,EAA2BvjD,EAAU9lC,WAAY6oF,EAA2B/iD,GAAa,KAAOwjD,IARpI,IAS3B,CAEA,SAAS5C,EAAuB/iG,GAC9B,OAAKA,GAAQklG,EAA2BllG,GAAgB,KACpDilG,EAAcjlG,GAAgBA,EAE3B+iG,EAAuB/iG,EAAK4lG,YAAc5lG,EAAK4lG,YAAc5lG,EAAKqc,WAC3E,CAEA,SAAS4mF,EAA2BjjG,GAClC,OAAKA,GAAQklG,EAA2BllG,GAAgB,KACpDilG,EAAcjlG,GAAgBA,EAE3BijG,EAA2BjjG,EAAKgjD,gBAAkBhjD,EAAKgjD,gBAAkBhjD,EAAKqc,WACvF,C,0CC7YO,MAAMjK,EAAwB,CACnCC,aAAc,eACdC,gBAAiB,mBAGZ,SAASL,EAAuBoxE,GACrC,QAAS5wG,OAAO0J,OAAOi2B,GAAuB7iB,MAAM0gB,GAAgBozE,IAAQpzE,GAC9E,C,oHCPO,MAAMyC,EAAejgC,OAAOozH,OAAO,CACxClzF,UAAW,YACXmzF,oBAAqB,sBACrBC,iBAAkB,mBAClBC,MAAO,UAGIC,EAAexzH,OAAOozH,OAAO,CACxClzF,UAAW,YACXuzF,YAAa,cACbC,OAAQ,SACRH,MAAO,UAGF,SAASn1F,EAAqBtB,GACnC,OAAQA,GACN,KAAKmD,EAAaC,UAChB,MAAO,MACT,KAAKD,EAAaozF,oBAChB,MAAO,KACT,KAAKpzF,EAAaqzF,iBAChB,MAAO,KAIb,CAeO,SAASn1F,EAA0BrB,GACxC,OAAQA,GACN,KAAKmD,EAAaC,UAChB,MAAO,YACT,KAAKD,EAAaozF,oBAChB,MAAO,sBACT,KAAKpzF,EAAaqzF,iBAChB,MAAO,mBAIb,CAEO,SAASr2F,EAAsBH,GACpC,OAAQA,GACN,KAAKmD,EAAaqzF,iBAChB,MAAO,CACLp2F,eAAgB,aAChBC,2BAA4B,8GAC5BC,eAAgB,eAChBC,6BAA8B,uBAElC,KAAK4C,EAAaozF,oBAChB,MAAO,CACLn2F,eAAgB,aAChBC,2BAA4B,8GAC5BC,eAAgB,2BAChBC,6BAA8B,kBAElC,QACE,MAAO,CAAC,EAEd,CAEO,SAASN,EAAqBvB,EAAkCm4F,GACrE,OAAQA,GACN,KAAKp1F,EAAiB/C,GACpB,OAAOyE,EAAaC,UACtB,KAAK1B,EAA2BhD,GAC9B,OAAOyE,EAAaozF,oBACtB,KAAK50F,EAAyBjD,GAC5B,OAAOyE,EAAaqzF,iBACtB,QACE,OAAOrzF,EAAaszF,MAE1B,CAEO,SAASh1F,EAAiB/C,GAC/B,MAAkC,kBAA3BA,EAAgBpuB,QAA8BouB,EAAgBu4C,iBAAmBv4C,EAAgB+C,gBAC1G,CAEO,SAASC,EAA2BhD,GACzC,MAAkC,kBAA3BA,EAAgBpuB,QAA8BouB,EAAgBo4F,qBAAuBp4F,EAAgBq4F,aAC9G,CAEO,SAASp1F,EAAyBjD,GACvC,MAAkC,kBAA3BA,EAAgBpuB,QAA8BouB,EAAgBs4F,gBAAkBt4F,EAAgBiD,wBACzG,CAEO,SAAS4hD,EAAoCvjD,GAClD,OAAQA,GACN,KAAKmD,EAAaC,UAChB,OAAOszF,EAAatzF,UACtB,KAAKD,EAAaozF,oBAChB,OAAOG,EAAaC,YACtB,KAAKxzF,EAAaqzF,iBAChB,OAAOE,EAAaE,OACtB,QACE,OAAOF,EAAaD,MAE1B,CAEO,SAAShzC,EAA6BH,GAC3C,OAAQA,GACN,KAAKozC,EAAatzF,UAChB,MAAO,mBACT,KAAKszF,EAAaC,YAChB,MAAO,uBACT,KAAKD,EAAaE,OAChB,MAAO,kBACT,QACE,MAAO,mBAEb,C,ulCCxHO,MAAMphF,EAAuB,oBACvB4zB,EAAsB,oBACtBtJ,EAAwB,qBACxBpqB,EAAqB,kBACrB3K,EAAqB,mBAE3B,SAAS+vC,EAAoBj9B,EAAao5E,EAAU1kG,EAAK,CAAC,GAC/DtlB,OAAM2W,EAAAA,EAAAA,GAAU,cAAai6B,wBAAmC,CAC9D5zB,OAAQ,OACR7qB,QAAS+Z,aAAaigD,oBAAoB,CACxC,OAAU,mBACV,eAAgB,qBAElBtpC,KAAMvrB,KAAKC,UAAU,CACnB0yH,kBAAiBx3H,EAAA,CACfqF,KAAMkyH,EACNnxH,WAAY2L,KAAK4U,MAAMxgB,KAAKi4E,MAAQ,MACjCvrD,OAIRviB,MAAKoJ,IACJ,IAAKA,EAAS8V,GACZ,MAAM,IAAIE,MAAM,+BAElB,OAAOhW,EAASjM,MAAM,IAEvB6C,MAAKtR,KACJy4H,EAAAA,EAAAA,GAAez4H,EAAK,IAErB6a,OAAMC,IACLC,QAAQD,MAAMA,GACd02B,QAAQC,QAAQ,sBAAsB,GAE1C,C,8DCrCO,MAAMpV,EAA6B,CACxC,sBAGWC,EAAuB,CAClC,uBAOWoR,EAAyB,CACpC,qBACA,kBACA,WACA,YACA,aACA,UACA,YAGWi6C,EAAsB,IAC9BtrD,KACAC,EAfH,oBAiBGoR,E,uECvBE,MAAMgrF,EAAgB,CAAC,IAAK,IAAK,IAAK,IAAK,KA+CrC1qE,EAAeA,CAAC8E,EAAUnuD,EAAKg0H,GAAW,KACrD,MAAMC,EAjC2BC,EAAC/lE,EAAUnuD,KAC5C,GAAY,WAARA,EAAkB,OAAO,KAC7B,GAAY,mCAARA,EAA0C,OAAQE,MAAMC,QAAQguD,EAASnuD,KAASmuD,EAASnuD,GAAKa,OAAS,EAAK,MAAQ,KAC1H,GAAY,eAARb,GAAgC,eAARA,EAAsB,OAAOm0H,EAAAA,EAAAA,GAAWhmE,EAASnuD,IAC7E,GAAY,WAARA,EAAkB,OAAOo0H,EAAAA,EAAAA,IAAYjmE,EAASnuD,IAClD,GAAY,gBAARA,EAAuB,OAAOmuD,EAAkC,wBAAE/nD,QAAQ,eAAgB,IAE9F,GAAY,mBAARpG,EAA0B,CAC5B,MAAM+hC,EAASosB,EAASt2C,SAASkqB,QAAU,GAC3C,OAAQ7hC,MAAMC,QAAQ4hC,IAA6B,IAAlBA,EAAOlhC,OAEpCkhC,EACG9/B,KACC,CAACoyH,EAAKjyH,IACH,YAAWiyH,+CAAiDA,kCAAoCjyH,EAAQ,UAE5G2uB,KAAK,UANR,GAON,CAEA,GAAY,iCAAR/wB,EACF,OAAO+zH,EAAc5lE,EAASt2C,SAAS+wC,sBAGzC,GAAI5oD,EAAIsmC,WAAW,WAAY,CAC7B,MAAMlkC,EAAQ2xH,EAAclnH,QAAQ7M,EAAIqB,MAAM,KAAK,GAAGi8E,eACtD,OAAOnvB,EAASt2C,SAASy8G,UAAUlyH,IAAU,GAC/C,CAEA,OAAO,IAAI,EAKU8xH,CAAoB/lE,EAAUnuD,GACnD,GAAqB,OAAjBi0H,EAAuB,OAAOA,EAElC,MAAMjoH,EAvC0BuoH,EAAC50H,EAAKK,IACtCA,EAAIqB,MAAM,KAAKtB,QAAO,CAACuB,EAAKsoF,IAAWtoF,GAAOA,EAAIsoF,GAAStoF,EAAIsoF,GAAS,MAAOjqF,GAsCjE40H,CAAmBpmE,EAAUnuD,GAC3C,MAlD6Bw0H,EAACxoH,EAAOgoH,KACrC,GAAI9zH,MAAMC,QAAQ6L,GAChB,OAAOA,EAAMnL,OAAS,EAAImL,EAAM+kB,KAAK,MAAQ,IAE/C,GAAa,MAAT/kB,GAA2B,KAAVA,EAAc,MAAO,IAE1C,MAAMyoH,EAAcpuF,OAAOr6B,GAC3B,OAAOgoH,GAAYS,EAAY5zH,OAAS,KAAM6zH,EAAAA,EAAAA,IAAoBD,GAAeA,CAAW,EA2CrFD,CAAgBxoH,EAAOgoH,EAAS,C,mCCvDlC,MAAMG,EAAaA,CACxB1uH,EACAkvH,EAAiB,gBAEjB,IAAIC,EAEJ,GAAInvH,aAAgBjD,KAClBoyH,EAAanvH,OAGb,GADAmvH,EAAa,IAAIpyH,KAAKiD,GAClByrB,MAAM0jG,EAAWnnF,WACnB,MAAM,IAAI1hB,MAAM,gBAIpB,MAAM9pB,EAA8B,CAClC4yH,KAAMD,EAAWE,cAAc3vH,WAC/B4vH,GAAI1uF,OAAOuuF,EAAWI,WAAa,GAAG79D,SAAS,EAAG,KAClD89D,GAAI5uF,OAAOuuF,EAAWM,WAAW/9D,SAAS,EAAG,KAC7Cg+D,GAAI9uF,OAAOuuF,EAAWQ,YAAYj+D,SAAS,EAAG,KAC9Ck+D,GAAIhvF,OAAOuuF,EAAWU,cAAcn+D,SAAS,EAAG,KAChDo+D,GAAIlvF,OAAOuuF,EAAWY,cAAcr+D,SAAS,EAAG,MAGlD,OAAOw9D,EAAOvuH,QAAQ,wBAAyB6lB,GAAUhqB,EAAIgqB,IAAO,C,kBCxBvD,SAASsf,IACtB,IAAIxgC,GAAI,IAAIvI,MAAOirC,UAInB,MAH2B,qBAAhBgoF,aAA0D,oBAApBA,YAAYh7C,MAC3D1vE,GAAK0qH,YAAYh7C,OAEZ,uCAAuCr0E,QAAQ,SAAS,SAAUqG,GACvE,IAAIipH,GAAK3qH,EAAoB,GAAhBqD,KAAK6U,UAAiB,GAAK,EAExC,OADAlY,EAAIqD,KAAK4U,MAAMjY,EAAI,KACL,MAAN0B,EAAYipH,EAAS,EAAJA,EAAU,GAAMvwH,SAAS,GACpD,GACF,C,6HCNA,MAAMwwH,GAAsBp1G,EAAAA,EAAAA,GAAS,2BAE/Bq1G,EAAc,CAClB/iF,MAAM,QACNoM,MAAM,QACNjB,MAAM,QACN63E,IAAI,MACJ3xF,QAAQ,WAGH,SAAS/C,GAAqB,WAACF,EAAU,gBAAEG,EAAkB00F,GAAkB,CAAC,GACrF,OAAOC,EAAW,CAChB30H,KAAM,qBACNwlB,OAAQ,MACRjd,OAAQ,CACN8oC,YAAaxR,GAEfG,gBAAiBA,GAErB,CAEO,SAASE,GAAuB,QAACC,EAAU,GAAE,UAAEC,EAAY,GAAE,WAAEP,EAAa,GAAE,gBAAEG,EAAkB00F,GAAkB,CAAC,GAC1HC,EAAW,CACT30H,KAAM,2BACNwlB,OAAQ,OACRjd,OAAQ,CACNqsH,SAAUz0F,EACV00F,WAAYz0F,EACZiR,YAAaxR,GAEfG,gBAAiBA,GAErB,CAEO,SAAS+kC,GAAgB,UAACr6B,GAAY,EAAK,QAAEvK,EAAU,GAAE,UAAEC,EAAY,GAAE,gBAAEJ,EAAkB00F,GAAkB,CAAC,GACrH,OAAIhqF,EACK1K,EAAgB,CACrB,OAAY,GACZ,OAAY,GACZ,OAAY,GACZ,KAAY,GACZ,SAAY,KA0DlB,UAAoB,QAACG,EAAU,GAAE,UAAEC,EAAY,GAAE,gBAAEJ,EAAkB00F,GAAkB,CAAC,GACtF,OAAOC,EAAW,CAChB30H,KAAM,cACNwlB,OAAQ,OACRjd,OAAQ,CACNqsH,SAAUz0F,EACV00F,WAAYz0F,GAEdJ,gBAAiBA,GAErB,CAjES80F,CAAW,CAChB30F,UACAC,YACAJ,gBAAiBohD,IAChB71E,MAAMk0B,GACAO,EAAgBP,IAE3B,CAEO,SAASylC,EAAe3lC,GAC7B,IAAI3gC,EAAM2gC,EAAMO,WAIhB,MAHW,YAAPlhC,IACFA,EAAM2gC,EAAMw1F,UAEP,CACLtjF,MAAO,SACPmL,MAAO,SACPiB,MAAO,SACP42E,IAAK,OACLO,IAAK,WACLC,IAAK,YACLr2H,EACJ,CAEO,SAASwiF,EAAoB8zC,GAClC,MAAMC,GAAmBC,EAAAA,EAAAA,IAAqBF,GACxCG,EAAuBA,CAAC9jE,EAAKjxD,KACjC,IAAKixD,IAAQA,EAAI+jE,gBAAkB/jE,EAAI+jE,cAAc71H,OACnD,OAAO,EAET,OAAQa,GACN,KAAKk0H,EAAmB,MACtB,OAAOjjE,EAAI+jE,cAAcp3H,QAAOq3H,GAAuB,SAAjBA,EAAGz1F,aAC3C,KAAK00F,EAAmB,MACtB,OAAOjjE,EAAI+jE,cAAcp3H,QAAOq3H,GAAuB,SAAjBA,EAAGz1F,aAC3C,KAAK00F,EAAmB,MACtB,OAAOjjE,EAAI+jE,cAAcp3H,QAAOq3H,GAAuB,SAAjBA,EAAGz1F,aAC3C,KAAK00F,EAAiB,IACpB,OAAOjjE,EAAI+jE,cAAcp3H,QAAOq3H,GAAuB,YAAjBA,EAAGz1F,YAA2C,OAAfy1F,EAAGR,WAC1E,KAAKP,EAAqB,QACxB,OAAOjjE,EAAI+jE,cAAcp3H,QAAOq3H,GAAuB,YAAjBA,EAAGz1F,aAA4C,OAAfy1F,EAAGR,UAAoC,OAAfQ,EAAGR,YACnG,QACE,OAAO,EACX,EAGF,MAAO,CACL,OAAUM,EAAqBF,EAAkBX,EAAmB,QAAM,GAC1E,OAAUa,EAAqBF,EAAkBX,EAAmB,QAAM,GAC1E,OAAUa,EAAqBF,EAAkBX,EAAmB,QAAM,GAC1E,KAAUa,EAAqBF,EAAkBX,EAAiB,MAAQ,GAC1E,SAAYa,EAAqBF,EAAkBX,EAAqB,UAAM,GAElF,CAcA,SAASG,GAAW,KAAC30H,EAAI,OAAEwlB,EAAS,MAAK,OAAEjd,EAAS,CAAC,EAAC,gBAAEy3B,EAAkB00F,GAAkB,CAAC,GAC3F,MAAMx5H,EAAMq5H,EAAsBv0H,EAClC,OAAOwU,EAAAA,EAAAA,GAAM,CACXtZ,MACAsqB,SACAjd,SACA23E,iBAAiB,EACjBvlF,QAAS+Z,aAAaigD,oBAAoB,CACxC,OAAU,uBAGbppD,MAAMoJ,GACEqrB,EAAgBrrB,EAAS1a,QAEjC6a,OAAOC,GACCirB,EAAgBjrB,IAE3B,CAWA,SAAS2/G,EAAex0G,GACtB,OAAOA,CACT,C,kBCjJO,SAASwyG,EAAez4H,GAC7B,QAAsBkG,IAAlBlG,EAAKu7H,UAA4C,IAAlBv7H,EAAKu7H,SAAgB,CACtD,MAAMC,EAAclxH,SAASmzD,cAAc,kBACrC89D,EAAWv7H,EAAKu7H,SAAW,IAE7BC,GAA4B,SAAbD,GACjBjxH,SAASmzD,cAAc,mBAAmB45D,UAAUjyH,IAAI,QACxDkF,SAASmzD,cAAc,kBAAkB45D,UAAUjyH,IAAI,QACvDkF,SAASmzD,cAAc,4BAA4B45D,UAAUoE,OAAO,QACpEnxH,SAASmzD,cAAc,aAAa45D,UAAUoE,OAAO,QACrDnxH,SAASmzD,cAAc,oBAAqBmhC,UAAW,qCAAuC7rF,KAAKC,MAAMhT,EAAK07H,aAAe,IAAO,IAAI5xH,WAAa,OACrJQ,SAASuY,eAAe,wBAAwBw0G,UAAUoE,OAAO,SACxDD,IACTlxH,SAASmzD,cAAc,kBAAkB45D,UAAUoE,OAAO,QAC1DnxH,SAASmzD,cAAc,kBAAmBvyB,YAAcqwF,EAAW,YACnEjxH,SAASmzD,cAA2B,wBAAyB/2D,MAAM+J,MAAO8qH,EAE9E,CACF,C,6FChBO,SAAS10E,IACd,OAAO9zC,KAAK4U,OAAM,IAAIxgB,MAAOirC,UAAY,IAC3C,CAMO,SAASqmB,EAAoBkjE,GAClC,IAAIC,EAAK,IAAIz0H,KAAKw0H,GAAU7xH,WAAW9D,MAAM,KAAK,GAAGA,MAAM,KAAK,GAC5D61H,EAAK,IAAI10H,KAAKw0H,GAAU7xH,WAAW9D,MAAM,KAAK,GAAGA,MAAM,KAAK,GAC5D81H,EAAS,IAAI30H,KAAKw0H,GAAU7xH,WAAW9D,MAAM,KAAK,GAClD+1H,EAAO,IAAI50H,KAAKw0H,GAAU7xH,WAAW9D,MAAM,KAAK,GAChDg2H,EAAQ,IAAI70H,KAAKw0H,GAAU7xH,WAAW9D,MAAM,KAAK,GACjDi2H,EAAK,KAQT,OAPIL,GAAK,KACPA,GAAQ,GACRK,EAAK,MAEG,IAANL,IACFA,EAAI,IAECD,GAAWG,EAAQ,IAAMC,EAAM,IAAMC,EAAO,IAAMJ,EAAI,IAAMC,EAAI,IAAMI,EAAK,GACpF,CAEO,SAASC,EAAgBP,GAC9B,IAAIQ,EAAcppH,KAAK4U,MAAMg0G,EAAU,KAEnCS,EAAQrpH,KAAK4U,MAAMw0G,EAAc,MACrCA,GAAwB,KAARC,EAEhB,IAAIC,EAAUtpH,KAAK4U,MAAMw0G,EAAc,IACvCA,GAAyB,GAAVE,EAEf,IAAIC,EAAUH,EAEd,OAAOC,EAAQ,IAAMzpC,IAAAA,SAAW0pC,EAAS,EAAG,KAAO,IAAM1pC,IAAAA,SAAW2pC,EAAS,EAAG,IAClF,C,mCCvCA,MAAMC,EAAc,eAEb,SAASr3G,EAASnf,EAAMhF,EAAQ,CAAC,GACtC,IAAKgF,EAAM,KAAM,oBAEjB,GAAIA,EAAK6qB,MAAM2rG,GACb,OAAOx2H,EAGT,IAAIy2H,EAAWt8H,OAAO6J,SAASyyH,SAE/B,GAAIz7H,EAAQ07H,UAAW,CACrB,IAAIC,EAAgBF,EAASx2H,MAAM,KAC/B02H,EAAcl3H,QAAU,IAC1Bk3H,EAAc,GAAK37H,EAAQ07H,UAC3BD,EAAWE,EAAchnG,KAAK,KAElC,CAGA,OAAOx1B,OAAO6J,SAAS4yH,SAAW,KAAOH,GAAYt8H,OAAO6J,SAAS6yH,KAAO,IAAM18H,OAAO6J,SAAS6yH,KAAM,IAAM72H,CAChH,C,6CCpBO,MAAM82H,EAAcC,GACzBA,EACG/xH,QAAQ,KAAM,SACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,UACdA,QAAQ,KAAM,UAENsuH,EAAsBA,CAAC1oH,EAAOiwC,EAAY,OACrD,GAAIjwC,EAAMnL,QAAUo7C,EAAW,OAAOjwC,EAEtC,MAAMosH,EAAYpsH,EAAM8Q,UAAU,EAAGm/B,GAAa,MAClD,MAAQ,yBAAwBi8E,EAAWlsH,OAAWksH,EAAWE,UAAkB,EAGxEhE,EAAep0H,GACnBA,EACJoG,QAAQ,KAAM,KACdA,QAAQ,SAASiyH,GAAQA,EAAK/6C,e,uGCNnC,MAAMg7C,EAAU,oBACVC,EAAW,+BAEV,SAASxxC,EAAiCzkF,GAC/C,MAAM+xE,GAA2BmkD,EAAAA,EAAAA,IAA+DF,EAASh2H,EAAIi2H,EAAU,CAAC,EAAG,CAACE,sBAAuBA,IAEnJ,MAAO,CACL/9C,0BAA2BrG,EAAyBqkD,aACpDC,2BAA4BtkD,EAAyBukD,cACrDC,2BAA4BxkD,EAAyBykD,cACrDC,4BAA6B1kD,EAAyB2kD,eACtDC,wCAAyC5kD,EAAyB6kD,2BAClEC,6BAA8B9kD,EAAyB+kD,gBACvDC,yCAA0ChlD,EAAyBilD,4BACnE3+C,6BAA8BtG,EAAyBklD,gBACvDC,yCAA0CnlD,EAAyBolD,4BACnEC,+BAAgCrlD,EAAyBslD,kBACzDC,8BAA+BvlD,EAAyBwlD,iBACxDC,0CAA2CzlD,EAAyB0lD,6BACpEC,gCAAiC3lD,EAAyB4lD,mBAC1Dr/C,sBAAuBvG,EAAyB6lD,SAChDC,wBAAyB9lD,EAAyB+lD,WAClDC,wBAAyBhmD,EAAyBimD,WAClDl4C,yBAA0B/N,EAAyBkmD,YACnD1/C,8BAA+BxG,EAAyBmmD,iBACxDC,2BAA4BpmD,EAAyBqmD,cACrDC,mCAAoCtmD,EAAyBumD,sBAC7DC,mCAAoCxmD,EAAyBymD,sBAC7DC,mCAAoC1mD,EAAyB2mD,sBAC7Dh0C,qCAAsC3S,EAAyB4mD,wBAC/DC,oCAAqC7mD,EAAyB8mD,uBAC9Dh5C,0BAA2BA,CAAC/9E,EAA0B2S,IAgBnD,SAAmCzU,EAAY8B,EAA0B2S,GAC9E,MAAO,CAACy+D,EAAoBE,KAC1B,MAAMrB,EAA2B0S,EAAiCzkF,GAElE,IAAI84H,EAA0B/mD,EAAyB2S,qCAAqCtR,KACxF2lD,EAAwBhnD,EAAyB0mD,mCAAmCrlD,MAAe,CAAC,EAEpG4lD,EAAcF,EAAwBh3H,OAAS,CAAC,EAChDm3H,EAAYF,EAAsBj3H,OAAS,CAAC,EAE5CyV,EAAW4d,EAAAA,GAAgB,CAACs1F,EAAUl/G,EAAK+nG,IACtCn+E,EAAAA,GAAgB,CAACzrB,EAAOhM,EAAK61G,KAE3B,CAAC7pG,OADO8zF,EAAAA,EAAAA,YAAW9zF,GAASA,EAAMyrB,EAAAA,EAAO,CAAC5pB,EAAK7N,EAAK,SAAUs7H,IAAgBtvH,EAC5DwvH,WAAY,IAAIh5H,MAAMirC,aAC9Cs/E,IACF3oH,GAEHoxE,EAASnB,EAAyBsG,6BAA6B,CAACv2E,OAAOgpC,EAAAA,EAAAA,IAAYmuF,EAAW1hH,MAC9F27D,EAASnB,EAAyBgmD,2BAE9BtjH,GACFA,GACF,CAEJ,CAxCoForE,CAA0B7/E,EAAI8B,EAAO2S,GAEzH,CAEO,MAAM0kH,GAAqCC,EAAAA,EAAAA,IAA+DpD,GAEjH,SAASG,EAAsBkD,EAA2BC,GACxD,OAAOlP,EAAAA,EAAAA,YAAW,CAAC,EAAGiP,EAAQC,GAAQ,CAACC,EAAcC,EAAc97H,IACrD,UAARA,GACKotC,EAAAA,EAAAA,IAAYyuF,EAAcC,GAE1BA,GAAgBD,GAG7B,C,0DCxDA,MAAMvD,EAAU,WACVC,EAAW,oBAEV,SAASplD,EAAwB7wE,GACtC,MAAM6xE,GAAkBqkD,EAAAA,EAAAA,IAA6CF,EAASh2H,EAAIi2H,GAElF,MAAO,CACLwD,iBAAkB5nD,EAAgBukD,aAClCsD,kBAAmB7nD,EAAgBykD,cACnC3+C,kBAAmB9F,EAAgB2kD,cACnCmD,mBAAoB9nD,EAAgB6kD,eACpCkD,+BAAgC/nD,EAAgB+kD,2BAChDiD,oBAAqBhoD,EAAgBilD,gBACrCgD,gCAAiCjoD,EAAgBmlD,4BACjDlhD,oBAAqBjE,EAAgBolD,gBACrCzhD,gCAAiC3D,EAAgBslD,4BACjD4C,sBAAuBloD,EAAgBwlD,kBACvC1kD,qBAAsBd,EAAgB0lD,iBACtCyC,iCAAkCnoD,EAAgB4lD,6BAClDwC,uBAAwBpoD,EAAgB8lD,mBACxCjgD,aAAc7F,EAAgB+lD,SAC9BsC,eAAgBroD,EAAgBimD,WAChCpiD,eAAgB7D,EAAgBmmD,WAChCmC,gBAAiBtoD,EAAgBomD,YACjCmC,qBAAsBvoD,EAAgBqmD,iBACtCmC,kBAAmBxoD,EAAgBumD,cACnC70C,0BAA2B1R,EAAgBymD,sBAC3C90C,0BAA2B3R,EAAgB2mD,sBAC3C8B,0BAA2BzoD,EAAgB6mD,sBAC3C6B,4BAA6B1oD,EAAgB8mD,wBAC7Cj1C,2BAA4B7R,EAAgBgnD,uBAGhD,CAEO,MAAM2B,GAA4BpB,EAAAA,EAAAA,IAA6CpD,E,qmCChB/E,MAAMyE,EAAY,YAEZC,EAAO,4BACPC,EAAO,4BACPC,EAAS,8BACTC,EAAS,8BACTC,EAAU,+BAEVC,EAAY,iCACZC,EAAa,kCACbC,EAAa,kCACbC,EAAc,mCAEdC,EAA6B,kDAE7BC,EAAuB,4CACvBC,EAA8B,mDAE9BC,EAAuB,4CACvBC,EAA8B,mDAC9BC,EAAkB,uCAElBC,EAAwB,6CACxBC,EAA+B,oDAC/BC,EAAmB,wCAEzB,SAASzH,EAA2Bn7H,GACzC,OAAO03E,EAAAA,EAAAA,SAAQ13E,GAAM,CAAC2Q,EAAOhM,KAAQk+H,EAAAA,EAAAA,WAAUl+H,IACjD,CAEA,MAAMm+H,EAAyB,CAAC,EA4EhC,MAAMC,EAAmB,CAAC3oH,UAAW,CAAC,GAEtC,SAAS4oH,EAAiCj6H,EAA0Cg6H,EAAkBxnH,EAA2C,CAAC,EAAGxa,EAAgC,CAAC,GACpL,MAAAkiI,EAIIliI,EAHFmiI,cAAAA,OAAa,IAAAD,EAAC9H,EAAoB8H,EAClC5gI,EAEEtB,EAFFsB,SACA8gI,EACEpiI,EADFoiI,0BAGF,IAAK5nH,EAAO6nH,OAAS7nH,EAAO6nH,KAAK/gI,UAAYkZ,EAAO6nH,KAAK/gI,WAAaA,EACpE,OAAO0G,EAGT,OAAQwS,EAAOlV,MACb,KAAK67H,EACH,OAAAlhI,EAAAA,EAAA,GAAW+H,GAAK,IACd0xE,SAAU,CAAC,IAEf,KAAK0nD,EACH,OAAO/iC,EAAAA,EAAAA,MAAKr2F,EAAO,CAAC,aACtB,KAAK64H,EAAO,WACZ,KAAKC,EAAS,WACd,KAAKC,EAAS,WACd,KAAKC,EAAU,WACb,OAAA/gI,EAAAA,EAAA,GAAW+H,GAAK,IACd81E,SAAQ79E,EAAAA,EAAA,GACH+H,EAAM81E,UAAQ,IACjBr7C,WAAW,EACX6/F,0BAA0B,MAGhC,KAAK1B,EACL,KAAKC,EAAO,aACV,OAAA5gI,EAAAA,EAAA,GAAW+H,GAAK,IACdyxE,SAAU0oD,EAAaliI,EAAC,CAAC,EAAGua,EAAO+nH,QAAQtjI,OAC3C6+E,SAAU,CACRr7C,WAAW,EACX+/F,aAAcp8H,KAAKi4E,MACnB2J,OAAQ,MAGd,KAAK84C,EAAS,aACd,KAAKC,EAAS,aAIZ,OADArJ,EAAAA,EAAAA,GAAel9G,EAAO+nH,QAAQtjI,MAC9BgB,EAAAA,EAAA,GAAW+H,GAAK,IACdyxE,SAAU0oD,EAAaliI,EAAC,CAAC,EAAGua,EAAO+nH,QAAQtjI,OAC3C6+E,SAAU,CACRr7C,WAAW,EACX+/F,aAAcp8H,KAAKi4E,MACnB2J,OAAQ,IAEVtO,SAAU0oD,GAA6Bp6H,EAAM0xE,UAAY1xE,EAAM81E,UAAUwkD,0BAA2BjlH,EAAAA,EAAAA,MAAKrV,EAAM0xE,SAAU0oD,GAA6B,CAAC,IAE3J,KAAKvB,EAAO,YACZ,KAAKC,EAAS,YACd,KAAKC,EAAS,YACd,KAAKC,EAAU,YACb,OAAA/gI,EAAAA,EAAA,GAAW+H,GAAK,IACd81E,SAAQ79E,EAAAA,EAAA,GACH+H,EAAM81E,UAAQ,IACjBr7C,WAAW,EACXulD,OAAQ,CAACxtE,EAAO+nH,QAAQ7nH,aAG9B,KAAK2mH,EACH,OAAAphI,EAAAA,EAAAA,EAAA,GAAW+H,GACNwS,EAAO+nH,QAAQE,GAAGz6H,EAAMyxE,SAAUzxE,EAAM0xE,SAAU1xE,EAAMqR,YAAU,IACrEykE,SAAQ79E,EAAAA,EAAA,GACH+H,EAAM81E,UAAQ,IACjBwkD,0BAA0B,MAGhC,KAAKhB,EACH,OAAArhI,EAAAA,EAAA,GAAW+H,GAAK,IACdyxE,SAAQx5E,EAAAA,EAAA,GAAM+H,EAAMyxE,UACfj/D,EAAO+nH,QAAQG,UAGxB,KAAKnB,EACH,OAAAthI,EAAAA,EAAA,GAAW+H,GAAK,IACdyxE,SAAUj/D,EAAO+nH,QAAQE,GAAGz6H,EAAMyxE,SAAUzxE,EAAM0xE,SAAU1xE,EAAMqR,aAEtE,KAAKmoH,EACH,OAAAvhI,EAAAA,EAAA,GAAW+H,GAAK,IACd0xE,SAAQz5E,EAAAA,EAAA,GAAM+H,EAAM0xE,UACfl/D,EAAO+nH,QAAQG,QAEpB5kD,SAAQ79E,EAAAA,EAAA,GACH+H,EAAM81E,UAAQ,IACjBwkD,0BAA0B,MAGhC,KAAKb,EACH,OAAAxhI,EAAAA,EAAA,GAAW+H,GAAK,IACd0xE,SAAUl/D,EAAO+nH,QAAQE,GAAGz6H,EAAM0xE,SAAU1xE,EAAMyxE,SAAUzxE,EAAMqR,WAClEykE,SAAQ79E,EAAAA,EAAA,GACH+H,EAAM81E,UAAQ,IACjBwkD,0BAA0B,MAGhC,KAAKZ,EACH,OAAAzhI,EAAAA,EAAA,GAAW+H,GAAK,IACd0xE,SAAU,CAAC,IAEf,KAAKioD,EACH,OAAA1hI,EAAAA,EAAA,GAAW+H,GAAK,IACdqR,UAASpZ,EAAAA,EAAA,GAAM+H,EAAMqR,WAChBmB,EAAO+nH,QAAQG,UAGxB,KAAKd,EACH,OAAA3hI,EAAAA,EAAA,GAAW+H,GAAK,IACdqR,UAAWmB,EAAO+nH,QAAQE,GAAGz6H,EAAMqR,UAAWrR,EAAMyxE,SAAUzxE,EAAM0xE,YAExE,KAAKmoD,EACH,OAAA5hI,EAAAA,EAAA,GAAW+H,GAAK,IACdqR,UAAW,CAAC,IAEhB,KAAK4nH,EACH,MAAO,CACLvnD,SAAUl/D,EAAO6nH,KAAKM,aACtBtpH,UAAW,CAAC,GAEhB,QACE,OAAOrR,EAEb,CAGO,SAAS46H,EAA2C3jI,GACzD,OAAO03E,EAAAA,EAAAA,SAAQ13E,GAAM,CAAC2Q,EAAOhM,KAAQi/H,EAAAA,EAAAA,WAAUj/H,IACjD,CAuKO,SAASk6H,EAASx8H,EAAoB66H,EAAwBj2H,GACnE,MAAO,CACLZ,KAAMu7H,EACNwB,KAAM,CACJ/gI,WACA4E,MAEFq8H,SAAS/oH,EAAAA,EAAAA,GAAM,CACbtZ,KAAKikB,EAAAA,EAAAA,GAAS,IAAMg4G,GAAYj2H,GAAM,KACtCskB,OAAQ,MACR06D,iBAAiB,EACjBvlF,QAAS,CAAC,OAAU,sBAG1B,CAmBO,SAASq+H,EAAgC18H,EAAoB66H,EAAwB2G,EAAoBC,EAAmDH,EAAuBI,GACxL,MAAO,CAAC5pD,EAAoBE,KAC1B,IAAItxE,EAAQsxE,IACRhtE,EAAOgyH,EAA6Bh9H,EAAUwhI,EAAQ96H,GAE1D,MAAM2R,EAAgBy/D,EAtB1B,SAAiD93E,EAAoB66H,EAAwB2G,EAAoB7jI,EAAqB8jI,EAAmDH,GACvL,MAAO,CACLt9H,KAAMw7H,EACNuB,KAAM,CACJ/gI,WACAwhI,UAEFP,SAAS/oH,EAAAA,EAAAA,GAAM,CACbtZ,KAAKikB,EAAAA,EAAAA,GAAS,IAAMg4G,GACpBl9H,KAAM8jI,EAAe9jI,GACrBurB,OAAQ,OACR06D,iBAAiB,EACjBvlF,QAAS,CAAC,OAAU,sBAG1B,CAOmCsjI,CAAmB3hI,EAAU66H,EAAU2G,EAAQx2H,EAAKotE,UAAY,CAAC,EAAGqpD,IAE/FC,GACFrpH,EAASpJ,MAAMtR,GAAS+jI,EAAc/jI,IACxC,CAEJ,CAmBO,SAASi/H,EAAgC58H,EAAoB66H,EAAwBj2H,EAAY68H,EAAmDH,GACzJ,MAAO,CAACxpD,EAAoBE,KAC1B,IAAItxE,EAAQsxE,IACRhtE,EAAOgyH,EAA6Bh9H,EAAU4E,EAAI8B,GAEtDoxE,EAtBG,SAAiD93E,EAAoB66H,EAAwBj2H,EAAYjH,EAAqB8jI,EAAmDH,GACtL,MAAO,CACLt9H,KAAMy7H,EACNsB,KAAM,CACJ/gI,WACA4E,MAEFq8H,SAAS/oH,EAAAA,EAAAA,GAAM,CACbtZ,KAAKikB,EAAAA,EAAAA,GAAS,IAAMg4G,GAAYj2H,GAAM,KACtCjH,KAAM,CAAC,EAAC4jI,EAAAA,EAAAA,WAAUvhI,IAAYyhI,EAAe9jI,IAC7CurB,OAAQ,MACR06D,iBAAiB,EACjBvlF,QAAS,CAAC,OAAU,sBAG1B,CAOaujI,CAAmB5hI,EAAU66H,EAAUj2H,EAAIoG,EAAKotE,UAAY,CAAC,EAAGqpD,GAAgB,CAE7F,CA+BO,SAAS3E,EAAiB98H,EAAoB66H,EAAwBj2H,GAC3E,MAAO,CAACkzE,EAAoBE,KAC1B,GAfG,SAA6Ch4E,EAAoB0G,EAAqB9B,GAC3F,MAAMoG,EAAOgyH,EAAmCh9H,EAAU4E,EAAI8B,GAC9D,OAAKsE,IAEMA,EAAKwxE,UAAUr7C,cAEfn2B,EAAKwxE,UAAU0kD,cAAiBp8H,KAAKi4E,MAAQ/xE,EAAKwxE,UAAU0kD,aAAe,IAKxF,CAIQW,CAAe7hI,EAAUg4E,IAAYpzE,GACvC,OAAOkzE,EAAS0kD,EAASx8H,EAAU66H,EAAUj2H,GAC/C,CAEJ,CAEO,SAASo4H,EAAmCh9H,EAAoB4E,EAAY8B,GACjF,OAAOA,EAAMshD,EAAUhoD,KAAc0G,EAAMshD,EAAUhoD,IAAW4E,EAClE,CAqCO,SAASk9H,EAAuC9hI,EAAoB4E,EAAY8B,EAAqBq7H,EAAcA,CAACpkI,EAAay6E,KAA6Bh8D,EAAAA,EAAAA,QAAO,CAAC,EAAGze,EAAMy6E,IACpL,IAAIptE,EAAOgyH,EAAmCh9H,EAAU4E,EAAI8B,GAC5D,OAAIsE,EACFrM,EAAAA,EAAA,CACEiG,MACGoG,GAAI,IACPmiB,WAAY40G,EAAc/2H,EAAKmtE,SAAUntE,EAAKotE,YAGzC,CACLxzE,KACAmT,UAAW,CAAC,EACZoV,gBAAYtpB,EAGlB,CAGO,SAASm6H,EACdh+H,EACAtB,EAAwC,CAAC,GAEzC,MAAAsjI,EAGItjI,EAFFmiI,cAAAA,OAAa,IAAAmB,EAAGlJ,EAAoBkJ,EACpClB,EACEpiI,EADFoiI,0BAGF,MAAO,CAACp6H,EAAiDwS,IAriB3D,SAAqExS,EAAkD+5H,EAAwBvnH,EAA2C,CAAC,EAAGxa,EAA+B,CAAC,GAC5N,MAAAujI,EAIIvjI,EAHFmiI,cAAAA,OAAa,IAAAoB,EAACnJ,EAAoBmJ,EAAAC,EAGhCxjI,EAFFsB,SAAAA,OAAQ,IAAAkiI,EAAC,SAAQA,EACjBpB,EACEpiI,EADFoiI,0BAGF,IAAK5nH,EAAO6nH,OAAS7nH,EAAO6nH,KAAK/gI,UAAYkZ,EAAO6nH,KAAK/gI,WAAaA,EACpE,OAAO0G,EAGT,OAAQwS,EAAOlV,MACb,KAAKs7H,EACL,KAAKK,EACL,KAAKJ,EAAO,WACV,OAAA5gI,EAAAA,EAAA,GAAW+H,GAAK,IACd,CAACwS,EAAO6nH,KAAKn8H,IAAK+7H,EAAYj6H,EAAMwS,EAAO6nH,KAAKn8H,IAAKsU,EAAQ,CAAC2nH,gBAAe7gI,WAAU8gI,gCAE3F,KAAKzB,EAAY,aACf,IAAIljH,EAAqD,CAAC,EAc1D,OAZAjD,EAAO+nH,QAAQtjI,KAAKkF,SAASmI,IAC3BmR,EAASnR,EAAKpG,IAAM,CAClBuzE,SAAU0oD,EAAaliI,EAAC,CAAC,EAAGqM,IAC5BwxE,SAAU,CACRr7C,WAAW,EACX+/F,aAAcp8H,KAAKi4E,MACnB2J,OAAQ,IAEV3uE,UAAW,CAAC,EACb,IAGHpZ,EAAAA,EAAA,GAAW+H,GACNyV,GAEP,KAAKqjH,EAAS,aACZ,OAAA7gI,EAAAA,EAAA,IAAYo+F,EAAAA,EAAAA,MAAKr2F,EAAO,CAACwS,EAAO6nH,KAAKn8H,MAAM,CAAF,GACvC,CAACsU,EAAO+nH,QAAQr8H,IAAK+7H,EAAYj6H,EAAMwS,EAAO6nH,KAAKn8H,IAAKsU,EAAQ,CAAC2nH,gBAAe7gI,WAAU8gI,gCAE9F,KAAKlB,EACL,KAAKF,EAAU,aACb,OAAO3iC,EAAAA,EAAAA,MAAKr2F,EAAO,CAACwS,EAAO6nH,KAAKn8H,KAqBlC,QACE,OAAI8B,EAAMwS,EAAO6nH,KAAKn8H,IACpBjG,EAAAA,EAAA,GAAW+H,GAAK,IACd,CAACwS,EAAO6nH,KAAKn8H,IAAK+7H,EAAYj6H,EAAMwS,EAAO6nH,KAAKn8H,IAAKsU,EAAQ,CAAC2nH,gBAAe7gI,WAAU8gI,gCAGlFp6H,EAGf,CA6d+Fy7H,CAAkBz7H,EAAOwS,EAAQ,CAAC2nH,gBAAe7gI,WAAU8gI,6BAC1J,CAEO,SAAShG,EACd96H,EACA4E,EACAi2H,EACAwG,EAA8B,CAAC,EAC/B3iI,EAAuC,CAAC,GAExC,MAAA0jI,EAGI1jI,EAFF+iI,eAAAA,OAAc,IAAAW,EAAGd,EAAqBc,EACtCrH,EACEr8H,EADFq8H,sBAGF,MAAO,CACLC,aAAcA,IApWX,SAA4Bh7H,EAAoBqhI,EAA6BG,GAClF,MAAO,CACLx9H,KAAM27H,EACNoB,KAAM,CACJ/gI,SAAUA,EACVqhI,aAAcA,EACdz8H,GAAI48H,GAGV,CA2VwBxG,CAAah7H,EAAUqhI,EAAcz8H,GACzDs2H,cAAeA,IA1VZ,SAAuBl7H,EAAoBwhI,GAChD,MAAO,CACLx9H,KAAM47H,EACNmB,KAAM,CACJ/gI,SAAUA,EACV4E,GAAI48H,GAGV,CAkVyBtG,CAAcl7H,EAAU4E,GAC7Cw2H,cAAeA,IApUZ,SAAuBp7H,EAAoB4E,GAChD,MAAO,CACLZ,KAAM67H,EACNkB,KAAM,CACJ/gI,SAAUA,EACV4E,GAAIA,GAGV,CA4TyBw2H,CAAcp7H,EAAU4E,GAC7C02H,eAAgBA,IA3Tb,SAAwBt7H,EAAoB4E,GACjD,MAAO,CACLZ,KAAM87H,EACNiB,KAAM,CACJ/gI,SAAUA,EACV4E,GAAIA,GAGV,CAmT0B02H,CAAet7H,EAAU4E,GAC/C42H,2BAA6B2F,GAlT1B,SAAqDnhI,EAAoB4E,EAAYu8H,GAC1F,MAAO,CACLn9H,KAAM+7H,EACNgB,KAAM,CACJ/gI,SAAUA,EACV4E,GAAIA,GAENq8H,QAAS,CACPE,GAAIA,GAGV,CAuSiJkB,CAAuBriI,EAAU4E,EAAIu8H,GAClLzF,gBAAkB0F,GAtSf,SAA+BphI,EAAoB4E,EAAYw8H,GACpE,MAAO,CACLp9H,KAAMg8H,EACNe,KAAM,CACJ/gI,SAAUA,EACV4E,GAAIA,GAENq8H,QAAS,CACPG,OAAQA,GAGd,CA2RgD1F,CAAgB17H,EAAU4E,EAAIw8H,GAC1ExF,4BAA8BuF,GA1R3B,SAAsDnhI,EAAoB4E,EAAYu8H,GAC3F,MAAO,CACLn9H,KAAMi8H,EACNc,KAAM,CACJ/gI,SAAUA,EACV4E,GAAIA,GAENq8H,QAAS,CACPE,GAAIA,GAGV,CA+QsHmB,CAAwBtiI,EAAU4E,EAAIu8H,GACxJtF,gBAAkBuF,GA9Qf,SAA+BphI,EAAoB4E,EAAYw8H,GACpE,MAAO,CACLp9H,KAAMk8H,EACNa,KAAM,CACJ/gI,SAAUA,EACV4E,GAAIA,GAENq8H,QAAS,CACPG,OAAQA,GAGd,CAmQgDvF,CAAgB77H,EAAU4E,EAAIw8H,GAC1ErF,4BAA8BoF,GAlQ3B,SAAsDnhI,EAAoB4E,EAAYu8H,GAC3F,MAAO,CACLn9H,KAAMm8H,EACNY,KAAM,CACJ/gI,SAAUA,EACV4E,GAAIA,GAENq8H,QAAS,CACPE,GAAIA,GAGV,CAuP+HoB,CAAwBviI,EAAU4E,EAAIu8H,GACjKlF,kBAAmBA,IAtPhB,SAA2Bj8H,EAAoB4E,GACpD,MAAO,CACLZ,KAAMo8H,EACNW,KAAM,CACJ/gI,SAAUA,EACV4E,GAAIA,GAGV,CA8O6Bq3H,CAAkBj8H,EAAU4E,GACrDu3H,iBAAmBiF,GA7OhB,SAA0BphI,EAAoB4E,EAAYw8H,GAC/D,MAAO,CACLp9H,KAAMq8H,EACNU,KAAM,CACJ/gI,SAAUA,EACV4E,GAAIA,GAENq8H,QAAS,CACPG,OAAQA,GAGd,CAkO0DjF,CAAiBn8H,EAAU4E,EAAIw8H,GACrF/E,6BAA+B8E,GAjO5B,SAAuDnhI,EAAoB4E,EAAYu8H,GAC5F,MAAO,CACLn9H,KAAMs8H,EACNS,KAAM,CACJ/gI,SAAUA,EACV4E,GAAIA,GAENq8H,QAAS,CACPE,GAAIA,GAGV,CAsN4HqB,CAAyBxiI,EAAU4E,EAAIu8H,GAC/J5E,mBAAoBA,IArNjB,SAA4Bv8H,EAAoB4E,GACrD,MAAO,CACLZ,KAAMu8H,EACNQ,KAAM,CACJ/gI,SAAUA,EACV4E,GAAIA,GAGV,CA6M8B23H,CAAmBv8H,EAAU4E,GACvD43H,SAAUA,IAAMA,EAASx8H,EAAU66H,EAAUj2H,GAC7C83H,WAAYA,CAACgF,EAAc,OAAShF,EAAW18H,EAAU66H,EAAUj2H,EAAI68H,EAAgBC,GACvF9E,WAAYA,IAAMA,EAAW58H,EAAU66H,EAAUj2H,EAAI68H,GACrD5E,YAAaA,IAvIV,SAAqB78H,EAAoB66H,EAAwBj2H,GACtE,MAAO,CACLZ,KAAM07H,EACNqB,KAAM,CACJ/gI,SAAUA,EACV4E,GAAIA,GAENq8H,SAAS/oH,EAAAA,EAAAA,GAAM,CACbtZ,KAAKikB,EAAAA,EAAAA,GAAS,IAAMg4G,GAAYj2H,GAAM,KACtCskB,OAAQ,SACR06D,iBAAiB,EACjBvlF,QAAS,CAAC,OAAU,sBAG1B,CAyHuBw+H,CAAY78H,EAAU66H,EAAUj2H,GACnDk4H,iBAAkBA,IAAMA,EAAiB98H,EAAU66H,EAAUj2H,GAC7Do4H,cAAgBt2H,GAAwBs2H,EAAch9H,EAAU4E,EAAI8B,GACpEw2H,sBAAwBx2H,GAjGrB,SAAqC1G,EAAoB4E,EAAY8B,GAC1E,IAAIsE,EAAOgyH,EAA6Bh9H,EAAU4E,EAAI8B,GACtD,GAAIsE,EACF,OAAOA,EAAKmtE,QAEhB,CA4FoD+kD,CAA4Bl9H,EAAU4E,EAAI8B,GAC1F02H,sBAAwB12H,GA3FrB,SAAoD1G,EAAoB4E,EAAY8B,GACzF,IAAIsE,EAAOgyH,EAAmCh9H,EAAU4E,EAAI8B,GAC5D,GAAIsE,EACF,OAAOA,EAAKwxE,QAEhB,CAsFoD4gD,CAAsBp9H,EAAU4E,EAAI8B,GACpF42H,sBAAwB52H,GArFrB,SAAqC1G,EAAoB4E,EAAY8B,GAC1E,IAAIsE,EAAOgyH,EAA6Bh9H,EAAU4E,EAAI8B,GACtD,GAAIsE,EACF,OAAOA,EAAKotE,QAEhB,CAgFoDklD,CAA4Bt9H,EAAU4E,EAAI8B,GAC1F62H,wBAA0B72H,GAxEvB,SAAuC1G,EAAoB4E,EAAY8B,EAAqBq7H,EAAcA,CAACpkI,EAAay6E,KAA6Bh8D,EAAAA,EAAAA,QAAO,CAAC,EAAGze,EAAMy6E,IAC3K,IAAIptE,EAAOgyH,EAA6Bh9H,EAAU4E,EAAI8B,GACtD,GAAIsE,EACF,OAAO+2H,EAAc/2H,EAAKmtE,SAAUntE,EAAKotE,SAE7C,CAmEsDmlD,CAA8Bv9H,EAAU4E,EAAI8B,EAAOq0H,GACrG0C,uBAAyB/2H,GAhFtB,SAA+C1G,EAAoB4E,EAAY8B,GACpF,IAAIsE,EAAOgyH,EAAsCh9H,EAAU4E,EAAI8B,GAC/D,GAAIsE,EACF,OAAOA,EAAK+M,SAEhB,CA2EqD0lH,CAAsCz9H,EAAU4E,EAAI8B,GAEzG,C,qECjoBA,MAAMk0H,EAAU,oBACVC,EAAW,uBAEV,SAAShxC,EAAiCjlF,GAC/C,MAAM87D,GAA2Bo6D,EAAAA,EAAAA,IAA+DF,EAASh2H,EAAIi2H,GAE7G,MAAO,CACLj6D,0BAA2BF,EAAyBs6D,aACpDyH,2BAA4B/hE,EAAyBw6D,cACrDwH,2BAA4BhiE,EAAyB06D,cACrDuH,4BAA6BjiE,EAAyB46D,eACtDsH,wCAAyCliE,EAAyB86D,2BAClEqH,6BAA8BniE,EAAyBg7D,gBACvDoH,yCAA0CpiE,EAAyBk7D,4BACnE/6D,6BAA8BH,EAAyBm7D,gBACvDkH,yCAA0CriE,EAAyBq7D,4BACnEiH,+BAAgCtiE,EAAyBu7D,kBACzDgH,8BAA+BviE,EAAyBy7D,iBACxD+G,0CAA2CxiE,EAAyB27D,6BACpE8G,gCAAiCziE,EAAyB67D,mBAC1D9/C,sBAAuB/b,EAAyB87D,SAChD17D,wBAAyBJ,EAAyBg8D,WAClD0G,wBAAyB1iE,EAAyBk8D,WAClDyG,yBAA0B3iE,EAAyBm8D,YACnDyG,8BAA+B5iE,EAAyBo8D,iBACxDyG,2BAA4B7iE,EAAyBs8D,cACrDwG,mCAAoC9iE,EAAyBw8D,sBAC7DuG,mCAAoC/iE,EAAyB08D,sBAC7DsG,mCAAoChjE,EAAyB48D,sBAC7DqG,qCAAsCjjE,EAAyB68D,wBAC/DqG,oCAAqCljE,EAAyB+8D,uBAElE,CAEO,SAAS10C,EAA+BnkF,EAAY8B,GACzD,OAAOo7H,EAAAA,EAAAA,IAAiElH,EAASh2H,EAAI8B,EACvF,CAEO,MAAMm9H,GAAqC7F,EAAAA,EAAAA,IAA+DpD,E,0DCtCjH,MAAMA,EAAU,iBACVC,EAAW,oBAEV,SAASrlD,EAA8B5wE,GAC5C,MAAMklF,GAAwBgxC,EAAAA,EAAAA,IAAyDF,EAASh2H,EAAIi2H,GAEpG,MAAO,CACLiJ,uBAAwBh6C,EAAsBkxC,aAC9C+I,wBAAyBj6C,EAAsBoxC,cAC/C8I,wBAAyBl6C,EAAsBsxC,cAC/C6I,yBAA0Bn6C,EAAsBwxC,eAChD4I,qCAAsCp6C,EAAsB0xC,2BAC5D2I,0BAA2Br6C,EAAsB4xC,gBACjD0I,sCAAuCt6C,EAAsB8xC,4BAC7DyI,0BAA2Bv6C,EAAsB+xC,gBACjDyI,sCAAuCx6C,EAAsBiyC,4BAC7DwI,4BAA6Bz6C,EAAsBmyC,kBACnDuI,2BAA4B16C,EAAsBqyC,iBAClDsI,uCAAwC36C,EAAsBuyC,6BAC9DqI,6BAA8B56C,EAAsByyC,mBACpDoI,mBAAoB76C,EAAsB0yC,SAC1CoI,qBAAsB96C,EAAsB4yC,WAC5CmI,qBAAsB/6C,EAAsB8yC,WAC5CkI,sBAAuBh7C,EAAsB+yC,YAC7CkI,2BAA4Bj7C,EAAsBgzC,iBAClDkI,wBAAyBl7C,EAAsBkzC,cAC/CiI,gCAAiCn7C,EAAsBozC,sBACvDgI,gCAAiCp7C,EAAsBszC,sBACvD+H,gCAAiCr7C,EAAsBwzC,sBACvD8H,kCAAmCt7C,EAAsByzC,wBACzD8H,iCAAkCv7C,EAAsB2zC,uBAG5D,CAEO,MAAM6H,GAAkCtH,EAAAA,EAAAA,IAAyDpD,E,yqCCpCjG,MAAMhhE,EAAmB,mDACnBC,EAA4B,4DAC5BC,EAAmB,oDACnBkB,EAA4B,4DAC5BF,EAAwB,wDACxBU,EAAY,4CACZZ,EAAiB,iDACjB8B,EAAqB,qDACrBhB,EAAoB,oDACpBS,EAAoB,oDAGpBS,EAAY,6CACZhK,EAAY,6CACZiK,EAAW,4CACXhK,EAAW,4CACX8K,EAAY,6CACZ7uB,EAAQ,yCAGRy2F,EAAe,gDACfC,EAAa,8CACbC,EAAwB,yDACxBC,EAAwB,yDACxBC,EAAsB,uDACtBC,EAAQ,yCAGfptE,EAAe,CACrB,EAGe,SAASqtE,EAAQn/H,EAAY8xD,EAAct/C,EAAa,CAAC,GACtE,OAAQA,EAAOlV,MACb,KAAKuhI,EACH,OAAI7+H,EAAMwtD,cAAgBh7C,EAAO+nH,QAAQ6E,UACvCnnI,EAAAA,EAAA,GAAW+H,GAAK,IAAEwtD,iBAAarwD,EAAWwwD,iBAAiB,EAAOC,kBAAmB,OAErF31D,EAAAA,EAAA,GAAW+H,GAAK,IAAEwtD,YAAah7C,EAAO+nH,QAAQ6E,UAAWzxE,iBAAiB,EAAOC,kBAAmB,OAExG,KAAKkxE,EACH,OAAA7mI,EAAAA,EAAA,GAAW+H,GAAK,IAAEwtD,YAAah7C,EAAO+nH,QAAQ6E,UAAWzxE,iBAAiB,EAAOC,kBAAmB,OACtG,KAAKmxE,EACH,OAAA9mI,EAAAA,EAAA,GAAW+H,GAAK,IAAE2tD,iBAAkB3tD,EAAM2tD,kBAC5C,KAAKqxE,EACH,OAAA/mI,EAAAA,EAAA,GAAW+H,GAAK,IAAE4tD,kBAAmBp7C,EAAO+nH,QAAQ8E,UACtD,KAAKJ,EACH,OAAIj/H,EAAM4tD,oBAAsBp7C,EAAO+nH,QAAQ8E,QAC7CpnI,EAAAA,EAAA,GAAW+H,GAAK,IAAE4tD,kBAAmB,OAE9B5tD,EAEX,KAAKk/H,EACH,OAAAjnI,EAAA,GAAW65D,GACb,QACE,OAAO9xD,EAEb,CA2CO,MAAMqjF,EAA8B,CACzCl7C,YAzCK,SAAqBi3F,GAC1B,MAAO,CACL9hI,KAAMuhI,EACNtE,QAAS,CAAC6E,aAEd,EAqCE5mE,UAnCK,SAAmB4mE,GACxB,MAAO,CACL9hI,KAAMwhI,EACNvE,QAAS,CAAC6E,aAEd,EA+BE3xE,oBA7BK,WACL,MAAO,CACLnwD,KAAMyhI,EAEV,EA0BE12F,mBAxBK,SAA4Bg3F,GACjC,MAAO,CACL/hI,KAAM0hI,EACNzE,QAAS,CAAC8E,WAEd,EAoBE3xE,iBAlBK,SAA0B2xE,GAC/B,MAAO,CACL/hI,KAAM2hI,EACN1E,QAAS,CAAC8E,WAEd,EAcEC,MAZK,WACL,MAAO,CACLhiI,KAAM4hI,EAEV,E,0FC1FA,MAAMhL,EAAU,UACVC,EAAW,YAWV,SAASllD,EAAuB/wE,GACrC,MAAM+3E,GAAiBm+C,EAAAA,EAAAA,IAA2CF,EAASh2H,EAAIi2H,GAE/E,MAAO,CACLoL,gBAAiBtpD,EAAeq+C,aAChCkL,iBAAkBvpD,EAAeu+C,cACjCr+C,iBAAkBF,EAAey+C,cACjC+K,kBAAmBxpD,EAAe2+C,eAClCrjD,8BAA+B0E,EAAe6+C,2BAC9C4K,mBAAoBzpD,EAAe++C,gBACnC2K,+BAAgC1pD,EAAei/C,4BAC/CvxC,mBAAoB1N,EAAek/C,gBACnCyK,+BAAgC3pD,EAAeo/C,4BAC/CwK,qBAAsB5pD,EAAes/C,kBACrCuK,oBAAqB7pD,EAAew/C,iBACpCsK,gCAAiC9pD,EAAe0/C,6BAChDqK,sBAAuB/pD,EAAe4/C,mBACtC3/C,YAAaD,EAAe6/C,SAC5BmK,cAAehqD,EAAe+/C,WAC9BpyC,cAAe3N,EAAeigD,WAC9BgK,eAAgBjqD,EAAekgD,YAC/BgK,oBAAqBlqD,EAAemgD,iBACpCgK,iBAAkBnqD,EAAeqgD,cACjC+J,yBAA0BpqD,EAAeugD,sBACzC8J,yBAA0BrqD,EAAeygD,sBACzC6J,yBAA0BtqD,EAAe2gD,sBACzC4J,2BAA4BvqD,EAAe4gD,wBAC3C4J,0BAA2BxqD,EAAe8gD,uBAE9C,CAEO,SAASx0C,EAAqBrkF,EAAY8B,GAC/C,OAAOo7H,EAAAA,EAAAA,IAA6ClH,EAASh2H,EAAI8B,EACnE,CAEO,MAAM0gI,GAA2BpJ,EAAAA,EAAAA,IAA2CpD,EAAS,CAACiG,cA5C7F,SAAuBljI,GACrB,IAAI0pI,GAAkBhyD,EAAAA,EAAAA,SAAQ13E,GAAM,CAAC2Q,EAAOhM,KAAQk+H,EAAAA,EAAAA,WAAUl+H,KAK9D,MAJoC,kBAAzB+kI,EAAgB1pI,OACzB0pI,EAAgB1pI,MAAO6zG,EAAAA,EAAAA,IAAe61B,EAAgB1pI,OAGjD0pI,CACT,EAqC2HvG,0BAA2B,CAAC,e,+EC/CvJ,MAAMlG,EAAU,UACVC,EAAW,mBAWV,SAASjlD,EAAuBhxE,GACrC,MAAM8xE,GAAiBokD,EAAAA,EAAAA,IAA2CF,EAASh2H,EAAIi2H,GAE/E,MAAO,CACLyM,gBAAiB5wD,EAAeskD,aAChCuM,iBAAkB7wD,EAAewkD,cACjC9+C,iBAAkB1F,EAAe0kD,cACjCl9C,kBAAmBxH,EAAe4kD,eAClCpjD,8BAA+BxB,EAAe8kD,2BAC9CgM,mBAAoB9wD,EAAeglD,gBACnC+L,+BAAgC/wD,EAAeklD,4BAC/C3hD,mBAAoBvD,EAAemlD,gBACnC6L,+BAAgChxD,EAAeqlD,4BAC/C4L,qBAAsBjxD,EAAeulD,kBACrCnlD,oBAAqBJ,EAAeylD,iBACpCxkD,gCAAiCjB,EAAe2lD,6BAChDuL,sBAAuBlxD,EAAe6lD,mBACtC1iD,YAAanD,EAAe8lD,SAC5BqL,cAAenxD,EAAegmD,WAC9BtyC,cAAe1T,EAAekmD,WAC9BkL,eAAgBpxD,EAAemmD,YAC/BkL,oBAAqBrxD,EAAeomD,iBACpCkL,iBAAkBtxD,EAAesmD,cACjCxzC,yBAA0B9S,EAAewmD,sBACzCv0C,yBAA0BjS,EAAe0mD,sBACzCx0C,yBAA0BlS,EAAe4mD,sBACzC50C,2BAA4BhS,EAAe6mD,wBAC3C10C,0BAA2BnS,EAAe+mD,uBAE9C,CAEO,MAAMwK,GAA2BjK,EAAAA,EAAAA,IAA2CpD,EAAS,CAACiG,cAxC7F,SAAuBljI,GACrB,IAAI0pI,GAAkBhyD,EAAAA,EAAAA,SAAQ13E,GAAM,CAAC2Q,EAAOhM,KAAQk+H,EAAAA,EAAAA,WAAUl+H,KAK9D,OAJA+kI,EAAgB1pI,MAAO6zG,EAAAA,EAAAA,IAAe61B,EAAgB1pI,MAEtD0pI,EAAgBphD,gBAAkB,GAE3BohD,CACT,EAiC2HvG,0BAA2B,CAAC,e,8pCCnDhJ,MAAMoH,EAAY,qCAGnB1vE,EAAe,CACrB,E,eCOA,MAAMixB,GAAK0+C,EAAAA,EAAAA,IAAgB,CACzBz+C,cACF,OAEA,GAAey+C,EAAAA,EAAAA,IAAgB,CAC7B1+C,KAEArvD,UAAS,IACTguG,mBAAkB,KAClB/tG,mBAAkB,KAClB00B,gBAAe,IACf2tB,SAAQ,KACRr8E,SAAQ,IACRgoI,YDjBa,SAAiB3hI,EAAY8xD,EAAct/C,EAAa,CAAC,GACtE,OAAQA,EAAOlV,OACRkkI,EACHvpI,EAAAA,EAAA,GAAW+H,GAAUwS,EAAO+nH,QAAQG,QAE7B16H,CAEb,IEPM4hI,GAAaC,EAAAA,EAAAA,IACjBC,EAAAA,EACAC,EAAAA,IAIIC,EAAmB7qI,OAAO8qI,sCAAwC3xC,EAAAA,GAExE,OACgB4xC,EAAAA,EAAAA,IAAY/C,EAAS6C,EAAiBJ,I,eCXtD,MAAMO,EAAW,CACftrD,MAAOurD,EAAAA,MAGH3sG,EAAYzrB,KAAK4U,MAAuB,KAAhB5U,KAAK6U,UAUnC,EARsBwjH,CAAC3jI,EAAO4jI,IAC5B,IACEllI,EAAAA,cAACmlI,EAAAA,GAAQ,CAACC,MAAOA,KACfplI,EAAAA,cAACyqD,EAAAA,EAAmBpsD,OAAAia,OAAA,CAACkhE,SAAUurD,EAAU1sG,UAAWA,GAAe/2B,KAOlE,SAASgmF,EAAuBhmF,EAAO4jI,GAC5C,OACEllI,EAAAA,cAACmlI,EAAAA,GAAQ,CAACC,MAAOA,KACfplI,EAAAA,cAACyqD,EAAAA,EAAwBnpD,GAG/B,C,kDC1BA,MAUA,E,MAVe+jI,GAAAA,MAAW,CACxBC,YAAa,CACXC,cAAe,iCACfC,aAAc,+CACdC,YAAa,+CACbC,WAAY,gDAEdC,gBAAgB,G","sources":["webpack://relier-react-webpack-rails/./app/javascript/src/application/analytics.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/api/client.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/api/sdk.gen.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Admin/Versions/List.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Aq/Button.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Assessment/Dashboard/assessment_dashboard_modal.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Assessment/Reports/CohortProgressesDeliveriesTable.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Assessment/Reports/CurricularPerformanceSummary/clc_bar.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Assessment/Reports/CurricularPerformanceSummary/curricular_summary_discipline.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Assessment/Reports/CurricularPerformanceSummary/curricular_summary_focus.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Assessment/Reports/CurricularPerformanceSummary/curricular_summary_system.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Assessment/Reports/CurricularPerformanceSummary/ibubble.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Assessment/Reports/CurricularPerformanceSummary/sorting_curricular_summary.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Assessment/Reports/CustomMultiSelect.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Assessment/Reports/StudentLearningProgressTable.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/FileUploader/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/Button/component.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/CollapsibleList/Item/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/DirectionalButtons/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/List/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/check_visibility.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/LoadingSpinner/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/Modal/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/PostButton/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/StickyTable/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/SortTable/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/ToggleBar/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/ToggleView/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Integrations/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/FindAndReplaceControls.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/find.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/NodeGeneralControls/ColorPicker.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/NodeGeneralControls/LinkInput.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/EditHeader/BooleanInput.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/EditHeader/EnumTagsInput.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/EditHeader/FalseOrNumberInput.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/EditHeader/SelectInput.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/EditHeader/TextInput.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/EditHeader/TagsInput.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/EditHeader/MultiSelectInput.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/EditHeader/MetadataInputs.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/EditHeader.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ConvertToRLOModal.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Channels/ActiveEditors/ActiveEditor.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Channels/ActiveEditors.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ListRLOModal.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/NodeGeneralControls.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/TopControls.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/MediaManager.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/UpdateOnBlurTextField/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/MediaPicker.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodeHelpers/StyledText/Editor.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodeHelpers/StyledText.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/CDQFeatures.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/Section/Header.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodeHelpers/AddNode.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/currentlyEditing.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodeHelpers/Bookmark.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodeHelpers/Note.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/Audio.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/handleActions.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/Button.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/CategoryMatcher/GradedFeedbackBanner.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/CategoryMatcher.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/CDQQuestion.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/Checkbox.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/HorizontalRule.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/Image.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/ImageGallery.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/LearningObjective.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/LearningObjectivesList.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/List/ListItem.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Functions/Inline.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/List.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/MultipleChoice.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/Paragraph.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/RatingBar.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/Table/Cell.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/Table/Row.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/Table.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Aq/InfoBubble.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Aq/Switch.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Aq/SmileRating.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/channels/consumer.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/TextInput.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/channels/automated_summary_statement_channel.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/VariantPlaceholder.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/Video.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/Modals/FeedbackModal.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/Section.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/Panel/DeleteCell.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/Panel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/AssessmentQuestionDataPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/AssessmentQuestionDetails/DetailsTab.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/AssessmentQuestionDetails/StatisticsTab.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/BarButton.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/BookmarksPanel/BookmarkSummary.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/CaseMetadataPanel/PrerequisiteMetadata.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/CaseTeachingPointsPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/CaseMapPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/FeedbackSummary.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/FeedbackPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/Gen/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/Span/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/Paragraph/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/TextListPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/DiagnosisSummary.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/FindingSummary.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/NoteSummary.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/AuthorHeader.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/StudentFeedback.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ChangeSummaryColumn/CommentInput/mentionsInputStyle.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ChangeSummaryColumn/CommentInput/mentionStyle.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ChangeSummaryColumn/CommentInput.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/SummaryOfEdit.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/EditorsChecklist.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/Timer.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/AdminToolsPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/AssessmentQuestionDetails/component.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/CaseMetadataPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/CaseLearningObjectivesPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/SummaryOfEditsPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/StudentFeedbackPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/BookmarksPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/LabValuesPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/Modals/LearningObjectivesAddNew.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/Modals/LearningObjectivesConfirmEdit.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/Modals.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ContentMappingTool/AssessmentMap.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ContentMappingTool/LOTPMap.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ContentMappingTool.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ChangeSummaryColumn/ChangeSummary.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ChangeSummaryColumn.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ROName.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/AssessmentQuestionForm.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/Component.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Observers/baseObserver.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Observers/activeUserObserver.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Observers/beforeInputObserver.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Observers/copyObserver.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Observers/mouseClickObserver.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Observers/offlineObserver.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Observers/selectionObserver.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Kind/SignatureCase.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Reflow.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/undoRedoState.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/EditActions/delete.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/EditActions/shared.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/EditActions/paste.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/EditActions/return.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/Container.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/EditActions/insert.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/EditActions/tab.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/EditActions/shiftTab.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/EditActions/toggleStyle.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/TeachingPointModal/component.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Reactabular/helpers/Paginator.jsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Reactabular/helpers/PerPage.jsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Reactabular/helpers/PrimaryControls.jsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Reactabular/helpers/table_def_funcs.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Reactabular/table_defs.jsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Reactabular/aqueduct_table.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Reactabular/helpers/paginate.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/ReusableObject/Detail/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/ReusableObject/Summary/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/ReusableObject/List/defaults.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/ReusableObject/List/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Convert/HTML.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Convert/PlainText.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Convert/RangeInlineJSON.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Define/base.ts","webpack://relier-react-webpack-rails/./lib/case_metadata/additional_diagnoses.txt","webpack://relier-react-webpack-rails/./lib/case_metadata/clinical_principles.txt","webpack://relier-react-webpack-rails/./lib/case_metadata/differential_diagnosis.txt","webpack://relier-react-webpack-rails/./lib/case_metadata/final_diagnoses.txt","webpack://relier-react-webpack-rails/./lib/case_metadata/presenting_problems.txt","webpack://relier-react-webpack-rails/./lib/case_metadata/sciences_core_concepts.txt","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Functions/Range.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Functions/RangeInlineJSON.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Functions/TreeInlineJSON.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Functions/base.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Functions/table.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/changes.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/colors.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/generateReasoningToolStateFunctions.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/context.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/displayMode.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/documentUserState.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/menu.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/scrollTo.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/selection.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/trackChangesEditMode.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/version_types.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/DocumentUserLog.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/RO/content_type.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/assessment.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/dates.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/generateUUID.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/media_manager.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/progressHelper.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/time_format.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/url.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/utils.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/reducers/documentUserStates.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/reducers/documents.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/reducers/itemReducer.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/reducers/learningObjectives.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/reducers/reusableObjects.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/reducers/ui/reasoningTool.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/reducers/variants.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/reducers/versions.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/reducers/docSettings.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/reducers/indexNewDocEdit.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/store/storeNewDocEdit.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/startup/NewEditDocApp.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/ui/MySwal.tsx"],"sourcesContent":["import ahoy from \"ahoy.js\"\n\nfunction analyticsModule() {\n function track(eventName, data){\n ahoy.track(eventName, data)\n }\n\n return { track };\n}\n\nwindow.analytics = analyticsModule()\n\nexport default analyticsModule();\n","// src/config/clientConfig.ts\nimport { client } from \"./sdk.gen\";\nimport Cookies from \"js-cookie\";\n\n// Get the auth token from cookies\nconst authToken = Cookies.get(\"auth_token\");\n\n// Configure the client with base URL and headers\nclient.setConfig({\n baseUrl: '/',\n headers: {\n Authorization: authToken ? `Bearer ${authToken}` : \"\",\n \"Content-Type\": \"application/json\",\n },\n});\n\n// Export the client for use in the application\nexport default client;\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { createClient, createConfig, type OptionsLegacyParser, formDataBodySerializer } from '@hey-api/client-fetch';\nimport type { GetAdminAssessmentQuestionSetsData, GetAdminAssessmentQuestionSetsError, GetAdminAssessmentQuestionSetsResponse, CreateAdminAssessmentQuestionSetData, CreateAdminAssessmentQuestionSetError, CreateAdminAssessmentQuestionSetResponse, GetAdminAssessmentQuestionsData, GetAdminAssessmentQuestionsError, GetAdminAssessmentQuestionsResponse, UpdateBulkAdminAssessmentQuestionsData, UpdateBulkAdminAssessmentQuestionsError, UpdateBulkAdminAssessmentQuestionsResponse, DeleteBulkAdminAssessmentQuestionsError, DeleteBulkAdminAssessmentQuestionsResponse, GetAdminAssessmentQuestionData, GetAdminAssessmentQuestionError, GetAdminAssessmentQuestionResponse, ImportAdminAssessmentQuestionsData, ImportAdminAssessmentQuestionsError, ImportAdminAssessmentQuestionsResponse, ForkAdminAssessmentQuestionData, ForkAdminAssessmentQuestionError, ForkAdminAssessmentQuestionResponse, GetAdminAssessmentStatisticsData, GetAdminAssessmentStatisticsError, GetAdminAssessmentStatisticsResponse, GetAdminInitDataError, GetAdminInitDataResponse, GetAdminDocumentsData, GetAdminDocumentsError, GetAdminDocumentsResponse, GetAdminDocumentData, GetAdminDocumentError, GetAdminDocumentResponse, GetAdminGroupsData, GetAdminGroupsError, GetAdminGroupsResponse, GetAdminGroupData, GetAdminGroupError, GetAdminGroupResponse, GetAdminLearningObjectivesData, GetAdminLearningObjectivesError, GetAdminLearningObjectivesResponse, GetAdminLearningObjectiveData, GetAdminLearningObjectiveError, GetAdminLearningObjectiveResponse, GetAdminQuizItemResponsesData, GetAdminQuizItemResponsesError, GetAdminQuizItemResponsesResponse, GetAdminQuizItemResponseData, GetAdminQuizItemResponseError, GetAdminQuizItemResponseResponse, GetAdminQuizItemsData, GetAdminQuizItemsError, GetAdminQuizItemsResponse, GetAdminQuizItemData, GetAdminQuizItemError, GetAdminQuizItemResponse, GetAdminQuizzesData, GetAdminQuizzesError, GetAdminQuizzesResponse, GetAdminQuizData, GetAdminQuizError, GetAdminQuizResponse, GetAdminReusableObjectsData, GetAdminReusableObjectsError, GetAdminReusableObjectsResponse, GetAdminReusableObjectData, GetAdminReusableObjectError, GetAdminReusableObjectResponse, GetAdminSaqResponsesData, GetAdminSaqResponsesError, GetAdminSaqResponsesResponse, GetAdminSaqResponseData, GetAdminSaqResponseError, GetAdminSaqResponseResponse, GetAdminUsersData, GetAdminUsersError, GetAdminUsersResponse, GetAdminUserData, GetAdminUserError, GetAdminUserResponse, GetAdminVersionsData, GetAdminVersionsError, GetAdminVersionsResponse, GetCommonUserError, GetCommonUserResponse, PatchApiV1UsersByIdData, PatchApiV1UsersByIdError, PatchApiV1UsersByIdResponse } from './types.gen';\n\nexport const client = createClient(createConfig());\n\n/**\n * list assessment_question_sets\n * Get assessment_question_sets list\n */\nexport const getAdminAssessmentQuestionSets = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminAssessmentQuestionSetsData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminAssessmentQuestionSetsResponse, GetAdminAssessmentQuestionSetsError, ThrowOnError>({\n ...options,\n url: '/api/admin/assessment_question_sets'\n });\n};\n\n/**\n * create admin assessment question set\n * Create admin assessment question set\n */\nexport const createAdminAssessmentQuestionSet = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<CreateAdminAssessmentQuestionSetData, ThrowOnError>) => {\n return (options?.client ?? client).post<CreateAdminAssessmentQuestionSetResponse, CreateAdminAssessmentQuestionSetError, ThrowOnError>({\n ...options,\n url: '/api/admin/assessment_question_sets'\n });\n};\n\n/**\n * list assessment_questions\n * Get assessment_questions list\n */\nexport const getAdminAssessmentQuestions = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminAssessmentQuestionsData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminAssessmentQuestionsResponse, GetAdminAssessmentQuestionsError, ThrowOnError>({\n ...options,\n url: '/api/admin/assessment_questions'\n });\n};\n\n/**\n * update assessment_questions\n * Update AssessmentQuestions\n */\nexport const updateBulkAdminAssessmentQuestions = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<UpdateBulkAdminAssessmentQuestionsData, ThrowOnError>) => {\n return (options?.client ?? client).patch<UpdateBulkAdminAssessmentQuestionsResponse, UpdateBulkAdminAssessmentQuestionsError, ThrowOnError>({\n ...options,\n url: '/api/admin/assessment_questions/update_bulk'\n });\n};\n\n/**\n * delete AssessmentQuestions\n * Delete AssessmentQuestions\n */\nexport const deleteBulkAdminAssessmentQuestions = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<unknown, ThrowOnError>) => {\n return (options?.client ?? client).delete<DeleteBulkAdminAssessmentQuestionsResponse, DeleteBulkAdminAssessmentQuestionsError, ThrowOnError>({\n ...options,\n url: '/api/admin/assessment_questions/delete_bulk'\n });\n};\n\n/**\n * show assessment_question\n * Show assessment_question\n */\nexport const getAdminAssessmentQuestion = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetAdminAssessmentQuestionData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminAssessmentQuestionResponse, GetAdminAssessmentQuestionError, ThrowOnError>({\n ...options,\n url: '/api/admin/assessment_questions/{id}'\n });\n};\n\n/**\n * import assessment questions\n * Import assessment questions\n */\nexport const importAdminAssessmentQuestions = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<ImportAdminAssessmentQuestionsData, ThrowOnError>) => {\n return (options?.client ?? client).post<ImportAdminAssessmentQuestionsResponse, ImportAdminAssessmentQuestionsError, ThrowOnError>({\n ...options,\n ...formDataBodySerializer,\n headers: {\n 'Content-Type': null,\n ...options?.headers\n },\n url: '/api/admin/assessment_questions/import'\n });\n};\n\n/**\n * fork assessment question\n * Fork assessment question\n */\nexport const forkAdminAssessmentQuestion = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ForkAdminAssessmentQuestionData, ThrowOnError>) => {\n return (options?.client ?? client).post<ForkAdminAssessmentQuestionResponse, ForkAdminAssessmentQuestionError, ThrowOnError>({\n ...options,\n url: '/api/admin/assessment_questions/{id}/fork'\n });\n};\n\n/**\n * list assessment_statistics\n * Get assessment statistics list\n */\nexport const getAdminAssessmentStatistics = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminAssessmentStatisticsData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminAssessmentStatisticsResponse, GetAdminAssessmentStatisticsError, ThrowOnError>({\n ...options,\n url: '/api/admin/assessment_statistics'\n });\n};\n\n/**\n * list init data\n * Get admin init data\n */\nexport const getAdminInitData = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<unknown, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminInitDataResponse, GetAdminInitDataError, ThrowOnError>({\n ...options,\n url: '/api/admin/base/init_data'\n });\n};\n\n/**\n * list documents\n * Get documents list\n */\nexport const getAdminDocuments = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminDocumentsData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminDocumentsResponse, GetAdminDocumentsError, ThrowOnError>({\n ...options,\n url: '/api/admin/documents'\n });\n};\n\n/**\n * show document\n * Show document\n */\nexport const getAdminDocument = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetAdminDocumentData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminDocumentResponse, GetAdminDocumentError, ThrowOnError>({\n ...options,\n url: '/api/admin/documents/{id}'\n });\n};\n\n/**\n * list groups\n * Get groups list\n */\nexport const getAdminGroups = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminGroupsData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminGroupsResponse, GetAdminGroupsError, ThrowOnError>({\n ...options,\n url: '/api/admin/groups'\n });\n};\n\n/**\n * show group\n * Show group\n */\nexport const getAdminGroup = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetAdminGroupData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminGroupResponse, GetAdminGroupError, ThrowOnError>({\n ...options,\n url: '/api/admin/groups/{id}'\n });\n};\n\n/**\n * list learning_objectives\n * Get learning_objectives list\n */\nexport const getAdminLearningObjectives = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminLearningObjectivesData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminLearningObjectivesResponse, GetAdminLearningObjectivesError, ThrowOnError>({\n ...options,\n url: '/api/admin/learning_objectives'\n });\n};\n\n/**\n * show learning_objective\n * Show learning_objective\n */\nexport const getAdminLearningObjective = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetAdminLearningObjectiveData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminLearningObjectiveResponse, GetAdminLearningObjectiveError, ThrowOnError>({\n ...options,\n url: '/api/admin/learning_objectives/{id}'\n });\n};\n\n/**\n * list quiz_item_responses\n * Get quiz_item_responses list\n */\nexport const getAdminQuizItemResponses = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminQuizItemResponsesData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminQuizItemResponsesResponse, GetAdminQuizItemResponsesError, ThrowOnError>({\n ...options,\n url: '/api/admin/quiz_item_responses'\n });\n};\n\n/**\n * show quiz_item_response\n * Show quiz_item_response\n */\nexport const getAdminQuizItemResponse = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetAdminQuizItemResponseData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminQuizItemResponseResponse, GetAdminQuizItemResponseError, ThrowOnError>({\n ...options,\n url: '/api/admin/quiz_item_responses/{id}'\n });\n};\n\n/**\n * list quiz_items\n * Get quiz_items list\n */\nexport const getAdminQuizItems = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminQuizItemsData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminQuizItemsResponse, GetAdminQuizItemsError, ThrowOnError>({\n ...options,\n url: '/api/admin/quiz_items'\n });\n};\n\n/**\n * show quiz_item\n * Show quiz_item\n */\nexport const getAdminQuizItem = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetAdminQuizItemData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminQuizItemResponse, GetAdminQuizItemError, ThrowOnError>({\n ...options,\n url: '/api/admin/quiz_items/{id}'\n });\n};\n\n/**\n * list quizzes\n * Get quizzes list\n */\nexport const getAdminQuizzes = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminQuizzesData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminQuizzesResponse, GetAdminQuizzesError, ThrowOnError>({\n ...options,\n url: '/api/admin/quizzes'\n });\n};\n\n/**\n * show quiz\n * Show quiz\n */\nexport const getAdminQuiz = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetAdminQuizData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminQuizResponse, GetAdminQuizError, ThrowOnError>({\n ...options,\n url: '/api/admin/quizzes/{id}'\n });\n};\n\n/**\n * list reusable_objects\n * Get reusable_objects list\n */\nexport const getAdminReusableObjects = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminReusableObjectsData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminReusableObjectsResponse, GetAdminReusableObjectsError, ThrowOnError>({\n ...options,\n url: '/api/admin/reusable_objects'\n });\n};\n\n/**\n * show reusable_object\n * Show reusable_object\n */\nexport const getAdminReusableObject = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetAdminReusableObjectData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminReusableObjectResponse, GetAdminReusableObjectError, ThrowOnError>({\n ...options,\n url: '/api/admin/reusable_objects/{id}'\n });\n};\n\n/**\n * list saq_responses\n * Get saq_responses list\n */\nexport const getAdminSaqResponses = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminSaqResponsesData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminSaqResponsesResponse, GetAdminSaqResponsesError, ThrowOnError>({\n ...options,\n url: '/api/admin/saq_responses'\n });\n};\n\n/**\n * show saq_response\n * Show saq_response\n */\nexport const getAdminSaqResponse = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetAdminSaqResponseData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminSaqResponseResponse, GetAdminSaqResponseError, ThrowOnError>({\n ...options,\n url: '/api/admin/saq_responses/{id}'\n });\n};\n\n/**\n * list users\n * Get users list\n */\nexport const getAdminUsers = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminUsersData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminUsersResponse, GetAdminUsersError, ThrowOnError>({\n ...options,\n url: '/api/admin/users'\n });\n};\n\n/**\n * show user\n * Show user\n */\nexport const getAdminUser = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetAdminUserData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminUserResponse, GetAdminUserError, ThrowOnError>({\n ...options,\n url: '/api/admin/users/{id}'\n });\n};\n\n/**\n * list versions\n * Get versions list\n */\nexport const getAdminVersions = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminVersionsData, ThrowOnError>) => {\n return (options?.client ?? client).get<GetAdminVersionsResponse, GetAdminVersionsError, ThrowOnError>({\n ...options,\n url: '/api/admin/versions'\n });\n};\n\n/**\n * show user\n * User details\n */\nexport const getCommonUser = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<unknown, ThrowOnError>) => {\n return (options?.client ?? client).get<GetCommonUserResponse, GetCommonUserError, ThrowOnError>({\n ...options,\n url: '/api/common/user'\n });\n};\n\n/**\n * Updates the user password\n */\nexport const patchApiV1UsersById = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<PatchApiV1UsersByIdData, ThrowOnError>) => {\n return (options?.client ?? client).patch<PatchApiV1UsersByIdResponse, PatchApiV1UsersByIdError, ThrowOnError>({\n ...options,\n url: '/api/v1/users/{id}'\n });\n};","import * as React from 'react';\nimport { useEffect, useState } from \"react\";\nimport * as classNames from \"classnames\";\n\nimport client from \"../../../api/client\";\nimport { getAdminVersions } from \"../../../api/sdk.gen\";\n\nconst VersionsList = ({ itemId, itemType, itemData }) => {\n client;\n\n const [versions, setVersions] = useState([]);\n const [filteredVersions, setFilteredVersions] = useState([]);\n const [comparisonKeys, setComparisonKeys] = useState<string[]>([]);\n const [hideCreateEvent, setHideCreateEvent] = useState(true);\n const [hideUnmodifiedColumns, setHideUnmodifiedColumns] = useState(false);\n\n useEffect(() => {\n const fetchVersions = async () => {\n const resp = await getAdminVersions({\n query: { item_id: itemId, item_type: itemType, per: 1000 },\n });\n\n setVersions(resp.data.data);\n };\n fetchVersions();\n }, [itemId]);\n\n useEffect(() => {\n const res = hideCreateEvent\n ? versions.filter((version) => version.event !== \"create\")\n : versions;\n setFilteredVersions(res)\n }, [versions, hideCreateEvent]);\n\n useEffect(() => {\n generateComparisonKeys();\n }, [filteredVersions, hideUnmodifiedColumns]);\n\n const extractKeys = (obj: Record<string, any>, prefix = \"\"): string[] => {\n return Object.keys(obj).reduce<string[]>((keys, key) => {\n const fullPath = prefix ? `${prefix}.${key}` : key;\n\n if (obj[key] && typeof obj[key] === \"object\" && !Array.isArray(obj[key])) {\n keys.push(...extractKeys(obj[key], fullPath));\n } else {\n keys.push(fullPath);\n }\n\n return keys;\n }, []);\n };\n\n const generateComparisonKeys = () => {\n const keysSet = new Set<string>();\n\n // Loop through all versions to gather the keys\n filteredVersions.forEach((version) => {\n if (version.reified_object) {\n const keys = extractKeys(version.reified_object);\n keys.forEach((key) => keysSet.add(key));\n }\n });\n\n // Only include modified keys if hideUnmodifiedColumns is true\n if (hideUnmodifiedColumns) {\n const modifiedKeys = Array.from(keysSet).filter((key) => {\n for (let i = 0; i < filteredVersions.length; i++) {\n const currentValue = getValueByPath(filteredVersions[i].reified_object || {}, key);\n const previousObject = i === 0 ? itemData : filteredVersions[i - 1]?.reified_object;\n const previousValue = getValueByPath(previousObject || {}, key);\n \n // Skip \"create\" event versions when filtering\n if (hideCreateEvent && versions[i].event === \"create\") {\n continue;\n }\n\n if ((previousValue || currentValue) && JSON.stringify(currentValue) !== JSON.stringify(previousValue)) {\n return true;\n }\n }\n return false;\n });\n setComparisonKeys(modifiedKeys);\n } else {\n // If hideUnmodifiedColumns is false, include all keys\n setComparisonKeys(Array.from(keysSet));\n }\n };\n\n const getValueByPath = (obj: Record<string, any>, path: string) => {\n return path\n .split(\".\")\n .reduce((acc, key) => (acc && acc[key] !== undefined ? acc[key] : undefined), obj);\n };\n\n const renderTableHead = () => {\n return (\n <tr>\n <th>Version</th>\n <th>Event</th>\n <th>Editor</th>\n <th>Created At</th>\n {comparisonKeys.map((key) => (\n <th key={key}>{key}</th>\n ))}\n </tr>\n );\n };\n\n const renderCurrentState = () => {\n return (\n <tr>\n <td>-</td>\n <td>-</td>\n <td>-</td>\n <td>Current state</td>\n {comparisonKeys.map((key) => {\n const currentValue = getValueByPath(itemData || {}, key);\n \n return (\n <td key={key}>\n {currentValue}\n </td>\n );\n })}\n </tr>\n );\n };\n\n const renderTableRows = () => {\n if (filteredVersions.length === 0) {\n return (\n <tr>\n <td colSpan={4} style={{ textAlign: \"center\" }}>\n There are no records\n </td>\n </tr>\n );\n }\n\n return filteredVersions.map((version, index) => {\n const prevVersion = index === 0 ? { reified_object: itemData } : filteredVersions[index - 1];\n\n return (\n <tr key={version.id}>\n <td>{version.id}</td>\n <td>{version.event}</td>\n <td>{version.whodunnit || \"Unknown\"}</td>\n <td>{new Date(version.created_at).toLocaleString()}</td>\n {comparisonKeys.map((key) => {\n const currentValue = getValueByPath(version.reified_object || {}, key);\n const previousValue = getValueByPath(prevVersion?.reified_object || {}, key);\n\n const isLost = (previousValue || currentValue) && JSON.stringify(previousValue) !== JSON.stringify(currentValue);\n\n return (\n <td\n key={key}\n style={{\n backgroundColor: isLost ? \"#f8d7da\" : undefined,\n }}\n >\n {currentValue}\n </td>\n );\n })}\n </tr>\n );\n });\n };\n\n return (\n <div className=\"table-container\">\n <div className=\"filters\">\n <label>\n <input\n type=\"checkbox\"\n checked={hideCreateEvent}\n onChange={(e) => setHideCreateEvent(e.target.checked)}\n />\n Hide Create Event\n </label>\n <label style={{marginLeft: '10px'}}>\n <input\n type=\"checkbox\"\n checked={hideUnmodifiedColumns}\n onChange={(e) => setHideUnmodifiedColumns(e.target.checked)}\n />\n Hide Unmodified Columns\n </label>\n </div>\n <table className=\"table-with-fixed-columns\">\n <thead>{renderTableHead()}</thead>\n <tbody>\n {renderCurrentState()}\n {renderTableRows()}\n </tbody>\n </table>\n </div>\n );\n};\n\nexport default VersionsList;\n","import * as React from 'react';\n\nimport * as classNames from 'classnames';\n\ninterface Props extends React.ComponentPropsWithoutRef<'button'> {\n outline?: boolean\n}\n\nexport default function AqButton(props: Props): React.ReactElement {\n const {\n disabled = false,\n outline = false,\n children,\n onClick,\n className,\n } = props;\n\n return (\n <button\n className={classNames('aq-button-2', { outline }, className)}\n onClick={onClick}\n disabled={disabled}\n >\n {children}\n </button>\n );\n}","import React, { Component } from 'react';\n\nclass AssessmentDashboardModal extends Component {\n constructor(props) {\n super(props);\n this.state = {\n preserveDates: false,\n preserveAssessment: false,\n preservePurpose: false,\n preserveStudents: false,\n };\n }\n\n componentDidMount() {\n document.addEventListener('keydown', this.handleKeyDown);\n }\n\n componentWillUnmount() {\n document.removeEventListener('keydown', this.handleKeyDown);\n }\n\n handleKeyDown = (event) => {\n if (!this.props.isOpen) return\n\n if (event.key === 'Escape') {\n this.props.onClose();\n } else if (event.key === 'Enter') {\n this.handleSave();\n }\n };\n\n handleCheckboxChange = (event) => {\n const { name, checked } = event.target;\n this.setState({ [name]: checked });\n };\n\n handleSave = () => {\n const { preserveAssessment, preservePurpose, preserveStudents } = this.state;\n if (preserveAssessment && preservePurpose && preserveStudents) {\n const confirmMessage =\n \"Warning: By selecting 'Assessment,' 'Purpose,' and 'Students,' you will assign the same assessment to students twice. Are you sure you want to proceed?\";\n if (window.confirm(confirmMessage)) {\n this.proceedToSave();\n }\n } else {\n this.proceedToSave();\n }\n };\n\n proceedToSave = () => {\n const { url } = this.props;\n const { preserveDates, preserveAssessment, preservePurpose, preserveStudents } = this.state;\n \n const params = new URLSearchParams({\n preserve_dates: preserveDates,\n preserve_assessment: preserveAssessment,\n preserve_purpose: preservePurpose,\n preserve_students: preserveStudents,\n });\n \n const requestUrl = `${url}?${params.toString()}`;\n window.location.href = requestUrl;\n };\n\n isDateRangeValid = () => {\n const { date_range } = this.props;\n const [start, end] = date_range.split(' - ').map((date) => new Date(date));\n const now = new Date();\n return end >= now;\n };\n\n render() {\n const { isOpen, onClose } = this.props;\n const { preserveDates, preserveAssessment, preservePurpose, preserveStudents } = this.state;\n const assessmentName = this.props.assessment?.replace(/\\s\\d{4}$/, '');\n\n if (!isOpen) return null;\n\n const showAvailabilityDates = this.isDateRangeValid();\n\n return (\n <div className=\"modal-overlay\">\n <div className=\"modal-container\">\n <button className=\"close-button\" onClick={onClose} aria-label=\"Close modal\">\n ×\n </button>\n <div className=\"modal-body\">\n <div style={{fontSize:\"22px\", fontWeight: 700}}>\n Duplicate Assessment\n </div>\n <div style={{ padding: '10px 0px' }}>\n Choose the fields you would like to duplicate for your new assessment.\n <br />\n You will be able to edit all fields once you save the duplicate.\n </div>\n <form>\n {showAvailabilityDates && (\n <label className='modal-elements'>\n <input\n type=\"checkbox\"\n name=\"preserveDates\"\n checked={preserveDates}\n onChange={this.handleCheckboxChange}\n aria-label=\"Preserve availability dates\"\n />\n <span style={{ fontWeight: 'normal', paddingRight: '5px' }}>Availability Dates: </span>\n <span style={{ fontWeight: 'bold' }}>{this.props.date_range}</span>\n </label>\n )}\n <label className='modal-elements'>\n <input\n type=\"checkbox\"\n name=\"preserveAssessment\"\n checked={preserveAssessment}\n onChange={this.handleCheckboxChange}\n aria-label=\"Preserve assessment\"\n />\n <span style={{ fontWeight: 'normal', paddingRight: '5px' }}>Assessment: </span>\n <span style={{ fontWeight: 'bold' }}>{assessmentName}</span>\n </label>\n <label className='modal-elements'>\n <input\n type=\"checkbox\"\n name=\"preservePurpose\"\n checked={preservePurpose}\n onChange={this.handleCheckboxChange}\n aria-label=\"Preserve purpose\"\n />\n <span style={{ fontWeight: 'normal', paddingRight: '5px' }}>Purpose: </span>\n <span style={{ fontWeight: 'bold' }}>{this.props.purpose}</span>\n </label>\n <label className='modal-elements'>\n <input\n type=\"checkbox\"\n name=\"preserveStudents\"\n checked={preserveStudents}\n onChange={this.handleCheckboxChange}\n aria-label=\"Preserve students\"\n />\n <span style={{ fontWeight: 'normal', paddingRight: '5px' }}>Students: </span>\n <span style={{ fontWeight: 'bold' }}>{this.props.student_count}</span>\n </label>\n </form>\n </div>\n <button\n className=\"actionBtn\"\n style={{ margin: \"30px 30px\" }}\n onClick={this.handleSave}\n aria-label=\"Save duplicate assessment\"\n >\n Save Duplicate\n </button>\n <button\n className=\"aq-button-2 outline-whitebg-dark-grey\"\n style={{ float: 'right', margin: \"30px 30px\", textTransform: 'uppercase' }}\n onClick={onClose}\n aria-label=\"Cancel and close modal\"\n >\n Cancel\n </button>\n </div>\n </div>\n );\n }\n}\n\nexport default AssessmentDashboardModal;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport GenSortTable from 'Gen/SortTable/component'\nimport TeachingPointModal from 'NewEditDoc/TeachingPointModal/component'\n\nimport TableDownArrowImage from \"images/table-down_arrow.png\";\nimport TableUpArrowImage from \"images/table-up_arrow.png\";\nimport CustomMultiSelect from './CustomMultiSelect';\n\nclass CohortProgressesDeliveriesTable extends React.Component{\n constructor(props){\n super(props);\n\n this.state = {\n cohorts: this.props.cohorts,\n search: '',\n cohortFiltered: this.props.rows,\n filteredData: this.props.rows,\n sortCol: 'status',\n sortDir: 'asc',\n assessment_date: [],\n discipline: [],\n system: [],\n clinical_focus: [],\n purpose: [],\n };\n }\n\n get cohortFilters() {\n return ['assessment_date','discipline','purpose']\n }\n\n get clcFractionNames() {\n return [\n 'excel_fraction',\n 'competent_fraction',\n 'unsure_fraction',\n 'novice_fraction',\n 'warning_fraction'\n ]\n }\n\n sortDeliveries = (sortCol, sortDir) =>{\n var data = this.state.filteredData\n if(sortCol == \"clc\") {\n return this.sortByClc(sortDir)\n }\n data.sort((a, b) => {\n let fa = a[sortCol].toLowerCase(),\n fb = b[sortCol].toLowerCase();\n if (fa < fb) {\n return sortDir == 'asc' ? -1 : 1;\n }\n if (fa > fb) {\n return sortDir == 'asc' ? 1 : -1;\n }\n return 0;\n });\n return data\n }\n\n sortImage = (sortCol)=>{\n return this.state.sortCol == sortCol ? this.state.sortDir == 'asc' ? TableDownArrowImage : TableUpArrowImage : TableDownArrowImage\n }\n\n sortByClc(sortDir) {\n let data = this.state.filteredData\n data.sort((a, b) => {\n let dir = 0\n for (const name of this.clcFractionNames) {\n let fa = a[name],\n fb = b[name]\n if (fa < fb) {\n dir = sortDir == 'asc' ? -1 : 1\n }\n if (fa > fb) {\n dir = sortDir == 'asc' ? 1 : -1\n }\n if (dir == 0) continue\n break\n }\n return dir\n })\n return data\n }\n\n applyFilters() {\n const { system, clinical_focus, search, assessment_date, discipline, purpose, cohortFiltered } = this.state;\n const baseData = (assessment_date.length === 0 && discipline.length === 0 && purpose.length === 0)? this.props.rows : cohortFiltered;\n\n const filteredData = baseData.filter((item) => {\n const matchesSystem = system.length === 0 || system.some(sys => item.system?.includes(sys));\n const matchesClinicalFocus = clinical_focus.length === 0 || clinical_focus.some(cf => item.clinical_focus?.includes(cf));\n\n const matchesSearch = (item.learning_objective || '').toLowerCase().includes(search.toLowerCase()) ||\n (item.teaching_point_url_name || '').toLowerCase().includes(search.toLowerCase()) ||\n (item.case || '').toLowerCase().includes(search.toLowerCase());\n\n return matchesSystem && matchesClinicalFocus && matchesSearch;\n });\n\n this.setState({ filteredData });\n }\n\n\n handleFilterChange(filterName, values) {\n this.setState({ [filterName]: values }, () => {\n if (['assessment_date', 'discipline', 'purpose'].includes(filterName)) {\n // Call setFilters for cohort-related filtering logic\n this.setFilters(filterName, values);\n } else {\n // Otherwise, apply the general filters\n this.applyFilters();\n }\n });\n }\n\n async getFilteredDetails(ids) {\n let params = \"?\"\n for (const id of ids) {\n params += `&ids[]=${id}`\n }\n const response = await fetch(this.props.filter_url + params)\n return response.json()\n }\n\n filtersRow() {\n if (this.props.multiple_cohorts) {\n return (\n <div>\n <div className=\"filtersRow reportSelectFilters\">\n <div className=\"form-inline\">\n <CustomMultiSelect\n options={this.props.assessment_date_options}\n selectedOptions={this.state.assessment_date}\n onChange={(selectedOptions) => this.handleFilterChange('assessment_date', selectedOptions)}\n placeholder=\"Assessment Date\"\n />\n\n <CustomMultiSelect\n options={this.props.discipline_options.map(option => (option.replace('Aquifer ', '')))}\n selectedOptions={this.state.discipline}\n onChange={(selectedOptions) => this.handleFilterChange('discipline', selectedOptions)}\n placeholder=\"Discipline\"\n />\n\n <CustomMultiSelect\n options={this.props.purpose_options}\n selectedOptions={this.state.purpose}\n onChange={(selectedOptions) => this.handleFilterChange('purpose', selectedOptions)}\n placeholder=\"Purpose\"\n />\n\n <CustomMultiSelect\n options={this.props.system_options}\n selectedOptions={this.state.system}\n onChange={(selectedOptions) => this.handleFilterChange('system', selectedOptions)}\n placeholder=\"System\"\n />\n <CustomMultiSelect\n options={this.props.clinical_focus_options}\n selectedOptions={this.state.clinical_focus}\n onChange={(selectedOptions) => this.handleFilterChange('clinical_focus', selectedOptions)}\n placeholder=\"Clinical Focus\"\n />\n </div>\n </div>\n\n <div className=\"educatorSelectedFilters\">\n\n {this.state.assessment_date.length > 0 && this.state.assessment_date.map((selectedAssessmentDate, index) => (\n <p key={index} onClick={() => {\n const updatedssessmentDates = this.state.assessment_date.filter(ad => ad !== selectedAssessmentDate);\n this.handleFilterChange('assessment_date', updatedssessmentDates);\n }} className='educatorfilterSelectedVal'>{selectedAssessmentDate} X</p>\n ))}\n\n {this.state.discipline.length > 0 &&\n this.state.discipline.map((selectedDiscipline, index) => (\n <p key={index} onClick={() => {\n const updatedDisciplines = this.state.discipline.filter(d => d !== selectedDiscipline);\n this.handleFilterChange('discipline', updatedDisciplines);\n }} className='educatorfilterSelectedVal'>{selectedDiscipline} X</p>\n ))}\n\n {this.state.system.length > 0 && this.state.system.map((selectedSystem, index) => (\n <p key={index} onClick={() => {\n const updatedSystems = this.state.system.filter(s => s !== selectedSystem);\n this.handleFilterChange('system', updatedSystems);\n }} className='educatorfilterSelectedVal'>{selectedSystem} X</p>\n ))}\n\n {this.state.purpose.length > 0 && this.state.purpose.map((selectedPurpose, index) => (\n <p key={index} onClick={() => {\n const updatedPurpose = this.state.purpose.filter(s => s !== selectedPurpose);\n this.handleFilterChange('purpose', updatedPurpose);\n }} className='educatorfilterSelectedVal'>{selectedPurpose} X</p>\n ))}\n\n {this.state.clinical_focus.length > 0 && this.state.clinical_focus.map((selectedClinicalFocus, index) => (\n <p key={index} onClick={() => {\n const updatedClinicalFocus = this.state.clinical_focus.filter(cf => cf !== selectedClinicalFocus);\n this.handleFilterChange('clinical_focus', updatedClinicalFocus);\n }} className='educatorfilterSelectedVal'>{selectedClinicalFocus} X</p>\n ))}\n </div>\n </div>\n )\n }\n }\n\n getCorrectResponses(row) {\n if (row.accuracy_fraction.length === 0) {\n return \"N/A\"\n } else if (this.props.multiple_cohorts) {\n return row.accuracy_fraction\n } else {\n return `${row.accuracy_percentage}%`\n }\n }\n\n getClcStyle(percentage) {\n if (percentage <= 0) {\n return { display: 'none' }\n }\n return { width: `${percentage}%` }\n }\n\n setFilters(currentFilterCol, value) {\n var filters = {}\n filters[currentFilterCol] = value\n if(this.cohortFilters.includes(currentFilterCol)) {\n let ids = [];\n const { system, clinical_focus } = this.state;\n switch (currentFilterCol) {\n case 'assessment_date':\n ids = this.props.cohorts.filter((cohort) => {\n const dateMatch = value.length === 0 || value.includes(cohort.date_range);\n const courseNameMatch = this.state.discipline.length === 0 ||\n this.state.discipline.some(d => cohort.course_name.replace('Aquifer ', '').includes(d.trim()));\n const purposeMatch = this.state.purpose.length === 0 ||\n this.state.purpose.some(p => cohort.purpose.includes(p));\n return dateMatch && courseNameMatch && purposeMatch;\n }).map(c => c.delivery_id);\n break;\n case 'discipline':\n ids = this.props.cohorts.filter((cohort) => {\n const dateMatch = this.state.assessment_date.length === 0 || this.state.assessment_date.some(a => cohort.date_range.includes(a));\n const courseNameMatch = value.length === 0 || value.includes(cohort.course_name.replace('Aquifer ', ''));\n const purposeMatch = this.state.purpose.length === 0 ||\n this.state.purpose.some(p => cohort.purpose.includes(p));\n return dateMatch && courseNameMatch && purposeMatch;\n }).map(c => c.delivery_id);\n break;\n case 'purpose':\n ids = this.props.cohorts.filter((cohort) => {\n const dateMatch = this.state.assessment_date.length === 0 || this.state.assessment_date.some(a => cohort.date_range.includes(a));\n const courseNameMatch = this.state.discipline.length === 0 ||\n this.state.discipline.some(d => cohort.course_name.replace('Aquifer ', '').includes(d.trim()));\n const purposeMatch = value.length === 0 || value.includes(cohort.purpose);\n return dateMatch && courseNameMatch && purposeMatch;\n }).map(c => c.delivery_id);\n break;\n }\n this.getFilteredDetails(ids).then((data) => {\n filters.cohortFiltered = data.details\n filters.filteredData = filters.cohortFiltered.filter((item) => (system.length === 0 || system.some(sys => item.system?.includes(sys))) &&\n ((item.learning_objective || '').toLowerCase().indexOf(this.state.search) > -1 ||\n (item.teaching_point_url_name || '').toLowerCase().indexOf(this.state.search) > -1 ||\n (item.case || '').toLowerCase().indexOf(this.state.search) > -1) &&\n (clinical_focus.length === 0 || clinical_focus.some(cf => item.clinical_focus?.includes(cf)))\n )\n this.setState(filters)\n })\n }\n\n return filters\n }\n\n getTeachingPointModal(row) {\n if (row.teaching_point_url_name != 'N/A') {\n return <TeachingPointModal\n title={row.teaching_point_url_name}\n docType=\"ReusableObject\"\n documentId={row.teaching_point?.id}\n versionId={row.teaching_point_publish_variant_id}\n currentUser={this.props.user}\n isAdmin={this.props.admin}\n currentRoleName=\"Student\"\n permissions={{}}\n displayUid={row.teaching_point?.uid}\n />\n }\n }\n\n render() {\n\n return <>\n <div className=\"detailsSection\">\n <div className=\"col-md-12\">\n <div className=\"sectionTitleRow\">\n <div className=\"educator-detail-heading\">\n <h2 className=\"reportTopSectionTitle\">{this.props.multiple_cohorts ? 'Item Detail' : `Item Detail - ${this.props.students_count} students`} </h2>\n <div className=\"info-bubble\">\n <span className=\"tooltip-box small after above-center tab-2\">\n % correct responses and CLC breakdown are based on submitted assessments only. The item details shown in the table below reflect the students who submitted responses for that item only.\n {this.props.multiple_cohorts ? \" As such, the denominators may be different from the number of students in a given cohort.\" : \"\"}\n </span>\n </div>\n </div>\n <div className=\"form-group\" style={{width: 400}}>\n <label className=\"bottomSectionGraphLegendText\">Search</label>\n <input type=\"text\" name=\"search\" placeholder='Search' className=\"form-control\" onChange={e => this.setState({ search: e.target.value }, this.applyFilters)}/>\n </div>\n </div>\n\n {this.filtersRow()}\n\n <table className=\"detailsTable\">\n <thead>\n <tr>\n <th className=\"bottomSectionGraphLegendText\">Learning Objective</th>\n <th className=\"bottomSectionGraphLegendText\">Teaching Point</th>\n <th\n className='bottomSectionGraphLegendText tableSortCol'\n onClick={() => {\n this.setState({\n sortCol: 'clinical_focus',\n sortDir: this.state.sortDir == 'asc' ? 'desc' : 'asc',\n filteredData: this.sortDeliveries('clinical_focus', this.state.sortDir == 'asc' ? 'desc' : 'asc')\n })\n }}\n >\n <div>Clinical Focus <img src={this.sortImage('clinical_focus')} alt=\"case name\" className=\"icon-case_name\" /></div>\n </th>\n <th\n className='bottomSectionGraphLegendText tableSortCol'\n onClick={() => this.setState({\n sortCol: 'system',\n sortDir: this.state.sortDir == 'asc' ? 'desc' : 'asc',\n filteredData: this.sortDeliveries('system', this.state.sortDir == 'asc' ? 'desc' : 'asc')\n })\n }\n >\n <div>System <img src={this.sortImage('system')} alt=\"case name\" className=\"icon-case_name\" /></div>\n </th>\n <th className='bottomSectionGraphLegendText'>{this.props.multiple_cohorts ? \"Correct Responses\" : \"% Correct Responses\"}</th>\n <th\n className='bottomSectionGraphLegendText tableSortCol clc'\n onClick={() => this.setState({\n sortCol: 'clc',\n sortDir: this.state.sortDir == 'asc' ? 'desc' : 'asc',\n filteredData: this.sortDeliveries('clc', this.state.sortDir == 'asc' ? 'desc' : 'asc')\n })\n }\n >\n <div>Clc Breakdown <img src={this.sortImage('clc')} alt=\"case name\" className=\"icon-case_name\" /></div>\n </th>\n <th className=\"bottomSectionGraphLegendText\">Aquifer Case</th>\n <th className=\"bottomSectionGraphLegendText\">% of Students Completing Case</th>\n </tr>\n </thead>\n <tbody>\n {this.state.filteredData.map((row, i) => {\n return <tr key={`cohortProgressTable${i}`}>\n <td>{row.learning_objective}</td>\n <td>\n {this.getTeachingPointModal(row)}\n </td>\n <td><p className=\"metadata-box clinical-focus\">{row.clinical_focus || 'N/A'}</p></td>\n <td><p className=\"metadata-box system\" style={{ wordBreak: \"break-word\", overflowWrap: \"break-word\" }}>{row.system || 'N/A'}</p></td>\n <td className=\"centerColumn\">{this.getCorrectResponses(row)}</td>\n <td>\n <div className=\"row graphSectionRow\">\n <div className=\"overallPerformancesBar excel\" style={this.getClcStyle(row.excel_fraction)}><p className=\"bottomGraphIndicatorBarPercentText\">{Math.round(row.excel_fraction)}%</p></div>\n <div className=\"overallPerformancesBar competent\" style={this.getClcStyle(row.competent_fraction)}><p className=\"bottomGraphIndicatorBarPercentText\">{Math.round(row.competent_fraction)}%</p></div>\n <div className=\"overallPerformancesBar unsure\" style={this.getClcStyle(row.unsure_fraction)}><p className=\"bottomGraphIndicatorBarPercentText\">{Math.round(row.unsure_fraction)}%</p></div>\n <div className=\"overallPerformancesBar novice\" style={this.getClcStyle(row.novice_fraction)}><p className=\"bottomGraphIndicatorBarPercentText\">{Math.round(row.novice_fraction)}%</p></div>\n <div className=\"overallPerformancesBar warning\" style={this.getClcStyle(row.warning_fraction)}><p className=\"bottomGraphIndicatorBarPercentText\">{Math.round(row.warning_fraction)}%</p></div>\n </div>\n </td>\n <td style={{color: \"#110EBF\"}}>{row.document_set_document_relation_path != 'N/A' ? <a style={{color: '#1b5599', textDecoration: 'underline'}} target=\"_blank\" href={row.document_set_document_relation_path}>{row.case}</a> : 'N/A'}</td>\n <td className=\"centerColumn\">{Math.round(row.case_completed_fraction)}%</td>\n </tr>\n })}\n </tbody>\n </table>\n </div>\n </div>\n </>\n }\n}\n\nexport default CohortProgressesDeliveriesTable;\n","// src/components/ClcBar.js\nimport React from \"react\";\n\nconst ClcBar = ({ data }) => {\n const getClcStyle = (percentage) => {\n if (percentage <= 0) {\n return { display: \"none\" };\n }\n return { width: `${percentage}%` };\n };\n\n return (\n <div className=\"row graphSectionRow clc-bar\">\n <div\n className=\"overallPerformancesBar excel\"\n style={getClcStyle(data.cognitive_competence_score_excel)}\n ></div>\n <div\n className=\"overallPerformancesBar competent\"\n style={getClcStyle(data.cognitive_competence_score_competent)}\n ></div>\n <div\n className=\"overallPerformancesBar unsure\"\n style={getClcStyle(data.cognitive_competence_score_unsure)}\n ></div>\n <div\n className=\"overallPerformancesBar novice\"\n style={getClcStyle(data.cognitive_competence_score_novice)}\n ></div>\n <div\n className=\"overallPerformancesBar warning\"\n style={getClcStyle(data.cognitive_competence_score_warning)}\n ></div>\n </div>\n );\n};\n\nexport default ClcBar;\n","import React from \"react\";\nimport ClcBar from \"./clc_bar\";\nimport { sortImage, SortingCurricularSummary } from \"./sorting_curricular_summary\";\nimport Ibubble from \"./ibubble\";\n\nexport default class CurricularSummaryDiscipline extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n collapsed: this.props.isDefaultCollapse,\n filteredData: this.props.rows.questions_count_by_clinical_disciplines,\n sortCol: \"number_of_items\",\n sortDir: \"asc\"\n };\n }\n\n componentDidMount() {\n window.addEventListener(\"resize\", this.updateCollapsedState);\n }\n\n componentWillUnmount() {\n window.removeEventListener(\"resize\", this.updateCollapsedState);\n }\n\n updateCollapsedState = () => {\n const isSmallScreen = window.innerWidth < 768;\n this.setState({ collapsed: !isSmallScreen });\n };\n\n handleSort = (sortCol, sortDir) => {\n const isClc = sortCol === 'ccc_hash';\n this.setState({\n sortCol,\n sortDir,\n filteredData: SortingCurricularSummary(\n this.state.filteredData,\n sortCol,\n sortDir,\n isClc,\n ),\n });\n };\n\n getCorrectResponses(row) {\n if (row.accuracy_fraction === 0) {\n return \"N/A\"\n } else {\n return `${row.accuracy_percentage}%`\n }\n }\n\n render() {\n return (\n <>\n <div className=\"performanceQuizCard focusArea\">\n <div className=\"performanceQuizCardTitleRow filter-label-focus\" tabIndex=\"0\"\n onClick={() => {\n this.setState({ collapsed: !this.state.collapsed });\n }}\n onKeyPress={(event) => {\n if (event.key === 'Enter') {\n this.setState({ collapsed: !this.state.collapsed });\n }\n }}\n >\n <div\n className={\n this.state.collapsed\n ? \"saqResultsCardOpen\"\n : \"saqResultsCardClosed\"\n }\n ></div>\n <h2 className=\"saqResultsCardTitle1\">CLINICAL DISCIPLINE</h2>\n </div>\n <table\n className=\"performanceQuizCardTable performanceSummary performancePointer\"\n style={{ display: this.state.collapsed ? \"none\" : \"table\" }}\n >\n <thead>\n <tr>\n <th width=\"25%\">CLINICAL DISCIPLINE</th>\n <th width=\"15%\">\n <div\n onClick={() => {\n const newSortDir =\n this.state.sortCol === \"completed_questions\" && this.state.sortDir === \"asc\"\n ? \"desc\"\n : \"asc\";\n this.handleSort(\"completed_questions\", newSortDir);\n }}\n >\n QUESTIONS COMPLETED \n {sortImage(\n this.state.sortCol,\n \"completed_questions\",\n this.handleSort\n )}\n </div>\n </th>\n <th width=\"15%\">\n <div\n onClick={() => {\n const newSortDir =\n this.state.sortCol === \"accuracy_percentage\" && this.state.sortDir === \"asc\"\n ? \"desc\"\n : \"asc\";\n this.handleSort(\"accuracy_percentage\", newSortDir);\n }}\n >\n AVG. ACCURACY \n {sortImage(\n this.state.sortCol,\n \"accuracy_percentage\",\n this.handleSort\n )}\n </div>\n </th>\n <th width=\"25%\">\n <div className=\"position-relative d-flex align-items-center gap-1\" \n onClick={() => {\n const newSortDir =\n this.state.sortCol === \"ccc_hash\" && this.state.sortDir === \"asc\"\n ? \"desc\"\n : \"asc\";\n this.handleSort(\"ccc_hash\", newSortDir);\n }}\n >\n <div>\n CLINICAL LEARNING CALIBRATION \n {sortImage(\n this.state.sortCol,\n \"ccc_hash\",\n this.handleSort\n )}\n </div>\n <sup className=\"info-bubble learning-bubble\">\n <span className=\"tooltip-box\">\n <Ibubble />\n </span>\n </sup>\n </div>\n </th>\n <th width=\"20%\">\n <div\n onClick={() => {\n const newSortDir =\n this.state.sortCol === \"students_assessed\" && this.state.sortDir === \"asc\"\n ? \"desc\"\n : \"asc\";\n this.handleSort(\"students_assessed\", newSortDir);\n }}\n >\n STUDENT ASSESSED \n {sortImage(\n this.state.sortCol,\n \"students_assessed\",\n this.handleSort\n )}\n </div>\n </th>\n </tr>\n </thead>\n <tbody>\n {this.state.filteredData.map((row, i) => (\n <tr key={`curricularSummaryTable${i}`}>\n <td width=\"25%\">\n {row.name || 'N/A'}\n </td>\n <td width=\"15%\">\n {row.completed_questions}\n </td>\n <td width=\"15%\">{this.getCorrectResponses(row)}</td>\n <td width=\"25%\" style={{ textAlign: '-webkit-center' }}>\n <ClcBar data={row.ccc_hash} />\n </td>\n <td width=\"20%\">\n {row.students_assessed}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </>\n );\n }\n}\n","import React from \"react\";\nimport ClcBar from \"./clc_bar\";\nimport { sortImage, SortingCurricularSummary } from \"./sorting_curricular_summary\";\nimport Ibubble from \"./ibubble\";\n\nexport default class CurricularSummaryFocus extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n collapsed: this.props.isDefaultCollapse,\n filteredData: this.props.rows.questions_count_by_clinical_focuses,\n sortCol: \"number_of_items\",\n sortDir: \"asc\"\n };\n }\n\n componentDidMount() {\n window.addEventListener(\"resize\", this.updateCollapsedState);\n }\n\n componentWillUnmount() {\n window.removeEventListener(\"resize\", this.updateCollapsedState);\n }\n\n updateCollapsedState = () => {\n const isSmallScreen = window.innerWidth < 768;\n this.setState({ collapsed: isSmallScreen });\n };\n\n handleSort = (sortCol, sortDir) => {\n const isClc = sortCol === 'ccc_hash';\n this.setState({\n sortCol,\n sortDir,\n filteredData: SortingCurricularSummary(\n this.state.filteredData,\n sortCol,\n sortDir,\n isClc,\n ),\n });\n };\n\n getCorrectResponses(row) {\n if (row.accuracy_fraction === 0) {\n return \"N/A\"\n } else {\n return `${row.accuracy_percentage}%`\n }\n }\n\n render() {\n return (\n <>\n <div className=\"performanceQuizCard focusArea\">\n <div className=\"performanceQuizCardTitleRow filter-label-focus\" tabIndex=\"0\"\n onClick={() => {\n this.setState({ collapsed: !this.state.collapsed });\n }}\n onKeyPress={(event) => {\n if (event.key === 'Enter') {\n this.setState({ collapsed: !this.state.collapsed });\n }\n }}\n >\n <div\n className={\n this.state.collapsed\n ? \"saqResultsCardOpen\"\n : \"saqResultsCardClosed\"\n }\n ></div>\n <h2 className=\"saqResultsCardTitle1\">CLINICAL FOCUS</h2>\n </div>\n <table\n className=\"performanceQuizCardTable performanceSummary performancePointer\"\n style={{ display: this.state.collapsed ? \"none\" : \"table\" }}\n >\n <thead>\n <tr>\n <th width=\"25%\">CLINICAL FOCUS</th>\n <th width=\"15%\">\n <div \n onClick={() => {\n const newSortDir =\n this.state.sortCol === \"completed_questions\" && this.state.sortDir === \"asc\"\n ? \"desc\"\n : \"asc\";\n this.handleSort(\"completed_questions\", newSortDir);\n }}\n >\n QUESTIONS COMPLETED \n {sortImage(\n this.state.sortCol,\n \"completed_questions\",\n this.handleSort\n )}\n </div>\n </th>\n <th width=\"15%\">\n <div \n onClick={() => {\n const newSortDir =\n this.state.sortCol === \"accuracy_percentage\" && this.state.sortDir === \"asc\"\n ? \"desc\"\n : \"asc\";\n this.handleSort(\"accuracy_percentage\", newSortDir);\n }}\n >\n AVG. ACCURACY \n {sortImage(\n this.state.sortCol,\n \"accuracy_percentage\",\n this.handleSort\n )}\n </div>\n </th>\n <th width=\"25%\">\n <div className=\"position-relative d-flex align-items-center gap-1\" \n onClick={() => {\n const newSortDir =\n this.state.sortCol === \"ccc_hash\" && this.state.sortDir === \"asc\"\n ? \"desc\"\n : \"asc\";\n this.handleSort(\"ccc_hash\", newSortDir);\n }}\n >\n <div>\n CLINICAL LEARNING CALIBRATION \n {sortImage(\n this.state.sortCol,\n \"ccc_hash\",\n this.handleSort\n )}\n </div>\n <sup className=\"info-bubble learning-bubble\">\n <span className=\"tooltip-box\">\n <Ibubble />\n </span>\n </sup>\n </div>\n </th>\n <th width=\"20%\">\n <div \n onClick={() => {\n const newSortDir =\n this.state.sortCol === \"students_assessed\" && this.state.sortDir === \"asc\"\n ? \"desc\"\n : \"asc\";\n this.handleSort(\"students_assessed\", newSortDir);\n }}\n >\n STUDENT ASSESSED \n {sortImage(this.state.sortCol, \"students_assessed\", this.handleSort)}\n </div>\n </th>\n </tr>\n </thead>\n <tbody>\n {this.state.filteredData.map((row, i) => (\n <tr key={`curricularSummaryTable${i}`}>\n <td width=\"25%\">\n {row.name || 'N/A'}\n </td>\n <td width=\"15%\">\n {row.completed_questions}\n </td>\n <td width=\"15%\">{this.getCorrectResponses(row)}</td>\n <td width=\"25%\" style={{ textAlign: '-webkit-center' }}>\n <ClcBar data={row.ccc_hash} />\n </td>\n <td width=\"20%\">\n {row.students_assessed}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </>\n );\n }\n}\n","import React from \"react\";\nimport ClcBar from \"./clc_bar\";\nimport { sortImage, SortingCurricularSummary } from \"./sorting_curricular_summary\";\nimport Ibubble from \"./ibubble\";\n\nexport default class CurricularSummarySystem extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n collapsed: this.props.isDefaultCollapse,\n filteredData: this.props.rows.questions_count_by_systems,\n sortCol: \"number_of_items\",\n sortDir: \"asc\"\n };\n }\n\n componentDidMount() {\n window.addEventListener(\"resize\", this.updateCollapsedState);\n }\n\n componentWillUnmount() {\n window.removeEventListener(\"resize\", this.updateCollapsedState);\n }\n\n updateCollapsedState = () => {\n const isSmallScreen = window.innerWidth < 768;\n this.setState({ collapsed: !isSmallScreen });\n };\n\n handleSort = (sortCol, sortDir) => {\n const isClc = sortCol === 'ccc_hash';\n this.setState({\n sortCol,\n sortDir,\n filteredData: SortingCurricularSummary(\n this.state.filteredData,\n sortCol,\n sortDir,\n isClc,\n ),\n });\n };\n\n getCorrectResponses(row) {\n if (row.accuracy_fraction === 0) {\n return \"N/A\"\n } else {\n return `${row.accuracy_percentage}%`\n }\n }\n\n render() {\n return (\n <>\n <div className=\"performanceQuizCard focusArea\">\n <div className=\"performanceQuizCardTitleRow filter-label-focus\" tabIndex=\"0\"\n onClick={() => {\n this.setState({ collapsed: !this.state.collapsed });\n }}\n onKeyPress={(event) => {\n if (event.key === 'Enter') {\n this.setState({ collapsed: !this.state.collapsed });\n }\n }}\n >\n <div\n className={\n this.state.collapsed\n ? \"saqResultsCardOpen\"\n : \"saqResultsCardClosed\"\n }\n ></div>\n <h2 className=\"saqResultsCardTitle1\">SYSTEM</h2>\n </div>\n <table\n className=\"performanceQuizCardTable performanceSummary performancePointer\"\n style={{ display: this.state.collapsed ? \"none\" : \"table\" }}\n >\n <thead>\n <tr>\n <th width=\"25%\">SYSTEM</th>\n <th width=\"15%\">\n <div\n onClick={() => {\n const newSortDir =\n this.state.sortCol === \"completed_questions\" && this.state.sortDir === \"asc\"\n ? \"desc\"\n : \"asc\";\n this.handleSort(\"completed_questions\", newSortDir);\n }}\n >\n QUESTIONS COMPLETED \n {sortImage(\n this.state.sortCol,\n \"completed_questions\",\n this.handleSort\n )}\n </div>\n </th>\n <th width=\"15%\">\n <div\n onClick={() => {\n const newSortDir =\n this.state.sortCol === \"accuracy_percentage\" && this.state.sortDir === \"asc\"\n ? \"desc\"\n : \"asc\";\n this.handleSort(\"accuracy_percentage\", newSortDir);\n }}\n >\n AVG. ACCURACY \n {sortImage(\n this.state.sortCol,\n \"accuracy_percentage\",\n this.handleSort\n )}\n </div>\n </th>\n <th width=\"25%\">\n <div className=\"position-relative d-flex align-items-center gap-1\" \n onClick={() => {\n const newSortDir =\n this.state.sortCol === \"ccc_hash\" && this.state.sortDir === \"asc\"\n ? \"desc\"\n : \"asc\";\n this.handleSort(\"ccc_hash\", newSortDir);\n }}\n >\n <div>\n CLINICAL LEARNING CALIBRATION \n {sortImage(\n this.state.sortCol,\n \"ccc_hash\",\n this.handleSort\n )}\n </div>\n <sup className=\"info-bubble learning-bubble\">\n <span className=\"tooltip-box\">\n <Ibubble />\n </span>\n </sup>\n </div>\n </th>\n <th width=\"20%\">\n <div\n onClick={() => {\n const newSortDir =\n this.state.sortCol === \"students_assessed\" && this.state.sortDir === \"asc\"\n ? \"desc\"\n : \"asc\";\n this.handleSort(\"students_assessed\", newSortDir);\n }}\n >\n STUDENT ASSESSED \n {sortImage(\n this.state.sortCol,\n \"students_assessed\",\n this.handleSort\n )}\n </div>\n </th>\n </tr>\n </thead>\n <tbody>\n {this.state.filteredData.map((row, i) => (\n <tr key={`curricularSummaryTable${i}`}>\n <td width=\"25%\">\n {row.name || 'N/A'}\n </td>\n <td width=\"15%\">\n {row.completed_questions}\n </td>\n <td width=\"15%\">{this.getCorrectResponses(row)}</td>\n <td width=\"25%\" style={{ textAlign: '-webkit-center' }}>\n <ClcBar data={row.ccc_hash} />\n </td>\n <td width=\"20%\">\n {row.students_assessed}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </>\n );\n }\n}\n","import React from \"react\";\n\nconst categories = [\n { className: \"excelBox\", title: \"Excel\", description: \"Certain, correct, & fast\" },\n { className: \"competentBox\", title: \"COMPETENT\", description: \"Certain & correct OR very certain & correct with hesitation\" },\n { className: \"unsureBox\", title: \"UNSURE\", description: \"Uncertain & correct OR certain & correct with hesitation\" },\n { className: \"noviceBox\", title: \"Novice\", description: \"Uncertain & Wrong\" },\n { className: \"warningBox\", title: \"WARNING\", description: \"Certain & Wrong\" },\n];\n\nconst Ibubble = () => {\n return (\n <div className=\"curricular-performance-legend\">\n {categories.map(({ className, title, description }) => (\n <div className=\"indicatorBox\" key={title}>\n <div className={`ColorBox ${className}`}></div>\n <div className=\"pl10\">\n <p className=\"label GraphLegendText legendTitle\">{title}</p>\n <p className=\"bottomSectionGraphLegendText\">{description}</p>\n </div>\n </div>\n ))}\n </div>\n );\n};\n\nexport default Ibubble;\n","import React from 'react';\nimport TableDownArrowImage from \"images/table-down_arrow.png\";\nimport TableUpArrowImage from \"images/table-up_arrow.png\";\n\nexport const SortingCurricularSummary = (data, sortCol, sortDir, isClc) =>{\n data.sort((a, b) => {\n let comparison = 0;\n let fa, fb\n if(isClc){\n fa = a[sortCol].cognitive_competence_score_excel;\n fb = b[sortCol].cognitive_competence_score_excel;\n }else {\n fa = a[sortCol];\n fb = b[sortCol];\n }\n if (fa < fb) {\n comparison = -1;\n } else if (fa > fb) {\n comparison = 1;\n }\n return sortDir === 'asc' ? comparison : -comparison;\n \n});\n return data\n}\n\nexport const sortImage = (currentSortCol, sortCol, onSort) => {\n const handleSortAsc = () => onSort(sortCol, 'asc');\n const handleSortDesc = () => onSort(sortCol, 'desc');\n\n const handleTouchStartAsc = (event) => {\n handleSortAsc();\n }\n\n const handleTouchStartDesc = (event) => {\n handleSortDesc();\n }\n\n return (\n <span className=\"sort-arrows\">\n <span className='sort-up-arrow filter-label-focus' onClick={handleSortDesc} onTouchStart={handleTouchStartDesc} tabIndex=\"0\" onKeyPress={(event) => { if(event.key === 'Enter') handleSortDesc(); }}></span>\n <span className='sort-bottom-arrow filter-label-focus' onClick={handleSortAsc} onTouchStart={handleTouchStartAsc} tabIndex=\"0\" onKeyPress={(event) => { if(event.key === 'Enter') handleSortAsc(); }}></span>\n </span>\n );\n};\n","import React from 'react';\n\nclass CustomMultiSelect extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isOpen: false, // Control dropdown visibility\n };\n this.dropdownRef = React.createRef(); // Ref for the dropdown\n }\n\n componentDidMount() {\n document.addEventListener('mousedown', this.handleClickOutside);\n }\n\n componentWillUnmount() {\n document.removeEventListener('mousedown', this.handleClickOutside);\n }\n\n handleClickOutside = (event) => {\n if (this.dropdownRef.current && !this.dropdownRef.current.contains(event.target)) {\n this.setState({ isOpen: false }); // Close dropdown if click is outside\n }\n };\n\n toggleDropdown = () => {\n this.setState(prevState => ({\n isOpen: !prevState.isOpen\n }));\n };\n\n handleOptionChange = (optionValue) => {\n const { selectedOptions } = this.props;\n const isSelected = selectedOptions.includes(optionValue);\n\n const updatedOptions = isSelected\n ? selectedOptions.filter(option => option !== optionValue) // Deselect if already selected\n : [...selectedOptions, optionValue]; // Select if not selected\n\n this.props.onChange(updatedOptions); // Trigger parent's onChange for external handling\n };\n\n\n render() {\n const { options, placeholder, selectedOptions, dropdownArrow } = this.props;\n const {isOpen } = this.state;\n\n return (\n <div className=\"custom-multi-select\" ref={this.dropdownRef} style={{ position: 'relative' }}>\n {/* Dropdown-like div styled like a select element */}\n <button className=\"form-control filterSelect selection-arrow\" onClick={this.toggleDropdown} style={{ cursor: 'pointer' }} aria-label={`Select ${placeholder}`}>\n {placeholder}\n {dropdownArrow && <img src={dropdownArrow} alt=\"Dropdown Arrow\" className=\"dropdown-arrow\" />}\n </button>\n\n {/* Dropdown content with options */}\n {isOpen && (\n <div className=\"dropdown-menu\" style={{ display: 'block' }}>\n {options.map(option => (\n <li\n key={option}\n className={selectedOptions.includes(option) ? 'selected' : ''}\n onClick={() => this.handleOptionChange(option)}\n >\n {option}\n </li>\n ))}\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default CustomMultiSelect;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport GenSortTable from 'Gen/SortTable/component'\n\nimport TableDownArrowImage from \"images/table-down_arrow.png\";\nimport TableUpArrowImage from \"images/table-up_arrow.png\";\nimport CustomMultiSelect from './CustomMultiSelect';\n\nclass StudentLearningProgressTable extends React.Component{\n constructor(props) {\n super(props);\n this.state = {\n search: '',\n filteredData: this.props.rows,\n sortCol: 'status',\n sortDir: 'asc',\n assessment_type: [],\n early_assessment_date: [],\n late_assessment_date: [],\n };\n }\n\n sortProgresses = (sortCol, sortDir) =>{\n var data = this.state.filteredData\n if(sortCol === \"progress_indicator_text_late\" || sortCol === \"progress_indicator_text_early\"){\n data = data.filter(item => item[sortCol] !== 'N/A')\n const order = ['On Track', 'Below Target', 'Off Track'];\n if(sortDir===\"asc\"){\n data.sort((a, b) => {\n const aIndex = order.indexOf(a[sortCol]);\n const bIndex = order.indexOf(b[sortCol]);\n return aIndex - bIndex;\n });\n }else{\n data.sort((a, b) => {\n const aIndex = order.indexOf(a[sortCol]);\n const bIndex = order.indexOf(b[sortCol]);\n return bIndex - aIndex;\n });\n }\n data = data.concat(this.state.filteredData.filter(item => item[sortCol] === 'N/A'))\n }else {\n data.sort((a, b) => {\n let fa = a[sortCol].toLowerCase(),\n fb = b[sortCol].toLowerCase();\n if (fa < fb) {\n return sortDir == 'asc' ? -1 : 1;\n }\n if (fa > fb) {\n return sortDir == 'asc' ? 1 : -11;\n }\n return 0;\n });\n }\n return data\n }\n\n sortImage = (sortCol)=>{\n return this.state.sortCol == sortCol ? this.state.sortDir == 'asc' ? TableDownArrowImage : TableUpArrowImage : TableDownArrowImage\n }\n\n applyFilters = () => {\n const { early_assessment_date, late_assessment_date ,assessment_type, search } = this.state;\n const filteredData = this.props.rows.filter((item) => {\n const matchesEarlyAssessmentDate = early_assessment_date.length === 0 || early_assessment_date.some(date => item.date_range_for_early_assessment?.includes(date));\n const matchesLateAssessmentDate = late_assessment_date.length === 0 || late_assessment_date.some(date => item.date_range_for_late_assessment?.includes(date));\n const matchesAssessmentType = assessment_type.length === 0 || assessment_type.some(type => item.assessment_type?.includes(type));\n const matchesSearch = item.student_name.toLowerCase().includes(search.toLowerCase()) ||\n item.status.toLowerCase().includes(search.toLowerCase()) ||\n (this.props.report_type == 'multi-cohort' &&\n (\n (item.assessment_type?.toLowerCase() || '').includes(search.toLowerCase()) ||\n (item.status_for_early_assessment?.toLowerCase() || '').includes(search.toLowerCase()) ||\n (item.status_for_late_assessment?.toLowerCase() || '').includes(search.toLowerCase())\n )\n );\n\n return matchesEarlyAssessmentDate && matchesLateAssessmentDate && matchesAssessmentType && matchesSearch;\n });\n this.setState({ filteredData });\n }\n\n handleFilterChange = (filterName, values) => {\n this.setState({ [filterName]: values }, this.applyFilters);\n }\n\n filtersRow() {\n if (this.props.multiple_cohorts) {\n return (\n <div>\n <div className=\"filtersRow\">\n <div className=\"form-inline\">\n <CustomMultiSelect\n options={this.props.early_assessment_date_options}\n placeholder=\"Early Assessment Date\"\n selectedOptions={this.state.early_assessment_date}\n onChange={(selectedOptions) => this.handleFilterChange('early_assessment_date', selectedOptions)}\n />\n\n <CustomMultiSelect\n options={this.props.late_assessment_date_options}\n placeholder=\"Late Assessment Date\"\n selectedOptions={this.state.late_assessment_date}\n onChange={(selectedOptions) => this.handleFilterChange('late_assessment_date', selectedOptions)}\n />\n\n <CustomMultiSelect\n options={this.props.discipline_options}\n placeholder=\"Discipline\"\n selectedOptions={this.state.assessment_type}\n onChange={(selectedOptions) => this.handleFilterChange('assessment_type', selectedOptions)}\n />\n </div>\n </div>\n\n <div className='filtersRow' style={{ justifyContent: 'center', marginBottom: '-10px' }}>\n {this.state.assessment_type.length > 0 && this.state.assessment_type.map((selectedAssessmentType, index) => (\n <p key={index} onClick={() => {\n const updatedAssessmentType = this.state.assessment_type.filter(at => at !== selectedAssessmentType);\n this.handleFilterChange('assessment_type', updatedAssessmentType);\n }} className='filterSelectedVal'>{selectedAssessmentType} X</p>\n ))}\n\n {this.state.early_assessment_date.length > 0 && this.state.early_assessment_date.map((selectedEarlyAssessmentDate, index) => (\n <p key={index} onClick={() => {\n const updatedEarlyAssessmentDate = this.state.early_assessment_date.filter(adt => adt !== selectedEarlyAssessmentDate);\n this.handleFilterChange('early_assessment_date', updatedEarlyAssessmentDate);\n }} className='filterSelectedVal'>{selectedEarlyAssessmentDate} X</p>\n ))}\n\n {this.state.late_assessment_date.length > 0 && this.state.late_assessment_date.map((selectedLateAssessmentDate, index) => (\n <p key={index} onClick={() => {\n const updatedLateAssessmentDate = this.state.late_assessment_date.filter(ad => ad !== selectedLateAssessmentDate);\n this.handleFilterChange('late_assessment_date', updatedLateAssessmentDate);\n }} className='filterSelectedVal'>{selectedLateAssessmentDate} X</p>\n ))}\n </div>\n </div>\n )\n }\n }\n\n\n render() {\n return <>\n <div className=\"detailsSection\">\n <div className=\"col-md-12\">\n <div className=\"sectionTitleRow\">\n <div className=\"educator-detail-heading\">\n <h2 className=\"reportTopSectionTitle\">{this.props.purpose == \"Early\" ? \"Early -\" : \"\"} Individual Student Learning Progress</h2>\n {(() => {\n if (this.props.report_type == 'multi-cohort' || this.props.purpose == 'Late') {\n return (<div className=\"info-bubble\">\n <span className=\"tooltip-box small after above-center tab-1\">\n Assessment details are displayed in early/late pairs. If both early and late data are available, the LPI displays for both with all other fields displaying for the late assessment. If there is no late assessment, the late LPI displays as N/A and all other details are matched with the early assessment.\n </span>\n </div>)\n }\n })()}\n </div>\n <div className=\"form-group\" style={{width: '400px'}}>\n <input type=\"text\" name=\"search\" placeholder='Search:' className=\"form-control\" onChange={e => this.setState({ search: e.target.value }, this.applyFilters)} />\n </div>\n </div>\n\n {this.filtersRow()}\n {(() => {\n if (this.props.report_type == 'multi-cohort') {\n return (\n <table className=\"detailsTable\">\n <thead>\n <tr>\n <th\n key=\"student-name\"\n rowSpan=\"2\"\n className=\"bottomSectionGraphLegendText progress-table-head sortable\"\n width=\"250\"\n onClick={() => this.setState({\n sortCol: 'student_name',\n sortDir: this.state.sortDir == 'asc' ? 'desc' : 'asc',\n filteredData: this.sortProgresses('student_name', this.state.sortDir == 'asc' ? 'desc' : 'asc')\n })\n }\n >Student Name<img src={this.sortImage('student_name')} height='20' width='20' /></th>\n <th key=\"learning-progress\" colSpan=\"2\"\n className=\"bottomSectionGraphLegendText progress-table-head sortable\"\n width=\"300\"\n onClick={() => {\n var sortColName= 'progress_indicator_text_late'\n this.setState({\n sortCol: sortColName,\n sortDir: this.state.sortDir == 'asc' ? 'desc' : 'asc',\n filteredData: this.sortProgresses(sortColName, this.state.sortDir == 'asc' ? 'desc' : 'asc')\n })}\n }\n >\n Learning Progress\n <img src={this.sortImage('progress_indicator_text_late')} height='20' width='20' />\n <div className=\"info-bubble\" style={{marginLeft: '65%', marginTop: '-25px'}}>\n <span className=\"tooltip-box mid after\">\n Sort by late LPI\n </span>\n </div>\n </th>\n <th width=\"200\" key=\"assessment-types\" rowSpan=\"2\" className=\"bottomSectionGraphLegendText progress-table-head\">Assessment Type</th>\n <th key=\"exam-status\" colSpan=\"2\" className=\"bottomSectionGraphLegendText progress-table-head\" style={{textAlign: 'center' }} >Assessment Status</th>\n <th key=\"assessment-dates\" colSpan=\"2\" className=\"bottomSectionGraphLegendText progress-table-head\" style={{textAlign: 'center' }}>Assessment Dates</th>\n </tr>\n <tr>\n <th className=\"bottomSectionGraphLegendText small\" style={{textAlign: 'left', fontSize: '12px'}}>Early</th>\n <th className=\"bottomSectionGraphLegendText small\" style={{textAlign: 'left', fontSize: '12px'}}>Late</th>\n <th className=\"bottomSectionGraphLegendText small\" style={{textAlign: 'left', fontSize: '12px'}}>Early</th>\n <th className=\"bottomSectionGraphLegendText small\" style={{textAlign: 'left', fontSize: '12px'}}>Late</th>\n <th className=\"bottomSectionGraphLegendText small\" style={{textAlign: 'left', fontSize: '12px'}}>Early</th>\n <th className=\"bottomSectionGraphLegendText small\" style={{textAlign: 'left', fontSize: '12px'}}>Late</th>\n </tr>\n </thead>\n <tbody>\n {this.state.filteredData.map((row, i) => {\n return <tr key={`studentLearningProgressTable${i}`}>\n <td>\n {row.student_name}\n <div><a target=\"_blank\" href={row.student_case_log_path}>Student Case <br></br> Log Report</a></div>\n </td>\n <td>\n <div className={`progressIndicatorBox ${row.progress_indicator_color_early}`}><div className=\"progressIndicatorText\">{row.progress_indicator_text_early}</div></div>\n {row.early_rostering_progress_url && this.props.ind_result_faculty_feature && (\n <div className=\"mt-1\"><a target=\"_blank\" href={row.early_rostering_progress_url} onClick={() => analytics.track(\"student_detail_report_access\", { page: window.location.href, source: 'Calibrate Reports', student_name: row.student_full_name ,student_email: row.email, assessment_name: row.assessment_type, lpi: row.progress_indicator_text_early })}>Results</a></div>\n )}\n </td>\n <td>\n <div className={`progressIndicatorBox ${row.progress_indicator_color_late}`}><div className=\"progressIndicatorText\">{row.progress_indicator_text_late}</div></div>\n {row.late_rostering_progress_url && this.props.ind_result_faculty_feature && (\n <div className=\"mt-1\"><a target=\"_blank\" href={row.late_rostering_progress_url} onClick={() => analytics.track(\"student_detail_report_access\", { page: window.location.href, source: 'Calibrate Reports', student_name: row.student_full_name,student_email: row.email, assessment_name: row.assessment_type, lpi: row.progress_indicator_text_late })} >Results</a></div>\n )}\n </td>\n <td>{row.assessment_type}</td>\n <td>{row.status_for_early_assessment || \"N/A\"}</td>\n <td>{row.status_for_late_assessment || \"N/A\"}</td>\n <td>{row.date_range_for_early_assessment || \"N/A\"}</td>\n <td>{row.date_range_for_late_assessment || \"N/A\"}</td>\n </tr>\n })}\n </tbody>\n </table>\n );\n } else {\n return (\n <table className=\"detailsTable\">\n <thead>\n <tr>\n <th\n key=\"student-name\"\n rowSpan=\"2\"\n className=\"bottomSectionGraphLegendText progress-table-head sortable\"\n width=\"250\"\n onClick={() => this.setState({\n sortCol: 'student_name',\n sortDir: this.state.sortDir == 'asc' ? 'desc' : 'asc',\n filteredData: this.sortProgresses('student_name', this.state.sortDir == 'asc' ? 'desc' : 'asc')\n })\n }\n >Student Name<img src={this.sortImage('student_name')} height='20' width='20' /></th>\n <th key=\"learning-progress\" colSpan=\"2\"\n className=\"bottomSectionGraphLegendText progress-table-head sortable\"\n width=\"300\"\n onClick={() => {\n var sortColName= (this.props.purpose === 'Late') ? 'progress_indicator_text_late' : 'progress_indicator_text_early'\n this.setState({\n sortCol: sortColName,\n sortDir: this.state.sortDir == 'asc' ? 'desc' : 'asc',\n filteredData: this.sortProgresses(sortColName, this.state.sortDir == 'asc' ? 'desc' : 'asc')\n })}\n }\n >\n Learning Progress\n <img src={this.sortImage((this.props.purpose === 'Late') ? 'progress_indicator_text_late' : 'progress_indicator_text_early')} height='20' width='20' />\n {(() => {\n if (this.props.purpose === 'Late') {\n return (\n <div className=\"info-bubble\" style={{marginLeft: '65%', marginTop: '-25px'}}>\n <span className=\"tooltip-box mid after\">\n Sort by late LPI\n </span>\n </div>\n )\n }\n })()}\n\n </th>\n <th className=\"bottomSectionGraphLegendText progress-table-head\" rowSpan=\"2\" width=\"300\">\n <span>\n Case Completion\n </span>\n <div className=\"info-bubble\" style={{marginLeft: '140px', marginTop: '-22px'}}>\n <span className=\"tooltip-box mid after\" >\n Case completion for all {this.props.discipline} cases at the time of assessment\n </span>\n </div>\n </th>\n <th key=\"exam-status\" className=\"bottomSectionGraphLegendText progress-table-head\" rowSpan=\"2\">Exam Status</th>\n </tr>\n {(() => {\n if (this.props.purpose === 'Late') {\n return (\n <tr>\n <th className=\"bottomSectionGraphLegendText small\" style={{textAlign: 'left', fontSize: '12px'}}>Early</th>\n <th className=\"bottomSectionGraphLegendText small\" style={{textAlign: 'left', fontSize: '12px'}}>Late</th>\n </tr>\n )\n }\n })()}\n </thead>\n <tbody>\n {this.state.filteredData.map((row, i) => {\n return <tr key={`studentLearningProgressTable${i}`}>\n <td>{row.student_name}</td>\n <td>\n <div className={`progressIndicatorBox ${row.progress_indicator_color_early}`}><div className=\"progressIndicatorText\">{row.progress_indicator_text_early}</div></div>\n {row.early_rostering_progress_url && this.props.ind_result_faculty_feature && (\n <div className=\"mt-1\"><a target=\"_blank\" href={row.early_rostering_progress_url} onClick={() => analytics.track(\"student_detail_report_access\", { page: window.location.href, source: 'Calibrate Reports', student_name: row.student_full_name,student_email: row.email, assessment_name: row.assessment_type, lpi: row.progress_indicator_text_early })}>Results</a></div>\n )}\n </td>\n <td>\n <div className={`progressIndicatorBox ${row.progress_indicator_color_late}`}><div className=\"progressIndicatorText\">{row.progress_indicator_text_late}</div></div>\n {row.late_rostering_progress_url && this.props.ind_result_faculty_feature && (\n <div className=\"mt-1\"><a target=\"_blank\" href={row.late_rostering_progress_url} onClick={() => analytics.track(\"student_detail_report_access\", { page: window.location.href, source: 'Calibrate Reports', student_name: row.student_full_name,student_email: row.email, assessment_name: row.assessment_type, lpi: row.progress_indicator_text_late })}>Results</a></div>\n )}\n </td>\n <td>\n <div className=\"row\">\n <div className=\"col-md-12\">\n <span>{row.case_completion_fraction}</span>\n <div className=\"mt-1\"><a target=\"_blank\" href={row.student_case_log_path} >Student Case Log Report</a></div>\n </div>\n </div>\n </td>\n <td>{row.status}</td>\n </tr>\n })}\n </tbody>\n </table>\n );\n }\n })()}\n </div>\n </div>\n </>\n }\n}\n\nexport default StudentLearningProgressTable;\n","import * as React from 'react'\nimport ReactOnRails from 'react-on-rails'\nimport axios from 'axios'\n\nexport default class FileUploader extends React.Component {\n onSubmit(e) {\n e.preventDefault();\n\n // Chrome triggers the onChange when the file picker \"Cancel\" is clicked\n // after a file is uploaded. This prevents an error from being spawend.\n if (!e.target.files[0]) { return; }\n\n if (this.props.changeLoadingCountByValue) {\n this.props.changeLoadingCountByValue(1)\n }\n\n const formData = new FormData();\n formData.append(this.props.name, e.target.files[0]);\n Object.entries(this.props.extraData || {}).forEach(([key, val]) => formData.append(key, val))\n const firstFileName = e.target.files[0].name\n\n axios.post(\n this.props.fileUploadPath,\n formData,\n ReactOnRails.authenticityHeaders({\n 'Content-Type': 'multipart/form-data',\n 'Accept': 'application/json'\n })\n ).then(response => {\n if (this.props.onSuccess) {\n this.props.onSuccess(response.data)\n }\n\n if (this.props.changeLoadingCountByValue) {\n this.props.changeLoadingCountByValue(-1)\n }\n\n alert(`${firstFileName} uploaded!`)\n }).catch(error => {\n console.error(error)\n\n if (this.props.changeLoadingCountByValue) {\n this.props.changeLoadingCountByValue(-1)\n }\n\n alert(`There was an error encountered when uploading ${firstFileName}.`)\n throw(error)\n })\n }\n\n render() {\n return (\n <span>\n {(this.props.loadingCount && this.props.loadingCount > 0) ? ` (${this.props.loadingCount} Uploading)` : \"\"}\n <form>\n <input label='Upload File' type='file' onChange={this.onSubmit.bind(this)}/>\n </form>\n </span>\n )\n }\n}\n","import * as React from \"react\";\nimport * as classNames from 'classnames'\nimport GenLoadingSpinner from '../LoadingSpinner/component'\n\ninterface OnClickWrapperProps {\n confirmMessage?: string;\n confirmOKText?: string;\n confirmTitle?: string;\n disabled?: boolean;\n href?: string;\n onClick: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n}\n\nconst onClickWrapper = (props: OnClickWrapperProps) => {\n const {\n confirmTitle,\n confirmMessage,\n confirmOKText,\n disabled,\n onClick,\n href,\n } = props;\n\n return (e: React.MouseEvent<HTMLAnchorElement>) => {\n e.stopPropagation()\n e.preventDefault()\n\n if (disabled) {return null}\n\n const action = onClick ? () => onClick(e) : () => { if(href) { window.location.href = href; }}\n\n if (confirmTitle || confirmMessage) {\n window.customConfirmBox({\n message: confirmMessage,\n callback: action,\n title: confirmTitle,\n okLabel: confirmOKText,\n })\n } else {\n action()\n }\n }\n}\n\ninterface GenButtonProps {\n ariaLabel?: string;\n className?: string;\n confirmMessage?: string;\n confirmOKText?: string;\n confirmTitle?: string;\n disabled?: boolean;\n highlighted?: boolean;\n href?: string;\n loading?: boolean;\n loadingName?: string;\n name: React.ReactNode;\n onClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n small?: boolean;\n}\n\nconst GenButton = (props: GenButtonProps) => {\n const {\n className = \"\",\n highlighted = false,\n disabled = false,\n small = false,\n loading = false,\n loadingName,\n name,\n href,\n onClick,\n confirmOKText,\n confirmTitle,\n confirmMessage,\n ariaLabel,\n } = props;\n\n return (\n <div className={classNames('gen-button', className, { disabled, highlighted, small})} >\n { loading ? (\n <span className=\"button-name\">\n <GenLoadingSpinner/>\n {loadingName}\n </span>\n ) : (\n <a\n aria-label={ariaLabel}\n href=\"#\"\n onClick={onClickWrapper({ href, onClick, disabled, confirmTitle, confirmMessage, confirmOKText })}\n className=\"button-name\"\n >\n {name}\n </a>\n )}\n </div>\n )\n}\n\nexport default GenButton\n","import React, { useState } from 'react';\n\nconst CollapsibleListItem = ({ header, content }) => {\n const [collapsed, setCollapsed] = useState(false);\n\n const handleClick = () => {\n setCollapsed(!collapsed);\n }\n\n const listContent = () => {\n return(\n [...[content]].flat().map((e) => {\n return <div key={e.key} className=\"collapsible-list-content-item\">{e.content}</div>\n })\n );\n }\n\n return (\n <div className=\"collapsible-list-item\">\n <div className=\"collapsible-list-header\" onClick={handleClick}>\n <div className={\"collapsible-list-handle\"}>\n <i className={collapsed ? \"fas fa-plus-square fa-sm\" : \"fas fa-minus-square fa-sm\"}></i>\n </div>\n <div className=\"collapsible-list-header-text\">{header}</div>\n </div>\n {!collapsed && <div className=\"collapsible-list-content\">{listContent()}</div>}\n </div>\n );\n};\n\nexport default props => <CollapsibleListItem {...props} />;\n","import React from 'react';\n\nimport * as classNames from 'classnames'\n\nconst onButtonClick = (e, {\n value,\n selectedValue,\n onUpdate,\n selectedDirection\n}) => {\n e.preventDefault()\n\n let direction\n if ((value === 'documents.last_release_date') && selectedValue !== value) {\n direction = 'descending'\n } else if (selectedValue === value && selectedDirection === 'ascending') {\n direction = 'descending'\n } else {\n direction = 'ascending'\n }\n\n onUpdate(value, direction)\n return false\n}\n\nconst GenDirectionalButtons = ({\n selectedValue,\n selectedDirection,\n disabled,\n onUpdate,\n buttons,\n}) => (\n <div className=\"gen-directional-buttons\">\n { buttons.map(({ value, disabled, title }) => (\n <a\n className={\n classNames(\n \"gen-directional-button\",\n {\n 'disabled': disabled || disabled,\n 'selected': value === selectedValue,\n [selectedDirection]: value === selectedValue\n }\n )\n }\n key={value}\n value={value}\n href=\"#\"\n onClick={(e) => onButtonClick(e, {value, selectedValue, onUpdate, selectedDirection})}>\n <span className=\"button-group-item\">{title}</span>\n </a>\n ))}\n </div>\n)\n\nexport default GenDirectionalButtons\n","import React from 'react'\n\nimport { assign, pick, map, concat, uniqBy, groupBy, fromPairs } from 'lodash'\n\nimport GenModal from 'Gen/Modal/component'\nimport GenDirectionalButtons from 'DirectionalButtons/component'\nimport GenLoadingSpinner from 'LoadingSpinner/component'\n\nimport {checkVisible} from 'helpers/check_visibility'\nimport {full_url} from 'helpers/url'\nimport * as classNames from \"classnames\";\nimport Select from 'react-select';\n\nconst FILTERS_SETTINGS = [\n {\n title: \"Presenting Problem\",\n forKey: \"for_presenting_problem\",\n optionsKey: \"presentingProblemOptions\",\n filterGroup: 1,\n },\n {\n title: \"Final Diagnosis\",\n forKey: \"for_final_diagnosis\",\n optionsKey: \"finalDiagnosisOptions\",\n filterGroup: 1,\n },\n {\n title: \"Additional Diagnosis\",\n forKey: \"for_additional_diagnosis\",\n optionsKey: \"additionalDiagnosisOptions\",\n filterGroup: 1,\n },\n {\n title: \"Illness Script Document\",\n forKey: \"for_illness_script\",\n optionsKey: \"illnessScriptOptions\",\n shouldHide: (context) => context !== 'RC',\n filterGroup: 1,\n },\n {\n title: \"Aquifer Signature Content\",\n forKey: \"for_course_name\",\n optionsKey: \"aquiferContentOptions\",\n filterGroup: 2,\n },\n {\n title: \"Clinical Disciplines\",\n forKey: \"for_clinical_discipline\",\n optionsKey: \"clinicalDisciplinesOptions\",\n filterGroup: 2,\n },\n {\n title: \"Clinical Focus\",\n forKey: \"for_clinical_focus\",\n optionsKey: \"clinicalFocusOptions\",\n filterGroup: 2,\n },\n {\n title: \"System\",\n forKey: \"for_system\",\n optionsKey: \"systemOptions\",\n filterGroup: 2,\n },\n {\n title: \"Basic Science Disciplines\",\n subtitle: (optionsCount) => <small style={{fontSize: \"8pt\"}}>{optionsCount === 0 ? '(No Subscribed Content)' : \"\"}</small>,\n forKey: \"for_basic_science_discipline\",\n optionsKey: \"basicScienceDisciplinesOptions\",\n filterGroup: 2,\n },\n {\n title: \"Clinical Location\",\n forKey: \"for_clinical_location\",\n optionsKey: \"clinicalLocationOptions\",\n filterGroup: 2,\n },\n {\n title: \"Age Groups\",\n forKey: \"for_age_groups\",\n optionsKey: \"ageGroupsOptions\",\n filterGroup: 2,\n },\n {\n title: \"Aquifer Signature Cases\",\n forKey: \"for_signature_case\",\n optionsKey: \"signatureCaseOptions\",\n shouldHide: (context) => context !== 'RC',\n filterGroup: 2,\n },\n]\n\nexport default class GenList extends React.Component {\n static defaultProps = {\n historyPersistance: false,\n defaultItemsPerPage: 12,\n isInfiniteScroll: false,\n permanentFilters: [],\n pinnedItems: []\n };\n\n constructor(props, context) {\n super(props, context);\n var defaults = {\n currentItems: null,\n itemsMap: {},\n currentItemCountMsg: null,\n itemsPerPage: props.defaultItemsPerPage,\n pageNumber: 0,\n gettingNewPage: false,\n itemsLastRecieved: null,\n searchValue: \"\",\n loSearchValue: \"\",\n searchTimer: null,\n loSearchTimer: null,\n sortValue: null,\n sortDirection: null,\n activeFilters: {},\n activeGenericFilters: {},\n selectionBasketModalOpen: false,\n moreScrollId: Math.floor(Math.random() * 0xFFFF),\n activeDynamicFilters: {},\n filterOptions: fromPairs(FILTERS_SETTINGS.map((filterSetting) => [filterSetting.optionsKey, []]))\n };\n\n var history = this.getHistoryState();\n var merged = assign(defaults, history);\n\n this.state = merged;\n }\n\n createFilterOptions = (filterType) => {\n let documentLookupTable = this.props.documentLookupTable\n let arrayOptions = []\n let uniqueCount = {}\n Object.keys(documentLookupTable).forEach((key) => {\n arrayOptions = arrayOptions.concat(documentLookupTable[key][filterType])\n })\n arrayOptions.forEach(function(i) { uniqueCount[i] = (uniqueCount[i]||0) + 1;});\n return Object.keys(uniqueCount).map ((k) => [`${k} [${uniqueCount[k]}]`, k]).sort()\n }\n\n componentDidMount() {\n this.getUpdatedList();\n\n if (this.props.documentLookupTable){\n this.setState({\n filterOptions: fromPairs(FILTERS_SETTINGS.map((filterSetting) => [filterSetting.optionsKey, this.createFilterOptions(filterSetting.title)]))\n });\n }\n\n if (Object.keys(this.state.activeDynamicFilters).length > 0) {\n const allDocumentsKeys = Object.keys(this.props.documentLookupTable)\n const scopeHash = fromPairs(FILTERS_SETTINGS.map((filterSetting) => [filterSetting.forKey, [filterSetting.title, filterSetting.optionsKey]]))\n let newFilterOptions = {}\n\n Object.keys(scopeHash).forEach(key => {\n let newClonedFilter = Object.assign({}, this.state.activeDynamicFilters)\n delete newClonedFilter[key]\n const selectedDocuments = Object.keys(newClonedFilter).length === 0 ? allDocumentsKeys : this.collectDocuments(newClonedFilter)\n newFilterOptions[scopeHash[key][1]] = this.computeStateFilterOptions(selectedDocuments, scopeHash[key][0])\n })\n\n this.setState({filterOptions: newFilterOptions})\n }\n\n if (this.props.isInfiniteScroll) {\n window.addEventListener(\"scroll\", this.checkVisibilityForMore.bind(this));\n setTimeout(this.checkVisibilityForMore.bind(this),500);\n }\n }\n\n componentWillUnmount() {\n if (this.state.timer) {\n clearTimeout(this.state.searchTimer);\n }\n\n window.removeEventListener(\"scroll\", this.checkVisibilityForMore.bind(this));\n }\n\n // search=string\n // page=int\n // sort_value=string\n // sort_order=string\n //\n getHistoryState = () => {\n var state = history.state;\n if (state === null) {\n state = {};\n }\n return(pick(state, [\"searchValue\", \"loSearchValue\", \"sortValue\", \"sortDirection\", \"pageNumber\", \"activeFilters\", \"activeDynamicFilters\"]));\n };\n\n setHistoryState = () => {\n var currentState = history.state;\n var newPartial = pick(this.state, [\"searchValue\", \"loSearchValue\", \"sortValue\", \"sortDirection\", \"pageNumber\", \"activeFilters\", \"activeDynamicFilters\"]);\n var newState = assign(currentState, newPartial);\n\n history.replaceState(newState, document.title);\n };\n\n handleSearchChange = (e) => {\n this.setState({searchValue: e.target.value,\n currentItems: null,\n gettingNewPage: false,\n pageNumber: 0});\n if (this.state.searchTimer) { clearTimeout(this.state.searchTimer); }\n this.setState({searchTimer: setTimeout(this.updateSearchWithTimer, 1000)});\n };\n\n handleLOSearchChange = (e) => {\n this.setState({loSearchValue: e.target.value,\n currentItems: null,\n gettingNewPage: false,\n pageNumber: 0});\n if (this.state.loSearchTimer) { clearTimeout(this.state.loSearchTimer); }\n this.setState({loSearchTimer: setTimeout(this.updateSearchWithTimer, 1000)});\n };\n\n handleSearchKeyPress = (e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n }\n };\n\n updateSearchWithTimer = () => {\n // this.updateUSC();\n this.getUpdatedList();\n this.setState({timer: null});\n };\n\n updateSort = (newSortValue, newSortDirection) => {\n this.setState({ sortValue: newSortValue,\n sortDirection: newSortDirection,\n currentItems: null,\n gettingNewPage: false,\n pageNumber: 0 }, this.getUpdatedList);\n return false\n };\n\n handleFilterChange = (that, newKey) => {\n return(function(newSelect){\n let newValue = newSelect.target.value;\n\n let currentActiveFilters = that.state.activeFilters;\n let newActiveFilters = {};\n for (var attr in currentActiveFilters) {\n if (attr != newKey) {\n newActiveFilters[attr] = currentActiveFilters[attr];\n }\n }\n\n if (newValue != \"All\") {\n newActiveFilters[newKey] = newValue;\n }\n\n that.setState({ activeFilters: newActiveFilters,\n currentItems: null,\n gettingNewPage: false,\n pageNumber: 0 }, that.getUpdatedList);\n });\n };\n\n computeStateFilterOptions = (selectedDocuments, filterType) => {\n let documentLookupTable = this.props.documentLookupTable\n let arrayOptions = []\n let otherOptions = []\n let uniqueCount = {}\n Object.keys(documentLookupTable).forEach((key) => {\n if(selectedDocuments.includes(key)){\n arrayOptions = arrayOptions.concat(documentLookupTable[key][filterType])\n }\n else{\n otherOptions = otherOptions.concat(documentLookupTable[key][filterType])\n }\n })\n arrayOptions.forEach(function(i) { uniqueCount[i] = (uniqueCount[i]||0) + 1;});\n otherOptions.forEach(function(i) {\n if(!arrayOptions.includes(i)) {\n uniqueCount[i] = 0\n }\n })\n return Object.keys(uniqueCount).map ((k) => [`${k} [${uniqueCount[k]}]`, k]).sort()\n }\n\n collectDocuments = (newActiveDynamicFilters) => {\n let documentLookupTable = this.props.documentLookupTable\n let scopeHash = fromPairs(FILTERS_SETTINGS.map((filterSetting) => [filterSetting.forKey, filterSetting.title]))\n\n let documentArray = []\n let documentCountHash = {}\n let selectedDocuments = []\n Object.keys(newActiveDynamicFilters).forEach((key) => {\n Object.keys(documentLookupTable).forEach((documentId) => {\n if(Array.isArray(documentLookupTable[documentId][scopeHash[key]])) {\n if(Array.isArray(newActiveDynamicFilters[key])){\n if(newActiveDynamicFilters[key].some((elem) => documentLookupTable[documentId][scopeHash[key]].includes(elem))){\n documentArray.push(documentId)\n }\n }else{\n if(documentLookupTable[documentId][scopeHash[key]].includes(newActiveDynamicFilters[key])){\n documentArray.push(documentId)\n }\n }\n }\n })\n })\n documentArray.forEach(function(i) { documentCountHash[i] = (documentCountHash[i]||0) + 1;});\n Object.keys(documentCountHash).forEach((key) => {\n if(documentCountHash[key]==Object.keys(newActiveDynamicFilters).length){\n selectedDocuments.push(key)\n }\n })\n\n return selectedDocuments\n }\n\n calculateDynamicOptions = (newActiveDynamicFilters, currentFilters, newKey, newValue) => {\n let scopeHash = fromPairs(FILTERS_SETTINGS.map((filterSetting) => [filterSetting.forKey, [filterSetting.title, filterSetting.optionsKey]]))\n\n const selectedValueLabel = this.state.filterOptions?.[scopeHash[newKey][1]].find(z => z[1] === newValue)?.[0] || 'All'\n const uniqueCount = parseInt(selectedValueLabel.substring(\n selectedValueLabel.indexOf(\"[\") + 1,\n selectedValueLabel.lastIndexOf(\"]\")\n )) || 0;\n let newFilterOptions = {}\n\n if (Object.keys(currentFilters).length === 0) {\n newFilterOptions[scopeHash[newKey][1]] = this.createFilterOptions(scopeHash[newKey][0])\n } else {\n const currentFilterDocuments = this.collectDocuments(currentFilters)\n newFilterOptions[scopeHash[newKey][1]] = this.computeStateFilterOptions(currentFilterDocuments, scopeHash[newKey][0])\n }\n\n if (uniqueCount !== 0 || newValue==='All') {\n const allDocumentsKeys = Object.keys(this.props.documentLookupTable)\n\n delete scopeHash[newKey]\n Object.keys(scopeHash).forEach(key => {\n let newClonedFilter = Object.assign({}, newActiveDynamicFilters)\n delete newClonedFilter[key]\n const selectedDocuments = Object.keys(newClonedFilter).length === 0 ? allDocumentsKeys : this.collectDocuments(newClonedFilter)\n newFilterOptions[scopeHash[key][1]] = this.computeStateFilterOptions(selectedDocuments, scopeHash[key][0])\n })\n } else {\n newFilterOptions = { ...this.state.filterOptions,...newFilterOptions}\n }\n this.setState({filterOptions: newFilterOptions})\n }\n\n handleDynamicFilterChange = (that, newKey) => {\n return(function(newSelect){\n let newValue\n if(Array.isArray(newSelect)){\n newValue = newSelect.map((item) => item.value);\n }else{\n newValue = newSelect?.value || \"All\";\n }\n let currentActiveDynamicFilters = that.state.activeDynamicFilters;\n let selectedFilters = that.state.activeDynamicFilters;\n if(Object.keys(selectedFilters).includes(newKey)){\n delete selectedFilters[newKey]\n }\n let newActiveDynamicFilters = {};\n for (var attr in currentActiveDynamicFilters) {\n if (attr != newKey) {\n newActiveDynamicFilters[attr] = currentActiveDynamicFilters[attr];\n }\n }\n\n if (newValue != \"All\") {\n newActiveDynamicFilters[newKey] = newValue;\n }\n\n if(Object.keys(newActiveDynamicFilters).length === 0 || (Object.values(newActiveDynamicFilters).every(v => Array.isArray(v) ? v.includes(\"All\"): v==\"All\"))){\n that.setState({\n filterOptions: fromPairs(FILTERS_SETTINGS.map((filterSetting) => [filterSetting.optionsKey, that.createFilterOptions(filterSetting.title)]))\n })\n } else {\n if(Array.isArray(newValue)){\n newValue.map((nv) => that.calculateDynamicOptions(newActiveDynamicFilters,selectedFilters,newKey,nv))\n }else{\n that.calculateDynamicOptions(newActiveDynamicFilters,selectedFilters,newKey,newValue)\n }\n }\n\n that.setState({\n activeDynamicFilters: newActiveDynamicFilters,\n currentItems: null,\n gettingNewPage: false,\n pageNumber: 0 }, that.getUpdatedList\n );\n });\n };\n\n handleGenericFilterChange = (that, newKey) => {\n return(function(newSelect){\n let newValue = newSelect.target.value;\n\n let currentActiveGenericFilters = that.state.activeGenericFilters;\n let newActiveGenericFilters = {};\n for (var attr in currentActiveGenericFilters) {\n if (attr != newKey) {\n newActiveGenericFilters[attr] = currentActiveGenericFilters[attr];\n }\n }\n\n if (newValue != \"All\") {\n newActiveGenericFilters[newKey] = newValue;\n }\n\n that.setState({ activeGenericFilters: newActiveGenericFilters,\n currentItems: null,\n gettingNewPage: false,\n pageNumber: 0 }, that.getUpdatedList);\n });\n };\n\n moreClick = () => {\n this.setState({ pageNumber: this.state.pageNumber + 1,\n gettingNewPage: true}, this.getAdditionalPage);\n };\n\n checkVisibilityForMore = () => {\n const elem = document.getElementById(this.state.moreScrollId)\n\n if (elem) {\n if (checkVisible(elem)) {\n this.moreClick()\n }\n }\n }\n\n dataForQuery = () => {\n let data = {};\n\n if (this.props.ids) {\n data.ids = this.props.ids;\n }\n\n if (this.props.notIds) {\n data.not_ids = this.props.notIds;\n }\n\n if (this.state.searchValue && (this.state.searchValue !== \"\")) {\n data.search = this.state.searchValue;\n }\n\n if (this.state.loSearchValue && (this.state.loSearchValue !== \"\")) {\n data.lo_search = this.state.loSearchValue;\n }\n\n if (this.state.sortValue) {\n data.sort_order = (this.state.sortDirection === \"descending\") ? \"DESC\" : \"ASC\";\n data.sort_by = this.state.sortValue;\n }\n\n\n if (this.state.itemsPerPage) {\n if (this.state.currentItems === null) {\n data.page = 0;\n data.per_page = (this.state.pageNumber + 1) * this.state.itemsPerPage;\n } else {\n data.page = this.state.pageNumber;\n data.per_page = this.state.itemsPerPage;\n }\n }\n\n let filterValues = [];\n for(var key in this.state.activeFilters) {\n filterValues.push(this.state.activeFilters[key]);\n }\n if (filterValues.length > 0) {\n data.filters = filterValues;\n }\n\n if (Object.keys(this.state.activeDynamicFilters).length > 0) {\n data.dynamic_filters = JSON.stringify(this.state.activeDynamicFilters);\n }\n\n if (this.props.permanentFilters.length > 0) {\n data.where = JSON.stringify(this.props.permanentFilters)\n }\n\n let genericFilterValues = [];\n for(var key in this.state.activeGenericFilters) {\n let title = key\n let selectedOption = this.state.activeGenericFilters[title]\n let activeGenericFilter = this.props.genericFilterOptions.find((genericFilter) =>{\n return genericFilter['title'] === title\n })\n\n if (activeGenericFilter) {\n let genericFilterWhere = activeGenericFilter['options'][selectedOption]\n\n if (genericFilterWhere) {\n genericFilterValues.push(genericFilterWhere)\n }\n }\n }\n\n if (genericFilterValues.length > 0) {\n data.generic_filters = JSON.stringify(genericFilterValues);\n }\n\n return data;\n };\n\n getPage(successCallback) {\n if(this.ongoingFetchController) {\n this.ongoingFetchController.abort();\n }\n\n // (\"AbortController\" in window) gaurds againt legacy browsers that don't support AbortController\n const controller = (\"AbortController\" in window) && new AbortController();\n this.ongoingFetchController = controller;\n\n const queryParams = new URLSearchParams(this.dataForQuery());\n const url = `${full_url(this.props.itemsURL)}?${queryParams}`;\n\n fetch(url, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n signal: controller.signal\n })\n .then(response => response.json())\n .then((json) => successCallback.bind(this)(json))\n .catch((error) => console.log(error));\n };\n\n getPageCount = (successCallback) => {\n if (!this.props.itemCountURL) {\n return;\n }\n\n $.ajax({\n type: \"GET\",\n url: full_url(this.props.itemCountURL),\n dataType: 'json',\n data: this.dataForQuery(),\n contentType: 'application/json',\n success: successCallback.bind(this),\n error: function(xhr, status, error) {\n console.log(xhr.responseText);\n console.log(status);\n console.log(error);\n }\n });\n };\n\n mergeDocumentItems = (newItems, itemsMap) => {\n if (itemsMap && Array.isArray(newItems)) {\n newItems.forEach(item => {\n // Repeat the +replaceAll+ call multiple times to accommodate nested spans.\n const searchStrippedTitle = this.stripSearchSpans(item.title)\n\n const reducedItem = {\n title: searchStrippedTitle,\n url: item.url && item.url.toString().replace(/.json$/i, ''),\n prerequisite_document: item.prerequisite_document,\n };\n itemsMap[item.id] = reducedItem\n })\n }\n\n // ADD PREREQUISITE DOCUMENTS TO ITEMS MAP SO THEY CAN BE ADDED TO SELECTION BASKET\n const prerequisiteDocuments = newItems.map(newItem => newItem.prerequisite_document).filter(x => x);\n if (prerequisiteDocuments.length > 0) {\n itemsMap = this.mergeDocumentItems(prerequisiteDocuments, itemsMap)\n }\n\n return itemsMap\n }\n\n stripSearchSpans(html) {\n if (!html) { return html }\n\n let htmlAfterOneStrip = html.replace(/<span class=\"search-hit\">(.*?)<\\/span>/, \"$1\")\n if (htmlAfterOneStrip == html) { return html }\n\n // Recurse\n return this.stripSearchSpans(htmlAfterOneStrip)\n }\n\n getUpdatedList = () => {\n this.getPage(function(result) {\n if (this.props.historyPersistance) { this.setHistoryState(); }\n this.setState({currentItems: uniqBy(result, 'id'),\n itemsMap: this.mergeDocumentItems(result, this.state.itemsMap),\n itemsLastRecieved: result?.length}, () => {\n setTimeout(() => {\n if (this.props.isInfiniteScroll) {\n this.checkVisibilityForMore()\n }\n }, 300)\n });\n });\n this.getPageCount(function(result) {\n this.setState({currentItemCountMsg: result});\n });\n };\n\n getAdditionalPage = () => {\n this.getPage(function(result) {\n // To prevent error caused when user changes filters making this.state.currentItems null before additional page is loaded\n if (!this.state.currentItems) { return; }\n\n if (this.props.historyPersistance) { this.setHistoryState(); }\n const currentItems = uniqBy(concat(this.state.currentItems, result), 'id')\n this.setState({\n currentItems,\n itemsMap: this.mergeDocumentItems(result, this.state.itemsMap),\n itemsLastRecieved: result.length,\n gettingNewPage: false\n },\n () => setTimeout(this.props.isInfiniteScroll ? this.checkVisibilityForMore : () => {}, 300)\n )\n });\n };\n\n moreItems = () => {\n if (!this.state.currentItems) return null\n\n const MoreItemsContainer = this.props.tableHeader ? 'tr' : 'div'\n const InfiniteScrollContainer = this.props.tableHeader ? 'td' : 'div'\n\n if (this.state.itemsLastRecieved !== null &&\n this.state.itemsLastRecieved < this.state.itemsPerPage){\n\n if (this.props.isInfiniteScroll) return <MoreItemsContainer />\n\n return <MoreItemsContainer className=\"gen-list-pagination\">\n <button className=\"gen-list-more-button disabled\">More</button>\n </MoreItemsContainer>\n } else if (this.state.gettingNewPage) {\n return <MoreItemsContainer><GenLoadingSpinner/></MoreItemsContainer>\n }\n\n return <MoreItemsContainer className=\"gen-list-pagination\">\n { this.props.isInfiniteScroll ? (\n <InfiniteScrollContainer>\n <span id={this.state.moreScrollId} className=\"more-scroll\"></span>\n </InfiniteScrollContainer>\n ) : (\n <button onClick={this.moreClick} className=\"gen-list-more-button\">More</button>\n )}\n </MoreItemsContainer>\n }\n\n handleToggleSelectionBasketModalOpen = (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.setState({\n selectionBasketModalOpen: !this.state.selectionBasketModalOpen\n });\n };\n\n selectionBasketItem = (documentId) => {\n const docItem = this.state.itemsMap[documentId];\n\n const removeIdFromSelectionBasket = ({documentId}) => (e) =>{\n this.props.removeDocumentId(documentId)\n };\n\n return <tr key={documentId}>\n <td style={{paddingBottom: 0, paddingTop: '5px'}}>\n <a href={docItem.url} target=\"_blank\">\n {docItem.title}\n </a>\n </td>\n {!this.hasAnySelectedSubservientDocuments(documentId) && (\n <td style={{paddingBottom: 0, paddingTop: '5px'}}>\n <button\n className={classNames('button', 'small')}\n onClick={removeIdFromSelectionBasket({documentId})}>\n Remove\n </button>\n </td>\n )}\n </tr>\n }\n\n hasAnySelectedSubservientDocuments = (documentId) => {\n return this.props.selectedDocuments?.some(selectedDocumentId => {\n return this.state.itemsMap[selectedDocumentId]?.prerequisite_document?.id === documentId\n })\n }\n\n\n deselectAll = () => {\n this.props.selected.forEach(documentId => this.props.removeDocumentId(documentId))\n }\n\n render() {\n let viewSelectionBasket = null\n let itemCountBox = null\n let searchBox = null\n let searchBoxForLO = null\n let filterRole = null\n let sortOptions = null\n let controlPanel = null\n let roleDropdown = null\n\n let modalHeader = null\n if (this.props.selectedDocuments?.length == 0) {\n modalHeader = <h5>\n You have no selected items.\n Click \"Close\" to continue to filter or search and add items.\n </h5>\n } else {\n if (this.props.selectedDocuments) {\n const showPrerequisiteWarning = this.props.selectedDocuments.some(documentId => this.hasAnySelectedSubservientDocuments(documentId));\n\n modalHeader = <h5>\n You have added the following items to create your course.\n {showPrerequisiteWarning ? \" At least one of these is a case associated with a prerequisite case and the prerequisite case has also been added to your course.\" : \" \"}\n You may continue to filter or search and add items.\n Click the Create Course button when you have finalized your selections.\n </h5>\n }\n }\n\n\n let removeAllButton = null\n if (this.props.selectedDocuments && this.props.selectedDocuments.length != 0) {\n removeAllButton = <button style={{float: 'right'}} onClick={this.deselectAll}>Remove All</button>\n }\n\n let selectionBasketModal =\n <GenModal open={this.state.selectionBasketModalOpen} >\n <div className=\"gen-modal-panel\">\n {modalHeader}\n <table>\n <tbody>\n <tr style={{borderBottom: '1px solid #ccc'}}>\n <td style={{width: '100%', padding: 0}} />\n <td style={{width: '90px', padding: 0}} />\n </tr>\n {this.props.selectedDocuments && this.props.selectedDocuments.map(documentId => this.selectionBasketItem(documentId))}\n </tbody>\n </table>\n\n {removeAllButton}\n <div style={{textAlign: 'center'}}>\n <button\n onClick={this.handleToggleSelectionBasketModalOpen}>\n Close\n </button>\n </div>\n </div>\n </GenModal>\n\n if (this.props.selected && this.props.selected.length > 0) {\n if (this.props.useSelectionBasket) {\n viewSelectionBasket = <button\n onClick={this.handleToggleSelectionBasketModalOpen}>\n {`View Selected Items (${this.props.selected.length})`}\n </button>\n } else {\n viewSelectionBasket = <span>{this.props.selected.length} selected</span>\n }\n }\n\n if (this.props.search || this.props.sortOptions || this.props.filterRole) {\n if (this.state.currentItemCountMsg) {\n itemCountBox = <div className=\"gen-list-item-count\">\n {this.state.currentItemCountMsg}\n </div>\n }\n\n if (this.props.search) {\n searchBox = <form className=\"gen-list-search-bar\" style={(this.props.searchByLO || this.props.coursePageUpgrade) && {float: 'right', marginRight: '20px'}} role=\"search\">\n <input\n type=\"search\"\n placeholder=\"Search...\"\n value={this.state.searchValue}\n onChange={this.handleSearchChange}\n onKeyPress={this.handleSearchKeyPress}\n />\n </form>;\n }\n\n if (this.props.searchByLO) {\n searchBoxForLO = <form className=\"gen-list-search-bar\" role=\"search\">\n <h4>Learning Objectives</h4><br/>\n <input\n type=\"search\"\n placeholder=\"Search By Learning Objective...\"\n value={this.state.loSearchValue}\n onChange={this.handleLOSearchChange}\n onKeyPress={this.handleSearchKeyPress}\n />\n </form>;\n }\n\n if (this.props.sortOptions) {\n sortOptions = <GenDirectionalButtons\n buttons={this.props.sortOptions}\n selectedValue={this.state.sortValue || this.props.defaultSortValue}\n selectedDirection={this.state.sortDirection || this.props.defaultSortDirection}\n onUpdate={this.updateSort}/>;\n }\n\n\n controlPanel = <>\n {this.props.searchByLO && (\n <div className=\"gen-list-control-panel\">\n {searchBoxForLO}\n </div>\n )}\n <div className=\"gen-list-control-panel\" style={this.props.coursePageUpgrade && {boxShadow: 'none', border: 'none', paddingBottom: '23px'}}>\n {filterRole}\n {searchBox}\n {sortOptions}\n {itemCountBox}\n </div>\n </>\n }\n\n let activeFilters, activeGenericFilters\n let filterPanel = null\n if (this.props.filterOptions || this.props.genericFilterOptions) {\n activeFilters = this.state.activeFilters;\n activeGenericFilters = this.state.activeGenericFilters\n filterPanel = <div className=\"gen-list-filter-panel\" style={this.props.coursePageUpgrade && {boxShadow: 'none', border: 'none'}}>\n {this.props.filterOptions && this.props.filterOptions.map(function(filter){\n let filterOut = <div key={filter.title} className=\"gen-list-filter\">\n <h5>{filter.title}</h5>\n <select defaultValue={activeFilters[filter.title] || \"All\"} onChange={this.handleFilterChange(this, filter.title)}>\n <option value=\"All\">All</option>\n {filter.options.map(function(option){\n return (\n <option key={option} value={option}>\n {option}\n </option>\n );\n })}\n </select>\n </div>;\n\n return( filterOut );\n }, this)}\n {this.props.genericFilterOptions && this.props.genericFilterOptions.map(function(filter){\n let filterOut = <div key={filter.title} className=\"gen-list-filter\">\n <h5><span className={this.props.coursePageUpgrade && \"course-page-filter-title\"}>{filter.title}</span></h5>\n <select defaultValue={activeGenericFilters[filter.title] || \"All\"} onChange={this.handleGenericFilterChange(this, filter.title)}>\n <option value=\"All\">All</option>\n {Object.keys(filter.options).map(function(option){\n if (option === 'Invited') {\n return(\n <option key={option} value={option}>\n Registration Pending\n </option>\n );\n } else {\n return(\n <option key={option} value={option}>\n {option}\n </option>\n );\n }\n })}\n </select>\n </div>;\n\n return( filterOut );\n }, this)\n }\n </div>;\n }\n\n let activeDynamicFilters\n let dynamicFilters = null\n let isMultiSelect = !this.props.isMultiSelect && {label: \"All\", value: \"All\"}\n\n if (this.props.documentLookupTable) {\n activeDynamicFilters = this.state.activeDynamicFilters;\n\n dynamicFilters = Object.entries(groupBy(FILTERS_SETTINGS, (filter) => filter.filterGroup)).map(([key, filterGroup]) => {\n const filters = filterGroup.map(filterSettings => {\n if (filterSettings.shouldHide && filterSettings.shouldHide(this.props.context)) { return null }\n\n const filterOptions = this.state.filterOptions[filterSettings.optionsKey]\n const subtitle = filterSettings.subtitle && filterSettings.subtitle(filterOptions.length)\n const activeFilters = activeDynamicFilters[filterSettings.forKey]\n\n return (\n <div className=\"gen-list-filter\" style={{marginRight: \"1.6%\"}} key={filterSettings.title}>\n <h5>{filterSettings.title} {subtitle}</h5>\n <Select\n isMulti={this.props.isMultiSelect}\n placeholder=\"All\"\n value={\n activeFilters && Object.keys(activeFilters).length\n ? [isMultiSelect, ...filterOptions.map((option) => ({ label: option[0], value: option[1] }))]\n .filter(option => activeFilters.includes(option.value))\n : isMultiSelect\n }\n onChange={this.handleDynamicFilterChange(this, filterSettings.forKey)}\n options={[isMultiSelect, ...filterOptions.map((option) => ({label: option[0], value: option[1]}))]}\n disabled={filterOptions.length===0}\n />\n </div>\n )\n })\n\n return (\n <div className=\"gen-list-filter-panel\" key={key}>\n {filters}\n </div>\n )\n })\n }\n\n\n let pinnedItems = []\n if (this.props.pinnedItems.length > 0) {\n pinnedItems = this.props.pinnedItems.map((item) => {\n return(this.props.itemView(item));\n })\n }\n\n let listItems\n let tableStyle = this.props.tableStyle\n\n if (this.state.currentItems === null) {\n listItems = <GenLoadingSpinner/>;\n } else if (this.state.currentItems.length === 0) {\n listItems =\n <div className=\"gen-list-no-items\">\n <h1>No Items</h1>\n </div>\n } else {\n let stripSearch = this.state.currentItems\n if(typeof stripSearch!=='undefined') {\n stripSearch.forEach(item => {\n if(typeof item.title!=='undefined') {\n item.title = item.title.replace(/<span class=\"search-hit\">(.*?)<\\/span>/, \"$1\")\n }\n })\n }\n listItems = map(stripSearch, (item) => this.props.itemView({...item, canRemove: !this.hasAnySelectedSubservientDocuments(item.id)}))\n if (this.props.tableHeader) {\n listItems =\n <table style={tableStyle}>\n <thead>\n {this.props.tableHeader}\n </thead>\n <tbody>\n {listItems}\n </tbody>\n <tfoot>\n {this.moreItems()}\n </tfoot>\n </table>\n } else {\n listItems = <div className=\"gen-list-items\">{listItems}{this.moreItems()}</div>;\n }\n }\n\n let otherPages = <div className=\"gen-list\">\n {filterPanel}\n {dynamicFilters}\n {this.props.selectPanel && this.props.selectPanel(viewSelectionBasket)}\n {controlPanel}\n {pinnedItems}\n {listItems}\n {selectionBasketModal}\n </div>\n\n let coursepage = <div className=\"gen-list\">\n <div style={{display: \"inline-flex\", width: \"100%\"}}>\n <div style={{width: \"70%\"}}>\n {filterPanel}\n </div>\n <div style={{width: \"30%\"}}>\n {dynamicFilters}\n {this.props.selectPanel && this.props.selectPanel(viewSelectionBasket)}\n {controlPanel}\n </div>\n </div>\n {pinnedItems}\n {listItems}\n {selectionBasketModal}\n </div>\n\n let displayDiv = this.props.coursePageUpgrade ? coursepage : otherPages\n\n return(\n <div>\n {displayDiv}\n </div>\n );\n }\n}\n","export function checkVisible(elm) {\n if (!elm) return true\n let rect = elm.getBoundingClientRect();\n let viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);\n return !(rect.bottom < 0 || rect.top - viewHeight >= 0);\n}\n","import React from 'react'\n\nexport default function GenLoadingSpinner({ variant = 'big' }) {\n return(\n <div className={`gen-loading-spinner ${variant}`}>\n <div className=\"gen-loading-spinner-bounce-1\" />\n <div className=\"gen-loading-spinner-bounce-2\" />\n <div className=\"gen-loading-spinner-bounce-3\" />\n </div>\n );\n}\n","import React from 'react';\n\nexport default function GenModal(props) {\n if (props.open) {\n return (\n <div className=\"gen-modal\">\n {props.children}\n </div>\n );\n } else {\n return(null);\n }\n}\n","import * as React from 'react';\nimport ReactOnRails from 'react-on-rails';\n\nimport GenLoadingSpinner from 'Gen/LoadingSpinner/component';\n\nexport default class GenPostButton extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoading: false,\n };\n }\n\n static defaultProps = {\n highlighted: false,\n disabled: false,\n loading: false,\n data: {},\n };\n\n handleSubmit = (event) => {\n // Prevent default form submission behavior\n event.preventDefault();\n\n // Set loading state to true\n this.setState({ isLoading: true });\n\n // Submit the form after setting loading state\n event.target.submit();\n };\n\n render() {\n let classes = \"gen-button\";\n\n if (this.props.disabled) {\n classes += \" disabled\";\n }\n\n if (this.props.highlighted) {\n classes += \" highlighted\";\n }\n\n if (this.props.small) {\n classes += \" small\";\n }\n\n if (this.props.className) {\n classes += \" \";\n classes += this.props.className;\n }\n\n const authToken = ReactOnRails.authenticityToken();\n\n if (this.state.isLoading || this.props.loading) {\n return (\n <div className={classes}>\n <span className=\"is-loading\"><GenLoadingSpinner variant='small'/></span>\n </div>\n );\n } else {\n return (\n <div className={classes}>\n <form\n action={this.props.url}\n method=\"POST\"\n target={this.props.openInNewTab ? \"_blank\" : \"_self\"}\n onSubmit={this.handleSubmit}\n >\n {Object.keys(this.props.data).map((key) => {\n return (\n <input\n type=\"hidden\"\n key={key}\n name={key}\n value={JSON.stringify(this.props.data[key])}\n />\n );\n })}\n <input\n key=\"submit\"\n type=\"submit\"\n value={this.props.name}\n disabled={this.props.disabled}\n data-confirm={this.props.confirmMessage}\n />\n <input\n type=\"hidden\"\n name=\"authenticity_token\"\n value={authToken || \"\"}\n />\n </form>\n </div>\n );\n }\n }\n}\n","import React from 'react'\n\nconst StickyTable = () => {\n const setStickyHeader = function() {\n document.querySelectorAll(\".sticky-table\").forEach(stickyTable => {\n let stickyRowHeights = 0\n stickyTable.querySelectorAll(\".sticky-row\").forEach(stickyRow => {\n stickyRow.querySelectorAll(\"th, td\").forEach(stickyCell => {\n stickyCell.style.top = `${stickyRowHeights}px`\n })\n\n stickyRowHeights += stickyRow.offsetHeight\n })\n\n // stickyTable.querySelectorAll(\"tr\").forEach(row => {\n // let stickyCellWidths = 0\n // row.querySelectorAll(\".sticky-cell\").forEach(stickyCell => {\n // stickyCell.style.left = `${stickyCellWidths}px`\n //\n // stickyCellWidths += stickyCell.offsetWidth\n // })\n // })\n })\n }\n\n setStickyHeader()\n\n window.onresize = setStickyHeader\n}\n\nexport default StickyTable\n","import React from 'react'\n\nimport _ from 'lodash'\nimport stickyTable from 'components/StickyTable/component'\n\nimport GenLoadingSpinner from 'Gen/LoadingSpinner/component'\n\nimport {full_url} from 'helpers/url'\n\nexport default class GenSortTable extends React.Component {\n static defaultProps = {\n searchKeys: [],\n searchPlaceholder: \"Search...\",\n columnWidths: null,\n headerView: null,\n rowView: null,\n rowDataGenerator: null,\n dataURL: null,\n data: null,\n exportButtonURL: null,\n };\n\n constructor(props, context) {\n super(props, context);\n var defaults = {\n searchValue: \"\",\n sortValue: null,\n sortDirection: null,\n data: this.props.data,\n };\n\n if (this.props.data && this.props.rowDataGenerator) {\n defaults.rowData = this.props.rowDataGenerator(this.props.data)\n } else {\n defaults.rowData = this.props.data\n }\n\n this.state = defaults\n }\n\n componentDidMount() {\n if (!this.props.data) {\n this.getUpdatedList()\n } else {\n stickyTable()\n }\n if (this.props.defaultSort){\n this.setState({sortValue: this.props.defaultSort,\n sortDirection: \"ascending\"})\n }\n }\n\n componentWillUnmount() {\n }\n\n handleSearchChange = (e) => {\n this.setState({searchValue: e.target.value});\n };\n\n handleSearchKeyPress = (e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n }\n };\n\n updateSort = (newSortValue, newSortDirection) => {\n this.setState({ sortValue: newSortValue,\n sortDirection: newSortDirection });\n };\n\n getPage = (successCallback) => {\n $.ajax({\n type: \"GET\",\n url: this.props.dataURL,\n dataType: 'json',\n data: {},\n contentType: 'application/json',\n success: successCallback.bind(this),\n error: function(xhr, status, error) {\n console.log(xhr.responseText);\n console.log(status);\n console.log(error);\n }\n });\n };\n\n getUpdatedList = () => {\n this.getPage(function(data) {\n let rowData = data\n if (this.props.rowDataGenerator) {\n rowData = this.props.rowDataGenerator(data)\n }\n\n this.setState({data: data, rowData: rowData}, () => {stickyTable()});\n });\n };\n\n render() {\n let data = this.props.data || this.state.data\n let searchWidth = \"twocol\"\n let exportWidth = \"twocol txt-rt\"\n\n let controlPanel = null\n if (this.props.searchKeys.length > 0 || this.props.exportButtonURL || this.props.infoText || this.props.extraButtons) {\n let title = null\n if (this.props.title) {\n title = <div className=\"header-title\">\n <h3>{this.props.title}</h3>\n </div>\n }\n\n let infoText = null\n if (this.props.infoText) {\n infoText = <div key=\"info-text\" className=\"seventywidth txt-lft\" dangerouslySetInnerHTML={{__html:this.props.infoText}}/>\n searchWidth = \"twentywidth\"\n exportWidth = \"tenwidth txt-rt\"\n }\n\n let searchBox = null\n if (this.props.searchKeys.length > 0) {\n searchBox = <div key=\"search-box\" className={searchWidth}>\n <form className=\"\" role=\"search\">\n <input placeholder={this.props.searchPlaceholder} type=\"search\" className=\"searchform-short\" value={this.state.searchValue} onChange={this.handleSearchChange} onKeyPress={this.handleSearchKeyPress}/>\n </form>\n </div>\n }\n\n let exportButton = null\n if (this.props.exportButtonURL) {\n exportButton = <div key=\"export-button\" className={exportWidth}>\n <a href={this.props.exportButtonURL} className=\"report-button\">Export</a>\n </div>\n }\n\n let extraButtons = null\n if (this.props.extraButtons) {\n extraButtons = <div key=\"extra-buttons\" className=\"extra-buttons\">\n {this.props.extraButtons}\n </div>\n }\n\n controlPanel = <div className=\"header_controls\">\n {title}\n {searchBox}\n {infoText}\n {exportButton}\n {extraButtons}\n <div className=\"cleardiv\"></div>\n </div>\n }\n\n let table\n if (data === null) {\n table = <GenLoadingSpinner/>;\n } else {\n let newDirection = this.state.sortDirection === 'descending' ? 'ascending' : 'descending'\n\n let columnGroup = null\n if (this.props.columnWidths) {\n let calculatedWidths = this.props.columnWidths(this.state)\n columnGroup = <colgroup key=\"colgroup\">\n {calculatedWidths.map((width, i)=> {return <col key={width+'-'+i}style={{width: width + 'px'}}></col>})}\n </colgroup>\n }\n\n let header = this.props.headerView(this.state, this.updateSort.bind(this))\n let rowData = this.state.rowData\n\n if (this.props.searchKeys.length > 0 && this.state.searchValue && this.state.searchValue != \"\") {\n let lowerCaseSearchValue = this.state.searchValue.toLowerCase()\n let words = lowerCaseSearchValue.split(\" \").filter((word) => word != \"\")\n\n rowData = rowData.filter((rowDatum) => {\n return words.reduce((acc, word) => {\n return acc && (this.props.searchKeys.map((searchKey) => {\n return rowDatum[searchKey].toLowerCase().indexOf(word) >= 0\n }).reduce((res, item) => {\n return res || item\n }))\n }, true)\n })\n }\n\n if (this.state.sortValue && this.state.sortDirection) {\n rowData = rowData.sort((a, b) => {\n let compare\n if (this.state.sortValue == \"progress\") {\n if (a[\"progress\"][\"percent_complete\"] > b[\"progress\"].percent_complete) {\n compare = 1\n }\n else if (a[\"progress\"][\"percent_complete\"] < b[\"progress\"].percent_complete){\n compare = -1\n }\n else {\n compare = 0\n }\n }\n else if (this.state.sortValue == \"percentages\") {\n if (a[\"percentages\"].reduce((prev,next) => prev + next,0) > b[\"percentages\"].reduce((prev,next) => prev + next,0)) {\n compare = 1\n }\n else if (a[\"percentages\"].reduce((prev,next) => prev + next,0) < b[\"percentages\"].reduce((prev,next) => prev + next,0)) {\n compare = -1\n }\n else {\n compare = 0\n }\n }\n else {\n if (typeof a[this.state.sortValue] !== typeof b[this.state.sortValue]) {\n if (a[this.state.sortValue] === null) {\n compare = 1\n } else if (b[this.state.sortValue] === null) {\n compare = -1\n } else {\n if (typeof a[this.state.sortValue] === typeof b[this.state.sortValue]) {\n compare = 0\n } else if (typeof a[this.state.sortValue] < typeof b[this.state.sortValue]) {\n compare = -1\n } else {\n compare = 1\n }\n }\n } else {\n switch (typeof a[this.state.sortValue]) {\n case \"string\":\n compare = a[this.state.sortValue].localeCompare(b[this.state.sortValue])\n break;\n case \"number\":\n compare = a[this.state.sortValue] - b[this.state.sortValue]\n default:\n if (a[this.state.sortValue] === b[this.state.sortValue]) {\n compare = 0\n } else if (a[this.state.sortValue] < b[this.state.sortValue]) {\n compare = -1\n } else {\n compare = 1\n }\n }\n }\n }\n\n if (this.state.sortDirection === 'ascending') {\n compare = compare * -1\n }\n\n return compare\n })\n }\n\n\n let rows = rowData.map((rowDatum) => this.props.rowView(rowDatum))\n\n table = <div className=\"gen-sort-table data_table_wrapper\">\n <div className=\"table_content sticky-table\">\n <table>\n {columnGroup}\n <thead>\n {header}\n </thead>\n <tbody>\n {\n (rows.length < 1 && this.props.noRowsMessage) ?\n <tr>\n <td colSpan=\"100%\">{this.props.noRowsMessage}</td>\n </tr>\n :\n rows\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n\n return(\n <div className=\"report-panel\">\n {controlPanel}\n {table}\n </div>\n );\n }\n}\n","import React from 'react';\n\nimport GenButton from 'Gen/Button/component'\n\nexport default function GenToggleBar(props) {\n let toggleButtons = props.buttons.map((button) => {\n return(\n <GenButton\n {...button}\n disabled={props.disabled || button.disabled}\n />\n )\n })\n\n return(\n <div className=\"gen-toggle-bar\">\n {toggleButtons}\n </div>\n )\n\n}\n\nGenToggleBar.defaultProps = {\n disabled: false\n}\n","import React from 'react';\n\nimport GenToggleBar from 'Gen/ToggleBar/component'\n\nexport default function GenToggleView(props){\n let buttons = props.views.map(function(viewObj){\n return({\n ...viewObj,\n highlighted: viewObj.key === props.activeKey\n })\n })\n let toggleControls = (<GenToggleBar buttons={buttons} value={props.activeViewIndex}/>);\n\n let view = props.views.find((viewObj) => viewObj.key === props.activeKey)\n if (view) {\n view = view.view\n }\n\n return(\n <div className=\"gen-toggle-views\">\n <div className=\"gen-toogle-views-controls\">\n {toggleControls}\n </div>\n <div className=\"gen-toogle-views-view\">\n {view}\n </div>\n </div>\n );\n}\n","import React from 'react'\n\nexport default function IntegrationsTags(props) {\n let finalDiagnosesInfo = (props.final_diagnoses && props.final_diagnoses.length!==0) ?\n <div>\n <hr/>\n Final Diagnosis: {props.final_diagnoses.map((final_diagnosis) => {\n return <span key={final_diagnosis} className=\"final-diagnosis\">{final_diagnosis}</span>\n })}\n </div> : \"\"\n\n let clinicalExcellenceInfo = (props.clinical_excellence && props.clinical_excellence.length!==0) ?\n <div>\n <hr/>\n Clinical Excellence Curricular Thread: {props.clinical_excellence.map((obj) => {\n return <span key={obj} className=\"clinical-excellence\">{obj}</span>\n })}\n </div> : \"\"\n\n let basicScienceDisciplineInfo = (props.basic_science_disciplines && props.basic_science_disciplines.length!==0) ?\n <div>\n <hr/>\n Basic Science Curricular Thread: {props.basic_science_disciplines.map((obj) => {\n return <span key={obj} className=\"basic_science_discipline\">{obj}</span>\n })}\n </div> : \"\"\n\n return <>\n {finalDiagnosesInfo}\n {clinicalExcellenceInfo}\n {basicScienceDisciplineInfo}<br/>\n </>\n}","import * as React from \"react\";\nimport { batch } from \"react-redux\";\n\nimport { findNodeLineageByUid } from \"../../../helpers/Doc/Functions/base\";\nimport { scrollToLineage } from \"../../../helpers/Doc/scrollTo\";\nimport { findAllSelectionsByText } from \"../../../helpers/Doc/find\";\nimport { newChangeTextAndNodesChange } from \"../../../helpers/Doc/changes\";\nimport { FIND_AND_REPLACE } from \"../../../helpers/Doc/menu\";\nimport { full_url } from \"../../../helpers/url\";\n\nimport GenButton from \"../../Gen/Button/component\";\n\ninterface DocEditBarFindAndReplaceControlsProps {\n userContext: UserContext;\n editingContext: EditingContextInEditor;\n editingContextExtra: EditingContextExtra;\n mergedData: MergedData;\n};\n\nexport default function DocEditBarFindAndReplaceControls(props: DocEditBarFindAndReplaceControlsProps) {\n const {\n userContext,\n editingContext,\n editingContextExtra,\n mergedData,\n } = props;\n\n const currentMenu = editingContextExtra.currentMenu;\n if (currentMenu?.menu !== \"FIND_AND_REPLACE\") { return }\n\n const findScope = currentMenu.findScope || \"document\"\n const findText = editingContextExtra.findText || \"\";\n const replaceText = editingContextExtra.replaceText || \"\";\n const isFindButtonDisabled = findText.length < 3 || (currentMenu.findMatches?.length === 0);\n const isReplaceButtonDisabled = !currentMenu.findMatches || currentMenu.findMatches.length === 0;\n\n const handleFindScopeChange = (event: React.ChangeEvent<HTMLSelectElement>) => {\n editingContext.setCurrentMenu(FIND_AND_REPLACE, {findScope: event.target.value});\n }\n\n const handleFind = () => {\n switch(findScope){\n case \"global\" :\n fetch(full_url(`/versions/global_search.csv?search_text=${encodeURIComponent(findText)}`))\n .then(response => {\n if (response.ok) {\n return response.text();\n } else {\n throw new Error('Error');\n }\n })\n .then(data => {\n const globalSearchResultCount = data.match(/(?:\"(?:[^\"]|\"\")*\"|[^,\\n]*)(?:,(?:\"(?:[^\"]|\"\")*\"|[^,\\n]*))*\\n/g).length - 1;\n if (globalSearchResultCount > 0) {\n const csv = data;\n const csvFile = new Blob([csv], { type: 'text/csv' });\n const downloadLink = document.createElement(\"a\");\n downloadLink.download = \"Search Result.csv\";\n downloadLink.href = window.URL.createObjectURL(csvFile);\n downloadLink.style.display = \"none\";\n document.body.appendChild(downloadLink);\n downloadLink.click();\n alert(\"Check exported search result\");\n }\n editingContext.setCurrentMenu(FIND_AND_REPLACE, { findScope: \"global\", resultCount: globalSearchResultCount });\n })\n .catch(error => {\n alert(\"Error\");\n console.log(error);\n });\n break;\n\n case \"document\" :\n const newFindMatches = !currentMenu.findMatches\n ? findAllSelectionsByText(mergedData, findText)\n : currentMenu.findMatches.slice(1).concat([currentMenu.findMatches[0]]);\n\n if (newFindMatches.length > 0) {\n const firstMatch = newFindMatches[0];\n editingContext.setCurrentDocSelection(firstMatch);\n\n const lineage = findNodeLineageByUid(mergedData, firstMatch.start.uid);\n if (lineage) {\n scrollToLineage(lineage, userContext.addState);\n }\n } else {\n alert(\"No matches found\");\n }\n editingContext.setCurrentMenu(FIND_AND_REPLACE, {findMatches: newFindMatches});\n }\n }\n\n return (\n <div className=\"edit-bar-control-bar doc-edit-bar-find-and-replace-controls\">\n <GenButton\n name={<i className=\"fa fa-times\"></i>}\n onClick={() => editingContext.closeCurrentMenu()}\n small\n />\n <div className=\"edit-bar-control-bar-divider\"></div>\n <select onChange={handleFindScopeChange.bind(this)} style={{marginTop: \"20px\",height: \"35px\"}} value={findScope}>\n <option value=\"\">Find within...</option>\n <option value={\"document\"}>This document</option>\n <option value={\"global\"}>All courses</option>\n </select>\n <input\n type=\"text\"\n className=\"find-and-replace-input\"\n value={findText}\n onChange={(e) => {\n batch(() => {\n editingContextExtra.setFindText(e.target.value);\n if (currentMenu.findMatches) {\n editingContext.setCurrentMenu(FIND_AND_REPLACE);\n }\n });\n }}\n />\n <GenButton\n name=\"Find\"\n small\n disabled={isFindButtonDisabled}\n onClick={handleFind}\n />\n {\n findScope===\"document\" ?\n <div>{currentMenu.findMatches && <p style={{margin: \"10px\"}}>{currentMenu.findMatches.length > 0 ? `${currentMenu.findMatches.length} Found` : \"None Found\"}</p>}</div> :\n <div>{currentMenu.resultCount!=undefined && <p style={{margin: \"10px\"}}>{currentMenu.resultCount > 0 ? `${currentMenu.resultCount} Found` : \"None Found\"}</p>}</div>\n }\n <div className=\"edit-bar-control-bar-divider\"></div>\n {findScope===\"document\" && <>\n <input\n type=\"text\"\n className=\"find-and-replace-input\"\n value={replaceText}\n onChange={(e) => editingContextExtra.setReplaceText(e.target.value)}\n />\n <GenButton\n name=\"Replace\"\n small\n disabled={isReplaceButtonDisabled}\n onClick={() => {\n const toReplaceSelection = currentMenu.findMatches[0];\n\n const replaceStyledText = {\n text: replaceText,\n styleRanges: []\n }\n\n editingContext.addChange(newChangeTextAndNodesChange(toReplaceSelection, replaceStyledText));\n\n const newFindMatches = currentMenu.findMatches.slice(1);\n\n if (newFindMatches.length > 0) {\n const firstMatch = newFindMatches[0];\n editingContext.setCurrentDocSelection(firstMatch);\n\n const lineage = findNodeLineageByUid(mergedData, firstMatch.start.uid);\n if (lineage) {scrollToLineage(lineage, userContext.addState);}\n } else {\n alert(\"No more matches\");\n }\n\n editingContext.setCurrentMenu(FIND_AND_REPLACE, {findMatches: newFindMatches});\n }}\n />\n <GenButton\n name=\"Replace All\"\n small\n disabled={isReplaceButtonDisabled}\n onClick={() => {\n const allMatches = currentMenu.findMatches;\n\n const replaceStyledText = {\n text: replaceText,\n styleRanges: []\n }\n\n editingContext.addChanges(allMatches.map((toReplaceSelection) => newChangeTextAndNodesChange(toReplaceSelection, replaceStyledText)));\n\n alert(\"Replaced all.\");\n\n editingContext.setCurrentMenu(FIND_AND_REPLACE, { findMatches: [] });\n }}\n />\n </>}\n </div>\n );\n}\n","import { escapeRegExp } from \"lodash\";\n\nimport {\n nodeInlineContentKeys,\n docReduceBlockNodes\n} from \"./Functions/base\";\n\nexport function findAllSelectionsByText(baseNode: DocBlockNode<InlineNode>, findText: string) {\n const findRegExp = new RegExp(escapeRegExp(findText), \"ig\");\n\n return (docReduceBlockNodes(baseNode, (accum, node) => {\n nodeInlineContentKeys(node).forEach((inlineContentKey) => {\n const findRegExp = new RegExp(escapeRegExp(findText), \"ig\");\n\n let regResult;\n while ((regResult = findRegExp.exec(node[inlineContentKey].text)) !== null) {\n accum = accum.concat([{\n start: {\n uid: node.uid,\n contentKey: inlineContentKey,\n index: regResult.index,\n },\n end: {\n uid: node.uid,\n contentKey: inlineContentKey,\n index: regResult.index + findText.length,\n },\n }]);\n }\n });\n\n return (accum);\n }, []));\n}\n","import * as React from \"react\";\n\nimport { ChromePicker, ColorResult } from 'react-color'\n\nimport { newAddStyleChange } from \"../../../../helpers/Doc/changes\";\n\nimport GenButton from \"../../../Gen/Button/component\";\n\nimport {\n TEXT_COLOR_PICKER,\n} from \"../../../../helpers/Doc/menu\"\n\ninterface DocEditHeaderColorPickerProps {\n editingContext: EditingContextInEditor;\n editingContextExtra: EditingContextExtra;\n\n};\n\nexport default function DocEditHeaderColorPicker(props: DocEditHeaderColorPickerProps) {\n const {\n editingContext,\n editingContextExtra,\n } = props;\n\n const currentDocSelection = editingContextExtra.currentDocSelection\n\n const isColorPickerOpen = editingContextExtra.currentMenu?.menu === TEXT_COLOR_PICKER;\n const currentColor = (editingContextExtra?.activeStylesFromChanges?.color as StyleRangeColor)?.args?.hexCode || \"#333333\";\n\n const [newColor, setNewColor] = React.useState<string>();\n\n React.useEffect(() => {\n if (newColor) {\n setNewColor(undefined);\n }\n }, [currentDocSelection]);\n\n const selectedColor = newColor || currentColor;\n\n const handleChange = (color: ColorResult) => {\n setNewColor(color.hex);\n }\n\n const handleSave = () => {\n editingContext.addChange(\n newAddStyleChange(\n currentDocSelection,\n \"color\",\n {hexCode: selectedColor}\n ),\n currentDocSelection.variantId\n );\n\n editingContext.closeCurrentMenu();\n }\n\n const handleCancel = () => {\n editingContext.closeCurrentMenu();\n }\n\n let colorPicker;\n if (isColorPickerOpen) {\n colorPicker = (\n <div className=\"doc-edit-text-color-input-box\" onClick={(e) => {e.stopPropagation();}}>\n <ChromePicker\n color={ selectedColor }\n onChange={ handleChange }\n />\n <div className=\"text-color-input-buttons\">\n <GenButton\n name=\"Select\"\n highlighted\n small\n onClick={handleSave}\n />\n <GenButton\n name=\"Cancel\"\n highlighted\n small\n onClick={handleCancel}\n />\n </div>\n </div>\n );\n }\n\n return (\n <div\n key=\"color-style\"\n style={{\n backgroundColor: selectedColor,\n width: \"25px\",\n height: \"25px\",\n border: \"solid 2px white\",\n position: \"relative\"\n }}\n onClick={() => {\n if (editingContextExtra.currentMenu?.menu !== TEXT_COLOR_PICKER) {\n editingContext.setCurrentMenu(TEXT_COLOR_PICKER);\n } else {\n editingContext.closeCurrentMenu();\n }\n }}\n >\n {colorPicker}\n </div>\n )\n}\n","import * as React from \"react\";\n\nimport { newDeleteStyleChange, newAddStyleChange } from \"../../../../helpers/Doc/changes\";\n\nimport GenButton from \"../../../Gen/Button/component\";\n\ninterface DocEditHeaderLinkInputProps {\n editingContext: EditingContextInEditor;\n editingContextExtra: EditingContextExtra;\n};\n\ninterface DocEditHeaderLinkInputState {\n link: string;\n};\n\nexport default class DocEditHeaderLinkInput extends React.Component<DocEditHeaderLinkInputProps, DocEditHeaderLinkInputState> {\n constructor(props: DocEditHeaderLinkInputProps) {\n super(props);\n this.state = {\n link: (props.editingContextExtra?.activeStylesFromChanges?.link as StyleRangeLink)?.args?.url || \"\",\n };\n }\n\n handleChange(e: React.ChangeEvent<HTMLInputElement>) {\n this.setState({link: e.target.value});\n }\n\n render() {\n const {\n editingContext,\n editingContextExtra,\n } = this.props;\n\n return (\n <div className=\"doc-edit-link-input\">\n <div className=\"doc-edit-link-input-box\">\n <input\n key=\"link-input-input\"\n className=\"link-input\"\n type=\"text\"\n value={this.state.link}\n onChange={this.handleChange.bind(this)}\n placeholder=\"http://www.example.com\"\n autoFocus\n />\n <div className=\"link-buttons\">\n <div className=\"link-buttons-left\">\n <GenButton\n className=\"unlink-button\"\n name=\"Unlink\"\n highlighted\n small\n onClick={() => {\n const currentDocSelection = editingContextExtra.currentDocSelection\n\n editingContext.addChange(\n newDeleteStyleChange(\n currentDocSelection,\n \"link\"\n ),\n currentDocSelection.variantId\n );\n\n editingContext.closeCurrentMenu();\n }}\n />\n </div>\n <div className=\"link-buttons-right\">\n <GenButton\n className=\"save-button\"\n name=\"Save\"\n highlighted\n small\n disabled={this.state.link.length === 0}\n onClick={() => {\n let link = this.state.link;\n\n const currentDocSelection = editingContextExtra.currentDocSelection\n\n editingContext.addChange(\n newAddStyleChange(\n currentDocSelection,\n \"link\",\n {url: link}\n ),\n currentDocSelection.variantId\n );\n\n editingContext.closeCurrentMenu();\n }}\n />\n <GenButton\n className=\"cancel-button\"\n name=\"Cancel\"\n highlighted\n small\n onClick={() => { editingContext.closeCurrentMenu(); }}\n />\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\n","import * as React from \"react\";\n\nimport { newSetKeyValueChange } from \"../../../../helpers/Doc/changes\";\n\ninterface DocEditHeaderBooleanInputProps {\n contentKey: string;\n default: boolean;\n disableMetadataEdit: boolean;\n editingContext: EditingContextInEditor;\n label: string;\n uid: string;\n value: boolean;\n};\n\nexport default function DocEditHeaderBooleanInput(props: DocEditHeaderBooleanInputProps) {\n const value = typeof(props.value) === \"boolean\" ? props.value : props.default || false;\n\n return (\n <div className=\"doc-edit-header-input doc-edit-header-boolean-input\">\n <label htmlFor={props.label}>{props.label}</label>\n <input type=\"checkbox\" name={props.label} checked={value} disabled={props.disableMetadataEdit} onChange={() => {\n props.editingContext.addChange(newSetKeyValueChange(props.uid, props.contentKey, !value));\n }} />\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { filter } from \"lodash\";\n\nimport { newSetKeyValueChange } from \"../../../../helpers/Doc/changes\";\n\nimport GenButton from \"../../../Gen/Button/component\";\n\ninterface DocEnumTagsInputProps {\n contentKey: string;\n default: Array<string>;\n disableMetadataEdit: boolean;\n editingContext: EditingContextInEditor;\n label: string;\n options: Array<string>;\n tags: Array<string>;\n uid: string;\n};\n\ninterface DocEnumTagsInputState {\n editWindowOpen: boolean;\n};\n\nexport default class DocEnumTagsInput extends React.Component<DocEnumTagsInputProps, DocEnumTagsInputState> {\n constructor(props: DocEnumTagsInputProps) {\n super(props);\n this.state = {\n editWindowOpen: false,\n };\n }\n\n toggleEditWindow() {\n if (!this.props.disableMetadataEdit) {\n this.setState({editWindowOpen: !this.state.editWindowOpen});\n }\n }\n\n render() {\n const value = this.props.tags || this.props.default || [];\n\n let editWindow = null;\n if (this.state.editWindowOpen) {\n const options = this.props.options.map((optionName) => {\n const isChecked = value.includes(optionName);\n return (\n <div key={optionName} className=\"doc-edit-header-enum-tags-input-option\">\n <input type=\"checkbox\" name={optionName} checked={isChecked} onChange={() => {\n let newValue = value;\n if (isChecked) {\n newValue = filter(newValue, (val) => val !== optionName);\n } else {\n newValue.push(optionName);\n }\n\n this.props.editingContext.addChange(newSetKeyValueChange(this.props.uid, this.props.contentKey, newValue));\n }} />\n <label htmlFor={optionName}>{optionName}</label>\n </div>\n );\n });\n\n editWindow = (\n <div className=\"doc-edit-header-edit-window\" onClick={(e) => {e.stopPropagation();}}>\n {options}\n <GenButton\n className=\"close-edit-window\"\n name={\"Close\"}\n highlighted\n small\n onClick={this.toggleEditWindow.bind(this)}\n />\n </div>\n );\n }\n\n return (\n <div className=\"doc-edit-header-input doc-edit-header-enum-tags-input\" onClick={this.toggleEditWindow.bind(this)}>\n <label>{this.props.label}</label>\n <p className=\"doc-edit-header-options-input-summary\">{value.length > 0 ? value.join(\", \") : <span className=\"input-summary-empty\">None</span>}</p>\n {editWindow}\n </div>\n );\n }\n}\n","import * as React from \"react\";\n\nimport { newSetKeyValueChange } from \"../../../../helpers/Doc/changes\";\n\ninterface DocEditHeaderFalseOrNumberInputProps {\n contentKey: string;\n default: false | number;\n disableMetadataEdit: boolean;\n editingContext: EditingContextInEditor;\n label: string;\n uid: string;\n value: false | number;\n};\n\nexport default function DocEditHeaderFalseOrNumberInput(props: DocEditHeaderFalseOrNumberInputProps) {\n const value = typeof(props.value) === \"number\" ? props.value : props.default || false;\n\n return (\n <div className=\"doc-edit-header-input doc-edit-header-false-or-number-input\">\n <label htmlFor={props.label}>{props.label}</label>\n <input type=\"checkbox\" name={props.label} checked={value !== false} disabled={props.disableMetadataEdit} onChange={() => {\n props.editingContext.addChange(newSetKeyValueChange(props.uid, props.contentKey, value === false ? 1 : false));\n }} />\n {(value !== false) && <input type=\"text\" value={value || \"\"} onChange={(e) => {\n let newNumber = parseInt(e.target.value);\n if (isNaN(newNumber)) {\n newNumber = 0;\n }\n\n if (newNumber < 0) {\n newNumber = newNumber * -1;\n }\n\n props.editingContext.addChange(newSetKeyValueChange(props.uid, props.contentKey, newNumber));\n }} />\n }\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { newSetKeyValueChange } from \"../../../../helpers/Doc/changes\";\n\ninterface DocEditHeaderSelectInputProps {\n contentKey: string;\n default: string;\n disableMetadataEdit: boolean;\n editingContext: EditingContextInEditor;\n label: string;\n options: Array<string>;\n uid: string;\n value: string;\n};\n\nexport default function DocEditHeaderSelectInput(props: DocEditHeaderSelectInputProps) {\n const value = props.value || props.default || props.options[0];\n\n const options = props.options.map((optionName) => {\n return <option key={optionName} value={optionName}>{optionName}</option>;\n });\n\n return (\n <div className=\"doc-edit-header-input doc-edit-header-select-input\">\n <label>{props.label}</label>\n <div className=\"doc-edit-header-select-input-summary\">\n <select value={value} disabled={props.disableMetadataEdit} onChange={(event) => {\n props.editingContext.addChange(newSetKeyValueChange(props.uid, props.contentKey, event.target.value));\n }}>\n {options}\n </select>\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { newSetKeyValueChange } from \"../../../../helpers/Doc/changes\";\n\ninterface DocEditHeaderTextInputProps {\n beforeSaveFunction: (newValue: string) => string;\n contentKey: string;\n default: string;\n disableMetadataEdit: boolean;\n editingContext: EditingContextInEditor;\n label: string;\n uid: string;\n value: string;\n};\n\ninterface DocEditHeaderTextInputState {\n inputValue?: string;\n};\n\nexport default class DocEditHeaderTextInput extends React.Component<DocEditHeaderTextInputProps, DocEditHeaderTextInputState> {\n constructor(props: DocEditHeaderTextInputProps) {\n super(props);\n this.state = {};\n }\n\n componentWillUnmount() {\n this.handleBlur();\n }\n\n handleChange(e: React.ChangeEvent<HTMLInputElement>) {\n this.setState({inputValue: e.target.value});\n }\n\n handleBlur() {\n if (this.state.inputValue) {\n let newValue = this.state.inputValue;\n if (this.props.beforeSaveFunction) {\n newValue = this.props.beforeSaveFunction(newValue);\n }\n\n this.props.editingContext.addChange(newSetKeyValueChange(this.props.uid, this.props.contentKey, newValue));\n\n this.setState({inputValue: undefined});\n }\n }\n\n render() {\n let value = this.state.inputValue;\n if (value === undefined) { value = this.props.value || this.props.default; }\n\n return (\n <div className=\"doc-edit-header-input doc-edit-header-text-input\">\n <label>{this.props.label}</label>\n <input type=\"text\" value={value} disabled={this.props.disableMetadataEdit} onChange={this.handleChange.bind(this)} onBlur={this.handleBlur.bind(this)} />\n </div>\n );\n }\n}\n","import * as React from \"react\";\nimport { HotKeys } from \"react-hotkeys\";\n\nimport { filter, uniq, concat } from \"lodash\";\n\nimport { newSetKeyValueChange } from \"../../../../helpers/Doc/changes\";\n\nimport GenButton from \"../../../Gen/Button/component\";\n\ninterface DocEditHeaderTagsInputProps {\n contentKey: string;\n disableMetadataEdit: boolean;\n editingContext: EditingContextInEditor;\n label: string;\n tags: Array<string>;\n uid: string;\n};\n\ninterface DocEditHeaderTagsInputState {\n inputTag: string;\n editWindowOpen: boolean;\n\n};\n\nexport default class DocEditHeaderTagsInput extends React.Component<DocEditHeaderTagsInputProps, DocEditHeaderTagsInputState> {\n constructor(props: DocEditHeaderTagsInputProps) {\n super(props);\n this.state = {\n inputTag: \"\",\n editWindowOpen: false,\n };\n }\n\n handleChange(e: React.ChangeEvent<HTMLInputElement>) {\n this.setState({inputTag: e.target.value});\n }\n\n setTags(newTags: Array<string>) {\n this.props.editingContext.addChange(newSetKeyValueChange(this.props.uid, this.props.contentKey, newTags));\n }\n\n onMinusClick(toDeleteTag: string) {\n this.setTags(filter(this.props.tags, (tag) => {return tag !== toDeleteTag;}));\n }\n\n onPlusClick() {\n if (this.state.inputTag.length > 0) {\n this.setTags(uniq(concat(this.props.tags, this.state.inputTag)));\n this.setState({inputTag: \"\"});\n }\n }\n\n toggleEditWindow() {\n if (!this.props.disableMetadataEdit) {\n this.setState({editWindowOpen: !this.state.editWindowOpen});\n }\n }\n\n render() {\n let editWindow = null;\n if (this.state.editWindowOpen) {\n const keyHandlers = { return: (event: KeyboardEvent) => {this.onPlusClick(); return false;} };\n\n const tags = this.props.tags.map((tag) => {\n return (\n <span key={tag} className=\"doc-edit-tag-wrapper\">\n <span className=\"doc-edit-tag\">{tag}</span>\n <i className=\"fa fa-trash\" onClick={(e) => {this.onMinusClick(tag);}}></i>\n </span>\n );\n });\n\n const HotKeysAnyType: any = HotKeys; // TODO: Remove when able to import type from HotKeys\n editWindow = (\n <div className=\"doc-edit-header-edit-window\" onClick={(e) => {e.stopPropagation();}}>\n {tags}\n <HotKeysAnyType handlers={keyHandlers}>\n <div className=\"doc-edit-tag-wrapper\">\n <input\n className=\"doc-edit-tag-wrapper\"\n type=\"text\"\n value={this.state.inputTag}\n onChange={this.handleChange.bind(this)}\n placeholder=\"Add Class...\"\n />\n <GenButton\n className=\"tag-input-add-button\"\n name={<i className=\"fa fa-plus\"></i>}\n highlighted\n small\n disabled={this.state.inputTag.length === 0}\n onClick={this.onPlusClick.bind(this)}\n />\n </div>\n </HotKeysAnyType>\n <GenButton\n className=\"close-edit-window\"\n name={\"Close\"}\n highlighted\n small\n onClick={this.toggleEditWindow.bind(this)}\n />\n </div>\n );\n }\n\n return (\n <div className=\"doc-edit-header-input doc-edit-header-tags-input\" onClick={this.toggleEditWindow.bind(this)}>\n <label>{this.props.label}</label>\n <p className=\"doc-edit-header-tags-input-summary\">{this.props.tags.length > 0 ? this.props.tags.join(\", \") : <span className=\"input-summary-empty\">None</span>}</p>\n {editWindow}\n </div>\n );\n }\n}\n","import * as React from \"react\";\n\nimport { newSetKeyValueChange } from \"../../../../helpers/Doc/changes\";\n\nimport Select from 'react-select';\n\ninterface DocEditHeaderMultiSelectInputProps {\n contentKey: string;\n default: Array<string>;\n disableMetadataEdit: boolean;\n editingContext: EditingContextInEditor;\n label: string;\n options: Array<string>;\n tags: Array<string>;\n uid: string;\n};\n\nexport default function DocEditHeaderMultiSelectInput(props: DocEditHeaderMultiSelectInputProps) {\n const values = props.tags || props.default || [];\n\n const options = props.options.map((optionName) => {\n return {value: optionName, label: optionName};\n })\n\n return (\n <div className=\"doc-edit-header-input doc-edit-header-select-input\">\n <label style={{fontSize: '14px'}}>{props.label}</label>\n <div style={{width: '350px'}}>\n <Select\n isMulti\n options={options}\n defaultValue={options.filter(option=> values.includes(option[\"value\"]))}\n isDisabled={props.disableMetadataEdit}\n onChange={(onChangeValue)=>{\n let newValue: Array<string> = []\n if(onChangeValue) {\n newValue = onChangeValue.map((obj) => obj[\"value\"])\n }\n props.editingContext.addChange(newSetKeyValueChange(props.uid, props.contentKey, newValue));\n }}\n />\n </div>\n <br/>\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { toInteger } from \"lodash\";\n\nimport { getSubType } from \"../../../../helpers/Doc/Define/base\";\n\nimport DocEditHeaderBooleanInput from \"./BooleanInput\";\nimport DocEditHeaderEnumTagsInput from \"./EnumTagsInput\";\nimport DocEditHeaderFalseOrNumberInput from \"./FalseOrNumberInput\";\nimport DocEditHeaderSelectInput from \"./SelectInput\";\nimport DocEditHeaderTextInput from \"./TextInput\";\nimport DocEditHeaderTagsInput from \"./TagsInput\";\nimport DocEditHeaderMultiSelectInput from \"./MultiSelectInput\";\n\ninterface DocEditHeaderMetadataInputsProps {\n disableMetadataEdit?: boolean;\n editingContext: EditingContextInEditor;\n node: DocBlockNode<InlineNode>;\n onlyKeys?: Array<string>;\n userContext: UserContext;\n};\n\nfunction DocEditHeaderMetadataInputs(props: DocEditHeaderMetadataInputsProps) {\n const {\n disableMetadataEdit,\n editingContext,\n userContext,\n node,\n onlyKeys,\n } = props;\n\n const nodeType = getSubType(node);\n\n const nodeDefinition = editingContext.nodeDefinitions[nodeType].deref(editingContext.nodeDefinitions);\n\n let editWithInputs = null;\n if (nodeDefinition) {\n let editWithList = nodeDefinition.generateEditWithList();\n\n if (onlyKeys) {\n editWithList = editWithList.filter((editWithData) => onlyKeys.includes(editWithData[0]));\n }\n\n if (!userContext.permissions.editNodeInvisible) {\n editWithList = editWithList.filter((editWithData) => \"invisible\" !== editWithData[0]);\n }\n\n editWithInputs = editWithList.map((editWithData) => {\n const editKey = editWithData[0];\n const editWithName = editWithData[1];\n const editWithArgs = editWithData[2];\n const displayName = editWithData[3]\n\n const inAllEditHeaderInputs = {\n key: editKey,\n uid: node.uid,\n label: displayName || editKey,\n contentKey: editKey,\n ...editWithArgs,\n editingContext: editingContext,\n disableMetadataEdit: disableMetadataEdit,\n };\n\n switch (editWithName) {\n case \"booleanInput\":\n return (\n <DocEditHeaderBooleanInput\n {...inAllEditHeaderInputs}\n value={node[editKey]}\n />\n );\n case \"falseOrNumberInput\":\n return (\n <DocEditHeaderFalseOrNumberInput\n {...inAllEditHeaderInputs}\n value={node[editKey]}\n />\n );\n case \"textInput\":\n return (\n <DocEditHeaderTextInput\n {...inAllEditHeaderInputs}\n value={node[editKey]}\n />\n );\n case \"selectInput\":\n return (\n <DocEditHeaderSelectInput\n {...inAllEditHeaderInputs}\n value={node[editKey]}\n />\n );\n case \"integerTextInput\":\n return (\n <DocEditHeaderTextInput\n {...inAllEditHeaderInputs}\n value={node[editKey]}\n beforeSaveFunction={(a) => toInteger(a)}\n />\n );\n case \"tagsInput\":\n return (\n <DocEditHeaderTagsInput\n {...inAllEditHeaderInputs}\n tags={node[editKey] || []}\n />\n );\n case \"enumTagsInput\":\n return (\n <DocEditHeaderEnumTagsInput\n {...inAllEditHeaderInputs}\n tags={node[editKey] || []}\n />\n );\n case \"multiSelectInput\":\n return (\n <DocEditHeaderMultiSelectInput\n {...inAllEditHeaderInputs}\n tags={node[editKey] || []}\n />\n );\n default:\n return null;\n }\n });\n }\n\n return editWithInputs;\n}\n\nexport default React.memo(DocEditHeaderMetadataInputs);\n","import * as React from \"react\";\n\nimport { takeRightWhile } from \"lodash\";\n\nimport GenButton from \"../../Gen/Button/component\";\n\nimport DocEditHeaderMetadataInputs from \"./EditHeader/MetadataInputs\";\n\nimport { findNodePathByUid } from \"../../../helpers/Doc/Functions/base\";\nimport {\n newDeleteNodeChange,\n newMoveNodeUpChange,\n newMoveNodeDownChange,\n} from \"../../../helpers/Doc/changes\";\n\ninterface DocEditHeaderProps {\n editingContext: EditingContext;\n editingContextExtra: EditingContextExtra;\n userContext: UserContext;\n};\n\nexport default function DocEditHeader(props: DocEditHeaderProps) {\n const {\n editingContext,\n editingContextExtra,\n userContext,\n } = props;\n\n if (!editingContext.isEditing || !editingContextExtra.currentlyEditingNodeLineage) { return null; }\n if (!userContext.permissions.editContentNodes) { return null; }\n const nodeLineage = editingContextExtra.currentlyEditingNodeLineage.filter((node, index) => {\n // Check if the current node is of type 'paragraph'\n if (node.type === 'paragraph') {\n // Check if the previous node is of type 'listItem'\n const prevNode = editingContextExtra.currentlyEditingNodeLineage[index - 1];\n if (prevNode && prevNode.type === 'listItem') {\n return false; // Exclude this node\n }\n }\n return true; // Keep this node\n });\n\n if (nodeLineage.length <= 1) { return null; }\n\n let nodesSinceLastSection: Array<[DocBlockNode<any>, number]> = takeRightWhile(nodeLineage.map((node, index) => [node, index]), ([node, index]) => node.type !== \"section\"); // TODO: REMOVE ANY\n if (nodesSinceLastSection.length === 0) {\n const lastElementIndex = nodeLineage.length - 1;\n nodesSinceLastSection = [[nodeLineage[lastElementIndex], lastElementIndex]];\n }\n\n const toEditNodePairs = nodesSinceLastSection.filter(([node, index]) => ![\"tableRow\", \"tableColumn\", \"tableCell\"].includes(node.type));\n const indexOfToEditNodes = toEditNodePairs.map(([node, index]) => index);\n\n const allNodesEditHeaders = indexOfToEditNodes.map((indexOfToEditNode) => {\n const node = nodeLineage[indexOfToEditNode];\n\n if (node.type === \"section\" && node.level === 0 && !userContext.permissions.editPages) { return null; }\n\n let nonRootActionButtons = null;\n if (indexOfToEditNode > 0) {\n const parent = nodeLineage[indexOfToEditNode - 1];\n const parentUID = parent.uid;\n const pathFromParent = findNodePathByUid(parent, node.uid);\n\n const parentContentKey = pathFromParent[0];\n const displaySiblingIndex = pathFromParent[1];\n const displaySiblingCount = parent[parentContentKey].length;\n\n let displaySiblingBeforeIndex = 0;\n if (displaySiblingIndex > 0) {\n const displaySiblingBefore = parent[parentContentKey][displaySiblingIndex - 1];\n displaySiblingBeforeIndex = displaySiblingBefore.editIndex;\n }\n\n let displaySiblingAfterIndex = displaySiblingCount - 1;\n if (displaySiblingIndex + 1 !== displaySiblingCount) {\n const displaySiblingAfter = parent[parentContentKey][displaySiblingIndex + 1];\n displaySiblingAfterIndex = displaySiblingAfter.editIndex;\n }\n\n nonRootActionButtons = [\n <GenButton\n key=\"up-arrow\"\n name={<i className=\"fa fa-arrow-up\"></i>}\n highlighted\n small\n disabled={displaySiblingIndex === 0 || (node.type === \"section\" && node.level === 1 && !userContext.permissions.editPages)}\n onClick={() => {\n editingContext.addChange(newMoveNodeUpChange(node.variantUid || node.uid));\n }}\n />,\n <GenButton\n key=\"down-arrow\"\n name={<i className=\"fa fa-arrow-down\"></i>}\n highlighted\n small\n disabled={displaySiblingIndex + 1 === displaySiblingCount || (node.type === \"section\" && node.level === 1 && !userContext.permissions.editPages)}\n onClick={() => {\n editingContext.addChange(newMoveNodeDownChange(node.variantUid || node.uid));\n }}\n />,\n <GenButton\n key=\"trash\"\n name={<i className=\"fa fa-trash\"></i>}\n highlighted\n small\n disabled={!userContext.permissions.deleteContentNodes || (node.type === \"section\" && node.level === 1 && !userContext.permissions.deletePages)}\n onClick={() => {\n editingContext.clearCurrentDocSelection();\n editingContext.addChange(newDeleteNodeChange(node.variantUid || node.uid));\n }}\n />,\n ];\n }\n\n const editWithInputs = (\n <DocEditHeaderMetadataInputs\n editingContext={editingContext}\n userContext={userContext}\n node={node}\n />\n );\n\n let divider = null;\n if (indexOfToEditNode !== indexOfToEditNodes[indexOfToEditNodes.length - 1]) {\n divider = <div className=\"edit-bar-control-bar-divider\" />;\n }\n\n return (\n <div key={node.uid} className=\"edit-header-one-node\">\n <div className=\"edit-header-action-buttons\">\n <label className=\"edit-header-class-name\">{node.type} ({node.uid})</label>\n {nonRootActionButtons}\n </div>\n {editWithInputs}\n {divider}\n </div>\n );\n });\n\n const editHeader = (\n <div className=\"edit-header\">\n {allNodesEditHeaders}\n </div>\n );\n\n return (\n <div className=\"edit-bar-control-bar-nodes\">\n <div className=\"edit-bar-control-bar-divider\" />\n {editHeader}\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport * as R from \"ramda\";\n\nimport GenModal from \"../Gen/Modal/component\";\nimport GenButton from \"../Gen/Button/component\";\nimport { newSetKeyValueChange } from \"../../helpers/Doc/changes\";\n\nimport { CAUSAL_EXPLANATION_CLASSES, CORE_CONCEPT_CLASSES } from \"../../helpers/RO/content_type\";\n\ninterface ConvertToRLOModalProps {\n handleCancel: () => void;\n editingContextExtra: EditingContextExtra;\n editingContext: EditingContextInEditor;\n mappingContext: MappingContext;\n rlo: ReusableObject;\n};\n\nexport default function ConvertToRLOModal(props: ConvertToRLOModalProps) {\n const {\n handleCancel,\n editingContextExtra,\n editingContext,\n rlo,\n } = props\n\n const mappingContext = props.mappingContext as DocumentMappingContext;\n\n const disableFields = !!rlo\n const [name, setName] = React.useState(rlo?.name || '')\n const [description, setDescription] = React.useState(rlo?.description || '')\n const [learningObjectiveId, setLearningObjectiveId] = React.useState('')\n const [nameError, setNameError] = React.useState('')\n const [currentRO, setCurrentRO] = React.useState<DocSectionType<InlineNode> | null>(null)\n const [errorModalOpen, setErrorModalOpen] = React.useState(false)\n const [confirmationModalOpen, setConfirmationModalOpen] = React.useState(false)\n\n if (editingContextExtra.currentRO && (!currentRO || currentRO != editingContextExtra.currentRO)) {\n setCurrentRO(editingContextExtra.currentRO)\n editingContextExtra.setCurrentRO(editingContextExtra.currentRO)\n }\n\n const handleNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setName(e.target.value)\n setNameError(null);\n }\n\n const handleDescriptionChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setDescription(e.target.value)\n }\n\n const handleLearingObjectiveChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n setLearningObjectiveId(e.target.value)\n }\n\n const closeErrorModal = () => {\n setErrorModalOpen(false)\n }\n\n const learningObjectiveReusableObjects = mappingContext.learningObjectiveReusableObjects.filter(loro => loro.reusable_object.uid === currentRO?.uid)\n\n const handleContinue = (e: React.MouseEvent<HTMLAnchorElement>) => {\n if (!currentRO) { return; }\n\n const roData = {\n name,\n description,\n uid: currentRO.uid,\n learning_objective_id: parseInt(learningObjectiveId),\n }\n\n let loroToBeSaved: ProposedLearningObjectiveReusableObject = {\n learning_objective_id: parseInt(learningObjectiveId),\n reusable_object_id: (currentRO as any).roId, // TODO: Remove any\n }\n\n let newProposedLoros = mappingContext.proposedLearningObjectiveReusableObjects || [];\n newProposedLoros = newProposedLoros.concat([loroToBeSaved]);\n mappingContext.setProposedLearningObjectiveReusableObjects(newProposedLoros);\n\n editingContext.addChange(newSetKeyValueChange(currentRO.uid, \"roData\", roData))\n setConfirmationModalOpen(false)\n handleCancel()\n }\n\n const rloClasses = rlo?.classes || editingContextExtra?.currentRO?.classes || [];\n const shouldMapToLearningObjectives = R.isEmpty(R.intersection(rloClasses, [...CAUSAL_EXPLANATION_CLASSES, ...CORE_CONCEPT_CLASSES]))\n\n const handleSave = (e: React.MouseEvent<HTMLAnchorElement>) => {\n if (!name) {\n setNameError('Reusable Content name is required');\n } else if (shouldMapToLearningObjectives && learningObjectiveReusableObjects.length === 0 && !learningObjectiveId) {\n setErrorModalOpen(true)\n } else {\n setConfirmationModalOpen(true)\n }\n }\n\n return (<>\n <GenModal open >\n <div className=\"gen-modal-panel gen-modal-media-menu\" style={{marginTop: 90 + 'px'}}>\n <h4>Reusable Content details</h4>\n <div>\n <form action=\"\">\n {rlo && (<>\n <p style={{whiteSpace: 'normal'}}> Source Course: {rlo.document_sets?.name} </p>\n <p style={{whiteSpace: 'normal'}}> Source Case: {rlo.documents[0]?.title} </p>\n </>)}\n <div>\n Name:\n <input\n type=\"text\"\n name=\"name\"\n disabled={disableFields}\n placeholder=\"Enter Reusable Content Name\"\n onChange={handleNameChange}\n value={name}\n />\n <span style={{color: 'red'}}>{nameError}</span>\n </div>\n <div style={{display: 'grid'}}>\n Description:\n <textarea\n name=\"description\"\n disabled={disableFields}\n placeholder=\"Enter keyword description for Reusable Content\"\n onChange={handleDescriptionChange}\n value={description}\n />\n </div>\n {\n shouldMapToLearningObjectives &&\n <div style={{display: 'grid'}}>\n Map Reusable Content to Learning Objective(s):\n <select style={{width: '100%'}} value={learningObjectiveId} onChange={handleLearingObjectiveChange} disabled={learningObjectiveReusableObjects.length !== 0}>\n <option value=\"\">Select case learning objective</option>\n {mappingContext.learningObjectives.map((lo)=>(\n <option key={lo.id} value={lo.id}>{lo.name}</option>\n ))}\n </select>\n </div>\n }\n <div style={{display: 'grid'}}>\n {learningObjectiveReusableObjects.length !== 0 && <>\n <div>Reusable Content Learning Objective(s):</div>\n <p style={{whiteSpace: 'pre-wrap'}}>{learningObjectiveReusableObjects[0].learning_objective?.name}</p>\n </>}\n </div>\n </form>\n <div className=\"gen-button-left-group\">\n <GenButton name=\"Save\" highlighted small onClick={handleSave}/>\n <GenButton name=\"Cancel\" highlighted small onClick={handleCancel} />\n </div>\n </div>\n </div>\n </GenModal>\n <GenModal open={errorModalOpen} >\n <div className=\"gen-modal-panel gen-modal-media-menu\" style={{marginTop: 90 + 'px'}}>\n <div style={{\"textAlign\": \"center\"}}>\n <p style={{\"fontWeight\": \"bold\", \"fontSize\": \"1.2vw\"}}>\n Please map this reusable content to a case learning objective before saving.\n </p>\n <div><button onClick={closeErrorModal}>OK</button></div>\n </div>\n </div>\n </GenModal>\n <GenModal open={confirmationModalOpen} >\n <div className=\"gen-modal-panel gen-modal-media-menu\" style={{marginTop: 90 + 'px'}}>\n <div style={{\"textAlign\": \"center\"}}>\n <p>\n Click <b>Continue</b> to save this Reusable Content or <b>Cancel</b> to discard\n </p>\n <div className=\"gen-button-left-group\" style={{position: 'relative', marginLeft: 36 + '%'}}>\n <GenButton name=\"Continue\" highlighted small onClick={handleContinue}/>\n <GenButton name=\"Cancel\" highlighted small onClick={handleCancel} />\n </div>\n </div>\n </div>\n </GenModal>\n </>);\n}\n","import * as React from \"react\";\n\nconst randRGBLvl = () => {\n return `rgb(${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)})`;\n}\n\ninterface ActiveEditorProps {\n userContext: UserContext;\n editor: PressenceEditor;\n hasLock: boolean;\n hasLockInSession: boolean;\n lockIfFree: () => void;\n unlockIfOwned: () => void;\n forceLock: () => void;\n};\n\nexport default function ActiveEditor(props: ActiveEditorProps) {\n const {\n userContext,\n editor,\n hasLock,\n hasLockInSession,\n lockIfFree,\n unlockIfOwned,\n forceLock,\n } = props;\n\n const [color, setColor] = React.useState(randRGBLvl())\n const [isHovering, setIsHovering] = React.useState(false)\n\n const onClickAction = () => {\n if (editor.id === userContext.id) {\n if (hasLock) {\n if (hasLockInSession) {\n unlockIfOwned()\n } else {\n forceLock()\n }\n } else {\n lockIfFree()\n }\n } else {\n if (hasLock) {\n forceLock()\n }\n }\n }\n\n let extraMessage;\n if (editor.id === userContext.id && hasLock && !hasLockInSession) {\n extraMessage = <strong>(You hold the lock in different window. Click to claim here.)</strong>\n }\n\n return (\n <div className=\"locker\" onClick={onClickAction}>\n {hasLock && (\n <div className=\"lock-icon-wrapper\">\n <div className={`${ isHovering ? \"unlocked\" : \"locked\"}-icon`}>\n </div>\n </div>\n )}\n <div onMouseOver={() => setIsHovering(true)} onMouseLeave={() => setIsHovering(false)} className=\"active-editor\" style={{backgroundColor: color}}>\n <p className=\"editor-display\">{editor.display}</p>\n {isHovering && (\n <span className=\"editor-details\">\n {editor.email} {extraMessage}\n </span>\n )}\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport ActiveEditor from \"./ActiveEditors/ActiveEditor\";\n\nimport GenButton from \"../Gen/Button/component\";\n\ninterface ActiveEditorsProps {\n userContext: UserContext;\n activeEditors: Array<PressenceEditor>;\n lockState: LockState;\n lockIfFree: () => void;\n unlockIfOwned: () => void;\n forceLock: () => void;\n};\n\nexport default function ActiveEditors(props: ActiveEditorsProps) {\n const {\n userContext,\n activeEditors,\n lockState,\n lockIfFree,\n unlockIfOwned,\n forceLock,\n } = props;\n\n const lockIsLocked = lockState.lockUserId === null;\n\n return (\n <div className=\"active-editors-wrapper\">\n {activeEditors.map((editor) => (\n <ActiveEditor\n key={`versionEditor${editor.id}`}\n userContext={userContext}\n editor={editor}\n hasLock={editor.id === lockState.lockUserId}\n hasLockInSession={editor.id === lockState.lockUserId && userContext.sessionId === lockState.lockSessionId}\n lockIfFree={lockIfFree}\n unlockIfOwned={unlockIfOwned}\n forceLock={forceLock}\n />\n ))}\n { lockIsLocked && (\n <GenButton\n name=\"LOCK!\"\n className=\"highlighted small\"\n onClick={lockIfFree}\n />\n )}\n </div>\n )\n}\n","import * as React from \"react\";\n\nimport GenModal from \"../Gen/Modal/component\";\nimport ReusableObjectList from \"../ReusableObject/List/component\";\n\nimport {\n newAddTextNodesBeforeNodeChange,\n newAddTextAndNodesToNodeChange,\n} from \"../../helpers/Doc/changes\";\nimport { RLO_MODAL, LIST_RLO_MODAL } from \"../../helpers/Doc/menu\";\n\ninterface ListRLOModalProps {\n editingContextExtra: EditingContextExtra;\n editingContext: EditingContextInEditor;\n permissions: AqPermissions;\n};\n\nconst ListRLOModal = (props: ListRLOModalProps) => {\n const {\n editingContextExtra,\n editingContext,\n permissions\n } = props;\n\n const [rloModalOpen, setRloModalOpen] = React.useState(true);\n const [rlo, setRlo] = React.useState(null)\n const [addModalOpen, setAddModalOpen] = React.useState(false)\n const [showRLOResponse, setShowRLOResponse] = React.useState(null);\n\n React.useEffect(()=> {\n fetch('/reusable_objects/show_rlo_list')\n .then(res => res.json())\n .then(\n (response) => {\n setShowRLOResponse(response)\n },\n (error) => {\n console.error(error)\n }\n )\n }, [])\n\n const closeRloModal = () => {\n setRloModalOpen(false)\n }\n\n const handleAddModalOpen = (rlo) => {\n setRlo(rlo)\n setAddModalOpen(true)\n }\n\n const closeAddModal = () => {\n setRlo(null)\n setAddModalOpen(false)\n }\n\n const addModalContinue = () => {\n const currentMenu = editingContextExtra.currentMenu;\n if (currentMenu?.menu !== LIST_RLO_MODAL) { return }\n\n const node = {\n ...rlo.review_variant.change_data,\n roDocumentCount: (rlo.data.roDocumentCount || 1) + 1,\n }\n if (currentMenu.siblingUid) {\n editingContext.addChange(newAddTextNodesBeforeNodeChange(currentMenu.siblingUid, null, [node]))\n } else {\n editingContext.addChange(newAddTextAndNodesToNodeChange(currentMenu.uid, currentMenu.contentKey, null, [node]));\n }\n editingContextExtra.setCurrentRO(node)\n editingContext.setCurrentMenu(RLO_MODAL, {data: rlo, menu: RLO_MODAL})\n }\n\n return (\n <>\n <GenModal open={rloModalOpen} >\n <div className=\"gen-modal-panel gen-modal-panel-large gen-modal-media-menu\" style={{marginTop: 90 + 'px', width: 92 + '%', marginLeft: 20 + 'px'}}>\n <div style={{textAlign: \"end\"}}>\n <button onClick={closeRloModal}>X</button>\n </div>\n {showRLOResponse ? (<ReusableObjectList\n itemsURL={showRLOResponse.item_url}\n permissions={permissions}\n documentLookupTable={showRLOResponse.document_lookup_table}\n context=\"editor\"\n setAddModalOpen={handleAddModalOpen}\n />) : (<div>Loading...</div>)}\n </div>\n </GenModal>\n\n <GenModal open={addModalOpen} >\n <div className=\"gen-modal-panel gen-modal-media-menu\" style={{marginTop: 90 + 'px'}}>\n <div style={{textAlign: \"center\"}}>\n <div style={{marginBottom: \"20px\"}}>Click <b>Continue</b> to insert this Reusable Content to your document or <b>Cancel</b> to discard.</div>\n <button onClick={addModalContinue} style={{marginRight: \"20px\"}} >Continue</button>\n <button onClick={closeAddModal}>Cancel</button>\n </div>\n </div>\n </GenModal>\n </>\n );\n}\n\nexport default ListRLOModal;\n","import * as React from \"react\";\n\nimport { get } from \"lodash\";\n\nimport * as R from \"ramda\";\n\nimport GenButton from \"../../Gen/Button/component\";\n\nimport DocEditHeaderColorPicker from \"./NodeGeneralControls/ColorPicker\";\nimport DocEditHeaderLinkInput from \"./NodeGeneralControls/LinkInput\";\nimport DocEditHeader from \"./EditHeader\";\nimport ConvertToRLOModal from \"../ConvertToRLOModal\";\n\nimport ActiveEditors from \"../../Channels/ActiveEditors\";\n\nimport * as selection from \"../../../helpers/Doc/selection\";\n\nimport {\n EDIT_LINK,\n FIND_AND_REPLACE,\n NEW_COMMENT_THREAD,\n RLO_MODAL,\n} from \"../../../helpers/Doc/menu\"\n\nimport { LIST_RLO_MODAL } from \"../../../helpers/Doc/menu\";\nimport ListRLOModal from \"../ListRLOModal\";\n\nimport {\n newSetKeyValueChange,\n} from \"../../../helpers/Doc/changes\";\n\ninterface DocEditBarNodeGeneralControlsProps {\n documentContext: DocumentContext;\n editingContext: EditingContext;\n editingContextExtra: EditingContextExtra;\n mergedData: MergedData;\n userContext: UserContext;\n mappingContext: MappingContext;\n projectContext: ProjectContext;\n featureFlag: FeatureFlag\n};\n\nexport default function DocEditBarNodeGeneralControls(props: DocEditBarNodeGeneralControlsProps) {\n const {\n documentContext,\n editingContext,\n editingContextExtra,\n mergedData,\n userContext,\n mappingContext,\n projectContext,\n } = props;\n\n const {\n activeEditors,\n lockState,\n lockIfFree,\n unlockIfOwned,\n forceLock,\n } = editingContextExtra;\n\n let activeEditorsDisplay;\n if (editingContext.shouldShowEditor && activeEditors && lockState) {\n activeEditorsDisplay = (\n <ActiveEditors\n key=\"ActiveEditors\"\n userContext={userContext}\n activeEditors={activeEditors}\n lockState={lockState}\n lockIfFree={lockIfFree}\n unlockIfOwned={unlockIfOwned}\n forceLock={forceLock}\n />\n )\n }\n\n if (!editingContext.isEditing) {\n if (activeEditorsDisplay) {\n return (\n <div className=\"edit-bar-control-bar\">\n {activeEditorsDisplay}\n </div>\n );\n } else {\n return null;\n }\n }\n\n const styles: Array<StyleName> = [\n \"bold\",\n \"italic\",\n \"underline\",\n \"superscript\",\n \"subscript\",\n \"link\"\n ];\n\n const controls = [];\n\n styles.forEach((style) => {\n const isActiveStyle = get(editingContextExtra, \"activeStyles\", [] as Array<StyleName>).includes(style);\n const isLinkStyle = style === \"link\";\n\n if (isLinkStyle && editingContextExtra.currentMenu?.menu === EDIT_LINK) {\n controls.push(<DocEditHeaderLinkInput\n key=\"DocEditHeaderLinkInput\"\n editingContext={editingContext}\n editingContextExtra={editingContextExtra}\n />);\n }\n\n controls.push(<GenButton\n key={`${style}-style`}\n name={<i className={`fa fa-${style}`}></i>}\n highlighted={isActiveStyle}\n small\n disabled={!editingContextExtra.currentDocSelection || (isLinkStyle && selection.isCollapsed(editingContextExtra.currentDocSelection))}\n onClick={() => {\n if (isLinkStyle) {\n editingContext.setCurrentMenu(EDIT_LINK);\n } else {\n editingContextExtra.toggleStyle(style);\n }\n }}\n />);\n });\n\n controls.push(\n <DocEditHeaderColorPicker\n key=\"DocEditHeaderColorPicker\"\n editingContext={editingContext}\n editingContextExtra={editingContextExtra}\n />\n )\n\n controls.push(<div key=\"divider-1\" className=\"edit-bar-control-bar-divider\"></div>);\n\n controls.push(\n <GenButton\n key=\"Find/Replace\"\n name=\"Find/Replace\"\n small\n onClick={() => {\n editingContext.setCurrentMenu(FIND_AND_REPLACE);\n }}\n />,\n );\n\n controls.push(<div key=\"divider-2\" className=\"edit-bar-control-bar-divider\"></div>);\n\n // Disability checks for Inline/Node comments\n const tempForType: Array<any> = editingContextExtra.currentlyEditingNodeLineage || [] // TODO: Narrow down any\n const isDisabled =\n !userContext.permissions.createComments ||\n (editingContextExtra.currentMenu?.menu !== NEW_COMMENT_THREAD &&\n (!editingContextExtra.currentDocSelection || !selection.isInOneNode(editingContextExtra.currentDocSelection) || (selection.isCollapsed(editingContextExtra.currentDocSelection) && ![\"image\", \"audio\", \"video\"].includes(R.last(tempForType)?.type))));\n\n controls.push(\n <GenButton\n key=\"Add Comment\"\n name=\"Add Comment\"\n highlighted={editingContextExtra.currentMenu?.menu === NEW_COMMENT_THREAD}\n small\n disabled={isDisabled}\n onClick={() => {\n if (editingContextExtra.currentMenu?.menu === NEW_COMMENT_THREAD) {\n editingContext.closeCurrentMenu();\n } else {\n editingContext.setCurrentMenu(NEW_COMMENT_THREAD);\n }\n }}\n />,\n );\n\n if (documentContext.docType !== \"ReusableObject\" && userContext.permissions.createExistingContentRlo) {\n if (editingContextExtra.currentRO?.roData) {\n controls.push(\n <GenButton\n key=\"Undo RC\"\n name=\"Undo RC\"\n disabled={(editingContextExtra.currentRO?.roDocumentCount || 1) > 1}\n highlighted\n small\n onClick={() => {\n editingContext.addChange(newSetKeyValueChange(editingContextExtra.currentRO.uid, \"roData\", null))\n }}\n />,\n );\n } else {\n controls.push(\n <GenButton\n key=\"Make RC\"\n name=\"Make RC\"\n disabled={!editingContextExtra.currentRO}\n highlighted\n small\n onClick={() => {\n if (editingContextExtra.currentMenu?.menu === RLO_MODAL) {\n editingContext.closeCurrentMenu();\n } else {\n editingContext.setCurrentMenu(RLO_MODAL);\n }\n }}\n />,\n );\n }\n }\n\n if (activeEditorsDisplay) {\n controls.push(activeEditorsDisplay)\n }\n\n if (projectContext.activeMemberName) {\n controls.push(<span key=\"Workflow Editor\" style={{float: 'right', marginRight: '15px'}}><b>Current Workflow Editor is:</b> {projectContext.activeMemberName}</span>);\n } else if (projectContext.projectProductionAssociate) {\n controls.push(<span key=\"Project Production Associate\" style={{float: 'right', marginRight: '15px'}}><b>Project Production Associate is:</b> {projectContext.projectProductionAssociate}</span>);\n }\n\n return (\n <div>\n <div className=\"edit-bar-control-bar\">\n {controls}\n {editingContextExtra.currentMenu?.menu === LIST_RLO_MODAL && (\n <ListRLOModal\n editingContextExtra={editingContextExtra}\n editingContext={editingContext}\n permissions={userContext.permissions}\n />\n )}\n {editingContextExtra.currentMenu?.menu === RLO_MODAL && (\n <ConvertToRLOModal\n mappingContext={mappingContext}\n handleCancel={() => editingContext.closeCurrentMenu()}\n editingContextExtra={editingContextExtra}\n editingContext={editingContext}\n rlo={editingContextExtra.currentMenu.data}\n />\n )}\n {!props.featureFlag.new_landing_pages && (\n <DocEditHeader\n editingContext={editingContext}\n editingContextExtra={editingContextExtra}\n userContext={userContext}\n />\n )}\n </div>\n {props.featureFlag.new_landing_pages && (\n <div className=\"edit-bar-control-bar\">\n <DocEditHeader\n editingContext={editingContext}\n editingContextExtra={editingContextExtra}\n userContext={userContext}\n />\n </div>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport GenButton from \"../../Gen/Button/component\";\nimport GenPostButton from \"../../Gen/PostButton/component\";\n\nimport {full_url} from \"../../../helpers/url\";\nimport { startCase, lowerCase } from \"lodash\";\n\nimport {\n versionTypes,\n versionTypeShortName,\n versionTypeCssClassPrefix,\n versionPushButtonData,\n determineVersionType,\n publishVersionId,\n ongoingMaintenaceVersionId,\n scheduledReviewVersionId,\n} from \"../../../helpers/Doc/version_types\";\nimport { changesDisplayModes, isChangesDisplayMode } from \"../../../helpers/Doc/changes\";\nimport { displayModes, isDisplayMode } from \"../../../helpers/Doc/displayMode\";\nimport { trackChangesEditModes, isTrackChangesEditMode } from \"../../../helpers/Doc/trackChangesEditMode\";\n\nimport { MEDIA_MANAGER } from \"../../../helpers/Doc/menu\";\n\ninterface DocEditBarTopControlsProps {\n documentContext: DocumentContext;\n currentVersion: CurrentVersion;\n userContext: UserContext;\n displayContext: DisplayContext;\n editingContext: EditingContext;\n editingContextExtra: EditingContextExtra;\n featureFlag: FeatureFlag\n};\n\nexport default function DocEditBarTopControls(props: DocEditBarTopControlsProps) {\n const {\n documentContext,\n currentVersion,\n userContext,\n displayContext,\n editingContext,\n editingContextExtra,\n } = props;\n\n const permissions: AqPermissions = userContext.permissions || {};\n\n const versionType = determineVersionType(documentContext, currentVersion.id)\n const {pushButtonName, pushButtonConfirmationText, pushButtonPath, pushButtonReplaceableVariant} = versionPushButtonData(versionType)\n\n let pushButtonURL;\n if (documentContext.docType === \"ReusableObject\") {\n pushButtonURL = full_url(`/variants/${currentVersion.id}/replace?replaceable_variant=${pushButtonReplaceableVariant}`)\n } else {\n pushButtonURL = full_url(`/versions/${currentVersion.id}/${pushButtonPath}`)\n }\n\n let displayModeSelector =\n <select\n className=\"edit-bar-view-selector\"\n value={displayContext.displayMode}\n onChange={(e) => {isDisplayMode(e.target.value) && displayContext.setDisplayMode(e.target.value);}}\n >\n <option value={displayModes.STUDENT}>Student</option>\n <option value={displayModes.UNGATED}>Ungated</option>\n <option value={displayModes.FULL}>Full</option>\n <option value={displayModes.OUTLINE}>Outline</option>\n </select>\n\n if (!editingContext.shouldShowEditor) {\n // For adding content to the top toolbar in the normal document view mode.\n return(\n <>\n </>\n );\n } else {\n const publishPermission = documentContext.docType === \"ReusableObject\" ? permissions.publishMultiUseRlo : permissions.publish;\n\n return (\n <div>\n <div className=\"edit-bar-control-bar\">\n <h3 className={`edit-bar-version-type-header ${versionTypeCssClassPrefix(versionType)}-color`}>\n {versionTypeShortName(versionType)}\n </h3>\n <select\n className=\"edit-bar-view-selector\"\n value={currentVersion.id}\n onChange={(e) => {editingContextExtra.setVersionId(Number(e.target.value));}}\n >\n <option value={publishVersionId(documentContext)} key={\"Published\"}>Published</option>\n <option value={ongoingMaintenaceVersionId(documentContext)} key={\"Ongoing Maintenance\"}>Ongoing Maintenance</option>\n <option value={scheduledReviewVersionId(documentContext)} key={\"Scheduled Review\"}>Scheduled Review</option>\n </select>\n {displayModeSelector}\n <GenButton\n name={<i className=\"fa fa-undo\"></i>}\n highlighted={editingContextExtra.canUndo}\n disabled={!editingContext.isEditing || !editingContextExtra.canUndo}\n small\n onClick={editingContextExtra.undo}\n />\n <GenButton\n name={<i className=\"fa fa-redo\"></i>}\n highlighted={editingContextExtra.canRedo}\n disabled={!editingContext.isEditing || !editingContextExtra.canRedo}\n small\n onClick={editingContextExtra.redo}\n />\n <GenButton\n key={\"save-button\"}\n name={<i className=\"fa fa-save\"></i>}\n disabled={!editingContext.isEditing || !editingContextExtra.isActiveEditData}\n highlighted={editingContextExtra.isActiveEditData}\n small\n onClick={editingContextExtra.save}\n loading={editingContextExtra.isSyncing}\n />\n <GenButton\n key={\"auto-save-toggle-button\"}\n name={editingContextExtra.isAutoSaveOn ? <div key=\"auto-save-on\">Auto <i className=\"fa fa-save\"></i> On</div> : <div key=\"auto-save-off\">Auto <i className=\"fa fa-save\"></i> Off</div>}\n highlighted={editingContextExtra.isAutoSaveOn}\n small\n onClick={(e) => {editingContextExtra.toggleAutoSave();}}\n />\n <GenButton\n key=\"publish-button\"\n name=\"Publish\"\n disabled={!editingContext.isEditing || editingContextExtra.isActiveEditData || !publishPermission}\n highlighted={!editingContextExtra.isActiveEditData}\n small\n onClick={() => {editingContextExtra.publish();}}\n />\n { pushButtonName &&\n <GenPostButton\n name={pushButtonName}\n confirmMessage={pushButtonConfirmationText}\n disabled={!editingContext.isEditing || editingContextExtra.isActiveEditData || !publishPermission }\n highlighted={!editingContextExtra.isActiveEditData}\n small\n url={pushButtonURL}\n />}\n <GenButton\n name=\"Reset\"\n highlighted\n small\n onClick={userContext.resetState}\n />\n <GenButton\n name={<i className=\"fa fa-image\"></i>}\n disabled={!editingContext.isEditing || !permissions.viewMediaAssets}\n highlighted\n small\n onClick={(e) => {editingContext.setCurrentMenu(MEDIA_MANAGER, { mediaType: \"image\" });}}\n />\n <GenButton\n name={<i className=\"fa fa-music\"></i>}\n disabled={!editingContext.isEditing || !permissions.viewMediaAssets}\n highlighted\n small\n onClick={(e) => {editingContext.setCurrentMenu(MEDIA_MANAGER, { mediaType: \"audio\" });}}\n />\n <GenButton\n name={<i className=\"fa fa-video\"></i>}\n disabled={!editingContext.isEditing || !permissions.viewMediaAssets}\n highlighted\n small\n onClick={(e) => {editingContext.setCurrentMenu(MEDIA_MANAGER, { mediaType: \"video\" });}}\n />\n <GenButton\n name={<i className=\"fa fa-file-pdf\"></i>}\n disabled={!editingContext.isEditing || !permissions.viewMediaAssets}\n highlighted\n small\n onClick={(e) => {editingContext.setCurrentMenu(MEDIA_MANAGER, { mediaType: \"pdf\" });}}\n />\n { !props.featureFlag.new_landing_pages && (\n <select\n className=\"edit-bar-view-selector\"\n value={editingContextExtra.trackChangesEditMode}\n onChange={(e) => {isTrackChangesEditMode(e.target.value) && editingContextExtra.setTrackChangesEditMode(e.target.value);}}\n disabled={!editingContext.isEditing || permissions.allowedEditMode === \"Suggesting\"}\n >\n <option value={trackChangesEditModes.EDITING_MODE}>Editing Mode</option>\n <option value={trackChangesEditModes.SUGGESTING_MODE}>Suggesting Mode</option>\n </select>\n )}\n { !props.featureFlag.new_landing_pages && (\n <select\n className=\"edit-bar-view-selector\"\n value={editingContext.changesDisplayMode}\n onChange={(e) => {isChangesDisplayMode(e.target.value) && editingContextExtra.setChangesDisplayMode(e.target.value);}}\n disabled={versionType === versionTypes.PUBLISHED}\n >\n {Object.values(changesDisplayModes).map((changesDisplayMode) => {\n return <option value={changesDisplayMode} key={changesDisplayMode}>{startCase(lowerCase(changesDisplayMode))}</option>;\n })}\n </select>\n )}\n { !props.featureFlag.new_landing_pages && userContext.permissions.viewLinksReport && (\n <GenButton\n name=\"Links Report\"\n highlighted\n small\n confirmTitle=\"Just so you know\"\n confirmMessage=\"This report could take a few minutes to produce. You can monitor its completion on the My Reports page. Please note: Any changes made to hyperlinks will be reflected in reporting only after publishing.\"\n confirmOKText=\"OK\"\n href={`/reports/document_links/${documentContext.id}.csv`}\n />\n )}\n </div>\n {props.featureFlag.new_landing_pages && (\n <div className=\"edit-bar-control-bar\">\n <select\n className=\"edit-bar-view-selector\"\n value={editingContextExtra.trackChangesEditMode}\n onChange={(e) => {isTrackChangesEditMode(e.target.value) && editingContextExtra.setTrackChangesEditMode(e.target.value);}}\n disabled={!editingContext.isEditing || permissions.allowedEditMode === \"Suggesting\"}\n >\n <option value={trackChangesEditModes.EDITING_MODE}>Editing Mode</option>\n <option value={trackChangesEditModes.SUGGESTING_MODE}>Suggesting Mode</option>\n </select>\n <select\n className=\"edit-bar-view-selector\"\n value={editingContext.changesDisplayMode}\n onChange={(e) => {isChangesDisplayMode(e.target.value) && editingContextExtra.setChangesDisplayMode(e.target.value);}}\n disabled={versionType === versionTypes.PUBLISHED}\n >\n {Object.values(changesDisplayModes).map((changesDisplayMode) => {\n return <option value={changesDisplayMode} key={changesDisplayMode}>{startCase(lowerCase(changesDisplayMode))}</option>;\n })}\n </select>\n {userContext.permissions.viewLinksReport && (\n <GenButton\n name=\"Links Report\"\n highlighted\n small\n confirmTitle=\"Just so you know\"\n confirmMessage=\"This report could take a few minutes to produce. You can monitor its completion on the My Reports page. Please note: Any changes made to hyperlinks will be reflected in reporting only after publishing.\"\n confirmOKText=\"OK\"\n href={`/reports/document_links/${documentContext.id}.csv`}\n />\n )}\n </div>\n )}\n </div>\n );\n }\n}\n","import * as React from \"react\";\n\nimport GenModal from \"../../Gen/Modal/component\";\nimport FileUploader from \"../../FileUploader/component\";\n\nimport {\n getAssetAssociations,\n deleteAssetAssociation,\n} from \"../../../helpers/media_manager\";\n\nimport { MEDIA_MANAGER } from \"../../../helpers/Doc/menu\";\n\ninterface DocEditBarMediaManagerProps {\n createHandler?: (data: DigitalAsset) => void;\n currentVersion: CurrentVersion;\n deleteHandler?: (data: DigitalAsset) => void;\n documentContext: DocumentContext;\n editingContext: EditingContextInEditor;\n editingContextExtra: EditingContextExtra;\n mediaContext: MediaContext;\n replaceHandler?: (data: {new?: DigitalAsset; old?: DigitalAsset}) => void;\n userContext: UserContext;\n};\n\nexport default function DocEditBarMediaManager(props: DocEditBarMediaManagerProps) {\n const {\n documentContext,\n currentVersion,\n userContext,\n editingContext,\n editingContextExtra,\n mediaContext,\n createHandler,\n deleteHandler,\n replaceHandler,\n } = props;\n\n const currentMenu = editingContextExtra.currentMenu;\n if (currentMenu?.menu !== MEDIA_MANAGER) { return null; }\n\n const handleNewResourcesResponse = (data) => {\n if (data.digital_assets && data.digital_assets.length) {\n for (const asset of data.digital_assets) {\n createHandler(asset);\n }\n }\n };\n\n const handleResourceReplacement = (data) => {\n const assets = {};\n if (data.digital_assets && data.digital_assets.length) {\n assets[\"new\"] = data.digital_assets[0];\n }\n if (data.old_asset && data.old_asset !== \"null\") {\n assets[\"old\"] = data.old_asset;\n }\n replaceHandler(assets);\n };\n\n const deleteWithConfirmFunction = (e: React.MouseEvent<HTMLButtonElement>) => {\n const data = (e.target as any).dataset; // TODO: Remove any\n const externalId = data.id;\n const mediaType = data.media_type;\n\n const confirmAndDelete = (associations) => {\n let message = \"\";\n if (associations.length > 1) {\n message += `This ${mediaType} is also associated with the following:\\n `;\n for (const a of associations) {\n if (a.id !== documentContext.id) {\n message += `${a.type} with ID: ${a.id}\\n`;\n }\n }\n }\n message += \"Are you sure you would like to delete?\";\n const result = confirm(message);\n if (result) {\n deleteAssetAssociation({\n modelId: documentContext.id as any, // TODO: Remove any\n modelType: \"Document\",\n externalId: externalId,\n responseHandler: deleteHandler,\n });\n return true;\n } else {\n return false;\n }\n };\n\n return getAssetAssociations({\n externalId: externalId,\n responseHandler: confirmAndDelete,\n });\n };\n\n const makeCover = (e) => {\n const data = e.target.dataset;\n editingContextExtra.setVersionCoverImage(data.url);\n };\n\n const onClose = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n editingContext.closeCurrentMenu();\n if (currentVersion.coverImage\n && editingContextExtra.isAutoSaveOn) {\n editingContextExtra.save();\n }\n };\n\n const uploadButton = () => {\n if (!userContext.permissions.createMediaAssets) {\n return null;\n }\n const mediaType = currentMenu?.mediaType;\n return(\n <button className=\"upload-button\" onClick={(e) => {}}>\n Upload\n <FileUploader\n name={`document[${mediaType}_file]`}\n fileUploadPath={\"/api/v2/dam_file_uploads\"}\n extraData={{\"document[id]\": documentContext.id}}\n onSuccess={handleNewResourcesResponse}\n loadingCount={editingContextExtra.getUploadCountByMediaType(mediaType)}\n changeLoadingCountByValue={(countChange: number) => {\n editingContextExtra.changeUploadCountForMediaTypeByValue(mediaType, countChange);\n }}\n />\n </button>\n );\n }\n\n const captionsUploadButton = (item, replacing) => {\n if (!userContext.permissions.editMediaAssets) {\n return null;\n }\n const extraData = {\n \"document[caption_video_file_name]\": item.title,\n \"document[id]\": documentContext.id,\n };\n if (replacing) {\n extraData[\"document[old_caption_id]\"] = replacing.external_identifier;\n }\n return (\n <button className=\"upload-button\" onClick={(e) => {}}>\n {replacing ? \"Replace Caption\" : \"Upload New Caption\"}\n <FileUploader\n name={\"document[caption_file]\"}\n fileUploadPath={\"/api/v2/dam_file_uploads\"}\n onSuccess={handleResourceReplacement}\n loadingCount={editingContextExtra.getUploadCountByMediaType(`caption-${item.title}`)}\n changeLoadingCountByValue={(countChange: number) => {\n editingContextExtra.changeUploadCountForMediaTypeByValue(`caption-${item.title}`, countChange);\n }}\n extraData={extraData}\n />\n </button>\n );\n };\n\n const makeCoverButton = (item: DigitalAsset) => {\n if (item.distribution_url === currentVersion.coverImage || !userContext.permissions.editMediaAssets) {\n return null;\n }\n return (\n <div className=\"doc-media-menu-media-item-buttons\">\n <button data-url={item.distribution_url} onClick={makeCover}>Make Cover Image</button>\n </div>\n );\n };\n\n const deleteButton = (item: DigitalAsset) => {\n if (!userContext.permissions.deleteMediaAssets) {\n return null;\n }\n return <button data-id={item.external_identifier} data-media_type={item.media_type} onClick={deleteWithConfirmFunction}>Delete</button>\n }\n\n let title = \"\";\n let mediaItems = [];\n const mediaType = currentMenu?.mediaType;\n switch (mediaType) {\n case \"image\":\n title = \"Image Files\";\n mediaItems = mediaContext.images.map((item) => {\n return (\n <div key={item.external_identifier} className=\"doc-media-menu-media-item\">\n <img src={item.distribution_url} />\n <h6>{item.title}</h6>\n <div className=\"doc-media-menu-media-item-buttons-inline\">\n <div className=\"doc-media-menu-media-item-buttons\">\n {deleteButton(item)}\n </div>\n {makeCoverButton(item)}\n </div>\n <hr />\n </div>\n );\n });\n break;\n case \"audio\":\n title = \"Audio Files\";\n mediaItems = mediaContext.audios.map((item) => {\n return (\n <div key={item.external_identifier} className=\"doc-media-menu-media-item\">\n <audio preload=\"none\" controls>\n <source src={item.distribution_url} />\n </audio>\n <h6>{item.title}</h6>\n <div className=\"doc-media-menu-media-item-buttons\">\n {deleteButton(item)}\n </div>\n <hr />\n </div>\n );\n });\n break;\n case \"video\":\n title = \"Video Files\";\n mediaItems = mediaContext.videos.map((item) => {\n let captionsTrack = null;\n const captionItem = mediaContext.captions.filter((c)=>{return c.title === item.title;}).pop() || null;\n if (captionItem) {\n captionsTrack = <track key=\"en\" label=\"English\" kind=\"subtitles\" srcLang=\"en\" src={captionItem.distribution_url} />;\n }\n return (\n <div key={item.external_identifier} className=\"doc-media-menu-media-item\">\n <video crossOrigin=\"anonymous\" preload=\"none\" controls>\n <source src={item.distribution_url} />\n {captionsTrack}\n </video>\n <h6>{item.title}</h6>\n <div className=\"doc-media-menu-media-item-buttons\">\n {captionsUploadButton(item, captionItem)}\n {deleteButton(item)}\n </div>\n <hr />\n </div>\n );\n });\n break;\n case \"pdf\":\n title = \"PDF Files\";\n mediaItems = mediaContext.pdfs.map((item) => {\n return (\n <div key={item.external_identifier} className=\"doc-media-menu-media-item\">\n <embed width=\"191\" height=\"246\" src={item.distribution_url} type=\"application/pdf\" />\n <h6>{item.title}</h6>\n <h6>{item.distribution_url}</h6>\n <div className=\"doc-media-menu-media-item-buttons\">\n {deleteButton(item)}\n </div>\n <hr />\n </div>\n );\n });\n break;\n default:\n // TODO ADD ERROR\n return null;\n }\n\n let uploadingParagraph = null;\n if (editingContextExtra.getUploadCountByMediaType(mediaType) > 0) {\n uploadingParagraph = (\n <p>\n Your file is being uploaded; depending on the file size this might take some time.\n You can click the “Uploading†button to upload additional files or click the “Close†button to continue editing.\n The system will notify you when the upload is complete.\n </p>\n );\n }\n\n return (\n <GenModal open>\n <div className=\"gen-modal-panel gen-modal-media-menu\">\n <div className=\"gen-modal-header\">\n <div className=\"gen-modal-header-left\">\n <h1 className=\"title\">{title}</h1>\n </div>\n <div className=\"gen-modal-header-right\">\n {uploadButton()}\n <button className=\"close-button\" onClick={onClose}><i className={\"fa fa-times\"}></i></button>\n </div>\n </div>\n <hr />\n {uploadingParagraph}\n {mediaItems}\n </div>\n </GenModal>\n );\n}\n","import * as React from 'react'\n\nexport default class GenUpdateOnBlurTextField extends React.Component {\n constructor(props) {\n super(props);\n this.state = {}\n }\n\n componentWillUnmount() {\n this.handleBlur()\n }\n\n handleChange(e) {\n this.setState({inputValue: e.target.value})\n }\n\n handleBlur() {\n if (this.state.inputValue) {\n this.props.updateOnBlur(this.state.inputValue)\n this.setState({inputValue: null})\n }\n }\n\n render() {\n let value = this.state.inputValue || this.props.value\n\n return <input type=\"text\" value={value} onChange={this.handleChange.bind(this)} onBlur={this.handleBlur.bind(this)} placeholder={this.props.placeholder}/>\n }\n}\n","import * as React from \"react\";\n\nimport { startCase } from \"lodash\";\n\nimport { newSetKeyValueChange } from \"../../../helpers/Doc/changes\";\n\nimport GenModal from \"../../Gen/Modal/component\";\nimport GenToggleView from \"../../Gen/ToggleView/component\";\nimport GenUpdateOnBlurTextField from \"../../Gen/UpdateOnBlurTextField/component\";\n\nimport { MEDIA_PICKER } from \"../../../helpers/Doc/menu\";\n\ninterface EditBarMediaPickerProps {\n userContext: UserContext;\n editingContext: EditingContextInEditor;\n editingContextExtra: EditingContextExtra;\n mediaContext: MediaContext;\n};\n\nexport default function EditBarMediaPicker(props: EditBarMediaPickerProps) {\n const {\n userContext,\n editingContext,\n editingContextExtra,\n mediaContext,\n } = props;\n\n const currentMenu = editingContextExtra.currentMenu;\n\n if (currentMenu?.menu !== MEDIA_PICKER) { return null; }\n\n let innerContent;\n switch (currentMenu.mediaType) {\n case \"image\":\n const images = mediaContext.images.map((imageAsset) => {\n if(!userContext.permissions.editMediaAssets) {\n return (\n <div key={imageAsset.external_identifier}>\n <img src={imageAsset.distribution_url} />\n <p>{imageAsset.title}</p>\n </div>\n );\n }\n\n const makeImage = (e: React.MouseEvent<HTMLImageElement | HTMLButtonElement>) => {\n e.stopPropagation();\n\n if (editingContextExtra.currentMenuNode.type === \"section\") {\n editingContextExtra.setVersionCoverImage(imageAsset.distribution_url);\n editingContext.closeCurrentMenu();\n } else {\n editingContext.addChange(newSetKeyValueChange(currentMenu.uid, \"url\", imageAsset.distribution_url));\n editingContext.closeCurrentMenu();\n }\n };\n\n return (\n <div key={imageAsset.external_identifier}>\n <img onClick={makeImage} src={imageAsset.distribution_url} />\n <p>{imageAsset.title} <button onClick={makeImage}>Select</button></p>\n </div>\n );\n });\n\n innerContent = images.length > 0 ? images : <div key=\"no-images\"><h3>No Image Files</h3><h6>Upload files to Case</h6></div>;\n break;\n case \"audio\":\n const audios = mediaContext.audios.map((audioAsset) => {\n if(!userContext.permissions.editMediaAssets) {\n return (\n <div key={audioAsset.external_identifier}>\n <audio preload=\"none\" controls>\n <source src={audioAsset.distribution_url} />\n </audio>\n <p>{audioAsset.title}</p>\n </div>\n );\n }\n\n const makeAudio = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n editingContext.addChange(newSetKeyValueChange(currentMenu.uid, \"url\", audioAsset.distribution_url));\n editingContext.closeCurrentMenu();\n };\n\n return (\n <div key={audioAsset.external_identifier}>\n <audio preload=\"none\" controls>\n <source src={audioAsset.distribution_url} />\n </audio>\n <p>{audioAsset.title} <button onClick={makeAudio}>Select</button></p>\n </div>\n );\n });\n\n innerContent = audios.length > 0 ? audios : <div key=\"no-audios\"><h3>No Audio Files</h3><h6>Upload files to Case</h6></div>;\n break;\n case \"video\":\n if (editingContextExtra.currentMenuNode.type !== \"video\") { return }\n\n const updateOnBlur = (newValue) => {\n editingContext.addChange(newSetKeyValueChange(currentMenu.uid, \"uri\", newValue));\n editingContext.closeCurrentMenu();\n };\n\n const possibleVideos = mediaContext.videos.map((videoAsset) => {\n let captionsTrack = null;\n const captions = mediaContext.captions.filter((c)=>{return c.title === videoAsset.title;});\n if (captions.length) {\n let caption = null;\n if (captions.length > 1) {\n caption = captions.reduce((capn_1, capn) => (capn_1.external_identifier > capn.external_identifier) ? capn_1 : capn);\n } else {\n caption = captions[0];\n }\n captionsTrack = <track key=\"en\" label=\"English\" kind=\"subtitles\" srcLang=\"en\" src={caption.distribution_url} />;\n }\n\n if(!userContext.permissions.editMediaAssets) {\n return (\n <div key={videoAsset.external_identifier}>\n <video crossOrigin=\"anonymous\" preload=\"none\" controls>\n <source src={videoAsset.distribution_url} />\n {captionsTrack}\n </video>\n <p>{videoAsset.title}</p>\n </div>\n );\n }\n\n const makeVideo = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n\n editingContext.addChange(newSetKeyValueChange(currentMenu.uid, \"url\", videoAsset.distribution_url));\n editingContext.closeCurrentMenu();\n };\n\n return (\n <div key={videoAsset.external_identifier}>\n <video crossOrigin=\"anonymous\" preload=\"none\" controls>\n <source src={videoAsset.distribution_url} />\n {captionsTrack}\n </video>\n <p>{videoAsset.title} <button onClick={makeVideo}>Select</button></p>\n </div>\n );\n });\n\n innerContent = (\n <GenToggleView\n activeKey={editingContextExtra.currentMenuNode.source}\n views={[{\n key: \"local\",\n name: \"Local\",\n onClick: () => {editingContext.addChange(newSetKeyValueChange(editingContextExtra.currentMenuNode.uid, \"source\", \"local\"));},\n view: <div>\n {possibleVideos.length > 0 ? possibleVideos : <div key=\"no-videos\"><h3>No Video Files</h3><h6>Upload files to Case</h6></div> }\n </div>,\n },{\n key: \"youtube\",\n name: \"YouTube\",\n onClick: () => {editingContext.addChange(newSetKeyValueChange(editingContextExtra.currentMenuNode.uid, \"source\", \"youtube\"));},\n view: <div>\n <GenUpdateOnBlurTextField\n value={editingContextExtra.currentMenuNode.uri}\n updateOnBlur={updateOnBlur}\n placeholder={\"Insert the YouTube video ID. For example... dQw4w9WgXcQ\"}\n />\n </div>,\n },{\n key: \"vimeo\",\n name: \"Vimeo\",\n onClick: () => {editingContext.addChange(newSetKeyValueChange(editingContextExtra.currentMenuNode.uid, \"source\", \"vimeo\"));},\n view: <GenUpdateOnBlurTextField\n value={editingContextExtra.currentMenuNode.uri}\n updateOnBlur={updateOnBlur}\n placeholder={\"Insert the Vimeo video ID. For example... 123456789\"}\n />,\n }]}\n />\n );\n\n break;\n default:\n // Todo Add Error\n return null;\n }\n\n return (\n <GenModal open>\n <div className=\"gen-modal-panel gen-modal-media-picker\">\n <div className=\"gen-modal-header\">\n <div className=\"gen-modal-header-left\">\n <h1>Pick {startCase(currentMenu.mediaType)}</h1>\n </div>\n <div className=\"gen-modal-header-right\">\n <button onClick={(e) => {e.stopPropagation(); editingContext.closeCurrentMenu();}}>Cancel</button>\n </div>\n </div>\n <hr />\n {innerContent}\n </div>\n </GenModal>\n );\n}\n","import * as React from \"react\";\n\nimport GenModal from \"../Gen/Modal/component\";\n\nimport DocEditBarFindAndReplaceControls from \"./EditBar/FindAndReplaceControls\";\nimport DocEditBarNodeGeneralControls from \"./EditBar/NodeGeneralControls\";\nimport DocEditBarTopControls from \"./EditBar/TopControls\";\nimport DocEditBarMediaManager from \"./EditBar/MediaManager\";\nimport DocEditMediaPicker from \"./EditBar/MediaPicker\";\n\nimport { FIND_AND_REPLACE } from \"../../helpers/Doc/menu\";\n\ninterface DocEditBarProps {\n currentVersion: CurrentVersion;\n displayContext: DisplayContext;\n documentContext: DocumentContext;\n editingContext: EditingContext;\n editingContextExtra: EditingContextExtra;\n mappingContext: MappingContext;\n projectContext: ProjectContext;\n mediaContext: MediaContext;\n mergedData: MergedData;\n userContext: UserContext;\n featureFlag: FeatureFlag;\n};\n\nexport default function DocEditBar(props: DocEditBarProps) {\n const {\n editingContext,\n } = props;\n\n let editBarSideNavChanges = props.featureFlag.new_landing_pages ? {marginLeft: \"10px\"} : {}\n if (!editingContext.shouldShowEditor) {\n return (\n <div className=\"edit-bar\">\n <DocEditBarTopControls\n {...props}\n />\n </div>\n );\n } else if (props.editingContextExtra.currentMenu?.menu === FIND_AND_REPLACE) {\n return (\n <div className=\"edit-bar\">\n <DocEditBarFindAndReplaceControls\n {...props}\n editingContext={editingContext}\n />\n </div>\n );\n } else {\n return (\n <>\n <GenModal open={props.editingContextExtra.savingErrors.length > 0}>\n <div className=\"gen-modal-panel\">\n <p>{props.editingContextExtra.savingErrors}</p>\n </div>\n </GenModal>\n <DocEditBarMediaManager\n {...props}\n editingContext={editingContext}\n />\n <DocEditMediaPicker\n {...props}\n editingContext={editingContext}\n />\n <div className=\"edit-bar\" style={editBarSideNavChanges}>\n <DocEditBarTopControls\n {...props}\n />\n <DocEditBarNodeGeneralControls\n {...props}\n />\n </div>\n </>\n );\n }\n}\n","import * as React from \"react\";\n\nimport * as DocConvertRangeInlineJSON from \"../../../../helpers/Doc/Convert/RangeInlineJSON\";\n\nimport {\n compressRanges\n} from \"../../../../helpers/Doc/Functions/Range\";\n\ninterface DocStyledTextEditorProps {\n uid?: string;\n content: InlineNode;\n contentKey?: string;\n\n disableStyleTextEditing?: boolean;\n\n editingContext: EditingContext;\n\n independentlyEditable?: boolean;\n placeholder?: string;\n\n variantId?: number;\n\n returnPlainText?: boolean;\n};\n\nexport default function DocStyledTextEditor(props: DocStyledTextEditorProps) {\n const {\n content=\"\",\n contentKey,\n disableStyleTextEditing,\n editingContext,\n independentlyEditable,\n placeholder=\"EMPTY\",\n uid,\n variantId,\n } = props\n\n let isAllEmpty;\n if (typeof content !== \"string\" && content.inlineIrrlevantRanges) {\n const firstRange = compressRanges(content.inlineIrrlevantRanges.map(x => x.range))[0];\n if (firstRange) {\n isAllEmpty = firstRange.start === 0 && firstRange.end === content.text.length;\n }\n }\n\n const htmlContent = typeof content !== \"string\"\n ? DocConvertRangeInlineJSON.toHTML(content, editingContext.colorLookup)\n : content;\n\n let editableData = {}\n if (independentlyEditable) {\n if (!disableStyleTextEditing) {\n editableData = {\n contentEditable: true,\n \"data-is-independently-editable\": true,\n style: {\n \"userSelect\": \"auto\",\n \"WebkitUserSelect\": \"auto\",\n }\n };\n } else {\n editableData = {\n style: {\n \"userSelect\": \"text\",\n \"WebkitUserSelect\": \"text\",\n }\n };\n }\n }\n\n const sharedProps = {\n id: `${uid}//${contentKey}`,\n className: \"doc-styled-text\",\n 'data-is-styled-text': true,\n 'data-uid': uid,\n 'data-contentkey': contentKey,\n ...editableData,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"off\",\n spellCheck: false,\n draggable: false,\n onClick: (e: React.MouseEvent<HTMLSpanElement>) => e.stopPropagation(),\n }\n\n if (variantId) {\n sharedProps['data-variantid'] = variantId\n }\n\n if (isAllEmpty || htmlContent.length === 0) {\n return (\n <span\n {...sharedProps}\n className=\"doc-styled-text doc-styled-text-placeholder\"\n data-is-empty\n suppressContentEditableWarning\n >\n <span> </span>\n <span contentEditable={false} style={{\"userSelect\": \"auto\", \"WebkitUserSelect\": \"auto\"}}>{placeholder}</span>\n </span>\n );\n } else {\n return (\n <span\n {...sharedProps}\n className=\"doc-styled-text\"\n dangerouslySetInnerHTML={{__html: htmlContent.replace(/\\ $/, \" \").replace(/\\ </, \" <\")}}\n />\n );\n }\n}\n","import * as React from \"react\";\n\nimport DocStyledTextEditor from \"./StyledText/Editor\";\nimport * as DocConvertRangeInlineJSON from \"../../../helpers/Doc/Convert/RangeInlineJSON\";\nimport * as DocConvertHTML from \"../../../helpers/Doc/Convert/HTML\";\nimport { isRangeInlineJSON } from \"../../../helpers/Doc/Functions/RangeInlineJSON\";\nimport analyticsModule from \"../../../../application/analytics.js\";\n\nconst renderContent = (content: InlineNode, onClick?: React.MouseEventHandler<HTMLSpanElement>) => {\n if (typeof content === \"string\") {\n return <span key={content} onClick={onClick} dangerouslySetInnerHTML={{__html: content}} />;\n } else if(isRangeInlineJSON(content)) {\n return <span key={content.text} onClick={onClick} dangerouslySetInnerHTML={{__html: DocConvertRangeInlineJSON.toHTML(content)}} />;\n } else {\n return <span onClick={onClick} dangerouslySetInnerHTML={{__html: DocConvertHTML.fromInlineJson(content)}} />;\n }\n};\n\ninterface DocStyledTextProps {\n uid?: string;\n content: InlineNode;\n contentKey?: string;\n\n disableStyleTextEditing?: boolean;\n\n editingContext: EditingContext;\n documentContext?: DocumentContext;\n\n independentlyEditable?: boolean;\n placeholder?: string;\n\n readOnly?: boolean;\n\n variantId?: number\n\n returnPlainText?: boolean; // Can drop?\n};\n\nexport default function DocStyledText(props: DocStyledTextProps) {\n if (props.editingContext.isEditing && !props.readOnly) {\n return <DocStyledTextEditor {...props} />;\n } else {\n let onClick;\n const [courseNode, _] = Array.from(document.querySelectorAll(\".breadcrumb-header-panel a\"))\n const caseTitle = props.documentContext ? props.documentContext.title : ''\n\n if(String(props.content).startsWith('<a') && courseNode && courseNode.textContent == 'Educator Resources' ) {\n onClick = () => { analyticsModule.track(\"click_on_each_educator_resource_pdf\", { page: window.location.href, source: 'Educator Resources', case: caseTitle }) }\n } else if(String(props.content).includes('<a')) {\n onClick = () => { analyticsModule.track(\"clicks_on_external_resources\", { page: window.location.href, source: 'Case', case: caseTitle }) }\n }\n\n return renderContent(props.content, onClick);\n }\n}\n","import * as React from \"react\";\n\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\n\ninterface DocCDQFeaturesProps extends BlockNodeAll {\n type: string;\n uid: string;\n classes?: Array<string>;\n}\n\nexport default function DocCDQFeatures(props: DocCDQFeaturesProps) {\n if (!props.cdqFeatures || !props.editingContext.isEditing) { return null; }\n\n const cdqFeatureRows = props.cdqFeatures.map((cdqFeature, index) => {\n const includeInAllNodes = {\n key: cdqFeature.uid,\n documentContext: props.documentContext,\n currentVersion: props.currentVersion,\n editingContext: props.editingContext,\n userContext: props.userContext,\n };\n\n return (\n <li\n id={cdqFeature.uid}\n key={cdqFeature.uid}\n className=\"doc-cdq-key-feature-row\"\n style={backgroundStyleFromNode({...includeInAllNodes, ...cdqFeature})}\n >\n <span>\n <DocStyledText\n uid={cdqFeature.uid}\n content={cdqFeature.content}\n contentKey={\"content\"}\n editingContext={props.editingContext}\n independentlyEditable\n disableStyleTextEditing={props.disableStyleTextEditing}\n returnPlainText\n />\n </span>\n </li>\n );\n });\n\n return (\n <div\n className=\"doc-cdq-key-feature-rows\"\n contentEditable={false}\n >\n <h5>Features</h5>\n <ul>\n {cdqFeatureRows}\n </ul>\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\nimport analyticsModule from \"../../../../../application/analytics\";\n\nimport {\n find,\n includes,\n intersection,\n isEmpty,\n kebabCase,\n replace,\n upperCase,\n} from \"lodash\";\n\nimport IconCircleExpandImage from \"images/icon-circle-expand-1.svg\";\nimport IconCircleCollapseImage from \"images/icon-circle-collapse-1.svg\";\n\nimport MultiUseImage from \"images/multi-use.jpg\";\nimport SingleUseImage from \"images/single-use.jpg\";\n\nimport { OPENED_SECTION_LOG } from \"../../../../helpers/DocumentUserLog\";\n\nimport { MEDIA_PICKER } from \"../../../../helpers/Doc/menu\";\n\nimport DocStyledText from \"../../BlockNodeHelpers/StyledText\";\n\nimport { TEACHING_POINT_CLASSES } from \"../../../../helpers/RO/content_type\";\n\nimport AqButton from '../../../Aq/Button';\n\ninterface DocSectionHeaderProps extends DocSectionType<InlineNode>, BlockNodeAll {\n integrationInfo: IntegrationInfo;\n openSiblingSectionUIDs: Array<string>;\n paused?: boolean;\n roData: RoData;\n roDocumentCount: number;\n submitted?: boolean;\n};\n\nfunction DocSectionHeader(props: DocSectionHeaderProps) {\n const {\n currentVersion,\n editingContext,\n displayContext,\n userContext,\n classes,\n collapsed,\n collapsible,\n inactiveBool,\n level,\n title,\n uid,\n openSiblingSectionUIDs,\n disableStyleTextEditing,\n roData,\n roDocumentCount = 1,\n } = props;\n\n const onHeaderClick = () => {\n displayContext.setFocusedBookmarkUid(null);\n\n if (inactiveBool) { return null; }\n\n if (collapsible) {\n const newState = { [uid]: {collapsed: !collapsed} };\n\n if (collapsed) {\n userContext.logEvent(OPENED_SECTION_LOG, {node_uid: uid});\n\n if(classes && classes.includes(\"mod_map_card\")) {\n analyticsModule.track(\"open_mod_map_from_within_script\", { case: document.title, source: 'Integrated Illness Script', page: window.location.href })\n }\n\n if(classes && classes.includes(\"core_concept_header\")) {\n analyticsModule.track(\"open_core_concept\", { case: document.title, source: 'Integrated Illness Script', page: window.location.href })\n }\n\n if (currentVersion.onlyOneUncollapsedSection && level === 1 && openSiblingSectionUIDs && !displayContext.canBeEditing) {\n openSiblingSectionUIDs.forEach((uid) => {\n newState[uid] = {collapsed: true};\n });\n }\n\n if(classes && classes.includes(\"expert_comment\")) {\n analyticsModule.track(\"clicks_on_deep_dives\", { case: document.title, source: 'Case', page: window.location.href })\n }\n }\n\n userContext.addState(newState);\n }\n };\n\n let collapsedIndicator;\n if (collapsible) {\n if (!isEmpty(intersection([\"neutral_text\", \"core_concept_header\"], classes))) {\n if (collapsed) {\n collapsedIndicator = <span className=\"doc-section-collapsed-indicator\"><img src={IconCircleExpandImage} alt=\"collapse\" className=\"neutral-text-collapse-icon\" /></span>;\n } else {\n collapsedIndicator = <span className=\"doc-section-collapsed-indicator\"><img src={IconCircleCollapseImage} alt=\"expand\" className=\"neutral-text-collapse-icon\" /></span>;\n }\n } else {\n if (collapsed) {\n collapsedIndicator = <span className=\"doc-section-collapsed-indicator\"><span className=\"icon-open-box\"></span></span>;\n } else {\n collapsedIndicator = <span className=\"doc-section-collapsed-indicator\"><span className=\"icon-close-box\"></span></span>;\n }\n }\n }\n\n let coverImage;\n if (level === 0 && editingContext.isEditing) {\n const startCoverEditAction = (e: React.MouseEvent<HTMLDivElement>) => {\n e.stopPropagation();\n editingContext.setCurrentMenu(MEDIA_PICKER, { mediaType: \"image\", uid: uid });\n };\n\n coverImage = (\n <div className=\"doc-section-header-cover-image\" onClick={startCoverEditAction}>\n <img src={currentVersion.coverImage} />\n </div>\n );\n }\n\n let addLOButton;\n if (props?.featureFlag?.saq_phase_1 && editingContext.isEditing && classes?.includes(\"learning_objectives_card\")) {\n addLOButton = (\n <span style={{marginRight: '10px'}}>\n <AqButton\n className=\"pink outline small\"\n onClick={() => {\n editingContext.setCurrentMenu(\"LEARNING_OBJECTIVES_ADD_NEW\");\n }}\n >\n <div className=\"aq-button-text\">\n ADD LO\n </div>\n </AqButton>\n </span>\n );\n }\n\n let rightHeader = null;\n const cardClass = find(classes, (cl) => {return cl.includes(\"_card\");});\n if (cardClass) {\n const cardC = replace(cardClass, \"_card\", \"\");\n const cardText = upperCase(cardC);\n\n const cardIcon = <span className={kebabCase(`icon-${cardC}`)}></span>;\n\n rightHeader = (\n <div className=\"doc-section-header-right\">\n <h5 className=\"doc-section-header-right-title\">{cardText}{cardIcon}</h5>\n </div>\n );\n }\n\n let topper = null;\n if (!isEmpty(intersection([...TEACHING_POINT_CLASSES,\"expert_comment\"], classes))) {\n\n let icon = \"icon-star-circle\";\n let topperTitle = \"TEACHING POINT\";\n let faIcon = null;\n let topperCollapsedIndicator = null;\n let sectionTitle = null;\n\n if (includes(classes, \"underlying_core_concepts\")) {\n icon = \"\";\n faIcon = <i key=\"fa-list-ul\" className=\"fa fa-list-ul\"></i>;\n topperTitle = \"Underlying Core Concepts\";\n\n topper = (\n <div className=\"core-concepts-topper\">\n <span className={`core-concepts-topper-icon ${icon}`}>{faIcon}</span>\n <span className=\"core-concepts-topper-title\">{topperTitle} </span>\n </div>\n );\n } else if (includes(classes, \"expert_comment\")) {\n icon = \"\";\n faIcon = <i key=\"fa-anchor-icon\" className=\"fa fa-anchor\"></i>;\n topperTitle = \"Deep Dive\";\n sectionTitle = (\n <span className=\"teaching-point-section-topper-title\">\n <DocStyledText\n uid={uid}\n content={title}\n contentKey={\"title\"}\n editingContext={editingContext}\n placeholder={\"Enter Deep Dive title here\"}\n independentlyEditable\n disableStyleTextEditing={disableStyleTextEditing}\n />\n </span>\n );\n\n if (collapsible) {\n if (collapsed) {\n topperCollapsedIndicator = <img src={IconCircleExpandImage} alt=\"collapse\" className=\"expert-comment-collapse-icon\" />;\n } else {\n topperCollapsedIndicator = <img src={IconCircleCollapseImage} alt=\"expand\" className=\"expert-comment-collapse-icon\" />;\n }\n }\n }\n\n topper = (\n <div className=\"teaching-point-topper\" onClick={onHeaderClick}>\n <div className=\"teaching-point-topper-content\">\n {topperCollapsedIndicator}\n {roData && <img src={roDocumentCount > 1 ? MultiUseImage : SingleUseImage} height=\"25\" width=\"25\"/>}\n <span className={`teaching-point-topper-icon ${icon}`}>{faIcon}</span>\n <span className=\"teaching-point-topper-title\">{topperTitle}</span>\n {sectionTitle}\n </div>\n <div className=\"teaching-point-topper-border\" />\n </div>\n );\n }\n\n const sectionPlaceholder = () => {\n if (level === 1) {\n return \"Enter Page title here\";\n } else if (level > 1) {\n if (includes(classes, \"neutral_text\")) { return \"Enter Neutral text here\";}\n else if (includes(classes, \"core_concept_header\")) {return \"Enter Core Concept header here\"; }\n else if (includes(classes, \"dialog_box\")) { return \"Enter Dialog Box text here\"; }\n else if (includes(classes, \"alert\")) { return \"Enter Alert text here\"; }\n else if (includes(classes, \"clinical_reasoning\")) { return \"Enter Clinical Reasoning text here\"; }\n else if (includes(classes, \"clinical_skills\")) { return \"Enter Clinical Skills text here\"; }\n else if (includes(classes, \"knowledge\")) { return \"Enter Knowledge text here\"; }\n else if (includes(classes, \"management\")) { return \"Enter Management text here\"; }\n else if (includes(classes, \"principles\")) { return \"Enter Principles text here\"; }\n else if (includes(classes, \"studies\")) { return \"Enter Studies text here\"; }\n else return \"Enter Section text here\";\n } else {\n return \"Enter Section text here\";\n }\n };\n\n return (\n <div\n id={`${uid}_header`}\n className={classNames(\"doc-section-header\", { \"display-root\": level === 0 })}\n onClick={onHeaderClick}\n >\n {topper}\n <div className=\"doc-section-header-banner\">\n <h1 className=\"doc-section-header-title\">\n {coverImage}\n {collapsedIndicator}\n <span>\n <DocStyledText\n uid={uid}\n content={title}\n contentKey={\"title\"}\n placeholder={sectionPlaceholder()}\n editingContext={editingContext}\n independentlyEditable\n disableStyleTextEditing={disableStyleTextEditing}\n />\n </span>\n </h1>\n <span style={{marginRight: '10px'}}>\n {addLOButton}\n </span>\n {rightHeader}\n </div>\n </div>\n );\n}\n\nexport default React.memo(DocSectionHeader);\n","import * as React from \"react\";\nimport { isNumber, keyBy } from \"lodash\";\nimport * as R from \"ramda\";\nimport * as classNames from \"classnames\";\n\nimport {\n findNode,\n docMapAllNodes\n} from \"../../../helpers/Doc/Functions/base\";\nimport {\n newAddTextNodesBeforeNodeChange,\n newAddTextAndNodesToNodeChange,\n} from \"../../../helpers/Doc/changes\";\nimport { isCurrentlyEditing } from \"../../../helpers/Doc/currentlyEditing\";\nimport { ADD_NODE } from \"../../../helpers/Doc/menu\";\nimport { getSubType } from \"../../../helpers/Doc/Define/base\";\nimport generateUUID from \"../../../helpers/generateUUID\";\nimport { LIST_RLO_MODAL } from \"../../../helpers/Doc/menu\";\n\nimport { DocBlockNodesProps } from \"../BlockNodes\"\n\nconst QUESTION_NODE_TYPES = [\n \"category_matcher_question\",\n \"free_text_question\",\n \"mcq_diff_diagnosis\",\n \"mcq_feq\",\n \"mcq_multiple\",\n \"mcq_no_best\",\n \"mcq_single\",\n \"summary_statement\",\n \"cdq_question\",\n]\n\ninterface DocAddNodeProps {\n currentMenu?: DocMenu;\n editIndex?: number;\n parentContentKey: string;\n parentNode: DocBlockNodesProps;\n siblingUid?: string;\n localClipboard?: LocalClipboardData;\n shouldHaveSpace: boolean;\n\n documentContext: DocumentContext;\n editingContext: EditingContext;\n userContext: UserContext;\n};\n\nfunction DocAddNode(props: DocAddNodeProps) {\n const {\n currentMenu,\n documentContext,\n userContext,\n editIndex,\n editingContext,\n parentContentKey,\n parentNode,\n siblingUid,\n localClipboard,\n shouldHaveSpace,\n } = props\n\n if (!editingContext.isEditing) { return null; }\n if (\n (\n !userContext.permissions.createContentNodes ||\n (parentNode.type === \"section\" && parentNode.level === 0 && !userContext.permissions.createPages)\n ) && (\n documentContext.kind !== \"assessment_question_mcq\" ||\n !userContext.permissions.editMediaAssets ||\n parentNode.type !== \"section\" ||\n !parentNode.classes?.includes(\"question_vignette\")\n )\n ) { return null; }\n\n const classes = classNames(\n \"doc-add-node\",\n {\"level-one\": parentNode.type === \"section\" && parentNode.level === 0},\n );\n\n const style = {marginLeft: (parentNode.type === \"section\" && parentNode.level === 0 && documentContext.docType !== \"ReusableObject\") ? \"20px\" : \"0px\"};\n\n const index = isNumber(editIndex) ? editIndex + 1 : 0;\n\n let addNodeMenu;\n const isOpen = currentMenu?.menu === ADD_NODE && isCurrentlyEditing(currentMenu, { menu: ADD_NODE, uid: parentNode.uid, contentKey: parentContentKey, index: index });\n\n if (isOpen) {\n const parentType = getSubType(parentNode);\n const nodeDefinition = editingContext.nodeDefinitions[parentType].deref(editingContext.nodeDefinitions);\n const parentDisplayName = nodeDefinition.displayName(editingContext.nodeDefinitions);\n\n let addText = `Add Content to ${parentDisplayName}`;\n if (parentNode.type === \"section\") {\n addText = (parentNode.level === 0 && documentContext.docType !== \"ReusableObject\") ? \"Add Page\" : addText;\n } else if (parentNode.type === \"tableCell\") {\n addText = \"Add Table Content\";\n }\n\n const options = nodeDefinition.objectModel[parentContentKey].generateOptions(editingContext.nodeDefinitions);\n const optionsMap = keyBy(options, (option) => {\n return option.description(editingContext.nodeDefinitions);\n });\n let selectOptionSummaries = Object.keys(optionsMap).map((optionName) => {\n const displayName = optionsMap[optionName].displayName(editingContext.nodeDefinitions);\n return [displayName, optionName];\n }).sort();\n\n if (!userContext.permissions.insertRloToDocuments) {\n selectOptionSummaries = selectOptionSummaries.filter(([optionTitle, optionKey]) => \"RLOModal\" !== optionKey )\n }\n\n const selectOptions = selectOptionSummaries.map(([displayName, optionName]) => {\n return <option value={optionName} key={optionName}>{displayName}</option>;\n });\n\n if (localClipboard) {\n selectOptions.unshift(\n <option value=\"PASTE_CONTENT\" key=\"PASTE_CONTENT\">PASTE CONTENT</option>\n );\n }\n\n const handleSelectChange = (selectNode: React.ChangeEvent<HTMLSelectElement>) => {\n const name = selectNode.target.value;\n\n if (name === \"RLOModal\") {\n editingContext.setCurrentMenu(LIST_RLO_MODAL, {...currentMenu, menu: LIST_RLO_MODAL})\n } else if (name === \"PASTE_CONTENT\") {\n if (localClipboard) {\n const typesToAdd = localClipboard.map(node => getSubType(node));\n const allowableTypes = options.map(option => option.refName);\n\n if (!R.isEmpty(R.intersection(QUESTION_NODE_TYPES, allowableTypes))) {\n allowableTypes.push(\"question\");\n }\n\n let canAddContent = R.isEmpty(R.difference(typesToAdd, allowableTypes));\n\n if (canAddContent) {\n // Remove Extra Data\n let cleanedLocalClipboard = localClipboard.map(node => docMapAllNodes(node, (nodeP) => ({...nodeP, uid: generateUUID()})));\n\n if (currentMenu.siblingUid) {\n editingContext.addChange(newAddTextNodesBeforeNodeChange(currentMenu.siblingUid, null, cleanedLocalClipboard))\n } else {\n editingContext.addChange(newAddTextAndNodesToNodeChange(currentMenu.uid, currentMenu.contentKey, null, cleanedLocalClipboard));\n }\n } else {\n alert(\"Content type not allowed\");\n }\n }\n editingContext.closeCurrentMenu();\n } else {\n const option = optionsMap[name];\n const newNode = option.generate(editingContext.nodeDefinitions, {});\n\n if (currentMenu.siblingUid) {\n editingContext.addChange(newAddTextNodesBeforeNodeChange(currentMenu.siblingUid, null, [newNode]))\n } else {\n editingContext.addChange(newAddTextAndNodesToNodeChange(currentMenu.uid, currentMenu.contentKey, null, [newNode]));\n }\n editingContext.closeCurrentMenu();\n }\n\n };\n\n addNodeMenu = (\n <div className=\"doc-add-node-menu\" contentEditable={false}>\n <h4>{addText}</h4>\n <select onChange={handleSelectChange}>\n <option value=\"Pick an item\" key=\"Pick an item\">--Pick an item--</option>\n {selectOptions}\n </select>\n </div>\n );\n }\n\n return (\n <div className={classes} style={style} contentEditable={false}>\n {\n shouldHaveSpace && (\n <div className=\"doc-add-node-space\">\n \n </div>\n )\n }\n <div\n className=\"doc-add-node-tag\"\n contentEditable={false}\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (isOpen) {\n editingContext.closeCurrentMenu();\n } else {\n editingContext.setCurrentMenu(ADD_NODE, {\n uid: parentNode.uid,\n contentKey: parentContentKey,\n index: index,\n siblingUid: siblingUid\n });\n }\n }}\n >\n <i className={`fa fa-${isOpen ? \"times\" : \"plus\"}`}></i>\n </div>\n {addNodeMenu}\n </div>\n );\n}\n\nexport default React.memo(DocAddNode);\n","import { reduce } from \"lodash\";\n\nexport function isCurrentlyEditing(currentlyEditing, possibleCurrentlyEditing) {\n return !!currentlyEditing && reduce(possibleCurrentlyEditing, (result, value, key) => result && currentlyEditing[key] === value, true);\n}\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\nimport analyticsModule from \"../../../../application/analytics.js\";\n\ninterface DocBookmarkProps {\n uid: string;\n bookmarked?: boolean;\n\n currentVersion: CurrentVersion;\n userContext: UserContext;\n displayContext: DisplayContext;\n documentContext: DocumentContext;\n};\n\nexport default function DocBookmark(props: DocBookmarkProps) {\n const {\n currentVersion,\n userContext,\n uid,\n bookmarked,\n displayContext,\n documentContext,\n } = props;\n\n if (currentVersion.disableBookmarks || displayContext.canBeEditing || displayContext.isEmbeded) { return null; }\n\n const onClick = (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n const newBookmarkState = !bookmarked;\n\n userContext.addState({\n [uid]: { bookmarked: newBookmarkState },\n });\n\n displayContext.setFocusedBookmarkUid(newBookmarkState ? uid : null);\n\n analyticsModule.track('use_bookmark_feature_on_the_page', { page: window.location.href, source: 'Case', case: documentContext.title})\n\n e.stopPropagation();\n };\n\n return (\n <div\n id={`bookmark ${uid}`}\n className={classNames(\"doc-bookmark-button\", {bookmarked: bookmarked})}\n onClick={onClick}\n contentEditable={false}\n >\n <div className=\"icon-bookmark\" />\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { NOTES } from \"../../../reducers/ui/reasoningTool\";\n\nimport * as classNames from \"classnames\";\nimport generateUUID from \"../../../helpers/generateUUID\";\n\ninterface DocNoteProps {\n noteUid?: string;\n uid: string;\n\n displayContext: DisplayContext;\n userContext: UserContext;\n};\n\nexport default function DocNote(props: DocNoteProps) {\n const {\n displayContext,\n noteUid,\n uid,\n userContext,\n } = props;\n\n if (displayContext.canBeEditing || displayContext.isEmbeded) { return null; }\n\n const onClick = (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n if (noteUid) {\n userContext.deleteNote(noteUid);\n displayContext.setFocusedBookmarkUid(null);\n } else {\n const newUid = generateUUID();\n userContext.addNote(newUid, {notedNodeUid: uid});\n displayContext.togglePanel(NOTES);\n displayContext.panelNodeEditStart(newUid);\n displayContext.setFocusedBookmarkUid(uid);\n }\n\n e.stopPropagation();\n };\n\n return (\n <div\n id={`note${uid}`}\n className={classNames(\"doc-note-button\", {noted: noteUid})}\n onClick={onClick}\n contentEditable={false}\n >\n <div className=\"icon-notes\" />\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocBookmark from \"../BlockNodeHelpers/Bookmark\";\nimport DocNote from \"../BlockNodeHelpers/Note\";\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\n\nimport GenButton from \"../../Gen/Button/component\";\n\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\nimport { MEDIA_PICKER } from \"../../../helpers/Doc/menu\";\n\ninterface DocAudioProps extends DocAudioType<InlineNode>, BlockNodeAll {}\n\nfunction DocAudio(props: DocAudioProps) {\n const {\n disableStyleTextEditing,\n editingContext,\n source,\n title,\n uid,\n userContext,\n } = props;\n\n switch (source) {\n case \"local\":\n return (\n <div\n id={props.uid}\n data-is-node\n data-uid={props.uid}\n className={classNames(\"doc-audio\", \"doc-audio-local\", props.uid, {\"focused-bookmark\": props.isFocusedBookmark && !props.simple})}\n contentEditable={false}\n >\n <div className=\"doc-audio-wrapper-outer\">\n <div className=\"doc-audio-wrapper-inner\">\n <div className=\"comment-container\" style={backgroundStyleFromNode(props)}>\n <audio key={props.url} preload=\"none\" controls>\n <source src={props.url} />\n </audio>\n </div>\n {editingContext.isEditing && userContext.permissions.viewMediaAssets && <GenButton\n key=\"picker-button\"\n className=\"doc-audio-picker-button\"\n name={<i className=\"fa fa-music\"></i>}\n highlighted\n small\n onClick={(e) => {\n editingContext.setCurrentMenu(MEDIA_PICKER, { mediaType: \"audio\", uid: uid });\n e.stopPropagation();\n }}\n />}\n </div>\n </div>\n {(typeof title === \"string\" && title.length > 0) || editingContext.isEditing && (\n <figcaption>\n <DocStyledText\n uid={uid}\n content={title}\n contentKey={\"title\"}\n placeholder={\"Add Audio text here\"}\n editingContext={editingContext}\n independentlyEditable\n disableStyleTextEditing={disableStyleTextEditing}\n />\n </figcaption>\n )}\n <DocBookmark {...props} />\n <DocNote {...props} />\n </div>\n );\n default:\n Rollbar.warning(`DocAudio does not recognize source of type ${props.source}`);\n return null;\n }\n}\n\nexport default React.memo(DocAudio);\n","import { mergeStates } from \"./documentUserState\";\n\nimport { full_url } from \"../url\";\n\nconst STATE_ACTIONS = [\n \"setNodeInactive\",\n \"setNodeInvisible\",\n \"setNodeKVPair\",\n \"startTimer\",\n]\n\nconst CALLBACK_ACTIONS = [\n \"scrollTo\",\n];\n\ninterface HandleActionProps {\n displayContext: DisplayContext\n userContext: UserContext;\n}\n\nexport function handleActions(actions: Array<DocAction>, props: HandleActionProps) {\n if (props.displayContext) {\n props.displayContext.setFocusedBookmarkUid(null);\n }\n\n const stateActions = actions.filter((action) => {\n return (STATE_ACTIONS.indexOf(action.action) >= 0);\n });\n\n const newStates = stateActions.reduce((acc, action) => {\n switch (action.action) {\n case \"setNodeInactive\":\n return (mergeStates(acc, {\n [action.arguments.uid]: {\n inactive: action.arguments.value,\n },\n }));\n case \"setNodeInvisible\":\n return (mergeStates(acc, {\n [action.arguments.uid]: {\n invisible: action.arguments.value,\n },\n }));\n case \"cmeRedirect\":\n window.location.href = \"/users/cme_redirect\";\n\n return (1);\n case \"setNodeKVPair\":\n return (mergeStates(acc, {\n [action.arguments.uid]: {\n [action.arguments.key]: action.arguments.value,\n },\n }));\n case \"startTimer\":\n return (mergeStates(acc, {\n [action.arguments.uid]: {\n currentTimeSegmentStart: Math.floor(new Date().getTime() / 1000),\n },\n }));\n default:\n Rollbar.warning(`handleActions does not recognize Callback Action of type ${action.action}`);\n }\n }, {});\n\n\n const callbackActions = actions.filter((action) => {\n return (CALLBACK_ACTIONS.indexOf(action.action) >= 0);\n });\n\n const callbacks = callbackActions.map((action) => {\n switch (action.action) {\n case \"scrollTo\":\n return () => {\n setTimeout(()=> {\n const el = document.getElementsByClassName(action.arguments.uid)[0];\n if (el) {\n window.scrollTo(0, window.scrollY + el.getBoundingClientRect().top - 125);\n }\n }, 100);\n };\n default:\n Rollbar.warning(`handleActions does not recognize Callback Action of type ${action.action}`);\n }\n }).filter((callback): callback is () => void => !!callback);\n\n props.userContext.addState(newStates, () => {\n callbacks.forEach((callback) => callback());\n });\n\n const otherActions = actions.filter((action) => {\n return ((STATE_ACTIONS.concat(CALLBACK_ACTIONS)).indexOf(action.action) < 0);\n });\n\n otherActions.forEach((action) => {\n switch (action.action) {\n case \"openExternalLink\":\n window.window.open(action.arguments.url,\"_blank\");\n break;\n case \"openInternalLink\":\n window.window.open(full_url(action.arguments.path), \"_blank\");\n break;\n case \"submitExam\":\n props.userContext.submitExam(\"Your exam has been successfully submitted\");\n break;\n default:\n Rollbar.warning(`handleActions does not recognize Other Action of type ${action.action}`);\n }\n });\n}\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\n\nimport { handleActions } from \"../../../helpers/Doc/handleActions\";\n\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\nimport analyticsModule from \"../../../../application/analytics.js\";\n\ninterface DocButtonProps extends DocButtonType<InlineNode>, BlockNodeAll {}\n\nfunction DocButton(props: DocButtonProps) {\n const onClick = () => {\n if (!props.inactiveBool) {\n handleActions(props.onClick, props);\n if (props.title == 'Submit') {\n const caseName = props.documentContext.title\n analyticsModule.track('complete_saqs', { page: window.location.href, source: 'Case', case: caseName});\n }\n }\n };\n\n if(props.classes?.includes(\"case_summary_button\")) {\n return <></>;\n }\n\n if(props.classes?.includes(\"finish_case_button\")) {\n // TODO FIX: hangeActions should not be called in render!!!\n handleActions(props.onClick, props);\n }\n\n return (\n <div\n id={props.uid}\n data-is-node\n data-uid={props.uid}\n className={classNames(\"doc-button-slice\", props.uid, {inactive: props.inactiveBool})}\n style={backgroundStyleFromNode(props)}\n contentEditable={false}\n >\n <button className=\"doc-button\" onClick={onClick}>\n <DocStyledText\n uid={props.uid}\n content={props.title}\n contentKey={\"title\"}\n editingContext={props.editingContext}\n readOnly\n disableStyleTextEditing={props.disableStyleTextEditing}\n />\n </button>\n </div>\n );\n}\n\nexport default React.memo(DocButton);\n","import * as React from \"react\";\n\ninterface DocGradedFeedbackBannerProps {\n type: \"correct\" | \"partial\" | \"incorrect\" | \"no-single-answer\" | \"no-grade\";\n}\n\nexport default function DocGradedFeedbackBanner(props: DocGradedFeedbackBannerProps) {\n switch (props.type) {\n case \"correct\":\n return (\n <div className=\"doc-graded-feedback-banner correct\">\n <span className=\"doc-graded-feedback-banner-icon icon-star\"></span>\n <span className=\"doc-graded-feedback-banner-text\">CORRECT</span>\n </div>\n );\n case \"partial\":\n return (\n <div className=\"doc-graded-feedback-banner partial\">\n <span className=\"doc-graded-feedback-banner-icon icon-warning\"></span>\n <span className=\"doc-graded-feedback-banner-text\">PARTIALLY CORRECT</span>\n </div>\n );\n case \"incorrect\":\n return (\n <div className=\"doc-graded-feedback-banner incorrect\">\n <span className=\"doc-graded-feedback-banner-icon icon-warning\"></span>\n <span className=\"doc-graded-feedback-banner-text\">INCORRECT</span>\n </div>\n );\n case \"no-single-answer\":\n return (\n <div className=\"doc-graded-feedback-banner no-single-answer\">\n <span className=\"doc-graded-feedback-banner-icon icon-star\"></span>\n <span className=\"doc-graded-feedback-banner-text\">THERE IS NO SINGLE BEST ANSWER</span>\n </div>\n );\n case \"no-grade\":\n default:\n return (\n <div className=\"doc-graded-feedback-banner not-graded\">\n <span className=\"doc-graded-feedback-banner-icon icon-star\"></span>\n <span className=\"doc-graded-feedback-banner-text\">NOT GRADED</span>\n </div>\n );\n }\n}\n","import * as React from \"react\";\n\nimport {\n filter,\n includes,\n keys,\n mapValues,\n pickBy,\n} from \"lodash\";\n\nimport * as classNames from \"classnames\";\n\nimport DocGradedFeedbackBanner from \"./CategoryMatcher/GradedFeedbackBanner\";\n\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\n\nimport { newSetKeyValueChange, backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\nimport * as DocConvertPlainText from \"../../../helpers/Doc/Convert/PlainText\";\n\nconst addItemToCategory = (mapping: Record<string, Array<string>>, categoryUID: string, itemUID: string) => {\n let newMapping = {...mapping};\n\n newMapping = mapValues(newMapping, (categoryArray) => {\n return filter(categoryArray, (itemUid) => itemUID !== itemUid);\n });\n\n if (newMapping[categoryUID]) {\n newMapping[categoryUID] = newMapping[categoryUID].concat(itemUID);\n } else {\n newMapping[categoryUID] = [itemUID];\n }\n\n return newMapping;\n};\n\ninterface DocCategoryMatcherProps extends DocCategoryMatcherType<InlineNode>, BlockNodeAll {}\n\nfunction DocCategoryMatcher(props: DocCategoryMatcherProps) {\n const {\n uid,\n answer,\n contentCategories,\n contentItems,\n inactiveBool,\n graded,\n } = props;\n\n const value = props.value || {};\n\n const contentItemsExpanded = contentItems.map((contentItem) => {\n const categoryItemValue = keys(\n pickBy(\n value,\n (contentItemArray) => includes(contentItemArray, contentItem.uid),\n ),\n )[0] || \"default\";\n\n const categoryItemAnswer = keys(\n pickBy(\n answer,\n (contentItemArray) => includes(contentItemArray, contentItem.uid),\n ),\n )[0];\n\n const isCorrect = categoryItemValue === categoryItemAnswer;\n\n return ({\n ...contentItem,\n categoryItemValue,\n categoryItemAnswer,\n isCorrect,\n });\n });\n\n const rows = contentItemsExpanded.map((contentItem, index) => {\n const includeInAllNodes = {\n key: contentItem.uid,\n documentContext: props.documentContext,\n currentVersion: props.currentVersion,\n editingContext: props.editingContext,\n userContext: props.userContext,\n };\n\n const selectOptions = contentCategories.map((contentCategory) => {\n return (\n <option value={contentCategory.uid} key={contentCategory.uid}>\n {DocConvertPlainText.fromAnyType(contentCategory.content)}\n </option>\n );\n });\n\n const addDocumentUserState = (event: React.ChangeEvent<HTMLSelectElement>) => {\n const newValue = addItemToCategory(value, event.target.value, contentItem.uid);\n\n props.userContext.addState({[uid]: {value: newValue}});\n };\n\n const updateAnswer = (event: React.ChangeEvent<HTMLSelectElement>) => {\n const {\n editingContext,\n } = props;\n\n const newAnswer = addItemToCategory(props.answer, event.target.value, contentItem.uid);\n\n if (editingContext.isEditing === true) {\n editingContext.addChange(newSetKeyValueChange(uid, \"answer\", newAnswer));\n }\n event.stopPropagation();\n };\n\n const answer = filter(contentCategories, (contentCategory) => {\n return (contentCategory.uid === contentItem.categoryItemAnswer);\n })[0];\n\n return (\n <div\n key={contentItem.uid}\n id={contentItem.uid}\n className={classNames(\"doc-category-matcher-row\", uid)}\n style={backgroundStyleFromNode({...includeInAllNodes, ...contentItem})}\n >\n <span>\n <DocStyledText\n uid={contentItem.uid}\n content={contentItem.content}\n contentKey={\"content\"}\n editingContext={props.editingContext}\n placeholder={\"Enter question text here (use the Return key to add more questions)\"}\n independentlyEditable\n disableStyleTextEditing={props.disableStyleTextEditing}\n />\n </span>\n <select value={contentItem.categoryItemValue} onChange={addDocumentUserState} disabled={inactiveBool}>\n <option disabled value=\"default\" key=\"default\"> -- select an option -- </option>\n {selectOptions}\n </select>\n {\n props.editingContext.isEditing\n && <div key=\"correct-answer\">Correct Answer:\n <select value={contentItem.categoryItemAnswer} onChange={updateAnswer}>\n <option disabled value=\"default\" key=\"default\"> -- select an option -- </option>\n {selectOptions}\n </select>\n </div>\n }\n {\n graded\n && <span className={classNames(\"doc-category-matcher-row-answer\", {correct: contentItem.isCorrect, incorrect: !contentItem.isCorrect})}>\n {answer && DocConvertPlainText.fromAnyType(answer.content)}\n </span>\n }\n </div>\n );\n });\n\n let categoryRows = null;\n if (props.editingContext.isEditing) {\n categoryRows = contentCategories.map((contentCategory, index) => {\n const includeInAllNodes = {\n key: contentCategory.uid,\n documentContext: props.documentContext,\n currentVersion: props.currentVersion,\n editingContext: props.editingContext,\n userContext: props.userContext,\n };\n\n return (\n <div\n key={contentCategory.uid}\n id={contentCategory.uid}\n className={classNames(\"doc-category-matcher-category-row\", uid)}\n style={backgroundStyleFromNode({...includeInAllNodes, ...contentCategory})}\n >\n <span>\n <DocStyledText\n uid={contentCategory.uid}\n content={contentCategory.content}\n contentKey={\"content\"}\n editingContext={props.editingContext}\n placeholder={\"Enter answer text here (use the Return key to add more answers)\"}\n independentlyEditable\n disableStyleTextEditing={props.disableStyleTextEditing}\n returnPlainText\n />\n </span>\n </div>\n );\n });\n\n categoryRows = (\n <div className=\"doc-category-matcher-category-rows\">\n <h5>Question Options</h5>\n {categoryRows}\n </div>\n );\n }\n\n let gradedFeedbackBanner = null;\n if (graded) {\n const isEachCorrect = contentItemsExpanded.map((contentItem) => {\n return (contentItem.isCorrect);\n });\n\n if (isEachCorrect.reduce((a, b) => a && b)) {\n gradedFeedbackBanner = <DocGradedFeedbackBanner type=\"correct\" />;\n } else if (isEachCorrect.reduce((a, b) => a || b)) {\n gradedFeedbackBanner = <DocGradedFeedbackBanner type=\"partial\" />;\n } else {\n gradedFeedbackBanner = <DocGradedFeedbackBanner type=\"incorrect\" />;\n }\n }\n\n return (\n <div\n id={props.uid}\n data-is-node\n data-uid={props.uid}\n className={classNames(\"doc-category-matcher\", uid, {inactive: inactiveBool})}\n style={backgroundStyleFromNode(props)}\n contentEditable={false}\n >\n {gradedFeedbackBanner}\n {rows}\n {categoryRows}\n </div>\n );\n}\n\nexport default React.memo(DocCategoryMatcher);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\n\nimport { newSetKeyValueChange, newSetKeysValuesChange, backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\nimport { compact, uniq } from \"lodash\";\n\nimport * as DocConvertHTML from \"../../../helpers/Doc/Convert/HTML\";\n\nimport * as DocConvertRangeInlineJSON from \"../../../helpers/Doc/Convert/RangeInlineJSON\";\nimport * as DocConvertPlainText from \"../../../helpers/Doc/Convert/PlainText\";\n\ninterface DocCDQQuestionProps extends DocCdqQuestionType<InlineNode>, BlockNodeAll {}\n\nfunction DocCDQQuestion(props: DocCDQQuestionProps) {\n const {\n editingContext,\n } = props;\n\n const classes = classNames(\"doc-cdq\", {inactive: props.inactiveBool, graded: props.graded});\n\n const answersSelected = props.content.filter((answer) => answer.value);\n const answersSelectedCount = answersSelected.length;\n const answers = props.content.map((answer, index) => {\n const answerOnClick = (e: React.MouseEvent<HTMLLIElement>) => {\n if (editingContext.isEditing) {\n e.stopPropagation();\n } else {\n let uscs = {};\n\n if (answer.value || (props.limit === false) || !props.isExplicitLimit || (answersSelectedCount < props.limit)) {\n uscs = {\n [answer.uid]: {value: !answer.value},\n };\n } else if (props.isExplicitLimit && answersSelectedCount >= props.limit) {\n alert(\"You have chosen the maximum number of answers for this question. In order to choose a different answer, you will first need to de-select one that you have previously chosen.\");\n }\n\n props.userContext.addState(uscs);\n }\n };\n\n const letter = (index < 26) ? String.fromCharCode(65 + index) : String.fromCharCode(71 + index);\n\n let answerSummary, answerEditor = null;\n if (props.userContext.isAdmin) {\n let answerLetter;\n switch (answer.answer) {\n case \"poison\":\n answerLetter = \"P\";\n break;\n case true:\n answerLetter = \"Y\";\n break;\n default:\n answerLetter = \"N\";\n }\n\n let featureIndex;\n if (answer.feature) {\n featureIndex = props.cdqFeatures.map((cdqFeature) => cdqFeature.uid).indexOf(answer.feature) + 1;\n }\n\n answerSummary = <span>{answerLetter}{featureIndex} - </span>;\n\n if (editingContext.isEditing) {\n const cdqFeatureSelections = props.cdqFeatures.map((cdqFeature) => {\n return (\n <option key={cdqFeature.uid} value={cdqFeature.uid}>\n {(typeof cdqFeature.content === \"string\") ? cdqFeature.content : DocConvertHTML.fromInlineJson(DocConvertRangeInlineJSON.toInlineJson(cdqFeature.content))}\n </option>\n );\n });\n\n answerEditor = [\n <select key=\"doc-cdq-answer-select-list\" value={answer.feature || \"no-selection\"} className=\"doc-cdq-answer-select-list\" onChange={(event) => {\n if (event.target.value === \"no-selection\") {\n editingContext.addChange(newSetKeysValuesChange(answer.uid, {feature: null, answer: false}));\n } else {\n editingContext.addChange(newSetKeyValueChange(answer.uid, \"feature\", event.target.value));\n }\n }}>\n <option key=\"no-selection\" value=\"no-selection\">--No Key Feature--</option>\n {cdqFeatureSelections}\n </select>,\n <input className=\"doc-cdq-answer-select\" type=\"checkbox\" checked={answer.answer === true} onClick={(e) => {\n if (!answer.feature) { alert(\"Select a key feature first\"); return; }\n\n editingContext.addChange(newSetKeyValueChange(answer.uid, \"answer\", (answer.answer === true) ? false : true));\n e.stopPropagation();\n }} />,\n <i key=\"doc-cdq-answer-poison\" className={classNames(\"fa fa-ban doc-cdq-answer-poison\", {\"is-poison\": answer.answer === \"poison\"})} onClick={(e) => {\n if (!answer.feature) { alert(\"Select a key feature first\"); return; }\n\n editingContext.addChange(newSetKeyValueChange(answer.uid, \"answer\", (answer.answer === \"poison\") ? false : \"poison\"));\n e.stopPropagation();\n }}></i>,\n ];\n }\n }\n\n return (\n <li key={answer.uid} className={classNames(\"doc-cdq-answer\", {checked: answer.value})} onClick={!props.inactiveBool && answerOnClick}>\n <div className=\"doc-cdq-answer-flex-wrapper\">\n <span className=\"doc-cdq-answer-outer\"></span>\n {answerSummary}\n <span className=\"doc-cdq-answer-letter\">{`${letter}. `}</span>\n \n <span className=\"doc-cdq-answer-title\">\n <DocStyledText\n uid={answer.uid}\n content={answer.content}\n contentKey={\"content\"}\n editingContext={editingContext}\n independentlyEditable\n disableStyleTextEditing={props.disableStyleTextEditing}\n />\n </span>\n {answerEditor}\n </div>\n </li>\n );\n });\n\n let limitExplinationText = null;\n let limitExplinationTextExtra = null;\n if (props.limit !== false) {\n if (props.isExplicitLimit) {\n if (props.limit === 1) {\n limitExplinationText = `You will be able to select ${props.limit} option.`;\n } else {\n limitExplinationText = `You will be able to select up to ${props.limit} options.`;\n limitExplinationTextExtra = \"Please note that this is the maximum number of responses, but not all of the responses may contribute to your score for this question.\";\n }\n } else {\n limitExplinationText = \"Select as many options as are appropriate.\";\n limitExplinationTextExtra = \"Remember to prioritize, you may lose the point for this case if you select too many responses.\";\n if (props.userContext.isAdmin) {\n limitExplinationTextExtra = <span><u>{`The implicit limit is ${props.limit}.`}</u> {limitExplinationText}</span>;\n }\n }\n }\n\n let limitExplinationDiv = null;\n if (limitExplinationText) {\n limitExplinationDiv = <p className=\"doc-cdq-limit-text\"><span className=\"doc-cdq-limit-text-main\">{limitExplinationText}</span> <span className=\"doc-cdq-limit-text-extra\">{limitExplinationTextExtra}</span></p>;\n }\n\n let selectedVsLimitView = null;\n if (props.limit !== false && props.isExplicitLimit) {\n selectedVsLimitView = (\n <p className=\"doc-cdq-selected-count\">\n <strong>\n <span className=\"doc-cdq-selected-count-number\">{answersSelectedCount}</span> selected of {props.limit} maximum\n </strong>\n </p>\n );\n }\n\n let scorePreview = null;\n if (props.userContext.isAdmin) {\n let score:any = 0; // TODO: Remove any\n if (props.limit !== false && answersSelectedCount > props.limit) {\n score = 0;\n } else {\n const features = uniq(compact(props.content.map((answer) => answer.feature)));\n const featureScores = {questionScore: 0};\n features.forEach((feature) => {\n const cdqFeature = props.cdqFeatures.find((cdqFeature) => cdqFeature.uid === feature);\n const cdqFeatureName = DocConvertPlainText.fromAnyType(cdqFeature ? cdqFeature.content : feature);\n if (props.limit !== false && answersSelectedCount > props.limit) {\n featureScores[cdqFeatureName] = 0;\n } else {\n const featureAnswers = props.content.filter((answer) => {return answer.feature === feature;});\n\n const poisonFeatureAnswers = featureAnswers.filter((answer) => {return answer.answer === \"poison\";});\n const isPoisoned = poisonFeatureAnswers.reduce((acc, answer) => {return acc || answer.value;}, false);\n if (isPoisoned) {\n featureScores[cdqFeatureName] = 0;\n } else {\n const correctFeatureAnswers = featureAnswers.filter((answer) => {return answer.answer === true;});\n const correctCorrectFeatureAnswers = correctFeatureAnswers.filter((answer) => answer.value);\n\n featureScores[cdqFeatureName] = correctCorrectFeatureAnswers.length / correctFeatureAnswers.length;\n }\n }\n\n featureScores.questionScore = featureScores[cdqFeatureName] + featureScores.questionScore;\n });\n\n featureScores.questionScore = featureScores.questionScore / features.length;\n score = JSON.stringify(featureScores);\n }\n scorePreview = <p>Score Preview: {score}</p>;\n }\n\n return (\n <div\n id={props.uid}\n data-is-node\n data-uid={props.uid}\n className={`doc-cdq-wrapper ${props.uid}`}\n style={backgroundStyleFromNode(props)}\n contentEditable={false}\n >\n {limitExplinationDiv}\n {selectedVsLimitView}\n <ul className={classes}>\n {answers}\n </ul>\n {scorePreview}\n </div>\n );\n}\n\nexport default React.memo(DocCDQQuestion);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\n\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\ninterface DocCheckboxProps extends DocCheckboxType<InlineNode>, BlockNodeAll {}\n\nfunction DocCheckbox(props: DocCheckboxProps) {\n const onChanged = (e: React.ChangeEvent<HTMLInputElement>) => {\n props.userContext.addState({\n [props.uid]: {value: e.target.checked},\n });\n };\n\n const onClick = (e: React.MouseEvent<HTMLInputElement | HTMLLabelElement>) => { e.stopPropagation(); };\n\n return (\n <div\n id={props.uid}\n data-is-node\n data-uid={props.uid}\n className={classNames(\"doc-checkbox\", props.uid, {inactive: props.inactiveBool})}\n style={backgroundStyleFromNode(props)}\n >\n <input type=\"checkbox\" id={`${props.uid}_checkbox`} disabled={props.inactiveBool} checked={props.value} onChange={onChanged} onClick={onClick} />\n <label htmlFor={`${props.uid}_checkbox`} onClick={onClick}>\n <span className=\"doc-checkbox-outer\"><span className=\"doc-checkbox-inner\"></span></span>\n <span className=\"doc-checkbox-title\">\n <DocStyledText\n uid={props.uid}\n content={props.content}\n contentKey={\"content\"}\n placeholder={\"Enter Checkbox text here\"}\n editingContext={props.editingContext}\n />\n </span>\n </label>\n </div>\n );\n}\n\nexport default React.memo(DocCheckbox);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\ninterface DocHorizontalRuleProps extends DocHorizontalRuleType, BlockNodeAll {}\n\nfunction DocHorizontalRule(props: DocHorizontalRuleProps) {\n return (\n <hr\n id={props.uid}\n data-is-node\n data-uid={props.uid}\n className={classNames(\"doc-horizontal-rule\", props.uid, {\"doc-horizontal-rule-edit\": props.editingContext.isEditing})}\n style={backgroundStyleFromNode(props)}\n contentEditable={false}\n />\n );\n}\n\nexport default React.memo(DocHorizontalRule);\n","import * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport * as classNames from \"classnames\";\nimport {\n EXPANDED_MOD_MAP_LOG,\n OPENED_MOD_MAP_LOG,\n} from \"../../../helpers/DocumentUserLog\";\n\nimport DocBookmark from \"../BlockNodeHelpers/Bookmark\";\nimport DocNote from \"../BlockNodeHelpers/Note\";\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\nimport GenButton from \"../../Gen/Button/component\";\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\nimport { MEDIA_PICKER } from \"../../../helpers/Doc/menu\";\nimport PlaceholderImage from \"images/placeholder-image.png\";\n\nconst onExpandCollapseClick = (toggleImageModal: () => void) => (e: React.MouseEvent<HTMLAnchorElement>) => {\n e.preventDefault();\n e.stopPropagation();\n toggleImageModal();\n};\n\ninterface DocImageProps extends DocImageType<InlineNode>, BlockNodeAll {\n inGallery?: boolean;\n}\n\ninterface DocImageState {\n imageModalOn: boolean;\n}\n\nexport default class DocImage extends React.PureComponent<DocImageProps, DocImageState> {\n constructor(props: DocImageProps) {\n super(props);\n\n this.state = {\n imageModalOn: false,\n };\n }\n\n openPicker(e: React.MouseEvent<HTMLAnchorElement>) {\n const { editingContext } = this.props;\n\n if (editingContext.isEditing) {\n editingContext.setCurrentMenu(MEDIA_PICKER, { mediaType: \"image\", uid: this.props.uid });\n }\n\n e.stopPropagation();\n }\n\n toggleImageModal() {\n if (!this.state.imageModalOn && this.props.classes?.includes(\"mod-map-image\")) {\n this.props.userContext.logEvent(EXPANDED_MOD_MAP_LOG);\n }\n this.setState({ imageModalOn: !this.state.imageModalOn });\n }\n\n onImageExternalLinkClick(e: React.MouseEvent<HTMLAnchorElement>) {\n e.stopPropagation();\n if (this.props.classes?.includes(\"mod-map-image\")) {\n this.props.userContext.logEvent(OPENED_MOD_MAP_LOG);\n }\n return true;\n }\n\n renderModalContent(imageURL: string) {\n return (\n <div className=\"image-modal-outer\" onClick={this.toggleImageModal.bind(this)}>\n <div className=\"image-modal-inner doc-image\">\n <img src={imageURL} />\n <a title=\"Back\" href=\"#\" onClick={onExpandCollapseClick(this.toggleImageModal.bind(this))} className=\"doc-image-compress-button\">\n <i className=\"fa fa-compress\"> </i>\n </a>\n </div>\n </div>\n );\n }\n\n render() {\n let imageURL, imageExternalLink;\n if (this.props.url) {\n imageURL = this.props.url;\n const asset: Partial<DigitalAsset> = this.props.mediaContext.images.find(\n (i) => i.distribution_url === this.props.url || this.props.url.includes(i.asset_path)\n ) || {};\n const external_id = asset.external_identifier || this.props.url.split('/').pop()?.split('_')[0];\n imageExternalLink = `/documents/${this.props.documentContext.id}/asset_pdf.pdf?external_id=${external_id}`;\n } else if (this.props.uri && this.props.uri !== \"blank.jpg\") {\n Rollbar.warning(\"Deprecated render DocImage with uri called\");\n imageURL = this.props.currentVersion.localImageURL(this.props.uri);\n imageExternalLink = `/documents/${this.props.documentContext.id}/image_pdf.pdf?image_name=${encodeURIComponent(this.props.uri)}`;\n } else {\n imageURL = PlaceholderImage;\n imageExternalLink = \"#\";\n }\n\n const image = (\n <figure\n id={this.props.uid}\n className={classNames(\"doc-image\", this.props.uid)}\n contentEditable={false}\n >\n <div className=\"doc-image-wrapper\" onClick={this.toggleImageModal.bind(this)}>\n <img style={backgroundStyleFromNode(this.props)} src={imageURL} />\n <a\n href=\"#\"\n title=\"Larger Version\"\n onClick={onExpandCollapseClick(this.toggleImageModal.bind(this))}\n className=\"doc-image-expand-button\"\n >\n <i className=\"fa fa-expand\"></i>\n </a>\n <a\n href={imageExternalLink}\n onClick={this.onImageExternalLinkClick.bind(this)}\n target=\"_blank\"\n title=\"Open in New Tab\"\n className=\"doc-image-external-link-button\"\n >\n <i className=\"fa fa-external-link-alt\"> </i>\n </a>\n {this.props.editingContext.isEditing && this.props.userContext.permissions.viewMediaAssets && (\n <GenButton\n key=\"picker-button\"\n className=\"doc-image-picker-button\"\n name={<i className=\"fa fa-image\"></i>}\n highlighted\n small\n onClick={this.openPicker.bind(this)}\n />\n )}\n </div>\n <figcaption>\n <DocStyledText\n uid={this.props.uid}\n content={this.props.title || \"\"}\n contentKey={\"title\"}\n editingContext={this.props.editingContext}\n placeholder={\"Enter Image caption here\"}\n independentlyEditable\n disableStyleTextEditing={this.props.disableStyleTextEditing}\n />\n </figcaption>\n {this.state.imageModalOn &&\n ReactDOM.createPortal(this.renderModalContent(imageURL), document.body)}\n </figure>\n );\n\n if (this.props.inGallery) {\n return image;\n } else {\n return (\n <>\n <span></span>\n <div\n data-is-node\n data-uid={this.props.uid}\n className={classNames(\"doc-image-single\", this.props.uid, {\n [`doc-image-alignment-${this.props.alignment}`]: this.props.alignment,\n \"focused-bookmark\": this.props.isFocusedBookmark && !this.props.simple,\n })}\n contentEditable={false}\n >\n {image}\n {!this.props.simple && <DocBookmark {...this.props} />}\n {!this.props.simple && <DocNote {...this.props} />}\n </div>\n <span></span>\n </>\n );\n }\n }\n}\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport { range, compact, flatten, zip } from \"lodash\";\n\nimport DocBookmark from \"../BlockNodeHelpers/Bookmark\";\nimport DocNote from \"../BlockNodeHelpers/Note\";\nimport DocImage from \"./Image\";\nimport Carousel from 'react-grid-carousel'\nimport { newAddNodeChange, backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\nimport EmptyImageGalleryImage from \"images/EmptyImageGallery.png\";\n\ninterface DocImageGalleryProps extends DocImageGalleryType<InlineNode>, BlockNodeAll {};\n\nfunction DocImageGallery(props: DocImageGalleryProps) {\n const {\n currentVersion,\n displayContext,\n documentContext,\n editingContext,\n featureFlag,\n images,\n mediaContext,\n uid,\n userContext,\n } = props;\n\n let isEditing = editingContext.isEditing\n let renderedImages = images.map((image, index) => {\n const includeInAllNodes = {\n key: image.uid,\n documentContext: documentContext,\n currentVersion: currentVersion,\n editingContext: editingContext,\n userContext: userContext,\n mediaContext: mediaContext,\n displayContext: displayContext,\n featureFlag: featureFlag,\n };\n\n return (\n <div className=\"doc-image-gallery-slide\" key={`doc-image-gallery-image-${image.uid}`}>\n <DocImage\n {...image}\n {...includeInAllNodes}\n inGallery\n simple\n />\n </div>\n );\n });\n\n if (editingContext.isEditing) {\n if (renderedImages.length === 0) {\n renderedImages = [\n <div className=\"doc-image-gallery-slide\" key=\"doc-image-gallery-image-0\">\n <img\n src={EmptyImageGalleryImage}\n className=\"doc-image-gallery-empty-image\"\n onClick={() => {\n editingContext.clearCurrentDocSelection();\n editingContext.setCurrentDocSelection({start: {uid: uid, index: 0}, end: {uid: uid, index: 0}})\n }}\n />\n </div>\n ]\n }\n\n const addImageButtons = range(0, renderedImages.length + 1).map((imageIndex) => {\n return (\n <div\n key={`doc-image-gallery-add-image-${imageIndex}`}\n className=\"doc-image-gallery-slide add-image-button\"\n >\n <div\n key=\"doc-image-gallery-add-image\"\n className=\"doc-image-gallery-add-image\"\n onClick={() => {\n const newNode = editingContext.nodeDefinitions[\"image\"].generate(editingContext.nodeDefinitions, {});\n editingContext.addChange(newAddNodeChange(newNode, uid, \"images\", imageIndex));\n }}\n ><i className=\"fa fa-plus\"></i></div>\n </div>\n );\n });\n\n renderedImages = compact(flatten(zip(addImageButtons, renderedImages)));\n }\n\n return (\n <div\n id={props.uid}\n data-is-node\n data-uid={props.uid}\n className={classNames(\"doc-image-gallery\", uid)}\n style={backgroundStyleFromNode(props)}\n contentEditable={false}\n >\n <div className=\"doc-image-gallery-scroller\">\n <Carousel cols={1} rows={1} showDots loop>\n {renderedImages.map((image, index) => (\n renderedImages[index].props.className.indexOf(\"add-image-button\") === -1 &&\n <Carousel.Item key={index}>\n { isEditing &&\n <div className=\"doc-image-gallery-add-image-buttons-container\">\n {renderedImages[index-1]}\n {renderedImages[index+1]}\n </div>\n }\n {renderedImages[index]}\n </Carousel.Item>\n ))}\n </Carousel>\n </div>\n <DocBookmark {...props} />\n <DocNote {...props} />\n </div>\n );\n}\n\nexport default React.memo(DocImageGallery);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport AqButton from '../../Aq/Button';\n\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\n\nimport editGradientSmall from 'app/assets/images/edit_gradient_small.svg';\n\ninterface DocLearningObjectiveProps extends DocLearningObjectiveType<InlineNode>, BlockNodeAll {\n variantId?: number;\n}\n\nfunction DocLearningObjective(props: DocLearningObjectiveProps) {\n const {\n uid,\n classes,\n content,\n editingContext,\n variantId,\n } = props;\n\n let handleClick;\n let readOnly = true;\n let editButton;\n if (editingContext.isEditing) {\n if (editingContext.allowLearningObjectivesEdit === uid) {\n readOnly = false;\n } else {\n handleClick = () => { editingContext.setCurrentMenu(\"LEARNING_OBJECTIVES_CONFIRM_EDIT\", {learningObjectiveUid: uid}) }\n\n editButton = (\n <AqButton\n className=\"learning-objective-edit-button pink outline small\"\n onClick={handleClick}\n >\n <img src={editGradientSmall} style={{height: '12px'}}></img>\n </AqButton>\n )\n }\n }\n\n return (\n <div\n id={props.uid}\n data-is-node\n data-uid={props.uid}\n className={classNames(\"doc-learning-objective\", uid, classes, {\"locked-lo\": editingContext.isEditing && readOnly})}\n contentEditable={false}\n onClick={handleClick}\n >\n <div className=\"learning-objective-arrow\"/>\n {editButton}\n <div className=\"learning-objective-content\">\n <DocStyledText\n uid={uid}\n content={content}\n contentKey={\"content\"}\n placeholder={\"Enter Learning Objective here\"}\n editingContext={editingContext}\n independentlyEditable\n variantId={variantId}\n readOnly={readOnly}\n />\n </div>\n </div>\n );\n}\n\nexport default React.memo(DocLearningObjective);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocBlockNodes from \"../BlockNodes\";\n\ninterface DocLearningObjectivesListProps extends DocLearningObjectivesListType<InlineNode>, BlockNodeAll {}\n\nfunction DocLearningObjectivesList(props: DocLearningObjectivesListProps) {\n const {\n uid,\n classes,\n content,\n } = props;\n\n return (\n <div\n id={props.uid}\n data-is-node\n data-uid={props.uid}\n className={classNames(\"doc-learning-objectives-list\", uid, classes)}\n contentEditable={false}\n style={{marginBottom: '10px'}}\n >\n <p>Upon completion of this module, the learner should be able to:</p>\n\n <DocBlockNodes\n {...props}\n content={content}\n contentKey=\"content\"\n independentlyEditable\n simple\n shouldHaveAddNodes={false}\n />\n </div>\n );\n}\n\nexport default React.memo(DocLearningObjectivesList);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport { backgroundStyleFromNode } from \"../../../../helpers/Doc/changes\";\nimport { isInlineNode } from \"../../../../helpers/Doc/Functions/Inline\";\n\nimport DocStyledText from \"../../BlockNodeHelpers/StyledText\";\nimport DocBlockNodes from \"../../BlockNodes\";\n\ninterface DocListItemProps extends DocListItemType<InlineNode>, BlockNodeAll {}\n\nfunction DocListItem(props: DocListItemProps) {\n if (isInlineNode(props.content)) {\n return (\n <li\n id={props.uid}\n data-is-node\n data-uid={props.uid}\n className={classNames(\"doc-list-item\", props.uid)}\n >\n <DocStyledText\n uid={props.uid}\n content={props.content}\n contentKey={\"content\"}\n editingContext={props.editingContext}\n placeholder={\"Enter List Item text here\"}\n />\n </li>\n );\n } else {\n return (\n <li\n id={props.uid}\n data-is-node\n data-uid={props.uid}\n className={classNames(\"doc-list-item\", props.uid)}\n style={backgroundStyleFromNode(props)}\n >\n <ChangeHighlightListItemMark\n blockChangeHighlight={props.blockChangeHighlight}\n editingContext={props.editingContext}\n />\n <DocBlockNodes\n {...props}\n content={props.content}\n contentKey=\"content\"\n simple\n />\n </li>\n );\n }\n}\n\ninterface ChangeHighlightListItemMarkProps {\n blockChangeHighlight?: BlockChangeHighlight;\n editingContext: EditingContext;\n}\n\nfunction ChangeHighlightListItemMark(props: ChangeHighlightListItemMarkProps) {\n const {\n blockChangeHighlight,\n editingContext,\n } = props;\n\n switch (blockChangeHighlight?.type) {\n case \"DELETE_CONTENT\":\n return (\n <span\n className=\"doc-list-item-mark\"\n style={{\n textDecorationColor: `rgb(${editingContext.colorLookup[blockChangeHighlight.author_id]})`,\n textDecoration: \"line-through\",\n }}\n >\n \n </span>\n );\n case \"ADD_CONTENT\":\n return (\n <span\n className=\"doc-list-item-mark\"\n style={{\n color: `rgb(${editingContext.colorLookup[blockChangeHighlight.author_id]})`,\n textDecoration: \"underline\",\n }}\n >\n \n </span>\n );\n default:\n return null;\n }\n}\n\n\nexport default React.memo(DocListItem);\n","import {isRangeInlineJSON} from \"./RangeInlineJSON\";\nimport {isTreeInlineJSON} from \"./TreeInlineJSON\";\n\nexport function isInlineNode(possibleInlineContent): possibleInlineContent is InlineNode {\n return typeof possibleInlineContent === \"string\"\n || isTreeInlineJSON(possibleInlineContent)\n || isRangeInlineJSON(possibleInlineContent);\n}\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocBookmark from \"../BlockNodeHelpers/Bookmark\";\nimport DocNote from \"../BlockNodeHelpers/Note\";\nimport DocListItem from \"./List/ListItem\";\n\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\ninterface DocListProps extends DocListType<InlineNode>, BlockNodeAll {};\n\nfunction DocList(props: DocListProps) {\n const listItems = props.content.map((listItem, index) => {\n return (\n <DocListItem\n {...listItem}\n key={listItem.uid}\n simple={props.simple}\n documentContext={props.documentContext}\n currentVersion={props.currentVersion}\n editingContext={props.editingContext}\n userContext={props.userContext}\n displayContext={props.displayContext}\n />\n );\n });\n\n switch (props.type) {\n case \"numberedList\":\n return (\n <ol\n id={props.uid}\n data-is-node\n data-uid={props.uid}\n className={classNames(props.simple ? \"doc-numbered-list-simple\" : \"doc-numbered-list\", props.uid, props.classes, {\"focused-bookmark\": props.isFocusedBookmark && !props.simple})}\n style={backgroundStyleFromNode(props)}\n >\n {listItems}\n {!props.simple && <DocBookmark {...props} />}\n {!props.simple && <DocNote {...props} />}\n </ol>\n );\n case \"regularList\":\n default:\n return (\n <ul\n id={props.uid}\n data-is-node\n data-uid={props.uid}\n className={classNames(props.simple ? \"doc-regular-list-simple\" : \"doc-regular-list\", props.uid, props.classes, {\"focused-bookmark\": props.isFocusedBookmark && !props.simple})}\n style={backgroundStyleFromNode(props)}\n >\n {listItems}\n {!props.simple && <DocBookmark {...props} />}\n {!props.simple && <DocNote {...props} />}\n </ul>\n );\n }\n}\n\nexport default React.memo(DocList);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\n\nimport { newSetKeyValueChange, backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\ninterface DocMultipleChoiceProps extends DocMultipleChoiceType<InlineNode>, BlockNodeAll {};\n\nfunction DocMultipleChoice(props: DocMultipleChoiceProps) {\n const {\n editingContext,\n } = props;\n\n const classes = classNames(\"doc-multiple-choice\", {inactive: props.inactiveBool, graded: props.graded});\n\n const answers = props.content.map((answer, index) => {\n const includeInAllNodes = {\n key: answer.uid,\n simple: true,\n documentContext: props.documentContext,\n currentVersion: props.currentVersion,\n editingContext: editingContext,\n userContext: props.userContext,\n };\n\n const answerOnClick = () => {\n if (!props.inactiveBool) {\n let uscs = {\n [answer.uid]: {value: !answer.value},\n };\n\n if (!props.multipleSelect) {\n const newUscs = props.content.filter( (ans) => {\n return (ans.value && (ans.uid !== answer.uid));\n }).reduce((acc, ans) => {\n return ({ ...acc,\n [ans.uid]: {value: false},\n });\n }, {});\n\n uscs = {...uscs, ...newUscs};\n }\n\n props.userContext.addState(uscs);\n }\n };\n\n let gradedInfo = null;\n if (props.graded) {\n gradedInfo = (\n <div className=\"doc-multiple-choice-answer-graded-info\">\n {answer.answer && <span className={classNames(\"icon-check-circle\", \"correct\")}></span>}\n </div>\n );\n }\n\n return (\n <li\n key={answer.uid}\n id={answer.uid}\n className={classNames(\"doc-multiple-choice-answer\", answer.uid, {checked: answer.value})}\n onClick={answerOnClick}\n style={backgroundStyleFromNode({...includeInAllNodes, ...answer})}\n >\n {editingContext.isEditing && <input type=\"checkbox\" defaultChecked={answer.answer} onClick={(e) => {\n editingContext.addChange(newSetKeyValueChange(answer.uid, \"answer\", !answer.answer));\n e.stopPropagation();\n }} />}\n {gradedInfo}\n <span className=\"doc-multiple-choice-answer-outer\"></span>\n <span className=\"doc-multiple-choice-answer-title\">\n <DocStyledText\n uid={answer.uid}\n content={answer.content}\n contentKey={\"content\"}\n placeholder={\"Enter Multiple Choice text here\"}\n editingContext={editingContext}\n independentlyEditable\n disableStyleTextEditing={props.disableStyleTextEditing}\n />\n </span>\n </li>\n );\n });\n\n\n let gradedFeedback = null;\n if (props.graded) {\n const isAllYes = props.content.map((answer) => {\n return (answer.answer);\n }).reduce((a, b) => a && b);\n\n const isAllNo = props.content.map((answer) => {\n return (!answer.answer);\n }).reduce((a, b) => a && b);\n\n const isEachCorrect = props.content.filter((answer) => {\n return (answer.value || answer.answer);\n }).map((answer) => {\n return (answer.value === answer.answer);\n });\n\n const isSingleCorrect = (props.content.map((answer) => {\n return (answer.answer);\n }).filter((x) => x).length === 1);\n\n if (isAllNo) {\n gradedFeedback = <p key=\"graded-feedback-no-single-best\" className=\"graded-feedback\">There is no single best answer.</p>;\n } else if (isSingleCorrect) {\n gradedFeedback = <p key=\"graded-feedback-one-option\" className=\"graded-feedback\">The best option is indicated below. Your selections are indicated by the shaded boxes.</p>;\n } else {\n gradedFeedback = <p key=\"graded-feedback-multiple-options\" className=\"graded-feedback\">The best options are indicated below. Your selections are indicated by the shaded boxes.</p>;\n }\n }\n\n return (\n <div\n id={props.uid}\n data-is-node\n data-uid={props.uid}\n className={classNames(\"doc-multiple-choice-wrapper\", props.uid)}\n style={backgroundStyleFromNode(props)}\n contentEditable={false}\n >\n {gradedFeedback}\n <ul className={classes}>\n {answers}\n </ul>\n </div>\n );\n}\n\nexport default React.memo(DocMultipleChoice);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocBookmark from \"../BlockNodeHelpers/Bookmark\";\nimport DocNote from \"../BlockNodeHelpers/Note\";\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\n\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\ninterface DocParagraphProps extends DocParagraphType<InlineNode>, BlockNodeAll {}\n\nfunction DocParagraph(props: DocParagraphProps) {\n return (\n <p\n id={props.uid}\n data-is-node\n data-uid={props.uid}\n className={classNames({\"focused-bookmark\": props.isFocusedBookmark && !props.simple}, props.simple ? \"doc-paragraph-simple\" : \"doc-paragraph\", props.uid, props.classes)}\n style={backgroundStyleFromNode(props)}\n >\n <ChangeHighlightParagraphMark\n blockChangeHighlight={props.blockChangeHighlight}\n editingContext={props.editingContext}\n />\n <DocStyledText\n uid={props.uid}\n content={props.content}\n contentKey={\"content\"}\n placeholder={\"Enter Paragraph text here\"}\n editingContext={props.editingContext}\n documentContext={props.documentContext}\n />\n {!props.simple && <DocBookmark {...props} />}\n {!props.simple && <DocNote {...props} />}\n </p>\n )\n}\n\ninterface ChangeHighlightParagraphProps {\n blockChangeHighlight?: BlockChangeHighlight;\n editingContext: EditingContext;\n}\n\nfunction ChangeHighlightParagraphMark(props: ChangeHighlightParagraphProps) {\n const {\n blockChangeHighlight,\n editingContext,\n } = props;\n\n let textColor = \"\"\n switch (blockChangeHighlight?.type) {\n case \"DELETE_CONTENT\":\n textColor = editingContext.hasOwnProperty(\"colorLookup\") ? `rgb(${editingContext.colorLookup[blockChangeHighlight.author_id]})` : `rgb(255,0,0))`\n return (\n <span\n className=\"doc-paragraph-mark\"\n style={{\n textDecorationColor: textColor,\n textDecoration: \"line-through\",\n fontWeight: \"bold\",\n }}\n >\n ¶ \n </span>\n );\n case \"ADD_CONTENT\":\n textColor = editingContext.hasOwnProperty(\"colorLookup\") ? `rgb(${editingContext.colorLookup[blockChangeHighlight.author_id]})` : `rgb(255,0,0))`\n return (\n <span\n className=\"doc-paragraph-mark\"\n style={{\n color: textColor,\n textDecoration: \"underline\",\n fontWeight: \"bold\",\n }}\n >\n ¶ \n </span>\n );\n default:\n return null;\n }\n}\n\nexport default React.memo(DocParagraph);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport { handleActions } from \"../../../helpers/Doc/handleActions\";\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\ninterface DocRatingBarProps extends DocRatingBarType, BlockNodeAll {};\n\nfunction DocRatingBar(props: DocRatingBarProps) {\n const onClick = (clickValue: number, e: React.MouseEvent<HTMLSpanElement>) => {\n e.stopPropagation();\n\n if (props.inactiveBool) { return; }\n\n const allActions = (props.onClick || []);\n allActions.push({\n type: \"action\",\n action: \"setNodeKVPair\",\n arguments: {\n uid: props.uid,\n key: \"value\",\n value: props.maxValue - clickValue,\n },\n });\n\n handleActions(allActions, props);\n };\n\n const stars = [];\n for (let i = 0; i < props.maxValue; i += 1) {\n const className = classNames(\"doc-rating-bar-star\", {\"doc-rating-bar-star-active\": (i >= props.maxValue - props.value)});\n stars.push(<span className={className} key={i} onClick={(e) => onClick(i, e)}>☆</span>);\n }\n\n return (\n <div\n id={props.uid}\n data-is-node\n data-uid={props.uid}\n className={classNames(\"doc-rating-bar\", props.uid, {inactive: props.inactiveBool})}\n style={backgroundStyleFromNode(props)}\n contentEditable={false}\n >\n {stars}\n </div>\n );\n}\n\nexport default React.memo(DocRatingBar);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocBlockNodes from \"../../BlockNodes\";\n\nimport {\n newMergeTableCells,\n newUnmergeTableCells,\n} from \"../../../../helpers/Doc/changes\";\n\ninterface DocTableCellProps extends DocTableCellType<InlineNode>, BlockNodeAll {\n columnIndex: number;\n rowIndex: number;\n firstColumn: boolean;\n firstRow: boolean;\n parentTableUID: string;\n}\n\nfunction DocTableCell(props: DocTableCellProps) {\n const {\n editingContext,\n rowSpan = 1,\n columnSpan = 1,\n } = props\n\n return (\n <td\n id={props.uid}\n data-is-node\n data-uid={props.uid}\n className={classNames(\"doc-table-cell\", props.uid)}\n rowSpan={rowSpan}\n colSpan={columnSpan}\n >\n <DocBlockNodes\n {...props}\n content={props.content}\n contentKey=\"content\"\n independentlyEditable\n simple\n shouldHaveAddNodes={editingContext.isEditing}\n />\n {(rowSpan > 1 || columnSpan > 1) && editingContext.isEditing &&\n <div\n key=\"doc-table-cell-unmerge-cell\"\n className=\"doc-table-cell-unmerge-cell no-document-selection\"\n onClick={() => {\n const rowRange = { start: props.rowIndex, end: props.rowIndex + rowSpan - 1 };\n const columnRange = { start: props.columnIndex, end: props.columnIndex + columnSpan - 1 };\n\n editingContext.clearCurrentDocSelection();\n editingContext.addChange(newUnmergeTableCells(props.parentTableUID, rowRange, columnRange));\n }}\n ><i className=\"fa fa-columns\"></i></div>\n }\n {!props.firstColumn && editingContext.isEditing &&\n <div\n key=\"doc-table-cell-merge-row-cell\"\n className=\"doc-table-cell-merge-row-cell no-document-selection\"\n onClick={() => {\n const rowRange = { start: props.rowIndex, end: props.rowIndex };\n const columnRange = { start: props.columnIndex - 1, end: props.columnIndex };\n\n editingContext.clearCurrentDocSelection();\n editingContext.addChange(newMergeTableCells(props.parentTableUID, rowRange, columnRange));\n }}\n ><i className=\"fa fa-times\"></i></div>\n }\n {!props.firstRow && editingContext.isEditing &&\n <div\n key=\"doc-table-cell-merge-column-cell\"\n className=\"doc-table-cell-merge-column-cell no-document-selection\"\n onClick={() => {\n const rowRange = { start: props.rowIndex - 1, end: props.rowIndex };\n const columnRange = { start: props.columnIndex, end: props.columnIndex };\n\n editingContext.clearCurrentDocSelection();\n editingContext.addChange(newMergeTableCells(props.parentTableUID, rowRange, columnRange));\n }}\n ><i className=\"fa fa-times\"></i></div>\n }\n </td>\n );\n}\n\nDocTableCell.defaultProps = {\n rowSpan: 1,\n columnSpan: 1,\n};\n\nexport default React.memo(DocTableCell);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocTableCell from \"../Table/Cell\";\n\nimport {\n newAddTableRowChange,\n newDeleteTableRowChange,\n backgroundStyleFromNode\n} from \"../../../../helpers/Doc/changes\";\n\ninterface DocTableRowProps extends DocTableRowType<InlineNode>, BlockNodeAll {\n firstRow: boolean;\n index: number;\n parentTableUID: string;\n}\n\nfunction DocTableRow(props: DocTableRowProps) {\n const {\n editingContext,\n } = props;\n\n const cells = props.cells.map((cell, index) => {\n return (\n <DocTableCell\n key={cell.uid}\n {...cell}\n documentContext={props.documentContext}\n currentVersion={props.currentVersion}\n editingContext={editingContext}\n userContext={props.userContext}\n displayContext={props.displayContext}\n parentTableUID={props.parentTableUID}\n featureFlag={props.featureFlag}\n mediaContext={props.mediaContext}\n firstRow={props.firstRow}\n firstColumn={index === 0}\n disableStyleTextEditing={props.disableStyleTextEditing}\n />\n );\n });\n\n if (editingContext.isEditing) {\n cells.unshift(\n <td className=\"doc-table-edit-row-cell\" key=\"doc-table-edit-row-cell\">\n <div\n key=\"doc-table-cell-add-row-after\"\n className=\"doc-table-cell-add-row-after no-document-selection\"\n onClick={() => {\n editingContext.clearCurrentDocSelection();\n editingContext.addChange(newAddTableRowChange(props.parentTableUID, props.index + 1));\n }}\n ><i className=\"fa fa-plus\"></i></div>\n <div\n key=\"doc-table-cell-remove-row\"\n className=\"doc-table-cell-remove-row no-document-selection\"\n onClick={() => {\n editingContext.clearCurrentDocSelection();\n editingContext.addChange(newDeleteTableRowChange(props.parentTableUID, props.index));\n }}\n ><i className=\"fa fa-times\"></i></div>\n </td>\n );\n }\n\n return (\n <tr\n id={props.uid}\n data-is-node\n data-uid={props.uid}\n className={classNames(\"doc-table-row\", props.uid)}\n style={backgroundStyleFromNode(props)}\n >\n {cells}\n </tr>\n );\n}\n\nexport default React.memo(DocTableRow);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocTableRow from \"./Table/Row\";\n\nimport { newAddTableRowChange, newAddTableColumnChange, newDeleteTableColumnChange, backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\ninterface DocTableProps extends DocTableType<InlineNode>, BlockNodeAll {\n relevantColumnIndices: Array<number>;\n};\n\nfunction DocTable(props: DocTableProps) {\n const {\n editingContext,\n } = props;\n\n const rows = props.rows.map((row, index) => {\n return (\n <DocTableRow\n key={row.uid}\n {...row}\n documentContext={props.documentContext}\n currentVersion={props.currentVersion}\n editingContext={editingContext}\n userContext={props.userContext}\n displayContext={props.displayContext}\n parentTableUID={props.uid}\n firstRow={index === 0}\n disableStyleTextEditing={props.disableStyleTextEditing}\n featureFlag={props.featureFlag}\n mediaContext={props.mediaContext}\n />\n );\n });\n\n if (editingContext.isEditing) {\n const editCells = [0].concat(props.relevantColumnIndices.map((index) => index + 1)).map((editColumnIndex) => {\n const addColumnAfterButton = (\n <div\n key=\"doc-table-cell-add-column-after\"\n className=\"doc-table-cell-add-column-after no-document-selection\"\n onClick={() => {\n editingContext.clearCurrentDocSelection();\n editingContext.addChange(newAddTableColumnChange(props.uid, editColumnIndex));\n }}\n ><i className=\"fa fa-plus\"></i></div>\n );\n\n if (editColumnIndex === 0) {\n return (\n <td key={editColumnIndex} className=\"doc-table-edit-column-cell doc-table-edit-row-cell\">\n {addColumnAfterButton}\n <div\n key=\"doc-table-cell-add-row-after\"\n className=\"doc-table-cell-add-row-after no-document-selection\"\n onClick={() => {\n editingContext.clearCurrentDocSelection();\n editingContext.addChange(newAddTableRowChange(props.uid, 0));\n }}\n ><i className=\"fa fa-plus\"></i></div>\n </td>\n );\n } else {\n return (\n <td key={editColumnIndex} className=\"doc-table-edit-column-cell\">\n {addColumnAfterButton}\n <div\n key=\"doc-table-cell-remove-column\"\n className=\"doc-table-cell-remove-column no-document-selection\"\n onClick={() => {\n editingContext.clearCurrentDocSelection();\n editingContext.addChange(newDeleteTableColumnChange(props.uid, editColumnIndex - 1));\n }}\n ><i className=\"fa fa-times\"></i></div>\n </td>\n );\n }\n });\n\n rows.unshift(<tr key=\"edit-row\">\n {editCells}\n </tr>);\n }\n\n return (\n <div\n id={props.uid}\n data-is-node\n data-uid={props.uid}\n className={classNames(props.simple ? \"doc-table-simple\" : \"doc-table\", props.uid)}\n style={backgroundStyleFromNode(props)}\n contentEditable={false}\n >\n <table>\n <tbody>\n {rows}\n </tbody>\n </table>\n </div>\n );\n}\n\nexport default React.memo(DocTable);\n","import * as React from 'react';\n\ninterface Props {\n infoText: string\n\n onMouseEnter: () => void\n}\n\nexport default function AqInfoBubble(props: Props): React.ReactElement {\n const {\n infoText,\n onMouseEnter,\n } = props;\n\n return (\n <div className=\"aq-info-bubble\" onMouseEnter={onMouseEnter}>\n <span className=\"tooltip-box small above after wider\">\n {infoText}\n </span>\n </div>\n );\n}","import * as React from 'react';\n\ninterface Props extends React.ComponentPropsWithoutRef<'input'> {}\n\nexport default function AqSwitch(props: Props): React.ReactElement {\n const {\n checked,\n disabled,\n\n onChange,\n } = props;\n\n return (\n <label className=\"aq-switch\">\n <input\n type=\"checkbox\"\n checked={checked}\n disabled={disabled}\n\n onChange={onChange}\n />\n <span className=\"switch\"/>\n </label>\n );\n}","import * as React from 'react';\n\nimport * as R from 'ramda';\n\nimport * as classNames from 'classnames';\n\nimport Smile1 from 'images/smile-rating-1.svg';\nimport Smile2 from 'images/smile-rating-2.svg';\nimport Smile3 from 'images/smile-rating-3.svg';\nimport Smile4 from 'images/smile-rating-4.svg';\nimport Smile5 from 'images/smile-rating-5.svg';\n\nconst smileImageSrcs = [\n Smile1,\n Smile2,\n Smile3,\n Smile4,\n Smile5,\n];\n\ninterface Props {\n value: number\n disabled?: boolean\n\n onChange: (number: number) => void\n}\n\nexport default function AqSmileRating(props: Props): React.ReactElement {\n const {\n value,\n disabled,\n\n onChange,\n } = props;\n\n return (\n <div>\n {R.range(1, 6).reverse().map((val) => (\n <button\n key={val}\n className={classNames('aq-smile-rating-button', { active: value === val })}\n disabled={disabled}\n onClick={() => { onChange(val); }}\n >\n <img src={smileImageSrcs[val - 1]} />\n </button>\n ))}\n </div>\n );\n}\n","import { createConsumer } from \"@rails/actioncable\"\n\nexport default createConsumer()\n","import * as React from \"react\";\n\nimport * as R from \"ramda\";\n\nimport ahoy from \"ahoy.js\"\n\nimport * as classNames from \"classnames\";\n\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\nimport AqButton from \"../../Aq/Button\";\nimport AqInfoBubble from \"../../Aq/InfoBubble\";\nimport AqSwitch from \"../../Aq/Switch\";\nimport AqSmileRating from \"../../Aq/SmileRating\";\n\nimport GenModal from \"../../Gen/Modal/component\";\nimport GenLoadingSpinner from \"../../Gen/LoadingSpinner/component\";\n\nimport DocBlockNodes from \"../BlockNodes\";\n\nimport { handleActions } from \"../../../helpers/Doc/handleActions\";\nimport { wrapStateAsSetNodeKVPairActions } from \"../../../helpers/Doc/documentUserState\";\n\nimport createAutomatedSummaryStatementSubscription from \"../../../channels/automated_summary_statement_channel\"\nimport analytics from \"../../../../application/analytics\";\n\ninterface DocTextInputProps extends DocTextInputType, BlockNodeAll {\n aiSummaryStatementAllowFeedback?: boolean;\n aiSummaryStatementRequestFeedback?: boolean;\n aiSummaryStatementResponseRecieved?: boolean;\n aiSummaryStatementResponseError?: string;\n aiSummaryStatementFeedback?: string;\n aiSummaryStatementUserRating?: number;\n aiSummaryStatementUserComment?: string;\n aiSummaryStatementUserRatingSubmitted?: boolean;\n aiSubmitButtonActions?: Array<DocAction>;\n aiSummaryStatementIdeal?: string;\n};\n\ninterface DocTextInputState {\n value: string,\n timer?: NodeJS.Timeout,\n aiSummaryStatementLoadingFeedback: boolean,\n tempAiSummaryStatementUserRating: number,\n tempAiSummaryStatementUserComment: string,\n aiSummaryStatementNeedsToAcceptInfo?: boolean,\n aiSummaryStatementLoadingFeedbackStartedAt?: Date,\n}\n\nconst MAX_SUMMARY_STATEMENT_TIME = 60000\n\nexport default class DocTextInput extends React.PureComponent<DocTextInputProps, DocTextInputState> {\n aiAutomatedSummaryStatementSubscription: any; // TODO: Remove any\n aiAutomatedSummaryStatementFeedbackRequested?: boolean;\n aiAutomatedSummaryStatementSubscriptionTimer?: ReturnType<typeof setTimeout>;\n\n constructor(props: DocTextInputProps) {\n super(props);\n\n this.state = {\n value: this.props.value,\n timer: undefined,\n aiSummaryStatementLoadingFeedback: false,\n tempAiSummaryStatementUserRating: 0,\n tempAiSummaryStatementUserComment: \"\"\n };\n }\n\n componentWillReceiveProps(newProps: DocTextInputProps) {\n if ((newProps.value !== this.props.value) && (newProps.value !== this.state.value)) {\n this.setState({value: newProps.value});\n }\n }\n\n componentWillUnmount() {\n if (this.state.timer) {\n clearTimeout(this.state.timer);\n this.updateUSCWithTimer();\n }\n }\n\n handleChange(e: React.ChangeEvent<HTMLTextAreaElement>) {\n this.setState({value: e.target.value});\n\n if (this.state.timer) { clearTimeout(this.state.timer); }\n this.setState({timer: setTimeout(this.updateUSCWithTimer.bind(this), 2000)});\n };\n\n updateUSC() {\n this.props.userContext.addState({\n [this.props.uid]: {value: this.state.value},\n });\n };\n\n updateUSCWithTimer() {\n this.updateUSC();\n this.setState({timer: undefined});\n };\n\n loadSummaryStatementFeedback() {\n const {\n aiSummaryStatementIdeal,\n documentContext,\n uid,\n userContext,\n } = this.props;\n\n this.setState({\n aiSummaryStatementLoadingFeedback: true,\n aiSummaryStatementLoadingFeedbackStartedAt: (new Date()),\n aiSummaryStatementNeedsToAcceptInfo: true,\n })\n\n this.aiAutomatedSummaryStatementSubscription = createAutomatedSummaryStatementSubscription({\n summaryStatementId: `${userContext.id}::${uid}`,\n onSummaryStatementFeedback: this.onSummaryStatementFeedback.bind(this),\n onConnected: () => {\n console.log(\"onConnected\")\n\n if (!this.aiAutomatedSummaryStatementFeedbackRequested) {\n this.aiAutomatedSummaryStatementFeedbackRequested = true;\n\n this.aiAutomatedSummaryStatementSubscription.getFeedback({\n ideal_summary_statement: aiSummaryStatementIdeal,\n user_summary_statement: this.state.value,\n })\n\n this.aiAutomatedSummaryStatementSubscriptionTimer = setTimeout(() => {\n userContext.addState({\n [uid]: {\n aiSummaryStatementRequestFeedback: true,\n aiSummaryStatementResponseError: \"Connection Timeout\",\n },\n });\n }, MAX_SUMMARY_STATEMENT_TIME);\n }\n },\n onDisconnected: () => {},\n onRejected: this.handleConnectionRejected.bind(this),\n })\n\n ahoy.track(\"AI Summary Statement Feedback Requested\", {document_id: documentContext.id});\n }\n\n handleConnectionClosed() {\n console.log(\"handleConnectionClosed\")\n }\n\n handleConnectionRejected() {\n console.log(\"handleConnectionRejected\")\n\n const {\n aiSummaryStatementLoadingFeedback,\n } = this.state\n\n const {\n aiSummaryStatementResponseError,\n uid,\n userContext,\n } = this.props\n\n if (aiSummaryStatementLoadingFeedback && !aiSummaryStatementResponseError) {\n userContext.addState({\n [uid]: {\n aiSummaryStatementRequestFeedback: true,\n aiSummaryStatementResponseError: \"Connection Rejected\",\n },\n });\n }\n }\n\n onSummaryStatementFeedback(feedback) {\n const {\n uid,\n userContext,\n aiSummaryStatementIdeal,\n aiSubmitButtonActions,\n } = this.props;\n\n const {\n aiSummaryStatementLoadingFeedbackStartedAt,\n } = this.state;\n\n if (this.aiAutomatedSummaryStatementSubscriptionTimer) {\n clearTimeout(this.aiAutomatedSummaryStatementSubscriptionTimer)\n this.aiAutomatedSummaryStatementSubscriptionTimer = undefined;\n }\n\n if (feedback.error) {\n userContext.addState({\n [uid]: {\n aiSummaryStatementRequestFeedback: true,\n aiSummaryStatementResponseError: feedback.error.message,\n },\n });\n\n return;\n }\n\n this.setState({aiSummaryStatementLoadingFeedback: false});\n userContext.addState({\n [uid]: {\n aiSummaryStatementRequestFeedback: true,\n aiSummaryStatementResponseRecieved: true,\n aiSummaryStatementResponseError: null,\n aiSummaryStatementResponseTime: (new Date()).getTime() - aiSummaryStatementLoadingFeedbackStartedAt.getTime(),\n aiSummaryStatementFeedback: feedback.ai_response,\n aiSummaryStatementModelId: feedback.ai_prompt_id,\n aiSummaryStatementModelUsageTokens: feedback.usage_tokens,\n aiSummaryStatementIdeal: aiSummaryStatementIdeal,\n },\n });\n }\n\n render() {\n const {\n boxLines,\n characterLimit,\n classes,\n documentContext,\n editingContext,\n graded,\n inactiveBool,\n uid,\n userContext,\n aiAnswerCommentSection,\n aiSummaryStatementAllowFeedback,\n aiSummaryStatementRequestFeedback=true,\n aiSummaryStatementResponseRecieved,\n aiSummaryStatementResponseError,\n aiSummaryStatementFeedback,\n aiSummaryStatementUserRating,\n aiSummaryStatementUserComment,\n aiSummaryStatementUserRatingSubmitted,\n aiSubmitButtonActions,\n } = this.props;\n\n const {\n aiSummaryStatementLoadingFeedback,\n aiSummaryStatementNeedsToAcceptInfo,\n tempAiSummaryStatementUserRating,\n tempAiSummaryStatementUserComment,\n } = this.state;\n\n const inactive = inactiveBool || aiSummaryStatementLoadingFeedback || aiSummaryStatementResponseRecieved;\n\n let studentNotice;\n if (classes?.includes(\"summary_statement\")) {\n studentNotice = <p className=\"graded-feedback\">Your response will be recorded in your Student Report and may also be viewed by faculty.</p>;\n } else if(graded) {\n studentNotice = <p className=\"graded-feedback\">The suggested answer is shown below.</p>;\n }\n\n const textInputArea = (\n <>\n <textarea\n cols={40}\n rows={boxLines}\n maxLength={characterLimit}\n disabled={inactive}\n value={this.state.value}\n onChange={this.handleChange.bind(this)}\n />\n {!inactive && <p className=\"letter-count\">Letter Count: {(this.state.value || \"\").length}/{characterLimit}</p>}\n </>\n )\n\n let renderedInput = (\n <div>\n {studentNotice}\n {textInputArea}\n </div>\n )\n\n let aiSubmitButton\n let aiSwitch\n if (aiSummaryStatementAllowFeedback) {\n if (!(inactive || aiSummaryStatementLoadingFeedback || aiSummaryStatementResponseRecieved)) {\n aiSwitch = (\n <div style={{display: 'flex', alignItems: 'center', marginBottom: '10px'}}>\n <AqSwitch\n checked={aiSummaryStatementRequestFeedback}\n onChange={() => {userContext.addState({ [uid]: {aiSummaryStatementRequestFeedback: !aiSummaryStatementRequestFeedback} })}}\n disabled={inactive || !!aiSummaryStatementResponseError}\n />\n <span style={{margin: '0 10px'}}>\n Receive AI-generated feedback on my summary statement\n </span>\n <div>\n <AqInfoBubble\n infoText={\n userContext?.groupRoleDefinition?.role_definition.name === \"Student\" ?\n \"This is an experimental new feature. AI-generated feedback will not be shared with faculty.\" :\n \"Students have the option of receiving AI-generated feedback on their summary statements for their own study use, but they cannot edit their statements after their initial response. Please feel free to try out this new feature!\"\n }\n onMouseEnter={() => {ahoy.track(\"AI Summary Statement i-bubble Hovered Over\", {document_id: documentContext.id});}}\n />\n </div>\n </div>\n )\n\n aiSubmitButton = (\n <div style={{marginBottom: '10px'}}>\n <AqButton\n onClick={() => {\n if (aiSummaryStatementRequestFeedback) {\n this.loadSummaryStatementFeedback();\n } else {\n handleActions(aiSubmitButtonActions, this.props);\n\n if (!aiSummaryStatementResponseError) {\n ahoy.track(\"AI Summary Statement Feedback Opt Out\", {document_id: documentContext.id});\n }\n }\n }}\n disabled={R.isEmpty(this.state.value)}\n >\n SUBMIT\n </AqButton>\n </div>\n )\n\n renderedInput = (\n <div>\n {studentNotice}\n {textInputArea}\n {aiSwitch}\n {aiSubmitButton}\n </div>\n )\n } else if (aiSummaryStatementRequestFeedback && (aiSummaryStatementLoadingFeedback || aiSummaryStatementResponseRecieved)) {\n let userRating, answerCommentSection;\n if (aiSummaryStatementResponseRecieved) {\n answerCommentSection = (\n <div style={{marginTop: \"15px\"}}>\n <DocBlockNodes\n {...{...this.props, inactiveBool: false}}\n content={[aiAnswerCommentSection]}\n contentKey=\"content\"\n independentlyEditable\n simple\n shouldHaveAddNodes={editingContext.isEditing}\n />\n </div>\n )\n\n userRating = (\n <div>\n <hr/>\n <div style={{marginBottom: '10px'}}>\n <p>My reaction to this feedback is best expressed as: <span style={{color: 'red'}}>*</span></p>\n <AqSmileRating\n value={aiSummaryStatementUserRatingSubmitted ? aiSummaryStatementUserRating : tempAiSummaryStatementUserRating}\n disabled={aiSummaryStatementUserRatingSubmitted}\n onChange={(newRating) => {\n this.setState({tempAiSummaryStatementUserRating: newRating});\n }}\n />\n </div>\n <div style={{marginBottom: '10px'}}>\n <p>How could this feedback process be improved:</p>\n <textarea\n value={aiSummaryStatementUserRatingSubmitted ? aiSummaryStatementUserComment : tempAiSummaryStatementUserComment}\n disabled={aiSummaryStatementUserRatingSubmitted}\n onChange={(e) => {this.setState({tempAiSummaryStatementUserComment: e.target.value})}}\n />\n </div>\n <div style={{marginBottom: '10px'}}>\n <AqButton\n onClick={() => {\n const extraActions = wrapStateAsSetNodeKVPairActions({ [uid]: {\n aiSummaryStatementUserRating: tempAiSummaryStatementUserRating,\n aiSummaryStatementUserComment: tempAiSummaryStatementUserComment,\n aiSummaryStatementUserRatingSubmitted: true,\n }});\n handleActions(aiSubmitButtonActions.concat(extraActions), this.props);\n }}\n disabled={tempAiSummaryStatementUserRating < 1 || aiSummaryStatementUserRatingSubmitted}\n >\n SUBMIT\n </AqButton>\n </div>\n </div>\n )\n }\n\n let summaryStatementModal;\n if (aiSummaryStatementResponseError) {\n summaryStatementModal = (\n <GenModal open>\n <div className=\"gen-modal-panel\" style={{}}>\n <p>Oops! This feature is experiencing difficulty. Sorry for the hassle. You can still submit your summary statement and continue working through the case.</p>\n\n <div style={{display: 'flex', gap: '20px', justifyContent: 'center', width: '100%'}}>\n <AqButton\n onClick={() => {\n userContext.addState({\n [uid]: {\n aiSummaryStatementRequestFeedback: false,\n },\n })\n this.setState({aiSummaryStatementLoadingFeedback: false});\n }}\n >\n CONTINUE\n </AqButton>\n </div>\n </div>\n </GenModal>\n )\n } else if(aiSummaryStatementNeedsToAcceptInfo || aiSummaryStatementLoadingFeedback) {\n summaryStatementModal = (\n <GenModal open>\n <div className=\"gen-modal-panel\" style={{}}>\n <p><em>This feedback is being generated by using artificial intelligence to compare your summary statement to an ideal summary statement and criteria for effective summary statements. The ideal summary statements and the criteria were created by case authors, which include clerkship directors, program directors, clinical educators, and other health professions educators. The artificial intelligence model used to provide feedback is being fine-tuned using expert input from clinicians.</em></p>\n\n <div style={{display: 'flex', gap: '20px', justifyContent: 'center', width: '100%'}}>\n {\n aiSummaryStatementNeedsToAcceptInfo ? (\n <AqButton\n onClick={() => {\n this.setState({aiSummaryStatementNeedsToAcceptInfo: false});\n analytics.track(\"use_ai_preceptor_for_summary_statement_feedback\", { case: documentContext.title, source: 'Case', page: window.location.href });\n }}\n >\n OKAY\n </AqButton>\n ) : (\n <GenLoadingSpinner/>\n )\n }\n </div>\n </div>\n </GenModal>\n )\n }\n\n renderedInput = (\n <div>\n <div style={{display: 'flex', gap: '10px'}}>\n <div style={{flex: \"0 1 50%\"}}>\n <h5>Your Summary Statement</h5>\n {studentNotice}\n </div>\n <div style={{flex: \"0 1 50%\"}}>\n <h5 style={{paddingBottom: \"10px\"}}>AI-Generated Feedback</h5>\n </div>\n </div>\n <div style={{display: 'flex', gap: '10px'}}>\n <div style={{flex: \"0 1 50%\"}}>\n {textInputArea}\n </div>\n <div style={{flex: \"0 1 50%\", backgroundColor: \"white\", padding: \"10px\", marginBottom: \"10px\"}}>\n {aiSummaryStatementLoadingFeedback || !aiSummaryStatementFeedback ? <GenLoadingSpinner/> : R.trim(aiSummaryStatementFeedback).split(/\\n+/).map((feedbackParagraph, i) => <p key={i}>{feedbackParagraph}</p>)}\n </div>\n </div>\n {answerCommentSection}\n <div style={{display: 'flex', gap: '10px', marginTop: \"10px\"}}>\n <div style={{flex: \"0 1 50%\"}}>\n {userRating}\n </div>\n <div style={{flex: \"0 1 50%\"}}>\n </div>\n </div>\n {summaryStatementModal}\n </div>\n )\n } else if (!aiSummaryStatementRequestFeedback && inactive) {\n renderedInput = (\n <div>\n {studentNotice}\n {textInputArea}\n <div style={{marginTop: \"15px\"}}>\n <DocBlockNodes\n {...{...this.props, inactiveBool: false}}\n content={[aiAnswerCommentSection]}\n contentKey=\"content\"\n independentlyEditable\n simple\n shouldHaveAddNodes={editingContext.isEditing}\n />\n </div>\n </div>\n )\n }\n }\n\n return (\n <div\n id={uid}\n data-is-node\n data-uid={uid}\n className={classNames(\"doc-text-input\", uid, {inactive: inactive})}\n style={backgroundStyleFromNode(this.props)}\n contentEditable={false}\n >\n {renderedInput}\n </div>\n );\n }\n}\n","import consumer from \"./consumer\"\n\nexport default function createAutomatedSummaryStatementSubscription({summaryStatementId, onSummaryStatementFeedback, onConnected, onDisconnected, onRejected}) {\n return consumer.subscriptions.create({ channel: \"AutomatedSummaryStatementChannel\", summary_statement_id: summaryStatementId }, {\n received(data) {\n onSummaryStatementFeedback(data);\n },\n\n connected() {\n onConnected();\n },\n\n disconnected() {\n onDisconnected();\n },\n\n rejected() {\n onRejected();\n },\n\n getFeedback(summaryStatementData) {\n this.perform(\"getFeedback\", summaryStatementData)\n },\n });\n}\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\n\ninterface DocVariantPlaceholderProps extends DocVariantPlaceholderType, BlockNodeAll {\n}\n\nfunction DocVariantPlaceholder(props: DocVariantPlaceholderProps) {\n const {\n uid,\n classes,\n editingContext,\n variantableId,\n variantableType,\n } = props;\n\n if (!editingContext.isEditing) { return null }\n\n return (\n <div\n id={props.uid}\n data-is-node\n data-uid={props.uid}\n className={classNames(\"doc-variant-placeholder\", uid, classes)}\n contentEditable={false}\n >\n <span>Loading...</span>\n </div>\n );\n}\n\nexport default React.memo(DocVariantPlaceholder);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocBookmark from \"../BlockNodeHelpers/Bookmark\";\nimport DocNote from \"../BlockNodeHelpers/Note\";\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\n\nimport GenButton from \"../../Gen/Button/component\";\n\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\nimport { MEDIA_PICKER } from \"../../../helpers/Doc/menu\";\n\nimport PlaceholderVideo from \"images/placeholder-video.png\";\n\ninterface DocVideoProps extends DocVideoType<InlineNode>, BlockNodeAll {};\n\nfunction DocVideo(props: DocVideoProps) {\n const {\n editingContext,\n } = props;\n\n const openPicker = (e: React.MouseEvent<HTMLAnchorElement>) => {\n e.stopPropagation();\n if (editingContext.isEditing) {\n editingContext.setCurrentMenu(MEDIA_PICKER, { mediaType: \"video\", uid: props.uid });\n }\n };\n\n let title = null;\n if ((typeof props.title === \"string\" && props.title.length > 0) || editingContext.isEditing) {\n title = (\n <figcaption>\n <DocStyledText\n uid={props.uid}\n content={props.title}\n contentKey={\"title\"}\n editingContext={editingContext}\n placeholder={\"Enter Video text here\"}\n independentlyEditable\n disableStyleTextEditing={props.disableStyleTextEditing}\n />\n </figcaption>\n );\n }\n\n let videoPlayer = null;\n switch (props.source) {\n case \"local\":\n let captionsTrack = null;\n if (props.url) {\n const videoAsset: Partial<DigitalAsset> = props.mediaContext.videos.find((v)=>{return v.distribution_url == props.url || props.url.includes(v.asset_path)}) || {};\n const captions = props.mediaContext.captions.filter((c)=>{return c.title == videoAsset.title});\n if (captions.length) {\n let caption = null;\n if (captions.length > 1) {\n caption = captions.reduce((capn_1, capn) => (capn_1.external_identifier > capn.external_identifier) ? capn_1 : capn);\n } else {\n caption = captions[0];\n }\n captionsTrack = <track key=\"en\" label=\"English\" kind=\"subtitles\" srcLang=\"en\" src={caption.distribution_url} />;\n }\n videoPlayer = (\n <video key={props.url} crossOrigin=\"anonymous\" preload=\"none\" controls>\n <source src={props.url} />\n {captionsTrack}\n </video>\n );\n } else if (props.uri && props.uri != \"blank.mp4\") {\n Rollbar.warning(\"Deprecated render DocVideo with uri called\");\n const captionName = `${props.uri.split(\".\")[0]}.vtt`;\n if (props.documentContext.captions.includes(captionName)) {\n captionsTrack = <track key=\"en\" label=\"English\" kind=\"subtitles\" srcLang=\"en\" src={props.currentVersion.localCaptionURL(captionName)} />;\n }\n videoPlayer = (\n <div className=\"comment-container\" style={backgroundStyleFromNode(props)}>\n <video crossOrigin=\"anonymous\" preload=\"none\" controls>\n <source src={props.currentVersion.localVideoURL(props.uri)} />\n {captionsTrack}\n </video>\n </div>\n );\n } else {\n videoPlayer = (\n <div className=\"comment-container\" style={backgroundStyleFromNode(props)}>\n <img src={PlaceholderVideo} />\n </div>\n )\n }\n\n break;\n case \"youtube\":\n videoPlayer = <iframe width=\"560\" height=\"315\" src={`https://www.youtube.com/embed/${props.uri}`} frameBorder=\"0\" allowFullScreen></iframe>;\n break;\n case \"vimeo\":\n videoPlayer = <iframe src={`https://player.vimeo.com/video/${props.uri}`} width=\"640\" height=\"360\" frameBorder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture\" allowFullScreen></iframe>;\n break;\n default:\n Rollbar.warning(`DocVideo does not recognize source of type ${props.source}`);\n return null;\n }\n\n return (\n <div\n id={props.uid}\n data-is-node\n data-uid={props.uid}\n className={classNames(\"doc-video\", `doc-video-${props.source}`, props.uid, {\"focused-bookmark\": props.isFocusedBookmark && !props.simple})}\n contentEditable={false}\n >\n <div className=\"doc-video-wrapper\">\n {videoPlayer}\n {editingContext.isEditing && props.userContext.permissions.viewMediaAssets && <GenButton\n key=\"picker-button\"\n className=\"doc-video-picker-button\"\n name={<i className=\"fa fa-video\"></i>}\n highlighted\n small\n onClick={openPicker}\n />}\n </div>\n {title}\n <DocBookmark {...props} />\n <DocNote {...props} />\n </div>\n );\n}\n\nexport default React.memo(DocVideo);\n","import * as React from \"react\";\n\nimport { compact, flatten } from \"lodash\";\n\nimport DocAddNode from \"./BlockNodeHelpers/AddNode\";\n\nimport DocAudio from \"./BlockNodes/Audio\";\nimport DocButton from \"./BlockNodes/Button\";\nimport DocCategoryMatcher from \"./BlockNodes/CategoryMatcher\";\nimport DocCDQQuestion from \"./BlockNodes/CDQQuestion\";\nimport DocCheckbox from \"./BlockNodes/Checkbox\";\nimport DocHorizontalRule from \"./BlockNodes/HorizontalRule\";\nimport DocImage from \"./BlockNodes/Image\";\nimport DocImageGallery from \"./BlockNodes/ImageGallery\";\nimport DocLearningObjective from \"./BlockNodes/LearningObjective\"\nimport DocLearningObjectivesList from \"./BlockNodes/LearningObjectivesList\";\nimport DocList from \"./BlockNodes/List\";\nimport DocMultipleChoice from \"./BlockNodes/MultipleChoice\";\nimport DocParagraph from \"./BlockNodes/Paragraph\";\nimport DocRatingBar from \"./BlockNodes/RatingBar\";\nimport DocSection from \"./BlockNodes/Section\";\nimport DocTable from \"./BlockNodes/Table\";\nimport DocTextInput from \"./BlockNodes/TextInput\";\nimport DocVariantPlaceholder from \"./BlockNodes/VariantPlaceholder\";\nimport DocVideo from \"./BlockNodes/Video\";\n\nexport type DocBlockNodesProps = (\n DocSectionType<InlineNode> |\n DocTableCellType<InlineNode> |\n DocListItemNorrowedType<InlineNode> |\n DocLearningObjectivesListType<InlineNode> |\n DocTextInputType\n ) & {\n blockNodesContainsSelection?: boolean;\n cdqFeatures?: Array<CdqFeature>;\n content: Array<DocBlockNodeSection>;\n contentKey: string;\n currentMenu?: DocMenu;\n currentVersion: CurrentVersion;\n disableStyleTextEditing?: boolean;\n displayContext: DisplayContext;\n documentContext: DocumentContext;\n editingContext: EditingContext;\n featureFlag: FeatureFlag;\n inactiveBool?: boolean;\n independentlyEditable?: boolean;\n integrationInfo?: IntegrationInfo;\n level?: number;\n localClipboard?: LocalClipboardData;\n mediaContext: MediaContext;\n openSiblingSectionUIDs?: Array<string>;\n shouldHaveAddNodes?: boolean;\n simple?: boolean;\n userContext: UserContext;\n};\n\nexport default function DocBlockNodes(props: DocBlockNodesProps) {\n const {\n content,\n inactiveBool,\n documentContext,\n currentVersion,\n editingContext,\n userContext,\n displayContext,\n mediaContext,\n featureFlag,\n currentMenu,\n localClipboard,\n simple,\n cdqFeatures,\n level,\n openSiblingSectionUIDs,\n shouldHaveAddNodes,\n contentKey,\n disableStyleTextEditing,\n independentlyEditable,\n blockNodesContainsSelection,\n integrationInfo,\n } = props;\n\n const nodeLookup = {\n audio: DocAudio,\n button: DocButton,\n categoryMatcher: DocCategoryMatcher,\n cdqQuestion: DocCDQQuestion,\n checkbox: DocCheckbox,\n horizontalRule: DocHorizontalRule,\n image: DocImage,\n imageGallery: DocImageGallery,\n learningObjective: DocLearningObjective,\n learningObjectivesList: DocLearningObjectivesList,\n multipleChoice: DocMultipleChoice,\n numberedList: DocList,\n paragraph: DocParagraph,\n ratingBar: DocRatingBar,\n regularList: DocList,\n section: DocSection,\n table: DocTable,\n textInput: DocTextInput,\n variantPlaceholder: DocVariantPlaceholder,\n video: DocVideo,\n } as const;\n\n let lastNodeType;\n\n function checkMultipleSelect(data) {\n const multipleSelectElement = data.find(item =>\n [\"multipleChoice\", \"cdqQuestion\", \"textInput\", \"ratingBar\", \"categoryMatcher\"].includes(item.type)\n );\n\n if (!multipleSelectElement) return false;\n\n switch (multipleSelectElement.type) {\n case \"multipleChoice\":\n case \"cdqQuestion\":\n return Array.isArray(multipleSelectElement.content) &&\n multipleSelectElement.content.some(option => option.value === true);\n\n case \"textInput\":\n case \"categoryMatcher\":\n return multipleSelectElement.value !== \"\";\n\n case \"ratingBar\":\n return multipleSelectElement.value > 0;\n\n default:\n return false;\n }\n }\n\n let contentNodes = content.filter((node) => node).map((node, index) => {\n const newInactiveBool = node.hasOwnProperty(\"inactive\") && (node.inactive !== 0) ? node.inactive === 2 : inactiveBool;\n\n const trueOrEmptyOptions = blockNodesContainsSelection || disableStyleTextEditing ?\n {disableStyleTextEditing: true} : {}\n\n let onlyIfSectionOptions;\n if (node.type === \"section\") {\n onlyIfSectionOptions = {\n level: level + 1,\n openSiblingSectionUIDs: openSiblingSectionUIDs,\n cdqFeatures: node.cdqFeatures || cdqFeatures,\n integrationInfo: integrationInfo,\n };\n }\n\n let addNode: React.JSX.Element;\n if (shouldHaveAddNodes) {\n addNode = (\n <DocAddNode\n key={`${node.uid}--${index + 1}`}\n editIndex={node.editIndex}\n siblingUid={node.uid}\n documentContext={documentContext}\n editingContext={editingContext}\n userContext={userContext}\n currentMenu={currentMenu}\n localClipboard={localClipboard}\n parentNode={props}\n parentContentKey={contentKey}\n shouldHaveSpace={\n ![\"paragraph\", \"regularList\", \"numberedList\"].includes(node.type) &&\n ![\"paragraph\", \"regularList\", \"numberedList\"].includes(lastNodeType)\n }\n />\n );\n }\n\n lastNodeType = node.type;\n\n const NodeTag = nodeLookup[node.type];\n if (NodeTag) {\n return ([\n addNode,\n <NodeTag\n {...node}\n key={node.uid}\n documentContext={documentContext}\n currentVersion={currentVersion}\n editingContext={editingContext}\n userContext={userContext}\n displayContext={displayContext}\n mediaContext={mediaContext}\n featureFlag={featureFlag}\n simple={simple}\n inactiveBool={(node.type=='button' && node.title=='Submit')? !checkMultipleSelect(content) : newInactiveBool}\n cdqFeatures={cdqFeatures}\n {...trueOrEmptyOptions}\n {...onlyIfSectionOptions}\n />,\n ]);\n } else {\n // Rollbar.warning(`DocBlockNodes does not recognize node of type ${node.type}`);\n return [];\n }\n });\n\n if (shouldHaveAddNodes) {\n contentNodes.push([\n <DocAddNode\n key={\"--0\"}\n documentContext={documentContext}\n editingContext={editingContext}\n userContext={userContext}\n currentMenu={currentMenu}\n localClipboard={localClipboard}\n parentNode={props}\n parentContentKey={contentKey}\n shouldHaveSpace={\n ![\"paragraph\", \"regularList\", \"numberedList\"].includes(lastNodeType)\n }\n />\n ]);\n }\n\n\n if (editingContext.isEditing) {\n let editableData = {}\n if (independentlyEditable) {\n editableData = {\n \"data-is-independently-editable\": true,\n style: {\n \"userSelect\": \"auto\",\n \"WebkitUserSelect\": \"auto\",\n },\n };\n\n if (!disableStyleTextEditing) {\n editableData = {\n ...editableData,\n contentEditable: true\n }\n }\n }\n\n return (\n <div className=\"doc-children\"\n data-is-block-nodes\n {...editableData}\n suppressContentEditableWarning\n autoCorrect={\"off\"}\n autoCapitalize={\"off\"}\n spellCheck={false}\n onDrop={(e) => {e.stopPropagation(); e.preventDefault();}}\n >\n {compact(flatten(contentNodes))}\n </div>\n );\n } else {\n return (\n <div className=\"doc-children\">\n {compact(flatten(contentNodes))}\n </div>\n );\n }\n}\n","import * as React from 'react';\n\nimport * as classNames from \"classnames\";\n\nimport Confetti from 'react-confetti';\n\nimport GreenCheckImage from \"images/completed-check.png\";\n\nimport AqButton from \"../../Aq/Button\"\n\nimport { handleActions } from \"../../../helpers/Doc/handleActions\";\n\ninterface RatingStarProps {\n maxValue: number;\n onClick: (i: number) => void;\n value: number;\n}\n\nfunction RatingStars(props: RatingStarProps) {\n const {\n maxValue,\n onClick,\n value,\n } = props;\n\n const stars = [];\n for (let i = 0; i < maxValue; i += 1) {\n const className = classNames(\"doc-rating-bar-star\", {\"doc-rating-bar-star-active\": (i >= maxValue - value)});\n stars.push(<span className={className} key={i} onClick={() => onClick(maxValue - i)}>☆</span>);\n }\n\n return (\n <div className={\"doc-rating-bar\"}>\n {stars}\n </div>\n )\n}\n\ninterface DocFeedbackModalProps {\n displayContext: DisplayContext;\n userContext: UserContext;\n onClick: Array<DocAction>;\n onSubmitFinish: () => void;\n};\n\nexport default function DocFeedbackModal(props: DocFeedbackModalProps) {\n const {\n displayContext,\n userContext,\n onClick,\n onSubmitFinish,\n } = props;\n\n const [rating1, setRating1] = React.useState(0)\n const [rating2, setRating2] = React.useState(0)\n const [comment, setComment] = React.useState(\"\")\n const [showConfetti, setShowConfetti] = React.useState(false)\n\n let modal\n if (showConfetti) {\n modal = (\n <>\n <Confetti\n width={window.innerWidth}\n height={window.innerHeight}\n style={{ position: 'fixed', top: 0, left: 0 }}\n />\n <div style={{\n position: 'fixed',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n backgroundColor: 'white',\n padding: '20px',\n boxShadow: '0 4px 8px rgba(0, 0, 0, 0.1)',\n zIndex: 1000\n }}>\n <div style={{fontFamily: \"Roboto Condensed\",fontSize: \"24px\",fontWeight: \"700\"}}>\n Excellent work!\n </div>\n <div style={{fontFamily: \"Roboto Condensed\",fontSize: \"24px\",fontWeight: \"400\"}}>\n This case is now complete.\n </div>\n <div style={{display: 'flex', justifyContent: 'center'}}>\n <img src={GreenCheckImage} alt=\"Green Check Mark\" />\n </div>\n </div>\n </>\n )\n } else {\n modal = (\n <div className=\"feedback-modal\">\n <div className=\"doc-section-body\">\n <p className=\"feedback-modal-heading\">You’re almost done...</p>\n\n <p className=\"feedback-modal-subheading\">GIVE US YOUR FEEDBACK TO COMPLETE THIS CASE</p>\n\n <div className=\"feedback-modal-blue-separator\"></div>\n\n <p className=\"feedback-modal-description-heading\">We want to know what you think.</p>\n\n <p className=\"feedback-modal-description\">\n Your rating and optional comment will be reviewed by Aquifer staff and shared with the educators who regularly review this case.\n </p>\n\n <p style={{fontSize: \"16px\", fontWeight: 700, fontFamily: \"Roboto\", marginLeft: \"30px\"}}>This case was a valuable use of my time.</p>\n\n <div style={{marginLeft: \"45px\"}}>\n <RatingStars\n maxValue={5}\n value={rating1}\n onClick={setRating1}\n />\n </div>\n\n <p style={{fontSize: \"16px\", fontWeight: 700, fontFamily: \"Roboto\", marginLeft: \"30px\"}}>I will apply what I learned to patient care.</p>\n\n <div style={{marginLeft: \"45px\"}}>\n <RatingStars\n maxValue={5}\n value={rating2}\n onClick={setRating2}\n />\n </div>\n\n <p\n style={{\n fontWeight: 700,\n fontSize: \"12px\",\n fontFamily: \"Roboto Condensed\",\n color: \"black\"\n }}\n >Please note any comments, suggestions, or questions related to the case (optional):</p>\n\n <textarea\n cols={40}\n rows={3}\n value={comment}\n onChange={(e) => setComment(e.target.value)}\n />\n\n <AqButton\n disabled={rating1 < 1 || rating2 < 1}\n onClick={() => {\n setShowConfetti(true)\n onSubmitFinish();\n\n userContext.addState({\n feedback_card_1_rating_bar: {value: rating1},\n feedback_card_2_rating_bar: {value: rating2},\n });\n\n if (comment !== \"\") {\n userContext.addState({\n feedback_card_1_text_input_section: {value: comment},\n });\n }\n\n setTimeout(() => {\n const handleActionsArgs = {\n displayContext,\n userContext,\n }\n\n setShowConfetti(false);\n handleActions(onClick, handleActionsArgs);\n }, 3000); // 3 seconds\n }}\n >\n Submit & Finish Case\n </AqButton>\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"feedback-modal-background\">\n {modal}\n </div>\n )\n}\n","import * as React from \"react\";\n\nimport * as R from \"ramda\";\n\nimport * as classNames from \"classnames\";\n\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\nimport { displayModes } from \"../../../helpers/Doc/displayMode\";\nimport { currentTimeInSeconds } from \"../../../helpers/time_format\";\n\nimport DocCDQFeatures from \"./CDQFeatures\";\nimport DocSectionHeader from \"./Section/Header\";\n\nimport DocBlockNodes from \"../BlockNodes\";\nimport IntegrationsTags from \"../../Integrations/component\";\n\nimport DocFeedbackModal from \"../Modals/FeedbackModal\";\ninterface DocSectionProps extends DocSectionType<InlineNode>, BlockNodeAll {\n blockNodesContainsSelection?: boolean;\n currentMenu?: DocMenu;\n integrationInfo: IntegrationInfo;\n openSiblingSectionUIDs: Array<string>;\n paused?: boolean;\n roData: RoData;\n roDocumentCount: number;\n submitted?: boolean;\n};\n\ninterface DocSectionState {\n timeLeftInSeconds?: number;\n showModal: boolean;\n};\n\nexport default class DocSection extends React.PureComponent<DocSectionProps, DocSectionState> {\n constructor(props: DocSectionProps) {\n super(props);\n let startingState: DocSectionState = {\n showModal: localStorage.getItem(\"showModal\") === \"true\",\n };\n\n const timeLeft = this.calculateTimeLeft();\n if (timeLeft) {\n startingState = {...startingState, timeLeftInSeconds: timeLeft};\n }\n\n this.state = startingState;\n this.handleShowModal = this.handleShowModal.bind(this);\n }\n\n private sectionRef: React.RefObject<HTMLDivElement> = React.createRef<HTMLDivElement>();\n private timer?: ReturnType<typeof setTimeout>;\n private oldBoundingClientRect?: DOMRect;\n\n componentDidMount() {\n if (!this.props.userContext.isAdmin) { this.startTimer(); }\n }\n\n componentWillUnmount() {\n if (this.timer) {\n clearInterval(this.timer);\n }\n }\n\n startTimer() {\n if (this.props.timeLimit) {\n if (!this.props.currentTimeSegmentStart && this.props.timeUsedBeforeCurrentSegment && this.props.timeUsedBeforeCurrentSegment>0) {\n this.props.userContext.addState({\n [this.props.uid]: {currentTimeSegmentStart: Math.floor(new Date().getTime() / 1000)},\n });\n }\n\n this.timer = setInterval(this.tick.bind(this), 1000);\n }\n }\n\n calculateTimeLeft() {\n if (this.props.timeLimit) {\n let timeLeft = this.props.timeLimit;\n if (this.props.timeUsedBeforeCurrentSegment) {\n timeLeft = timeLeft - this.props.timeUsedBeforeCurrentSegment;\n }\n\n if (this.props.currentTimeSegmentStart) {\n timeLeft = timeLeft - (currentTimeInSeconds() - this.props.currentTimeSegmentStart);\n }\n\n return timeLeft;\n } else {\n return;\n }\n }\n\n tick() {\n if ( this.props.timeLimit && this.props.currentTimeSegmentStart ) {\n this.setState({timeLeftInSeconds: this.calculateTimeLeft()});\n }\n }\n\n componentWillUpdate(nextProps: DocSectionProps, nextState: DocSectionState) {\n if (this.props.collapsed !== nextProps.collapsed) {\n this.oldBoundingClientRect = this.sectionRef.current?.getBoundingClientRect();\n }\n }\n\n componentDidUpdate(prevProps: DocSectionProps, prevState: DocSectionState) {\n if ((prevProps.collapsed !== this.props.collapsed) && this.props.collapsed) {\n const oldBoundingClientRect = this.oldBoundingClientRect;\n const newBoundingClientRect = this.sectionRef.current?.getBoundingClientRect();\n if (oldBoundingClientRect && newBoundingClientRect) {\n if (oldBoundingClientRect.bottom < 0) {\n window.scrollBy(0,newBoundingClientRect.height - oldBoundingClientRect.height);\n } else if (oldBoundingClientRect.top < 0) {\n if (this.props.collapsed) {\n window.scrollBy(0,newBoundingClientRect.bottom - 70);\n }\n }\n }\n }\n }\n\n // Function to update showModal state\n handleShowModal() {\n localStorage.setItem(\"showModal\", \"true\");\n setTimeout(() => {\n localStorage.removeItem(\"showModal\");\n }, 5000);\n };\n\n render() {\n const {\n title,\n displayContext,\n userContext,\n content,\n } = this.props;\n\n const isFeedbackCard = this.props.classes?.includes(\"feedback_card\");\n if (isFeedbackCard && displayContext.displayMode === displayModes.STUDENT) {\n const button = content.find((child) => child.type == \"button\")\n\n return <DocFeedbackModal\n displayContext={displayContext}\n userContext={userContext}\n onClick={button.onClick}\n onSubmitFinish={this.handleShowModal}\n />\n }\n\n if (!this.props.userContext.isAdmin) {\n if (this.props.submitted) {\n clearInterval(this.timer);\n this.props.userContext.submitExam(\"Your exam has been sucessfully submitted.\");\n return null;\n } else if (this.props.timeLimit && this.state.timeLeftInSeconds && this.state.timeLeftInSeconds <= 0) {\n clearInterval(this.timer);\n this.props.userContext.submitExam(\"Your time has expired. Your exam has been sucessfully submitted.\");\n return null;\n } else if (this.props.paused) {\n this.props.userContext.pauseExam();\n return null;\n }\n }\n\n let visibleContent = this.props.content;\n let shouldDisplayIntegrationTags = this.props.classes?.includes(\"case_synopsis_card\") && this.props.featureFlag.integrations\n\n if (!this.props.displayContext.isDisplayFull) {\n if ((this.props.level !== 0 && !this.props.nested) || (this.props.collapsed) || (this.props.inactiveBool)) {\n visibleContent = [];\n shouldDisplayIntegrationTags = false;\n }\n }\n\n if (!this.props.displayContext.isUngated) {\n visibleContent = visibleContent.filter((node) => node && node.invisible !== true);\n }\n\n if (this.props.displayContext.onlyDisplaySectionTitles) {\n visibleContent = visibleContent.filter((node) => node.type === \"section\");\n shouldDisplayIntegrationTags = false;\n }\n\n let openSiblingSectionUIDs;\n if (this.props.level === 0 && !this.props.displayContext.canBeEditing) {\n openSiblingSectionUIDs = visibleContent.filter((node) => {\n return (\n node.type === \"section\"\n && node.collapsed !== true\n && node.collapsible === true\n );\n }).map((node) => node.uid);\n }\n\n const classes = classNames(\"doc-section\", this.props.uid, this.props.classes,\n {\n nested: this.props.nested,\n collapsible: this.props.collapsible,\n collapsed: this.props.collapsed,\n inactive: this.props.inactiveBool,\n \"focused-bookmark\": this.props.isFocusedBookmark,\n });\n\n const isSummarySatementSection = typeof title === \"string\" && /^Summary statement/i.test(title);\n const isSaqCard = this.props.classes?.includes(\"saq_card\");\n const isFinishCaseCard = this.props.classes?.includes(\"finish_case_card\");\n let propsClone = {...this.props};\n\n if (displayContext.enableAiSummaryStatementFeedback && isSummarySatementSection) {\n const questionSectionIndex = visibleContent.findIndex((node) => node.type == \"section\" && node.classes?.includes(\"question\"));\n const questionSection = visibleContent.find((node): node is DocSectionType<InlineNode> => node.type === \"section\" && !!node.classes?.includes(\"question\"))\n\n const answerCommentIndex = questionSection?.content?.findIndex((node): node is DocSectionType<InlineNode> => node.type === \"section\" && !!node.classes?.includes(\"answer_comment\"));\n const answerCommentSection = questionSection?.content?.find((node): node is DocSectionType<InlineNode> => node.type === \"section\" && !!node.classes?.includes(\"answer_comment\"));\n const idealSummaryStatement = answerCommentSection?.content?.find((node): node is DocParagraphType<InlineNode> => node.type === \"paragraph\" && !(/<strong>Expert Answer:<\\/strong>/.test(node.content)))?.content;\n const summaryStatementTextInput = questionSection?.content?.find((node): node is DocTextInputType => node.type === \"textInput\");\n const summaryStatementSubmitButtonIndex = questionSection?.content?.findIndex((node): node is DocButtonType<InlineNode> => node.type === \"button\");\n const summaryStatementSubmitButton = questionSection?.content?.find((node): node is DocButtonType<InlineNode> => node.type === \"button\");\n\n if (idealSummaryStatement && summaryStatementTextInput && summaryStatementSubmitButton) {\n const summaryStatementSubmitButtonActions = summaryStatementSubmitButton.onClick;\n\n visibleContent = R.over(R.lensPath([questionSectionIndex, \"content\"]), R.remove(answerCommentIndex, 1), visibleContent);\n visibleContent = R.over(R.lensPath([questionSectionIndex, \"content\"]), R.remove(summaryStatementSubmitButtonIndex, 1), visibleContent);\n\n summaryStatementTextInput.aiAnswerCommentSection = answerCommentSection;\n summaryStatementTextInput.aiSummaryStatementIdeal = idealSummaryStatement;\n summaryStatementTextInput.aiSummaryStatementAllowFeedback = true;\n summaryStatementTextInput.aiSubmitButtonActions = summaryStatementSubmitButtonActions;\n }\n }\n\n if(isSaqCard) {\n return <></>;\n }\n\n if(isFinishCaseCard) {\n const quizContent = !this.props.documentContext.quizUrl ? '' : `\n <div class=\"quiz-buttons\">\n ${this.props.documentContext.quizUrl.includes('create_start_quiz') ? `\n <a class=\"finish-card-button\" href=${this.props.documentContext.quizUrl} target=\"_blank\" aria-label=\"Take the quiz now\" > <span class=\"finish-card-quiz-text\" data-url=${this.props.documentContext.quizUrl}> Take the quiz now </span> </a>\n ` : `\n <a class=\"finish-card-button\"\n href=\"#\"\n data-url=${this.props.documentContext.quizUrl}\n role=\"button\"\n aria-label=\"Take the quiz now\"\n onclick=\"javascript: event.preventDefault();\n fetch(event.target.dataset.url)\n .then(response => response.text())\n .then(html => Turbo.renderStreamMessage(html))\n .then(() => {\n document.getElementById('openQuestionContainer').classList.remove('hidden');\n analytics.track('open_questions', { page: window.location.href, source: 'Case Page', case_name: '${this.props.documentContext.title}', time_on_case: '${this.props.documentContext.timeOnCase}' });\n });\"\n >\n <span class=\"finish-card-quiz-text\" data-url=${this.props.documentContext.quizUrl}> Take the quiz now </span>\n </a>\n ` }\n ${ !this.props.documentContext.todoUrl ? '' : `\n <a href=\"#\"\n data-url=${this.props.documentContext.todoUrl}\n role=\"button\"\n aria-label=\"Save quiz to do list\"\n onclick=\"javascript: event.preventDefault();\n fetch(event.target.dataset.url)\n .then(response => response.text())\n .then(html => Turbo.renderStreamMessage(html))\n .then(() => {\n document.getElementById('todo_form_container').classList.remove('hidden');\n analytics.track('saq_save_to_do', { page: window.location.href, source: 'Case Page', case_name: '${this.props.documentContext.title}', time_on_case: '${this.props.documentContext.timeOnCase}' });\n });\"\n class=\"finish-card-todo-button\"\n id=\"todoURLButton\"\n >\n ${this.props.documentContext.todoAction}\n </a>\n `}\n </div>\n <br>\n `;\n\n const content = `\n <div class=\"finish-card\">\n <div class='finish-card-start'>\n Well done! You have completed the case.\n </div>\n <div class=\"finish-card-layout\">\n ${this.props.documentContext.quizUrl ? `\n <div class=\"finish-card-quiz-body\">\n <div class='finish-card-body'>\n <h5 class='finish-card-heading'> Next: Check your knowledge </h5>\n <div class='finish-card-question-icon'></div>\n <p class='finish-card-content'> Take a PracticeSmart quiz with ${this.props.documentContext.quizQuestionCount} questions related to this case. </p>\n <p class='finish-card-content'> <b> Short on time? </b> Save the quiz to your to-do list for later.</p>\n </div>\n ${quizContent}\n </div>\n ` : ''}\n <div class='finish-card-summary-body'>\n <h5 class='finish-card-heading'> ACCESS CASE SUMMARY </h5>\n <div class='finish-card-summary-icon'></div>\n <p class='finish-card-content'> Download a printable Case Summary of the key teaching points covered in this case. </p>\n </div>\n <a class=\"finish-card-summary-button\" href=${this.props.documentContext.caseSummaryUrl} target=\"_blank\" onclick=\"analytics.track('view_case_summary', { page: window.location.href, source: 'Case Page', case_name: '${this.props.documentContext.title}', time_on_case: '${this.props.documentContext.timeOnCase}' });\"> View Case Summary <span class=\"view-summary-icon\"></span> </a>\n </div>\n </div>\n <div class=\"gen-modal hidden\" id=\"openQuestionContainer\">\n <div class=\"gen-modal-panel\" style=\"padding-top: 33px; padding-left: 51px; padding-right: 63px; font-family: roboto; font-size: 16px;width: 498px;\">\n <div id=\"quizModal\"></div>\n </div>\n </div>\n `;\n\n // Modal content (same as original content but with a different UI)\n const modalContent = `\n <div data-controller=\"modal\">\n <div class=\"gen-modal\" data-modal-target=\"modal\" id=\"finish_card_modal\" role=\"dialog\" aria-labelledby=\"finish_card_heading\" aria-describedby=\"finish_card_body\">\n <div class=\"gen-modal-panel\">\n <div class=\"gen-modal-header-right\">\n <button class=\"close-icon\"aria-label=\"Close modal\" data-action=\"click->modal#close\">x</button>\n </div>\n <div class=\"finish-card\">\n ${this.props.documentContext.quizUrl ? `\n <div class=\"finish-card-image-container\">\n <img alt=\"Quiztime\" class=\"finish-card-image\" aria-hidden=\"true\" />\n </div>\n ` : ''}\n <div class=\"finish-card-layout\">\n ${this.props.documentContext.quizUrl ? `\n <div class=\"finish-card-quiz-body\">\n <div class='finish-card-body'>\n <h5 class='finish-card-heading'> Next: Check your knowledge </h5>\n <p class='finish-card-content'> Take a PracticeSmart quiz with ${this.props.documentContext.quizQuestionCount} questions related to this case. </p>\n <p class='finish-card-content'> <b> Short on time? </b> Save the quiz to your to-do list for later.</p>\n </div>\n ${quizContent}\n </div>\n ` : ''}\n <div class='finish-card-summary-body'>\n <h5 class='finish-card-heading'> ACCESS CASE SUMMARY </h5>\n <p class='finish-card-content'> Download a printable Case Summary of the key teaching points covered in this case. </p>\n </div>\n <a class=\"finish-card-summary-button\" href=${this.props.documentContext.caseSummaryUrl} target=\"_blank\" aria-label=\"View case summary\" onclick=\"analytics.track('view_case_summary', { page: window.location.href, source: 'Case Page', case_name: '${this.props.documentContext.title}', time_on_case: '${this.props.documentContext.timeOnCase}' });\" autofocus> View case summary <span class=\"view-summary-icon\"></span></a>\n </div>\n </div>\n <div class=\"gen-modal-header-right\">\n <button class=\"close-btn\" aria-label=\"Close modal\" data-action=\"click->modal#close\"> Close </span>\n </div>\n </div>\n </div>\n </div>\n `;\n\n // Combine original content and modal\n const finalContent = this.state.showModal ? `\n ${content}\n ${modalContent}\n ` : `${content}`;\n\n propsClone.title = 'Next Steps';\n if (propsClone.content[1]) {\n propsClone.content[1].content = finalContent;\n }\n }\n\n return (\n <div\n id={this.props.uid}\n data-is-node\n data-uid={this.props.uid}\n className={classes}\n style={backgroundStyleFromNode(this.props)}\n contentEditable={false}\n ref={this.sectionRef}\n >\n <DocSectionHeader {...propsClone} />\n <div className=\"doc-section-body\">\n <DocCDQFeatures {...this.props} />\n <DocBlockNodes\n {...this.props}\n content={visibleContent}\n contentKey=\"content\"\n independentlyEditable\n openSiblingSectionUIDs={openSiblingSectionUIDs}\n shouldHaveAddNodes={this.props.editingContext.isEditing && (this.props.displayContext.isDisplayFull || !this.props.collapsed)}\n />\n {shouldDisplayIntegrationTags &&\n <IntegrationsTags\n {...this.props.integrationInfo}\n />\n }\n </div>\n </div>\n );\n }\n}\n","import * as React from \"react\";\n\ninterface ReasoningToolPanelDeleteCellProps {\n children: React.ReactNode;\n deleteNode: () => void;\n};\n\nexport default function ReasoningToolPanelDeleteCell({\n children = [],\n deleteNode,\n}: ReasoningToolPanelDeleteCellProps) {\n return (\n <div className=\"reasoning-tool-panel-delete-cell\">\n <div\n className=\"reasoning-tool-panel-delete-cell-delete-button\"\n onClick={deleteNode}\n >\n <i className={\"icon-trash\"}></i>\n </div>\n <div className=\"reasoning-tool-panel-delete-cell-children\">\n {children}\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\nimport * as classNames from \"classnames\";\n\nimport * as pluralize from \"pluralize\";\n\nimport ReasoningToolPanelDeleteCell from \"./Panel/DeleteCell\";\n\nimport generateUUID from \"../../../helpers/generateUUID\";\n\ninterface ReasoningToolPanelProps {\n title: string;\n infoBox?: React.ReactNode;\n isDeleting?: boolean;\n toggleDeleting?: () => void;\n headerButton?: React.ReactNode;\n isAddable?: boolean;\n wide?: boolean;\n children: React.ReactNode;\n panelNodeEditStart?: (uid: string) => void;\n addNode?: (uid: string, data?: Record<string, any>) => void;\n deleteNode?: (uid: string) => void;\n displayContext?: DisplayContext;\n};\n\nexport default function ReasoningToolPanel({\n title = \"\",\n infoBox = null,\n isDeleting = false,\n toggleDeleting,\n headerButton = null,\n isAddable = false,\n wide = false,\n children,\n panelNodeEditStart,\n addNode,\n deleteNode,\n displayContext,\n}: ReasoningToolPanelProps) {\n\n let wrappedChildren = children;\n if (isDeleting) {\n wrappedChildren = React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return (\n <ReasoningToolPanelDeleteCell\n key={child.props.uid}\n deleteNode={() => {\n if (displayContext) {\n displayContext.setFocusedBookmarkUid(null);\n }\n if (deleteNode) {\n deleteNode(child.props.uid);\n }\n }}\n >\n {child}\n </ReasoningToolPanelDeleteCell>\n );\n } else {\n return child;\n }\n });\n }\n\n return (\n <div className={classNames(\"reasoning-tool-panel\", (wide ? 'wide' : 'small'))}>\n <div className=\"reasoning-tool-panel-header\">\n <div className=\"reasoning-tool-panel-header-left\">\n <h1>{title}</h1>\n {toggleDeleting && (\n <div\n className={classNames(\"reasoning-tool-panel-header-delete-button\", {active: isDeleting})}\n onClick={toggleDeleting}\n >\n <i className=\"icon-lg icon-edit\"></i>\n </div>\n )}\n {headerButton}\n </div>\n <div className=\"reasoning-tool-panel-header-right\">\n </div>\n </div>\n {infoBox && <div className=\"reasoning-tool-panel-header\">\n <p><i>{infoBox}</i></p>\n </div>}\n <div>\n {wrappedChildren}\n </div>\n {isAddable && <div className=\"reasoning-tool-add-button\" key=\"button\" onClick={() => {\n if (addNode && panelNodeEditStart) {\n const newUid = generateUUID();\n addNode(newUid);\n panelNodeEditStart(newUid);\n }\n }}>\n <span><i className=\"icon-open-box\"></i> New {pluralize.singular(title)}...</span>\n </div>}\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport { newSetKeyValueChange } from \"../../../helpers/Doc/changes\";\n\nimport ReasoningToolPanel from \"./Panel\";\nimport Select from 'react-select';\n\ninterface ReasoningToolAssessmentQuestionDataPanelProps {\n editingContext: EditingContextInEditor;\n editingContextExtra: EditingContextExtra;\n cci_status: string;\n};\n\ninterface ReasoningToolAssessmentQuestionDataPanelState {\n label?: string;\n clinical_location: string;\n final_diagnosis: string;\n patient_age: string;\n system: string\n clinical_focus: string\n current_use: string\n clinical_disciplines: Array<string>\n clinical_excellence: Array<string>\n};\n\nexport default class ReasoningToolAssessmentQuestionDataPanel extends React.Component<ReasoningToolAssessmentQuestionDataPanelProps, ReasoningToolAssessmentQuestionDataPanelState> {\n constructor(props: ReasoningToolAssessmentQuestionDataPanelProps) {\n super(props);\n\n this.state = {\n clinical_location: this.props.editingContextExtra.assessmentQuestion.clinical_location,\n final_diagnosis: this.props.editingContextExtra.assessmentQuestion.final_diagnosis,\n patient_age: this.props.editingContextExtra.assessmentQuestion.patient_age,\n clinical_disciplines: this.props.editingContextExtra.assessmentQuestion.clinical_disciplines,\n clinical_excellence: this.props.editingContextExtra.assessmentQuestion.clinical_excellence,\n system: this.props.editingContextExtra.assessmentQuestion.system,\n clinical_focus: this.props.editingContextExtra.assessmentQuestion.clinical_focus,\n current_use: this.props.editingContextExtra.assessmentQuestion.current_use,\n };\n }\n\n save(event) {\n event.preventDefault();\n const questionData = {\n ...this.props.editingContextExtra.assessmentQuestion,\n id: this.props.editingContextExtra.assessmentQuestion.id,\n clinical_location: this.state.clinical_location,\n final_diagnosis: this.state.final_diagnosis,\n patient_age: this.state.patient_age,\n system: this.state.system,\n clinical_focus: this.state.clinical_focus,\n current_use: this.state.current_use,\n clinical_disciplines: this.state.clinical_disciplines || [],\n clinical_excellence: this.state.clinical_excellence || [],\n }\n this.props.editingContextExtra.setAssessmentQuestionData(questionData)\n }\n\n generateSelectOptions(options) {\n return options.map((optionName) => {\n return {value: optionName, label: optionName};\n })\n }\n\n render() {\n const {\n editingContext,\n editingContextExtra,\n } = this.props;\n\n const assessmentQuestion = editingContextExtra.assessmentQuestion;\n const assessmentQuestionStatistics = editingContextExtra.assessmentQuestionStatistics;\n const selectedAssessmentQuestionStatistic = assessmentQuestionStatistics.find((stat) => stat.label === this.state.label) || assessmentQuestionStatistics[0];\n const questionData = editingContextExtra.assessmentQuestionEditingData;\n const clinicalLocationOptions = this.generateSelectOptions(editingContextExtra.assessmentQuestionClinicalLocationOptions);\n const finalDiagnosisOptions = this.generateSelectOptions(editingContextExtra.assessmentQuestionFinalDiagnosisOptions);\n const patientAgeOptions = this.generateSelectOptions(editingContextExtra.assessmentQuestionPatientAgeOptions);\n const systemOptions = this.generateSelectOptions(editingContextExtra.assessmentQuestionSystemOptions);\n const clinicalFocusOptions = this.generateSelectOptions(editingContextExtra.assessmentQuestionClinicalFocusOptions);\n const questionUseOptions = this.generateSelectOptions(editingContextExtra.assessmentQuestionQuestionUseOptions);\n const clinicalDisciplineOptions = this.generateSelectOptions(editingContextExtra.assessmentQuestionClinicalDisciplineOptions);\n const clinicalExcellenceOptions = this.generateSelectOptions(editingContextExtra.assessmentQuestionClinicalExcellenceOptions);\n\n return (\n <ReasoningToolPanel\n key=\"ASSESSMENT QUESTION DATA\"\n title=\"ASSESSMENT QUESTION DATA\"\n >\n <h5>Assessment Question Meta Data</h5>\n\n <div>\n <div className=\"reasoning-tool-stat\">\n <span className=\"reasoning-tool-stat-label\">Question Use:</span>\n <span className=\"reasoning-tool-stat-value reasoning-tool-item-decision-input\">\n <Select\n isMulti={false}\n isClearable={true}\n options={questionUseOptions}\n defaultValue={this.state.current_use && questionUseOptions.filter(option=> this.state.current_use == option[\"value\"])}\n onChange={ (option) => { this.setState({current_use: option && option.value}); } }\n menuPortalTarget={document.body}\n styles={{\n menuPortal: base => ({ ...base, zIndex: 9999 })\n }}\n />\n </span>\n </div>\n\n <div className=\"reasoning-tool-stat\">\n <span className=\"reasoning-tool-stat-label\">Clinical Location:</span>\n <span className=\"reasoning-tool-stat-value reasoning-tool-item-decision-input\">\n <Select\n isMulti={false}\n isClearable={true}\n options={clinicalLocationOptions}\n defaultValue={this.state.clinical_location && clinicalLocationOptions.filter(option=> this.state.clinical_location == option[\"value\"])}\n onChange={ (option) => { this.setState({clinical_location: option && option.value}); } }\n menuPortalTarget={document.body}\n styles={{\n menuPortal: base => ({ ...base, zIndex: 9999 })\n }}\n />\n </span>\n </div>\n\n <div className=\"reasoning-tool-stat\">\n <span className=\"reasoning-tool-stat-label\">Final Diagnosis:</span>\n <span className=\"reasoning-tool-stat-value reasoning-tool-item-decision-input\">\n <Select\n isMulti={false}\n isClearable={true}\n options={finalDiagnosisOptions}\n defaultValue={this.state.final_diagnosis && finalDiagnosisOptions.filter(option=> this.state.final_diagnosis == option[\"value\"])}\n onChange={ (option) => { this.setState({final_diagnosis: option && option.value}); } }\n menuPortalTarget={document.body}\n styles={{\n menuPortal: base => ({ ...base, zIndex: 9999 })\n }}\n />\n </span>\n </div>\n\n <div className=\"reasoning-tool-stat\">\n <span className=\"reasoning-tool-stat-label\">Patient Age:</span>\n <span className=\"reasoning-tool-stat-value reasoning-tool-item-decision-input\">\n <Select\n isMulti={false}\n isClearable={true}\n options={patientAgeOptions}\n defaultValue={this.state.patient_age && patientAgeOptions.filter(option=> this.state.patient_age == option[\"value\"])}\n onChange={ (option) => { this.setState({patient_age: option && option.value}); } }\n menuPortalTarget={document.body}\n styles={{\n menuPortal: base => ({ ...base, zIndex: 9999 })\n }}\n />\n </span>\n </div>\n\n <div className=\"reasoning-tool-stat\">\n <span className=\"reasoning-tool-stat-label\">System:</span>\n <span className=\"reasoning-tool-stat-value reasoning-tool-item-decision-input\">\n <Select\n isMulti={false}\n isClearable={true}\n options={systemOptions}\n defaultValue={this.state.system && systemOptions.filter(option=> this.state.system == option[\"value\"])}\n onChange={ (option) => { this.setState({system: option && option.value}); } }\n menuPortalTarget={document.body}\n styles={{\n menuPortal: base => ({ ...base, zIndex: 9999 })\n }}\n />\n </span>\n </div>\n\n <div className=\"reasoning-tool-stat\">\n <span className=\"reasoning-tool-stat-label\">Clinical Focus:</span>\n <span className=\"reasoning-tool-stat-value reasoning-tool-item-decision-input\">\n <Select\n isMulti={false}\n isClearable={true}\n options={clinicalFocusOptions}\n defaultValue={this.state.clinical_focus && clinicalFocusOptions.filter(option=> this.state.clinical_focus == option[\"value\"])}\n onChange={ (option) => { this.setState({clinical_focus: option && option.value}); } }\n menuPortalTarget={document.body}\n styles={{\n menuPortal: base => ({ ...base, zIndex: 9999 })\n }}\n />\n </span>\n </div>\n\n <div className=\"reasoning-tool-stat\">\n <span className=\"reasoning-tool-stat-label\">Clinical Discipline:</span>\n <span className=\"reasoning-tool-stat-value reasoning-tool-item-decision-input\">\n <Select\n isMulti={true}\n options={clinicalDisciplineOptions}\n defaultValue={this.state.clinical_disciplines && clinicalDisciplineOptions.filter(option=> this.state.clinical_disciplines.includes(option[\"value\"]))}\n onChange={ (options) => { this.setState({clinical_disciplines: options && options.map((option) => option.value) }) }}\n menuPortalTarget={document.body}\n styles={{\n menuPortal: base => ({ ...base, zIndex: 9999 })\n }}\n />\n </span>\n </div>\n\n\n <div className=\"reasoning-tool-stat\">\n <span className=\"reasoning-tool-stat-label\">Clinical Excellence:</span>\n <span className=\"reasoning-tool-stat-value reasoning-tool-item-decision-input\">\n <Select\n isMulti={true}\n options={clinicalExcellenceOptions}\n defaultValue={this.state.clinical_excellence && clinicalExcellenceOptions.filter(option=> this.state.clinical_excellence.includes(option[\"value\"]))}\n onChange={ (options) => { this.setState({clinical_excellence: options && options.map((option) => option.value) }) }}\n menuPortalTarget={document.body}\n styles={{\n menuPortal: base => ({ ...base, zIndex: 9999 })\n }}\n />\n </span>\n </div>\n\n <div className=\"reasoning-tool-stat\">\n <span className=\"reasoning-tool-stat-label\">\n <button className='aq-button'onClick={this.save.bind(this)} >Save</button>\n </span>\n </div>\n </div>\n\n <h5>Assessment Question Data And Statuses</h5>\n\n <div>\n <div className=\"reasoning-tool-stat\">\n <span className=\"reasoning-tool-stat-label\">Item Decisions</span>\n <div className={classNames(\"reasoning-tool-stat-value reasoning-tool-item-decision-input\", {changed: this.props.cci_status && this.props.cci_status !== assessmentQuestion.cci_status})}>\n <select value={editingContextExtra.cci_status} onChange={(e) => {\n editingContext.addChange(newSetKeyValueChange(editingContextExtra.rootUid, \"cci_status\", e.target.value));\n }}>\n {editingContextExtra.cciStatusOptions.map((cciStatus) => <option key={cciStatus.key} value={cciStatus.key}>{cciStatus.displayName}</option>)}\n </select>\n </div>\n </div>\n\n <div className=\"reasoning-tool-stat\">\n <span className=\"reasoning-tool-stat-label\">Academic Year for this Data:</span>\n <span className=\"reasoning-tool-stat-value reasoning-tool-item-decision-input\">\n <select value={selectedAssessmentQuestionStatistic?.label} disabled={false} onChange={(e) => {this.setState({label: e.target.value});}}>\n {assessmentQuestionStatistics.map((statistic) => <option key={statistic.label} value={statistic.label}>{statistic.label}</option>)}\n </select>\n </span>\n </div>\n\n <div className=\"reasoning-tool-stat\">\n <span className=\"reasoning-tool-stat-label\"># Administrations:</span>\n <span className=\"reasoning-tool-stat-value\">{selectedAssessmentQuestionStatistic?.administrations_count}</span>\n </div>\n\n <div className=\"reasoning-tool-stat\">\n <span className=\"reasoning-tool-stat-label\">Difficulty (pdiff):</span>\n <span className=\"reasoning-tool-stat-value\">{selectedAssessmentQuestionStatistic?.difficulty}</span>\n </div>\n\n <div className=\"reasoning-tool-stat\">\n <span className=\"reasoning-tool-stat-label\">Discrimination (rpb):</span>\n <span className=\"reasoning-tool-stat-value\">{selectedAssessmentQuestionStatistic?.discrimination}</span>\n </div>\n\n <div className=\"reasoning-tool-stat\">\n <span className=\"reasoning-tool-stat-label\">Item Validity Status:</span>\n <span className=\"reasoning-tool-stat-value\">{editingContextExtra.assessmentStatus}</span>\n </div>\n\n <div className=\"reasoning-tool-stat\">\n <span className=\"reasoning-tool-stat-label\">Used on Assessment?</span>\n <span className=\"reasoning-tool-stat-value\">{questionData && (questionData?.delivered ? \"Yes\" : \"No\")}</span>\n </div>\n </div>\n\n <hr />\n\n <div>\n <h5>Answer Option Admin Data</h5>\n\n {[...Array(5).keys()].map((index) => {\n const capitalLetter = String.fromCharCode(\"A\".charCodeAt(0) + index);\n const lowerLetter = String.fromCharCode(\"a\".charCodeAt(0) + index);\n const correct = index === assessmentQuestion?.content?.correct_answer_index;\n\n return (\n <div key={index} className={classNames(\"reasoning-tool-stat\", {correct: correct})}>\n <span className=\"reasoning-tool-stat-label\">Admin {capitalLetter}:</span>\n <span className=\"reasoning-tool-stat-value\">{selectedAssessmentQuestionStatistic && selectedAssessmentQuestionStatistic[`choice_${lowerLetter}_count`]}</span>\n {correct && <span className=\"reasoning-tool-stat-comment\">Correct!</span>}\n </div>\n );\n })}\n\n <div className=\"reasoning-tool-stat\">\n <span className=\"reasoning-tool-stat-label\">Admin Omit:</span>\n <span className=\"reasoning-tool-stat-value\">{selectedAssessmentQuestionStatistic?.skips_count}</span>\n </div>\n </div>\n <hr />\n </ReasoningToolPanel>\n );\n }\n}\n","import * as React from 'react';\nimport { useEffect, useState } from \"react\";\nimport client from \"../../../../api/client\";\nimport { getAdminAssessmentQuestion } from \"../../../../api/sdk.gen\";\nimport { getCellValue } from '../../../../helpers/assessment'\n\nconst DetailsTab = ({ details }) => {\n\n if (!details) return <div>Loading...</div>;\n\n const columns = [\n {\n key: \"id\",\n name: \"ID\",\n renderer: (item, value) => (\n <a\n href={`/versions/${item.editing_document.scheduled_review_version_id}/edit`}\n target='_blank'\n >\n {value}\n </a>\n )\n },\n {\n key: \"case_summary_identifier\",\n name: \"ITEM LABEL\",\n renderer: (item, value) => (\n <a\n href={`/versions/${item.editing_document.scheduled_review_version_id}/edit`}\n target='_blank'\n >\n {value}\n </a>\n )\n },\n {\n key: \"course_name\",\n name: \"COURSE\",\n },\n {\n key: \"document.title\",\n name: \"CASE\",\n renderer: (item, value) => (\n <a\n href={`/documents/${item.document_id}`}\n target='_blank'\n >\n {value}\n </a>\n )\n },\n {\n key: \"current_use\",\n name: \"QUESTION USE\",\n },\n {\n key: \"efficiency_breakpoints_seconds\",\n name: \"SCORABLE?\",\n },\n {\n key: \"content.vignette\",\n name: \"VIGNETTE\",\n },\n {\n key: \"content.stem\",\n name: \"STEM\",\n },\n {\n key: \"content.images\",\n name: \"IMAGES\",\n },\n {\n key: \"content.correct_answer_index\",\n name: \"CORRECT ANSWER\",\n },\n {\n key: \"choice_a\",\n name: \"CHOICE A\",\n },\n {\n key: \"choice_b\",\n name: \"CHOICE B\",\n },\n {\n key: \"choice_c\",\n name: \"CHOICE C\",\n },\n {\n key: \"choice_d\",\n name: \"CHOICE D\",\n },\n {\n key: \"choice_e\",\n name: \"CHOICE E\",\n },\n {\n key: \"difficulty\",\n name: \"DIFFICULTY\",\n },\n {\n key: \"discrimination\",\n name: \"DISCRIMINATION\",\n },\n {\n key: \"status\",\n name: \"VALIDITY STATUS\",\n },\n {\n key: \"learning_objective_reusable_object.learning_objective_name\",\n name: \"LEARNING OBJECTIVES\",\n },\n {\n key: \"learning_objective_reusable_object.learning_objective_id\",\n name: \"LO ID\",\n renderer: (item, value) => (\n <a\n href={`/admin/assessment/learning_objectives?id=${value}`}\n target='_blank'\n >\n {value}\n </a>\n )\n },\n {\n key: \"learning_objective_reusable_object.reusable_object_name\",\n name: \"TEACHING POINTS\",\n },\n {\n key: \"learning_objective_reusable_object.reusable_object_id\",\n name: \"TP ID\",\n renderer: (item, value) => (\n <a\n href={`/admin/assessment/reusable_objects?id=${value}`}\n target='_blank'\n >\n {value}\n </a>\n )\n },\n {\n key: \"question_set_ids\",\n name: \"SETS\",\n renderer: (item, value) => (\n <div>\n <a\n href={`/admin/assessment/question_sets?question_id=${item.id}`}\n target='_blank'\n rel=\"noopener noreferrer\"\n >\n {item.question_sets.length} items\n </a>\n\n {item.question_sets.map((item) => (\n <div key={item.id}>\n <a\n href={`/admin/assessment/question_sets?id=${item.id}`}\n target='_blank'\n rel=\"noopener noreferrer\"\n >\n {item.title}\n </a>\n </div>\n ))}\n </div>\n )\n },\n {\n key: \"content.answer_explanation\",\n name: \"ANSWER EXPLANATION\",\n },\n {\n key: \"system\",\n name: \"SYSTEM\",\n },\n {\n key: \"clinical_focus\",\n name: \"CLINICAL FOCUS\",\n },\n {\n key: \"clinical_location\",\n name: \"CLINICAL LOCATION\",\n },\n {\n key: \"patient_age\",\n name: \"PATIENT AGE\",\n },\n {\n key: \"final_diagnosis\",\n name: \"FINAL DIAGNOSIS\",\n },\n {\n key: \"clinical_disciplines\",\n name: \"CLINICAL DISCIPLINE\",\n },\n {\n key: \"clinical_excellence\",\n name: \"CLINICAL EXCELLENCE\",\n },\n {\n key: \"parent_id\",\n name: \"PARENT ID\",\n },\n {\n key: \"child_ids\",\n name: \"CHILD IDs\",\n },\n {\n key: \"created_at\",\n name: \"DATE CREATED\",\n },\n {\n key: \"updated_at\",\n name: \"DATE MODIFIED\",\n },\n ];\n\n return (\n <dl className=\"details-list\">\n {columns.map(({ key, name, renderer }) => {\n const val = getCellValue(details, key, false)\n\n return (\n <React.Fragment key={key}>\n <dt className=\"details-term\">{name}</dt>\n <dd className=\"details-desc\">\n { renderer\n ? renderer(details, val)\n : <div dangerouslySetInnerHTML={{ __html: val }} /> }\n </dd>\n </React.Fragment>\n );\n })}\n </dl>\n );\n};\n\nexport default DetailsTab;\n","import * as React from \"react\";\nimport { useEffect, useState } from \"react\";\nimport client from \"../../../../api/client\";\nimport { getAdminAssessmentStatistics } from \"../../../../api/sdk.gen\";\n\nconst StatisticsTab = ({ questionId }) => {\n const [statistics, setStatistics] = useState([]);\n\n const fetchStatistics = async () => {\n const resp = await getAdminAssessmentStatistics({\n query: { assessment_question_id: questionId, per: 1000 },\n });\n setStatistics(resp.data.data);\n };\n\n useEffect(() => {\n fetchStatistics();\n }, [questionId]);\n\n const headers = [\n \"ID\",\n \"Assessment Question ID\",\n \"Label\",\n \"Choice A Count\",\n \"Choice B Count\",\n \"Choice C Count\",\n \"Choice D Count\",\n \"Choice E Count\",\n \"Choice F Count\",\n \"Skips Count\",\n \"Administrations Count\",\n \"Difficulty\",\n \"Discrimination\",\n \"Avg Certainty Rating\",\n \"Created At\",\n \"Updated At\",\n ];\n\n const renderTableHead = () => (\n <tr>\n {headers.map((header) => (\n <th key={header}>{header}</th>\n ))}\n </tr>\n );\n\n const renderTableRows = () => {\n if (statistics.length === 0) {\n return (\n <tr>\n <td colSpan={headers.length} style={{ textAlign: \"center\" }}>\n There are no records\n </td>\n </tr>\n );\n }\n\n return statistics.map((stat) => (\n <tr key={stat.id}>\n <td>{stat.id}</td>\n <td>{stat.assessment_question_id}</td>\n <td>{stat.label}</td>\n <td>{stat.choice_a_count}</td>\n <td>{stat.choice_b_count}</td>\n <td>{stat.choice_c_count}</td>\n <td>{stat.choice_d_count}</td>\n <td>{stat.choice_e_count}</td>\n <td>{stat.choice_f_count}</td>\n <td>{stat.skips_count}</td>\n <td>{stat.administrations_count}</td>\n <td>{stat.difficulty}</td>\n <td>{stat.discrimination}</td>\n <td>{stat.average_certainty_rating}</td>\n <td>{new Date(stat.created_at).toLocaleString()}</td>\n <td>{new Date(stat.updated_at).toLocaleString()}</td>\n </tr>\n ));\n };\n\n return (\n <div className=\"table-container\">\n <table className=\"table-with-fixed-columns\" border={1}>\n <thead>{renderTableHead()}</thead>\n <tbody>{renderTableRows()}</tbody>\n </table>\n </div>\n );\n};\n\nexport default StatisticsTab;\n","import * as React from \"react\";\nimport * as classNames from \"classnames\";\n\ninterface ReasoningToolBarButtonProps {\n iconName?: string;\n isActive?: boolean;\n name: string;\n onToggle?: React.MouseEventHandler<HTMLAnchorElement>;\n openLink?: string;\n shouldShow: boolean;\n onExpand?: () => void;\n};\n\nexport default function ReasoningToolBarButton({\n iconName,\n isActive = false,\n name = \"\",\n onToggle,\n openLink,\n shouldShow,\n onExpand,\n}: ReasoningToolBarButtonProps) {\n if (!shouldShow) { return null; }\n\n const onClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n e.preventDefault();\n if (openLink) {\n window.open(openLink, \"_blank\");\n } else if(onToggle) {\n onToggle(e);\n onExpand?.();\n }\n };\n\n return (\n <a href=\"#\" className={classNames(\"reasoning-tool-bar-button\", {active: isActive})} onClick={onClick}>\n {iconName && <>\n <span className={iconName.slice(0,3) === \"fa \" ? iconName : `icon-lg ${iconName}`} />\n <br />\n </>}\n <span className=\"button-name\">{name}</span>\n </a>\n );\n}\n","import * as React from \"react\";\n\nimport { capitalize } from \"lodash\";\n\nimport DocStyledText from \"../../BlockNodeHelpers/StyledText\";\n\nimport DocList from \"../../BlockNodes/List\";\nimport DocParagraph from \"../../BlockNodes/Paragraph\";\n\nimport { scrollToLineage } from \"../../../../helpers/Doc/scrollTo\";\n\nimport {\n weakMemoizedGenerateEditingContextAllFalse,\n} from \"../../../../helpers/Doc/context\";\n\ninterface ReasoningToolBookmarkSummaryProps {\n documentContext: DocumentContext;\n currentVersion: CurrentVersion;\n userContext: UserContext;\n displayContext: DisplayContext;\n mediaContext: MediaContext;\n featureFlag: FeatureFlag;\n bookmarkedNode: DocBlockNode<InlineNode>;\n bookmarkedNodeLineage: Array<DocBlockNode<InlineNode>>;\n};\n\nexport default function ReasoningToolBookmarkSummary(props: ReasoningToolBookmarkSummaryProps) {\n const {\n documentContext,\n currentVersion,\n userContext,\n displayContext,\n mediaContext,\n featureFlag,\n bookmarkedNode,\n bookmarkedNodeLineage,\n } = props;\n\n const editingContext = weakMemoizedGenerateEditingContextAllFalse();\n\n const onClick = () => {\n scrollToLineage(bookmarkedNodeLineage, userContext.addState);\n displayContext.setFocusedBookmarkUid(bookmarkedNode.uid);\n };\n\n let displayData = null;\n switch (bookmarkedNode.type) {\n case \"paragraph\":\n displayData = (\n <DocParagraph\n key={bookmarkedNode.uid}\n simple\n documentContext={documentContext}\n currentVersion={currentVersion}\n userContext={userContext}\n editingContext={editingContext}\n displayContext={displayContext}\n mediaContext={mediaContext}\n featureFlag={featureFlag}\n {...bookmarkedNode}\n />\n );\n break;\n case \"numberedList\":\n case \"regularList\":\n displayData = (\n <DocList\n key={bookmarkedNode.uid}\n simple\n documentContext={documentContext}\n currentVersion={currentVersion}\n userContext={userContext}\n editingContext={editingContext}\n displayContext={displayContext}\n mediaContext={mediaContext}\n featureFlag={featureFlag}\n {...bookmarkedNode}\n />\n );\n break;\n default:\n displayData = <p>{capitalize(bookmarkedNode.type)} bookmark. Click to view.</p>;\n }\n\n if (!displayData) { return null; }\n\n const ancestorSections = bookmarkedNodeLineage.filter((ancestor): ancestor is DocSectionType<InlineNode> => ancestor.type === \"section\");\n const firstLevelSectionTitle = ancestorSections[1] ? ancestorSections[1].title : \"\";\n\n return (\n <div className=\"reasoning-tool-bookmark-summary\" onClick={onClick}>\n <h6 className=\"reasoning-tool-bookmark-summary-card-title\">\n <DocStyledText\n content={firstLevelSectionTitle}\n editingContext={editingContext}\n />\n </h6>\n {displayData}\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { newSetKeyValueChange } from \"../../../../helpers/Doc/changes\";\n\ninterface DocPrerequisiteMetadataProps {\n editingContext: EditingContextInEditor;\n editingContextExtra: EditingContextExtra;\n userContext: UserContext;\n rootUid: string;\n possible_prerequisite?: boolean;\n prerequisite_document_id?: number;\n};\n\nexport default function DocPrerequisiteMetadata(props: DocPrerequisiteMetadataProps) {\n const {\n editingContext,\n editingContextExtra,\n userContext,\n rootUid,\n possible_prerequisite = false,\n prerequisite_document_id,\n } = props\n\n if (!userContext.permissions.updatePrerequisiteSubservient) {\n return null;\n }\n\n return (\n <div style={{padding: \"0 5px\"}}>\n <p><strong>Set this case as a Prerequisite case (not available when this case is set as subervient)</strong></p>\n\n <label>\n <input\n type=\"checkbox\"\n checked={possible_prerequisite}\n onChange={() => {\n editingContext.addChange(newSetKeyValueChange(rootUid, \"possible_prerequisite\", !possible_prerequisite));\n }}\n disabled={!!prerequisite_document_id || !userContext.permissions.updatePrerequisiteSubservient}\n />\n Make this case a prerequisite</label>\n\n <p style={{marginTop: \"20px\"}}><strong>Make this case subservient to an existing prerequisite case (not available when this case is set as prerequisite).</strong></p>\n\n <select\n value={prerequisite_document_id}\n onChange={(e) => {\n const new_prerequisite_document_id = e.target.value === \"\" ? null : e.target.value;\n editingContext.addChange(newSetKeyValueChange(rootUid, \"prerequisite_document_id\", new_prerequisite_document_id));\n }}\n disabled={possible_prerequisite || !userContext.permissions.updatePrerequisiteSubservient}\n >\n <option value={\"\"}>Select Prerequisite Case</option>\n {editingContextExtra.possiblePrerequisiteDocuments.map(possiblePrerequisiteDocument => (\n <option\n key={possiblePrerequisiteDocument.id}\n value={possiblePrerequisiteDocument.id}\n >\n {possiblePrerequisiteDocument.title}\n </option>\n ))}\n </select>\n </div>\n )\n}\n","import * as React from \"react\";\n\nimport GenModal from \"../../Gen/Modal/component\";\nimport ReasoningToolPanel from \"./Panel\";\nimport NewEditDocContainer from \"../Container\";\nimport { changesDisplayModes } from \"../../../helpers/Doc/changes\";\n\ninterface CaseTeachingPointsPanelProps {\n userContext: UserContext;\n mergedData: MergedData;\n mappingContext: MappingContext;\n};\n\ninterface CaseTeachingPointsPanelState {\n selectedTeachingPoint?: ReusableObject;\n};\n\nexport default class CaseTeachingPointsPanel extends React.Component<CaseTeachingPointsPanelProps, CaseTeachingPointsPanelState> {\n constructor(props: CaseTeachingPointsPanelProps) {\n super(props);\n\n this.state = {};\n }\n\n closeTeachingPointModal(event: React.MouseEvent<HTMLButtonElement>) {\n event.preventDefault();\n this.setState({selectedTeachingPoint: undefined})\n }\n\n openTeachingPointModal(reusableObject: ReusableObject) {\n this.setState({selectedTeachingPoint: reusableObject})\n }\n\n render() {\n let modal\n if (this.state.selectedTeachingPoint) {\n modal = <GenModal open={this.state.selectedTeachingPoint}>\n <div className=\"gen-modal-panel gen-modal-media-menu\" style={{marginTop: 90 + 'px'}}>\n <div>\n <div style={{\"fontWeight\": \"bold\", \"fontSize\": \"1.2vw\"}}>\n <NewEditDocContainer\n docType=\"ReusableObject\"\n documentId={this.state.selectedTeachingPoint.id}\n versionId={this.state.selectedTeachingPoint.review_variant_id}\n currentUser={{\n id: this.props.userContext.id,\n first_name: this.props.userContext.firstName,\n last_name: this.props.userContext.lastName,\n email: this.props.userContext.email,\n }}\n isAdmin={this.props.userContext.isAdmin}\n permissions={{}}\n isEmbeded\n defaultChangesDisplayMode={changesDisplayModes.HIGHLIGHT_ALL_CHANGES}\n />\n </div>\n <div>\n <button onClick={this.closeTeachingPointModal.bind(this)}>Close</button>\n </div>\n </div>\n </div>\n </GenModal>\n }\n\n return (<>\n {modal}\n <ReasoningToolPanel\n key=\"CASE TEACHING POINTS\"\n title=\"CASE TEACHING POINTS\"\n >\n <h3>{this.props.mergedData.title.text}</h3>\n <ul>\n {\n this.props.mappingContext.reusableObjects.map((reusableObject) => {\n let styleLink = reusableObject.reusable_object_edited ? {color: 'red'} : {}\n return <li key={reusableObject.id}>\n <a href={\"\"} style={styleLink}\n onClick={() => this.openTeachingPointModal(reusableObject)}>{reusableObject.content_title}</a>\n </li>\n })\n }\n </ul>\n </ReasoningToolPanel>\n </>);\n }\n}\n\n","import * as React from \"react\";\n\nimport ReasoningToolPanel from \"./Panel\";\nimport AqueductTable from \"../../Reactabular/aqueduct_table\";\nimport GenModal from \"../../Gen/Modal/component\";\nimport NewEditDocContainer from \"../Container\";\n\nimport { changesDisplayModes } from \"../../../helpers/Doc/changes\";\n\ninterface CaseMapPanelProps {\n userContext: UserContext;\n mappingContext: MappingContext;\n mergedData: MergedData;\n};\n\ninterface CaseMapPanelState {\n selectedTeachingPoint?: ReusableObject;\n selectedAssessmentQuestion?: AssessmentQuestion;\n};\n\nexport default class CaseMapPanel extends React.Component<CaseMapPanelProps, CaseMapPanelState> {\n constructor(props: CaseMapPanelProps) {\n super(props);\n this.state = {};\n }\n\n closeTeachingPointModal(event: React.MouseEvent<HTMLButtonElement>) {\n event.preventDefault();\n this.setState({selectedTeachingPoint: undefined})\n }\n\n openTeachingPointModal(reusableObject: ReusableObject) {\n event.preventDefault();\n this.setState({selectedTeachingPoint: reusableObject})\n }\n\n closeAssessmentQuestionModal(event: React.MouseEvent<HTMLButtonElement>) {\n event.preventDefault();\n this.setState({selectedAssessmentQuestion: undefined})\n }\n\n openAssessmentQuestionModal(assessmentQuestion: AssessmentQuestion) {\n event.preventDefault();\n this.setState({selectedAssessmentQuestion: assessmentQuestion})\n }\n\n render() {\n let modal\n if (this.state.selectedTeachingPoint) {\n modal = <GenModal open={this.state.selectedTeachingPoint}>\n <div className=\"gen-modal-panel gen-modal-media-menu\" style={{marginTop: 90 + 'px'}}>\n <div style={{\"fontWeight\": \"bold\", \"fontSize\": \"1.2vw\"}}>\n <NewEditDocContainer\n docType=\"ReusableObject\"\n documentId={this.state.selectedTeachingPoint.id}\n versionId={this.state.selectedTeachingPoint.review_variant_id}\n currentUser={{\n id: this.props.userContext.id,\n first_name: this.props.userContext.firstName,\n last_name: this.props.userContext.lastName,\n email: this.props.userContext.email,\n }}\n isAdmin={this.props.userContext.isAdmin}\n permissions={{}}\n isEmbeded\n defaultChangesDisplayMode={changesDisplayModes.HIGHLIGHT_ALL_CHANGES}\n />\n </div>\n <div>\n <button onClick={this.closeTeachingPointModal.bind(this)}>Close</button>\n </div>\n </div>\n </GenModal>\n }\n\n let assessmentQuestionModal\n if (this.state.selectedAssessmentQuestion) {\n let learningObjective;\n if(this.state.selectedAssessmentQuestion.mapped_learning_objective_edited){\n learningObjective = <label style={{color: 'red'}}>{this.state.selectedAssessmentQuestion[\"mapped_learning_objective\"]}</label>\n }else{\n learningObjective= <>{this.state.selectedAssessmentQuestion[\"mapped_learning_objective\"]}</>\n }\n let teachingPoint;\n if(this.state.selectedAssessmentQuestion.mapped_teaching_point_edited){\n teachingPoint = <label style={{color: 'red'}}>{this.state.selectedAssessmentQuestion[\"mapped_teaching_point\"]}</label>\n }else{\n teachingPoint= <>{this.state.selectedAssessmentQuestion[\"mapped_teaching_point\"]}</>\n }\n let correctAnswer;\n if(this.state.selectedAssessmentQuestion.answer_edited){\n correctAnswer = <label style={{color: 'red'}}>{this.state.selectedAssessmentQuestion[\"sr_version_correct_answer\"]}</label>\n }else{\n correctAnswer= <>{this.state.selectedAssessmentQuestion[\"sr_version_correct_answer\"]}</>\n }\n\n assessmentQuestionModal = <GenModal open={this.state.selectedAssessmentQuestion} onClick={(e) => e.stopPropagation()}>\n <div className=\"gen-modal-panel gen-modal-media-menu\" style={{marginTop: 90 + 'px'}}>\n <div style={{\"fontWeight\": \"bold\", \"fontSize\": \"1.2vw\"}}>\n <NewEditDocContainer\n documentId={this.state.selectedAssessmentQuestion.editing_document_id}\n versionId={this.state.selectedAssessmentQuestion.editing_document.scheduled_review_version_id}\n currentUser={{\n id: this.props.userContext.id,\n first_name: this.props.userContext.firstName,\n last_name: this.props.userContext.lastName,\n email: this.props.userContext.email,\n }}\n isAdmin={this.props.userContext.isAdmin}\n permissions={{}}\n isEmbeded\n defaultChangesDisplayMode={changesDisplayModes.HIGHLIGHT_ALL_CHANGES}\n />\n </div>\n <div><h6>Correct Answer: {correctAnswer}</h6></div><br/>\n <div><h6>{`Document: ${this.state.selectedAssessmentQuestion[\"document_title\"]}`}</h6></div><br/>\n <div><h6>{`Scorable: ${this.state.selectedAssessmentQuestion[\"scorable?\"]}`}</h6></div><br/>\n <div><h6>{`Difficulty: ${this.state.selectedAssessmentQuestion[\"difficulty\"]}`}</h6></div><br/>\n <div><h6>{`Discrimination: ${this.state.selectedAssessmentQuestion[\"discrimination\"]}`}</h6></div><br/>\n <div><h6>{`Status: ${this.state.selectedAssessmentQuestion[\"status\"]}`}</h6></div><br/>\n <div><h6>{`Efficiency timing: ${this.state.selectedAssessmentQuestion[\"status\"] ? this.state.selectedAssessmentQuestion.efficiency_breakpoints_seconds.toString() : \"\"}`}</h6></div><br/>\n <div><h6>Learning Objective: {learningObjective}</h6></div><br/>\n <div><h6>Teaching Point: {teachingPoint}</h6></div><br/>\n <div><h6>{`Operational Difficulty: ${this.state.selectedAssessmentQuestion[\"difficulty\"]}`}</h6></div><br/>\n <div><h6>{`Operational Discrimination: ${this.state.selectedAssessmentQuestion[\"discrimination\"]}`}</h6></div><br/>\n <div><h6>{`Operational Administrations Count: ${this.state.selectedAssessmentQuestion[\"administrations_count\"]}`}</h6></div><br/>\n <br/>\n <div>\n <button onClick={this.closeAssessmentQuestionModal.bind(this)}>Close</button>\n </div>\n </div>\n </GenModal>\n }\n\n let row_hashes = []\n let row_hash = {}\n let idx = 0\n if(this.props.mappingContext.learningObjectiveReusableObjects && this.props.mappingContext.learningObjectiveReusableObjects.length > 0){\n this.props.mappingContext.learningObjectiveReusableObjects.forEach((learningObjectiveReusableObject) => {\n let loro_data = {\n learning_objective: learningObjectiveReusableObject.learning_objective.name,\n teaching_point: learningObjectiveReusableObject.reusable_object.content_title,\n teaching_point_edited: learningObjectiveReusableObject.reusable_object.reusable_object_edited,\n openTeachingPointModal: this.openTeachingPointModal.bind(this),\n teachingPointObject: learningObjectiveReusableObject.reusable_object,\n }\n if(learningObjectiveReusableObject.questions.length==0){\n idx = idx+1\n row_hash = {\n ...loro_data,\n id: idx,\n assessment_question: \"\",\n body_system: \"\",\n }\n row_hashes.push(row_hash)\n } else{\n learningObjectiveReusableObject.questions.forEach((question) => {\n idx = idx+1\n row_hash = {\n ...loro_data,\n id: idx,\n assessment_question: question.case_summary_identifier,\n body_system: question.mapped_system,\n current_use: question.current_use,\n assessmentQuestionObject: question,\n openAssessmentQuestionModal: this.openAssessmentQuestionModal.bind(this),\n isMappedSystemEdited: question.is_mapped_system_edited,\n isAssessmentQuestionEdited: question.question_edited,\n isAssessmentQuestionUsedAvailableForm: question.used_in_available_form,\n }\n row_hashes.push(row_hash)\n })\n }\n })\n }\n\n let caseMapTable = null\n if(row_hashes.length==0){\n caseMapTable = <h5>There are no mapped learning objectives.</h5>\n }else{\n caseMapTable = <AqueductTable\n table_def=\"case_map\"\n name_prefix=\"learningObjectiveReusableObjects\"\n rows={row_hashes}\n />\n }\n\n return (<>\n {modal}\n {assessmentQuestionModal}\n <ReasoningToolPanel\n key=\"CASE MAP\"\n title={`Case Content Map: ${this.props.mergedData.title.text.split(\":\")[0]}`}\n wide={true}\n >\n <p>This case content map displays the Teaching Point(s) that are mapped to each learning objective in 1:1 associations grouped by row.</p>\n {caseMapTable}\n </ReasoningToolPanel>\n </>);\n }\n}\n","import * as React from \"react\";\n\nimport DocTextInput from \"../BlockNodes/TextInput\";\nimport DocRatingBar from \"../BlockNodes/RatingBar\";\n\nimport {\n weakMemoizedGenerateEditingContextAllFalse,\n} from \"../../../helpers/Doc/context\";\n\ninterface ReasoningToolFeedbackSummaryProps {\n index: number;\n question: string;\n value: number;\n submitted: boolean;\n comment: string;\n maxValue?: number;\n userContext: UserContext;\n displayContext: DisplayContext;\n currentVersion: CurrentVersion;\n documentContext: DocumentContext;\n featureFlag: FeatureFlag;\n mediaContext: MediaContext;\n};\n\nexport default function ReasoningToolFeedbackSummary({\n index,\n question = \"\",\n value = 0,\n submitted = false,\n comment = \"\",\n maxValue = 5,\n userContext,\n displayContext,\n currentVersion,\n documentContext,\n featureFlag,\n mediaContext,\n}: ReasoningToolFeedbackSummaryProps) {\n return (\n <div className={`reasoning-tool-feedback-summary ${submitted && \"submitted\"}`}>\n {question}\n\n <DocRatingBar\n type={\"ratingBar\"}\n uid={`feedback_rating_bar_${index}`}\n value={value}\n inactiveBool={submitted}\n maxValue={maxValue}\n editingContext={weakMemoizedGenerateEditingContextAllFalse()}\n userContext={userContext}\n displayContext={displayContext}\n currentVersion={currentVersion}\n documentContext={documentContext}\n featureFlag={featureFlag}\n mediaContext={mediaContext}\n />\n\n <h5>Comment (optional)</h5>\n <DocTextInput\n type={\"textInput\"}\n uid={`feedback_text_input_${index}`}\n value={comment}\n inactiveBool={submitted}\n characterLimit={1000}\n editingContext={weakMemoizedGenerateEditingContextAllFalse()}\n userContext={userContext}\n displayContext={displayContext}\n currentVersion={currentVersion}\n documentContext={documentContext}\n featureFlag={featureFlag}\n mediaContext={mediaContext}\n />\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport {\n find,\n pickBy,\n size,\n startsWith,\n} from \"lodash\";\n\nimport GenButton from \"../../Gen/Button/component\";\n\nimport ReasoningToolPanel from \"./Panel\";\n\nimport ReasoningToolFeedbackSummary from \"./FeedbackSummary\";\n\nimport {stripState} from \"../../../helpers/Doc/documentUserState\";\n\nconst PANEL_QUESTIONS = [\n \"Studying this Integrated Illness Script was a valuable use of my time.\",\n \"I will apply what I learned from this Integrated Illness Script to patient care.\",\n \"I would recommend this Integrated Illness Script to another student.\",\n];\n\ninterface ReasoningToolFeedbackPanelProps {\n userState: UserState;\n userContext: UserContext;\n displayContext: DisplayContext;\n currentVersion: CurrentVersion;\n documentContext: DocumentContext;\n featureFlag: FeatureFlag;\n mediaContext: MediaContext;\n};\n\nexport default function ReasoningToolFeedbackPanel({\n userState,\n userContext,\n displayContext,\n currentVersion,\n documentContext,\n featureFlag,\n mediaContext,\n}: ReasoningToolFeedbackPanelProps) {\n const strippedState = stripState(userState);\n\n const feedbackToAquifer = {\n ratingBars: pickBy(strippedState, (value, key) => value && startsWith(key, \"feedback_rating_bar\")),\n comments: pickBy(strippedState, (value, key) => value && startsWith(key, \"feedback_text_input\")),\n submitted: find(strippedState, {feedback_submitted: true}) !== undefined,\n };\n\n const panelChildren = PANEL_QUESTIONS.map((question, index) => {\n const prettyIndex = index + 1;\n\n return (\n <ReasoningToolFeedbackSummary\n key={`feedback_summary_${prettyIndex}`}\n index={prettyIndex}\n question={question}\n value={feedbackToAquifer[\"ratingBars\"][`feedback_rating_bar_${prettyIndex}`] && feedbackToAquifer[\"ratingBars\"][`feedback_rating_bar_${prettyIndex}`].value}\n submitted={feedbackToAquifer[\"submitted\"]}\n comment={feedbackToAquifer[\"comments\"][`feedback_text_input_${prettyIndex}`] && feedbackToAquifer[\"comments\"][`feedback_text_input_${prettyIndex}`].value}\n userContext={userContext}\n displayContext={displayContext}\n currentVersion={currentVersion}\n documentContext={documentContext}\n featureFlag={featureFlag}\n mediaContext={mediaContext}\n />\n );\n });\n\n const completedFeedback = size(feedbackToAquifer[\"ratingBars\"]);\n const partiallyCompleteFeedback = completedFeedback > 0 && completedFeedback !== PANEL_QUESTIONS.length;\n const noFeedback = completedFeedback === 0;\n\n return (\n <ReasoningToolPanel\n key=\"Feedback to Aquifer\"\n title=\"Feedback to Aquifer\"\n infoBox=\"We value your input! Please provide your feedback to Aquifer using the easy 5-star ratings below, and enter your comments if desired.\"\n displayContext={displayContext}\n >\n {panelChildren}\n <GenButton\n name={partiallyCompleteFeedback ? `${completedFeedback} out of ${PANEL_QUESTIONS.length}` : feedbackToAquifer[\"submitted\"] ? \"Submitted\" : \"Submit\"}\n confirmTitle=\"Ready to Submit?\"\n confirmMessage=\"If so, click Submit to send your feedback to Aquifer.\"\n confirmOKText=\"Submit\"\n highlighted\n disabled={noFeedback || partiallyCompleteFeedback || feedbackToAquifer[\"submitted\"]}\n onClick={(e) => {\n userContext.addState({\n [\"feedback_submit_button\"]: {\n feedback_submitted: true,\n },\n });\n\n window.customConfirmBox({\n title: \"Thank you!\",\n message: \"Thank you for submitting feedback to Aquifer, which we use to improve our products. Aquifer does not respond to individual feedback. If you require a response, please use the Feedback form accessed from the top menu bar.\",\n callback: () => {},\n showsCancel: false,\n });\n }}\n />\n </ReasoningToolPanel>\n );\n}\n","import React from 'react'\n\nexport default function GenGen(props) {\n const {\n canShow=true,\n children=[]\n } = props\n\n if (canShow) {\n return(children)\n } else {\n return(null)\n }\n}\n","import React from 'react'\n\nimport GenGen from 'Gen/component'\n\nexport default function GenSpan(props) {\n const {\n value,\n onChange,\n canEdit=true,\n isEditing=false,\n onSpanClick,\n placeholder='',\n children='',\n onBlur,\n onEnterKeyPress,\n shouldAutoFocus=false,\n className,\n isControlled=false\n } = props\n\n function onKeyPress(e) {\n if ((e.which || e.keyCode) === 13) {\n e.preventDefault()\n onEnterKeyPress(e)\n }\n }\n\n return <GenGen {...props}>\n {canEdit && isEditing ? (\n isControlled ? (\n <input\n key='gen-span-input'\n className='gen-span-input'\n type='text'\n value={children}\n placeholder={placeholder}\n onChange={onChange}\n onBlur={onBlur}\n onKeyPress={onKeyPress}\n autoFocus={shouldAutoFocus}\n />\n ) : (\n <input\n key='gen-span-input'\n className='gen-span-input'\n type='text'\n defaultValue={children}\n placeholder={placeholder}\n onChange={onChange}\n onBlur={onBlur}\n onKeyPress={onKeyPress}\n autoFocus={shouldAutoFocus}\n />\n )\n ):(\n <span onClick={onSpanClick}>{children}</span>\n )}\n </GenGen>\n}\n","import React from 'react'\n\nimport * as classNames from 'classnames'\n\nimport GenGen from 'Gen/component'\n\nexport default function GenParagraph(props) {\n const {\n value,\n onChange,\n canEdit=true,\n isEditing=false,\n onSpanClick,\n onEnterKeyPress,\n placeholder='',\n children='',\n onBlur,\n shouldAutoFocus=false,\n rows=2,\n className,\n isControlled=false\n } = props\n\n function onKeyPress(e) {\n if ((e.which || e.keyCode) === 13) {\n e.preventDefault()\n onEnterKeyPress(e)\n }\n }\n\n return <GenGen {...props}>\n {canEdit && isEditing ? (\n isControlled ? (\n <textarea\n key='gen-paragraph-input'\n className='gen-paragraph-input'\n value={children}\n placeholder={placeholder}\n onChange={onChange}\n onBlur={onBlur}\n onKeyPress={onKeyPress}\n autoFocus={shouldAutoFocus}\n rows={rows}\n />\n ) : (\n <textarea\n key='gen-paragraph-input'\n className='gen-paragraph-input'\n defaultValue={children}\n placeholder={placeholder}\n onChange={onChange}\n onBlur={onBlur}\n onKeyPress={onKeyPress}\n autoFocus={shouldAutoFocus}\n rows={rows}\n />\n )\n ):(\n <p className={classNames(className, 'gen-paragraph')} onClick={onSpanClick}>\n {children}\n </p>\n )}\n </GenGen>\n}\n","import * as React from \"react\";\nimport { isEmpty, trim, last } from \"lodash\";\n\nimport {\n findNodesLineages,\n} from \"../../../helpers/Doc/Functions/base\";\n\nimport { DIAGNOSES, FINDINGS, NOTES } from \"../../../reducers/ui/reasoningTool\";\nimport ReasoningToolDiagnosisSummary from \"./DiagnosisSummary\";\nimport ReasoningToolNoteSummary from \"./NoteSummary\";\nimport ReasoningToolFindingSummary from \"./FindingSummary\";\nimport ReasoningToolPanel from \"./Panel\";\nimport analyticsModule from \"../../../../application/analytics.js\";\n\nconst titles = {\n [DIAGNOSES]: \"Diagnoses\",\n [FINDINGS]: \"Findings\",\n [NOTES]: \"Notes\",\n};\n\nconst infoBoxes = {\n [NOTES]: \"Click to add a new note below. These notes are only visible to you.\",\n};\n\nconst panelComponents = {\n [DIAGNOSES]: ReasoningToolDiagnosisSummary,\n [FINDINGS]: ReasoningToolFindingSummary,\n [NOTES]: ReasoningToolNoteSummary,\n};\n\nfunction attachNodesToNotes(notes: Array<DocNote>, doc) {\n const noteNodesUids = notes.map((note) => note.notedNodeUid).filter((uid) => uid);\n const noteNodeLineages = findNodesLineages(doc, (node) => node.type && noteNodesUids.includes(node.uid));\n const noteNodeLineagesLookup = Object.fromEntries(noteNodeLineages.map((noteNodeLineage: Array<any>) => [last(noteNodeLineage).uid, noteNodeLineage])); // TODO: Remove Array<any>\n\n return notes.map((note) => { return {...note, noteNodeLineage: noteNodeLineagesLookup[note.notedNodeUid]}; });\n}\n\ninterface ReasoningToolTextListPanelProps {\n wide: boolean;\n documentContext: DocumentContext;\n displayContext: DisplayContext;\n userContext: UserContext;\n reasoningToolContext: ReasoningToolContext;\n leadingDiagnosis: string;\n diagnoses: Array<DocDiagnosis>;\n findings: Array<DocFinding>;\n notes: Array<DocNote>;\n};\n\nexport default function ReasoningToolTextListPanel(props: ReasoningToolTextListPanelProps) {\n const {\n wide,\n documentContext,\n displayContext,\n userContext,\n reasoningToolContext,\n leadingDiagnosis,\n diagnoses = [],\n findings = [],\n notes = [],\n } = props;\n\n const {\n activePanel,\n togglePanelDeleting,\n panelNodeEditStart,\n panelNodeEditEnd,\n isPanelDeleting,\n activeEditNodeUid,\n } = reasoningToolContext;\n\n\n let items = [];\n let panelData : {\n addNode: (uid: string, data?: Record<string, any>) => void;\n updateNode: (uid: string, data: Record<string, any>) => void;\n deleteNode: (uid: string) => void;\n setIsDangerousDiagnosis?: (uid: string, value: boolean) => void;\n setIsLeadingDiagnosis?: (uid: string) => void;\n userContext?: UserContext;\n }\n switch (activePanel) {\n case DIAGNOSES:\n panelData = {\n addNode: userContext.addDiagnosis,\n updateNode: userContext.updateDiagnosis,\n deleteNode: userContext.deleteDiagnosis,\n setIsDangerousDiagnosis: userContext.setIsDangerousDiagnosis,\n setIsLeadingDiagnosis: userContext.setIsLeadingDiagnosis,\n };\n\n items = diagnoses;\n break;\n case FINDINGS:\n panelData = {\n addNode: userContext.addFinding,\n updateNode: userContext.updateFinding,\n deleteNode: userContext.deleteFinding,\n };\n\n items = findings;\n break;\n case NOTES:\n panelData = {\n addNode: userContext.addNote,\n updateNode: userContext.updateNote,\n deleteNode: userContext.deleteNote,\n userContext: userContext,\n };\n\n items = attachNodesToNotes(notes, props);\n break;\n default:\n return null;\n }\n\n const PanelComponent = panelComponents[activePanel];\n const renderedItems = items.map((item) => {\n const startNodeEdit = () => panelNodeEditStart(item.uid);\n\n const endNodeEdit = (e: React.FocusEvent<HTMLInputElement>) => {\n if (isEmpty(trim(e.target.value))) {\n panelData.deleteNode(item.uid);\n displayContext.setFocusedBookmarkUid(null);\n } else {\n panelData.updateNode(item.uid, {content: e.target.value}),\n panelNodeEditEnd(item.uid);\n trackEvent(item.type);\n }\n };\n\n return (\n <PanelComponent\n {...item}\n key={item.uid}\n isEditing={!!activeEditNodeUid && item.uid === activeEditNodeUid}\n startNodeEdit={startNodeEdit}\n endNodeEdit={endNodeEdit}\n isLeadingDiagnosis={!!leadingDiagnosis && item.uid === leadingDiagnosis}\n documentContext={documentContext}\n displayContext={displayContext}\n {...panelData}\n />\n );\n });\n\n const trackEvent = (type) => {\n const caseName = documentContext.title\n\n switch(type) {\n case 'diagnosis':\n analyticsModule.track('add_a_diagnosis', { page: window.location.href, source: 'Case', case: caseName})\n break;\n case 'finding':\n analyticsModule.track('add_a_finding', { page: window.location.href, source: 'Case', case: caseName})\n break;\n case 'note':\n analyticsModule.track('use_notes_feature_on_the_page', { page: window.location.href, source: 'Case', case: caseName})\n break;\n }\n }\n\n return (\n <ReasoningToolPanel\n title={titles[activePanel]}\n infoBox={infoBoxes[activePanel]}\n isDeleting={isPanelDeleting}\n toggleDeleting={togglePanelDeleting}\n isAddable\n wide={wide}\n panelNodeEditStart={panelNodeEditStart}\n displayContext={displayContext}\n {...panelData}\n >\n {renderedItems}\n </ReasoningToolPanel>\n );\n}\n","import * as React from \"react\";\nimport * as classNames from \"classnames\";\n\nimport GenSpan from \"../../Gen/Span/component\";\n\ninterface ReasoningToolDiagnosisSummaryProps {\n uid: string;\n content: string;\n isEditing: boolean;\n startNodeEdit: () => void;\n endNodeEdit: React.FocusEventHandler<HTMLInputElement>;\n isLeadingDiagnosis: boolean;\n isDangerousDiagnosis: boolean;\n setIsDangerousDiagnosis: (uid: string, value: boolean) => void;\n setIsLeadingDiagnosis: (uid: string) => void;\n};\n\nexport default function ReasoningToolDiagnosisSummary({\n uid,\n content = \"\",\n isEditing,\n startNodeEdit,\n endNodeEdit,\n isLeadingDiagnosis = false,\n isDangerousDiagnosis = false,\n setIsDangerousDiagnosis,\n setIsLeadingDiagnosis,\n}: ReasoningToolDiagnosisSummaryProps) {\n return (\n <div className=\"reasoning-tool-diagnosis-summary\">\n <div className=\"reasoning-tool-diagnosis-summary-content\">\n <GenSpan\n value={content}\n placeholder=\"Enter Diagnosis...\"\n shouldAutoFocus\n isEditing={isEditing}\n onSpanClick={startNodeEdit}\n onBlur={endNodeEdit}\n onEnterKeyPress={endNodeEdit}\n >\n {content}\n </GenSpan>\n </div>\n <div className=\"reasoning-tool-diagnosis-summary-buttons\">\n <i onClick={() => setIsDangerousDiagnosis(uid, !isDangerousDiagnosis)} className={classNames(\"icon-warning\", \"dangerous\", {active: isDangerousDiagnosis})}></i>\n <i onClick={() => setIsLeadingDiagnosis(uid)} className={classNames(\"icon-star\", \"leading\", {active: isLeadingDiagnosis})}></i>\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport GenParagraph from \"../../Gen/Paragraph/component\";\n\ninterface ReasoningToolFindingSummaryProps {\n content: string;\n isEditing: boolean;\n startNodeEdit: () => void;\n endNodeEdit: React.FocusEventHandler<HTMLInputElement>;\n};\n\nexport default function ReasoningToolFindingSummary({\n content = \"\",\n isEditing,\n startNodeEdit,\n endNodeEdit,\n}: ReasoningToolFindingSummaryProps) {\n return (\n <div className=\"reasoning-tool-finding-summary\">\n <GenParagraph\n value={content}\n placeholder=\"Enter Finding...\"\n shouldAutoFocus\n isEditing={isEditing}\n onSpanClick={startNodeEdit}\n onBlur={endNodeEdit}\n onEnterKeyPress={endNodeEdit}\n >\n {content}\n </GenParagraph>\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { last, startCase } from \"lodash\";\n\nimport * as classNames from \"classnames\";\n\nimport GenParagraph from \"../../Gen/Paragraph/component\";\n\nimport DocList from \"../BlockNodes/List\";\nimport DocParagraph from \"../BlockNodes/Paragraph\";\n\nimport { scrollToLineage } from \"../../../helpers/Doc/scrollTo\";\n\nimport {\n weakMemoizedGenerateEditingContextAllFalse,\n} from \"../../../helpers/Doc/context\";\n\ninterface ReasoningToolNoteSummaryProps {\n content: string;\n isEditing: boolean;\n startNodeEdit: () => void;\n endNodeEdit: React.FocusEventHandler<HTMLInputElement>;\n noteNodeLineage: Array<DocBlockNode<InlineNode>>;\n displayContext: DisplayContext;\n documentContext: DocumentContext;\n currentVersion: CurrentVersion;\n userContext: UserContext;\n mediaContext: MediaContext;\n featureFlag: FeatureFlag;\n};\n\nexport default function ReasoningToolNoteSummary(props: ReasoningToolNoteSummaryProps) {\n const {\n content = \"\",\n isEditing,\n startNodeEdit,\n endNodeEdit,\n noteNodeLineage,\n currentVersion,\n displayContext,\n documentContext,\n userContext,\n mediaContext,\n featureFlag,\n } = props;\n\n let displayData, onClick;\n if (noteNodeLineage) {\n const noteNode = last(noteNodeLineage);\n\n onClick = () => {\n scrollToLineage(noteNodeLineage, userContext.addState);\n displayContext.setFocusedBookmarkUid(noteNode.uid);\n };\n\n const editingContext = weakMemoizedGenerateEditingContextAllFalse();\n switch (noteNode.type) {\n case \"paragraph\":\n displayData = (\n <DocParagraph\n key={noteNode.uid}\n simple\n currentVersion={currentVersion}\n documentContext={documentContext}\n displayContext={displayContext}\n editingContext={editingContext}\n userContext={userContext}\n mediaContext={mediaContext}\n featureFlag={featureFlag}\n {...noteNode}\n />\n );\n break;\n case \"numberedList\":\n case \"regularList\":\n displayData = (\n <DocList\n key={noteNode.uid}\n simple\n currentVersion={currentVersion}\n documentContext={documentContext}\n displayContext={displayContext}\n editingContext={editingContext}\n userContext={userContext}\n mediaContext={mediaContext}\n featureFlag={featureFlag}\n {...noteNode}\n />\n );\n break;\n case \"image\":\n case \"table\":\n case \"video\":\n case \"audio\":\n default:\n displayData = <p>{startCase(noteNode.type)} note. Click to view.</p>;\n }\n displayData = (\n <>\n <h6>Excerpt:</h6>\n {displayData}\n <hr />\n </>\n );\n }\n\n return (\n <div className={classNames(\"reasoning-tool-note-summary\", {noted: noteNodeLineage})} onClick={onClick}>\n {displayData}\n <h6>Your Notes:</h6>\n <GenParagraph\n value={content}\n placeholder=\"Enter Note...\"\n shouldAutoFocus\n isEditing={isEditing}\n onSpanClick={startNodeEdit}\n onBlur={endNodeEdit}\n onEnterKeyPress={endNodeEdit}\n >\n {content}\n </GenParagraph>\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { intToDateTimeString } from \"../../helpers/time_format\";\n\ninterface GenColorDotProps {\n colorArray: ColorArray;\n};\n\nfunction GenColorDot(props: GenColorDotProps) {\n const dotStyle = {\n height: \"10px\",\n width: \"10px\",\n backgroundColor: `rgba(${props.colorArray})`,\n borderRadius: \"50%\",\n display: \"inline-block\",\n marginRight: \"5px\",\n marginLeft: \"5px\",\n };\n\n return (\n <span\n className=\"dot\"\n style={dotStyle}\n />\n );\n}\n\ninterface DocAuthorHeaderProps {\n colorArray: ColorArray;\n authorName: string;\n createdAt?: number;\n children?: React.ReactNode;\n};\n\nexport default function DocAuthorHeader(props: DocAuthorHeaderProps) {\n return (\n <div style={{display: \"flex\"}}>\n <div style={{flexGrow: 1}}>\n <h6 style={{marginBottom: 0}}>\n {props.authorName}\n <GenColorDot colorArray={props.colorArray} />\n </h6>\n <p style={{fontSize: \".8em\", color: \"darkgray\", marginBottom: 0}}>{props.createdAt && intToDateTimeString(props.createdAt)}</p>\n </div>\n <div>\n {props.children}\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport DocAuthorHeader from \"../AuthorHeader\";\n\nimport { newDeleteStudentFeedbackChange } from \"../../../helpers/Doc/changes\";\n\ninterface ReasoningToolStudentFeedbackProps {\n userContext: UserContext;\n editingContext: EditingContextInEditor;\n studentFeedback: StudentFeedback;\n};\n\nexport default function ReasoningToolStudentFeedback(props: ReasoningToolStudentFeedbackProps) {\n const {\n userContext,\n editingContext,\n studentFeedback,\n } = props;\n\n return (\n <div className=\"reasoning-tool-summary-of-edit\">\n <DocAuthorHeader\n authorName={studentFeedback.author_full_name}\n colorArray={editingContext.colorLookup[studentFeedback.author_id]}\n createdAt={studentFeedback.created_at}\n >\n {(studentFeedback.author_id === userContext.id || editingContext.shouldShowEditor) && <i style={{marginRight: \"5px\"}} className=\"fa fa-trash\" onClick={(e) => {\n e.stopPropagation();\n editingContext.addChange(newDeleteStudentFeedbackChange(studentFeedback.student_feedback_id));\n }}></i>}\n </DocAuthorHeader>\n <p>{studentFeedback.text}</p>\n </div>\n );\n}\n","export default {\n control: {\n backgroundColor: '#fff',\n fontSize: 14,\n fontWeight: 'normal',\n },\n\n '&multiLine': {\n control: {\n fontFamily: 'monospace',\n minHeight: 63,\n },\n highlighter: {\n padding: 9,\n border: '1px solid transparent',\n },\n input: {\n padding: 9,\n border: '1px solid silver',\n },\n },\n\n '&singleLine': {\n display: 'inline-block',\n width: 180,\n\n highlighter: {\n padding: 1,\n border: '2px inset transparent',\n },\n input: {\n padding: 1,\n border: '2px inset',\n },\n },\n\n suggestions: {\n list: {\n backgroundColor: 'white',\n border: '1px solid rgba(0,0,0,0.15)',\n fontSize: 14,\n },\n item: {\n padding: '5px 15px',\n borderBottom: '1px solid rgba(0,0,0,0.15)',\n '&focused': {\n backgroundColor: '#cee4e5',\n },\n },\n },\n}\n","export default {\n backgroundColor: '#cee4e5',\n}\n","import * as React from \"react\";\nimport { HotKeys } from \"react-hotkeys\";\n\nimport GenButton from \"../../Gen/Button/component\";\nimport { MentionsInput, Mention, OnChangeHandlerFunc } from 'react-mentions'\n\nimport mentionsInputStyle from \"./CommentInput/mentionsInputStyle\";\nimport mentionStyle from \"./CommentInput/mentionStyle\";\n\ninterface DocCommentInputProps {\n editors?: Array<EditorSpecialType>;\n\n isActive: boolean;\n onAddClick: (value: string) => void;\n onCancelClick: () => void;\n onFocus: () => void;\n\n autoFocus?: boolean; // Can get rid of???\n};\n\ninterface DocCommentInputState {\n textAreaValue: string;\n};\n\nexport default class DocCommentInput extends React.Component<DocCommentInputProps, DocCommentInputState> {\n constructor(props: DocCommentInputProps) {\n super(props);\n\n this.state = {\n textAreaValue: \"\",\n };\n }\n\n handleChange(event: { target: { value: string } }) {\n this.setState({textAreaValue: event.target.value});\n }\n\n render () {\n const onAdd = () => {\n this.props.onAddClick(this.state.textAreaValue);\n this.setState({textAreaValue: \"\"});\n };\n const fetchUsers = (query: string) => {\n const users = this.props.editors\n if (!query) {\n return users\n }\n\n const filteredUsers = users.filter((user) =>\n user.display.toLowerCase().includes(query)\n );\n return filteredUsers\n };\n\n const HotKeysAnyType: any = HotKeys; // TODO: Remove when able to import type from HotKeys\n return (\n <HotKeysAnyType\n handlers={{\n return: (event: KeyboardEvent) => {onAdd(); return false;},\n modReturn: (event: KeyboardEvent) => {onAdd(); return false;},\n }}\n >\n <div className=\"doc-comment-input\" onClick={(e) => e.stopPropagation()}>\n <MentionsInput\n style={mentionsInputStyle}\n value={this.state.textAreaValue}\n onChange={this.handleChange.bind(this)}\n placeholder=\"Comment\"\n autoFocus={this.props.autoFocus}\n onFocus={this.props.onFocus}\n >\n <Mention\n style={mentionStyle}\n trigger=\"@\"\n data={fetchUsers}\n markup={'@__display__{__id__}'}\n />\n </MentionsInput>\n\n\n {(this.state.textAreaValue.length > 0 || this.props.isActive) && (\n <div className=\"doc-comment-input-buttons\">\n <GenButton\n name=\"Add\"\n highlighted\n disabled={this.state.textAreaValue.length === 0}\n onClick={onAdd}\n />\n <GenButton\n name=\"Cancel\"\n highlighted\n onClick={() => {this.setState({textAreaValue: \"\"}); this.props.onCancelClick();}}\n />\n </div>\n )}\n </div>\n </HotKeysAnyType>\n );\n }\n}\n","import * as React from \"react\";\n\nimport DocAuthorHeader from \"../AuthorHeader\";\n\nimport { scrollToLineage } from \"../../../helpers/Doc/scrollTo\";\n\nimport { newDeleteSummaryOfEditChange } from \"../../../helpers/Doc/changes\";\n\ninterface ReasoningToolSummaryOfEditProps {\n userContext: UserContext;\n editingContext: EditingContextInEditor;\n summaryOfEdit: AddSummaryOfEditClothedChange;\n summaryOfEditLineage: Array<DocBlockNode<InlineNode>>;\n};\n\nexport default function ReasoningToolSummaryOfEdit(props: ReasoningToolSummaryOfEditProps) {\n const {\n userContext,\n editingContext,\n summaryOfEdit,\n summaryOfEditLineage,\n } = props;\n\n const onClick = () => {\n if (summaryOfEditLineage) {\n scrollToLineage(summaryOfEditLineage, userContext.addState);\n }\n };\n\n return (\n <div className=\"reasoning-tool-summary-of-edit\" onClick={onClick}>\n <DocAuthorHeader\n authorName={summaryOfEdit.author_full_name}\n colorArray={editingContext.colorLookup[summaryOfEdit.author_id]}\n createdAt={summaryOfEdit.created_at}\n >\n {(editingContext.shouldShowEditor || summaryOfEdit.author_id === userContext.id) && <i style={{marginRight: \"5px\"}} className=\"fa fa-trash\" onClick={(e) => {\n e.stopPropagation();\n editingContext.addChange(newDeleteSummaryOfEditChange(summaryOfEdit.summary_of_edit_id));\n }}></i>}\n </DocAuthorHeader>\n <p>{summaryOfEdit.text}</p>\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport {full_url} from \"../../../helpers/url\";\n\nimport ReasoningToolPanel from \"./Panel\";\nimport CollapsibleListItem from \"../../Gen/CollapsibleList/Item/component\";\n\ninterface ReasoningToolEditorsChecklistTableProps {\n activeMemberId: number;\n checklistContents: Array<ChecklistContent>;\n currentAssignmentId: number;\n nextVersionId: number;\n};\n\ntype ReasoningToolEditorsChecklistTableState = Record<number, {\n body: string,\n checked: boolean,\n collapsed: boolean,\n}>;\n\nexport default class ReasoningToolEditorsChecklistTable extends React.Component<ReasoningToolEditorsChecklistTableProps, ReasoningToolEditorsChecklistTableState> {\n constructor(props: ReasoningToolEditorsChecklistTableProps) {\n super(props);\n\n let initialState = this.props.checklistContents.reduce((map: ReasoningToolEditorsChecklistTableState, item) => {\n map[item.id] = { body: item.body, checked: item.checked, collapsed: false };\n return map;\n }, {});\n\n this.state = initialState\n }\n\n handleCheckboxChange = (event: ChecklistContent) => {\n fetch(full_url(`/projects/checklist_items/${event.id}`), {\n method: 'PUT',\n headers: ReactOnRails.authenticityHeaders({\n 'Accept': \"application/json\",\n 'Content-Type': 'application/json',\n }),\n body: JSON.stringify({\n projects_checklist_item: {\n checked: !event.checked\n }\n })\n })\n .then(response => {\n if (!response.ok) {\n throw new Error(response.statusText);\n }\n })\n .catch(error => {\n console.log(error);\n });\n\n let id = event.id\n let checked = !this.state[id].checked\n\n this.setState({[id]: {...this.state[id], checked: checked}});\n }\n\n render() {\n let completeButtonStyle = {marginLeft: \"50px\"}\n let checklistItems = this.props.checklistContents\n let editingCompleteLink = window.location.origin + '/projects/project_members/' + this.props.activeMemberId\n let project_id = new URLSearchParams(window.location.search).get('project_id');\n if (!this.props.nextVersionId) {\n editingCompleteLink +='/editing_complete'\n } else {\n editingCompleteLink += '/assignments/' + this.props.currentAssignmentId + '/complete?next_link=' + window.location.origin + '/versions/' + this.props.nextVersionId + '/edit?project_id=' + project_id\n }\n\n let renderedTable;\n if (checklistItems?.length) {\n renderedTable = <table className='reasoning-tool-lab-values-table'>\n <tbody>\n {checklistItems.map(( item, index ) => {\n let list = item.body.split(/(?= -)/g)\n let content = list.splice(1).map((e, i) => {\n return { key: `${item.id}-${i}`, content: e }\n });\n return (\n <tr>\n <td style={{width: \"5%\", verticalAlign:\"top\", paddingTop:\"12px\"}}>\n <input type=\"checkbox\" checked={this.state[item.id].checked} onChange={this.handleCheckboxChange.bind(this, item)} />\n </td>\n <td>\n <CollapsibleListItem header={list} content={content} />\n </td>\n </tr>\n );\n })}\n </tbody>\n <button type='button' style={completeButtonStyle} onClick={(e) => {\n e.preventDefault();\n window.location.href = editingCompleteLink;\n }}> Editing Complete </button>\n </table>\n } else {\n renderedTable = <table className='reasoning-tool-lab-values-table'>\n <tbody>\n <tr>\n <td style={{width: \"10%\"}}>\n </td>\n <td>\n <strong>You are a simple reviewer</strong>\n </td>\n </tr>\n </tbody>\n <button type='button' style={completeButtonStyle} onClick={(e) => {\n e.preventDefault();\n window.location.href = editingCompleteLink;\n }}> Editing Complete </button>\n </table>\n }\n\n return (\n <ReasoningToolPanel\n key=\"Editor's Checklist\"\n title=\"Editor's Checklist\"\n >\n {renderedTable}\n </ReasoningToolPanel>\n )\n }\n}\n","import * as React from \"react\";\n\nimport { padStart } from \"lodash\";\n\nimport { currentTimeInSeconds } from \"../../../helpers/time_format\";\n\ninterface ReasoningToolTimerProps {\n timeLimit: number;\n timeUsedBeforeCurrentSegment: number;\n currentTimeSegmentStart: number;\n displayContext: DisplayContext;\n shouldShow: boolean;\n};\n\ninterface ReasoningToolTimerState {\n timeLeftInSeconds?: number;\n};\n\nexport default class ReasoningToolTimer extends React.Component<ReasoningToolTimerProps, ReasoningToolTimerState> {\n timer?: ReturnType<typeof setTimeout>;\n\n constructor(props: ReasoningToolTimerProps) {\n super(props);\n\n const timeLeft = this.calculateTimeLeft();\n if (timeLeft) {\n this.state = {timeLeftInSeconds: timeLeft};\n } else {\n this.state = {};\n }\n }\n\n componentDidMount() {\n if ( this.props.timeLimit ) {\n this.timer = setInterval(this.tick.bind(this), 1000);\n }\n }\n\n componentWillUnmount() {\n if ( this.timer ) {\n clearInterval(this.timer);\n }\n }\n\n tick() {\n const timeLeft = this.calculateTimeLeft();\n if (timeLeft) {\n this.setState({timeLeftInSeconds: timeLeft});\n }\n }\n\n calculateTimeLeft() {\n if (this.props.timeLimit) {\n let timeLeft = this.props.timeLimit;\n if (this.props.timeUsedBeforeCurrentSegment) {\n timeLeft = timeLeft - this.props.timeUsedBeforeCurrentSegment;\n }\n\n if (this.props.currentTimeSegmentStart) {\n timeLeft = timeLeft - (currentTimeInSeconds() - this.props.currentTimeSegmentStart);\n }\n\n return timeLeft;\n } else {\n return null;\n }\n }\n\n render() {\n const {\n displayContext,\n shouldShow = true,\n } = this.props;\n\n if (!shouldShow) { return null; }\n\n if (this.state.timeLeftInSeconds && displayContext.isOnline) {\n if (this.state.timeLeftInSeconds > 0) {\n const hrs = padStart(Math.floor(this.state.timeLeftInSeconds / 3600).toString(), 2, \"0\");\n const mins = padStart(Math.floor((this.state.timeLeftInSeconds % 3600) / 60).toString(), 2, \"0\");\n const secs = padStart((this.state.timeLeftInSeconds % 60).toString(), 2, \"0\");\n\n let timeFormat = `${mins}:${secs}`;\n if (Number(hrs) > 0) {\n timeFormat = `${hrs}:${timeFormat}`;\n }\n\n return (\n <div className=\"reasoning-tool-bar-button reasoning-tool-timer\">\n <p>Time Remaining</p>\n <span className=\"reasoning-tool-timer-time\">\n {timeFormat}\n </span>\n </div>\n );\n } else {\n return null;\n }\n } else {\n return null;\n }\n }\n}\n","import * as React from \"react\";\n\nimport * as R from \"ramda\";\n\nimport PoweredByAqueductImage from \"images/Powered-by-Aqueduct.png\";\n\nimport { full_url } from \"../../helpers/url\";\n\nimport { OPENED_LAB_VALUES_LOG } from \"../../helpers/DocumentUserLog\";\n\nimport { findNode } from \"../../helpers/Doc/Functions/base\";\n\nimport {\n // EDITOR PANELS\n AET_ADMIN_TOOLS,\n ASSESSMENT_QUESTION_DATA,\n QUESTION_DETAILS,\n CASE_LEARNING_OBJECTIVES,\n CASE_TEACHING_POINTS,\n CASE_MAP,\n CASE_METADATA,\n EDITORS_CHECKLIST,\n SUMMARY_OF_EDITS,\n STUDENT_FEEDBACK,\n\n // STUDENT PANELS\n BOOKMARKS,\n DIAGNOSES,\n FEEDBACK,\n FINDINGS,\n LABVALUES,\n NOTES,\n} from \"../../reducers/ui/reasoningTool\";\n\nimport {\n weakMemoizedApplyAllChanges,\n changesDisplayModes,\n} from \"../../helpers/Doc/changes\";\n\nimport ReasoningToolAdminToolsPanel from \"./ReasoningTool/AdminToolsPanel\";\nimport ReasoningToolAssessmentQuestionDataPanel from \"./ReasoningTool/AssessmentQuestionDataPanel\";\nimport ReasoningToolAssessmentQuestionDetails from \"./ReasoningTool/AssessmentQuestionDetails/component\";\nimport ReasoningToolBarButton from \"./ReasoningTool/BarButton\";\nimport ReasoningToolBookmarksPanel from \"./ReasoningTool/BookmarksPanel\";\nimport ReasoningToolCaseMetadataPanel from \"./ReasoningTool/CaseMetadataPanel\";\nimport ReasoningToolCaseTeachingPointsPanel from \"./ReasoningTool/CaseTeachingPointsPanel\";\nimport ReasoningToolCaseLearningObjectivesPanel from \"./ReasoningTool/CaseLearningObjectivesPanel\";\nimport ReasoningToolCaseMapPanel from \"./ReasoningTool/CaseMapPanel\";\nimport ReasoningToolFeedbackPanel from \"./ReasoningTool/FeedbackPanel\";\nimport ReasoningToolLabValuesPanel from \"./ReasoningTool/LabValuesPanel\";\nimport ReasoningToolTextListPanel from \"./ReasoningTool/TextListPanel\";\nimport ReasoningToolStudentFeedbackPanel from \"./ReasoningTool/StudentFeedbackPanel\";\nimport ReasoningToolSummaryOfEditsPanel from \"./ReasoningTool/SummaryOfEditsPanel\";\nimport ReasoningToolEditorsChecklist from './ReasoningTool/EditorsChecklist'\nimport ReasoningToolTimer from \"./ReasoningTool/Timer\";\nimport analyticsModule from \"../../../application/analytics.js\";\n\nconst reasoningToolPanelsMap = {\n // EDITOR PANELS\n [AET_ADMIN_TOOLS]: ReasoningToolAdminToolsPanel,\n [ASSESSMENT_QUESTION_DATA]: ReasoningToolAssessmentQuestionDataPanel,\n [QUESTION_DETAILS]: ReasoningToolAssessmentQuestionDetails,\n [CASE_METADATA]: ReasoningToolCaseMetadataPanel,\n [CASE_TEACHING_POINTS]: ReasoningToolCaseTeachingPointsPanel,\n [CASE_LEARNING_OBJECTIVES]: ReasoningToolCaseLearningObjectivesPanel,\n [CASE_MAP]: ReasoningToolCaseMapPanel,\n [SUMMARY_OF_EDITS]: ReasoningToolSummaryOfEditsPanel,\n [STUDENT_FEEDBACK]: ReasoningToolStudentFeedbackPanel,\n [EDITORS_CHECKLIST]: ReasoningToolEditorsChecklist,\n\n // STUDENT PANELS\n [BOOKMARKS]: ReasoningToolBookmarksPanel,\n [DIAGNOSES]: ReasoningToolTextListPanel,\n [FEEDBACK]: ReasoningToolFeedbackPanel,\n [FINDINGS]: ReasoningToolTextListPanel,\n [LABVALUES]: ReasoningToolLabValuesPanel,\n [NOTES]: ReasoningToolTextListPanel,\n};\n\ninterface ReasoningToolProps {\n changeData: ChangeData;\n displayContext: DisplayContext;\n documentContext: DocumentContext;\n editingContext: EditingContext;\n editingContextExtra: EditingContextExtra;\n currentVersion: CurrentVersion,\n mergedData: MergedData;\n reasoningToolContext: ReasoningToolContext;\n userContext: UserContext;\n featureFlag: FeatureFlag;\n userState: UserState;\n mediaContext: MediaContext,\n mappingContext: MappingContext,\n projectContext: ProjectContext,\n};\n\nexport default function ReasoningTool(props: ReasoningToolProps) {\n const {\n documentContext,\n editingContext,\n editingContextExtra,\n displayContext,\n userContext,\n projectContext,\n reasoningToolContext,\n mergedData,\n changeData,\n userState,\n } = props;\n\n const {\n activePanel,\n togglePanel,\n } = reasoningToolContext;\n\n const {\n disableDiagnoses = false,\n disableFindings = false,\n disableNotes = false,\n disableBookmarks = false,\n disableFeedback = true,\n disableLabValues = false,\n timeLimit = null,\n currentTimeSegmentStart = null,\n timeUsedBeforeCurrentSegment = 0,\n } = mergedData;\n\n const assessmentQuestionSignatureVersionId = editingContextExtra?.assessmentQuestionSignatureVersion?.documentId || documentContext.id;\n let reasoningToolSideNavChanges = props.featureFlag.new_landing_pages ? \"reasoning-tool-side-nav\" : \"\"\n\n const panelButtons = (\n <>\n <ReasoningToolBarButton\n key=\"AET ADMIN TOOLS\"\n name=\"AET ADMIN TOOLS\"\n isActive={activePanel === AET_ADMIN_TOOLS}\n onToggle={()=>{togglePanel(AET_ADMIN_TOOLS);}}\n shouldShow={editingContext.isEditing && userContext.isAdmin}\n />\n <ReasoningToolBarButton\n key=\"CASE METADATA\"\n name=\"CASE METADATA\"\n isActive={activePanel === CASE_METADATA}\n onToggle={()=>{togglePanel(CASE_METADATA);}}\n shouldShow={editingContext.isEditing}\n />\n <ReasoningToolBarButton\n key=\"CASE MAP\"\n name=\"CASE MAP\"\n isActive={activePanel === CASE_MAP}\n onToggle={()=>{togglePanel(CASE_MAP);}}\n shouldShow={editingContext.isEditing}\n />\n <ReasoningToolBarButton\n key=\"CASE LEARNING OBJECTIVES\"\n name=\"CASE LEARNING OBJECTIVES\"\n isActive={activePanel === CASE_LEARNING_OBJECTIVES}\n onToggle={()=>{togglePanel(CASE_LEARNING_OBJECTIVES);}}\n shouldShow={editingContext.isEditing}\n />\n <ReasoningToolBarButton\n key=\"CASE TEACHING POINTS\"\n name=\"CASE TEACHING POINTS\"\n isActive={activePanel === CASE_TEACHING_POINTS}\n onToggle={()=>{togglePanel(CASE_TEACHING_POINTS);}}\n shouldShow={editingContext.isEditing}\n />\n <ReasoningToolBarButton\n key=\"CASE ASSESSMENT QUESTIONS\"\n name=\"CASE ASSESSMENT QUESTIONS\"\n openLink={full_url(`/admin/assessment/questions?document_id=${documentContext.id}`)}\n shouldShow={editingContext.isEditing && documentContext.kind !== \"assessment_question_mcq\"}\n />\n <ReasoningToolBarButton\n key=\"ASSESSMENT QUESTION DATA\"\n name=\"ASSESSMENT QUESTION DATA\"\n isActive={activePanel === ASSESSMENT_QUESTION_DATA}\n onToggle={()=>{togglePanel(ASSESSMENT_QUESTION_DATA);}}\n shouldShow={editingContext.isEditing && documentContext.kind === \"assessment_question_mcq\"}\n />\n <ReasoningToolBarButton\n key=\"QUESTION DETAILS\"\n name=\"QUESTION DETAILS\"\n isActive={activePanel === QUESTION_DETAILS}\n onToggle={()=>{togglePanel(QUESTION_DETAILS);}}\n shouldShow={editingContext.isEditing && documentContext.kind === \"assessment_question_mcq\"}\n />\n <ReasoningToolBarButton\n key=\"StudentFeedback\"\n name=\"Student Feedback\"\n isActive={activePanel === STUDENT_FEEDBACK}\n onToggle={()=>{togglePanel(STUDENT_FEEDBACK);}}\n shouldShow={editingContext.isEditing}\n />\n <ReasoningToolBarButton\n key=\"SummaryOfEdits\"\n name=\"Summary of Edits\"\n iconName=\"icon-notes\"\n isActive={activePanel === SUMMARY_OF_EDITS}\n onToggle={()=>{togglePanel(SUMMARY_OF_EDITS);}}\n shouldShow={editingContext.isEditing}\n />\n <ReasoningToolBarButton\n key=\"Editor's Checklist\"\n name=\"Editor's Checklist\"\n iconName='fa fa-lg fa-list-alt'\n isActive={activePanel === EDITORS_CHECKLIST}\n onToggle={()=>{togglePanel(EDITORS_CHECKLIST);}}\n shouldShow={!!projectContext.activeMemberId && projectContext.activeUserId === userContext.id}\n />\n <ReasoningToolBarButton\n key=\"Diagnoses\"\n name=\"Diagnoses\"\n iconName=\"icon-diagnosis\"\n isActive={activePanel === DIAGNOSES}\n onToggle={()=>{onToggle(DIAGNOSES);}}\n shouldShow={!disableDiagnoses && !editingContext.isEditing}\n />\n <ReasoningToolBarButton\n key=\"Findings\"\n name=\"Findings\"\n iconName=\"icon-findings\"\n isActive={activePanel === FINDINGS}\n onToggle={()=>{onToggle(FINDINGS);}}\n shouldShow={!disableFindings && !editingContext.isEditing}\n />\n <ReasoningToolBarButton\n key=\"Notes\"\n name=\"Notes\"\n iconName=\"icon-notes\"\n isActive={activePanel === NOTES}\n onToggle={()=>{onToggle(NOTES);}}\n shouldShow={!disableNotes && !editingContext.isEditing}\n />\n <ReasoningToolBarButton\n key=\"Bookmarks\"\n name=\"Bookmarks\"\n iconName=\"icon-bookmark\"\n isActive={activePanel === BOOKMARKS}\n onToggle={()=>{onToggle(BOOKMARKS);}}\n shouldShow={!disableBookmarks && !editingContext.isEditing}\n />\n <ReasoningToolBarButton\n key=\"Feedback\"\n name=\"Feedback\"\n iconName=\"fa fa-lg fa-comment\"\n isActive={activePanel === FEEDBACK}\n onToggle={()=>{togglePanel(FEEDBACK);}}\n shouldShow={!disableFeedback && !editingContext.isEditing}\n />\n <ReasoningToolBarButton\n key=\"LabValues\"\n name=\"Lab Values\"\n iconName=\"fa fa-lg fa-flask\"\n isActive={activePanel === LABVALUES}\n onToggle={()=>{\n if (activePanel !== LABVALUES) { userContext.logEvent(OPENED_LAB_VALUES_LOG); }\n onToggle(LABVALUES);\n }}\n shouldShow={!disableLabValues && !editingContext.isEditing}\n />\n <ReasoningToolTimer\n key=\"Timer\"\n timeLimit={timeLimit}\n currentTimeSegmentStart={currentTimeSegmentStart}\n timeUsedBeforeCurrentSegment={timeUsedBeforeCurrentSegment}\n displayContext={displayContext}\n shouldShow={!editingContext.isEditing}\n />\n <ReasoningToolBarButton\n key=\"AQUIFER STYLE GUIDE\"\n name=\"AQUIFER STYLE GUIDE\"\n openLink={full_url(`/document_set_document_relations/${displayContext.styleGuideId}`)}\n shouldShow={!!(editingContext.isEditing && displayContext.styleGuideId)}\n />\n </>\n );\n\n const onToggle = (panel: PanelType) => {\n if(activePanel != panel) {\n trackEvent(panel);\n }\n togglePanel(panel);\n }\n\n const trackEvent = (panel: PanelType) => {\n const caseName = documentContext.title\n\n switch(panel) {\n case DIAGNOSES:\n analyticsModule.track('click_on_diagnoses', { page: window.location.href, source: 'Case', case: caseName})\n break;\n case FINDINGS:\n analyticsModule.track('click_on_findings', { page: window.location.href, source: 'Case', case: caseName})\n break;\n case NOTES:\n analyticsModule.track('click_on_notes_in_sidebar', { page: window.location.href, source: 'Case', case: caseName})\n break;\n case BOOKMARKS:\n analyticsModule.track('click_on_bookmark_on_sidebar', { page: window.location.href, source: 'Case', case: caseName})\n break;\n case LABVALUES:\n analyticsModule.track('click_on_lab_values', { page: window.location.href, source: 'Case', case: caseName})\n break;\n }\n }\n\n let openPanel;\n if (activePanel && reasoningToolPanelsMap[activePanel]) {\n let extraData: any = {}; // TODO: Remove any\n switch (activePanel) {\n case DIAGNOSES:\n extraData = {\n diagnoses: mergedData.diagnoses,\n leadingDiagnosis: mergedData.leadingDiagnosis,\n };\n break;\n case FINDINGS:\n extraData = {\n findings: mergedData.findings,\n };\n break;\n case NOTES:\n extraData = {\n notes: mergedData.notes,\n };\n break;\n case EDITORS_CHECKLIST:\n extraData = {\n currentAssignmentId: projectContext.currentAssignmentId,\n nextVersionId: projectContext.nextVersionId,\n checklistContents: projectContext.checklistContents,\n activeMemberId: projectContext.activeMemberId,\n }\n break;\n case FEEDBACK:\n extraData = {\n userState: userState,\n }\n break;\n case CASE_LEARNING_OBJECTIVES:\n if (documentContext.kind !== \"assessment_question_mcq\") {\n const compiledChangeData = changeData && !R.isEmpty(changeData) ?\n weakMemoizedApplyAllChanges(changeData, changesDisplayModes.HIGHLIGHT_ALL_CHANGES) :\n mergedData;\n\n const learningObjectivesList = findNode(mergedData, (node) => node.type === \"learningObjectivesList\");\n\n extraData = {\n learningObjectivesList,\n }\n }\n\n break;\n }\n\n const OpenPanel = reasoningToolPanelsMap[activePanel];\n openPanel = <OpenPanel {...props} {...extraData} />;\n }\n\n return (\n <div\n className={`reasoning-tool ${reasoningToolSideNavChanges}`}\n data-expanded={activePanel !== undefined}>\n <div className=\"reasoning-tool-tab\" aria-label=\"Open reasoning tool\"></div>\n <div className=\"reasoning-tool-buttons-bar\" style={{ overflow: \"auto\" }}>\n {panelButtons}\n <div className=\"reasoning-tool-buttons-bar-watermark\">\n <img src={PoweredByAqueductImage} />\n </div>\n </div>\n {openPanel}\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport ReasoningToolPanel from \"./Panel\";\n\nimport DocEditHeaderMetadataInputs from \"../EditBar/EditHeader/MetadataInputs\";\n\ninterface ReasoningToolAdminToolsPanelProps {\n editingContext: EditingContextInEditor;\n userContext: UserContext;\n mergedData: MergedData;\n};\n\nexport default function ReasoningToolAdminToolsPanel(props: ReasoningToolAdminToolsPanelProps) {\n const {\n editingContext,\n userContext,\n mergedData,\n } = props;\n\n return (\n <ReasoningToolPanel\n key=\"AET ADMIN TOOLS\"\n title=\"AET ADMIN TOOLS\"\n >\n <DocEditHeaderMetadataInputs\n editingContext={editingContext}\n userContext={userContext}\n node={mergedData}\n onlyKeys={[\n \"onlyOneUncollapsedSection\",\n \"disableDiagnoses\",\n \"disableNotes\",\n \"disableFindings\",\n \"disableBookmarks\",\n \"disableLabValues\",\n ]}\n />\n </ReasoningToolPanel>\n );\n}\n","import * as React from 'react';\nimport { useEffect, useState } from \"react\";\n\nimport ReasoningToolPanel from \"./../Panel\";\nimport DetailsTab from \"./DetailsTab\";\nimport StatisticsTab from \"./StatisticsTab\";\nimport VersionsList from \"../../../Admin/Versions/List\";\nimport MySwal from \"../../../../ui/MySwal\";\n\nimport { getAdminAssessmentQuestion, forkAdminAssessmentQuestion } from \"../../../../api/sdk.gen\";\n\ninterface AssessmentQuestionDetailsPanelProps {\n editingContextExtra: EditingContextExtra\n};\n\nexport default function AssessmentQuestionDetailsPanel(props: AssessmentQuestionDetailsPanelProps) {\n const {\n editingContextExtra\n } = props;\n\n const [activeTab, setActiveTab] = useState(\"details\");\n const [details, setDetails] = useState(null);\n\n const questionId = editingContextExtra.assessmentQuestion.id\n\n const fetchDetails = async () => {\n const resp = await getAdminAssessmentQuestion({ path: { id: questionId.toString() } });\n setDetails(resp.data);\n };\n\n useEffect(() => {\n fetchDetails();\n }, [questionId]);\n\n const handleTabChange = (tabId) => {\n setActiveTab(tabId);\n };\n\n const handleDuplicate = async () => {\n const confirmDuplicate = await MySwal.fire({\n title: \"Are you sure you want to duplicate this question?\",\n showCancelButton: true,\n confirmButtonText: \"Duplicate\",\n });\n\n if (confirmDuplicate.isConfirmed) {\n const result = await forkAdminAssessmentQuestion({ path: { id: questionId.toString() } });\n\n if (result.error) {\n MySwal.fire(\"Error!\", `Error duplicate selected. ${(result as { error: { error: string } }).error.error}`, \"error\");\n } else {\n MySwal.fire(\"Duplicate finished!\", result.data.message, result.data.success ? \"success\" : \"error\");\n }\n }\n }\n\n if (!details) return <div>Loading...</div>;\n\n return (<>\n <ReasoningToolPanel\n key=\"Assessment Question Details\"\n title={`Assessment Question Details`}\n wide={true}\n >\n <main style={{ margin: '10px' }}>\n <header style={{ display: 'flex', alignItems: 'center' }}>\n <h2>Show Question {questionId}</h2>\n <div>\n <button style={{ marginLeft: '10px' }} onClick={handleDuplicate}>\n Branch\n </button>\n </div>\n </header>\n <div style={{ padding: '10px 0', fontStyle: 'italic', color: '#ff5251' }}>\n {details.lock_status_msg}\n </div>\n <section className=\"main-content__body\">\n <ul className=\"nav nav-tabs\" id=\"myTab\">\n <li className=\"nav-item\">\n <a\n className={`nav-link ${activeTab === \"details\" ? \"active\" : \"\"}`}\n id=\"details-tab\"\n onClick={() => handleTabChange(\"details\")}\n >\n Details\n </a>\n </li>\n <li className=\"nav-item\">\n <a\n className={`nav-link ${activeTab === \"statistics\" ? \"active\" : \"\"}`}\n id=\"statistics-tab\"\n onClick={() => handleTabChange(\"statistics\")}\n >\n Statistics\n </a>\n </li>\n <li className=\"nav-item\">\n <a\n className={`nav-link ${activeTab === \"versions\" ? \"active\" : \"\"}`}\n id=\"versions-tab\"\n onClick={() => handleTabChange(\"versions\")}\n >\n Versions\n </a>\n </li>\n </ul>\n <div className=\"new-tab-content\" id=\"myTabContent\">\n <div className={`tab-pane fade ${activeTab === \"details\" ? \"active show\" : \"\"}`} id=\"details\">\n <DetailsTab details={details} />\n </div>\n <div className={`tab-pane fade ${activeTab === \"statistics\" ? \"active show\" : \"\"}`} id=\"statistics\">\n <StatisticsTab questionId={questionId} />\n </div>\n <div className={`tab-pane fade ${activeTab === \"versions\" ? \"active show\" : \"\"}`} id=\"versions\">\n <VersionsList itemId={questionId} itemType=\"Assessment::Question\" itemData={details} />\n </div>\n </div>\n </section>\n </main>\n </ReasoningToolPanel>\n </>);\n}\n","import * as React from \"react\";\n\nimport ReasoningToolPanel from \"./Panel\";\n\nimport * as DocConvertHTML from \"../../../helpers/Doc/Convert/PlainText\";\n\nimport DocEditHeaderMetadataInputs from \"../EditBar/EditHeader/MetadataInputs\";\nimport DocPrerequisiteMetadata from \"./CaseMetadataPanel/PrerequisiteMetadata\";\n\ninterface CaseMetadataPanelProps {\n editingContext: EditingContextInEditor;\n editingContextExtra: EditingContextExtra;\n userContext: UserContext;\n mergedData: MergedData;\n};\n\nexport default function CaseMetadataPanel(props: CaseMetadataPanelProps) {\n const {\n editingContext,\n editingContextExtra,\n userContext,\n mergedData,\n } = props;\n\n const assessmentQuestionSignatureVersion = editingContextExtra.assessmentQuestionSignatureVersion;\n const node = assessmentQuestionSignatureVersion?.data || mergedData\n\n return (\n <ReasoningToolPanel\n key=\"CASE METADATA\"\n title=\"CASE METADATA\"\n >\n {assessmentQuestionSignatureVersion?.data?.title && <h5>{DocConvertHTML.fromAnyType(assessmentQuestionSignatureVersion?.data?.title)}</h5>}\n <DocEditHeaderMetadataInputs\n editingContext={editingContext}\n userContext={userContext}\n node={node}\n disableMetadataEdit={!!assessmentQuestionSignatureVersion || !userContext.isAdmin}\n onlyKeys={[\n \"sex\",\n \"age_groups\",\n \"race\",\n \"clinical_locations\",\n \"clinical_disciplines\",\n \"systems\",\n \"clinical_focuses\",\n \"clinical_excellence\",\n \"clinical_principles\",\n \"basic_science_disciplines\",\n \"sciences_core_concepts\",\n \"presenting_problems\",\n \"final_diagnoses\",\n \"differential_diagnosis\",\n \"additional_diagnoses\"\n ]}\n />\n <hr/>\n <DocPrerequisiteMetadata\n editingContext={editingContext}\n editingContextExtra={editingContextExtra}\n rootUid={node.uid}\n possible_prerequisite={node.possible_prerequisite}\n prerequisite_document_id={node.prerequisite_document_id}\n userContext={userContext}\n />\n </ReasoningToolPanel>\n );\n}\n","import * as React from \"react\";\n\nimport ReasoningToolPanel from \"./Panel\";\n\nimport DocLearningObjectivesList from \"../BlockNodes/LearningObjectivesList\";\n\nimport AqButton from \"../../Aq/Button\";\n\nimport editGradientSmall from 'app/assets/images/edit_gradient_small.svg';\n\nimport {\n weakMemoizedGenerateEditingContextAllFalse,\n} from \"../../../helpers/Doc/context\";\n\ninterface CaseLearningObjectivesPanelProps {\n learningObjectivesList: DocLearningObjectivesListType<InlineNode>;\n documentContext: DocumentContext;\n currentVersion: CurrentVersion;\n editingContext: EditingContext;\n userContext: UserContext;\n displayContext: DisplayContext;\n mediaContext: MediaContext;\n mappingContext: MappingContext;\n featureFlag: FeatureFlag;\n};\n\nexport default function CaseLearningObjectivesPanel(props: CaseLearningObjectivesPanelProps) {\n const {\n learningObjectivesList,\n documentContext,\n currentVersion,\n editingContext,\n userContext,\n displayContext,\n mediaContext,\n mappingContext,\n featureFlag,\n } = props;\n\n let renderedLearningObjectives;\n if (learningObjectivesList) {\n renderedLearningObjectives = (\n <DocLearningObjectivesList\n {...learningObjectivesList}\n documentContext={documentContext}\n currentVersion={currentVersion}\n editingContext={weakMemoizedGenerateEditingContextAllFalse()}\n userContext={userContext}\n displayContext={displayContext}\n mediaContext={mediaContext}\n featureFlag={featureFlag}\n />\n )\n } else if (mappingContext?.learningObjectives && mappingContext.learningObjectives.length > 0) {\n renderedLearningObjectives = <>\n <p>Upon completion of this module, the learner should be able to:</p>\n {\n mappingContext.learningObjectives.map(learningObjective => (\n <div key={learningObjective.id} className=\"doc-learning-objective\">\n <div className=\"learning-objective-arrow\"/>\n <div className=\"learning-objective-content\">\n {learningObjective.name}\n </div>\n </div>\n ))\n }\n </>\n } else {\n renderedLearningObjectives = <h3>No Learning Objectives</h3>;\n }\n\n const editLOsButton = documentContext.kind !== \"assessment_question_mcq\" && (\n <div style={{display: 'flex', alignItems: 'center', justifyContent: 'center', marginBottom: '10px'}}>\n <AqButton\n className=\"pink outline\"\n onClick={() => {\n const learningObjectiveCard = document.querySelector('.learning_objectives_card')\n\n if (learningObjectiveCard) {\n const scrollPosition = learningObjectiveCard.getBoundingClientRect().top + window.pageYOffset - 200;\n window.scrollTo({top: scrollPosition, behavior: 'smooth'});\n }\n }}\n >\n <div className=\"aq-button-text\" style={{marginRight: '10px'}}>\n Edit Learning Objectives\n </div>\n\n <div>\n <img src={editGradientSmall} style={{height: '12px'}}></img>\n </div>\n </AqButton>\n </div>\n );\n\n return (\n <ReasoningToolPanel\n key=\"CASE LEARNING OBJECTIVES\"\n title=\"CASE LEARNING OBJECTIVES\"\n >\n <div className=\"reasoning-tool-panel-padding\">\n {editLOsButton}\n {renderedLearningObjectives}\n </div>\n </ReasoningToolPanel>\n );\n}\n","import * as React from \"react\";\n\nimport * as R from \"ramda\";\n\nimport {\n findNodeLineageByUid,\n} from \"../../../helpers/Doc/Functions/base\";\n\nimport GenButton from \"../../Gen/Button/component\";\n\nimport ReasoningToolPanel from \"./Panel\";\n\nimport ReasoningToolSummaryOfEdit from \"./SummaryOfEdit\";\n\nimport DocAuthorHeader from \"../AuthorHeader\";\nimport DocCommentInput from \"../ChangeSummaryColumn/CommentInput\";\n\nimport {\n newAddSummaryOfEditChange,\n} from \"../../../helpers/Doc/changes\";\n\nimport { NEW_SUMMARY_OF_EDITS } from \"../../../helpers/Doc/menu\";\n\ninterface ReasoningToolSummaryOfEditsPanelProps {\n documentContext: DocumentContext;\n userContext: UserContext;\n editingContext: EditingContextInEditor;\n editingContextExtra: EditingContextExtra;\n mergedData: MergedData;\n};\n\nexport default function ReasoningToolSummaryOfEditsPanel(props: ReasoningToolSummaryOfEditsPanelProps) {\n const {\n documentContext,\n userContext,\n editingContext,\n editingContextExtra,\n mergedData,\n } = props;\n\n\n let newSummaryOfEdit = null;\n if (editingContextExtra.currentMenu?.menu === NEW_SUMMARY_OF_EDITS) {\n const author = userContext;\n newSummaryOfEdit = (\n <div className=\"reasoning-tool-summary-of-edit\">\n <DocAuthorHeader\n authorName={`${author.firstName} ${author.lastName}`}\n colorArray={editingContext.colorLookup[author.id]}\n />\n <DocCommentInput\n isActive\n onAddClick={(text) => {\n editingContext.addChange(newAddSummaryOfEditChange(\n editingContextExtra.currentDocSelection?.start?.uid,\n editingContextExtra.currentDocSelection?.start?.contentKey,\n editingContextExtra.currentDocSelection?.start?.index,\n text,\n ));\n editingContext.closeCurrentMenu();\n }}\n onCancelClick={() => editingContext.closeCurrentMenu()}\n onFocus={() => {}}\n />\n </div>\n );\n }\n\n let summaryOfEdits = mergedData.summary_of_edits || [];\n summaryOfEdits = R.sortBy((summaryOfEdit: any) => summaryOfEdit.created_at, summaryOfEdits).reverse(); // TODO: Remove any\n\n const panelChildren = summaryOfEdits.map((summaryOfEdit) => {\n return (\n <ReasoningToolSummaryOfEdit\n key={summaryOfEdit.change_id}\n userContext={userContext}\n editingContext={editingContext}\n summaryOfEdit={summaryOfEdit}\n summaryOfEditLineage={summaryOfEdit.uid && findNodeLineageByUid(mergedData, summaryOfEdit.uid)}\n />\n );\n });\n\n return (\n <ReasoningToolPanel\n key=\"SUMMARY_OF_EDITS\"\n title=\"Summary of Edits\"\n headerButton={\n <GenButton\n key=\"Add Summary Of Edits\"\n name=\"New Summary\"\n highlighted={editingContextExtra.currentMenu?.menu === NEW_SUMMARY_OF_EDITS}\n small\n onClick={() => { editingContext.setCurrentMenu(NEW_SUMMARY_OF_EDITS); }}\n />\n }\n >\n {newSummaryOfEdit}\n {panelChildren}\n </ReasoningToolPanel>\n );\n}\n","import * as React from \"react\";\n\nimport * as R from \"ramda\";\n\nimport GenButton from \"../../Gen/Button/component\";\n\nimport ReasoningToolPanel from \"./Panel\";\n\nimport ReasoningToolStudentFeedback from \"./StudentFeedback\";\n\nimport DocAuthorHeader from \"../AuthorHeader\";\nimport DocCommentInput from \"../ChangeSummaryColumn/CommentInput\";\n\nimport { NEW_STUDENT_FEEDBACK } from \"../../../helpers/Doc/menu\";\n\nimport {\n newAddStudentFeedbackChange,\n} from \"../../../helpers/Doc/changes\";\n\ninterface StudentFeedbackPanelProps {\n documentContext: DocumentContext;\n userContext: UserContext;\n editingContext: EditingContextInEditor;\n editingContextExtra: EditingContextExtra;\n mergedData: MergedData;\n};\n\nexport default function StudentFeedbackPanel(props: StudentFeedbackPanelProps) {\n const {\n documentContext,\n userContext,\n editingContext,\n editingContextExtra,\n mergedData,\n } = props;\n\n let newStudentFeedback = null;\n if (editingContextExtra.currentMenu?.menu === NEW_STUDENT_FEEDBACK) {\n const author = userContext;\n newStudentFeedback = (\n <div className=\"reasoning-tool-summary-of-edit\">\n <DocAuthorHeader\n authorName={`${author.firstName} ${author.lastName}`}\n colorArray={editingContext.colorLookup[author.id]}\n />\n <DocCommentInput\n isActive\n onAddClick={(text) => {\n editingContext.addChange(newAddStudentFeedbackChange(text));\n editingContext.closeCurrentMenu();\n }}\n onCancelClick={() => editingContext.closeCurrentMenu()}\n onFocus={() => {}}\n />\n </div>\n );\n }\n\n let studentFeedbackChanges = mergedData.student_feedbacks || [];\n studentFeedbackChanges = R.sortBy((studentFeedbackChange: any) => studentFeedbackChange.created_at, studentFeedbackChanges).reverse(); // TODO: Remove any\n const panelChildren = studentFeedbackChanges.map((studentFeedbackChange) => {\n return (\n <ReasoningToolStudentFeedback\n key={studentFeedbackChange.uid}\n userContext={userContext}\n editingContext={editingContext}\n studentFeedback={studentFeedbackChange}\n />\n );\n });\n\n return (\n <ReasoningToolPanel\n key=\"STUDENT_FEEDBACK\"\n title=\"Student Feedback\"\n headerButton={\n <GenButton\n key=\"NewStudentFeedback\"\n name=\"New Student Feedback\"\n highlighted\n small\n onClick={() => {\n editingContext.setCurrentMenu(NEW_STUDENT_FEEDBACK);\n }}\n />\n }\n >\n {newStudentFeedback}\n {panelChildren}\n </ReasoningToolPanel>\n );\n}\n","import * as React from \"react\";\n\nimport { last } from \"lodash\";\n\nimport ReasoningToolBookmarkSummary from \"./BookmarksPanel/BookmarkSummary\";\nimport ReasoningToolPanel from \"./Panel\";\n\nimport {\n findNodesLineages,\n} from \"../../../helpers/Doc/Functions/base\";\n\ninterface ReasoningToolBookmarksPanelProps {\n documentContext: DocumentContext;\n displayContext: DisplayContext;\n currentVersion: CurrentVersion;\n userContext: UserContext;\n mediaContext: MediaContext;\n featureFlag: FeatureFlag;\n mergedData: MergedData;\n};\n\nexport default function ReasoningToolBookmarksPanel({\n documentContext,\n displayContext,\n currentVersion,\n userContext,\n mediaContext,\n featureFlag,\n mergedData,\n}: ReasoningToolBookmarksPanelProps) {\n const bookmarkedLineages = findNodesLineages(mergedData, (node) => 'bookmarked' in node && !!node.bookmarked);\n const panelChildren = bookmarkedLineages.map((bookmarkedNodeLineage: Array<any>) => { // TODO: Remove any\n const bookmarkedNode = last(bookmarkedNodeLineage);\n\n return (\n <ReasoningToolBookmarkSummary\n key={bookmarkedNode.uid}\n documentContext={documentContext}\n currentVersion={currentVersion}\n userContext={userContext}\n displayContext={displayContext}\n mediaContext={mediaContext}\n featureFlag={featureFlag}\n bookmarkedNode={bookmarkedNode}\n bookmarkedNodeLineage={bookmarkedNodeLineage}\n />\n );\n });\n\n return (\n <ReasoningToolPanel\n key=\"Bookmarks\"\n title=\"Bookmarks\"\n infoBox={<span><span className=\"icon-bookmark\" style={{fontSize: \"0.75em\"}}></span> Hover over text and click the Bookmarks icon to add bookmarks for your reference</span>}\n >\n {panelChildren}\n </ReasoningToolPanel>\n );\n}\n","import * as React from \"react\";\n\nimport ReasoningToolPanel from \"./Panel\";\n\ninterface ReasoningToolLabValuePanelProps {};\n\nexport default function ReasoningToolLabValuePanel(props: ReasoningToolLabValuePanelProps) {\n return (\n <ReasoningToolPanel\n key=\"Lab Values\"\n title=\"Lab Values\"\n >\n <table className=\"reasoning-tool-lab-values-table\">\n <tbody>\n <tr>\n <td>\n <strong>Blood, Plasma, Serum</strong>\n </td>\n <td>\n <strong>Conventional Range</strong>\n </td>\n <td>\n <strong>SI Range</strong>\n </td>\n </tr>\n <tr>\n <td>Alanine aminotransferase (ALT), serum</td>\n <td><45 U/L [male] <34 U/L [female]</td>\n <td><0.77 μkat/L [male] <0.58 μkat/L [female]</td>\n </tr>\n <tr>\n <td>Alkaline phosphatase (IFCC at 37<sup>o</sup>C)</td>\n <td>39-117 U/L</td>\n <td>0.65-1.95 mmol/L</td>\n </tr>\n <tr>\n <td>Amylase, serum</td>\n <td>28-100 u/L</td>\n <td>0.48-1.70 μkat/L</td>\n </tr>\n <tr>\n <td>Aspartate aminotransferase (AST), serum</td>\n <td><35 U/L [male] <31 U/L [female]</td>\n <td><0.60 μkat/L [male] <0.53 μkat/L [female]</td>\n </tr>\n <tr>\n <td>Bilirubin, serum (adult) Total // Conjugated</td>\n <td>0-2.0 mg/dL // 0.0-0.2 mg/dL</td>\n <td>0-34 μmol/L // 0.0-3.4 μmol/L</td>\n </tr>\n <tr>\n <td>Calcium, serum</td>\n <td>8.6-10.2 mg/dL</td>\n <td>2.15-2.55 mmol/L</td>\n </tr>\n <tr>\n <td>Cholesterol, serum</td>\n <td><200 mg/dL</td>\n <td><5.18 mmol/L</td>\n </tr>\n <tr>\n <td>Cortisol, serum</td>\n <td>0800 h: 0.6-1.6 μg/dL // 1600 h: 0.2-0.9 μg/dL</td>\n <td>17-44 nmol/L // 6-25 nmol/L</td>\n </tr>\n <tr>\n <td>\n </td>\n <td>2200 h: 0.7-2.2 μg/dL</td>\n <td>2-6 nmol/L</td>\n </tr>\n <tr>\n <td>Creatine kinase, serum</td>\n <td>46-171 U/L [male] 34-145 U/L [female]</td>\n <td>0.78-2.90 μkat/L [male] 0.58-2.47 μkat/L [female]</td>\n </tr>\n <tr>\n <td>Creatinine, serum</td>\n <td>1.0-1.7 mg/dL [male] 0.6-1.3 mg/dL [female]</td>\n <td>88-150 μmol/L [male] 53-115 μmol/L [female]</td>\n </tr>\n <tr>\n <td>Electrolytes, serum</td>\n <td>\n </td>\n <td>\n </td>\n </tr>\n <tr>\n <td>Sodium</td>\n <td>136-145 mEq/L</td>\n <td>136-145 mmol/L</td>\n </tr>\n <tr>\n <td>Potassium</td>\n <td>3.5-5.0 mEq/L</td>\n <td>3.5-5.0 mmol/L</td>\n </tr>\n <tr>\n <td>Chloride</td>\n <td>95-105 mEq/L</td>\n <td>95-105 mmol/L</td>\n </tr>\n <tr>\n <td>Bicarbonate</td>\n <td>22-28 mEq/L</td>\n <td>22-28 mmol/L</td>\n </tr>\n <tr>\n <td>Magnesium</td>\n <td>1.5-2.0 mEq/L</td>\n <td>0.75-1.0 mmol/L</td>\n </tr>\n <tr>\n <td>Estriol, total, serum (in pregnancy)</td>\n <td>\n </td>\n <td>\n </td>\n </tr>\n <tr>\n <td>21-32 wks</td>\n <td>5-50 ng/mL</td>\n <td>17-174 nmol/L</td>\n </tr>\n <tr>\n <td>33-35 wks</td>\n <td>90-240 ng/mL</td>\n <td>312-833 nmol/L</td>\n </tr>\n <tr>\n <td>36-41 wks</td>\n <td>150-213 ng/mL</td>\n <td>521-739 nmol/L</td>\n </tr>\n <tr>\n <td>Ferritin, serum</td>\n <td>20-250 ng/mL [male] 10-120 ng/mL [female]</td>\n <td>20-250 μg/L [male] 10-120 μg/L [female]</td>\n </tr>\n <tr>\n <td>Follicle-stimulating hormone, serum/plasma</td>\n <td>Male: 1.4-15.4 mIU/mL</td>\n <td>1.4-15.4 IU/L</td>\n </tr>\n <tr>\n <td>\n </td>\n <td>Female: follicular phase 1.4-9.9 mIU/mL</td>\n <td>1.4-9.9 IU/L</td>\n </tr>\n <tr>\n <td>\n </td>\n <td>midcycle peak 0.2-17.2 mIU/mL</td>\n <td>0.2-17.2 IU/L</td>\n </tr>\n <tr>\n <td>\n </td>\n <td>luteal phase 1.1-9.2 mIU/mL</td>\n <td>1.1-9.2 IU/L</td>\n </tr>\n <tr>\n <td>\n </td>\n <td>postmenopause 19.3-100.6 mIU/mL</td>\n <td>19.3-100.6 U/L</td>\n </tr>\n <tr>\n <td>Gases, arterial blood (room air)</td>\n <td>\n </td>\n <td>\n </td>\n </tr>\n <tr>\n <td>pH</td>\n <td>7.35-7.45</td>\n <td>[H+] 36-44 nmol/L</td>\n </tr>\n <tr>\n <td>PC02</td>\n <td>33-45 mm Hg</td>\n <td>4.4-5.9 kPa</td>\n </tr>\n <tr>\n <td>P02</td>\n <td>75-105 mm Hg</td>\n <td>10.0-14.0 kPa</td>\n </tr>\n <tr>\n <td>Glucose, serum</td>\n <td>Fasting: 74-100 mg/dL</td>\n <td>4.1-5.5 mmol/L</td>\n </tr>\n <tr>\n <td>\n </td>\n <td>2-hr postprandial: >120 mg/dL</td>\n <td><6.6 mmol/L</td>\n </tr>\n <tr>\n <td>Growth hormone - arginine stimulation</td>\n <td>>7.5 ng/mL</td>\n <td>>7.5 μg/L</td>\n </tr>\n <tr>\n <td>Immunoglobulins, serum</td>\n <td>\n </td>\n <td>\n </td>\n </tr>\n <tr>\n <td>IgA</td>\n <td>70-400 mg/dL</td>\n <td>0.-4.0 g/L</td>\n </tr>\n <tr>\n <td>IgE</td>\n <td>0-380 mg/dL</td>\n <td>0-380 g/L</td>\n </tr>\n <tr>\n <td>IgG</td>\n <td>700-1600 mg/dL</td>\n <td>7.0-16.0 g/L</td>\n </tr>\n <tr>\n <td>IgM</td>\n <td>40-230 mg/dL</td>\n <td>0.4-2.3 g/L</td>\n </tr>\n <tr>\n <td>Iron</td>\n <td>50-170 μg/dL</td>\n <td>9-30 μmol/L</td>\n </tr>\n <tr>\n <td>Lactate dehydrogenase, serum</td>\n <td>180-360 U/L</td>\n <td>3.1-6.1 μkat/L</td>\n </tr>\n <tr>\n <td>Luteinizing hormone, serum/plasma</td>\n <td>Male: 1.2-7.8 mIU/mL</td>\n <td>1.2-7.8 IU/L</td>\n </tr>\n <tr>\n <td>\n </td>\n <td>Female: follicular phase 1.7-15.0 mIU/mL</td>\n <td>1.7-15.0 IU/L</td>\n </tr>\n <tr>\n <td>\n </td>\n <td>midcycle peak 21.9-56.6 mIU/mL</td>\n <td>21.9-56.6 IU/L</td>\n </tr>\n <tr>\n <td>\n </td>\n <td>luteal phase 0.6-16.3 mIU/mL</td>\n <td>0.6-16.3 IU/L</td>\n </tr>\n <tr>\n <td>\n </td>\n <td>postmenopausal 14.2-52.3 mIU/mL</td>\n <td>14.2-52.3 IU/L</td>\n </tr>\n <tr>\n <td>Osmolality, serum</td>\n <td>275-295 mOsmol/kg H2O</td>\n <td>275-295 mOsmol/kg H2O</td>\n </tr>\n <tr>\n <td>Parathyroid hormone, serum, N-terminal</td>\n <td>10-65 pg/mL</td>\n <td>10-65 ng/L</td>\n </tr>\n <tr>\n <td>Phosphorus (inorganic), serum</td>\n <td>2.5-4.5 mg/dL</td>\n <td>0.80-1.44 mmol/L</td>\n </tr>\n <tr>\n <td>Prolactin, serum (hPRL)</td>\n <td>3.0-14.7 ng/mL [male] 3.8-23.0 ng/mL [female]</td>\n <td>3.0-14.7 μg/L [male] 3.8-23.0 μg/L [female]</td>\n </tr>\n <tr>\n <td>Proteins, serum</td>\n <td>\n </td>\n <td>\n </td>\n </tr>\n <tr>\n <td>Total</td>\n <td>6.4-8.3 g/dL</td>\n <td>64-83 g/L</td>\n </tr>\n <tr>\n <td>Albumin</td>\n <td>3.5-5.2 g/dL</td>\n <td>35-52 g/L</td>\n </tr>\n <tr>\n <td>Thyroid-stimulating hormone, serum or plasma</td>\n <td>0.4-4.2 μIU/mL</td>\n <td>0.4-4.2 mIU/L</td>\n </tr>\n <tr>\n <td>Thyroxine (T4), serum</td>\n <td>4.6-10.5 μg/dL [male] 5.5-11.0 μg/dL [female]</td>\n <td>59-135 nmol/L [male] 65-138 nmol/L [female]</td>\n </tr>\n <tr>\n <td>Triglycerides, serum</td>\n <td><150 mg/dL</td>\n <td><1.70 mmol/L</td>\n </tr>\n <tr>\n <td>Triiodothyronine (T3), serum (RIA)</td>\n <td>20-50yr 70-204 ng/dL</td>\n <td>1.08-4.14 nmol/L</td>\n </tr>\n <tr>\n <td>\n </td>\n <td>50-90yr 40-181 ng/dL</td>\n <td>0.62-2.79 nmol/L</td>\n </tr>\n <tr>\n <td>Urea nitrogen, serum</td>\n <td>6-20 mg/dL</td>\n <td>2.1-7.1 mmol/L</td>\n </tr>\n <tr>\n <td>Uric acid, serum</td>\n <td>4.4-7.6 mg/dL [male] 2.3-6.6 mg/dL [female]</td>\n <td>0.26-0.45 mmol/L [male] 0.13-0.39 mmol/L [female] </td>\n </tr>\n <tr>\n <td>\n <strong>Body Mass Index (BMI)</strong>\n </td>\n <td>\n </td>\n <td>\n </td>\n </tr>\n <tr>\n <td>Body mass index</td>\n <td>Adult: 19-25 kg/m2</td>\n <td>Adult: 19-25 kg/m2</td>\n </tr>\n <tr>\n <td>\n <strong>Cerebrospinal Fluid</strong>\n </td>\n <td>\n </td>\n <td>\n </td>\n </tr>\n <tr>\n <td>Cell count</td>\n <td>0-5 /mm3</td>\n <td>0-5 x 106/L</td>\n </tr>\n <tr>\n <td>Gamma globulin</td>\n <td>3%-12% total proteins</td>\n <td>0.03-0.12</td>\n </tr>\n <tr>\n <td>Glucose</td>\n <td>40-70 mg/dL</td>\n <td>2.2-3.9 mmol/L</td>\n </tr>\n <tr>\n <td>Pressure</td>\n <td>70-180 mm H2O</td>\n <td>70-180 mm H2O</td>\n </tr>\n <tr>\n <td>Proteins, total</td>\n <td>Ventricular fluid 5-15 mg/dL</td>\n <td>50-150 g/L</td>\n </tr>\n <tr>\n <td>\n </td>\n <td>Cisternal fluid 15-25 mg/dL</td>\n <td>150-250 g/L</td>\n </tr>\n <tr>\n <td>\n <strong>Hematologic</strong>\n </td>\n <td>\n </td>\n <td>\n </td>\n </tr>\n <tr>\n <td>Bleeding time (template)</td>\n <td>2-7 minutes</td>\n <td>2-7 minutes</td>\n </tr>\n <tr>\n <td>Erythrocyte count</td>\n <td>Male: 4.3-5.9 million/mm<sup>3</sup>\n </td>\n <td>4.3-5.9 x10<sup>12</sup>/L</td>\n </tr>\n <tr>\n <td>\n </td>\n <td>Female:3.5-5.5 million/mm<sup>3</sup>\n </td>\n <td>3.5-5.5 x10<sup>12</sup>/L</td>\n </tr>\n <tr>\n <td>Erythrocyte sedimentation rate (Westergren)</td>\n <td>Male: 1-15 mm/h</td>\n <td>1-15 mm/h</td>\n </tr>\n <tr>\n <td>\n </td>\n <td>Female: 1-20 mm/h</td>\n <td>1-20 mm/h</td>\n </tr>\n <tr>\n <td>Hematocrit</td>\n <td>Male: 37% - 51%</td>\n <td>0.37-0.51</td>\n </tr>\n <tr>\n <td>\n </td>\n <td>Female: 35%-47%</td>\n <td>0.35-0.47</td>\n </tr>\n <tr>\n <td>Hemoglobin A1c</td>\n <td>< 6%</td>\n <td><0.06</td>\n </tr>\n <tr>\n <td>Hemoglobin, blood</td>\n <td>Male: 12.6-17.4 g/dL</td>\n <td>126-174 g/L</td>\n </tr>\n <tr>\n <td>\n </td>\n <td>Female: 11.7-16.1 g/dL</td>\n <td>117-161 g/L</td>\n </tr>\n <tr>\n <td>Hemoglobin, plasma</td>\n <td><3 mg/dL</td>\n <td><0.47 μmol/L</td>\n </tr>\n <tr>\n <td>Leukocyte count and differential</td>\n <td>\n </td>\n <td>\n </td>\n </tr>\n <tr>\n <td>Leukocyte count</td>\n <td>4.5-11 cells x 10<sup>3</sup>/μL</td>\n <td>4.5-11.0 cells x10<sup>9</sup>/L</td>\n </tr>\n <tr>\n <td>Segmented neutrophils</td>\n <td>50%-70%</td>\n <td>0.50-0.70</td>\n </tr>\n <tr>\n <td>Bands</td>\n <td>0%-5%</td>\n <td>0.00-0.05</td>\n </tr>\n <tr>\n <td>Eosinophils</td>\n <td>1%-5%</td>\n <td>0.01-0.05</td>\n </tr>\n <tr>\n <td>Basophils</td>\n <td>0%-1%</td>\n <td>0.00-1.00</td>\n </tr>\n <tr>\n <td>Lymphocytes</td>\n <td>20%-40%</td>\n <td>0.20-0.40</td>\n </tr>\n <tr>\n <td>Monocytes</td>\n <td>1%-6%</td>\n <td>0.01-0.06</td>\n </tr>\n <tr>\n <td>Mean corpuscular hemoglobin</td>\n <td>27-32 pg/cell</td>\n <td>1.68-1.99 fmol/cell</td>\n </tr>\n <tr>\n <td>Mean corpuscular hemoglobin concentraton</td>\n <td>31%-36% Hb/cell</td>\n <td>4.81-5.58 mmol Hb/L</td>\n </tr>\n <tr>\n <td>Mean corpuscular volume</td>\n <td>76-96 μm<sup>3</sup>\n </td>\n <td>76-96 fL</td>\n </tr>\n <tr>\n <td>Partial thromboplastin time (activated)</td>\n <td>20-34 seconds</td>\n <td>20-34 seconds</td>\n </tr>\n <tr>\n <td>Platelet count</td>\n <td>150000-400000 /mm<sup>3</sup>\n </td>\n <td>150-400 x10<sup>9</sup>/L</td>\n </tr>\n <tr>\n <td>Prothrombin time</td>\n <td>11-15 seconds</td>\n <td>11-15 seconds</td>\n </tr>\n <tr>\n <td>Reticulocyte count</td>\n <td>0.5%-1.5%</td>\n <td>0.005-0.015</td>\n </tr>\n <tr>\n <td>Thrombin time</td>\n <td><2 seconds deviation from control</td>\n <td><2 seconds deviation from control</td>\n </tr>\n <tr>\n <td>\n <strong>Sweat</strong>\n </td>\n <td>\n </td>\n <td>\n </td>\n </tr>\n <tr>\n <td>Chloride</td>\n <td>5-35mEq/L</td>\n <td>5-35 mmol/L</td>\n </tr>\n <tr>\n <td>\n <strong>Urine</strong>\n </td>\n <td>\n </td>\n <td>\n </td>\n </tr>\n <tr>\n <td>Chloride</td>\n <td>110-250 mEq/L</td>\n <td>110-250 mmol/L</td>\n </tr>\n <tr>\n <td>Creatinine clearance</td>\n <td>Male: 14-26 mg/kg/day</td>\n <td>124-230 μmol/kg/day</td>\n </tr>\n <tr>\n <td>\n </td>\n <td>Female: 11-20 mg/kg/day</td>\n <td>97-177 μmol/kg/day</td>\n </tr>\n <tr>\n <td>Estriol, total (in pregnancy)</td>\n <td>\n </td>\n <td>\n </td>\n </tr>\n <tr>\n <td>35 wks</td>\n <td>31-140 ng/mL</td>\n <td>108-486 nmol/L</td>\n </tr>\n <tr>\n <td>40 wks</td>\n <td>95-460 ng/mL</td>\n <td>330-1596 nmol/L</td>\n </tr>\n <tr>\n <td>Osmolality</td>\n <td>50-1400 mOsmol/kg H20</td>\n <td>\n </td>\n </tr>\n <tr>\n <td>Potassium</td>\n <td>25-125 mEq/L</td>\n <td>25-125 mmol/L</td>\n </tr>\n <tr>\n <td>Proteins, total</td>\n <td><100 mg/day</td>\n <td><0.1 mg/day</td>\n </tr>\n <tr>\n <td>Sodium</td>\n <td>40-220 mEq/day [male] 27-287 mEq/day [female]</td>\n <td>40-220 mmol/L [male] 27-287 mmol/L [female]</td>\n </tr>\n <tr>\n <td>Uric acid</td>\n <td>250-750 mg/day</td>\n <td>1.48-4.43 mmol/L </td>\n </tr>\n <tr>\n <td rowSpan={1} colSpan={3}>\n <strong>REFERENCES:</strong>\n </td>\n </tr>\n <tr>\n <td rowSpan={1} colSpan={3}>Bakerman S. Backerman's ABC's of Interpretive Laboratory Data. 4th ed. Scottsdale, AZ: Interpretive Laboratory Data, Inc.; 2002. </td>\n </tr>\n <tr>\n <td rowSpan={1} colSpan={3}>Burtis CA, Ashwood ER, Bruns DE. Tietz Textbook of Clinical Chemistry and Molecular Diagnostics. 4th ed. St. Louis, MI: Elsevier Inc.; 2006. </td>\n </tr>\n </tbody>\n </table>\n </ReasoningToolPanel>\n );\n}\n","import * as React from 'react';\n\nimport Select from 'react-select';\n\nimport AqButton from '../../Aq/Button';\nimport GenModal from '../../Gen/Modal/component';\nimport GenLoadingSpinner from '../../Gen/LoadingSpinner/component';\n\nimport generateUUID from \"../../../helpers/generateUUID\";\n\nimport { generateLearningObjectiveActions } from \"../../../reducers/learningObjectives\";\n\nimport { newAddNodeChange } from \"../../../helpers/Doc/changes\";\n\nimport { findNode } from \"../../../helpers/Doc/Functions/base\";\n\nexport type DocLearningObjectivesAddNewModalProps = {\n currentVersion: CurrentVersion;\n displayContext: DisplayContext;\n documentContext: DocumentContext;\n editingContext: EditingContextInEditor;\n editingContextExtra: EditingContextExtra;\n mappingContext: DocumentMappingContext;\n projectContext: ProjectContext;\n mediaContext: MediaContext;\n mergedData: MergedData;\n userContext: UserContext;\n allLearningObjectiveOptions?: Array<{id: number, name: string, documents: Array<{id: number, title: string}>}>;\n learningObjectiveActionsGenerator: typeof generateLearningObjectiveActions;\n\n\n featureFlag: FeatureFlag;\n};\n\nexport default function DocLearningObjectivesAddNewModal(props: DocLearningObjectivesAddNewModalProps) {\n const {\n editingContext,\n mappingContext,\n allLearningObjectiveOptions,\n mergedData,\n } = props;\n\n const [isLoading, setIsLoading] = React.useState(false);\n const [reusableObjectId, setReusableObjectId] = React.useState(null);\n const [learningObjectiveId, setLearningObjectiveId] = React.useState(null);\n const [newLearningObjectiveText, setNewLearningObjectiveText] = React.useState(\"\");\n\n const createLO = () => {\n setIsLoading(true)\n\n const addInLearningObjective = (loId) => {\n const newVariantablePlaceholder = {\n type: \"variantPlaceholder\",\n uid: generateUUID(),\n variantableId: loId,\n variantableType: \"LearningObjective\",\n }\n\n const learningObjectivesList = findNode(mergedData, (node) => node.type === \"learningObjectivesList\");\n\n const newIndex = learningObjectivesList.content.length\n editingContext.addChange(newAddNodeChange(newVariantablePlaceholder, learningObjectivesList.uid, \"content\", newIndex));\n\n if (reusableObjectId) {\n let loroToBeSaved: ProposedLearningObjectiveReusableObject = {\n learning_objective_id: loId,\n reusable_object_id: reusableObjectId.value,\n }\n\n let newProposedLoros = mappingContext.proposedLearningObjectiveReusableObjects || [];\n newProposedLoros = newProposedLoros.concat([loroToBeSaved]);\n mappingContext.setProposedLearningObjectiveReusableObjects(newProposedLoros);\n }\n }\n\n if (newLearningObjectiveText.trim().length > 0) {\n const TEMP_ID = 0\n const learningObjectiveActions = props.learningObjectiveActionsGenerator(TEMP_ID)\n learningObjectiveActions.startNewLearningObjective()\n learningObjectiveActions.setEditDataLearningObjective({name: newLearningObjectiveText.trim()})\n learningObjectiveActions.createLearningObjective((data) => addInLearningObjective(data.value.data.id))\n } else {\n addInLearningObjective(learningObjectiveId.value)\n // USE GIVEN ID\n }\n\n setIsLoading(false)\n editingContext.closeCurrentMenu()\n }\n\n const activeLearningObjective = learningObjectiveId ? allLearningObjectiveOptions.find((lo) => lo.id === learningObjectiveId.value) : null;\n\n const learningObjectiveOptions = allLearningObjectiveOptions.map((loOption) => (\n {\n label: loOption.name,\n value: loOption.id,\n }\n ))\n\n const reusableObjectOptions = mappingContext.reusableObjects.filter((ro) => ro.kind === \"teaching_point\" ).map((ro) => (\n {\n value: ro.id,\n label: ro.content_title,\n }\n ))\n\n return (\n <GenModal open>\n <div className=\"gen-modal-panel\">\n <div className=\"aq-card-header black\">\n CREATE NEW LEARNING OBJECTIVE\n </div>\n <div>\n <div className=\"aq-field-label\">\n Select Existing Objective To Add To This Case\n </div>\n <Select\n options={learningObjectiveOptions}\n onChange={(newValue)=>{setLearningObjectiveId(newValue)}}\n />\n {\n activeLearningObjective && (\n <div>\n <div className=\"aq-field-label\">Case/s where selected LO is used:</div>\n <ul>\n {activeLearningObjective.documents.map((document) => <li key={document.id}><a href={`/documents/${document.id}`} target=\"_blank\">{document.title}</a></li>)}\n </ul>\n </div>\n )\n }\n </div>\n <div className=\"space-or\">or</div>\n <div>\n <label className=\"aq-field-label\" htmlFor=\"newLO\">create new learning objective</label>\n <textarea\n name=\"newLO\"\n id=\"newLO\"\n cols={30}\n rows={5}\n value={newLearningObjectiveText}\n onChange={(e) => setNewLearningObjectiveText(e.target.value)}\n />\n </div>\n\n <div className=\"aq-dividing-line\"></div>\n\n <div>\n <div className=\"aq-field-label\">\n Map to teaching point/s\n </div>\n <Select\n options={reusableObjectOptions}\n onChange={(newValue)=>{ setReusableObjectId(newValue) }}\n />\n </div>\n <div className=\"aq-button-bar bottom-right\">\n <AqButton onClick={createLO}>{isLoading ? <GenLoadingSpinner /> : \"Save & Create LO\"}</AqButton>\n <AqButton className=\"outline black\" onClick={editingContext.closeCurrentMenu}>Cancel</AqButton>\n </div>\n </div>\n </GenModal>\n );\n}\n","import * as React from 'react';\n\nimport AqButton from '../../Aq/Button';\n\nimport GenModal from '../../Gen/Modal/component';\n\nexport type DocLearningObjectivesConfirmEditModalProps = {\n currentVersion: CurrentVersion;\n displayContext: DisplayContext;\n documentContext: DocumentContext;\n editingContext: EditingContextInEditor;\n editingContextExtra: EditingContextExtra;\n mappingContext: MappingContext;\n projectContext: ProjectContext;\n mediaContext: MediaContext;\n mergedData: MergedData;\n userContext: UserContext;\n featureFlag: FeatureFlag;\n};\n\nexport default function DocLearningObjectivesConfirmEdit(props: DocLearningObjectivesConfirmEditModalProps) {\n const {\n editingContext,\n editingContextExtra,\n } = props;\n\n const currentMenu = editingContextExtra.currentMenu\n if (currentMenu?.menu !== \"LEARNING_OBJECTIVES_CONFIRM_EDIT\") {\n return null;\n }\n\n return (\n <GenModal open>\n <div className=\"gen-modal-panel\">\n <div className=\"aq-card-header black\" style={{textTransform: \"none\"}}>\n Are you sure you want to unlock this learning objective for editing?\n </div>\n <div>\n <p>\n We're just checking, because it's kind of a big deal.\n </p>\n <p>\n Learning objectives are used across the Aquifer system and can have implications beyond just this case.\n </p>\n </div>\n <div className=\"aq-button-bar bottom-right\">\n <AqButton onClick={() => {\n editingContextExtra.setAllowLearningObjectivesEdit(currentMenu.learningObjectiveUid)\n editingContext.setCurrentDocSelection({start: {uid: currentMenu.learningObjectiveUid, contentKey: \"content\", index: 0}, end: {uid: currentMenu.learningObjectiveUid, contentKey: \"content\", index: 0}})\n editingContext.closeCurrentMenu()\n }}>I'm sure, let's do this</AqButton>\n <AqButton className=\"outline black\" onClick={editingContext.closeCurrentMenu}>Nope, I want to go back</AqButton>\n </div>\n </div>\n </GenModal>\n )\n}\n","import * as React from \"react\";\n\nimport DocLearningObjectivesAddNewModal from \"./Modals/LearningObjectivesAddNew\";\nimport DocLearningObjectivesConfirmEdit from \"./Modals/LearningObjectivesConfirmEdit\";\n\nimport { generateLearningObjectiveActions } from \"../../reducers/learningObjectives\";\n\nexport type DocModalsProps = {\n currentVersion: CurrentVersion;\n displayContext: DisplayContext;\n documentContext: DocumentContext;\n editingContext: EditingContext;\n editingContextExtra: EditingContextExtra;\n mappingContext: MappingContext;\n projectContext: ProjectContext;\n mediaContext: MediaContext;\n mergedData: MergedData;\n userContext: UserContext;\n allLearningObjectiveOptions?: Array<{id: number, name: string, documents: Array<{id: number, title: string}>}>;\n learningObjectiveActionsGenerator: typeof generateLearningObjectiveActions;\n\n featureFlag: FeatureFlag;\n};\n\nexport default function DocModals(props: DocModalsProps) {\n const {\n editingContext,\n editingContextExtra,\n } = props;\n\n if (!editingContextExtra.currentMenu || !editingContext.isEditing) { return; }\n\n switch (editingContextExtra.currentMenu.menu) {\n case \"LEARNING_OBJECTIVES_CONFIRM_EDIT\":\n return (\n <DocLearningObjectivesConfirmEdit\n {...props}\n editingContext={editingContext}\n />\n )\n case \"LEARNING_OBJECTIVES_ADD_NEW\":\n const mappingContext = props.mappingContext as DocumentMappingContext; // TODO: Remove when resolved\n\n return (\n <DocLearningObjectivesAddNewModal\n {...props}\n editingContext={editingContext}\n mappingContext={mappingContext}\n />\n )\n default:\n return null\n }\n}\n","import * as React from \"react\";\nimport * as R from \"ramda\";\n\ninterface DocContentMappingAssessmentMapProps {\n assessmentMappingToolPermission?: boolean;\n assessmentTitle: string;\n currentLearningObjectiveReusableObjectId: number;\n learningObjectiveReusableObjects: Array<LearningObjectiveReusableObject>;\n proposedLearningObjectiveReusableObjectId: number;\n setLearningObjectiveReusableObjectId: (id: number) => void;\n usedAvailableForm: boolean;\n};\n\ninterface DocContentMappingAssessmentMapState {\n resetValue: boolean;\n selectedLearningObjectiveId: number | string; //TODO: Why does this need a string\n selectedReusableObjectId: number | string; //TODO: Why does this need a string\n};\n\nexport default class DocContentMappingAssessmentMap extends React.Component<DocContentMappingAssessmentMapProps, DocContentMappingAssessmentMapState> {\n constructor(props: DocContentMappingAssessmentMapProps) {\n super(props);\n\n this.state = {\n selectedLearningObjectiveId: (this.props.proposedLearningObjectiveReusableObjectId && this.props.learningObjectiveReusableObjects.find(element => element.id === this.props.proposedLearningObjectiveReusableObjectId)) ? this.props.learningObjectiveReusableObjects.find(element => element.id === this.props.proposedLearningObjectiveReusableObjectId).learning_objective.id : \"\",\n selectedReusableObjectId: (this.props.proposedLearningObjectiveReusableObjectId && this.props.learningObjectiveReusableObjects.find(element => element.id === this.props.proposedLearningObjectiveReusableObjectId)) ? this.props.learningObjectiveReusableObjects.find(element => element.id === this.props.proposedLearningObjectiveReusableObjectId).reusable_object.id : \"\",\n resetValue: !(this.props.proposedLearningObjectiveReusableObjectId)\n };\n };\n\n handleLearningObjectiveChange(event: React.ChangeEvent<HTMLSelectElement>) {\n let selectedLearningObjectiveId\n if(event.target.value!==\"\") {\n selectedLearningObjectiveId = parseInt(event.target.value);\n }else{\n selectedLearningObjectiveId=\"\"\n }\n this.setState({selectedLearningObjectiveId: selectedLearningObjectiveId})\n };\n\n handleReusableObjectChange(event: React.ChangeEvent<HTMLSelectElement>) {\n let selectedReusableObjectId\n if(event.target.value!==\"\") {\n selectedReusableObjectId = parseInt(event.target.value);\n }else{\n selectedReusableObjectId=\"\"\n }\n this.setState({selectedReusableObjectId: selectedReusableObjectId })\n };\n\n clickSaveButton(event: React.MouseEvent<HTMLButtonElement>) {\n event.preventDefault();\n const hasSelectedLearningObjective = this.state.selectedLearningObjectiveId !== \"\";\n const hasSelectedReusableObject = this.state.selectedReusableObjectId !== \"\";\n\n if(!hasSelectedLearningObjective && !hasSelectedReusableObject){\n alert(\"Please select Mapping\")\n }else if(hasSelectedLearningObjective && !hasSelectedReusableObject){\n alert(\"Please select Teaching Point\")\n } else if(hasSelectedReusableObject && !hasSelectedLearningObjective){\n alert(\"Please select Learning Objective\")\n } else if((hasSelectedLearningObjective && hasSelectedReusableObject)){\n let text=\"\"\n if(hasSelectedLearningObjective && hasSelectedReusableObject) {\n text=\"When published, the selected content mappings for this Assessment Question will be available throughout the Aquifer curriculum. Click OK to proceed or Cancel to discard.\";\n }else{\n text=\"Do you want to save this incomplete map? You will not be able to publish until mapping is complete. Click OK to save the map or Cancel to continue editing.\"\n }\n if (confirm(text)) {\n this.props.learningObjectiveReusableObjects.forEach((learningObjectiveReusableObject) => {\n if (learningObjectiveReusableObject.learning_objective.id === this.state.selectedLearningObjectiveId && learningObjectiveReusableObject.reusable_object.id === this.state.selectedReusableObjectId) {\n this.props.setLearningObjectiveReusableObjectId(learningObjectiveReusableObject.id)\n }\n })\n this.setState({resetValue: false })\n }\n }\n };\n\n clickResetButton(event: React.MouseEvent<HTMLButtonElement>) {\n event.preventDefault();\n let text=\"You are editing the mapping to this Assessment Question. This could have additional curriculum mapping implications. Click Continue to proceed or Cancel to discard this change.\"\n if (confirm(text)) {\n this.setState({\n resetValue: true,\n selectedLearningObjectiveId: \"\",\n selectedReusableObjectId: \"\",\n })\n }\n }\n\n clickRestoreButton(event: React.MouseEvent<HTMLButtonElement>) {\n event.preventDefault();\n this.props.setLearningObjectiveReusableObjectId(this.props.currentLearningObjectiveReusableObjectId)\n const currentLearningObjectiveReusableObject = this.props.currentLearningObjectiveReusableObjectId && this.props.learningObjectiveReusableObjects.find(element => element.id === this.props.currentLearningObjectiveReusableObjectId)\n this.setState({\n selectedLearningObjectiveId: currentLearningObjectiveReusableObject ? currentLearningObjectiveReusableObject.learning_objective.id : \"\",\n selectedReusableObjectId: currentLearningObjectiveReusableObject ? currentLearningObjectiveReusableObject.reusable_object.id : \"\",\n })\n }\n\n render() {\n let learningObjectiveOptions = this.props.learningObjectiveReusableObjects\n .filter((learningObjectiveReusableObject) => !this.state.selectedReusableObjectId || this.state.selectedReusableObjectId===learningObjectiveReusableObject.reusable_object.id )\n .map((learningObjectiveReusableObject) => learningObjectiveReusableObject.learning_objective)\n\n learningObjectiveOptions = R.uniqBy((lo) => lo.id, learningObjectiveOptions)\n\n let reusableObjectOptions = this.props.learningObjectiveReusableObjects\n .filter((learningObjectiveReusableObject) => !this.state.selectedLearningObjectiveId || this.state.selectedLearningObjectiveId===learningObjectiveReusableObject.learning_objective.id )\n .map((learningObjectiveReusableObject) => learningObjectiveReusableObject.reusable_object)\n\n reusableObjectOptions = R.uniqBy((ro) => ro.id, reusableObjectOptions)\n\n let learningObjectColumn\n let teachingPointColumn\n\n let learningObjectColumnValue = this.props.currentLearningObjectiveReusableObjectId ? this.props.learningObjectiveReusableObjects.find(element => element.id === this.props.currentLearningObjectiveReusableObjectId).learning_objective.name : \"\"\n let teachingPointColumnValue = this.props.currentLearningObjectiveReusableObjectId ? this.props.learningObjectiveReusableObjects.find(element => element.id === this.props.currentLearningObjectiveReusableObjectId).reusable_object.content_title : \"\"\n\n let learningObjectiveSelect = <select onChange={this.handleLearningObjectiveChange.bind(this)} value={this.state.selectedLearningObjectiveId} disabled={!this.props.assessmentMappingToolPermission}>\n <option value=\"\">Select</option>\n {\n learningObjectiveOptions.map((learningObjective) =>\n <option key={learningObjective.id}\n value={learningObjective.id}>{learningObjective.name}\n </option>\n )\n }\n </select>\n\n let teachingPointSelect = <select onChange={this.handleReusableObjectChange.bind(this)} value={this.state.selectedReusableObjectId} disabled={!this.props.assessmentMappingToolPermission}>\n <option value=\"\">Select</option>\n {\n reusableObjectOptions.map((reusableObject) =>\n <option key={reusableObject.id}\n value={reusableObject.id}>{reusableObject.content_title}\n </option>\n )\n }\n </select>\n\n if(!this.state.resetValue) {\n const learningObjectiveReusableObjects: Array<any> = this.props.learningObjectiveReusableObjects; // TODO: Narrow down any\n\n if (this.props.currentLearningObjectiveReusableObjectId && R.find(R.propEq('id', this.props.currentLearningObjectiveReusableObjectId), learningObjectiveReusableObjects).learning_objective.id === R.find(R.propEq('id', this.props.proposedLearningObjectiveReusableObjectId), learningObjectiveReusableObjects).learning_objective.id) {\n learningObjectColumn = <div>{learningObjectColumnValue}</div>\n }else{\n let proposedLearningObjectColumnValue = (this.props.proposedLearningObjectiveReusableObjectId && this.props.learningObjectiveReusableObjects.find(element => element.id === this.props.proposedLearningObjectiveReusableObjectId)) ? this.props.learningObjectiveReusableObjects.find(element => element.id === this.props.proposedLearningObjectiveReusableObjectId).learning_objective.name : \"\"\n if(proposedLearningObjectColumnValue==\"\"){\n learningObjectColumn=<div>{learningObjectiveSelect}</div>\n }else {\n learningObjectColumn = <div>\n <div style={{textDecoration: \"line-through\"}}>{learningObjectColumnValue}</div>\n <div style={{color: \"red\"}}>{proposedLearningObjectColumnValue}</div>\n </div>\n }\n }\n\n if (this.props.currentLearningObjectiveReusableObjectId && R.find(R.propEq('id', this.props.currentLearningObjectiveReusableObjectId), learningObjectiveReusableObjects).reusable_object.id === R.find(R.propEq('id', this.props.proposedLearningObjectiveReusableObjectId), learningObjectiveReusableObjects).reusable_object.id) {\n teachingPointColumn = <div>{teachingPointColumnValue}</div>\n }else{\n let proposedTeachingPointColumnValue = (this.props.proposedLearningObjectiveReusableObjectId && this.props.learningObjectiveReusableObjects.find(element => element.id === this.props.proposedLearningObjectiveReusableObjectId)) ? this.props.learningObjectiveReusableObjects.find(element => element.id === this.props.proposedLearningObjectiveReusableObjectId).reusable_object.content_title : \"\"\n if(proposedTeachingPointColumnValue==\"\") {\n teachingPointColumn = <div>{teachingPointSelect}</div>\n }else {\n teachingPointColumn = <div>\n <div style={{textDecoration: \"line-through\"}}>{teachingPointColumnValue}</div>\n <div style={{color: \"red\"}}>{proposedTeachingPointColumnValue}</div>\n </div>\n }\n }\n }else{\n learningObjectColumn = <div>\n <div style={{textDecoration: \"line-through\"}}>{learningObjectColumnValue}</div>\n {learningObjectiveSelect}\n </div>\n\n teachingPointColumn = <div>\n <div style={{textDecoration: \"line-through\"}}>{teachingPointColumnValue}</div>\n {teachingPointSelect}\n </div>\n }\n\n let displayResetRestoreButton\n if(this.props.assessmentMappingToolPermission && !this.props.usedAvailableForm) {\n displayResetRestoreButton = this.props.currentLearningObjectiveReusableObjectId === this.props.proposedLearningObjectiveReusableObjectId ?\n <button className='aq-button' onClick={this.clickResetButton.bind(this)}>Edit</button> :\n <button className='aq-button' onClick={this.clickRestoreButton.bind(this)}>Restore</button>\n }\n\n let displaySaveButton\n if(this.props.assessmentMappingToolPermission && !this.props.usedAvailableForm) {\n displaySaveButton = <button className='aq-button' onClick={this.clickSaveButton.bind(this)}>Save</button>\n }\n\n let usedAvailableFormIcon\n if(this.props.usedAvailableForm){\n usedAvailableFormIcon = <i className=\"fas fa-file-alt\"></i>\n }\n\n return (\n <div>\n <h5 style={{ backgroundColor: \"#0095C9\", padding: '5px' }}>Assessment - LOTP Map</h5>\n <div>\n <br/>\n <p style={{ fontWeight: \"bold\" }}>\n The table below displays the Learning Objective and Teaching Point mapped to this Assessment Question\n </p>\n <table className=\"aq-mapping-table\">\n <tbody>\n <tr>\n <th className=\"aq-mapping-table-header\">Assessment Question</th>\n <th className=\"aq-mapping-table-header\">Map to Learning Objective</th>\n <th className=\"aq-mapping-table-header\">Map to Teaching Point</th>\n </tr>\n <tr style={{ backgroundColor: \"white\" }}>\n <td className=\"aq-mapping-table-assessment-title\">{this.props.assessmentTitle} {usedAvailableFormIcon}</td>\n <td className=\"aq-mapping-table-row\">\n <div style={{textAlign: 'center'}}>\n {learningObjectColumn}\n </div>\n </td>\n <td className=\"aq-mapping-table-row\">\n <div style={{textAlign: 'center'}}>\n {teachingPointColumn}\n </div>\n </td>\n <td>\n <div style={{textAlign: 'center'}}>\n {displayResetRestoreButton}\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n <div style={{textAlign: 'center'}}>\n {displaySaveButton}\n </div>\n <br/>\n </div>\n </div>\n )\n }\n}\n","import * as React from \"react\";\nimport { confirmAlert } from 'react-confirm-alert'\nimport 'react-confirm-alert/src/react-confirm-alert.css'\nimport * as R from \"ramda\";\n\ninterface DocContentMappingLOTPMapProps {\n activeLearningObjective?: LearningObjective;\n currentLearningObjectiveReusableObjects: Array<LearningObjectiveReusableObject>;\n proposedLearningObjectiveReusableObjects: Array<ProposedLearningObjectiveReusableObject>;\n reusableObjects: Array<ReusableObject>;\n setProposedLearningObjectiveReusableObjects: (loros: Array<ProposedLearningObjectiveReusableObject>) => void;\n userContext: UserContext;\n};\n\ninterface DocContentMappingLOTPMapState {\n addingNewLoro?: boolean;\n selectedReusableObjectId?: number;\n};\n\nfunction equalProposedLearningObjectiveReusableObject(a: ProposedLearningObjectiveReusableObject, b: ProposedLearningObjectiveReusableObject) {\n return a.learning_objective_id === b.learning_objective_id && a.reusable_object_id === b.reusable_object_id\n}\n\nexport default class DocContentMappingLOTPMap extends React.Component<DocContentMappingLOTPMapProps, DocContentMappingLOTPMapState> {\n constructor(props: DocContentMappingLOTPMapProps) {\n super(props);\n this.state = {\n addingNewLoro: false,\n selectedReusableObjectId: undefined,\n };\n }\n\n handleReusableObjectChange(event: React.ChangeEvent<HTMLSelectElement>) {\n this.setState({selectedReusableObjectId: event.target.value !== \"\" ? parseInt(event.target.value) : null })\n };\n\n handleDeleteWithAlert(loro: ProposedLearningObjectiveReusableObject) {\n confirmAlert({\n customUI: ({ onClose }) => {\n return (\n <div className='react-confirm-alert-body'>\n <h1>You are deleting an LOTP dyad</h1>\n <p>Breaking this LOTP dyad could have additional curriculum mapping implications. Click the Continue button to proceed or Cancel to discard the deletion of this dyad.</p>\n <button className='aq-button'\n style={{marginRight: '5px'}}\n onClick={() => {\n this.handleDeleteLoro(loro);\n onClose();\n }}\n >\n Continue\n </button>\n <button className='aq-button' onClick={onClose}>Cancel</button>\n </div>\n );\n }\n });\n }\n\n handleDeleteLoro(loro: ProposedLearningObjectiveReusableObject) {\n const {\n proposedLearningObjectiveReusableObjects,\n setProposedLearningObjectiveReusableObjects,\n } = this.props;\n\n const newProposedLoros = proposedLearningObjectiveReusableObjects.filter((proposedLoro) => !equalProposedLearningObjectiveReusableObject(proposedLoro, loro))\n setProposedLearningObjectiveReusableObjects(newProposedLoros)\n }\n\n handleRestoreLoro(loro: ProposedLearningObjectiveReusableObject) {\n const {\n proposedLearningObjectiveReusableObjects,\n setProposedLearningObjectiveReusableObjects,\n } = this.props;\n\n const newProposedLoros = proposedLearningObjectiveReusableObjects.concat([loro])\n setProposedLearningObjectiveReusableObjects(newProposedLoros)\n }\n\n handleSaveWithAlert() {\n confirmAlert({\n customUI: ({ onClose }) => {\n return (\n <div className='react-confirm-alert-body'>\n <p>When published, the selected content mappings for this Learning Objective will be available throughout the Aquifer curriculum. Click the Continue button to proceed or Cancel to discard the deletion of this dyad.</p>\n <button className='aq-button'\n style={{marginRight: '5px'}}\n onClick={() => {\n this.handleSaveNewLoro();\n onClose();\n }}\n >\n Continue\n </button>\n <button className='aq-button' onClick={onClose}>Cancel</button>\n </div>\n );\n }\n });\n }\n\n handleSaveNewLoro() {\n const {\n activeLearningObjective,\n proposedLearningObjectiveReusableObjects,\n setProposedLearningObjectiveReusableObjects,\n } = this.props;\n\n const {\n selectedReusableObjectId,\n } = this.state;\n\n if (!selectedReusableObjectId) {\n alert(\"Please select a reusable object.\");\n return;\n }\n\n let loroToBeSaved = {\n learning_objective_id: activeLearningObjective.id,\n reusable_object_id: selectedReusableObjectId,\n }\n\n const newProposedLoros = proposedLearningObjectiveReusableObjects.concat([loroToBeSaved])\n setProposedLearningObjectiveReusableObjects(newProposedLoros)\n this.setState({ addingNewLoro: false, selectedReusableObjectId: undefined })\n }\n\n handleCancelNewLoro() {\n this.setState({addingNewLoro: false})\n }\n\n render() {\n const {\n reusableObjects,\n activeLearningObjective,\n currentLearningObjectiveReusableObjects,\n proposedLearningObjectiveReusableObjects,\n userContext,\n } = this.props;\n\n const {\n addingNewLoro,\n selectedReusableObjectId,\n } = this.state;\n\n\n if (!activeLearningObjective) {\n return (\n <div>\n <h5 style={{backgroundColor: \"#0095C9\", padding: \"5px\"}}>Please Select a Learning Objective</h5>\n </div>\n );\n }\n\n const concatedLoros = (currentLearningObjectiveReusableObjects as ProposedLearningObjectiveReusableObject[]).concat(proposedLearningObjectiveReusableObjects).filter((loro) => loro.learning_objective_id === activeLearningObjective.id && loro.reusable_object_id)\n const activeProposedLoros = R.uniqWith(equalProposedLearningObjectiveReusableObject, concatedLoros)\n\n let tableRows = activeProposedLoros.map((loro) => {\n const isCurrentLoro = currentLearningObjectiveReusableObjects.some((currentLoro) => equalProposedLearningObjectiveReusableObject(currentLoro, loro))\n const isProposedLoro = proposedLearningObjectiveReusableObjects.some((proposedLoro) => equalProposedLearningObjectiveReusableObject(proposedLoro, loro))\n\n let deleteCell\n let rowStyle = {}\n if (userContext.permissions.allowedEditMode === \"Editing\") {\n if (!isProposedLoro) {\n deleteCell = <button onClick={() => this.handleRestoreLoro(loro)}>Restore</button>\n rowStyle = {textDecorationLine: 'line-through', textDecorationStyle: 'solid'}\n } else if(!isCurrentLoro || (!loro.questions || loro.questions.length === 0)) {\n deleteCell = <button onClick={() => this.handleDeleteWithAlert(loro)}>Delete</button>\n }\n }\n\n const reusableObject = reusableObjects.find(x => x.id === loro.reusable_object_id)\n\n return (\n <tr style={rowStyle}>\n <td>{decodeURI(activeLearningObjective.name)}</td>\n <td>{reusableObject?.name}</td>\n <td>\n <div style={{textAlign: 'center'}}>\n {\n loro.questions?.map((question) => (\n <p><a href={`/versions/${question.editing_document.scheduled_review_version_id}/edit`}>{question.case_summary_identifier}</a></p>\n ))\n }\n </div>\n </td>\n <td>\n <div style={{textAlign: 'center'}}>\n {deleteCell}\n </div>\n </td>\n </tr>\n );\n })\n\n let controls, editingRow;\n if (userContext.permissions.allowedEditMode === \"Editing\") {\n if(!addingNewLoro) {\n controls = (\n <div style={{textAlign: 'center', marginBottom: '5px'}}>\n <button className='aq-button' onClick={() => this.setState({addingNewLoro: true})}>Add Row</button>\n </div>\n )\n } else {\n let existingRoIds = activeProposedLoros.map((loro) => loro.reusable_object_id)\n let reusableObjectOptions = reusableObjects.filter((ro) => !existingRoIds.includes(ro.id))\n\n editingRow = (\n <tr>\n <td>{decodeURI(activeLearningObjective.name)}</td>\n <td>\n <select onChange={this.handleReusableObjectChange.bind(this)} value={selectedReusableObjectId || \"\"}>\n <option value=\"\">Select</option>\n {\n reusableObjectOptions.map((reusableObject) =>\n <option\n key={reusableObject.id}\n value={reusableObject.id}>{reusableObject.content_title}\n </option>\n )\n }\n </select>\n </td>\n <td></td>\n <td></td>\n </tr>\n )\n\n controls = (\n <div style={{textAlign: 'center', marginBottom: '5px'}}>\n <button className='aq-button' style={{marginRight: '5px'}} onClick={() => this.handleSaveWithAlert()} disabled={!selectedReusableObjectId}>Save</button>\n <button className='aq-button' onClick={() => this.handleCancelNewLoro()}>Cancel</button>\n </div>\n )\n }\n }\n\n return (\n <div>\n <h5 style={{backgroundColor: \"#0095C9\", padding: \"5px\"}}>Assessment - LOTP - System Map</h5>\n <div>\n <p style={{fontWeight: \"bold\"}}>\n The table below displays the Teaching Points that are mapped to this Learning Objective.\n Add another row if you wish to map this Learning Objective to additional Teaching Point(s).\n When you have finished mapping, click the Save button.\n </p>\n <table className=\"aq-mapping-table\">\n <tbody>\n <tr>\n <th className=\"aq-mapping-table-header\">Learning Objective</th>\n <th className=\"aq-mapping-table-header\">Existing Map to Teaching Point</th>\n <th className=\"aq-mapping-table-header\">Assessment Questions Mapped to this Dyad</th>\n <th className=\"aq-mapping-table-header\"></th>\n </tr>\n {tableRows}\n {editingRow}\n </tbody>\n </table>\n {controls}\n </div>\n </div>\n );\n }\n}\n","import * as React from \"react\";\n\nimport DocContentMappingAssessmentMap from \"./ContentMappingTool/AssessmentMap\";\nimport DocContentMappingLOTPMap from \"./ContentMappingTool/LOTPMap\";\n\ninterface DocContentMappingToolProps {\n documentContext: DocumentContext;\n editingContextExtra: EditingContextExtra;\n mappingContext: MappingContext;\n title: InlineRangeNode;\n userContext: UserContext;\n featureFlag: FeatureFlag\n};\n\ninterface DocContentMappingToolState {\n isCollapsed: boolean;\n};\n\nexport default class DocContentMappingTool extends React.Component<DocContentMappingToolProps, DocContentMappingToolState> {\n constructor(props: DocContentMappingToolProps) {\n super(props);\n\n this.state = {\n isCollapsed: true,\n };\n }\n\n render() {\n const {\n documentContext,\n editingContextExtra,\n mappingContext,\n } = this.props;\n\n const {\n isCollapsed,\n } = this.state;\n\n const isAssessmentQuestion = documentContext.kind === \"assessment_question_mcq\";\n let doclotpEditorSideNavChanges = this.props.featureFlag.new_landing_pages ? \"doc-lotp-editor-side-nav\" : \"\"\n\n let collapsibleTools\n if (!isCollapsed) {\n let contentMappingChild;\n if ('setLearningObjectiveReusableObjectId' in mappingContext) {\n contentMappingChild = (\n <DocContentMappingAssessmentMap\n learningObjectiveReusableObjects={mappingContext.learningObjectiveReusableObjects}\n currentLearningObjectiveReusableObjectId={mappingContext.currentLearningObjectiveReusableObjectId}\n proposedLearningObjectiveReusableObjectId={mappingContext.proposedLearningObjectiveReusableObjectId}\n setLearningObjectiveReusableObjectId={mappingContext.setLearningObjectiveReusableObjectId}\n assessmentTitle={this.props.title.text}\n assessmentMappingToolPermission={this.props.userContext.permissions.assessmentMappingTool}\n usedAvailableForm={this.props.editingContextExtra.usedAvailableForm}\n />\n );\n } else {\n let activeLearningObjective\n if (editingContextExtra.currentlyEditingNodeLineage) {\n let activeLoId = (editingContextExtra.currentlyEditingNodeLineage.find(node => node.type === \"learningObjective\") as DocLearningObjectiveType<InlineNode>)?.id\n activeLearningObjective = mappingContext.learningObjectives.find( lo => lo.id === activeLoId)\n }\n contentMappingChild = (\n <DocContentMappingLOTPMap\n reusableObjects={mappingContext.reusableObjects}\n currentLearningObjectiveReusableObjects={mappingContext.learningObjectiveReusableObjects}\n proposedLearningObjectiveReusableObjects={mappingContext.proposedLearningObjectiveReusableObjects || []}\n setProposedLearningObjectiveReusableObjects={mappingContext.setProposedLearningObjectiveReusableObjects}\n activeLearningObjective={activeLearningObjective}\n userContext={this.props.userContext}\n />\n );\n }\n\n collapsibleTools = (\n <div className=\"doc-lotp-mapping\">\n {contentMappingChild}\n </div>\n );\n }\n\n return (\n <div className={`doc-lotp-editor ${doclotpEditorSideNavChanges}`}>\n <div className=\"doc-lotp-editor-header\" onClick={() => this.setState({isCollapsed: !isCollapsed})}>\n <h5>\n <span className={isCollapsed ? \"icon-open-box\" : \"icon-close-box\"}></span>\n <span className=\"doc-lotp-editor-title\">Content Mapping Tool</span>\n </h5>\n </div>\n {collapsibleTools}\n </div>\n );\n }\n}\n","import * as React from \"react\";\n\nimport {\n newAcceptChangesChange,\n newRejectChangesChange,\n newAddCommentThreadChange,\n newAddChangeCommentChange,\n newDeleteChangeCommentChange,\n newCloseCommentThreadChange,\n changeSummaryDescription,\n ADD_COMMENT_THREAD,\n} from \"../../../helpers/Doc/changes\";\n\nimport { EDIT_COMMENT } from \"../../../helpers/Doc/menu\";\nimport {\n scrollToUid,\n scrollToUidAndContentKey,\n} from \"../../../helpers/Doc/scrollTo\";\n\nimport DocCommentInput from \"./CommentInput\";\nimport DocAuthorHeader from \"../AuthorHeader\";\n\nconst borderStyle = {border: \"solid black 1px\", marginLeft: \"5px\", marginBottom: \"5px\", padding: \"5px\"};\n\ninterface DocChangeSummaryProps {\n editingContext: EditingContextInEditor;\n userContext: UserContext;\n changeSummary: ChangeSummary | NewCommentThreadChangeSummary;\n currentVersion: CurrentVersion;\n offset: number;\n};\n\nfunction isNewCommentThread(changeSummary: ChangeSummary | NewCommentThreadChangeSummary): changeSummary is NewCommentThreadChangeSummary {\n return changeSummary.type === \"NEW_COMMENT_THREAD\"\n}\n\nfunction DocChangeSummary(props: DocChangeSummaryProps) {\n const {\n editingContext,\n userContext,\n changeSummary,\n currentVersion,\n offset,\n } = props;\n\n const sendNotifications = (text: string) => {\n fetch(`/versions/${currentVersion.id}/send_tag_notification`, {\n method: 'POST',\n headers: ReactOnRails.authenticityHeaders({\n 'Accept': \"application/json\",\n 'Content-Type': 'application/json',\n }),\n body: JSON.stringify({ text: text, tagger_id: props.userContext.id })\n });\n };\n\n const generateCommentText = (text: string) => {\n var out = text.replace(/{[^}]*}/g,'')\n return out\n }\n\n if (isNewCommentThread(changeSummary)) {\n const author = userContext;\n const isInOneInlineComment = !!changeSummary.range;\n\n return (\n <div\n id={\"changeSummary--newCommentThread\"}\n className=\"doc-change-summary-item doc-inline-comment-tread\"\n key={changeSummary.change_set_id}\n style={{...borderStyle, width: \"300px\", position: \"absolute\", top: `${offset}px`, right: \"10px\"}}\n >\n <DocAuthorHeader\n authorName={`${author.firstName} ${author.lastName}`}\n colorArray={editingContext.colorLookup[author.id]}\n />\n <DocCommentInput\n isActive\n onAddClick={(text) => {\n sendNotifications(text)\n editingContext.addChange(newAddCommentThreadChange(changeSummary.selection, text), changeSummary.variantId);\n editingContext.closeCurrentMenu();\n }}\n onCancelClick={() => editingContext.closeCurrentMenu()}\n onFocus={() => {}}\n autoFocus\n editors={editingContext.editors}\n />\n </div>\n );\n } else {\n let changeDescription;\n let headerButtons = [];\n\n const onClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (changeSummary.key) {\n if (changeSummary.changeNodeType && changeSummary.changeNodeType !== \"paragraph\") {\n scrollToUid(changeSummary.uid)\n } else {\n editingContext.setCurrentDocSelection({\n start: {uid: changeSummary.uid, contentKey: changeSummary.key, index: changeSummary.range.start},\n end: {uid: changeSummary.uid, contentKey: changeSummary.key, index: changeSummary.range.start}\n })\n\n scrollToUidAndContentKey(changeSummary.uid, changeSummary.key)\n }\n }\n }\n\n if (ADD_COMMENT_THREAD === changeSummary.type) {\n changeDescription = generateCommentText(changeSummary.text);\n if (changeSummary.author_id === userContext.id || userContext.permissions.resolveComments) {\n headerButtons.push(\n <i\n key=\"close-comments\"\n style={{marginRight: \"5px\", fontSize: \"1.5em\", lineHeight: \"1em\"}}\n className=\"fa fa-check\"\n onClick={(e) => {\n editingContext.addChange(newCloseCommentThreadChange(changeSummary.change_id), changeSummary.variantId);\n e.stopPropagation();\n }}\n />\n );\n }\n } else {\n changeDescription = changeSummaryDescription(changeSummary, props);\n if (userContext.permissions.acceptTrackedChanges) {\n headerButtons.push(\n <i\n key=\"accept\"\n style={{marginRight: \"5px\", fontSize: \"1.5em\", lineHeight: \"1em\"}}\n className=\"fa fa-check\"\n onClick={(e) => {\n editingContext.addChange(newAcceptChangesChange(changeSummary.change_id), changeSummary.variantId);\n e.stopPropagation();\n }}\n />\n )\n }\n if (userContext.permissions.rejectTrackedChanges || userContext.id === changeSummary.author_id) {\n headerButtons.push(\n <i\n key=\"reject\"\n style={{marginRight: \"5px\", fontSize: \"1.5em\", lineHeight: \"1em\"}}\n className=\"fa fa-times\"\n onClick={(e) => {\n editingContext.addChange(newRejectChangesChange(changeSummary.change_id), changeSummary.variantId);\n e.stopPropagation();\n }}\n />\n )\n }\n }\n\n const firstChangeId = changeSummary.change_id;\n\n const renderedComments = (changeSummary.comments || []).map((comment) => {\n return (\n <div key={comment.comment_id}>\n <DocAuthorHeader\n authorName={comment.author_full_name}\n colorArray={editingContext.colorLookup[comment.author_id]}\n createdAt={comment.created_at}\n >\n {comment.author_id === userContext.id && (\n <i\n style={{marginRight: \"5px\"}}\n className=\"fa fa-trash\"\n onClick={(e) => {\n editingContext.addChange(newDeleteChangeCommentChange(comment.comment_id), changeSummary.variantId);\n e.stopPropagation();\n }}\n />\n )}\n </DocAuthorHeader>\n <p style={{marginBottom: 0}}>{generateCommentText(comment.text)}</p>\n <hr style={{margin: \"5px 0\"}} />\n </div>\n );\n });\n\n const commentResponseInput = () => {\n if (userContext.permissions.respondToComments) {\n // TODO: Inspect to make sure editingContext.currentMenu actully gets the currentMenu\n return (\n <DocCommentInput\n isActive={editingContext.currentMenu?.menu === EDIT_COMMENT && editingContext.currentMenu?.change_uid === firstChangeId}\n onAddClick={(text) => {\n sendNotifications(text)\n editingContext.addChange(newAddChangeCommentChange(firstChangeId, text), changeSummary.variantId);\n editingContext.closeCurrentMenu();\n }}\n onCancelClick={() => editingContext.closeCurrentMenu()}\n onFocus={() => {\n editingContext.clearCurrentDocSelection();\n editingContext.setCurrentMenu(EDIT_COMMENT, {change_uid: firstChangeId, change_set_id: changeSummary.change_set_id});\n\n if (changeSummary.key) {\n if (changeSummary.changeNodeType && changeSummary.changeNodeType !== \"paragraph\") {\n scrollToUid(changeSummary.uid)\n } else {\n scrollToUidAndContentKey(changeSummary.uid, changeSummary.key)\n }\n }\n }}\n editors={editingContext.editors}\n />\n )\n }\n }\n\n return (\n <div\n id={`changeSummary--${changeSummary.change_set_id}`}\n className=\"doc-change-summary-item\"\n key={changeSummary.change_set_id}\n style={{...borderStyle, width: \"300px\", position: \"absolute\", top: `${offset}px`, right: \"10px\"}}\n onClick={onClick}\n >\n <DocAuthorHeader\n authorName={changeSummary.author_full_name}\n colorArray={editingContext.colorLookup[changeSummary.author_id]}\n createdAt={changeSummary.created_at}\n >\n {headerButtons}\n </DocAuthorHeader>\n <p className=\"doc-change-summary-description\" style={{marginBottom: 0}}>{changeDescription}</p>\n <hr style={{margin: \"5px 0\"}} />\n {renderedComments}\n {commentResponseInput()}\n </div>\n );\n }\n}\n\nexport default React.memo(DocChangeSummary);\n","import * as React from \"react\";\n\nimport DocChangeSummary from \"./ChangeSummaryColumn/ChangeSummary\";\n\ninterface DocChangeSummaryColumnProps {\n editingContext: EditingContext;\n userContext: UserContext;\n displayContext: DisplayContext;\n changeSummaries: Array<OffsetChangeSummary>;\n currentVersion: CurrentVersion;\n featureFlag: FeatureFlag;\n};\n\nexport default function DocChangeSummaryColumn(props: DocChangeSummaryColumnProps) {\n const {\n editingContext,\n userContext,\n displayContext,\n changeSummaries = [],\n currentVersion,\n } = props;\n\n if (!editingContext.isEditing || !displayContext.canBeEditing) { return; }\n\n return <>\n {\n changeSummaries.map((offsetChangeSummary) => {\n return (\n <DocChangeSummary\n key={offsetChangeSummary.changeSummary.change_set_id}\n editingContext={editingContext}\n userContext={userContext}\n changeSummary={offsetChangeSummary.changeSummary}\n currentVersion={currentVersion}\n offset={offsetChangeSummary.offset}\n />\n );\n })\n }\n </>\n}\n","import * as React from \"react\";\n\nimport GenButton from \"../Gen/Button/component\";\nimport GenModal from \"../Gen/Modal/component\";\n\nimport { EDIT_RO_NAME_MODAL } from \"../../helpers/Doc/menu\";\n\ninterface Props {\n\n};\n\nexport default function DocROName(props) {\n const {\n documentContext,\n editingContext,\n editingContextExtra,\n } = props;\n\n if (!editingContext.isEditing || documentContext.docType !== \"ReusableObject\") { return null; }\n\n const [newNameState, setNewNameState] = React.useState(documentContext.name);\n\n let editRoNameModal;\n if (editingContextExtra.currentMenu?.menu === EDIT_RO_NAME_MODAL) {\n editRoNameModal = (\n <GenModal open>\n <div className=\"gen-modal-panel\">\n <div className=\"gen-modal-header\">\n <div className=\"gen-modal-header-left\">\n <h1 className=\"title\">Update Reusable Content Title</h1>\n </div>\n <div className=\"gen-modal-header-right\">\n <button\n type=\"button\"\n className=\"close-button\"\n onClick={() => editingContext.closeCurrentMenu()}\n >\n <i className=\"fa fa-times\" />\n </button>\n </div>\n </div>\n <hr />\n <label htmlFor=\"ro-name\">\n New Title:\n <input\n id=\"ro-name\"\n type=\"text\"\n value={newNameState}\n onChange={(e) => setNewNameState(e.target.value)}\n />\n </label>\n <p>Updates to Reusable Content titles take immediate effect and do not need to be published.</p>\n <div className=\"gen-modal-choice-buttons\">\n <button\n type=\"button\"\n onClick={() => {\n editingContextExtra.updateRoName(newNameState);\n editingContext.closeCurrentMenu();\n }}\n >\n Save\n </button>\n <button\n type=\"button\"\n onClick={() => editingContext.closeCurrentMenu()}\n >\n Cancel\n </button>\n </div>\n </div>\n </GenModal>\n );\n }\n\n return (\n <div className=\"doc-ro-name\">\n <h6>Reusable Content Title:</h6>\n <div className=\"doc-ro-name-container\">\n <h1>\n {documentContext.name}\n </h1>\n <div>\n <GenButton\n name={<i className=\"fa fa-edit\" />}\n highlighted\n small\n onClick={() => editingContext.setCurrentMenu(EDIT_RO_NAME_MODAL)}\n />\n </div>\n </div>\n {editRoNameModal}\n </div>\n );\n}\n","import * as React from \"react\";\n\ninterface AssessmentQuestionFormProps {\n editingContextExtra: EditingContextExtra\n};\n\nexport default function AssessmentQuestionForm(props: AssessmentQuestionFormProps) {\n const [answerExplanation, setAnswerExplanation] = React.useState(null);\n\n const save = function() {\n if (answerExplanation) {\n props.editingContextExtra.setAssessmentQuestionData({\n ...props.editingContextExtra.assessmentQuestion,\n answer_explanation: answerExplanation\n })\n setAnswerExplanation(null)\n }\n }\n\n return (\n <div style={{padding: 10}}>\n <div>\n <h5 style={{paddingBottom: 10}}>Answer Explanation:</h5>\n <span>\n <textarea value={answerExplanation || props.editingContextExtra.assessmentQuestion.answer_explanation || \"\"} onChange={(e) => setAnswerExplanation(e.target.value)} />\n </span>\n <span>\n <button className='aq-button' onClick={save}>Save</button>\n </span>\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport GenModal from \"../Gen/Modal/component\";\nimport GenButton from \"../Gen/Button/component\";\n\nimport { OPENED_DOCUMENT_LOG } from \"../../helpers/DocumentUserLog\";\nimport {\n initializeMedia,\n getAssetAssociations,\n deleteAssetAssociation,\n mediaKeyHelper,\n} from \"../../helpers/media_manager\";\n\nimport { trackChangesEditModes } from \"../../helpers/Doc/trackChangesEditMode\";\n\nimport DocEditBar from \"./EditBar\";\nimport DocSection from \"./BlockNodes/Section\";\nimport ReasoningTool from \"./ReasoningTool\";\nimport DocModals from \"./Modals\";\nimport DocContentMappingTool from \"./ContentMappingTool\";\nimport DocChangeSummaryColumn from \"./ChangeSummaryColumn\";\nimport DocEditBarMediaManager from \"./EditBar/MediaManager\";\n\nimport { displayModes, isDisplayMode } from \"../../helpers/Doc/displayMode\";\n\nimport DocROName from \"./ROName\";\n\nimport { MEDIA_MANAGER } from \"../../helpers/Doc/menu\";\nimport AssessmentQuestionForm from \"./AssessmentQuestionForm\";\n\nimport { generateLearningObjectiveActions } from \"../../reducers/learningObjectives\";\n\ninterface NewEditDocProps {\n documentContext: DocumentContext;\n currentVersion: CurrentVersion;\n userContext: UserContext;\n displayContext: DisplayContext;\n editingContext: EditingContext;\n editingContextExtra: EditingContextExtra;\n mappingContext: MappingContext;\n mediaContext: MediaContext;\n projectContext: ProjectContext;\n reasoningToolContext: ReasoningToolContext;\n integrationInfo: IntegrationInfo;\n mergedData: MergedData;\n changeData: ChangeData;\n displayUid?: string;\n changeSummaries: Array<OffsetChangeSummary>;\n userState: UserState;\n\n featureFlag: FeatureFlag;\n\n documentSetId?: number;\n isEditor: boolean;\n\n allLearningObjectiveOptions?: Array<{id: number, name: string, documents: Array<{id: number, title: string}>}>;\n learningObjectiveActionsGenerator: typeof generateLearningObjectiveActions;\n};\n\nexport default function NewEditDoc(props: NewEditDocProps) {\n const {\n documentContext,\n currentVersion,\n userContext,\n displayContext,\n editingContext,\n editingContextExtra,\n mappingContext,\n mediaContext,\n projectContext,\n reasoningToolContext,\n integrationInfo,\n mergedData,\n changeData,\n displayUid,\n changeSummaries,\n userState,\n featureFlag,\n allLearningObjectiveOptions,\n learningObjectiveActionsGenerator,\n } = props;\n\n React.useEffect(() => {\n const {\n userContext,\n documentSetId,\n editingContext,\n editingContextExtra,\n } = props;\n\n if (editingContext.isEditing && userContext.permissions.allowedEditMode === \"Suggesting\") {\n editingContextExtra.setTrackChangesEditMode(trackChangesEditModes.SUGGESTING_MODE);\n }\n\n const openedDocumentLogArgs = documentSetId ? {document_set_id: documentSetId} : {};\n userContext.logEvent(OPENED_DOCUMENT_LOG, openedDocumentLogArgs);\n }, []);\n\n const handleTurbolinksPageChange = React.useCallback(event => {\n if (editingContext.isEditing && editingContextExtra.isActiveEditData) {\n if (!confirm(\"You have unsaved changes! Are you sure you want to leave this page? Unsaved changes will be lost.\")) {\n event.preventDefault();\n }\n }\n }, [editingContext.isEditing, editingContextExtra.isActiveEditData]);\n\n React.useEffect(() => {\n window.addEventListener(\"turbo:before-visit\", handleTurbolinksPageChange);\n return () => {\n window.removeEventListener(\"turbo:before-visit\", handleTurbolinksPageChange);\n };\n }, [handleTurbolinksPageChange]);\n\n ////////////\n // MEDIA //\n //////////\n\n const [mediaState, setMediaState] = React.useState(mediaContext);\n\n React.useEffect(() => {\n initializeMedia({\n isEmbeded: displayContext.isEmbeded,\n modelId: documentContext.id as any, // TODO: Remove any\n modelType: \"Document\",\n responseHandler: setMediaState,\n });\n }, []);\n\n const handleMediaCreate = (data) => {\n const mediaKey = mediaKeyHelper(data);\n setMediaState((prev) => ({\n ...prev,\n [mediaKey]: [...prev[mediaKey], data],\n }));\n }\n\n const handleMediaDelete = (data) => {\n const mediaKey = mediaKeyHelper(data);\n setMediaState((prev) => ({\n ...prev,\n [mediaKey]: prev[mediaKey].filter((item) => item.external_identifier !== data.external_identifier),\n }));\n }\n\n const handleMediaReplace = (data) => {\n if (data.new) {\n handleMediaCreate(data.new);\n }\n if (data.old) {\n handleMediaDelete(data.old);\n }\n }\n\n const offlineModal = (\n <GenModal open={!displayContext.isOnline && !displayContext.isEmbeded}>\n <div className=\"gen-modal-panel\">\n {\n mergedData.timeLimit\n ? <p>You have lost your internet connectivity. In order to save your work on the exam to this point, please see your proctor. Ask your proctor to pause your exam. Once an internet connection is restored, your proctor can re-start your exam and you can continue your work.</p>\n : <p>You have lost connection to the system, but your activity prior to disconnect has been saved. When connectivity is restored you can resume where you left off.</p>\n }\n </div>\n </GenModal>\n );\n\n let mediaModal = null;\n if (editingContext.isEditing && editingContextExtra.currentMenu?.menu === MEDIA_MANAGER) {\n const mediaType = editingContextExtra.currentMenu?.mediaType\n mediaModal = (\n <DocEditBarMediaManager\n key={`${mediaType}Menu`}\n documentContext={documentContext}\n currentVersion={currentVersion}\n userContext={userContext}\n editingContext={editingContext}\n editingContextExtra={editingContextExtra}\n mediaContext={mediaState}\n createHandler={handleMediaCreate}\n deleteHandler={handleMediaDelete}\n replaceHandler={handleMediaReplace}\n />\n );\n }\n\n const outsideClasses = classNames(\n \"doc-outside-wrapper\",\n );\n\n const insideClasses = classNames(\n \"doc-body\",\n `${displayContext.displayMode}-display-mode`,\n {\n \"is-editing\": editingContext.isEditing,\n },\n );\n\n const showTopBar = editingContext.shouldShowEditor && !displayUid && !displayContext.isEmbeded;\n\n let docControlsWrapper = null;\n if (props.isEditor && !editingContext.shouldShowEditor) {\n let docControls = [\n <select className=\"doc-controls-select doc-controls-view-mode\"\n key=\"doc-controls-select\"\n value={displayContext.displayMode}\n onChange={(e) => {isDisplayMode(e.target.value) && displayContext.setDisplayMode(e.target.value);}}>\n <option value={displayModes.STUDENT}>Student</option>\n <option value={displayModes.UNGATED}>Ungated</option>\n <option value={displayModes.FULL}>Full</option>\n <option value={displayModes.OUTLINE}>Outline</option>\n </select>\n ];\n\n docControlsWrapper =\n <div className=\"doc-controls\">\n {docControls}\n </div>;\n }\n\n const showReasoningTool = !displayUid && !displayContext.isEmbeded;\n let showControlsInReadOnly = userContext.permissions.viewTopBar\n let renderTopBar = showTopBar || showControlsInReadOnly\n\n const topBarRef = React.useRef<HTMLDivElement>(null);\n const [topBarHeight, setTopBarHeight] = React.useState(0);\n\n React.useEffect(() => {\n const observer = new ResizeObserver(() => {\n if (topBarRef.current) {\n console.log(topBarRef.current.offsetHeight)\n setTopBarHeight(topBarRef.current.offsetHeight);\n }\n });\n\n if (topBarRef.current) {\n observer.observe(topBarRef.current);\n }\n\n return () => observer.disconnect();\n }, []);\n\n return (\n <div className={outsideClasses}>\n <div className=\"doc-inside-wrapper\">\n {renderTopBar &&\n <div ref={topBarRef} className=\"doc-top-wrapper\">\n {showTopBar && <DocContentMappingTool\n documentContext={documentContext}\n editingContext={editingContext}\n editingContextExtra={editingContextExtra}\n displayContext={displayContext}\n mappingContext={mappingContext}\n userContext={userContext}\n featureFlag={featureFlag}\n {...mergedData}\n />}\n <DocEditBar\n key=\"edit-bar\"\n documentContext={documentContext}\n currentVersion={currentVersion}\n userContext={userContext}\n displayContext={displayContext}\n editingContext={editingContext}\n editingContextExtra={editingContextExtra}\n mediaContext={mediaState}\n projectContext={projectContext}\n mergedData={mergedData}\n mappingContext={mappingContext}\n\n featureFlag={featureFlag}\n />\n </div>\n }\n <div\n id=\"doc-body-wrapper\"\n className=\"doc-body-wrapper\"\n style={{marginTop: topBarHeight, position: \"relative\"}}\n >\n <div\n className={insideClasses}\n >\n {offlineModal}\n {mediaModal}\n {docControlsWrapper}\n <DocROName\n documentContext={documentContext}\n editingContext={editingContext}\n editingContextExtra={editingContextExtra}\n\n featureFlag={featureFlag}\n />\n <DocSection\n {...mergedData}\n documentContext={documentContext}\n currentVersion={currentVersion}\n userContext={userContext}\n displayContext={displayContext}\n editingContext={editingContext}\n mediaContext={mediaState}\n\n featureFlag={featureFlag}\n\n level={0}\n integrationInfo={integrationInfo}\n />\n </div>\n\n { editingContextExtra.assessmentQuestion && <AssessmentQuestionForm editingContextExtra={editingContextExtra} />}\n\n <DocChangeSummaryColumn\n editingContext={editingContext}\n userContext={userContext}\n displayContext={displayContext}\n changeSummaries={changeSummaries}\n currentVersion={currentVersion}\n\n featureFlag={featureFlag}\n />\n </div>\n </div>\n {showReasoningTool\n && <ReasoningTool\n key=\"reasoning-tool\"\n documentContext={documentContext}\n currentVersion={currentVersion}\n userContext={userContext}\n displayContext={displayContext}\n editingContext={editingContext}\n editingContextExtra={editingContextExtra}\n mediaContext={mediaState}\n projectContext={projectContext}\n reasoningToolContext={reasoningToolContext}\n mappingContext={mappingContext}\n mergedData={mergedData}\n changeData={changeData}\n userState={userState}\n\n featureFlag={featureFlag}\n />\n }\n <DocModals\n documentContext={documentContext}\n currentVersion={currentVersion}\n userContext={userContext}\n displayContext={displayContext}\n editingContext={editingContext}\n editingContextExtra={editingContextExtra}\n mediaContext={mediaState}\n projectContext={projectContext}\n mergedData={mergedData}\n mappingContext={mappingContext}\n allLearningObjectiveOptions={allLearningObjectiveOptions}\n learningObjectiveActionsGenerator={learningObjectiveActionsGenerator}\n\n featureFlag={featureFlag}\n />\n </div>\n );\n}\n","export default class BaseObserver<Delegate> {\n delegates: Array<Delegate>;\n isRunning?: boolean;\n\n constructor() {\n this.delegates = [];\n }\n\n start() {\n if (!this.isRunning) {\n this.isRunning = true;\n this.startEventListeners();\n }\n }\n\n startEventListeners() {}\n\n stop() {\n if (this.isRunning) {\n this.isRunning = false;\n this.stopEventListeners();\n }\n }\n\n stopEventListeners() {}\n\n registerDelegate(delegate: Delegate) {\n if (!this.delegates.includes(delegate)) {\n this.delegates.push(delegate);\n this.start();\n this.afterRegistrationInitializer(delegate);\n }\n }\n\n afterRegistrationInitializer(delegate: Delegate) {}\n\n unregisterDelegate(delegate: Delegate) {\n this.delegates = this.delegates.filter(arrayDelegate => arrayDelegate !== delegate);\n if (this.delegates.length === 0) {\n this.stop();\n }\n }\n}\n","import BaseObserver from './baseObserver'\n\ninterface ActiveUserObserverDelegate {\n activeUserDidFire: (mode: MouseEvent | KeyboardEvent) => void;\n}\n\nexport default class ActiveUserObserver extends BaseObserver<ActiveUserObserverDelegate> {\n startEventListeners() {\n document.addEventListener(\"mousemove\", this.notifyOnActiveUser.bind(this), true);\n document.addEventListener(\"keydown\", this.notifyOnActiveUser.bind(this), true);\n }\n\n stopEventListeners() {\n document.removeEventListener(\"mousemove\", this.notifyOnActiveUser.bind(this), true);\n document.addEventListener(\"keydown\", this.notifyOnActiveUser.bind(this), true);\n }\n\n notifyOnActiveUser(event: MouseEvent | KeyboardEvent) {\n this.delegates.forEach((delegate) => {\n if (delegate.activeUserDidFire) {\n delegate.activeUserDidFire(event);\n }\n });\n }\n}\n","import BaseObserver from './baseObserver'\n\ninterface BeforeInputObserverDelegate {\n beforeInputDidFire: (mode: InputEvent) => void;\n}\n\nexport default class BeforeInputObserver extends BaseObserver<BeforeInputObserverDelegate> {\n startEventListeners() {\n document.addEventListener(\"beforeinput\", this.notifyOnBeforeInput.bind(this), true)\n }\n\n stopEventListeners() {\n document.removeEventListener(\"beforeinput\", this.notifyOnBeforeInput.bind(this), true)\n }\n\n notifyOnBeforeInput(event: InputEvent) {\n this.delegates.forEach(delegate => delegate.beforeInputDidFire(event));\n }\n}\n","import BaseObserver from './baseObserver'\n\ninterface CopyObserverDelegate {\n copyDidFire?: (mode: ClipboardEvent) => void;\n cutDidFire?: (mode: ClipboardEvent) => void;\n pasteDidFire?: (mode: ClipboardEvent) => void;\n}\n\nexport default class CopyObserver extends BaseObserver<CopyObserverDelegate> {\n startEventListeners() {\n document.addEventListener(\"copy\", this.notifyOnCopy.bind(this), true);\n document.addEventListener(\"cut\", this.notifyOnCut.bind(this), true);\n document.addEventListener(\"paste\", this.notifyOnPaste.bind(this), true);\n }\n\n stopEventListeners() {\n document.removeEventListener(\"copy\", this.notifyOnCopy.bind(this), true);\n document.removeEventListener(\"cut\", this.notifyOnCut.bind(this), true);\n document.removeEventListener(\"paste\", this.notifyOnPaste.bind(this), true);\n }\n\n notifyOnCopy(event: ClipboardEvent) {\n this.delegates.forEach((delegate) => {\n if (delegate.copyDidFire) {\n delegate.copyDidFire(event);\n }\n });\n }\n\n notifyOnCut(event: ClipboardEvent) {\n this.delegates.forEach((delegate) => {\n if (delegate.cutDidFire) {\n delegate.cutDidFire(event);\n }\n });\n }\n\n notifyOnPaste(event: ClipboardEvent) {\n this.delegates.forEach((delegate) => {\n if (delegate.pasteDidFire) {\n delegate.pasteDidFire(event);\n }\n });\n }\n}\n","import BaseObserver from './baseObserver'\n\ninterface MouseClickObserverDelegate {\n mouseDidDownClick: (mode: MouseEvent) => void;\n mouseDidUpClick: (mode: MouseEvent) => void;\n}\n\n\nexport default class MouseClickObserver extends BaseObserver<MouseClickObserverDelegate> {\n startEventListeners() {\n document.addEventListener(\"mousedown\", this.notifyOnMouseDownClick.bind(this), true);\n document.addEventListener(\"mouseup\", this.notifyOnMouseUpClick.bind(this), true);\n }\n\n stopEventListeners() {\n document.removeEventListener(\"mousedown\", this.notifyOnMouseDownClick.bind(this), true);\n document.removeEventListener(\"mouseup\", this.notifyOnMouseUpClick.bind(this), true);\n }\n\n notifyOnMouseDownClick(event: MouseEvent) {\n this.delegates.forEach(delegate => delegate.mouseDidDownClick(event));\n }\n\n notifyOnMouseUpClick(event: MouseEvent) {\n this.delegates.forEach(delegate => delegate.mouseDidUpClick(event));\n }\n}\n","import BaseObserver from './baseObserver'\n\nimport { full_url } from \"../../url\";\n\nconst OFFLINE_TIME_TO_CHECK_FOR_UPDATES = 1000\nconst ONLINE_TIME_TO_CHECK_FOR_UPDATES = 30000\n\ninterface OfflineObserverDelegate {\n didGoOnline: () => void;\n didGoOffline: () => void;\n}\n\nexport default class OfflineObserver extends BaseObserver<OfflineObserverDelegate> {\n testIfOnlineTimer?: NodeJS.Timeout;\n\n startEventListeners() {\n window.addEventListener(\"offline\", this.notifyOffline.bind(this), true);\n window.addEventListener(\"online\", this.notifyOnline.bind(this), true);\n this.testIfOnlineTimer = setTimeout(this.testIfOnline.bind(this), ONLINE_TIME_TO_CHECK_FOR_UPDATES);\n }\n\n stopEventListeners() {\n window.removeEventListener(\"offline\", this.notifyOffline.bind(this), true);\n window.removeEventListener(\"online\", this.notifyOnline.bind(this), true);\n if ( this.testIfOnlineTimer ) { clearTimeout(this.testIfOnlineTimer); }\n }\n\n afterRegistrationInitializer(delegate: OfflineObserverDelegate) {\n navigator.onLine ? delegate.didGoOnline() : delegate.didGoOffline();\n }\n\n notifyOffline() {\n this.delegates.forEach(delegate => delegate.didGoOffline());\n }\n\n notifyOnline() {\n this.delegates.forEach(delegate => delegate.didGoOnline());\n }\n\n testIfOnline() {\n const xhr = new XMLHttpRequest();\n\n const noResponseTimer = setTimeout(() => {\n xhr.abort();\n this.notifyOffline();\n this.testIfOnlineTimer = setTimeout(this.testIfOnline.bind(this), OFFLINE_TIME_TO_CHECK_FOR_UPDATES);\n }, 5000);\n\n xhr.onreadystatechange = (e) => {\n if (xhr.readyState !== 4) {\n return;\n }\n\n clearTimeout(noResponseTimer);\n if (xhr.status === 200) {\n this.notifyOnline();\n this.testIfOnlineTimer = setTimeout(this.testIfOnline.bind(this), ONLINE_TIME_TO_CHECK_FOR_UPDATES);\n } else {\n this.notifyOffline();\n this.testIfOnlineTimer = setTimeout(this.testIfOnline.bind(this), OFFLINE_TIME_TO_CHECK_FOR_UPDATES);\n }\n };\n xhr.open(\"HEAD\", full_url(\"/check/online\"), true);\n xhr.send();\n }\n}\n","import BaseObserver from './baseObserver'\n\ninterface SelectionObserverDelegate {\n selectionDidChange: (mode: Event) => void;\n}\n\nexport default class SelectionObserver extends BaseObserver<SelectionObserverDelegate> {\n startEventListeners() {\n document.addEventListener(\"selectionchange\", this.notifySelectionChange.bind(this), true);\n }\n\n stopEventListeners() {\n document.removeEventListener(\"selectionchange\", this.notifySelectionChange.bind(this), true);\n }\n\n notifySelectionChange(event: Event) {\n this.delegates.forEach(delegate => delegate.selectionDidChange(event));\n }\n}\n","import {\n compact,\n difference,\n last,\n partition,\n uniq,\n zip,\n} from \"lodash\";\n\nimport generateUUID from \"../../generateUUID\";\n\nimport { convertAllInlineNodesToRangeJSON } from \"../Convert/RangeInlineJSON\";\n\nimport * as DocConvertPlainText from \"../Convert/PlainText\";\n\nexport function reflow(json: DocSectionType<InlineHtmlNode>, documentId: number) {\n const root_section = json;\n\n let end_of_case_text = root_section.content.find((node) => node.uid === \"end_of_case_text\");\n if (!end_of_case_text) {\n end_of_case_text = endOfCaseText(root_section.title);\n }\n\n let cards = root_section.content.filter((node) => node.type === \"section\");\n cards.forEach((section) => {\n section.classes = uniq((section.classes || []).concat([\"card\"]));\n });\n\n let feedback_cards, remaining_cards, finish_case_cards, finish_case_card;\n let release_notes_cards, learning_objectives_cards, case_synopsis_cards;\n let references_cards, saq_cards, regular_cards;\n\n remaining_cards = cards;\n [feedback_cards, remaining_cards] = partitionByClass(remaining_cards, \"feedback_card\");\n [finish_case_cards, remaining_cards] = partitionByClass(remaining_cards, \"finish_case_card\");\n finish_case_card = finish_case_cards[0];\n [release_notes_cards, remaining_cards] = partitionByClass(remaining_cards, \"release_notes_card\");\n [learning_objectives_cards, remaining_cards] = partition(remaining_cards, (node) => (/Learning Objectives/i).test(node.title.text));\n [case_synopsis_cards, remaining_cards] = partitionByClass(remaining_cards, \"case_synopsis_card\");\n [references_cards, remaining_cards] = partition(remaining_cards, (node) => node.classes && node.classes.includes(\"references_card\") && (/References/).test(node.title.text));\n [saq_cards, remaining_cards] = partitionByClass(remaining_cards, \"saq_card\");\n regular_cards = remaining_cards;\n\n finish_case_card = finish_case_card || finishCaseCard();\n if (feedback_cards.length === 0) { feedback_cards = [feedbackCard()]; }\n if (release_notes_cards.length === 0) { release_notes_cards = releaseNotesCards(); }\n if (learning_objectives_cards.length === 0) { learning_objectives_cards = learningObjectivesCards(); }\n if (case_synopsis_cards.length === 0) { case_synopsis_cards = caseSynopsisCards(); }\n\n const hidden_cards = case_synopsis_cards.concat(references_cards);\n hidden_cards.forEach((section) => {\n section.invisible = true;\n });\n\n let finish_case_button = null;\n let finish_case_text = null;\n let case_summary_button = null;\n let finish_case_saq_text = null;\n\n cards.forEach((section) => {\n section.content = section.content.filter((node) => {\n if (node.classes && node.classes.includes(\"finish_case_button\")) {\n finish_case_button = node;\n return false;\n } else if ( node.type === \"paragraph\" && (\n (/Well done! You have completed/i).test(node.content.text)\n || (node.classes && node.classes.includes(\"finish_case_text\"))\n )) {\n finish_case_text = node;\n return false;\n } else if (node.classes && node.classes.includes(\"case_summary_button\")) {\n case_summary_button = node;\n return false;\n } else if ( node.type === \"paragraph\" && (\n node.content.text === \"You may now continue to the optional self-assessment questions for you to assess what you have learned in this case.\"\n || node.content.text === \"You may now continue to the self-assessment questions for you to assess what you have learned in this case.\"\n || (node.classes && node.classes.includes(\"finish_case_saq_text\"))\n )) {\n finish_case_saq_text = node;\n return false;\n } else if (node.uid === \"feedback_introduction_text\") {\n return false;\n } else {\n return true;\n }\n });\n });\n\n const not_continue_cards = difference(cards, regular_cards);\n not_continue_cards.forEach((section: any) => { // TODO: Remove any\n section.content = section.content.filter((node) => !(node.classes && node.classes.includes(\"continue_button\")));\n });\n\n const not_feedback_cards = difference(cards, feedback_cards);\n not_feedback_cards.forEach((section: any) => { // TODO: Remove any\n section.content = section.content.filter((node) => !(node.classes && node.classes.includes(\"feedback_button\")));\n });\n\n const regular_cards_uids = regular_cards.map((card) => card.uid);\n const zipped_regular_cards = zip(regular_cards, regular_cards_uids.slice(1).concat([feedback_cards[0].uid]));\n\n zipped_regular_cards.forEach(([card, next_uid]: [any, any]) => { // TODO: Remove any\n const question_sections = card.content.filter((node) => node.type === \"section\" && node.classes && node.classes.includes(\"question\"));\n const submit_buttons = compact(question_sections.map((question_section) => question_section.content.find((node) => node.type === \"button\" && node.title.text === \"Submit\")));\n const old_submit_buttons_actions = submit_buttons.flatMap((submit_button: any) => submit_button.onClick); // TODO: Remove any\n\n question_sections.forEach((question_section) => {\n addSubmitButtonActionsToQuestionSection(question_section);\n });\n\n let continue_button = card.content.filter((node) => node.classes && node.classes.includes(\"continue_button\"))[0];\n if (!continue_button) {\n continue_button = continueButton(`continue_button_${card.uid}`);\n card.content = card.content.concat(continue_button);\n }\n\n continue_button.onClick = findActionOrNew(continue_button.onClick, [\n generateSetNodeKVPairAction(next_uid, \"invisible\", false),\n generateSetNodeKVPairAction(next_uid, \"collapsed\", false),\n generateSetNodeKVPairAction(card.uid, \"collapsed\", true),\n generateSetNodeKVPairAction(continue_button.uid, \"invisible\", true),\n ]);\n\n if (submit_buttons.length > 0) {\n const submit_button: any = submit_buttons[0]; // TODO: Remove any\n\n submit_button.onClick = submit_button.onClick.concat(findActionOrNew(old_submit_buttons_actions, generateSetNodeKVPairAction(continue_button.uid, \"inactive\", 1)));\n\n continue_button.inactive = 2;\n } else {\n delete continue_button.inactive;\n }\n });\n\n if (regular_cards.length > 0) {\n const feedback_introduction_text = feedbackIntroductionText();\n\n const last_regular_card: any = last(regular_cards);\n last_regular_card.content.splice(-1, 0, feedback_introduction_text);\n }\n\n const feedback_cards_uids = feedback_cards.map((card) => card.uid);\n const zipped_feedback_cards = zip(feedback_cards, feedback_cards_uids.slice(1).concat([finish_case_card.uid]));\n\n zipped_feedback_cards.forEach(([card, next_uid]: [any, any], index) => { // TODO: Remove any\n let feedback_button = card.content.find((node) => node.classes && node.classes.includes(\"feedback_button\"));\n if (!feedback_button) {\n feedback_button = feedbackSubmitButton(`feedback_card_${index+1}_button`);\n card.content.push(feedback_button);\n }\n\n feedback_button.onClick = findActionOrNew(feedback_button.onClick, [\n generateSetNodeKVPairAction(next_uid, \"invisible\", false),\n generateSetNodeKVPairAction(next_uid, \"collapsed\", false),\n generateSetNodeKVPairAction(card.uid, \"invisible\", true),\n generateSetNodeKVPairAction(card.uid, \"collapsed\", true),\n ]);\n\n let rating_bar_1 = card.content.find((node) => node.uid === \"feedback_card_1_rating_bar\");\n let rating_bar_2 = card.content.find((node) => node.uid === \"feedback_card_2_rating_bar\");\n\n if (rating_bar_1 && rating_bar_2) {\n feedback_button.inactive = 2\n rating_bar_2.inactive = 2\n\n rating_bar_1.onClick = findActionOrNew(rating_bar_1.onClick, [\n generateSetNodeKVPairAction(rating_bar_2.uid, \"inactive\", 1),\n ]);\n\n rating_bar_2.onClick = findActionOrNew(rating_bar_2.onClick, [\n generateSetNodeKVPairAction(feedback_button.uid, \"inactive\", 1),\n ]);\n }\n });\n\n if (!finish_case_button) {\n finish_case_button = finishCaseButton();\n }\n finish_case_card.content.push(finish_case_button);\n const old_finish_case_button_actions = finish_case_button[\"onClick\"];\n\n finish_case_button.onClick = findActionOrNew(finish_case_button.onClick,\n generateSetNodeKVPairAction(finish_case_button.uid, \"invisible\", true),\n );\n\n if (!finish_case_text) {\n finish_case_text = finishCaseText();\n }\n finish_case_text.classes = uniq((finish_case_text.classes || []).concat([\"finish_case_text\"]));\n finish_case_card.content.push(finish_case_text);\n\n finish_case_button.onClick = finish_case_button.onClick.concat(findActionOrNew(old_finish_case_button_actions,\n generateSetNodeKVPairAction(finish_case_text.uid, \"invisible\", false),\n ));\n\n if (!case_summary_button) {\n case_summary_button = caseSummaryButton(documentId);\n }\n finish_case_card.content.push(case_summary_button);\n\n finish_case_button.onClick = finish_case_button.onClick.concat(findActionOrNew(old_finish_case_button_actions,\n generateSetNodeKVPairAction(case_summary_button.uid, \"invisible\", false),\n ));\n\n release_notes_cards.forEach((card) => {\n if (card[\"content\"].length > 0) {\n finish_case_button.onClick = finish_case_button.onClick.concat(findActionOrNew(old_finish_case_button_actions,\n generateSetNodeKVPairAction(card.uid, \"invisible\", false),\n ));\n }\n });\n\n learning_objectives_cards.forEach((card) => {\n finish_case_button.onClick = finish_case_button.onClick.concat(findActionOrNew(old_finish_case_button_actions,\n generateSetNodeKVPairAction(card.uid, \"invisible\", false),\n ));\n });\n\n if (saq_cards.length > 0) {\n if (!finish_case_saq_text) {\n finish_case_saq_text = finishCaseSAQText();\n }\n finish_case_saq_text.classes = uniq((finish_case_saq_text.classes || []).concat([\"finish_case_saq_text\"]));\n finish_case_card[\"content\"] << finish_case_saq_text;\n\n finish_case_button.onClick = finish_case_button.onClick.concat(findActionOrNew(old_finish_case_button_actions,\n generateSetNodeKVPairAction(finish_case_saq_text.uid, \"invisible\", false),\n ));\n\n saq_cards.forEach((saq_card) => {\n finish_case_button.onClick = finish_case_button.onClick.concat(findActionOrNew(old_finish_case_button_actions,\n generateSetNodeKVPairAction(saq_card.uid, \"invisible\", false),\n ));\n });\n }\n\n finish_case_button.onClick = finish_case_button.onClick.concat(findActionOrNew(old_finish_case_button_actions,\n generateSetNodeKVPairAction(end_of_case_text.uid, \"invisible\", false),\n ));\n\n saq_cards.forEach((saq_card) => {\n const question_sections = saq_card.content.filter((node) => node.type === \"section\" && node.classes && node.classes.includes(\"question\"));\n question_sections.forEach((question_section) => {\n addSubmitButtonActionsToQuestionSection(question_section);\n });\n });\n\n cards = regular_cards.concat(\n feedback_cards,\n [finish_case_card],\n release_notes_cards,\n learning_objectives_cards,\n saq_cards,\n case_synopsis_cards,\n references_cards,\n );\n\n cards.forEach((card) => {\n card.invisible = true;\n card.collapsible = true;\n card.collapsed = true;\n card.nested = true;\n });\n\n regular_cards[0].collapsed = false;\n regular_cards[0].invisible = false;\n\n root_section.content = root_section.content.filter((node) => node.type !== \"section\");\n root_section.content = root_section.content.concat(cards);\n\n root_section.content = root_section.content.filter((node) => node.uid !== \"end_of_case_text\");\n root_section.content = root_section.content.concat([end_of_case_text]);\n\n return root_section;\n}\n\nfunction partitionByClass(nodes: DocBlockNode<InlineHtmlNode>[], partitionClass: string) {\n return partition(nodes, (node) => node.classes && node.classes.includes(partitionClass));\n}\n\nfunction endOfCaseText(title: string) {\n return convertAllInlineNodesToRangeJSON({\n type: \"paragraph\",\n uid: \"end_of_case_text\",\n content: `Thank you for completing ${DocConvertPlainText.fromAnyType(title)}.`,\n invisible: true,\n });\n}\n\nfunction finishCaseCard() {\n return convertAllInlineNodesToRangeJSON({\n type: \"section\",\n uid: \"finish_case_card\",\n classes: [\"card\", \"finish_case_card\"],\n title: \"Case Summary Download\",\n content: [],\n level: 1,\n });\n}\n\nfunction feedbackCard() {\n return convertAllInlineNodesToRangeJSON({\n type: \"section\",\n uid: `feedback_card_1`,\n classes: [\"card\", \"feedback_card\"],\n title: `Feedback`,\n content: [\n {\n type: \"paragraph\",\n uid: `feedback_paragraph_1`,\n content: \"This case was a valuable use of my time.\",\n },\n {\n type: \"ratingBar\",\n uid: `feedback_card_1_rating_bar`,\n maxValue: 5,\n },\n {\n type: \"paragraph\",\n uid: `feedback_paragraph_2`,\n content: \"I will apply what I learned to patient care.\",\n },\n {\n type: \"ratingBar\",\n uid: `feedback_card_2_rating_bar`,\n maxValue: 5,\n },\n {\n type: \"section\",\n uid: `feedback_card_1_text_input_section`,\n nested: true,\n level: 2,\n title: \"Please note any comments, suggestions, or questions related to the case (optional):\",\n content: [\n {\n type: \"textInput\",\n uid: `feedback_card_1_text_input`,\n boxLines: 5,\n characterLimit: 1000,\n },\n ],\n },\n {\n type: \"button\",\n uid: `feedback_card_1_button`,\n classes: [\"feedback_button\"],\n title: \"Submit & Finish Case\",\n },\n ],\n level: 1,\n });\n}\n\nfunction releaseNotesCards() {\n return [\n convertAllInlineNodesToRangeJSON({\n type: \"section\",\n uid: \"release_notes_card\",\n classes: [\"card\", \"release_notes_card\"],\n title: \"Release Notes\",\n content: [],\n level: 1,\n }),\n ];\n}\n\nfunction learningObjectivesCards() {\n return [\n convertAllInlineNodesToRangeJSON({\n type: \"section\",\n uid: \"learning_objectives_card\",\n classes: [\"card\", \"learning_objectives_card\"],\n title: \"Learning Objectives\",\n content: [],\n level: 1,\n }),\n ];\n}\n\nfunction caseSynopsisCards() {\n return [\n convertAllInlineNodesToRangeJSON({\n type: \"section\",\n uid: \"case_synopsis_card\",\n classes: [\"card\", \"case_synopsis_card\"],\n title: \"Case Synopsis\",\n content: [],\n level: 1,\n }),\n ];\n}\n\nfunction feedbackIntroductionText() {\n return convertAllInlineNodesToRangeJSON({\n uid: \"feedback_introduction_text\",\n type: \"paragraph\",\n classes: [\n \"feedback_introduction_text\",\n ],\n content: \"This is the final page of the case. We value your perspective on the learning experience. After completing three required feedback ratings you can finish the case and access the case summary.\",\n });\n}\n\nfunction feedbackSubmitButton(uid: string) {\n return convertAllInlineNodesToRangeJSON({\n type: \"button\",\n uid: uid,\n title: \"Submit\",\n classes: [\"feedback_button\"],\n });\n}\n\nfunction finishCaseButton() {\n return convertAllInlineNodesToRangeJSON({\n type: \"button\",\n uid: \"finish_case_button\",\n title: \"Finish Case\",\n classes: [\"finish_case_button\"],\n });\n}\n\nfunction finishCaseText() {\n return convertAllInlineNodesToRangeJSON({\n type: \"paragraph\",\n uid: \"finish_case_text\",\n classes: [\"finish_case_text\"],\n content: \"Well done! You have completed the case. Click to download the case summary.\",\n invisible: true,\n });\n}\n\nfunction caseSummaryButton(document_id: number) {\n return convertAllInlineNodesToRangeJSON({\n type: \"button\",\n uid: \"case_summary_button\",\n title: \"Download Case Summary\",\n classes: [\"case_summary_button\"],\n invisible: true,\n onClick: [\n {\n type: \"action\",\n action: \"openExternalLink\",\n arguments: {\n url: `https://medu2.meduapp.com/documents/${document_id}/case_summary.pdf`,\n key: \"invisible\",\n value: true,\n },\n uid: generateUUID(),\n },\n ],\n });\n}\n\nfunction finishCaseSAQText() {\n return convertAllInlineNodesToRangeJSON({\n type: \"paragraph\",\n uid: \"finish_case_saq_text\",\n classes: [\"finish_case_saq_text\"],\n content: \"You may now continue to the optional self-assessment questions for you to assess what you have learned in this case.\",\n invisible: true,\n });\n}\n\nfunction addSubmitButtonActionsToQuestionSection(question_section: DocSectionType<InlineHtmlNode>) {\n const submit_button = question_section.content.find((node) => node.type === \"button\" && node.title.text === \"Submit\");\n\n if (submit_button) {\n const old_submit_button_actions = submit_button.onClick;\n submit_button.onClick = [];\n\n const question = question_section.content.find((node) => [\"categoryMatcher\", \"multipleChoice\", \"textInput\", \"cdqQuestion\"].includes(node.type));\n if (question) {\n submit_button.onClick = submit_button.onClick.concat(findActionOrNew(old_submit_button_actions, [\n generateSetNodeKVPairAction(question.uid, \"graded\", true),\n generateSetNodeKVPairAction(question.uid, \"inactive\", 2),\n ]));\n }\n\n const answer_comment = question_section.content.find((node) => node.type === \"section\" && node.classes && node.classes.includes(\"answer_comment\"));\n if (answer_comment) {\n submit_button.onClick = submit_button.onClick.concat(findActionOrNew(old_submit_button_actions, generateSetNodeKVPairAction(answer_comment.uid, \"invisible\", false)));\n answer_comment.invisible = true;\n }\n\n submit_button.onClick = submit_button.onClick.concat(findActionOrNew(old_submit_button_actions, generateSetNodeKVPairAction(submit_button.uid, \"inactive\", 2)));\n }\n}\n\nfunction findActionOrNew(action_array: Array<DocAction>, new_actions: DocAction | Array<DocAction>) {\n action_array = action_array || [];\n if (!Array.isArray(new_actions)) {\n new_actions = [new_actions];\n }\n\n return new_actions.map((new_action) => action_array.find((old_action) => (old_action.action === new_action.action) && ((\"arguments\" in old_action && old_action.arguments) === (\"arguments\" in new_action && new_action.arguments))) || new_action);\n}\n\nfunction generateAction(action: ActionName, actionArguments) {\n return {\n type: \"action\",\n action: action,\n arguments: actionArguments,\n uid: generateUUID(),\n };\n}\n\nfunction generateSetNodeKVPairAction(uid: string, key: string, value) {\n return generateAction(\"setNodeKVPair\", {\n uid: uid,\n key: key,\n value: value,\n }) as DocActionSetNodeKVPair;\n}\n\nfunction continueButton(uid: string) {\n return convertAllInlineNodesToRangeJSON({\n type: \"button\",\n uid: uid,\n title: \"Continue\",\n classes: [\"continue_button\"],\n });\n}\n","import { cloneDeep } from \"lodash\";\n\nimport memoize from \"memoize-weak\";\n\nimport { reflow as reflowSignatureCase } from \"./Kind/SignatureCase\";\n\nexport const weakMemoizedReflow = memoize(reflow);\nexport function reflow(json, documentKind: DocumentKind, documentId: number) {\n const clonedJson = cloneDeep(json);\n\n switch (documentKind) {\n case \"signature_case\":\n case \"signature_case_cme\":\n return reflowSignatureCase(clonedJson, documentId);\n default:\n return clonedJson;\n }\n}\n","export function undo<UndoRedoBody>(undoRedoState: UndoRedoState<UndoRedoBody>, currentData: UndoRedoBody): [UndoRedoBody, UndoRedoState<UndoRedoBody>] {\n undoRedoState = undoRedoState || resetState();\n\n if (undoRedoState.undoStack.length !== 0) {\n let newRedoStack = undoRedoState.redoStack;\n const newData = undoRedoState.undoStack[0];\n const newUndoStack = undoRedoState.undoStack.slice(1);\n\n if (currentData) {\n newRedoStack = [currentData].concat(newRedoStack as NonNullable<UndoRedoBody>[]); // TODO: Remove as\n }\n\n newRedoStack = newRedoStack.slice(0, 50);\n\n return [\n newData,\n {\n redoStack: newRedoStack,\n undoStack: newUndoStack,\n undoCompressCount: 0,\n },\n ];\n } else {\n alert(\"No undo action\");\n return [currentData, undoRedoState];\n }\n}\n\nexport function redo<UndoRedoBody>(undoRedoState: UndoRedoState<UndoRedoBody>, currentData: UndoRedoBody): [UndoRedoBody, UndoRedoState<UndoRedoBody>] {\n undoRedoState = undoRedoState || resetState();\n\n if (undoRedoState.redoStack.length !== 0) {\n const newRedoStack = undoRedoState.redoStack.slice(1);\n const newData = undoRedoState.redoStack[0];\n let newUndoStack = undoRedoState.undoStack;\n\n if (currentData) {\n newUndoStack = [currentData].concat(newUndoStack as NonNullable<UndoRedoBody>[]); //TODO: Remove as\n }\n\n newUndoStack = newUndoStack.slice(0, 50);\n\n return [\n newData,\n {\n redoStack: newRedoStack,\n undoStack: newUndoStack,\n undoCompressCount: 0,\n },\n ];\n } else {\n alert(\"No redo action\");\n return [currentData, undoRedoState];\n }\n}\n\nconst UNDO_REDO_DROP_LAST_STEP_SIZE = 10;\nexport function addToUndoStack<UndoRedoBody>(undoRedoState: UndoRedoState<UndoRedoBody>, currentData: UndoRedoBody, shouldMaybeDropLast: boolean) {\n undoRedoState = undoRedoState || resetState();\n\n if (shouldMaybeDropLast && undoRedoState.undoCompressCount < UNDO_REDO_DROP_LAST_STEP_SIZE) {\n return {\n ...undoRedoState,\n redoStack: [],\n undoCompressCount: undoRedoState.undoCompressCount + 1,\n };\n } else {\n return {\n redoStack: [],\n undoStack: [currentData].concat(undoRedoState.undoStack).slice(0, 25),\n undoCompressCount: 0,\n };\n }\n}\n\nexport function resetState() {\n return {\n redoStack: [],\n undoStack: [],\n undoCompressCount: 0,\n };\n}\n\nexport function canUndo(undoRedoState: UndoRedoState<unknown>) {\n return (undoRedoState?.undoStack?.length || 0) > 0;\n}\n\nexport function canRedo(undoRedoState: UndoRedoState<unknown>) {\n return (undoRedoState?.redoStack?.length || 0) > 0;\n}\n","import * as R from \"ramda\";\n\nimport { batch } from \"react-redux\";\n\nimport {\n newChangeTextAndNodesChange\n} from \"../changes\";\n\nimport {\n findNodePathByUid,\n findNodeAtPath,\n findNodeParentByUid,\n findNodeSiblingBeforeByPath,\n} from \"../Functions/base\";\n\nimport {\n rangesSortByEnd,\n isInOrEndRange,\n} from \"../Functions/Range\";\n\nimport * as selection from \"../selection\";\n\nfunction backIndexUntillNotInDeletionRange(node: DocBlockNode<InlineRangeNode>, index: number) {\n if (node.type === \"paragraph\") {\n const deleteRanges = node.content.inlineChangeHighlights.filter((value) => value.type === \"DELETE_CONTENT\").map((highlight) => highlight.range);\n const irrelevantRanges = node.content.inlineIrrlevantRanges.map((irrelevantRagne) => irrelevantRagne.range);\n const sortedRanges = rangesSortByEnd(deleteRanges.concat(irrelevantRanges)).reverse();\n\n return sortedRanges.reduce((tempIndex, range) => isInOrEndRange(range, tempIndex) ? range.start : tempIndex, index);\n } else {\n return index;\n }\n}\n\nexport default function deleteAtSelection({\n data,\n variantDataById,\n currentMenu,\n addChanges,\n setCurrentDocSelection,\n nodeDefinitions,\n}: EditActionContext) {\n const currentDocSelection = selection.getDocSelection();\n\n if (!currentDocSelection || currentMenu) { return false; }\n\n const dataToUse = currentDocSelection.variantId ? variantDataById[currentDocSelection.variantId] : data;\n\n const {\n uid: startUID,\n contentKey: startKey,\n index: startIndex,\n } = currentDocSelection.start;\n\n let deletionSelection = currentDocSelection;\n let newSelection = selection.collapseDocSelectionToStart(currentDocSelection);\n\n if (selection.isCollapsed(currentDocSelection)) {\n const startNodePath = findNodePathByUid(dataToUse, startUID);\n const startNodeIndex: any = R.last(startNodePath); // TODO: Remove any\n const startNode = findNodeAtPath(dataToUse, startNodePath);\n\n const adjustedIndex = backIndexUntillNotInDeletionRange(startNode, deletionSelection.start.index)\n deletionSelection = selection.newCollapsedDocSelection(deletionSelection.start.uid, deletionSelection.start.contentKey, adjustedIndex)\n newSelection = selection.collapseDocSelectionToStart(deletionSelection);\n\n deletionSelection = selection.shiftDocSelectionStartBy(deletionSelection, -1);\n\n if (startNode.type === \"paragraph\") {\n if (deletionSelection.start.index < 0) {\n const parentNode = findNodeParentByUid(dataToUse, startUID);\n const previousSibling = findNodeSiblingBeforeByPath(dataToUse, startNodePath);\n\n if (startNodeIndex === 0 && parentNode.type === \"listItem\") {\n if (parentNode.blockChangeHighlight?.type !== \"DELETE_CONTENT\") {\n // DELETE LIST ITEM INSTEAD OF THE PARAGRAPH\n deletionSelection = selection.shiftDocSelectionBy(deletionSelection, -1);\n }\n } else if (previousSibling?.type === \"paragraph\") {\n const effectiveLength = previousSibling.content.text.replace(/\\#$/, '').length\n newSelection = selection.newCollapsedDocSelection(previousSibling.uid, \"content\", effectiveLength);\n } else {\n // COULD MOVE SELECITON TO LINE BEFORE?\n return true;\n }\n } else {\n newSelection = selection.shiftDocSelectionBy(newSelection, -1)\n }\n } else {\n if (startIndex === 0) {\n // COULD MOVE SELECTION TO LINE BEFORE?\n return true;\n } else {\n newSelection = selection.shiftDocSelectionBy(newSelection, -1)\n }\n }\n }\n\n batch(() => {\n addChanges([newChangeTextAndNodesChange(deletionSelection, null)], currentDocSelection.variantId); // TODO: Convert null to styledText\n setCurrentDocSelection(newSelection);\n });\n\n return true;\n}\n","import * as R from \"ramda\";\n\nimport * as rangeInlineJSON from \"../Functions/RangeInlineJSON\";\n\nimport {\n findNodePathByUid,\n findNodeSiblingAfterByPath,\n findNodeSiblingBeforeByPath,\n findNodeParentByUid,\n findNodeByUid,\n} from \"../Functions/base\";\n\nexport function isDeletableNode(node: DocBlockNode<unknown>, contentKey: ContentKey) {\n switch (node.type) {\n case \"paragraph\":\n case \"listItem\":\n case \"multipleChoiceAnswer\":\n return true;\n default:\n return !contentKey;\n }\n}\n\nexport function blockNodeFlowContentKey(node: DocBlockNode<unknown>) {\n switch (node.type) {\n case \"paragraph\":\n case \"listItem\":\n case \"multipleChoiceAnswer\":\n case \"matchItem\":\n return \"content\";\n default:\n return null;\n }\n}\n\nexport function afterReturnNodeFor(nodeDefinitions: NodeDefinitions, node: DocBlockNode<unknown>) {\n switch (node.type) {\n case \"paragraph\":\n case \"listItem\":\n case \"multipleChoiceAnswer\":\n case \"matchItem\":\n const newNode = nodeDefinitions[node.type].generate(nodeDefinitions, {});\n\n return newNode;\n default:\n return null;\n }\n}\n\nexport function isFlowNode(node: DocBlockNode<unknown>) {\n return !!blockNodeFlowContentKey(node);\n}\n\nexport function addTextToBlockNodeFlow(node, text: string) {\n const nodeFlowKey = blockNodeFlowContentKey(node);\n if (nodeFlowKey) {\n node = R.assoc(nodeFlowKey, rangeInlineJSON.rangeInlineJSONWithText(text), node);\n }\n\n return node;\n}\n\nexport function genrateNodesForAfterReturnNodeWithTextLines(nodeDefinitions: NodeDefinitions, node: DocBlockNode<unknown>, lines: string[]) {\n return lines.map((line) => {\n const newNode = afterReturnNodeFor(nodeDefinitions, node);\n return addTextToBlockNodeFlow(newNode, line);\n });\n}\n\nexport function findPreviousFlowNodeByTest<T>(data: DocBlockNode<T>, uid: string, tester: (node: DocBlockNode<T>) => boolean) {\n const nodePath = findNodePathByUid(data, uid);\n const beforeNode = findNodeSiblingBeforeByPath(data, nodePath);\n\n if (beforeNode) {\n const lastDecendentFlowNodeByTest = findLastDecendentFlowNodeByTest(data, beforeNode.uid, tester);\n\n if (lastDecendentFlowNodeByTest) {\n return lastDecendentFlowNodeByTest\n } else {\n return findPreviousFlowNodeByTest(data, beforeNode.uid, tester);\n }\n }\n\n const parentNode = findNodeParentByUid(data, uid);\n\n if (!isFlowContainer(parentNode)) {\n return findPreviousFlowNodeByTest(data, parentNode.uid, tester);\n } else if (tester(parentNode)) {\n return parentNode;\n } else {\n return undefined;\n }\n}\n\nexport function findNextFlowNodeByTest<T>(data: DocBlockNode<T>, uid: string, tester: (node: DocBlockNode<T>) => boolean) {\n const nodePath = findNodePathByUid(data, uid);\n const afterNode = findNodeSiblingAfterByPath(data, nodePath);\n\n if (afterNode) {\n const firstDecendentFlowNodeByTest = findFirstDecendentFlowNodeByTest(data, afterNode.uid, tester);\n\n if (firstDecendentFlowNodeByTest) {\n return firstDecendentFlowNodeByTest\n } else {\n return findNextFlowNodeByTest(data, afterNode.uid, tester);\n }\n }\n\n const parentNode = findNodeParentByUid(data, uid);\n\n if (!isFlowContainer(parentNode)) {\n return findNextFlowNodeByTest(data, parentNode.uid, tester);\n } else if (tester(parentNode)) {\n return parentNode;\n } else {\n return undefined;\n }\n}\n\nexport function findLastDecendentFlowNodeByTest<T>(data: DocBlockNode<T>, uid: string, tester: (node: DocBlockNode<T>) => boolean) {\n const node = findNodeByUid(data, uid);\n\n if (tester(node)) {\n return node;\n }\n\n const blockKeys = flowBlockKeys(node);\n return blockKeys.reduceRight((flowNodeA, blockKey) => {\n return flowNodeA || node[blockKey].reduceRight((flowNodeB, childNode) => flowNodeB || findLastDecendentFlowNodeByTest(data, childNode.uid, tester))\n }, undefined)\n}\n\nexport function findFirstDecendentFlowNodeByTest<T>(data: DocBlockNode<T>, uid: string, tester: (node: DocBlockNode<T>) => boolean) {\n const node = findNodeByUid(data, uid);\n\n if (tester(node)) {\n return node;\n }\n\n const blockKeys = flowBlockKeys(node);\n return blockKeys.reduce((flowNodeA, blockKey) => {\n return flowNodeA || node[blockKey].reduce((flowNodeB, childNode) => flowNodeB || findLastDecendentFlowNodeByTest(data, childNode.uid, tester))\n }, undefined)\n}\n\nexport function findPreviousInlineFlowNode<T>(data: DocBlockNode<T>, uid: string) {\n return findPreviousFlowNodeByTest(data, uid, node => isFlowInline(node));\n}\n\nexport function findNextInlineFlowNode<T>(data: DocBlockNode<T>, uid: string) {\n return findNextFlowNodeByTest(data, uid, node => isFlowInline(node));\n}\n\nexport function blockContentKeys(node: DocBlockNode<unknown>) {\n switch (node.type) {\n case \"cdqQuestion\":\n case \"listItem\":\n case \"multipleChoice\":\n case \"numberedList\":\n case \"regularList\":\n case \"section\":\n case \"tableCell\":\n return [\"content\"];\n case \"categoryMatcher\":\n return [\"contentItems\"];\n // return [\"contentItems\", \"contentCategories\"];\n case \"imageGallery\":\n return [\"images\"];\n case \"table\":\n return [\"rows\"];\n case \"tableRow\":\n return [\"cells\"];\n case \"audio\":\n case \"button\":\n case \"cdqFeature\":\n case \"cdqQuestionAnswer\":\n case \"checkbox\":\n case \"horizontalRule\":\n case \"image\":\n case \"matchItem\":\n case \"multipleChoiceAnswer\":\n case \"paragraph\":\n case \"ratingBar\":\n case \"textInput\":\n case \"video\":\n default:\n return [];\n }\n}\n\nexport function inlineContentKeys(node: DocBlockNode<unknown>) {\n switch (node.type) {\n case \"audio\":\n case \"button\":\n case \"image\":\n case \"section\":\n case \"video\":\n return [\"title\"];\n case \"cdqFeature\":\n case \"cdqQuestionAnswer\":\n case \"checkbox\":\n case \"matchItem\":\n case \"multipleChoiceAnswer\":\n case \"paragraph\":\n return [\"content\"];\n case \"categoryMatcher\":\n case \"cdqQuestion\":\n case \"horizontalRule\":\n case \"imageGallery\":\n case \"listItem\":\n case \"multipleChoice\":\n case \"numberedList\":\n case \"ratingBar\":\n case \"regularList\":\n case \"table\":\n case \"tableCell\":\n case \"tableRow\":\n case \"textInput\":\n default:\n return [];\n }\n}\n\nexport function flowContainerContentKeys(node: DocBlockNode<unknown>) {\n switch (node.type) {\n case \"section\":\n case \"tableCell\":\n return [\"content\"];\n case \"categoryMatcher\":\n case \"cdqQuestion\":\n case \"multipleChoice\":\n // COULD BE\n case \"audio\":\n case \"button\":\n case \"cdqFeature\":\n case \"cdqQuestionAnswer\":\n case \"checkbox\":\n case \"horizontalRule\":\n case \"image\":\n case \"imageGallery\":\n case \"listItem\":\n case \"matchItem\":\n case \"multipleChoiceAnswer\":\n case \"numberedList\":\n case \"paragraph\":\n case \"ratingBar\":\n case \"regularList\":\n case \"table\":\n case \"tableRow\":\n case \"textInput\":\n case \"video\":\n default:\n return [];\n }\n}\n\nexport function flowBlockKeys(node: DocBlockNode<unknown>) {\n switch (node.type) {\n case \"listItem\":\n case \"numberedList\":\n case \"regularList\":\n case \"section\":\n case \"tableCell\":\n return [\"content\"];\n case \"multipleChoice\":\n case \"cdqQuestion\":\n case \"categoryMatcher\":\n // Should these be flow or not\n case \"audio\":\n case \"button\":\n case \"cdqFeature\":\n case \"cdqQuestionAnswer\":\n case \"checkbox\":\n case \"horizontalRule\":\n case \"image\":\n case \"imageGallery\":\n case \"matchItem\":\n case \"multipleChoiceAnswer\":\n case \"paragraph\":\n case \"ratingBar\":\n case \"table\":\n case \"tableRow\":\n case \"textInput\":\n case \"video\":\n default:\n return [];\n }\n}\n\nexport function flowInlineKeys(node: DocBlockNode<unknown>) {\n switch (node.type) {\n case \"checkbox\":\n case \"paragraph\":\n case \"cdqFeature\":\n case \"cdqQuestionAnswer\":\n case \"matchItem\":\n case \"multipleChoiceAnswer\":\n return [\"content\"];\n case \"audio\":\n case \"button\":\n case \"categoryMatcher\":\n case \"cdqQuestion\":\n case \"horizontalRule\":\n case \"image\":\n case \"imageGallery\":\n case \"listItem\":\n case \"multipleChoice\":\n case \"numberedList\":\n case \"ratingBar\":\n case \"regularList\":\n case \"section\":\n case \"table\":\n case \"tableCell\":\n case \"tableRow\":\n case \"textInput\":\n case \"video\":\n default:\n return [];\n }\n}\n\nexport function isolatedInlineKeys(node: DocBlockNode<unknown>) {\n switch (node.type) {\n case \"section\":\n case \"image\":\n case \"video\":\n case \"audio\":\n case \"button\":\n return [\"title\"];\n case \"cdqFeature\":\n case \"cdqQuestionAnswer\":\n case \"matchItem\":\n case \"multipleChoiceAnswer\":\n case \"categoryMatcher\":\n case \"cdqQuestion\":\n case \"checkbox\":\n case \"horizontalRule\":\n case \"imageGallery\":\n case \"listItem\":\n case \"multipleChoice\":\n case \"numberedList\":\n case \"paragraph\":\n case \"ratingBar\":\n case \"regularList\":\n case \"table\":\n case \"tableCell\":\n case \"tableRow\":\n case \"textInput\":\n default:\n return [];\n }\n}\n\nexport function isFlowContainer(node: DocBlockNode<unknown>) {\n return flowContainerContentKeys(node).length > 0;\n}\n\nexport function isFlowBlock(node: DocBlockNode<unknown>) {\n return flowBlockKeys(node).length > 0;\n}\n\nexport function isFlowInline(node: DocBlockNode<unknown>) {\n return flowInlineKeys(node).length > 0;\n}\n\nexport function isIsolatedInline(node: DocBlockNode<unknown>) {\n return isolatedInlineKeys(node).length > 0;\n}\n","import { batch } from \"react-redux\";\n\nimport {\n newChangeTextAndNodesChange\n} from \"../changes\";\n\nimport * as selection from \"../selection\";\n\nimport * as R from \"ramda\";\n\nimport {\n findNodePathByUid,\n findNodeAtPath,\n} from \"../Functions/base\";\n\nimport {\n genrateNodesForAfterReturnNodeWithTextLines,\n} from \"./shared\";\n\nexport default function pasteAtSelection(dataTransfer, {\n data,\n variantDataById,\n currentMenu,\n addChanges,\n setCurrentDocSelection,\n nodeDefinitions,\n}: EditActionContext) {\n const currentDocSelection = selection.getDocSelection();\n\n if (!currentDocSelection || currentMenu) { return false; }\n\n const dataToUse = currentDocSelection.variantId ? variantDataById[currentDocSelection.variantId] : data;\n\n const {\n uid: startUID,\n contentKey: startKey,\n index: startIndex,\n } = currentDocSelection.start;\n\n let newStyledText = {\n text: \"\",\n styleRanges: [],\n }\n let newNodes = [];\n\n let newSelectionOffset = 0;\n const dataTypes = dataTransfer.types;\n if (dataTypes.includes(\"text/plain\")) {\n const pasteText = dataTransfer.getData(\"text/plain\");\n\n const pasteTextLines = clipboardPlainTextToTextLines(pasteText);\n\n const pasteStartText = pasteTextLines[0];\n newStyledText = {\n text: pasteStartText,\n styleRanges: []\n }\n\n newSelectionOffset = pasteStartText.length;\n\n let pasteRestLines = R.tail(pasteTextLines);\n\n if (pasteRestLines.length > 0) {\n const startNodePath = findNodePathByUid(dataToUse, startUID);\n const startNode = findNodeAtPath(dataToUse, startNodePath);\n\n newNodes = genrateNodesForAfterReturnNodeWithTextLines(nodeDefinitions, startNode, pasteRestLines);\n }\n } else {\n return false\n }\n\n if (newStyledText.text.length === 0 && newNodes.length === 0) { return false; }\n\n if (!selection.isInlineBoundry(currentDocSelection.start)) { return true; }\n\n batch(() => {\n addChanges([newChangeTextAndNodesChange(currentDocSelection, newStyledText, newNodes)], currentDocSelection.variantId);\n setCurrentDocSelection(selection.shiftDocSelectionBy(selection.collapseDocSelectionToStart(currentDocSelection), newSelectionOffset));\n });\n\n return true;\n}\n\nfunction clipboardHtmlToTextLines(htmlDataString: string) {\n const parser = new DOMParser();\n const htmlDoc = parser.parseFromString(htmlDataString, 'text/html');\n}\n\nfunction clipboardPlainTextToTextLines(plainText: string) {\n let lines = plainText.split(/\\r?\\n/);\n lines = lines.map((line) => R.trim(line.replace(/[\\n\\r\\s]+/gm, \" \")));\n return lines.filter((line) => line !== \"\" && line != \" \");\n}\n","import { batch } from \"react-redux\";\n\nimport {\n newAddNodeChange,\n newChangeTextAndNodesChange,\n} from \"../changes\";\n\nimport { getSubType } from \"../Define/base\";\n\nimport * as selection from \"../selection\";\n\nimport * as R from \"ramda\";\n\nimport {\n findNodePathByUid,\n findNodeAtPath,\n nodeInlineNotFlowContentKeys,\n nodeParentPathFromPath,\n} from \"../Functions/base\";\n\nimport {\n blockNodeFlowContentKey,\n flowInlineKeys,\n flowBlockKeys,\n} from \"./shared\";\n\nimport { convertAllInlineNodesToRangeJSON } from '../Convert/RangeInlineJSON'\n\nimport * as rangeInlineJSON from \"../Functions/RangeInlineJSON\";\n\nexport default function returnAtSelection({\n data,\n variantDataById,\n currentMenu,\n addChanges,\n setCurrentDocSelection,\n nodeDefinitions,\n}: EditActionContext) {\n let currentDocSelection = selection.getDocSelection();\n\n if (!currentDocSelection || currentMenu) { return false; }\n\n const dataToUse = currentDocSelection.variantId ? variantDataById[currentDocSelection.variantId] : data;\n\n const {\n uid: startUID,\n contentKey: startKey,\n index: startIndex,\n } = currentDocSelection.start;\n\n const startNodePath = findNodePathByUid(dataToUse, startUID);\n const startNode = findNodeAtPath(dataToUse, startNodePath);\n\n const startParentNodePath = nodeParentPathFromPath(dataToUse, startNodePath);\n const startParentNode = findNodeAtPath(dataToUse, startParentNodePath);\n\n const newNodes = [convertAllInlineNodesToRangeJSON(newNodeOnReturn(startNode, startParentNode, nodeDefinitions))]\n\n const selectionNode = findFirstInlineFlowNode(R.last(newNodes));\n const newSelection = selectionNode ? selection.newCollapsedDocSelection(selectionNode.uid, blockNodeFlowContentKey(selectionNode), 0) : undefined\n\n if (nodeInlineNotFlowContentKeys(startNode).includes(startKey)) {\n const newKey = R.nth(-2, startNodePath);\n const oldIndex: number = R.nth(-1, startNodePath);\n const newIndex = oldIndex + 1;\n\n batch(() => {\n addChanges([newAddNodeChange(R.last(newNodes), startParentNode.uid, newKey, newIndex)], currentDocSelection.variantId);\n setCurrentDocSelection(newSelection);\n });\n } else {\n // EXCEPTION TO ALLOW LIST ITEMS TO KEEP UID WHEN RETURN AT START\n if (\n selection.isCollapsed(currentDocSelection) &&\n startIndex === 0 &&\n startParentNode?.type === \"listItem\" &&\n newNodes.length === 1 &&\n newNodes[0]?.type === \"listItem\"\n ) {\n currentDocSelection = selection.shiftDocSelectionBy(currentDocSelection, -2)\n }\n\n batch(() => {\n addChanges([newChangeTextAndNodesChange(currentDocSelection, undefined, newNodes)], currentDocSelection.variantId);\n setCurrentDocSelection(newSelection);\n });\n }\n\n return true;\n}\n\nfunction newNodeOnReturn(node: DocBlockNode<unknown>, parent, nodeDefinitions: NodeDefinitions) {\n let newNodeType;\n if (parent?.type === \"listItem\") {\n newNodeType = \"listItem\"\n } else if(node?.type === \"button\") {\n newNodeType = \"paragraph\"\n } else {\n newNodeType = getSubType(node);\n }\n\n const newNode = nodeDefinitions[newNodeType].generate(nodeDefinitions, {});\n\n if (newNode.type === \"listItem\") {\n newNode.listUid = parent.listUid;\n newNode.listIndentation = parent.listIndentation;\n }\n\n return newNode;\n}\n\nfunction findFirstInlineFlowNode(node: DocBlockNode<InlineNode>) {\n const inlineKeys = flowInlineKeys(node);\n\n if (inlineKeys.length > 0) {\n return node;\n }\n\n const blockKeys = flowBlockKeys(node);\n\n if (blockKeys.length > 0) {\n const childNode = node[blockKeys[0]][0]\n\n if (childNode) {\n return findFirstInlineFlowNode(childNode)\n }\n }\n\n return null\n}\n","import * as React from \"react\";\nimport { bindActionCreators, Dispatch } from \"redux\";\nimport { connect } from \"react-redux\";\nimport { HotKeys } from \"react-hotkeys\";\nimport 'react-confirm-alert/src/react-confirm-alert.css'\nimport { Beforeunload } from 'react-beforeunload';\n\nimport { xor, mapKeys, upperFirst } from \"lodash\";\nimport * as R from \"ramda\";\nimport axios from \"axios\";\nimport memoize from \"memoize-weak\";\n\nimport * as Bowser from \"bowser\";\n\nimport ActiveUserObserver from \"../../helpers/Doc/Observers/activeUserObserver\";\nimport BeforeInputObserver from \"../../helpers/Doc/Observers/beforeInputObserver\";\nimport CopyObserver from \"../../helpers/Doc/Observers/copyObserver\";\nimport MouseClickObserver from \"../../helpers/Doc/Observers/mouseClickObserver\";\nimport OfflineObserver from \"../../helpers/Doc/Observers/offlineObserver\";\nimport SelectionObserver from \"../../helpers/Doc/Observers/selectionObserver\";\n\nimport generateUUID from \"../../helpers/generateUUID\";\nimport { full_url } from \"../../helpers/url\";\n\nimport { weakMemoizedReflow } from \"../../helpers/Doc/Reflow\";\n\nimport * as selection from \"../../helpers/Doc/selection\";\n\nimport { organizeMediaAssets } from \"../../helpers/media_manager\";\n\nimport {\n weakMemoizedApplyAllChanges,\n weakMemoizedSetBlockNodesContainsSelection,\n weakMemoizedAttachCurrentMenuToNode,\n changesDisplayModes,\n newPublishChange,\n newSetKeyValueChange,\n clotheChange,\n addChangeToDoc,\n computeSpacedChangeSummaries,\n findFlatFlowNodesWithFlowRange,\n translateSelectionToFlowRange,\n flatFlowToTreeFlow,\n weakMemoizedConvertAllToFlatFlowAndInlineRangeJSON,\n stripExtraChangeDataFields,\n} from \"../../helpers/Doc/changes\";\n\nimport {\n publishVersionId,\n ongoingMaintenaceVersionId,\n determineVersionType,\n determineVariantTypeFromVersionType,\n variantKeyFromVariantVersion,\n} from \"../../helpers/Doc/version_types\";\n\nimport * as undoRedo from \"../../helpers/Doc/undoRedoState\";\n\nimport {\n findNodeLineageByUid,\n findNodeByUid,\n editNodeWithUIDKeyValue,\n findNodePathByUid,\n setAtPath,\n findAtPath,\n findNodes,\n findNodesPaths,\n adjustSelectionStartToIncludeListItemIfNeeded,\n} from \"../../helpers/Doc/Functions/base\";\n\nimport { postDocumentUserLog } from \"../../helpers/DocumentUserLog\";\n\nimport * as RangeInlineJSON from \"../../helpers/Doc/Functions/RangeInlineJSON\";\n\nimport {\n nodeDefinitions,\n} from \"../../helpers/Doc/Define/base\";\n\nimport * as DocConvertHTML from \"../../helpers/Doc/Convert/HTML\";\n\nimport {generateDocumentActions} from \"../../reducers/documents\";\nimport {generateDocumentUserStateActions} from \"../../reducers/documentUserStates\";\nimport {\n generateLearningObjectiveActions,\n learningObjectiveFromStatePlus,\n} from \"../../reducers/learningObjectives\";\nimport {generateReusableObjectActions} from \"../../reducers/reusableObjects\";\nimport {\n generateVariantActions,\n variantFromStatePlus,\n} from \"../../reducers/variants\";\nimport {generateVersionActions} from \"../../reducers/versions\";\nimport {reasoningToolActionCreators} from \"../../reducers/ui/reasoningTool\";\n\nimport { addDocumentUserState } from \"../../helpers/Doc/documentUserState\";\n\nimport {\n weakMemoizedGenerateCurrentDocument,\n weakMemoizedGenerateCurrentUser,\n weakMemoizedGenerateCurrentVersion,\n weakMemoizedGenerateDisplayContext,\n weakMemoizedGenerateEditingContext,\n weakMemoizedGenerateEditingContextAllFalse,\n weakMemoizedGenerateIntegrationInfo,\n} from \"../../helpers/Doc/context\";\n\nimport { scrollToElementWithUid } from \"../../helpers/Doc/scrollTo\";\n\nimport {\n NEW_SUMMARY_OF_EDITS,\n NEW_COMMENT_THREAD,\n EDIT_COMMENT,\n FIND_AND_REPLACE,\n EDIT_LINK,\n ADD_NODE,\n TEXT_COLOR_PICKER,\n} from \"../../helpers/Doc/menu\"\n\nimport deleteAtSelection from \"../../helpers/Doc/EditActions/delete\";\nimport insertAtSelection from \"../../helpers/Doc/EditActions/insert\";\nimport pasteAtSelection from \"../../helpers/Doc/EditActions/paste\";\nimport returnAtSelection from \"../../helpers/Doc/EditActions/return\";\nimport shiftTabAtSelection from \"../../helpers/Doc/EditActions/shiftTab\";\nimport tabAtSelection from \"../../helpers/Doc/EditActions/tab\";\nimport toggleStyleAtSelection from \"../../helpers/Doc/EditActions/toggleStyle\";\n\nimport { displayModes } from \"../../helpers/Doc/displayMode\";\nimport { trackChangesEditModes } from \"../../helpers/Doc/trackChangesEditMode\";\n\nimport { POSSIBLE_RO_CLASSES } from \"../../helpers/RO/content_type\";\n\nimport NewEditDoc from \"./Component\";\n\nimport GenLoadingSpinner from \"../Gen/LoadingSpinner/component\";\n\nfunction replaceInObjectKeys(object, toReplace: string, replacement: string) {\n return mapKeys(object, (val, key) => key.replace(toReplace, replacement).replace(upperFirst(toReplace), upperFirst(replacement)));\n}\n\nfunction computedGenerateDocumentActionCreators(docType?: DocType) { // TODO: Change to \"ReusableObject\" | \"Document\"\n if (docType === \"ReusableObject\") {\n return ((id) => replaceInObjectKeys(generateReusableObjectActions(id), \"reusableObject\", \"document\")) as typeof generateDocumentActions;\n } else {\n return generateDocumentActions;\n }\n}\n\nfunction computedGenerateVersionActionCreators(docType?: DocType) { // TODO: Change to \"ReusableObject\" | \"Document\"\n if (docType === \"ReusableObject\") {\n return ((id) => replaceInObjectKeys(generateVariantActions(id), \"variant\", \"version\")) as typeof generateVersionActions;\n } else {\n return generateVersionActions;\n }\n}\n\ninterface OwnProps {\n currentUser: User;\n documentId: number;\n isAdmin: boolean;\n permissions: AqPermissions;\n versionId: number;\n\n activeMemberId?: number;\n activeMemberName?: string;\n activeUserId?: number;\n assessmentQuestion?: AssessmentQuestion;\n assessmentQuestionEditingData?: AssessmentQuestionEditingData;\n assessmentQuestionSignatureVersion?: Version;\n assessmentQuestionSignatureVersionId?: number;\n assessmentQuestionStatistics?: Array<AssessmentStatistic>;\n assessmentStatus?: string;\n cableApp?: {cable: ActionCable.Consumer};\n cciStatusOptions?: Array<CciStatusOptions>;\n checklistContents?: Array<ChecklistContent>;\n currentAssignmentId?: number;\n currentGroupRoleDefinition?: GroupRoleDefinition;\n defaultChangesDisplayMode?: ChangesDisplayMode;\n displayUid?: string;\n docType?: DocType;\n documentSetId?: number;\n editors?: Array<EditorSpecialType>;\n enableAiSummaryStatementFeedback?: boolean;\n featureFlag?: FeatureFlag;\n isEditor?: boolean;\n isEmbeded?: boolean;\n isNotGated?: boolean;\n mappingData?: MappingContext;\n nextVersionId?: number;\n possiblePrerequisiteDocuments?: Array<Document>;\n projectProductionAssociate?: string;\n scrollable_uids?: Array<string>;\n sessionId?: number;\n styleGuideId?: number;\n shouldShowEditor?: boolean;\n usedAvailableForm?: boolean;\n allLearningObjectiveOptions?: Array<{id: number, name: string, documents: Array<{id: number, title: string}>}>;\n}\n\nfunction findVariantPlaceholderNodePaths<T>(data: DocSectionType<T>) {\n return findNodesPaths(data, (node) => node.type == \"variantPlaceholder\")\n}\n\nfunction generateChangeData(variant: Variant | Version) {\n if (!variant.changeData || R.isEmpty(variant.changeData)) {\n return weakMemoizedConvertAllToFlatFlowAndInlineRangeJSON(variant.data);\n } else {\n return variant.changeData\n }\n}\n\nfunction applyChangesToVariant(variant: Variant | Version, publishVariantId: number, changesDisplayMode: ChangesDisplayMode, useChangeData: boolean) {\n if (variant?.data) {\n if (useChangeData && variant.id !== publishVariantId) {\n return weakMemoizedApplyAllChanges(generateChangeData(variant), changesDisplayMode);\n } else {\n return variant.data;\n }\n }\n}\n\nconst mapStateToProps = (state: ReducerState, ownProps: OwnProps) => {\n const {\n docType,\n currentUser,\n documentId,\n versionId,\n assessmentQuestionSignatureVersionId,\n } = ownProps;\n\n const generateUsableDocumentActions = computedGenerateDocumentActionCreators(docType);\n const usableDocumentActionCreators = generateUsableDocumentActions(documentId);\n\n const documentProps = {\n document: usableDocumentActionCreators.documentSyncDataFromState(state),\n documentSyncMeta: usableDocumentActionCreators.documentSyncMetaFromState(state),\n documentExtraData: usableDocumentActionCreators.documentExtraDataFromState(state),\n };\n\n const selectedVersionId = documentProps.documentExtraData?.versionId || versionId;\n\n const generateUsableVersionActions = computedGenerateVersionActionCreators(docType);\n const usableVersionActionCreators = generateUsableVersionActions(selectedVersionId);\n\n const versionProps = {\n version: usableVersionActionCreators.versionMergedDataFromState(state),\n versionSyncMeta: usableVersionActionCreators.versionSyncMetaFromState(state),\n versionEditData: usableVersionActionCreators.versionEditDataFromState(state),\n versionExtraData: usableVersionActionCreators.versionExtraDataFromState(state),\n };\n\n let changesDisplayMode: ChangesDisplayMode;\n if (versionProps.version?.data) {\n if (ownProps.shouldShowEditor || ownProps.defaultChangesDisplayMode) {\n if (versionProps.version.id === documentProps?.document?.publishVersionId) {\n changesDisplayMode = changesDisplayModes.ONLY_PUBLISHED;\n } else {\n changesDisplayMode = versionProps.versionExtraData?.changesDisplayMode || ownProps.defaultChangesDisplayMode || changesDisplayModes.HIGHLIGHT_SUGGESTIONS;\n }\n } else {\n changesDisplayMode = null // TODO: Remove null\n }\n }\n\n const useChangeData = ownProps.shouldShowEditor || !!ownProps.defaultChangesDisplayMode\n let mergedData = applyChangesToVariant(versionProps.version, documentProps?.document?.publishVersionId, changesDisplayMode, useChangeData)\n\n const variantPlaceholderPaths = mergedData ? findVariantPlaceholderNodePaths(mergedData) : []\n const learningObjectivePlaceholderPaths = variantPlaceholderPaths.filter((vpPath) => findAtPath(mergedData, vpPath).variantableType === \"LearningObjective\").filter((path) => !path.includes(\"addDeleteChanges\"))\n const learningObjectiveNodePathsById = Object.fromEntries(learningObjectivePlaceholderPaths.map((loPlaceholderPath) => [findAtPath(mergedData, loPlaceholderPath).variantableId, loPlaceholderPath]))\n const learningObjectiveIds = Object.keys(learningObjectiveNodePathsById)\n const localLearningObjectives: Array<ReducerItemWithMerged<LearningObjective, LearningObjectiveExtraData>> = learningObjectiveIds.map((learningObjectiveId) => learningObjectiveFromStatePlus(learningObjectiveId, state))\n const learningObjectives = localLearningObjectives;\n\n let localLearningObjectiveVariants: Array<ReducerItemWithMerged<Variant, VariantExtraData>> = []\n let variants: Array<ReducerItemWithMerged<Variant, VariantExtraData>> = []\n const variantMergedDataById: Record<number, MergedData> = {}\n if (documentProps.document) {\n const versionType = determineVersionType(documentProps.document as any, selectedVersionId); // TODO: Remove any\n const variantType = determineVariantTypeFromVersionType(versionType);\n const variantKey = variantKeyFromVariantVersion(variantType);\n\n localLearningObjectiveVariants = localLearningObjectives\n .filter((learningObjective) => learningObjective?.mergedData?.[variantKey])\n .map((learningObjective) => variantFromStatePlus(learningObjective?.mergedData?.[variantKey], state))\n\n localLearningObjectiveVariants.forEach((learningObjectiveVariant) => {\n if (learningObjectiveVariant?.mergedData) {\n const parentLearningObjective = localLearningObjectives.find((lo) => lo?.mergedData?.[variantKey] === learningObjectiveVariant.id)\n const learningObjectiveNodePath = learningObjectiveNodePathsById[parentLearningObjective.id]\n const appliedData = applyChangesToVariant(learningObjectiveVariant.mergedData, parentLearningObjective?.mergedData?.publishVariantId, changesDisplayMode, useChangeData)\n const varaintPlaceholder = findAtPath(mergedData, learningObjectiveNodePath)\n\n variantMergedDataById[learningObjectiveVariant.id] = appliedData\n\n mergedData = setAtPath(mergedData, learningObjectiveNodePath, appliedData)\n mergedData = setAtPath(mergedData, learningObjectiveNodePath.concat(['variantId']), learningObjectiveVariant.id)\n mergedData = setAtPath(mergedData, learningObjectiveNodePath.concat(['variantUid']), varaintPlaceholder.uid)\n }\n })\n\n variants = localLearningObjectiveVariants;\n }\n\n const unsavedChanges = !!versionProps.versionEditData?.changeData || !!versionProps.versionEditData?.coverImage || variants.some((variant) => variant.editData?.changeData)\n\n const dusId = docType === \"ReusableObject\" || !currentUser ? \"TEMP_ID\" : `${documentId}/${currentUser.id}` // TODO TEMP_ID\n const documentUserStateActions = generateDocumentUserStateActions(dusId)\n const currentUserProps = {\n documentUserState: documentUserStateActions.documentUserStateMergedDataFromState(state),\n };\n\n const extraProps = docType !== \"ReusableObject\" ? { assessmentQuestionSignatureVersion: generateVersionActions(assessmentQuestionSignatureVersionId).versionSyncDataFromState(state) } : {}\n\n return {\n changesDisplayMode,\n mergedData,\n variantMergedDataById,\n variants,\n learningObjectives,\n selectedVersionId,\n unsavedChanges,\n ...documentProps,\n ...versionProps,\n ...currentUserProps,\n localLearningObjectives,\n localLearningObjectiveVariants,\n reasoningToolUi: state.ui.reasoningTool,\n getUploadCountByMediaType: (type: MediaType) => versionProps.versionExtraData[`${type}UploadCount`] || 0,\n ...extraProps,\n };\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch, ownProps: OwnProps) => {\n const {\n docType,\n } = ownProps;\n\n return {\n documentActions: (id: number) => bindActionCreators(computedGenerateDocumentActionCreators(docType)(id), dispatch),\n versionActions: (id: number) => bindActionCreators(computedGenerateVersionActionCreators(docType)(id), dispatch),\n documentUserStateActions: (id: number | string) => bindActionCreators(generateDocumentUserStateActions(id), dispatch),\n learningObjectiveActions: (id: number) => bindActionCreators(generateLearningObjectiveActions(id), dispatch),\n variantActionsGenerator: (id: number) => bindActionCreators(generateVariantActions(id), dispatch),\n reusableObjectActions: (id: number) => bindActionCreators(generateReusableObjectActions(id), dispatch),\n reasoningToolActions: bindActionCreators(reasoningToolActionCreators, dispatch),\n dispatch: dispatch,\n };\n};\n\nfunction sharedDocFunctions(dispatchProps: ReturnType<typeof mapDispatchToProps>, documentId: number, versionId: number, documentUserStateId: number | string, currentUser: User) {\n const basicFuncs = {\n variantActionsGenerator: dispatchProps.variantActionsGenerator,\n learningObjectiveActionsGenerator: dispatchProps.learningObjectiveActions,\n ...dispatchProps.documentActions(documentId),\n ...dispatchProps.versionActions(versionId),\n ...dispatchProps.documentUserStateActions(documentUserStateId),\n ...dispatchProps.reasoningToolActions,\n };\n\n return {\n ...basicFuncs,\n setDisplayMode: (mode: DisplayMode) => basicFuncs.setExtraDataVersion({displayMode: mode}),\n setCurrentDocSelection: (data: DocSelection) => {\n window.forceDocSelection = data;\n basicFuncs.setExtraDataVersion({\n currentDocSelection: data,\n newActiveStyles: [],\n newInactiveStyles: [],\n });\n selection.setDocSelection(data);\n },\n clearCurrentDocSelection: () => {\n selection.setDocSelection(undefined);\n basicFuncs.setExtraDataVersion({\n currentDocSelection: undefined,\n newActiveStyles: [],\n newInactiveStyles: [],\n });\n },\n setCurrentMenu: (menu, data = {}) => basicFuncs.setExtraDataVersion({currentMenu: {menu, ...data}}),\n closeCurrentMenu: () => basicFuncs.setExtraDataVersion({currentMenu: undefined}),\n setLocalClipboard: (data?: LocalClipboardData) => basicFuncs.setExtraDataVersion({localClipboard: data}),\n setIsMouseDown: (data?: boolean) => basicFuncs.setExtraDataVersion({isMouseDown: data}),\n setFindText: (data?: string) => basicFuncs.setExtraDataVersion({findText: data}),\n setNewActiveStyles: (data?: Array<StyleName>) => basicFuncs.setExtraDataVersion({newActiveStyles: data}),\n setNewInactiveStyles: (data?: Array<StyleName>) => basicFuncs.setExtraDataVersion({newInactiveStyles: data}),\n setReplaceText: (data?: string) => basicFuncs.setExtraDataVersion({replaceText: data}),\n setVersionId: (versionId: number) => basicFuncs.setExtraDataDocument({versionId}),\n setTrackChangesEditMode: (mode: TrackChangesEditMode) => basicFuncs.setExtraDataVersion({trackChangesEditMode: mode}),\n setChangesDisplayMode: (mode: ChangesDisplayMode) => basicFuncs.setExtraDataVersion({changesDisplayMode: mode}),\n setFocusedBookmarkUid: (uid: string) => basicFuncs.setExtraDataVersion({focusedBookmarkUid: uid}),\n setChangeSummaries: (changeSummaries: Array<OffsetChangeSummary>) => basicFuncs.setExtraDataVersion({changeSummaries: changeSummaries}),\n setAllowLearningObjectivesEdit: (allowLearningObjectivesEdit?: string) => basicFuncs.setExtraDataVersion({allowLearningObjectivesEdit}),\n changeUploadCountForMediaTypeByValue: (type: MediaType, uploadCountChange: number) => basicFuncs.setExtraDataWithFunctionVersion((extraData) => {\n const oldUploadCount = extraData[`${type}UploadCount`] || 0;\n return {...extraData,\n [`${type}UploadCount`]: oldUploadCount + uploadCountChange,\n };\n }),\n addChanges: (newChanges: Array<Change>, variantId?: number) => {\n const addChangesDispatch: any = (dispatch, getState) => { // TODO: REMOVE ANY\n const state = getState();\n\n const trackChangesEditMode = state.versions[versionId].extraData.trackChangesEditMode;\n\n const setAllDataWithFunction = variantId ?\n basicFuncs.variantActionsGenerator(variantId).setAllDataWithFunctionVariant :\n basicFuncs.setAllDataWithFunctionVersion\n\n setAllDataWithFunction((syncData, editData: Variant | Version, extraData: VariantExtraData | VersionExtraData) => {\n let oldChangeData = editData.changeData || syncData.changeData;\n\n if (!oldChangeData || R.isEmpty(oldChangeData)) {\n oldChangeData = weakMemoizedConvertAllToFlatFlowAndInlineRangeJSON(syncData.data);\n }\n\n // TODO didCompressAll\n const didCompressAll = false;\n\n const currentDocSelection = extraData.currentDocSelection;\n const newUndoRedoState = undoRedo.addToUndoStack(extraData.undoRedoState, {changeData: oldChangeData, currentDocSelection: currentDocSelection}, didCompressAll);\n\n const isSuggestingMode = trackChangesEditMode === trackChangesEditModes.SUGGESTING_MODE;\n\n const changeSetId = generateUUID();\n newChanges = newChanges.map((change) => ({...change, change_set_id: changeSetId}));\n const clothedChanges = newChanges.map((newChange) => clotheChange(newChange, currentUser, isSuggestingMode));\n const newChangeData = clothedChanges.reduce((doc, change) => addChangeToDoc(doc, change), oldChangeData);\n\n return {\n syncData,\n editData: {\n ...editData,\n changeData: newChangeData,\n },\n extraData: {\n ...extraData,\n undoRedoState: newUndoRedoState,\n },\n };\n });\n }\n\n dispatchProps.dispatch(addChangesDispatch)\n },\n undo: () => {\n basicFuncs.setAllDataWithFunctionVersion((syncData, editData, extraData) => {\n const changeData = editData.changeData || syncData.changeData;\n const undoRedoState = extraData.undoRedoState;\n const currentDocSelection = extraData.currentDocSelection;\n\n const [returnedState, newUndoRedoState] = undoRedo.undo(\n undoRedoState,\n {\n changeData: changeData,\n currentDocSelection: currentDocSelection,\n },\n );\n\n selection.setDocSelection(returnedState.currentDocSelection);\n\n return {\n syncData,\n editData: {\n ...editData,\n changeData: returnedState.changeData,\n },\n extraData: {\n ...extraData,\n undoRedoState: newUndoRedoState,\n currentDocSelection: returnedState.currentDocSelection,\n newActiveStyles: [],\n newInactiveStyles: [],\n },\n };\n });\n },\n redo: () => {\n basicFuncs.setAllDataWithFunctionVersion((syncData, editData, extraData) => {\n const changeData = editData.changeData || syncData.changeData;\n const undoRedoState = extraData.undoRedoState;\n const currentDocSelection = extraData.currentDocSelection;\n\n const [returnedState, newUndoRedoState] = undoRedo.redo(\n undoRedoState,\n {\n changeData: changeData,\n currentDocSelection: currentDocSelection,\n },\n );\n\n selection.setDocSelection(returnedState.currentDocSelection);\n\n return {\n syncData,\n editData: {\n ...editData,\n changeData: returnedState.changeData,\n },\n extraData: {\n ...extraData,\n undoRedoState: newUndoRedoState,\n currentDocSelection: returnedState.currentDocSelection,\n newActiveStyles: [],\n newInactiveStyles: [],\n },\n };\n });\n },\n };\n}\n\nconst weakMemoizedGenerateDocumentFunctions = memoize(generateDocumentFunctions);\nfunction generateDocumentFunctions(dispatchProps: ReturnType<typeof mapDispatchToProps>, currentUser: User, documentId: number, versionId: number, assessmentQuestionSignatureVersionId: number) {\n const documentUserStateId = `${documentId}/${currentUser ? currentUser.id : \"\"}`;\n\n const basicFuncs = sharedDocFunctions(dispatchProps, documentId, versionId, documentUserStateId, currentUser);\n\n return {\n ...basicFuncs,\n loadAssessmentQuestionSignatureVersionPublishVersion: () => dispatchProps.versionActions(assessmentQuestionSignatureVersionId).loadVersion(),\n logEvent: (logType, args = {}) => { if (currentUser) { postDocumentUserLog(documentId, logType, args); } },\n setVersionCoverImage: (newVersionCoverImage: string) => basicFuncs.setEditDataVersion({coverImage: newVersionCoverImage}),\n deleteMedia: (mediaType, mediaName) => {\n basicFuncs.setEditDataWithFunctionDocument((editData, syncData, extraData) => {\n const oldMediaList = ((syncData || {})[mediaType]) || ((editData || {})[mediaType]);\n const newMediaList = oldMediaList.filter((name) => name !== mediaName);\n\n return {...editData,\n [mediaType]: newMediaList,\n };\n });\n basicFuncs.updateDocument();\n },\n submitExam: (successNotice: string) => {\n fetch(full_url(`/documents/${documentId}/end_exam`), {\n method: 'PUT',\n headers: ReactOnRails.authenticityHeaders({\n 'Accept': \"application/json\",\n 'Content-Type': 'application/json',\n }),\n body: JSON.stringify({})\n })\n .then(response => {\n if (response.ok) {\n alert(successNotice);\n window.location.replace(full_url(\"/\"));\n } else {\n console.log(response.statusText);\n console.log(response.status);\n }\n })\n .catch(error => {\n console.log(error);\n });\n },\n pauseExam: () => {\n alert(\"Your exam has been paused. If you are ready to re-start your exam, please contact your proctor.\");\n window.location.replace(full_url(\"/\"));\n },\n };\n}\n\nconst weakMemoizedGenerateReusableObjectFunctions = memoize(generateReusableObjectFunctions);\nfunction generateReusableObjectFunctions(dispatchProps: ReturnType<typeof mapDispatchToProps>, currentUser: User, documentId: number, versionId: number) {\n const documentUserStateId = `TEMP_ID`; // TODO\n\n const basicFuncs = sharedDocFunctions(dispatchProps, documentId, versionId, documentUserStateId, currentUser);\n\n return {\n ...basicFuncs,\n logEvent: (logType, args = {}) => { console.log(\"No logging for Reusable Content\") },\n deleteMedia: (mediaType, mediaName: string) => {\n console.log(\"Media can not be deleted from Reusable Content\");\n },\n updateRoName: (newName: string) => {\n basicFuncs.setEditDataDocument({name: newName});\n basicFuncs.updateDocument();\n },\n };\n}\n\nconst mergeProps = (stateProps: ReturnType<typeof mapStateToProps>, dispatchProps: ReturnType<typeof mapDispatchToProps>, ownProps: OwnProps) => {\n const {\n docType,\n currentUser,\n documentId,\n assessmentQuestionSignatureVersionId,\n } = ownProps;\n\n const {\n selectedVersionId,\n } = stateProps;\n\n let objectFunctions =\n docType === \"ReusableObject\" ?\n weakMemoizedGenerateReusableObjectFunctions(dispatchProps, currentUser, documentId, selectedVersionId) :\n weakMemoizedGenerateDocumentFunctions(dispatchProps, currentUser, documentId, selectedVersionId, assessmentQuestionSignatureVersionId)\n\n let compiledProps: NewEditDocContainerProps = {\n ...ownProps,\n ...stateProps,\n ...objectFunctions,\n save: () => {\n if (stateProps.versionEditData?.changeData || stateProps.versionEditData?.coverImage) {\n let newData = weakMemoizedApplyAllChanges(stateProps.version.changeData, changesDisplayModes.HIGHLIGHT_SUGGESTIONS);\n\n newData = R.clone(newData);\n newData = DocConvertHTML.convertAllInlineNodesToHTML(newData, false);\n newData = stripExtraChangeDataFields(newData);\n\n objectFunctions.setEditDataVersion({data: newData});\n objectFunctions.updateVersion();\n }\n\n stateProps.variants.forEach((variant) => {\n if (variant.editData?.changeData) {\n let newData = weakMemoizedApplyAllChanges(variant.editData.changeData, changesDisplayModes.HIGHLIGHT_SUGGESTIONS);\n\n newData = R.clone(newData);\n newData = DocConvertHTML.convertAllInlineNodesToHTML(newData, false);\n newData = stripExtraChangeDataFields(newData);\n\n const variantActions = dispatchProps.variantActionsGenerator(variant.id as number) // TODO: Remove as\n\n variantActions.setEditDataVariant({data: newData});\n variantActions.updateVariant();\n }\n })\n },\n }\n\n if (compiledProps.version?.data) {\n if (compiledProps.shouldShowEditor || compiledProps.defaultChangesDisplayMode) {\n const editActionContext = {\n data: stateProps.mergedData,\n variantDataById: stateProps.variantMergedDataById,\n currentMenu: compiledProps.versionExtraData?.currentMenu,\n newActiveStyles: compiledProps.versionExtraData?.newActiveStyles || [],\n newInactiveStyles: compiledProps.versionExtraData?.newInactiveStyles || [],\n setNewActiveStyles: compiledProps.setNewActiveStyles,\n setNewInactiveStyles: compiledProps.setNewInactiveStyles,\n addChanges: compiledProps.addChanges,\n setCurrentDocSelection: compiledProps.setCurrentDocSelection,\n nodeDefinitions: nodeDefinitions,\n };\n\n compiledProps = {\n ...compiledProps,\n insertAtSelection: (text, options={}) => insertAtSelection(text, editActionContext),\n pasteAtSelection: (dataTransfer, options={}) => pasteAtSelection(dataTransfer, editActionContext),\n returnAtSelection: (options={}) => returnAtSelection(editActionContext),\n deleteAtSelection: (options={}) => deleteAtSelection(editActionContext),\n tabAtSelection: (options={}) => tabAtSelection(editActionContext),\n shiftTabAtSelection: (options={}) => shiftTabAtSelection(editActionContext),\n toggleStyleAtSelection: (style: StyleName) => toggleStyleAtSelection(style, editActionContext),\n }\n }\n }\n\n return compiledProps;\n};\n\nconst keyMap = {\n undo: \"mod+z\",\n redo: \"mod+y\",\n save: \"mod+s\",\n modReturn: \"mod+enter\",\n return: \"enter\",\n delete: [\"del\", \"backspace\"],\n tab: \"tab\",\n shiftTab: \"shift+tab\",\n bold: \"mod+b\",\n italic: \"mod+i\",\n underline: \"mod+u\",\n superscript: \"mod+shift+=\",\n subscript: \"mod+=\",\n find: \"mod+f\",\n};\n\ninterface NewEditDocContainerProps extends OwnProps {\n addChanges: (change: Array<Change>) => void;\n addStateDocumentUserState: (state: UserStateStripped, callback?: () => void) => void;\n assessmentQuestion?: AssessmentQuestion;\n assessmentQuestionEditingData?: AssessmentQuestionEditingData;\n assessmentQuestionSignatureVersion?: Version;\n assessmentQuestionSignatureVersionId?: number;\n assessmentQuestionStatistics?: Array<AssessmentStatistic>;\n assessmentStatus?: string;\n assessmentQuestionClinicalLocationOptions?: Array<string>;\n assessmentQuestionFinalDiagnosisOptions?: Array<string>;\n assessmentQuestionPatientAgeOptions?: Array<string>;\n assessmentQuestionClinicalDisciplineOptions?: Array<string>;\n assessmentQuestionClinicalExcellenceOptions?: Array<string>;\n assessmentQuestionSystemOptions?: Array<string>;\n assessmentQuestionClinicalFocusOptions?: Array<string>;\n assessmentQuestionQuestionUseOptions?: Array<string>;\n cciStatusOptions?: Array<CciStatusOptions>;\n cancelEditVersion: () => void;\n changesDisplayMode?: ChangesDisplayMode;\n changeUploadCountForMediaTypeByValue: (type: string, uploadCountChange: number) => void;\n clearCurrentDocSelection: () => void;\n closeCurrentMenu: () => void;\n deleteAtSelection?: () => void;\n deleteMedia: (mediaType: string, mediaName: string) => void;\n destroyDocumentUserState: () => void;\n document: Document;\n documentSyncMeta: ItemSyncMeta;\n documentUserState: DocumentUserState;\n getUploadCountByMediaType: (type: string) => number;\n insertAtSelection?: (data: string) => void;\n loadAssessmentQuestionSignatureVersionPublishVersion?: () => void;\n loadDocument: () => void;\n loadDocumentUserState: () => void;\n loadIfNeededDocumentUserState: () => void;\n loadVersion: () => void;\n logEvent: (logType: string, args?: Record<string, any>) => void;\n mergedData?: MergedData;\n panelNodeEditEnd: (uid: string) => void;\n panelNodeEditStart: (uid: string) => void;\n pasteAtSelection?: (dataTransfer: DataTransfer) => void;\n pauseExam?: () => void;\n reasoningToolUi: ReasoningToolUi;\n redo: () => void;\n returnAtSelection?: () => void;\n save: () => void;\n setChangesDisplayMode: (mode: ChangesDisplayMode) => void;\n setChangeSummaries: (changeSummaries: Array<OffsetChangeSummary>) => void;\n setCurrentDocSelection: (selection: DocSelection) => void;\n setCurrentMenu: (menu: DocMenuName, data?: Record<string, any>) => void;\n setDisplayMode: (displayMode: DisplayMode) => void;\n setEditDataDocumentUserState: (documentUserState: Partial<DocumentUserState>) => void;\n setExtraDataVersion: (extraData: VersionExtraData) => void;\n setFindText: (findText: string) => void;\n setFocusedBookmarkUid: (uid?: string | null) => void;\n setIsMouseDown: (isMouseDown: boolean) => void;\n setLocalClipboard: (data: LocalClipboardData) => void;\n setNewActiveStyles: (newActiveStyles: Array<StyleName>) => void;\n setNewInactiveStyles: (newInactiveStyles: Array<StyleName>) => void;\n setReplaceText: (replaceText: string) => void;\n setTrackChangesEditMode: (trackChangesEditMode: TrackChangesEditMode) => void;\n setVersionCoverImage?: (coverImage: string) => void;\n setVersionId: (versionId: number) => void;\n shiftTabAtSelection?: () => boolean;\n startEditDocument: () => void;\n startEditVersion: () => void;\n startNewDocumentUserState: () => void;\n submitExam?: (successNotice: string) => void;\n tabAtSelection?: () => boolean;\n togglePanel: (panel: PanelType) => void;\n togglePanelDeleting: () => void;\n toggleStyleAtSelection?: (style: StyleName) => boolean;\n undo: () => void;\n unsavedChanges: boolean;\n updateRoName?: (newName: string) => void;\n version: Version;\n versionEditData: VersionEditData;\n versionExtraData: VersionExtraData;\n versionSyncMeta: ItemSyncMeta;\n selectedVersionId: number;\n localLearningObjectives: Array<ReducerItemWithMerged<LearningObjective, LearningObjectiveExtraData>>;\n localLearningObjectiveVariants: Array<ReducerItemWithMerged<Variant, VariantExtraData>>;\n learningObjectiveActionsGenerator: typeof generateLearningObjectiveActions;\n variantActionsGenerator: typeof generateVariantActions;\n variants: Array<ReducerItemWithMerged<Variant, VariantExtraData>>;\n learningObjectives: Array<ReducerItemWithMerged<LearningObjective, LearningObjectiveExtraData>>;\n setAllowLearningObjectivesEdit: (allowLearningObjectivesEdit: string) => void;\n allLearningObjectiveOptions?: Array<{id: number, name: string, documents: Array<{id: number, title: string}>}>;\n};\n\ninterface NewEditDocContainerState {\n alreadyScrolled: boolean;\n isOnline: boolean;\n autoSaveInterval?: ReturnType<typeof setTimeout>;\n defaultCurrectRLO?: DocSectionType<InlineNode>;\n\n lockState?: LockState;\n activeEditors: Array<PressenceEditor>;\n versionChannelSubscription?: ActionCable.Subscription & { lockIfFree: () => void; unlockIfOwned: () => void; requestLock: () => void; forceLock: () => void; }\n};\n\nclass NewEditDocContainer extends React.Component<NewEditDocContainerProps, NewEditDocContainerState> {\n browserName: string;\n beforeInputObserver?: BeforeInputObserver;\n activeUserObserver?: ActiveUserObserver;\n copyObserver?: CopyObserver;\n mouseClickObserver?: MouseClickObserver;\n offlineObserver?: OfflineObserver;\n selectionObserver?: SelectionObserver;\n lastActiveAt?: number;\n loadIfNeededDocumentUserStateTimer?: ReturnType<typeof setTimeout>;\n versionChannelCheckInTimer?: ReturnType<typeof setInterval>;\n\n constructor(props: NewEditDocContainerProps) {\n super(props);\n\n const browser = Bowser.getParser(window.navigator.userAgent);\n this.browserName = browser.getBrowserName();\n\n this.state = {\n alreadyScrolled: false,\n isOnline: navigator.onLine,\n activeEditors: [],\n };\n }\n\n loadResourcesIfNeeded() {\n if (!this.props.versionSyncMeta) {\n this.props.loadVersion();\n\n if (this.props.shouldShowEditor) {\n this.props.startEditVersion();\n }\n }\n\n if (!this.props.documentSyncMeta) {\n this.props.loadDocument();\n\n if (this.props.shouldShowEditor) {\n this.props.startEditDocument();\n }\n }\n\n if (this.props.learningObjectives) {\n this.props.learningObjectives.forEach((learningObjective) => {\n if (!learningObjective.syncMeta) {\n const learningObjectiveActions = this.props.learningObjectiveActionsGenerator(learningObjective.id)\n learningObjectiveActions.loadLearningObjective();\n }\n })\n }\n\n if (this.props.variants) {\n this.props.variants.forEach((variant) => {\n if (!variant.syncMeta) {\n const variantActions = this.props.variantActionsGenerator(variant.id)\n variantActions.loadVariant();\n\n if (this.props.shouldShowEditor) {\n variantActions.startEditVariant();\n }\n }\n })\n }\n }\n\n componentDidMount() {\n this.beforeInputObserver = new BeforeInputObserver();\n this.beforeInputObserver.registerDelegate(this);\n\n this.copyObserver = new CopyObserver();\n this.copyObserver.registerDelegate(this);\n\n this.offlineObserver = new OfflineObserver();\n this.offlineObserver.registerDelegate(this);\n\n if (this.props.shouldShowEditor) {\n this.toggleAutoSave();\n\n this.createVersionChannelSubscription();\n\n this.selectionObserver = new SelectionObserver();\n this.selectionObserver.registerDelegate(this);\n\n this.mouseClickObserver = new MouseClickObserver();\n this.mouseClickObserver.registerDelegate(this);\n\n this.activeUserObserver = new ActiveUserObserver();\n this.activeUserObserver.registerDelegate(this);\n this.lastActiveAt = Date.now();\n }\n\n this.loadResourcesIfNeeded();\n\n if (this.props.currentUser) {\n if (this.props.docType === \"ReusableObject\") {\n this.props.startNewDocumentUserState();\n this.props.setEditDataDocumentUserState({id: \"TEMP_ID\" as any, state: {}}); // TODO: REMOVE ANY\n } else {\n this.props.loadDocumentUserState();\n this.loadIfNeededDocumentUserStateTimer = setInterval(this.props.loadIfNeededDocumentUserState, 5000);\n }\n }\n\n if (this.props.assessmentQuestionSignatureVersionId) {\n this.props.loadAssessmentQuestionSignatureVersionPublishVersion();\n }\n\n if (Array.isArray(this.props.scrollable_uids) && this.props.scrollable_uids[0]) {\n this.props.setExtraDataVersion({\n displayMode: displayModes.FULL,\n });\n }\n }\n\n createVersionChannelSubscription() {\n const {\n selectedVersionId,\n currentUser,\n sessionId,\n cableApp,\n } = this.props\n\n const consumer = cableApp?.cable\n\n if (consumer) {\n const container = this\n const versionChannelSubscription = consumer.subscriptions.create({\n channel: \"VersionChannel\",\n version_id: selectedVersionId,\n session_id: sessionId,\n }, {\n connected() {\n console.log(\"Connected from VersionChannel\");\n\n if (!container.versionChannelCheckInTimer) {\n this.checkIn()\n\n container.versionChannelCheckInTimer = setInterval(this.checkIn.bind(this), 10000);\n }\n },\n disconnected() {\n console.log(\"Disconnected from VersionChannel\");\n },\n received(data) {\n const {\n activeEditors,\n lockSessionId,\n lockUserId,\n lockUserSessionId,\n lockRequestSessionId,\n lockRequestUserId,\n lockRequestUserSessionId,\n } = data;\n\n const {\n lockState,\n } = container.state;\n\n const hadLock = currentUser.id === lockState?.lockUserId && sessionId === lockState?.lockSessionId;\n const hasLock = currentUser.id === data.lockUserId && sessionId === data.lockSessionId;\n\n container.setState({\n activeEditors,\n lockState: {\n hasLock,\n lockSessionId,\n lockUserId,\n lockUserSessionId,\n lockRequestSessionId,\n lockRequestUserId,\n lockRequestUserSessionId,\n },\n })\n\n if (hadLock !== hasLock) {\n if (hasLock) {\n container.props.loadVersion();\n container.props.startEditVersion();\n } else {\n container.props.cancelEditVersion();\n }\n }\n },\n checkIn() {\n versionChannelSubscription.perform('check_in', {last_active: Math.round(container.lastActiveAt/1000)});\n },\n lockIfFree() {\n versionChannelSubscription.perform('lock_if_free');\n },\n unlockIfOwned() {\n versionChannelSubscription.perform('unlock_if_owned');\n },\n requestLock() {\n versionChannelSubscription.perform('request_lock');\n },\n forceLock() {\n versionChannelSubscription.perform('force_lock');\n },\n })\n\n this.setState({versionChannelSubscription: versionChannelSubscription});\n\n }\n }\n\n unsubscribeVersionChannelSubscription() {\n const {\n versionChannelSubscription,\n } = this.state;\n\n if (versionChannelSubscription) {\n versionChannelSubscription.unsubscribe();\n this.setState({versionChannelSubscription: null});\n }\n\n if (this.versionChannelCheckInTimer) {\n clearTimeout(this.versionChannelCheckInTimer);\n }\n }\n\n lockIfFree() {\n const {\n versionChannelSubscription,\n } = this.state;\n\n versionChannelSubscription.lockIfFree();\n }\n\n unlockIfOwned() {\n const {\n versionChannelSubscription,\n } = this.state;\n\n const shouldUnlock = confirm(\"Are you sure you would like to release the editing lock? Any unsaved changes may be lost.\");\n if (shouldUnlock) {\n versionChannelSubscription?.unlockIfOwned();\n }\n }\n\n forceLock() {\n const {\n versionChannelSubscription,\n } = this.state;\n\n const shouldForceLock = confirm(\"Are you sure you would like to take the editing lock? Any unsaved changes by the current lock holder may be lost.\");\n if (shouldForceLock) {\n versionChannelSubscription?.forceLock();\n }\n }\n\n getSnapshotBeforeUpdate(prevProps: NewEditDocContainerProps, prevState: NewEditDocContainerState) {\n return {\n beforeUpdateDocSelection: selection.getDocSelection()\n }\n }\n\n componentDidUpdate(prevProps: NewEditDocContainerProps, prevState: NewEditDocContainerState, snapshot: {beforeUpdateDocSelection: DocSelection}) {\n this.syncDOMSelection(snapshot.beforeUpdateDocSelection);\n\n if (!prevState.alreadyScrolled && Array.isArray(prevProps.scrollable_uids)) {\n const element = scrollToElementWithUid(prevProps.scrollable_uids);\n if (element) {\n this.props.setFocusedBookmarkUid(prevProps.scrollable_uids[0])\n this.setState({alreadyScrolled: true});\n }\n }\n\n this.loadResourcesIfNeeded();\n\n if (this.props.shouldShowEditor && prevProps.selectedVersionId !== this.props.selectedVersionId) {\n this.unsubscribeVersionChannelSubscription();\n this.createVersionChannelSubscription();\n }\n\n if (this.state.isOnline && !prevState.isOnline && !this.props.isEmbeded) {\n alert(\"Your connection has been restored. Click OK to dismiss this alert and continue your work.\");\n }\n\n const {\n mergedData,\n versionExtraData,\n } = this.props;\n\n if (this.props.shouldShowEditor && mergedData) {\n const prioritizedOffsetChangeSummary = versionExtraData.changeSummaries?.find((changeSummary) => changeSummary.prioritizeOffset)\n const changeSummaries = computeSpacedChangeSummaries(mergedData, versionExtraData.currentMenu, versionExtraData.currentDocSelection, prioritizedOffsetChangeSummary);\n\n if (!R.equals(changeSummaries, versionExtraData.changeSummaries)) {\n this.props.setChangeSummaries(changeSummaries);\n }\n }\n }\n\n componentWillUnmount() {\n this.beforeInputObserver?.unregisterDelegate(this);\n this.copyObserver?.unregisterDelegate(this);\n\n this.offlineObserver?.unregisterDelegate(this);\n\n if ( this.loadIfNeededDocumentUserStateTimer ) { clearInterval(this.loadIfNeededDocumentUserStateTimer); }\n\n if ( this.state.autoSaveInterval ) { clearInterval(this.state.autoSaveInterval); }\n\n this.selectionObserver?.unregisterDelegate(this);\n this.mouseClickObserver?.unregisterDelegate(this);\n this.activeUserObserver?.unregisterDelegate(this);\n }\n\n checkMappedContentEditMode(currentDocSelection: DocSelection) {\n const currentlyEditingNodeLineage = findNodeLineageByUid(this.props.mergedData, currentDocSelection.start.uid);\n\n let activeLearningObjective = null\n if (currentlyEditingNodeLineage) {\n let activeLoId = currentlyEditingNodeLineage.find( node => node.type === \"learningObjective\")?.uid\n activeLearningObjective = this.props.mappingData.learningObjectives.find( lo => lo.id === activeLoId)\n }\n\n let reusableObjectIds = this.props.mappingData.learningObjectiveReusableObjects.map(loro => loro.reusable_object_id)\n let proposedReusableObjectIds = this.props.mergedData.proposedLearningObjectiveReusableObjects ? this.props.mergedData.proposedLearningObjectiveReusableObjects.map(loro => loro.reusable_object_id) : []\n let totalReusableObjectIds=Array.from(new Set(reusableObjectIds.concat(proposedReusableObjectIds)))\n let reusableObjectUids = this.props.mergedData.proposedLearningObjectiveReusableObjects ? totalReusableObjectIds.map(id => this.props.mappingData.reusableObjects.find(ro => ro.id === id)?.uid) : []\n\n let currentlyEditingNodeLineageUids = currentlyEditingNodeLineage.map(obj => obj.uid)\n let checkEditingContentIsMappedLO = activeLearningObjective && this.props.mappingData.learningObjectiveReusableObjects.find(loro => loro.learning_objective_id === activeLearningObjective.id) !== undefined\n let checkEditingContentIsProposeddLO = activeLearningObjective && this.props.mergedData.proposedLearningObjectiveReusableObjects && this.props.mergedData.proposedLearningObjectiveReusableObjects.find(loro => loro.learning_objective_id === activeLearningObjective.id) !== undefined\n let checkEditingContentIsMappedTP = reusableObjectUids && currentlyEditingNodeLineageUids.filter(element => reusableObjectUids.indexOf(element) !== -1).length!==0\n\n let isMultiUseRO = false\n if (currentlyEditingNodeLineage) {\n const roDocumentCount = currentlyEditingNodeLineage.find(node => node.roDocumentCount)\n isMultiUseRO = roDocumentCount && roDocumentCount.roDocumentCount > 1\n }\n\n if(checkEditingContentIsMappedLO || checkEditingContentIsProposeddLO || checkEditingContentIsMappedTP) {\n alert(\"Editing of mapped content is permitted in Suggesting mode only.\");\n this.props.setTrackChangesEditMode(\"SUGGESTING_MODE\")\n } else if(isMultiUseRO) {\n alert(\"Editing of multi-use Reusable Content is permitted in Suggesting mode only.\");\n this.props.setTrackChangesEditMode(\"SUGGESTING_MODE\")\n }\n }\n\n beforeInputDidFire(event: InputEvent) {\n const currentDocSelection = selection.getDocSelection();\n\n if (!currentDocSelection) { return false; }\n\n event.preventDefault();\n\n let allowedMode = this.props.versionExtraData.trackChangesEditMode || (this.props.permissions.allowedEditMode && `${this.props.permissions.allowedEditMode.toUpperCase()}_MODE`) || trackChangesEditModes.EDITING_MODE\n if (allowedMode === trackChangesEditModes.EDITING_MODE) {\n if (!this.props.isAdmin && this.props.docType !== \"ReusableObject\") {\n this.checkMappedContentEditMode(currentDocSelection);\n }\n }\n\n switch (event.inputType) {\n case \"insertText\":\n return this.props.insertAtSelection(event.data);\n case \"insertFromPaste\":\n case \"insertFromYank\":\n case \"insertFromDrop\":\n return this.props.pasteAtSelection(event.dataTransfer);\n case \"insertLineBreak\":\n case \"insertParagraph\":\n return this.props.returnAtSelection();\n case \"deleteByCut\":\n this.addSelectionToCacheIfValid();\n case \"deleteByDrag\":\n case \"deleteContent\":\n case \"deleteContentBackward\":\n case \"deleteEntireSoftLine\":\n case \"deleteHardLineBackward\":\n case \"deleteSoftLineBackward\":\n case \"deleteWordBackward\":\n return this.props.deleteAtSelection();\n case \"historyUndo\":\n return this.props.undo();\n case \"historyRedo\":\n return this.props.redo();\n case \"insertCompositionText\":\n case \"insertFromComposition\":\n case \"insertReplacementText\":\n case \"insertOrderedList\":\n case \"insertUnorderedList\":\n case \"insertHorizontalRule\":\n case \"insertFromPasteAsQuotation\":\n case \"insertTranspose\":\n case \"insertLink\":\n case \"deleteByComposition\":\n case \"deleteCompositionText\":\n case \"deleteWordForward\":\n case \"deleteSoftLineForward\":\n case \"deleteHardLineForward\":\n case \"deleteContentForward\":\n case \"formatBold\":\n case \"formatItalic\":\n case \"formatUnderline\":\n case \"formatStrikeThrough\":\n case \"formatSuperscript\":\n case \"formatSubscript\":\n case \"formatJustifyFull\":\n case \"formatJustifyCenter\":\n case \"formatJustifyRight\":\n case \"formatJustifyLeft\":\n case \"formatIndent\":\n case \"formatOutdent\":\n case \"formatRemove\":\n case \"formatSetBlockTextDirection\":\n case \"formatSetInlineTextDirection\":\n case \"formatBackColor\":\n case \"formatFontColor\":\n case \"formatFontName\":\n default:\n console.log(\"Uncaught InputEvent\");\n }\n }\n\n copyDidFire(event: ClipboardEvent) {\n this.addSelectionToCacheIfValid();\n }\n\n activeUserDidFire(event: MouseEvent | KeyboardEvent) {\n this.lastActiveAt = Date.now();\n }\n\n addSelectionToCacheIfValid() {\n const {\n version,\n versionExtraData,\n } = this.props;\n\n const currentMenu = versionExtraData?.currentMenu;\n let currentDocSelection = selection.getDocSelection();\n\n if (!currentDocSelection || currentMenu) { return false; }\n\n let changeData = version.changeData;\n if (!changeData || R.isEmpty(changeData)) {\n changeData = weakMemoizedConvertAllToFlatFlowAndInlineRangeJSON(version.data);\n }\n\n currentDocSelection = adjustSelectionStartToIncludeListItemIfNeeded(changeData, currentDocSelection)\n\n const translatedSelection = translateSelectionToFlowRange(changeData, currentDocSelection);\n\n if (!translatedSelection) { return false; }\n\n const foundFlatFlowNodes = findFlatFlowNodesWithFlowRange(changeData, translatedSelection);\n\n if (!foundFlatFlowNodes || foundFlatFlowNodes.nodes.length === 0) { return false; }\n\n const newClipboardNodes = flatFlowToTreeFlow(foundFlatFlowNodes.nodes, foundFlatFlowNodes.listNodes, changesDisplayModes.HIGHLIGHT_SUGGESTIONS);\n\n this.props.setLocalClipboard(newClipboardNodes);\n }\n\n didGoOffline() { if(this.state.isOnline) { this.setState({isOnline: false}); }; }\n didGoOnline() { if(!this.state.isOnline) { this.setState({isOnline: true}); }; }\n\n mouseDidDownClick(event: MouseEvent) { this.props.setIsMouseDown(true); }\n mouseDidUpClick(event: MouseEvent) { this.props.setIsMouseDown(false); }\n\n selectionDidChange(event: Event) { this.syncCurrentDocSelection(); }\n\n syncCurrentDocSelection() {\n const {\n closeCurrentMenu,\n setExtraDataVersion,\n versionExtraData,\n } = this.props;\n\n const currentDocSelection = versionExtraData.currentDocSelection;\n const newDocSelection = selection.getDocSelection();\n\n const currentMenu = versionExtraData.currentMenu;\n\n if (newDocSelection) {\n if (!selection.areDocSelectionsEqual(currentDocSelection, newDocSelection)) {\n if ([NEW_SUMMARY_OF_EDITS, NEW_COMMENT_THREAD, EDIT_COMMENT, EDIT_LINK, TEXT_COLOR_PICKER, ADD_NODE].includes(currentMenu?.menu)) {\n closeCurrentMenu();\n }\n\n // console.log(\"syncCurrentDocSelection:\", newDocSelection);\n setExtraDataVersion({\n currentDocSelection: newDocSelection,\n newActiveStyles: [],\n newInactiveStyles: [],\n });\n }\n }\n }\n\n syncDOMSelection(beforeUpdateDocSelection: DocSelection) {\n const {\n versionExtraData,\n } = this.props;\n\n let newDocumentSelection = beforeUpdateDocSelection;\n\n if (window.forceDocSelection) {\n newDocumentSelection = window.forceDocSelection\n window.forceDocSelection = undefined;\n }\n\n const showingDOMRange = selection.getDOMRange();\n const newDOMRange = selection.docSelectionToDOMRange(newDocumentSelection);\n\n if (!selection.areDOMRangesEqual(showingDOMRange, newDOMRange)) {\n const currentMenu = versionExtraData?.currentMenu;\n if (![NEW_SUMMARY_OF_EDITS, NEW_COMMENT_THREAD, EDIT_COMMENT, EDIT_LINK, TEXT_COLOR_PICKER].includes(currentMenu?.menu)) {\n // console.log(\"syncDOMSelection\", newDocumentSelection);\n selection.setDocSelection(newDocumentSelection);\n }\n }\n }\n\n toggleAutoSave() {\n if (this.state.autoSaveInterval) {\n clearInterval(this.state.autoSaveInterval);\n this.setState({\n autoSaveInterval: undefined,\n });\n } else {\n this.setState({\n autoSaveInterval: setInterval(this.autoSave.bind(this), 30000),\n });\n }\n }\n\n autoSave() {\n if (this.props.unsavedChanges) {\n this.props.save();\n }\n }\n\n changesToMappedContent(mergedData) {\n let learningObjectiveIds = this.props.mappingData.learningObjectiveReusableObjects.map( loro => loro.learning_objective_id)\n\n let learningObjectiveUids = learningObjectiveIds.map(id => this.props.mappingData.learningObjectives.find(lo => lo.id === id)?.uid)\n let loNodes = learningObjectiveUids.map(uid => findNodeByUid(mergedData, uid))\n let validLoNodes = loNodes.filter(n => n)\n let allLoChanges = validLoNodes.map(node => node.content[0].content?.addDeleteChanges?.concat(node.uid))\n\n let reusableObjectIds = this.props.mappingData.learningObjectiveReusableObjects.map( loro => loro.reusable_object_id)\n let reusableObjectUids = reusableObjectIds.map(id => this.props.mappingData.reusableObjects.find(ro => ro.id === id)?.uid)\n let roNodes = reusableObjectUids.map(uid => findNodeByUid(mergedData, uid))\n let validRoNodes = roNodes.filter(n => n)\n let roTitleChanges = validRoNodes.map(node => node.title?.addDeleteChanges).filter(change => change)\n let roContentChanges = validRoNodes.map(node => node.content[0].content?.addDeleteChanges).filter(change => change)\n let unpublishedLoChanges = allLoChanges.filter(change => change).filter(change => change[change?.length - 2]?.published_at > ((new Date()).getTime() - 500))\n let unpublishedRoTitleChanges = roTitleChanges.filter(change => change[change?.length - 1]?.published_at > ((new Date()).getTime() - 500 ))\n let unpublishedRoContentChanges = roContentChanges.filter(change => change[change?.length - 1]?.published_at > ((new Date()).getTime() - 500))\n let allUnpublishedChanges = unpublishedLoChanges.concat(unpublishedRoTitleChanges).concat(unpublishedRoContentChanges)\n\n return allUnpublishedChanges\n }\n\n publishMergedData() {\n const {\n currentUser,\n document,\n version,\n variants,\n localLearningObjectives,\n docType,\n } = this.props;\n\n const oldChangeData = generateChangeData(version);\n\n const publishChange = clotheChange(newPublishChange(), currentUser, false);\n let mergedData = addChangeToDoc(oldChangeData, publishChange);\n\n mergedData = weakMemoizedApplyAllChanges(mergedData, changesDisplayModes.HIDE_SUGGESTIONS);\n\n const variantPlaceholderPaths = mergedData ? findVariantPlaceholderNodePaths(mergedData) : []\n const learningObjectivePlaceholderPaths = variantPlaceholderPaths.filter((vpPath) => findAtPath(mergedData, vpPath).variantableType === \"LearningObjective\").filter((path) => !path.includes(\"addDeleteChanges\"))\n const learningObjectiveNodePathsById = Object.fromEntries(learningObjectivePlaceholderPaths.map((loPlaceholderPath) => [findAtPath(mergedData, loPlaceholderPath).variantableId, loPlaceholderPath]))\n\n if (document) {\n const versionType = determineVersionType(document as any, version.id); // TODO: Remove any\n const variantType = determineVariantTypeFromVersionType(versionType);\n const variantKey = variantKeyFromVariantVersion(variantType);\n\n variants.forEach((learningObjectiveVariant) => {\n if (learningObjectiveVariant?.mergedData) {\n const parentLearningObjective = localLearningObjectives.find((lo) => lo?.mergedData?.[variantKey] === learningObjectiveVariant.id)\n const learningObjectiveNodePath = learningObjectiveNodePathsById[parentLearningObjective.id]\n\n if (learningObjectiveNodePath) {\n const appliedData = applyChangesToVariant(learningObjectiveVariant.mergedData, parentLearningObjective?.mergedData?.publishVariantId, changesDisplayModes.HIDE_SUGGESTIONS, true)\n\n mergedData = setAtPath(mergedData, learningObjectiveNodePath, appliedData)\n mergedData = setAtPath(mergedData, learningObjectiveNodePath.concat(['variantId']), learningObjectiveVariant.id)\n }\n }\n })\n }\n\n if (docType !== \"ReusableObject\") {\n mergedData = weakMemoizedReflow(mergedData, document.kind, document.id);\n }\n\n return R.clone(mergedData);\n }\n\n publishWithoutWarning(shouldUpdateBanner: boolean){\n const {\n document,\n version,\n addChanges,\n save,\n undo,\n docType,\n } = this.props;\n\n const mergedData = this.publishMergedData();\n\n let allHTMLData = DocConvertHTML.convertAllInlineNodesToHTML(mergedData) as DocBlockNode<InlineHtmlNode>; // TODO: Remove as\n allHTMLData = stripExtraChangeDataFields(allHTMLData) as DocBlockNode<InlineHtmlNode>; // TODO: Remove as\n\n let changedMappedContent = [];\n if(document?.kind !== \"assessment_question_mcq\" && docType !== \"ReusableObject\") {\n changedMappedContent = this.changesToMappedContent(mergedData)\n }\n\n if(changedMappedContent.length > 0 && !confirm(\"There are changes to mapped content! Click OK to continue publishing or Cancel to review changes.\")) {\n return;\n }\n\n let publishUrl, publishData\n if (docType === \"ReusableObject\") {\n publishUrl = full_url(`/variants/${version.id}/publish`);\n publishData = {\n variant: {}\n }\n } else {\n publishUrl = full_url(`/documents/${document.id}/publish`);\n publishData = {\n document: {\n should_update_banner: shouldUpdateBanner,\n data: allHTMLData,\n cover_image: version.coverImage,\n mod_map_image_filename: version.modMapImageFilename,\n },\n }\n }\n\n axios({\n method: \"post\",\n withCredentials: true,\n url: publishUrl,\n headers: ReactOnRails.authenticityHeaders({Accept: \"application/json\"}),\n data: publishData,\n })\n .then((response) => {\n window.customAlertBox({title: \"Publishing!\", message: \"This version is being published\"});\n addChanges([newPublishChange()]);\n save();\n setTimeout(function () {\n window.location.reload();\n }, 2000);\n })\n .catch((error) => {\n window.customAlertBox({title: \"Publishing Error!\", message: \"There was an error publishing.\"});\n undo();\n throw (error);\n });\n }\n\n publish() {\n const {\n document,\n docType,\n } = this.props;\n\n const mergedData = this.publishMergedData();\n\n if(document?.kind === \"assessment_question_mcq\" && (!mergedData.proposedLearningObjectiveReusableObjectId)) {\n window.customAlertBox({title: \"Publishing Error!\", message: \"The document can not be published because there are incomplete mappings\"});\n return\n }\n\n window.customConfirmBox({\n title: \"Please Confirm!\",\n message: \"Are you sure you want to publish this case? Remember to update the SR Version with these edits!'\",\n okLabel: \"Publish\",\n callback: () => {\n if (docType === \"ReusableObject\" || document?.kind === \"assessment_question_mcq\") {\n this.publishWithoutWarning(false);\n } else {\n window.customConfirmBox({\n title: \"Update Banner\",\n message: \"Would you like to show the 'Update Banner?'\",\n callback: () => this.publishWithoutWarning(true),\n cancel: () => this.publishWithoutWarning(false),\n })\n }\n },\n });\n }\n\n render() {\n const {\n docType,\n documentSetId,\n document,\n version,\n assessmentQuestion,\n assessmentQuestionEditingData,\n assessmentQuestionStatistics,\n assessmentQuestionSignatureVersion,\n assessmentQuestionSignatureVersionId,\n assessmentQuestionClinicalLocationOptions,\n assessmentQuestionFinalDiagnosisOptions,\n assessmentQuestionPatientAgeOptions,\n assessmentQuestionClinicalDisciplineOptions,\n assessmentQuestionClinicalExcellenceOptions,\n assessmentQuestionSystemOptions,\n assessmentQuestionClinicalFocusOptions,\n assessmentQuestionQuestionUseOptions,\n versionSyncMeta,\n versionEditData,\n versionExtraData,\n currentUser,\n currentGroupRoleDefinition,\n documentUserState,\n isAdmin,\n cciStatusOptions,\n assessmentStatus,\n reasoningToolUi,\n displayUid,\n changesDisplayMode,\n mappingData,\n isEmbeded,\n featureFlag,\n sessionId,\n localLearningObjectives,\n localLearningObjectiveVariants,\n allLearningObjectiveOptions,\n } = this.props;\n\n let {\n mergedData,\n } = this.props;\n\n const {\n isOnline,\n activeEditors,\n lockState,\n } = this.state;\n\n if (document?.id && version?.id && documentUserState?.id) {\n ///////////////////\n // User Context //\n /////////////////\n const userContext = weakMemoizedGenerateCurrentUser(\n currentUser || {} as User, // currentUser\n currentGroupRoleDefinition, // currentGroupRoleDefinition\n isAdmin, // isAdmin\n sessionId, // sessionId\n this.props.permissions,\n this.props.loadDocumentUserState, // loadDocumentUserState\n this.props.addStateDocumentUserState, // addStateDocumentUserState\n this.props.destroyDocumentUserState, // destroyDocumentUserState\n this.props.submitExam, // submitExam\n this.props.pauseExam, // pauseExam\n this.props.logEvent, //logEvent\n version.data.uid, // rootUID\n );\n\n //////////////////////\n // DISPLAY CONTEXT //\n ////////////////////\n const displayMode = versionExtraData.displayMode || (this.props.shouldShowEditor ? displayModes.FULL : (this.props.isNotGated ? displayModes.UNGATED : displayModes.STUDENT));\n const displayContext = weakMemoizedGenerateDisplayContext(\n displayMode, // displayMode\n this.props.setDisplayMode, // setDisplayMode\n isOnline, // isOnline\n versionExtraData.focusedBookmarkUid, // focusedBookmarkUid\n this.props.setFocusedBookmarkUid, // setFocusedBookmarkUid\n this.props.togglePanel, // togglePanel\n this.props.panelNodeEditStart, // panelNodeEditStart\n this.props.isEmbeded, // isEmbeded\n this.props.enableAiSummaryStatementFeedback, // enableAiSummaryStatementFeedback\n !lockState?.hasLock, // isLockedByOtherUser\n this.props.styleGuideId\n );\n\n ///////////////////////\n // DOCUMENT CONTEXT //\n /////////////////////\n const documentContext = weakMemoizedGenerateCurrentDocument(\n document,\n docType,\n this.props.loadDocument, // reload\n );\n\n ///////////////////////\n // MEDIA CONTEXT //\n /////////////////////\n const mediaContext = organizeMediaAssets(document);\n\n ////////////////////////////\n // VERSION WITHOUT STATE //\n //////////////////////////\n if (this.props.shouldShowEditor && version.id !== publishVersionId(documentContext)) {\n // Required because nested contentEditables in Safari allow selection from parent into child\n if (this.browserName === \"Safari\" && versionExtraData.currentDocSelection && versionExtraData.isMouseDown) {\n mergedData = weakMemoizedSetBlockNodesContainsSelection(mergedData, versionExtraData.currentDocSelection);\n }\n\n if (versionExtraData.currentMenu) {\n mergedData = weakMemoizedAttachCurrentMenuToNode(mergedData, versionExtraData.currentMenu, versionExtraData.localClipboard);\n\n let currentDocSelection = versionExtraData.currentDocSelection\n\n if (\n [NEW_SUMMARY_OF_EDITS, NEW_COMMENT_THREAD, EDIT_COMMENT, EDIT_LINK, TEXT_COLOR_PICKER].includes(versionExtraData.currentMenu?.menu) &&\n currentDocSelection &&\n selection.isInOneInline(currentDocSelection) &&\n currentDocSelection.start.contentKey\n ) {\n const nodePath = findNodePathByUid(mergedData, currentDocSelection.start.uid)\n\n mergedData = R.set(\n R.lensPath([...nodePath, currentDocSelection.start.contentKey, \"selectionMimics\"]),\n [{range: {start: currentDocSelection.start.index, end: currentDocSelection.end.index}}],\n mergedData,\n )\n }\n }\n\n const shouldReflow = displayContext.displayMode === displayModes.STUDENT;\n if (shouldReflow) {\n mergedData = weakMemoizedReflow(mergedData, document.kind, document.id);\n }\n }\n\n ////////////////////////////////\n // APPLY DOCUMENT USER STATE //\n //////////////////////////////\n if (displayContext.displayMode !== displayModes.FULL || !this.props.shouldShowEditor) {\n mergedData = addDocumentUserState(mergedData, documentUserState.state);\n\n const notes = (mergedData.notes || []);\n notes.filter((note) => note.notedNodeUid).forEach((note) => {\n mergedData = editNodeWithUIDKeyValue(mergedData, note.notedNodeUid, \"noteUid\", note.uid);\n });\n }\n\n if (displayContext.focusedBookmarkUid) {\n const nodePath = findNodePathByUid(mergedData, displayContext.focusedBookmarkUid);\n if (nodePath) {\n mergedData = setAtPath(mergedData, [...nodePath, \"isFocusedBookmark\"], true)\n }\n }\n\n const setCurrentRO = (rlo: DocSectionType<InlineNode>) => {\n this.setState({defaultCurrectRLO: rlo})\n }\n let currentRO = this.state.defaultCurrectRLO;\n const currentActiveDocSelection = selection.getDocSelection();\n\n if(currentActiveDocSelection){\n const {\n uid: startUID,\n } = currentActiveDocSelection.start;\n const lineage = findNodeLineageByUid(mergedData, startUID);\n if (lineage) {\n currentRO = R.findLast((node): node is DocSectionType<InlineNode> => node[\"type\"] === \"section\" && node[\"classes\"] && R.intersection(node[\"classes\"], POSSIBLE_RO_CLASSES).length > 0, lineage)\n }\n }\n\n // THIS SHOULD NOT BE IN RENDER MOVE WHEN SAFE TO DO SO\n const urlParams = new URLSearchParams(window.location.search)\n if (urlParams.has('uid')) {\n const uid = urlParams.get('uid');\n mergedData = editNodeWithUIDKeyValue(mergedData, uid, \"isFocusedBookmark\", true);\n let topHeight = 0;\n const element = document.getElementById(uid);\n if (element !== null) {\n topHeight = element.offsetTop;\n }\n window.scrollTo({\n top: Math.round(topHeight),\n behavior: 'smooth'\n });\n }\n\n if(currentRO && documentContext.docType !== \"ReusableObject\" && userContext.permissions.createExistingContentRlo){\n mergedData = editNodeWithUIDKeyValue(mergedData, currentRO.uid, \"isFocusedBookmark\", true);\n }\n //////////////////////\n // CURRENT VERSION //\n ////////////////////\n const currentVersion = weakMemoizedGenerateCurrentVersion(\n version.id, // id\n version.published, // published\n version.awsFolderUrl, // awsFolderUrl\n version.coverImage, // coverImage\n mergedData.onlyOneUncollapsedSection, // onlyOneUncollapsedSection\n mergedData.disableBookmarks, // disableBookmarks\n this.props.loadVersion, // reload\n );\n\n ///////////////////\n // EDIT CONTEXT //\n /////////////////\n let editingContext;\n let editingContextExtra: EditingContextExtra;\n if (this.props.shouldShowEditor) {\n editingContext = weakMemoizedGenerateEditingContext(\n this.props.shouldShowEditor, // shouldShowEditor,\n displayContext.canBeEditing, // canBeEditing\n !!versionEditData, // isVersionEditActivated,\n changesDisplayMode, // changesDisplayMode,\n currentVersion.id === publishVersionId(documentContext), // isPublishedVersion\n currentVersion.id === ongoingMaintenaceVersionId(documentContext), // isMaintenanceVersion\n userContext.permissions.accessOmVersion || userContext.permissions.accessRloMaintenance, // canEditOM\n nodeDefinitions, // nodeDefinitions,\n userContext.id,\n version.changeAuthorIds,\n this.props.addChanges, // addChanges\n this.props.setCurrentDocSelection,\n this.props.clearCurrentDocSelection,\n this.props.setCurrentMenu,\n this.props.closeCurrentMenu,\n this.props.setLocalClipboard,\n this.props.editors,\n versionExtraData.allowLearningObjectivesEdit\n );\n\n const currentDocSelectionDetail: Pick<EditingContextExtra, \"currentDocSelection\" | \"activeStylesFromChanges\" | \"activeStyles\" | \"soloSelectedNodeUid\" | \"currentlyEditingNodeLineage\"> = {currentDocSelection: versionExtraData.currentDocSelection};\n\n const newActiveStyles = versionExtraData.newActiveStyles || [];\n const newInactiveStyles = versionExtraData.newInactiveStyles || [];\n\n if (currentDocSelectionDetail.currentDocSelection) {\n // console.log(currentDocSelectionDetail.currentDocSelection);\n\n currentDocSelectionDetail.activeStylesFromChanges = RangeInlineJSON.stylesCoveringDocSelection(mergedData, currentDocSelectionDetail.currentDocSelection) as Record<StyleName, StyleRange>;\n currentDocSelectionDetail.activeStyles = xor(R.keys(currentDocSelectionDetail.activeStylesFromChanges).concat(newActiveStyles), newInactiveStyles);\n\n if (currentDocSelectionDetail.currentDocSelection.start.uid === currentDocSelectionDetail.currentDocSelection.end.uid) {\n currentDocSelectionDetail.soloSelectedNodeUid = currentDocSelectionDetail.currentDocSelection.start.uid;\n currentDocSelectionDetail.currentlyEditingNodeLineage = findNodeLineageByUid(mergedData, currentDocSelectionDetail.soloSelectedNodeUid);\n }\n }\n\n const currentMenuDetail: Pick<EditingContextExtra, \"currentMenu\" | \"currentMenuNode\"> = {currentMenu: versionExtraData.currentMenu}\n if (currentMenuDetail.currentMenu && 'uid' in currentMenuDetail.currentMenu) {\n currentMenuDetail.currentMenuNode = findNodeByUid(mergedData, currentMenuDetail.currentMenu.uid);\n }\n\n const allowedMode = userContext.permissions.allowedEditMode && trackChangesEditModes[`${userContext.permissions.allowedEditMode.toUpperCase()}_MODE`]\n\n editingContextExtra = {\n rootUid: mergedData.uid,\n changesDisplayMode: changesDisplayMode,\n isActiveEditData: editingContext.isVersionEditActivated && this.props.unsavedChanges,\n isSyncing: !!versionSyncMeta.isSyncing,\n savingErrors: versionSyncMeta.errors || [],\n setVersionId: this.props.setVersionId,\n trackChangesEditMode: versionExtraData.trackChangesEditMode || allowedMode || trackChangesEditModes.EDITING_MODE,\n setTrackChangesEditMode: this.props.setTrackChangesEditMode,\n setChangesDisplayMode: this.props.setChangesDisplayMode,\n save: this.props.save,\n isAutoSaveOn: !!this.state.autoSaveInterval,\n toggleAutoSave: this.toggleAutoSave.bind(this),\n publish: this.publish.bind(this),\n currentRO: currentRO,\n undo: this.props.undo,\n redo: this.props.redo,\n setCurrentRO: setCurrentRO,\n canUndo: undoRedo.canUndo(this.props.versionExtraData.undoRedoState),\n canRedo: undoRedo.canRedo(this.props.versionExtraData.undoRedoState),\n deleteMedia: this.props.deleteMedia,\n updateRoName: this.props.updateRoName,\n getUploadCountByMediaType: this.props.getUploadCountByMediaType,\n changeUploadCountForMediaTypeByValue: this.props.changeUploadCountForMediaTypeByValue,\n findText: versionExtraData.findText,\n replaceText: versionExtraData.replaceText,\n setFindText: this.props.setFindText,\n setReplaceText: this.props.setReplaceText,\n setVersionCoverImage: this.props.setVersionCoverImage,\n toggleStyle: this.props.toggleStyleAtSelection,\n newActiveStyles: newActiveStyles,\n newInactiveStyles: newInactiveStyles,\n setNewActiveStyles: this.props.setNewActiveStyles,\n setNewInactiveStyles: this.props.setNewInactiveStyles,\n currentMenu: versionExtraData.currentMenu,\n cci_status: mergedData.cci_status,\n cciStatusOptions: cciStatusOptions,\n assessmentStatus: assessmentStatus,\n assessmentQuestion: mergedData.assessment_question || assessmentQuestion,\n assessmentQuestionEditingData: assessmentQuestionEditingData,\n assessmentQuestionStatistics: assessmentQuestionStatistics,\n assessmentQuestionSignatureVersion: assessmentQuestionSignatureVersion,\n assessmentQuestionSignatureVersionId: assessmentQuestionSignatureVersionId,\n assessmentQuestionClinicalLocationOptions: assessmentQuestionClinicalLocationOptions,\n assessmentQuestionFinalDiagnosisOptions: assessmentQuestionFinalDiagnosisOptions,\n assessmentQuestionPatientAgeOptions: assessmentQuestionPatientAgeOptions,\n assessmentQuestionClinicalDisciplineOptions: assessmentQuestionClinicalDisciplineOptions,\n assessmentQuestionClinicalExcellenceOptions: assessmentQuestionClinicalExcellenceOptions,\n assessmentQuestionSystemOptions: assessmentQuestionSystemOptions,\n assessmentQuestionClinicalFocusOptions: assessmentQuestionClinicalFocusOptions,\n assessmentQuestionQuestionUseOptions: assessmentQuestionQuestionUseOptions,\n usedAvailableForm: this.props.usedAvailableForm,\n currentAssessmentQuestionEditingData: currentDocSelectionDetail.soloSelectedNodeUid && currentDocSelectionDetail.soloSelectedNodeUid === assessmentQuestionEditingData?.learning_objective_uid ? assessmentQuestionEditingData : null,\n possiblePrerequisiteDocuments: this.props.possiblePrerequisiteDocuments,\n activeEditors: activeEditors,\n lockState: lockState,\n lockIfFree: this.lockIfFree.bind(this),\n unlockIfOwned: this.unlockIfOwned.bind(this),\n forceLock: this.forceLock.bind(this),\n setAssessmentQuestionData: (values) => editingContext.addChange(newSetKeyValueChange(rootUid, \"assessment_question\", values)),\n setAllowLearningObjectivesEdit: this.props.setAllowLearningObjectivesEdit,\n ...currentMenuDetail,\n ...currentDocSelectionDetail,\n };\n } else {\n editingContext = weakMemoizedGenerateEditingContextAllFalse(\n userContext.id,\n version.changeAuthorIds,\n );\n editingContextExtra = {} as EditingContextExtra; // TODO: Remove as\n }\n\n /////////////////////\n // Mapping Context //\n /////////////////////\n const rootUid = mergedData.uid;\n let mappingContext;\n if (editingContext.shouldShowEditor) {\n const isAssessmentQuestion = documentContext.kind === \"assessment_question_mcq\";\n if (isAssessmentQuestion) {\n mappingContext = {\n ...mappingData,\n proposedLearningObjectiveReusableObjectId: mergedData.proposedLearningObjectiveReusableObjectId,\n setLearningObjectiveReusableObjectId: (loRoId: number) => editingContext.addChange(newSetKeyValueChange(rootUid, \"proposedLearningObjectiveReusableObjectId\", loRoId)),\n proposedSystem: mergedData.system,\n setSystem: (loros: string) => editingContext.addChange(newSetKeyValueChange(rootUid, \"system\", loros)),\n proposedClinicalFocus: mergedData.clinical_focus || \"\",\n setClinicalFocus: (loros: string) => editingContext.addChange(newSetKeyValueChange(rootUid, \"clinical_focus\", loros)),\n }\n } else {\n mappingContext = {\n ...mappingData,\n learningObjectives: localLearningObjectives.map((lo) => lo.mergedData),\n proposedLearningObjectiveReusableObjects: mergedData.proposedLearningObjectiveReusableObjects,\n setProposedLearningObjectiveReusableObjects: (loros) => editingContext.addChange(newSetKeyValueChange(rootUid, \"proposedLearningObjectiveReusableObjects\", loros)),\n }\n }\n }\n\n /////////////////////\n // PROJECT CONTEXT //\n /////////////////////\n const projectContext = {\n currentAssignmentId: this.props.currentAssignmentId,\n nextVersionId: this.props.nextVersionId,\n activeMemberId: this.props.activeMemberId,\n activeMemberName: this.props.activeMemberName,\n projectProductionAssociate: this.props.projectProductionAssociate,\n activeUserId: this.props.activeUserId,\n checklistContents: this.props.checklistContents,\n }\n\n ////////////////////////////\n // ReasoningTool Context //\n //////////////////////////\n const reasoningToolContext = {\n ...this.props.reasoningToolUi,\n togglePanel: this.props.togglePanel,\n togglePanelDeleting: this.props.togglePanelDeleting,\n panelNodeEditStart: this.props.panelNodeEditStart,\n panelNodeEditEnd: this.props.panelNodeEditEnd,\n };\n\n //////////////////////\n // HotKey Handlers //\n ////////////////////\n let keyHandlers;\n if (editingContext.shouldShowEditor) {\n keyHandlers = {\n undo: (event?: KeyboardEvent) => {this.props.undo(); return false;},\n redo: (event?: KeyboardEvent) => {this.props.redo(); return false;},\n save: (event?: KeyboardEvent) => {this.props.save(); return false;},\n modReturn: (event?: KeyboardEvent) => {\n if (window.document.activeElement && window.document.activeElement instanceof HTMLElement) {window.document.activeElement.blur();}\n this.props.clearCurrentDocSelection();\n return false;\n },\n tab: (event?: KeyboardEvent) => !this.props.tabAtSelection(),\n shiftTab: (event?: KeyboardEvent) => !this.props.shiftTabAtSelection(),\n bold: (event?: KeyboardEvent) => !this.props.toggleStyleAtSelection(\"bold\"),\n italic: (event?: KeyboardEvent) => !this.props.toggleStyleAtSelection(\"italic\"),\n underline: (event?: KeyboardEvent) => !this.props.toggleStyleAtSelection(\"underline\"),\n superscript: (event?: KeyboardEvent) => !this.props.toggleStyleAtSelection(\"superscript\"),\n subscript: (event?: KeyboardEvent) => !this.props.toggleStyleAtSelection(\"subscript\"),\n find: (event?: KeyboardEvent) => () => {editingContext.setCurrentMenu(FIND_AND_REPLACE); return false;},\n }\n }\n\n //////////////////////\n // Integration Info //\n //////////////////////\n const integrationInfo = weakMemoizedGenerateIntegrationInfo(\n mergedData.final_diagnoses,\n mergedData.clinical_excellence,\n mergedData.basic_science_disciplines,\n )\n\n const HotKeysAnyType = HotKeys;\n return (\n <HotKeysAnyType keyMap={keyMap} handlers={keyHandlers}>\n <NewEditDoc\n key=\"doc\"\n documentContext={documentContext}\n currentVersion={currentVersion}\n userContext={userContext}\n displayContext={displayContext}\n editingContext={editingContext}\n editingContextExtra={editingContextExtra}\n mappingContext={mappingContext}\n mediaContext={mediaContext}\n reasoningToolContext={reasoningToolContext}\n integrationInfo={integrationInfo}\n projectContext={projectContext}\n mergedData={mergedData}\n changeData={version.changeData}\n displayUid={displayUid}\n documentSetId={documentSetId}\n changeSummaries={versionExtraData.changeSummaries}\n userState={documentUserState?.state}\n featureFlag={featureFlag}\n isEditor={this.props.isEditor}\n allLearningObjectiveOptions={allLearningObjectiveOptions}\n learningObjectiveActionsGenerator={this.props.learningObjectiveActionsGenerator}\n />\n {editingContext.isEditing && editingContextExtra.isActiveEditData && <Beforeunload onBeforeunload={() => 'You’ll lose your data!'} />}\n </HotKeysAnyType>\n );\n } else {\n return <GenLoadingSpinner />;\n }\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps, mergeProps)(NewEditDocContainer);\n","import { batch } from \"react-redux\";\n\nimport {\n newChangeTextAndNodesChange\n} from \"../changes\";\n\nimport * as selection from \"../selection\";\n\nimport {\n} from \"../Functions/base\";\n\nexport default function insertAtSelection(newText, {\n data,\n variantDataById,\n currentMenu,\n addChanges,\n setCurrentDocSelection,\n newActiveStyles = [],\n newInactiveStyles = [],\n}: EditActionContext) {\n const currentDocSelection = selection.getDocSelection();\n\n if (!currentDocSelection || currentMenu || newText.length === 0) { return false; }\n\n // ADD STYLE RANGES\n // FIND NODE AND OFFSET\n // GET CURRENT STYLES\n // ADD CHANGED STYLES\n\n const initalStyles = newActiveStyles.map(style => ({\n type: style,\n range: {\n start: 0,\n end: newText.length,\n }\n }))\n\n const newStyledText = {\n text: newText,\n styleRanges: initalStyles\n }\n\n batch(() => {\n addChanges([newChangeTextAndNodesChange(currentDocSelection, newStyledText)], currentDocSelection.variantId);\n setCurrentDocSelection(selection.shiftDocSelectionBy(selection.collapseDocSelectionToStart(currentDocSelection), newText.length));\n });\n\n return true;\n}\n","import * as R from \"ramda\";\n\nimport * as selection from \"../selection\";\n\nimport { batch } from \"react-redux\";\n\nimport {\n newSetKeyValueChange,\n} from \"../changes\";\n\nimport {\n findNodeLineageByUid,\n} from \"../Functions/base\";\n\nexport default function tabAtSelection({\n data,\n variantDataById,\n currentMenu,\n addChanges,\n setCurrentDocSelection,\n nodeDefinitions,\n}: EditActionContext) {\n const currentDocSelection = selection.getDocSelection();\n\n if (!currentDocSelection || currentMenu) { return false; }\n\n const dataToUse = currentDocSelection.variantId ? variantDataById[currentDocSelection.variantId] : data;\n\n const {\n uid: startUID,\n contentKey: startKey,\n index: startIndex,\n } = currentDocSelection.start;\n\n const {\n uid: endUID,\n contentKey: endKey,\n index: endIndex,\n } = currentDocSelection.end;\n\n if (selection.isInOneInline(currentDocSelection)) {\n const nodeLineage = findNodeLineageByUid(dataToUse, startUID);\n const nodeLineageToListItem = R.dropLastWhile((node: any) => node.type !== \"listItem\", nodeLineage); // TODO: remove any\n const listItem = R.last(nodeLineageToListItem);\n\n if (listItem) {\n batch(() => {\n addChanges([newSetKeyValueChange(listItem.uid, \"listIndentation\", ((listItem.listIndentation || 0) + 1))], currentDocSelection.variantId);\n });\n }\n }\n\n return true;\n}\n","import * as R from \"ramda\";\n\nimport * as selection from \"../selection\";\n\nimport { batch } from \"react-redux\";\n\nimport {\n newSetKeyValueChange,\n} from \"../changes\";\n\nimport {\n findNodeLineageByUid,\n} from \"../Functions/base\";\n\nexport default function shiftTabAtSelection({\n data,\n variantDataById,\n currentMenu,\n addChanges,\n setCurrentDocSelection,\n nodeDefinitions,\n}: EditActionContext) {\n const currentDocSelection = selection.getDocSelection();\n\n if (!currentDocSelection || currentMenu) { return false; }\n\n const dataToUse = currentDocSelection.variantId ? variantDataById[currentDocSelection.variantId] : data;\n\n const {\n uid: startUID,\n contentKey: startKey,\n index: startIndex,\n } = currentDocSelection.start;\n\n const {\n uid: endUID,\n contentKey: endKey,\n index: endIndex,\n } = currentDocSelection.end;\n\n if (selection.isInOneInline(currentDocSelection)) {\n const nodeLineage = findNodeLineageByUid(dataToUse, startUID);\n const nodeLineageToListItem = R.dropLastWhile((node: any) => node.type !== \"listItem\", nodeLineage); // TODO: Remove any\n const listItem = R.last(nodeLineageToListItem);\n\n if (listItem) {\n batch(() => {\n addChanges([newSetKeyValueChange(listItem.uid, \"listIndentation\", Math.max((listItem.listIndentation || 0) - 1, 0))], currentDocSelection.variantId);\n });\n }\n }\n\n return true;\n}\n","import {\n newAddStyleChange,\n newDeleteStyleChange,\n} from \"../changes\";\n\nimport {} from \"../Functions/base\";\n\nimport * as selection from \"../selection\";\n\nimport * as R from \"ramda\";\n\nimport * as RangeInlineJSON from \"../Functions/RangeInlineJSON\";\n\nimport {\n xor,\n} from \"lodash\";\n\nexport default function toggleStyleAtSelection(style: StyleName, editActionContext: EditActionContext) {\n const {\n data,\n variantDataById,\n currentMenu,\n addChanges,\n setCurrentDocSelection,\n nodeDefinitions,\n newActiveStyles = [],\n newInactiveStyles = [],\n setNewActiveStyles,\n setNewInactiveStyles,\n } = editActionContext;\n\n const currentDocSelection = selection.getDocSelection();\n\n if (!currentDocSelection || currentMenu) { return false; }\n\n const dataToUse = currentDocSelection.variantId ? variantDataById[currentDocSelection.variantId] : data;\n\n const activeStylesFromChanges = RangeInlineJSON.stylesCoveringDocSelection(dataToUse, currentDocSelection);\n const activeStyles = xor(R.keys(activeStylesFromChanges).concat(newActiveStyles), newInactiveStyles);\n\n if (selection.isCollapsed(currentDocSelection)) {\n if (!R.keys(activeStylesFromChanges).includes(style)) {\n setNewActiveStyles(xor(newActiveStyles, [style]));\n } else {\n setNewInactiveStyles(xor(newInactiveStyles, [style]));\n }\n } else {\n const {\n uid: startUID,\n contentKey: startKey,\n index: startIndex,\n } = currentDocSelection.start;\n\n const {\n uid: endUID,\n contentKey: endKey,\n index: endIndex,\n } = currentDocSelection.end;\n\n const newStyleChange = activeStyles.includes(style) ? newDeleteStyleChange : newAddStyleChange;\n\n addChanges([newStyleChange(currentDocSelection, style)], currentDocSelection.variantId);\n }\n\n return true;\n}\n","import * as React from \"react\";\n\nimport { UnwrappedNewEditDocApp } from \"../../../startup/NewEditDocApp\";\nimport NewEditDocContainer from \"../Container\";\nimport analytics from \"../../../../application/analytics\";\n\ninterface TeachingPointModalProps {\n currentUser: User;\n defaultChangesDisplayMode: ChangesDisplayMode;\n displayUid: string;\n document_id: number;\n documentId: number;\n isAdmin: boolean;\n permissions: AqPermissions;\n publish_version_id: number;\n skipProvider: boolean;\n teaching_point_uid: string;\n title: string;\n versionId: number;\n itemResponseId: number;\n};\n\ninterface TeachingPointModalState {\n isOpen: boolean;\n};\n\nexport default class TeachingPointModal extends React.Component<TeachingPointModalProps, TeachingPointModalState> {\n constructor(props: TeachingPointModalProps) {\n super(props);\n\n this.state = {isOpen: false};\n }\n\n onClick(e: React.MouseEvent<HTMLAnchorElement>) {\n e.preventDefault();\n if(!this.state.isOpen) {\n analytics.track(\"click_teaching_point_link\", { page: window.location.href, source: 'Calibrate Reports', item_response_id: this.props.itemResponseId })\n }\n this.setState({isOpen: !this.state.isOpen});\n }\n\n getEmbeded() {\n if (this.props.skipProvider) {\n return <NewEditDocContainer\n docType=\"ReusableObject\"\n documentId={this.props.documentId || this.props.document_id}\n versionId={this.props.versionId || this.props.publish_version_id}\n currentUser={this.props.currentUser}\n isAdmin={this.props.isAdmin}\n permissions={this.props.permissions}\n defaultChangesDisplayMode={this.props.defaultChangesDisplayMode}\n displayUid={this.props.displayUid || this.props.teaching_point_uid}\n />\n } else {\n return <UnwrappedNewEditDocApp\n docType=\"ReusableObject\"\n documentId={this.props.documentId || this.props.document_id}\n versionId={this.props.versionId || this.props.publish_version_id}\n currentUser={this.props.currentUser}\n isAdmin={this.props.isAdmin}\n permissions={this.props.permissions}\n defaultChangesDisplayMode={this.props.defaultChangesDisplayMode}\n displayUid={this.props.displayUid || this.props.teaching_point_uid}\n isEmbeded\n />\n }\n }\n\n render() {\n return (\n <span>\n <a className=\"teaching-point-link\" href=\"#\" onClick={this.onClick.bind(this)}>{this.props.title}</a>\n {this.state.isOpen && <div className=\"gen-modal teaching-point-modal\">\n <div className=\"gen-modal-panel\">\n <div className=\"teaching-point-modal-header\">\n <span className=\"close-x\" onClick={this.onClick.bind(this)}>X</span>\n </div>\n {this.getEmbeded()}\n <button className=\"actionBtn\" onClick={this.onClick.bind(this)}>Close</button>\n </div>\n </div>}\n </span>\n );\n }\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Pagify from 'react-pagify';\nimport segmentize from 'segmentize';\n\nconst Paginator = ({ pagination, pages, onSelect }) => (\n <div className=\"pagination\">\n <Pagify.Context\n className=\"pagify-pagination\"\n segments={segmentize({\n page: pagination.page,\n pages,\n beginPages: 3,\n endPages: 3,\n sidePages: 2\n })}\n onSelect={onSelect}\n >\n <Pagify.Button page={pagination.page - 1}>Previous</Pagify.Button>\n\n <Pagify.Segment field=\"beginPages\" />\n\n <Pagify.Ellipsis\n className=\"ellipsis\"\n previousField=\"beginPages\"\n nextField=\"previousPages\"\n />\n\n <Pagify.Segment field=\"previousPages\" />\n <Pagify.Segment field=\"centerPage\" className=\"selected\" />\n <Pagify.Segment field=\"nextPages\" />\n\n <Pagify.Ellipsis\n className=\"ellipsis\"\n previousField=\"nextPages\"\n nextField=\"endPages\"\n />\n\n <Pagify.Segment field=\"endPages\" />\n\n <Pagify.Button page={pagination.page + 1}>Next</Pagify.Button>\n </Pagify.Context>\n </div>\n);\nPaginator.propTypes = {\n pagination: PropTypes.object,\n pages: PropTypes.number,\n onSelect: PropTypes.func\n};\n\nexport default Paginator;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst PerPage = ({ value, onChange }) => (\n <div>\n <span>Per page:</span>\n <input\n type=\"text\"\n defaultValue={value}\n onChange={e => onChange(e.target.value)}\n />\n </div>\n);\nPerPage.propTypes = {\n value: PropTypes.number,\n onChange: PropTypes.func\n};\n\nexport default PerPage;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport * as search from 'searchtabular';\nimport PerPage from './PerPage';\n\nconst PrimaryControls = ({\n perPage, columns, rows, column, query,\n onPerPage, onSearch, onColumnChange,\n show_pagination,\n ...props\n}) => (\n <div {...props}>\n {show_pagination &&\n <div className=\"per-page-container\">\n <PerPage value={perPage} onChange={onPerPage}/>\n </div>\n }\n <div className=\"search-container\">\n <span>Search</span>\n <search.Field\n column={column}\n query={query}\n columns={columns}\n rows={rows}\n onChange={onSearch}\n onColumnChange={onColumnChange}\n />\n </div>\n </div>\n);\nPrimaryControls.propTypes = {\n perPage: PropTypes.number,\n columns: PropTypes.array,\n rows: PropTypes.array,\n column: PropTypes.string,\n query: PropTypes.object,\n onPerPage: PropTypes.func,\n onSearch: PropTypes.func,\n onColumnChange: PropTypes.func\n};\n\nexport default PrimaryControls;\n","import React from 'react';\nimport * as edit from 'react-edit';\nimport * as sort from 'sortabular';\nimport {\n cloneDeep, findIndex\n} from 'lodash';\n\nfunction sortHeader(sortable, getSortingColumns) {\n return (value, { columnIndex }) => {\n const sortingColumns = getSortingColumns() || [];\n\n const tooltipText = sortingColumns[columnIndex] && sortingColumns[columnIndex].tooltipText;\n return (\n <div style={{ display: 'inline' }}>\n <span className=\"value\">{value}</span>\n {tooltipText &&\n <span className=\"tooltip2 question-tooltip\"><span className=\"tooltiptext\">{tooltipText}</span></span>\n }\n {React.createElement(\n 'span',\n sortable(\n value,\n {\n columnIndex\n },\n {\n style: { float: 'right' }\n }\n )\n )}\n {sortingColumns[columnIndex] &&\n <span className=\"sort-order\" style={{ marginLeft: '0.5em', float: 'right' }}>\n {sortingColumns[columnIndex].position + 1}\n </span>\n }\n </div>\n );\n };\n}\n\nexport function sortingHeader() {\n const sortable = sort.sort({\n getSortingColumns: () => this.state.sortingColumns || [],\n onSort: selectedColumn => {\n this.setState({\n sortingColumns: sort.byColumn({ // sort.byColumns would work too\n sortingColumns: this.state.sortingColumns,\n selectedColumn\n })\n });\n }\n });\n return sortHeader(sortable, () => this.state.sortingColumns);\n}\n\nexport function editingCell(controlling_attribute) {\n return edit.edit({\n isEditing: ({ columnIndex, rowData }) => columnIndex === rowData.editing,\n onActivate: ({ columnIndex, rowData }) => {\n const index = findIndex(this.state.rows, { id: rowData.id });\n const rows = cloneDeep(this.state.rows);\n\n if (!controlling_attribute || rows[index][controlling_attribute]) {\n rows[index].editing = columnIndex;\n }\n\n this.setState({ rows });\n },\n onValue: ({ value, rowData, property }) => {\n const index = findIndex(this.state.rows, { id: rowData.id });\n const rows = cloneDeep(this.state.rows);\n\n rows[index][property] = value;\n rows[index].editing = false;\n\n this.setState({ rows });\n }\n });\n}\n\nexport function Checkbox(ref) {\n var value = ref.value,\n onValue = ref.onValue;\n\n onValue(!value);\n\n return null;\n};\n\nexport function AddNameAttribute(property, params, prefix, other) {\n return <div>\n <input\n type=\"hidden\"\n name={`${prefix}[][${property}]`}\n value={params.rowData[property]}\n ></input>\n {other}\n </div>\n};\n\nexport function ActionLink(toBeWrapped, extra, action, switch_key) {\n if (extra.rowData[switch_key]) {\n return <a href=\"javascript: void(0)\" data-action={action}>{toBeWrapped}</a>\n } else {\n return toBeWrapped\n }\n};\n\nexport function Button(type, innards, action, target, className, disabled) {\n return <button className={className} type={type} data-target={target} data-action={action} disabled={disabled}>{innards}</button>\n};\n","import React from 'react';\nimport AsyncSelect from 'react-select/async';\nimport * as edit from 'react-edit';\nimport * as search from 'searchtabular';\nimport {\n editingCell,\n sortingHeader,\n ActionLink,\n AddNameAttribute,\n Button,\n Checkbox\n} from './helpers/table_def_funcs';\nimport TeachingPointModal from 'NewEditDoc/TeachingPointModal/component'\nimport DragDrop from 'app/assets/images/drag_and_drop.svg'\n\nconst ROSTERING_TIMING_OPTIONS = [\n {name: 'Standard', value: 1.0},\n {name: '1.5x' , value: 1.5},\n {name: '2.0x' , value: 2.0}\n];\n\nconst CASE_REPORT_OPTIONS = [\n {name: 'Select Report', value: 'select_report'},\n {name: 'Project Status Report', value: 'project_status_report'},\n {name: 'Project Workflow Report', value: 'project_workflow_report'},\n {name: 'Summary of Edits Report', value: 'summary_of_edits_report'},\n {name: 'Cases Content Report', value: 'cases_content_report'},\n {name: 'Project Editors Report', value: 'project_editors_report'},\n {name: 'Comments Report', value: 'comments_report'}\n];\n\nconst ASSESSMENT_REPORT_OPTIONS = [\n {name: 'Select Report', value: 'select_report'},\n {name: 'Project Status Report', value: 'project_status_report'},\n {name: 'Project Workflow Report', value: 'project_workflow_report'},\n {name: 'Summary of Edits Report', value: 'summary_of_edits_report'},\n {name: 'Project Editors Report', value: 'project_editors_report'}\n];\n\nconst CCI_PROJECT_ROLE_OPTIONS = [\n {name: 'Reviewer', value: 'reviewer'},\n {name: 'Case Editor', value: 'case_editor'},\n {name: 'Production Associate', value: 'production_associate'},\n {name: 'Associate Editor', value: 'associate_editor'},\n {name: 'Assessment Lead', value: 'assessment_lead'},\n {name: 'Editor-in-Chief', value: 'editor_in_chief'}\n];\n\nconst FLAGGED_ASSESSMENT_PROJECT_ROLE_OPTIONS = [\n {name: 'Primary Editor', value: 'primary_editor'},\n {name: 'Production Associate', value: 'production_associate'},\n {name: 'Dyad Reviewer', value: 'dyad_reviewer'},\n {name: 'Group Reviewer', value: 'group_reviewer'},\n {name: 'Assessment Lead', value: 'assessment_lead'},\n {name: 'Editor-in-Chief', value: 'editor_in_chief'},\n {name: 'Copy Editor', value: 'copy_editor'}\n];\n\nconst NEW_ASSESSMENT_PROJECT_ROLE_OPTIONS = [\n {name: 'Author', value: 'author'},\n {name: 'Production Associate', value: 'production_associate'},\n {name: 'Dyad Reviewer', value: 'dyad_reviewer'},\n {name: 'Group Reviewer', value: 'group_reviewer'},\n {name: 'Assessment Lead', value: 'assessment_lead'},\n {name: 'Editor-in-Chief', value: 'editor_in_chief'},\n {name: 'Copy Editor', value: 'copy_editor'}\n];\n\nexport const TABLE_DEFS = {\n project_editors_report_table: function() {\n const editable = editingCell.call(this);\n const sortableHeader = sortingHeader.call(this);\n\n return [\n {\n property: 'first_name',\n header: {\n label: 'First Name',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n cell: {\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'last_name',\n header: {\n label: 'Last Name',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n cell: {\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'email',\n header: {\n label: 'Email',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n cell: {\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'project_role',\n header: {\n label: 'Project Role',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n cell: {\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'course',\n header: {\n label: 'Course',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n cell: {\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'project_name',\n header: {\n label: 'Project Status Report',\n },\n cell: {\n formatters: [\n (project_name, extraParameters) => {\n if (extraParameters.rowData.project_status_report_url === \"n/a\") {\n return \"n/a\"\n } else {\n return <a href={extraParameters.rowData.project_status_report_url} target='_blank'>{project_name}</a>\n }\n }\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n props: {\n style: {\n textAlign: 'center',\n },\n className: \"button-column\"\n },\n visible: true\n },\n ];},\n\n new_item_authors_report_table: function(){\n const sortableHeader = sortingHeader.call(this);\n\n return [\n {\n property: 'author_name',\n header: {\n label: 'Author\\'s Name',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 150\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'course',\n header: {\n label: 'Course',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 150\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'case',\n header: {\n label: 'Case #',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 150\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n\n }\n }\n },\n visible: true\n },\n {\n property: 'project_name',\n header: {\n label: 'Project Name',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 150\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'item_label',\n header: {\n label: 'Item Label',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 150\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'author_start_date',\n header: {\n label: 'Author\\'s Start Date',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 150\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'author_completion_date',\n header: {\n label: 'Author\\'s Completion Date',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 150\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'days_author_start_to_complete',\n header: {\n label: '# Days Author Start to Complete',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 150\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n ];},\n\n student_performance_report: function() {\n const editable = editingCell.call(this);\n const sortableHeader = sortingHeader.call(this);\n\n return [\n {\n property: 'teaching_point_title',\n header: {\n label: 'Teaching Point',\n formatters: [sortableHeader],\n },\n cell: {\n formatters: [\n (teaching_point_title, extraParameters) => {\n return (\n <TeachingPointModal\n title={teaching_point_title}\n document_id={extraParameters.rowData.document_id}\n publish_version_id={extraParameters.rowData.publish_version_id}\n teaching_point_uid={extraParameters.rowData.teaching_point_uid}\n />\n )\n }\n ]\n },\n visible: true\n },\n {\n property: 'system',\n header: {\n label: 'System',\n formatters: [sortableHeader]\n },\n cell: {\n formatters: [search.highlightCell],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'learning_objective',\n header: {\n label: 'Learning Objective',\n formatters: [sortableHeader]\n },\n cell: {\n formatters: [search.highlightCell]\n },\n visible: true\n },\n {\n property: 'accuracy',\n header: {\n label: 'Accuracy',\n formatters: [sortableHeader]\n },\n cell: {\n formatters: [search.highlightCell],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'certainty',\n header: {\n label: 'Certainty',\n formatters: [sortableHeader]\n },\n cell: {\n formatters: [search.highlightCell],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'clinical_learning_calibration',\n header: {\n label: 'Clinical Learning Calibration',\n formatters: [sortableHeader]\n },\n cell: {\n formatters: [search.highlightCell],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'case_completed',\n header: {\n label: 'Case Completed',\n formatters: [sortableHeader]\n },\n cell: {\n formatters: [search.highlightCell],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'case_name',\n header: {\n label: 'Case',\n formatters: [sortableHeader]\n },\n cell: {\n formatters: [\n (case_name, extraParameters) => <a href={extraParameters.rowData.case_path} target='_blank'>{case_name}</a>\n ]\n },\n visible: true\n }\n ];},\n\n case_content_report_table: function() {\n const sortableHeader = sortingHeader.call(this);\n\n return [\n {\n property: 'course_name',\n header: {\n label: 'Course',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 300\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'case_number',\n header: {\n label: 'Case #',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 100\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'case_title',\n header: {\n label: 'Case Title',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 200\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n\n }\n }\n },\n visible: true\n },\n {\n property: 'word_count_published_version',\n header: {\n label: 'Word count (published)',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 150\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'word_count_SR_version',\n header: {\n label: 'Word count (SR)',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 150\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'number_of_pages_published_version',\n header: {\n label: '# Pages (published)',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 150\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'number_of_pages_SR_version',\n header: {\n label: '# Pages (SR)',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 150\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'number_of_teaching_points_published_version',\n header: {\n label: '# Teaching Points (published)',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 200\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'number_of_teaching_points_SR_version',\n header: {\n label: '# Teaching Points (SR)',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 200\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'number_of_deep_dives_published_version',\n header: {\n label: '# Deep Dives (published)',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 150\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'number_of_deep_dives_SR_version',\n header: {\n label: '# Deep Dives (SR)',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 150\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'number_of_engagement_questions_published_version',\n header: {\n label: '# Engagement Questions (published)',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 150\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'number_of_engagement_questions_SR_version',\n header: {\n label: '# Engagement Questions (SR)',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 150\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'number_of_SAQs_published_version',\n header: {\n label: '# SAQs (published)',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 150\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'number_of_SAQs_SR_version',\n header: {\n label: '# SAQs (SR)',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n width: 150\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n ];},\n\n project_team_table: function() {\n const editable = editingCell.call(this);\n const deleteAction = this.props.delete_action\n const showEditColumns = this.props.show_edit_columns\n const loadOptions = (inputValue, callback) => {\n let url = new URL(this.props.editors_url)\n url.searchParams.set('q', inputValue)\n\n fetch(url)\n .then(response => response.json())\n .then(editorData => {\n editorData = [{label: '<none>', value: null}, ...editorData]\n callback(editorData)\n })\n };\n\n this.handleInputChange = (newValue) => {\n const inputValue = newValue.replace(/\\W/g, '');\n this.setState({ inputValue });\n return inputValue;\n };\n\n this.handleEditors = (newValue, url) => {\n $.ajax({\n url: url,\n type: 'PATCH',\n data: { user_id: newValue.value },\n async: false,\n dataType: 'json',\n success: function (response) {\n },\n error: function(message) {\n alert(message.responseText);\n }\n });\n }\n\n let projectRoleOptions = []\n if(this.props.project_type == \"Projects::CaseProject\"){\n projectRoleOptions = CCI_PROJECT_ROLE_OPTIONS\n }else if(this.props.project_type == \"Projects::FlaggedAssessmentProject\"){\n projectRoleOptions = FLAGGED_ASSESSMENT_PROJECT_ROLE_OPTIONS\n }else{\n projectRoleOptions = NEW_ASSESSMENT_PROJECT_ROLE_OPTIONS\n }\n\n return [\n {\n header: {},\n cell: {\n formatters: [\n (_, extra) => {\n return <img src={DragDrop} alt=\"Drag and Drop Button\"/>\n }\n ]\n },\n props: {\n style: {\n width: 50,\n backgroundColor: '#EFEFEF'\n },\n className: \"button-column drag-me-only\"\n },\n visible: true\n },\n {\n property: 'status',\n header: {\n label: 'Status',\n formatters: []\n },\n cell: {\n transforms: [],\n formatters: [\n (name, extraParameters) => <span style= {{backgroundColor: extraParameters.rowData.status == 'completed' ? '#FDFD96' : extraParameters.rowData.status == 'active' ? '#C1E1C1' : null }}> {extraParameters.rowData.status }</span>\n ],\n props: {}\n },\n props: {\n style: {\n width: 130\n },\n },\n visible: true\n },\n {\n property: 'role',\n header: {\n label: 'Project Role',\n formatters: [],\n props: {}\n },\n cell: {\n transforms: [\n editable(\n edit.dropdown({\n options: projectRoleOptions,\n }))],\n formatters: [\n (role, extraParameters) => AddNameAttribute(\n 'role',\n extraParameters,\n this.props.name_prefix,\n <span className=\"dropdown-cell\">{projectRoleOptions.find(elem => elem.value == extraParameters.rowData.role).name}</span>\n )\n ]\n },\n props: {\n style: {\n width: 280\n },\n },\n visible: true\n },\n {\n property: 'user_label',\n header: {\n label: 'User',\n formatters: [],\n props: {\n style: {\n width: '60%'\n },\n }\n },\n cell: {\n transforms: [],\n formatters: [\n (val, extra) => {\n return <AsyncSelect\n cacheOptions\n loadOptions={loadOptions}\n defaultOptions\n name={this.props.team_member_user_id_field_name}\n defaultValue={{label: extra.rowData['user_label'], value: extra.rowData['user_id']}}\n // onInputChange={this.handleInputChange}\n // onChange={(value) => this.handleEditors(value, extra.rowData.update_member_path)}\n />\n }\n ]\n },\n visible: true\n },\n {\n property: 'member_id',\n header: {\n label: '',\n formatters: [],\n props: {style: {\n display: 'none'\n },\n }\n },\n cell: {\n transforms: [],\n formatters: [\n (val, extra) => {\n return <AsyncSelect\n name={this.props.member_id_field_name}\n defaultValue={{label: extra.rowData['member_id'], value: extra.rowData['member_id']}}\n style=\"display:none;\"\n />\n }\n ],\n props: {style: {\n display: 'none'\n },\n }\n },\n filterable: false,\n visible: true\n },\n {\n header: {\n label: 'Editor`s Checklist',\n },\n cell: {\n formatters: [\n (name, extraParameters) => <a href={extraParameters.rowData.editor_checklist_path} style= {{color: 'black'}} target='_blank'><i className=\"fas fa-external-link-alt\"></i></a>\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n props: {\n style: {\n width: 85,\n textAlign: 'center',\n },\n className: \"button-column\"\n },\n visible: showEditColumns\n },\n {\n header: {\n label: 'Edit assignments',\n },\n cell: {\n formatters: [\n //todo create modal for edit assignments\n (name, extraParameters) => <a href={extraParameters.rowData.edit_assignments_path} style= {{color: 'black'}} target='_blank'><i className=\"fas fa-external-link-alt\"></i></a>\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n props: {\n style: {\n width: 110,\n textAlign: 'center',\n },\n className: \"button-column\"\n },\n visible: showEditColumns\n },\n {\n header: {},\n cell: {\n formatters: [\n (_, extra) => {\n return <a data-action={deleteAction} style={{color: 'red'}}>X Delete</a>\n }\n ]\n },\n props: {\n style: {\n width: 85\n },\n className: \"button-column\"\n },\n visible: true\n }\n ];},\n\n project_question_set_table: function() {\n const editable = editingCell.call(this);\n const sortableHeader = sortingHeader.call(this);\n return [\n {\n property: 'selected',\n header: {\n label: 'Select One',\n formatters: [],\n props: {\n style: {\n width: 145,\n textAlign: 'center'\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n (selected, extraParameters) =>\n <input\n className=\"selector-radio\"\n type=\"radio\"\n name={`${this.props.name_prefix}[${'id'}]`}\n value={extraParameters.rowData['id']}\n defaultChecked={extraParameters.rowData['checked']}\n onChange={() => null}\n />\n ],\n props: {\n style: {\n textAlign: 'center'\n }\n }\n },\n filterable: false,\n visible: true\n },\n {\n property: 'id',\n header: {\n label: 'ID',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {}\n },\n visible: false\n },\n {\n property: 'title',\n header: {\n label: 'Question Set Label',\n formatters: [\n sortableHeader,\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell,\n (title, extraParameters) => <a href={extraParameters.rowData.show_question_set_path} target='_blank'>{title}</a>\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'created_at',\n header: {\n label: 'Date Created',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n ];},\n\n project_statuses_table: function() {\n const sortableHeader = sortingHeader.call(this);\n const editable = editingCell.call(this);\n const showCciProjectColumn = this.props.show_cci_project_column\n const showAssessmentProjectColumn = this.props.show_assessment_project_column\n // const projectDetailsAction = this.props.project_details_action;\n\n return [\n {\n property: 'course_name',\n header: {\n label: 'Course',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n width: 150,\n textAlign: 'center',\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n ],\n props: {\n style: {\n width: 150,\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'case_number_and_title',\n header: {\n label: 'Case Number And Title',\n formatters: [\n sortableHeader,\n ],\n props: {\n style: {\n width: 350,\n textAlign: 'center',\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n width: 350,\n textAlign: 'center',\n }\n }\n },\n visible: showCciProjectColumn\n },\n {\n property: 'case_number_and_title',\n header: {\n label: 'Question Set Item',\n formatters: [\n sortableHeader,\n ],\n props: {\n style: {\n width: 350,\n textAlign: 'center',\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n width: 350,\n textAlign: 'center',\n }\n }\n },\n visible: showAssessmentProjectColumn\n },\n {\n property: 'review_status',\n header: {\n label: 'Review Status',\n transforms: [],\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n width: 150,\n textAlign: 'center',\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n width: 150,\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'date_last_updated',\n header: {\n label: 'Date Last Updated',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n width: 150,\n textAlign: 'center',\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n width: 150,\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'project_team',\n header: {\n label: 'Project Team',\n },\n cell: {\n formatters: [],\n props: {\n style: {\n width: 150,\n textAlign: 'center',\n }\n }\n },\n props: {\n style: {\n width: 300,\n textAlign: 'center',\n },\n className: \"button-column\"\n },\n visible: true\n },\n {\n property: 'project_name',\n header: {\n label: 'Project Workflow Report',\n },\n cell: {\n formatters: [\n (project_name, extraParameters) => {\n return <a href={extraParameters.rowData.workflow_report_link} target='_blank'>{project_name}</a>\n }\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n props: {\n style: {\n textAlign: 'center',\n },\n className: \"button-column\"\n },\n visible: true\n },\n ];},\n\n project_dashboard_table: function() {\n const sortableHeader = sortingHeader.call(this);\n const projectDetailsAction = this.props.project_details_action;\n const showAquiferAdminColumns = this.props.show_aquifer_admin_columns\n const showCciProjectColumn = this.props.show_cci_project_column\n const showAssessmentProjectColumn = this.props.show_assessment_project_column\n const editable = editingCell.call(this);\n const reportAction = this.props.report_action;\n\n return [\n {\n property: 'name',\n header: {\n label: 'Project Name',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n width: 200,\n textAlign: 'center',\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell,\n (name, extraParameters) => {\n if(showAquiferAdminColumns) {\n return <a href={extraParameters.rowData.edit_path} target='_blank'>{name}</a>\n }else{\n return <>{name}</>\n }\n }\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'reviewable',\n header: {\n label: 'Reviewable',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n width: 200,\n textAlign: 'center',\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell,\n (reviewable, extraParameters) => <a href={extraParameters.rowData.aet_path} target='_blank'>{reviewable}</a>\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'priority',\n header: {\n label: 'Priority',\n formatters: [\n sortableHeader,\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'start_date',\n header: {\n label: 'Start Date',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'status',\n header: {\n label: 'Status',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'workflow_status',\n header: {\n label: 'Workflow Status',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: showCciProjectColumn\n },\n {\n header: {\n label: 'Workflow Status',\n },\n cell: {\n formatters: [\n search.highlightCell,\n (name, extraParameters) => <a href={extraParameters.rowData.workflow_status_path} style= {{color: 'black'}} target='_blank'><i className=\"fas fa-external-link-alt\"></i></a>\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n props: {\n style: {\n textAlign: 'center',\n },\n className: \"button-column\"\n },\n visible: showAssessmentProjectColumn\n },\n {\n header: {\n label: 'Details',\n },\n cell: {\n formatters: [\n (_, extra) => {\n return <a data-action={projectDetailsAction} data-url={extra.rowData.details_url}><i className=\"fas fa-external-link-alt\"></i></a>\n }\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n filterable: false,\n props: {\n style: {\n width: 85,\n textAlign: 'center',\n },\n className: \"button-column\"\n },\n visible: true\n },\n {\n property: 'report_option',\n header: {\n label: 'Reports',\n },\n cell: {\n formatters: [\n search.highlightCell,\n (name, extraParameters) => <a href={extraParameters.rowData.report_path} style= {{color: 'black'}} target='_blank'><i className=\"fas fa-external-link-alt\"></i></a>\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n props: {\n style: {\n width: 240,\n textAlign: 'center',\n },\n className: \"button-column\"\n },\n visible: showCciProjectColumn\n },\n {\n property: 'report_option',\n header: {\n label: 'Reports',\n },\n cell: {\n formatters: [\n search.highlightCell,\n (name, extraParameters) => <a href={extraParameters.rowData.report_path} style= {{color: 'black'}} target='_blank'><i className=\"fas fa-external-link-alt\"></i></a>\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n props: {\n style: {\n width: 240,\n textAlign: 'center',\n },\n className: \"button-column\"\n },\n visible: showAssessmentProjectColumn\n },\n ];},\n\n\n user_report_table: function() {\n const sortableHeader = sortingHeader.call(this);\n\n return [\n {\n property: 'first_name',\n header: {\n label: 'First Name',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n width: 200,\n textAlign: 'center',\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell,\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'last_name',\n header: {\n label: 'Last Name',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n width: 200,\n textAlign: 'center',\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell,\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'email',\n header: {\n label: 'Email',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n width: 200,\n textAlign: 'center',\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell,\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'role_definition',\n header: {\n label: 'Role Definition',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n width: 200,\n textAlign: 'center',\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell,\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'discipline',\n header: {\n label: 'Discipline',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n width: 200,\n textAlign: 'center',\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell,\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'status',\n header: {\n label: 'Status',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n width: 200,\n textAlign: 'center',\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell,\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'created_at',\n header: {\n label: 'Created at',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n width: 200,\n textAlign: 'center',\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell,\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'subscription_end',\n header: {\n label: 'Subscription end',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n width: 200,\n textAlign: 'center',\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell,\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n ];},\n\n dashboard_question_set_index: function() {\n const editable = editingCell.call(this);\n const sortableHeader = sortingHeader.call(this);\n\n return [\n {\n property: 'exam_course',\n header: {\n label: 'Course',\n formatters: [\n sortableHeader\n ],\n props: {\n width: 300\n }\n },\n cell: {\n formatters: [search.highlightCell]\n },\n visible: true\n },\n {\n property: 'title',\n header: {\n label: 'Question Set',\n formatters: [sortableHeader]\n },\n cell: {formatters: [search.highlightCell]},\n visible: true\n },\n {\n property: 'created_at',\n header: {\n label: 'Date Created',\n props: {\n style: {\n textAlign: 'center',\n }\n },\n formatters: [sortableHeader]\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell,\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'questions_count',\n header: {\n label: 'Number of Questions',\n props: {\n style: {\n textAlign: 'right',\n }\n },\n formatters: [sortableHeader]\n },\n cell: {\n formatters: [search.highlightCell],\n props: {\n style: {\n textAlign: 'right',\n }\n }\n },\n visible: true\n },\n {\n property: 'in_use',\n header: {\n label: 'In use',\n props: {\n style: {\n textAlign: 'center',\n }\n },\n formatters: [sortableHeader]\n },\n cell: {\n formatters: [],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: true\n },\n {\n property: 'new_exam_variation_url',\n header: {\n label: `Create ${this.props.exam_variation_label}`,\n props: {\n style: {\n width: 170,\n textAlign: 'center'\n }\n },\n formatters: []\n },\n cell: {\n formatters: [\n (url) => <a href={url}><i className=\"fa fa-edit\"></i></a>\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n filterable: false,\n visible: true\n },\n {\n property: 'question_set_url',\n header: {\n label: 'Manage',\n props: {\n style: {\n textAlign: 'center'\n }\n },\n formatters: []\n },\n cell: {\n formatters: [\n (url) => <a href={url} target='_blank'><i className=\"fa fa-edit\"></i></a>\n ],\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n filterable: false,\n visible: true\n }\n ];},\n\n dashboard_exam_variations_index: function() {\n const editable = editingCell.call(this);\n const sortableHeader = sortingHeader.call(this);\n const statusOptions = this.props.status_options\n const statusAction = this.props.status_action\n const statusTarget = this.props.status_target\n\n return [\n {\n property: 'exam_name',\n header: {\n label: this.props.exam_label,\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n width: 300\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n },\n visible: true\n },\n {\n property: 'form_name',\n header: {\n label: 'Form',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n },\n visible: true\n },\n {\n property: 'version',\n header: {\n label: 'Version',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textTransform: 'capitalize'\n }\n }\n },\n visible: true\n },\n {\n property: 'status',\n header: {\n label: 'Status',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n transforms: [\n (_, extraParameters) => {\n return {\n 'data-exam-variation-url': extraParameters.rowData.exam_variation_url\n }\n },\n editable(\n edit.dropdown({\n props: {\n 'data-action' : statusAction\n },\n options: statusOptions\n })\n )\n ],\n formatters: [\n (status, extraParameters) => {\n return <span className=\"dropdown-cell\">{extraParameters.rowData.status}</span>\n }\n ],\n props: {\n style: {\n textTransform: 'capitalize'\n }\n }\n },\n visible: true\n },\n {\n property: 'date_created',\n header: {\n label: 'Date Created',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n formatters: [\n search.highlightCell,\n ]\n },\n visible: true\n },\n {\n property: 'deliveries_count',\n header: {\n label: 'Num Deliveries',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n formatters: [\n (deliveriesCount, extraParameters) => {\n let url = extraParameters.rowData.delivered_to_path\n\n if (deliveriesCount === 0) {\n return deliveriesCount\n } else {\n return <a href={url} target='_blank'>{deliveriesCount}</a>\n }\n }\n ],\n props: {\n style: {\n textAlign: 'right',\n }\n }\n },\n visible: true\n },\n {\n property: 'edit_path',\n header: {\n label: 'Manage',\n props: {\n style: {\n textAlign: 'center'\n }\n }\n },\n cell: {\n formatters: [\n (url) => <a href={url}><i className=\"fa fa-edit\"></i></a>\n ],\n props: {\n style: {\n textAlign: 'center'\n }\n }\n },\n filterable: false,\n visible: true\n }\n ];},\n\n dashboard_deliveries_index: function() {\n const editable = editingCell.call(this);\n const sortableHeader = sortingHeader.call(this);\n const showAquiferAdminColumns = this.props.show_aquifer_admin_columns\n\n return [\n {\n property: 'status',\n header: {\n label: 'Status',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n formatters: [\n (status, extraParameters) => <a href={extraParameters.rowData.edit_path} target='_blank'>{status}</a>\n ],\n },\n visible: true\n },\n {\n property: 'group_name',\n header: {\n label: 'Program',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n formatters: [\n search.highlightCell\n ]\n },\n visible: showAquiferAdminColumns\n },\n {\n property: 'exam_title',\n header: {\n label: this.props.exam_label,\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n formatters: [\n search.highlightCell\n ]\n },\n visible: true\n },\n {\n property: 'nickname',\n header: {\n label: 'Nickname',\n formatters: []\n },\n cell: {\n formatters: [\n search.highlightCell\n ]\n },\n visible: true\n },\n {\n property: 'availability_range',\n header: {\n label: 'Availability Dates',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n formatters: [\n search.highlightCell\n ]\n },\n props: {\n style: {\n width: 300\n }\n },\n visible: true\n },\n {\n property: 'purpose',\n header: {\n label: 'Purpose',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n formatters: [\n search.highlightCell\n ]\n },\n visible: true\n },\n {\n property: 'default_form',\n header: {\n label: 'Default Form',\n formatters: []\n },\n cell: {\n formatters: [\n search.highlightCell\n ]\n },\n filterable: false,\n visible: showAquiferAdminColumns\n },\n {\n property: 'versions',\n header: {\n label: 'Versions',\n formatters: []\n },\n cell: {\n formatters: [\n search.highlightCell\n ]\n },\n filterable: false,\n visible: showAquiferAdminColumns\n },\n {\n property: 'type_of_student',\n header: {\n label: 'Type of Student',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n formatters: [\n search.highlightCell\n ]\n },\n visible: true\n },\n {\n property: 'created_at',\n header: {\n label: 'Date Added',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n formatters: [\n search.highlightCell\n ]\n },\n visible: true\n },\n {\n property: 'student_registered_count',\n header: {\n label: '# of Students Registered',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n formatters: [\n search.highlightCell\n ]\n },\n visible: true\n },\n {\n property: 'student_completed_count',\n header: {\n label: '# of Students Completed',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n formatters: [\n search.highlightCell\n ]\n },\n visible: true\n }\n ];},\n\n exam_items: function() {\n const editable = editingCell.call(this);\n const conditionally_editable = editingCell.call(this, 'scorable');\n const sortableHeader = sortingHeader.call(this);\n\n return [\n {\n property: 'selected',\n header: {\n label: 'Selected',\n formatters: [\n (selected, extraParameters) => {\n let visibleRows = this.gatherRows().rows;\n let allVisibleAreSelected = visibleRows.every(row => row['selected']);\n\n return <div style={{display: 'inline'}}>\n <input\n type=\"checkbox\"\n checked={allVisibleAreSelected}\n onClick={() => this.toggleSelect(visibleRows, !allVisibleAreSelected)}\n onChange={() => null}\n style={{width: '20px'}}\n />\n {sortableHeader(selected, extraParameters)}\n </div>\n }\n ],\n props: {\n style: {\n width: 150,\n textAlign: 'center',\n zIndex: 20\n }\n }\n },\n cell: {\n transforms: [editable(Checkbox)],\n formatters: [\n (selected, extraParameters) => AddNameAttribute(\n 'selected',\n extraParameters,\n this.props.name_prefix,\n (() => {\n return <input\n className=\"selector-checkbox\"\n type=\"checkbox\"\n checked={selected}\n onChange={() => null}\n />\n }).call()\n )\n ],\n props: {\n style: {\n textAlign: 'center'\n }\n }\n },\n filterable: false,\n visible: true\n },\n {\n property: 'scored',\n header: {\n label: 'Scored',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n width: 105\n }\n }\n },\n cell: {\n transforms: [conditionally_editable(Checkbox)],\n formatters: [\n (scored, extraParameters) => {\n if (extraParameters.rowData.scorable) {\n return AddNameAttribute(\n 'scored',\n extraParameters,\n this.props.name_prefix,\n (() => {\n return <input\n className=\"selector-checkbox\"\n type=\"checkbox\"\n checked={scored}\n onChange={() => null}\n />;\n }).call());\n } else {\n return <span style={{ color: 'Blue' }}\n title=\"This question cannot be scored because it has no historical efficiency data\">\n N/A\n </span>;\n }\n }\n ],\n props: {\n style: {\n textAlign: 'center'\n }\n }\n },\n filterable: false,\n visible: true\n },\n {\n property: 'position',\n header: {\n label: 'Position',\n formatters: [],\n props: {\n style: {\n width: 90\n }\n }\n },\n cell: {\n transforms: [\n (_, extraParameters) => {\n return {\n 'className': extraParameters.rowData.selected ? '' : 'invisible'\n }\n },\n editable(edit.input({\n props: {\n // Prevent the Enter key from submitting the form.\n 'onKeyDown': (ev) => {\n if (ev.which == 13) {\n ev.preventDefault()\n }\n }\n }\n }))\n ],\n formatters: [\n (val, extra) => AddNameAttribute(\n 'position',\n extra,\n this.props.name_prefix,\n <span className=\"number-cell\">{val}</span>)\n ],\n props: {\n style: {\n textAlign: 'right'\n }\n }\n },\n filterable: false,\n visible: true\n },\n {\n property: 'question_id',\n header: {\n label: 'ID',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n width: 110\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n (val, extra) => AddNameAttribute(\n 'question_id',\n extra,\n this.props.name_prefix,\n search.highlightCell(val, extra))\n ],\n props: {\n style: {\n width: 80,\n textAlign: 'right'\n }\n }\n },\n visible: true\n },\n {\n property: 'item_label',\n header: {\n label: 'Item Label',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n width: 200,\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ]\n },\n visible: true\n },\n {\n property: 'vignette',\n header: {\n label: 'Vignette',\n formatters: [\n sortableHeader\n ],\n props: {}\n },\n cell: {\n transforms: [],\n formatters: [\n (val, extra) => AddNameAttribute(\n 'exam_item_id',\n extra,\n this.props.name_prefix,\n search.highlightCell(val, extra))\n ]\n },\n visible: true\n },\n {\n property: 'item_difficulty',\n header: {\n label: 'Item Difficulty',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n width: 120\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textAlign: 'right'\n }\n }\n },\n visible: true\n },\n {\n property: 'discrimination',\n header: {\n label: 'Disc.',\n formatters: [\n sortableHeader\n ],\n props: {\n style: {\n width: 90\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n width: 80,\n textAlign: 'right'\n }\n }\n },\n visible: true\n }\n ];},\n\n exam_variation_deliveries_index: function() {\n const editable = editingCell.call(this);\n const sortableHeader = sortingHeader.call(this);\n\n return [\n {\n property: 'program_name',\n header: {\n label: 'Program name',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n transforms: [],\n formatters: [\n (program_name, extraParameters) => <a href={extraParameters.rowData.edit_delivery_path} target='_blank'>{program_name}</a>\n ],\n },\n visible: true\n },\n {\n property: 'purpose',\n header: {\n label: 'Purpose',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {\n style: {\n textTransform: 'capitalize'\n }\n }\n },\n visible: true\n },\n {\n property: 'program_type',\n header: {\n label: 'Type of student',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n },\n visible: true\n },\n {\n property: 'date_assigned',\n header: {\n label: 'Date assigned',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n },\n visible: true\n },\n {\n property: 'date_delivered',\n header: {\n label: 'Date delivered',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n },\n visible: true\n },\n {\n property: 'rosterings_count',\n header: {\n label: '# Administrations',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n },\n visible: true\n },\n ];},\n\n rosterings_new: function() {\n const editable = editingCell.call(this);\n const sortableHeader = sortingHeader.call(this);\n\n return [\n {\n property: 'selected',\n header: {\n label: 'Assigned',\n formatters: [\n (selected, extraParameters) => {\n let visibleRows = this.gatherRows().rows;\n let allVisibleAreSelected = visibleRows.every(row => row['selected']);\n\n return <div style={{display: 'inline'}}>\n <input\n type=\"checkbox\"\n checked={allVisibleAreSelected}\n onClick={() => this.toggleSelect(visibleRows, !allVisibleAreSelected)}\n onChange={() => null}\n style={{width: '20px'}}\n />\n {sortableHeader(selected, extraParameters)}\n </div>\n }\n ],\n props: {\n style: {\n width: 145,\n textAlign: 'center'\n }\n }\n },\n cell: {\n transforms: [editable(Checkbox)],\n formatters: [\n (selected, extraParameters) => AddNameAttribute(\n 'selected',\n extraParameters,\n this.props.name_prefix,\n (() => {\n return <input\n className=\"selector-checkbox\"\n type=\"checkbox\"\n checked={selected}\n onChange={() => null}\n />\n }).call()\n )\n ],\n props: {\n style: {\n textAlign: 'center'\n }\n }\n },\n filterable: false,\n visible: true\n },\n {\n property: 'grdu_id',\n header: {\n label: 'GRDU ID',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {}\n },\n visible: false\n },\n {\n property: 'email',\n header: {\n label: 'Email',\n formatters: [\n (selected, extraParameters) => {\n return <div style={{display: 'inline'}}>\n {sortableHeader(selected, extraParameters)}\n {this.props.legacy_form &&\n Button('button', 'Register Batch Emails', 'click->batch-add#openAdd', null, 'delivery-batch-add-btn', false)}\n </div>\n }\n ]\n },\n cell: {\n transforms: [],\n formatters: [\n (val, extra) => AddNameAttribute(\n 'grdu_id',\n extra,\n this.props.name_prefix,\n search.highlightCell(val, extra))\n ],\n props: {}\n },\n visible: true\n },\n {\n property: 'last_name',\n header: {\n label: 'Last Name',\n formatters: [\n sortableHeader\n ],\n props: {}\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ]\n },\n visible: true\n },\n {\n property: 'first_name',\n header: {\n label: 'First Name',\n formatters: [\n sortableHeader\n ],\n props: {}\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ]\n },\n visible: true\n },\n {\n property: 'timing',\n header: {\n label: `${this.props.rostering_label} Timing`,\n formatters: [\n sortableHeader\n ],\n props: {}\n },\n cell: {\n transforms: [\n editable(\n edit.dropdown({\n options: ROSTERING_TIMING_OPTIONS\n }))],\n formatters: [\n (timing, extraParameters) => AddNameAttribute(\n 'timing',\n extraParameters,\n this.props.name_prefix,\n <span className=\"dropdown-cell\">{ROSTERING_TIMING_OPTIONS.find(elem => elem.value == extraParameters.rowData.timing).name}</span>\n )\n ]\n },\n visible: true\n }\n ];},\n\n rosterings_edit: function() {\n const editable = editingCell.call(this);\n const form_editable = editingCell.call(this, 'can_change_form');\n const timing_editable = editingCell.call(this, 'is_rostered');\n const sortableHeader = sortingHeader.call(this);\n const examFormOptions = this.props.exam_form_options || [{name: 'Form A', value: 'form_a'}]\n const examFormAction = this.props.exam_form_action;\n const restartAction = this.props.restart_action;\n const showAquiferAdminColumns = this.props.show_aquifer_admin_columns;\n const status = this.props.status == 'completed';\n const featureFlagOn = this.props.feature_flag\n\n return [\n {\n property: 'selected',\n header: {\n label: 'Assigned',\n formatters: [\n (selected, extraParameters) => {\n let visibleSelectableRows = this.gatherRows().rows.filter(row => !row['freeze_selection']);\n let allVisibleAreSelected = visibleSelectableRows.every(row => row['selected']);\n\n return <div style={{display: 'inline'}}>\n <input\n type=\"checkbox\"\n checked={allVisibleAreSelected}\n onClick={() => this.toggleSelect(visibleSelectableRows, !allVisibleAreSelected)}\n onChange={() => null}\n style={{width: '20px'}}\n />\n {sortableHeader(selected, extraParameters)}\n </div>\n }\n ],\n props: {\n style: {\n width: 160,\n textAlign: 'center',\n zIndex: 20\n }\n }\n },\n cell: {\n transforms: [editable(Checkbox)],\n formatters: [\n (selected, extraParameters) => AddNameAttribute(\n 'selected',\n extraParameters,\n this.props.name_prefix,\n (() => {\n return <input\n className={`selector-checkbox ${extraParameters.rowData.freeze_selection ? 'disable-change' : ''}`}\n type=\"checkbox\"\n checked={selected}\n disabled={extraParameters.rowData.freeze_selection}\n title={extraParameters.rowData.freeze_selection ? extraParameters.rowData.frozen_selection_tooltip : null}\n onChange={() => null}\n />\n }).call()\n )\n ],\n props: {\n style: {\n textAlign: 'center'\n }\n }\n },\n filterable: false,\n visible: true\n },\n {\n property: 'grdu_id',\n header: {\n label: 'GRDU ID',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ],\n props: {}\n },\n visible: false\n },\n {\n property: 'email',\n header: {\n label: 'Email',\n formatters: [\n (selected, extraParameters) => {\n return <div style={{display: 'inline'}}>\n {sortableHeader(selected, extraParameters)}\n {this.props.legacy_form &&\n Button('button', 'Register Batch Emails', 'click->batch-add#openAdd', null, 'delivery-batch-add-btn', status)}\n </div>\n }\n ],\n props: {\n style: {\n width: 300\n }\n }\n },\n cell: {\n transforms: [],\n formatters: [\n (val, extra) => AddNameAttribute(\n 'grdu_id',\n extra,\n this.props.name_prefix,\n search.highlightCell(val, extra))\n ],\n props: {\n className: 'grdu_id_cell'\n }\n },\n visible: true\n },\n {\n property: 'last_name',\n header: {\n label: 'Last Name',\n formatters: [\n sortableHeader\n ],\n props: {}\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ]\n },\n visible: true\n },\n {\n property: 'first_name',\n header: {\n label: 'First Name',\n formatters: [\n sortableHeader\n ],\n props: {}\n },\n cell: {\n transforms: [],\n formatters: [\n search.highlightCell\n ]\n },\n visible: true\n },\n {\n property: 'status',\n header: {\n label: 'Status',\n formatters: [\n sortableHeader\n ],\n props: {}\n },\n cell: {\n transforms: [],\n formatters: [\n (v, extra) => ActionLink(\n search.highlightCell(v, extra),\n extra,\n this.props.explain_status_action,\n this.props.explain_status_switch\n )\n ]\n },\n visible: true\n },\n {\n property: 'exam_form',\n header: {\n label: this.props.exam_variation_label,\n formatters: [\n sortableHeader\n ],\n props: {}\n },\n cell: {\n transforms: [\n form_editable(\n edit.dropdown({\n props: {'data-action' : examFormAction},\n options: examFormOptions\n }))],\n formatters: [\n (_, extraParameters) => {\n if (!extraParameters.rowData.is_rostered) return;\n const cssClass = extraParameters.rowData.can_change_form ? \"dropdown-cell\" : null;\n\n const formValue = extraParameters.rowData.exam_form;\n const defaultFormName = extraParameters.rowData.default_form_name;\n\n const optionPair = examFormOptions.find(elem => elem.value == formValue);\n let formName = optionPair ? optionPair.name : 'Default';\n if (formValue == 'default' && defaultFormName) {\n formName = `${formName} (${defaultFormName})`\n }\n\n return AddNameAttribute(\n 'exam_form',\n extraParameters,\n this.props.name_prefix,\n <span className={cssClass}>{formName}</span>\n )\n }\n ]\n },\n props: {\n style: {\n width: 175\n }\n },\n visible: showAquiferAdminColumns\n },\n {\n property: 'assessment_version',\n header: {\n label: 'Assessment Version',\n formatters: [\n sortableHeader\n ]\n },\n cell: {\n props: {\n style: {\n textAlign: 'center',\n }\n }\n },\n visible: showAquiferAdminColumns\n },\n {\n property: 'timing',\n header: {\n label: `${this.props.rostering_label} Timing`,\n formatters: [\n sortableHeader\n ],\n props: {}\n },\n cell: {\n transforms: [\n timing_editable(\n edit.dropdown({\n options: ROSTERING_TIMING_OPTIONS\n }))],\n formatters: [\n (_, extraParameters) => {\n if (!extraParameters.rowData.is_rostered) return;\n return AddNameAttribute(\n 'timing',\n extraParameters,\n this.props.name_prefix,\n <span className=\"dropdown-cell\">{ROSTERING_TIMING_OPTIONS.find(elem => elem.value == extraParameters.rowData.timing).name}</span>\n )\n }\n ]\n },\n visible: true\n },\n {\n header: {\n label: 'Restart'\n },\n cell: {\n formatters: [\n (_, extra) => {\n if (extra.rowData.can_restart) {\n return <button\n type=\"button\"\n className=\"restart-btn btn btn-outline-primary btn-sm\"\n data-action={restartAction}\n data-url={extra.rowData.restart_url}\n title={`Click to restart the timed-out ${this.props.rostering_label.toLowerCase()}.`}\n >\n </button>\n }\n }\n ]\n },\n props: {\n style: {\n width: 85\n },\n className: \"button-column\"\n },\n visible: featureFlagOn ? true : showAquiferAdminColumns\n }\n ];},\n\n document_questions: function() {\n const sortableHeader = sortingHeader.call(this);\n\n return [\n {\n property: 'title',\n header: {\n label: 'Title',\n formatters: [ sortableHeader ],\n props: { width: 150 }\n },\n cell: { formatters: [\n search.highlightCell,\n (title, extraParameters) => {\n let url = extraParameters.rowData.question_edit_url\n\n return <a href={url} target='_blank'>{title}</a>\n }\n ]},\n visible: true\n },\n {\n property: 'question_type',\n header: {\n label: 'Question Type',\n formatters: [ sortableHeader ],\n props: { width: 150 }\n },\n cell: { formatters: [search.highlightCell] },\n visible: true\n },\n {\n property: 'vignette',\n header: {\n label: 'Vignette',\n formatters: [ sortableHeader ],\n props: { width: 400 }\n },\n cell: { formatters: [search.highlightCell] },\n visible: true\n },\n {\n property: 'images',\n header: {\n label: 'Images',\n formatters: [sortableHeader],\n props: { width: 150 }\n },\n cell: { \n formatters: [\n search.highlightCell,\n (images, extraParameters) => {\n // Check if images is an array and log to see what it contains\n const list = extraParameters.rowData.images\n \n // Safeguard against non-array values, or if images is null/undefined\n return (Array.isArray(list) ? list : []).map((url, index) => {\n return (\n <a \n key={index} \n href={url} \n target=\"_blank\" \n style={{ '--background': `url(${url})` }} \n className=\"qb-thumbnail\"\n rel=\"noopener noreferrer\"\n >\n Image {index + 1}\n </a>\n );\n });\n }\n ]\n },\n visible: true\n },\n {\n property: 'stem',\n header: {\n label: 'Stem',\n formatters: [ sortableHeader ],\n props: { width: 150 }\n },\n cell: { formatters: [search.highlightCell] },\n visible: true\n },\n {\n property: 'cci_status',\n header: {\n label: 'CCI Status',\n formatters: [ sortableHeader ],\n props: { width: 150 }\n },\n cell: { formatters: [search.highlightCell] },\n visible: true\n },\n ]\n },\n\n case_map: function() {\n const sortableHeader = sortingHeader.call(this);\n\n return [\n {\n property: 'learning_objective',\n header: {\n label: 'Learning Objective',\n formatters: [ sortableHeader ]\n },\n cell: { formatters: [search.highlightCell] },\n visible: true\n },\n {\n property: 'teaching_point',\n header: {\n label: 'Teaching Point',\n formatters: [ sortableHeader ]\n },\n cell: {\n formatters: [\n search.highlightCell,\n (teaching_point, extraParameters) => {\n const styleLink = extraParameters.rowData.teaching_point_edited ? {color: 'red'} : {}\n return <a href={\"\"} style={styleLink} onClick={() => extraParameters.rowData.openTeachingPointModal(extraParameters.rowData.teachingPointObject)}>{teaching_point}</a>\n }\n ],\n },\n visible: true\n },\n {\n property: 'assessment_question',\n header: {\n label: 'Assessment Question',\n formatters: [ sortableHeader ]\n },\n cell: {\n formatters: [\n search.highlightCell,\n (assessment_question, extraParameters) => {\n if(assessment_question!=\"\") {\n let usedAvailableFormIcon\n if(extraParameters.rowData.isAssessmentQuestionUsedAvailableForm){\n usedAvailableFormIcon = <i className=\"fas fa-file-alt\"></i>\n }\n const styleLink = extraParameters.rowData.isAssessmentQuestionEdited ? {color: 'red'} : {}\n return <><a href={\"\"} style={styleLink}\n onClick={() => extraParameters.rowData.openAssessmentQuestionModal(extraParameters.rowData.assessmentQuestionObject)}>{assessment_question}</a>\n {usedAvailableFormIcon}</>\n }else{\n return \"\"\n }\n }\n ],\n },\n visible: true\n },\n {\n property: 'current_use',\n header: {\n label: 'Question Type',\n formatters: [ sortableHeader ]\n },\n cell: {\n formatters: [\n search.highlightCell,\n (current_use, extraParameters) => {\n return <>{current_use}</>\n }\n ],\n },\n visible: true\n },\n {\n property: 'body_system',\n header: {\n label: 'Body System',\n formatters: [ sortableHeader ]\n },\n cell: {\n formatters: [\n search.highlightCell,\n (body_system, extraParameters) => {\n if(extraParameters.rowData.isMappedSystemEdited){\n return <label style={{color: 'red'}}>{body_system}</label>\n }else{\n return <>{body_system}</>\n }\n }\n ],\n },\n visible: true\n },\n ]\n }\n}\n","// Based on https://reactabular.js.org/\n\nimport * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport { compose } from 'redux';\nimport {\n cloneDeep, findIndex, orderBy, keys, values, transform\n} from 'lodash';\nimport * as Table from 'reactabular-table';\nimport * as search from 'searchtabular';\nimport * as sort from 'sortabular';\nimport * as resolve from 'table-resolver';\nimport VisibilityToggles from 'react-visibility-toggles';\n\nimport {\n Paginator, PrimaryControls, paginate\n} from './helpers';\nimport { TABLE_DEFS } from './table_defs';\n\nexport default class AqueductTable extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n rows: props.rows,\n searchColumn: 'all',\n query: {}, // search query\n sortingColumns: props.first_column_sort && {0: {direction: props.first_column_sort, position: 0, tooltipText: props.selection_tooltip}}, // reference to the sorting columns\n columns: this.getColumns(), // initial columns\n pagination: { // initial pagination settings\n page: 1,\n perPage: 999999999\n }\n };\n\n this.onRow = this.onRow.bind(this);\n this.onRowSelected = this.onRowSelected.bind(this);\n this.onColumnChange = this.onColumnChange.bind(this);\n this.onSearch = this.onSearch.bind(this);\n this.onSelect = this.onSelect.bind(this);\n this.onPerPage = this.onPerPage.bind(this);\n this.onRemove = this.onRemove.bind(this);\n this.onToggleColumn = this.onToggleColumn.bind(this);\n }\n\n componentDidMount() {\n // Some table cells (<td> elements) have children elements\n // that receive the <td> element's click events\n // when we would not like them to.\n // The only way to prevent those click events from reaching\n // the children is to stop propagation at the <td> level.\n // We identify such <td> elements by adding the \"disable-change\"\n // class to one of the <td> element's descendants.\n for (const el of ReactDOM.findDOMNode(this).getElementsByClassName('disable-change')) {\n el.closest('td').addEventListener('click', (event) => {\n event.stopPropagation();\n })\n }\n }\n\n getColumns() {\n return TABLE_DEFS[this.props.table_def].call(this);\n }\n\n toggleSelect(rowsToToggle, doSelect) {\n let rowIdsToToggle = rowsToToggle.map(row => row.id);\n let rows = cloneDeep(this.state.rows).map(row => {\n if (rowIdsToToggle.includes(row.id)) {\n row.selected = doSelect\n }\n return row;\n });\n\n this.setState({ rows });\n }\n\n gatherRows() {\n const {\n columns, rows, pagination, sortingColumns, searchColumn, query\n } = this.state;\n const cols = columns.filter(column => column.visible);\n return compose(\n paginate(pagination),\n sort.sorter({ columns: cols, sortingColumns, sort: orderBy }),\n search.highlighter({ columns: cols, matches: search.matches, query }),\n search.multipleColumns({ columns: cols, query }),\n resolve.resolve({\n columns: cols,\n method: (extra) => compose(\n resolve.byFunction('cell.resolve')(extra),\n resolve.nested(extra)\n )\n })\n )(rows);\n }\n\n render() {\n const {\n columns, rows, pagination, sortingColumns, searchColumn, query\n } = this.state;\n const cols = columns.\n filter(column => column.visible).\n map(column => {\n if (column && column.property && (!('filterable' in column) || column.filterable)) {\n column.filterPlaceholder = 'type to filter';\n }\n return column;\n });\n const paginated = this.gatherRows();\n const windowTableName = this.props.window_table_name || 'AqueductTable';\n const tableHeight = this.props.table_height || 'fixed-height-table';\n\n return (\n <div ref={() => { window[windowTableName] = this }}>\n {this.props.selectable_columns &&\n <VisibilityToggles\n columns={columns}\n onToggleColumn={this.onToggleColumn}\n />\n }\n <PrimaryControls\n className=\"controls\"\n perPage={pagination.perPage}\n column={searchColumn}\n query={query}\n columns={cols}\n rows={rows}\n onPerPage={this.onPerPage}\n onColumnChange={this.onColumnChange}\n onSearch={this.onSearch}\n show_pagination={this.props.show_pagination}\n />\n\n <div className={tableHeight}>\n <Table.Provider\n className=\"pure-table pure-table-striped\"\n columns={cols}\n style={{ overflowX: 'auto' }}\n >\n <Table.Header\n id={windowTableName}\n >\n <search.Columns query={query} columns={cols} onChange={this.onSearch} />\n </Table.Header>\n\n <Table.Body\n onRow={this.onRow}\n rows={paginated.rows}\n rowKey=\"id\"\n />\n\n <CustomFooter columns={cols} rows={paginated.rows} />\n </Table.Provider>\n </div>\n\n <div className=\"controls\">\n {this.props.show_pagination &&\n <Paginator\n pagination={pagination}\n pages={paginated.amount}\n onSelect={this.onSelect}\n />\n }\n </div>\n </div>\n );\n }\n onRow(row, { rowIndex }) {\n return {\n className: row.row_class,\n 'data-target' : this.props.row_target,\n onClick: () => this.onRowSelected(row)\n };\n }\n onRowSelected(row) {\n // console.log('clicked row', row);\n }\n onColumnChange(searchColumn) {\n this.setState({\n searchColumn\n });\n }\n onSearch(query) {\n this.setState({\n query\n });\n }\n onSelect(page) {\n const pages = Math.ceil(\n this.state.rows.length / this.state.pagination.perPage\n );\n\n this.setState({\n pagination: {\n ...this.state.pagination,\n page: Math.min(Math.max(page, 1), pages)\n }\n });\n }\n onPerPage(value) {\n this.setState({\n pagination: {\n ...this.state.pagination,\n perPage: parseInt(value, 10)\n }\n });\n }\n onRemove(id) {\n const rows = cloneDeep(this.state.rows);\n const idx = findIndex(rows, { id });\n\n // this could go through flux etc.\n rows.splice(idx, 1);\n\n this.setState({ rows });\n }\n onToggleColumn({ columnIndex }) {\n const columns = cloneDeep(this.state.columns);\n const column = columns[columnIndex];\n\n column.visible = !column.visible;\n\n const query = cloneDeep(this.state.query);\n delete query[column.property];\n\n this.setState({ columns, query });\n }\n}\n\nconst CustomFooter = ({ columns, rows }) => {\n return (\n <tfoot>\n <tr>\n {columns.map((column, i) =>\n <td key={`footer-${i}`}>{column.footer ? column.footer(rows) : null}</td>\n )}\n </tr>\n </tfoot>\n );\n}\n","export default function paginate({ page, perPage }) {\n return (rows = []) => {\n // adapt to zero indexed logic\n const p = page - 1 || 0;\n\n const amountOfPages = Math.ceil(rows.length / perPage);\n const startPage = p < amountOfPages ? p : 0;\n\n return {\n amount: amountOfPages,\n rows: rows.slice(startPage * perPage, (startPage * perPage) + perPage),\n page: startPage\n };\n };\n}\n","import React from 'react'\nimport {startCase} from 'lodash'\n\nimport * as classNames from 'classnames'\n\nimport MultiUseImage from \"images/multi-use.jpg\";\nimport SingleUseImage from \"images/single-use.jpg\";\n\nconst ReusableObjectDetail = ({\n rlo,\n onClick,\n children,\n context,\n permissions,\n setAddModalOpen,\n}) => {\n return (\n <tr className = { classNames('gen-select-item', 'document-summary-row') } onClick = { onClick } >\n <td className = \"checkbox col_xsm\" style={{cursor: 'default'}} >\n {context == 'editor'\n ? permissions?.insertRloToDocuments && <a onClick={() => setAddModalOpen(rlo)} className = \"button small\" style={{cursor: 'pointer'}} >Add</a>\n : permissions?.openRloInReadOnlyMode && <a href={`/reusable_objects/${rlo.id}`} className = \"button small\" >Open</a>\n }\n </td>\n <td style={{cursor: 'default'}}>\n { rlo.documents.length > 0 &&\n <img src={rlo.documents.length > 1 ? MultiUseImage : SingleUseImage} height=\"50\" width=\"50\"/>\n }\n </td>\n <td className = \"title\" style={{cursor: 'default', whiteSpace: 'break-spaces'}} >\n <p><b>{startCase(rlo.kind)}</b>: {rlo.name}</p>\n </td>\n <td className = \"docs\" > { children } </td>\n </tr>\n )\n}\n\nexport default ReusableObjectDetail\n","import React, { useState } from 'react'\nimport * as R from \"ramda\";\nimport {startCase} from \"lodash\";\n\nimport GenModal from 'Gen/Modal/component'\nimport ReusableObjectDetail from 'Detail/component'\nimport GenButton from 'Gen/Button/component'\n\nconst DescriptionModal = ({ rlo, closeDescModal }) =>\n <CommonModal\n title='Reusable Content Description'\n rlo={rlo}\n handleClose={closeDescModal}\n >\n <p><b>Description</b></p>\n <p>{rlo.description}</p>\n </CommonModal>\n\nconst MultipleUsedDesc = ({rlo}) => {\n if (rlo.documents.length === 0) {\n return(<p>This Reusable Content is not used in any locations</p>);\n } else if (rlo.documents.length === 1) {\n return(<p>This Reusable Content is used in the single location shown above</p>);\n } else {\n const documentRows = rlo.documents.map((document) => {\n const learningObjectives = rlo.learning_objective_reusable_objects.map(loro => document.learning_objectives.find(lo => lo.id === loro.learning_objective_id)).filter(n => n);\n return (\n <tr key={document.id}>\n <td style={{border: '1px solid #ccc', whiteSpace: 'normal'}}>\n <a href={`/versions/${document.scheduled_review_version_id}/edit?tn=${rlo.uid}`} onClick={(e) => { e.stopPropagation(); return true } }>\n <b dangerouslySetInnerHTML={{__html: document.title}} />\n </a>\n </td>\n <td style={{border: '1px solid #ccc', whiteSpace: 'normal', fontWeight: 'bold'}}>\n <ul>\n { learningObjectives.map((lo) => ( <li key={lo.id}> {lo.name} </li> )) }\n </ul>\n </td>\n <td style={{border: '1px solid #ccc', whiteSpace: 'normal'}}> {document.age_groups} </td>\n <td style={{border: '1px solid #ccc', whiteSpace: 'normal'}}> {document.clinical_locations} </td>\n <td style={{border: '1px solid #ccc', whiteSpace: 'normal'}}> {document.clinical_disciplines} </td>\n <td style={{border: '1px solid #ccc', whiteSpace: 'normal'}}> {document.systems} </td>\n <td style={{border: '1px solid #ccc', whiteSpace: 'normal'}}> {document.presenting_problems} </td>\n <td style={{border: '1px solid #ccc', whiteSpace: 'normal'}}> {document.final_diagnoses} </td>\n <td style={{border: '1px solid #ccc', whiteSpace: 'normal'}}> {document.additional_diagnoses} </td>\n <td style={{border: '1px solid #ccc', whiteSpace: 'normal'}}> {document.clinical_focuses} </td>\n </tr>\n )\n })\n\n return (\n <table>\n <tbody>\n <tr style={{border: '1px solid #ccc'}}>\n <th style={{border: '1px solid #ccc', whiteSpace: 'normal'}}>Where Used </th>\n <th style={{border: '1px solid #ccc', whiteSpace: 'normal', width: '35%'}}>Learning Objective </th>\n <th style={{border: '1px solid #ccc', whiteSpace: 'normal'}}>Age </th>\n <th style={{border: '1px solid #ccc', whiteSpace: 'normal'}}>Clinical Locations </th>\n <th style={{border: '1px solid #ccc', whiteSpace: 'normal'}}>Clinical Discipline </th>\n <th style={{border: '1px solid #ccc', whiteSpace: 'normal'}}>System </th>\n <th style={{border: '1px solid #ccc', whiteSpace: 'normal'}}>Presenting Problem </th>\n <th style={{border: '1px solid #ccc', whiteSpace: 'normal'}}>Final Diagnosis </th>\n <th style={{border: '1px solid #ccc', whiteSpace: 'normal'}}>Additoinal Diagnosis </th>\n <th style={{border: '1px solid #ccc', whiteSpace: 'normal'}}>Clinical Focus </th>\n </tr>\n {documentRows}\n </tbody>\n </table>\n )\n }\n}\n\nconst CommonModal = ({title, rlo, handleClose, children}) => {\n const allDocumentsLearningObjectives = R.uniqBy(lo => lo.id, rlo.documents.flatMap(document => document.learning_objectives));\n const loroLearningObjectives = rlo.learning_objective_reusable_objects.map(loro => allDocumentsLearningObjectives.find(lo => lo.id === loro.learning_objective_id)).filter(n => n);\n\n return (\n <GenModal open>\n <div className=\"gen-modal-panel gen-modal-panel-large\" >\n <div style={{overflow: \"auto\", paddingBottom: \"5px\"}}>\n <button style={{float: \"right\"}} onClick={handleClose}>X</button>\n </div>\n <div style={{backgroundColor: '#0095c9', display: \"flex\"}}>\n <h1 style={{color: \"#FFF\", textAlign: 'center', flexGrow: \"1\"}}>{title}</h1>\n <div style={{margin: '10px'}}>\n <GenButton\n name={\"Export\"}\n href={`/reusable_objects/${rlo.id}/usage_report.pdf`}\n className={\"grey-button\"}\n />\n </div>\n </div>\n <div style={{color: \"#333\", backgroundColor: '#ddd', textAlign: 'left', padding: \"5px\"}}>\n <h3>{startCase(rlo.kind)}: {rlo.name}</h3>\n </div>\n <div style={{padding: \"5px\"}}>\n <p><strong>Source Course:</strong> {rlo.document_sets?.name} </p>\n <p><strong>Source Case:</strong> {rlo.documents[0]?.title} </p>\n <p><strong>Source Learning Objective:</strong></p>\n <ul>\n { loroLearningObjectives.map((lo) => ( <li key={lo.id}><b style={{whiteSpace: 'normal'}}>{lo.name}</b></li> )) }\n </ul>\n </div>\n {children}\n <div style={{textAlign: \"center\"}}>\n <button onClick={handleClose}>Close</button>\n </div>\n </div>\n </GenModal>\n )\n}\n\nconst WhereUsedModal = ({ rlo, closeWhereUsedModal }) =>\n <CommonModal\n title='Reusable Content Description and Where it is used'\n rlo={rlo}\n handleClose={closeWhereUsedModal}\n >\n <MultipleUsedDesc rlo={rlo} />\n </CommonModal>\n\nconst ReusableObjectSummary = ({\n rlo,\n context,\n permissions,\n ...props\n}) => {\n const [descModalOpen, setDescModalOpen] = useState(false)\n const closeDescModal = () => setDescModalOpen(false)\n\n const [whereUsedModalOpen, setWhereUsedModalOpen] = useState(false)\n const closeWhereUsedModal = () => setWhereUsedModalOpen(false)\n\n return (\n <ReusableObjectDetail {...props} {...{rlo, context, permissions}}>\n <ul>\n <li>\n <a onClick={() => setDescModalOpen(true)}>\n Description\n </a>\n </li>\n <li>\n <a onClick={() => setWhereUsedModalOpen(true)}>\n Uses\n </a>\n </li>\n </ul>\n {descModalOpen && <DescriptionModal {...{rlo, closeDescModal}}/>}\n {whereUsedModalOpen && <WhereUsedModal {...{rlo, closeWhereUsedModal}}/>}\n </ReusableObjectDetail>\n )\n}\n\nexport default ReusableObjectSummary\n","import React from 'react'\n\nimport ReusableObjectSummary from 'Summary/component'\n\nexport const reusableObjectListDefaults = {\n itemsURL:\"/reusable_objects\",\n itemView: () => <ReusableObjectSummary rlo={rlo} key={rlo.id}/>,\n isInfiniteScroll: true,\n search:true,\n searchByLO: true,\n};\n","import React from 'react'\n\nimport GenList from 'Gen/List/component'\nimport ReusableObjectSummary from 'Summary/component'\nimport { reusableObjectListDefaults } from './defaults'\n\nconst TableHeader = () => (\n <tr className = \"document-list-table-header\" style = {{height: '100%', padding: \"0px\"}}>\n <th style = {{width: '90px', padding: \"0px\"}}/>\n <th style = {{width: '100px', padding: \"0px\"}}/>\n <th style = {{width: '100%', padding: \"0px\"}}/>\n <th style = {{width: '250px', padding: \"0px\"}}/>\n </tr>\n)\n\nconst ReusableObjectList = ({\n context,\n itemsURL,\n documentLookupTable,\n setAddModalOpen,\n permissions\n}) => {\n return (\n <div className = \"document-list\">\n <GenList\n context=\"RC\"\n isMultiSelect\n historyPersistance\n { ...reusableObjectListDefaults }\n { ...{ documentLookupTable, itemsURL } }\n tableHeader = { TableHeader() }\n itemView = {(rlo) => <ReusableObjectSummary { ...{ rlo, context, setAddModalOpen, permissions} } key = { `doc-${rlo.id}` } />}\n />\n </div>\n )\n}\n\nexport default ReusableObjectList;\n","import generateUUID from \"../../generateUUID\";\n\nimport * as R from 'ramda';\n\nimport * as DocConvertPlainText from \"./PlainText\";\nimport * as DocConvertRangeInlineJSON from \"./RangeInlineJSON\";\n\nimport {docMapBlockNodes, nodeInlineContentKeys} from \"../Functions/base\";\n\nimport {isRangeInlineJSON} from \"../Functions/RangeInlineJSON\";\nimport {isTreeInlineJSON} from \"../Functions/TreeInlineJSON\";\n\nconst TAG_PAIRS = [\n [\"italic\", \"em\"],\n [\"bold\", \"strong\"],\n [\"underline\", \"u\"],\n [\"superscript\", \"sup\"],\n [\"subscript\", \"sub\"],\n [\"span\", \"span\"],\n [\"deleted_text\", \"del\"],\n];\n\nexport function fromInlineJson(styledTreeNodes: Array<InlineTreeNodeExpanded>, includeEditStyles: boolean = true): string{\n return styledTreeNodes.map((node) => {\n switch (node.type) {\n case \"link\":\n return `<a href=\"${node.url}\" target=\"_blank\">${fromInlineJson(node.title, includeEditStyles)}</a>`;\n case \"color\":\n return `<span style=\"color:${node.hexCode};\">${fromInlineJson(node.content, includeEditStyles)}</span>`;\n case \"text\":\n return addHTMLAmprersandCharacters(node.content);\n case \"SELECTION_MIMIC\":\n return includeEditStyles ? `<span class=\"added_text\" style=\"background-color:rgba(${node.color}, 0.25);\">${fromInlineJson(node.content)}</span>` : fromInlineJson(node.content, includeEditStyles);\n case \"ADD_COMMENT_THREAD\":\n return includeEditStyles ? `<span class=\"added_text\" style=\"background-color:rgba(${node.color}, 0.25);\">${fromInlineJson(node.content)}</span>` : fromInlineJson(node.content, includeEditStyles);\n case \"ADD_CONTENT\":\n case \"ADDED_TEXT\":\n case \"CHANGED_TEXT\":\n return includeEditStyles ? `<span class=\"added_text\" style=\"text-decoration:underline; text-decoration-color:rgb(${node.color});\">${fromInlineJson(node.content)}</span>` : fromInlineJson(node.content, includeEditStyles);\n case \"DELETE_CONTENT\":\n case \"DELETED_TEXT\":\n return includeEditStyles ? `<del style=\"text-decoration-color:rgb(${node.color});\" contenteditable=\"false\">${fromInlineJson(node.content)}</del>` : \"\";\n case \"ADDED_STYLE\":\n case \"DELETED_STYLE\":\n return includeEditStyles ? `<span class=\"added_style\" style=\"color:rgb(${node.color});\">${fromInlineJson(node.content)}</span>` : fromInlineJson(node.content, includeEditStyles);\n case \"HIDE_TEXT\":\n return includeEditStyles ? `<span class=\"hide_text\" style=\"display:none;\">${DocConvertPlainText.fromInlineJson(node.content, true)}</span>` : \"\";\n default:\n const tagData = TAG_PAIRS.find((tagData) => {\n return tagData[0] === node.type;\n });\n\n if (tagData) {\n const [type, htmlStyle] = tagData;\n return `<${htmlStyle}>${fromInlineJson(node.content, includeEditStyles)}</${htmlStyle}>`;\n } else {\n return \"\";\n }\n }\n }).join(\"\");\n}\n\nconst NODE_NAME_MAP = {\n \"EM\": \"italic\" as const,\n \"STRONG\": \"bold\" as const,\n \"U\": \"underline\" as const,\n \"SUP\": \"superscript\" as const,\n \"SUB\": \"subscript\" as const,\n}\n\nfunction nodeNameToStyleName(nodeName: string) {\n switch (nodeName) {\n case \"EM\":\n return \"italic\" as const\n case \"STRONG\":\n return \"bold\" as const\n case \"U\":\n return \"underline\" as const\n case \"SUP\":\n return \"superscript\" as const\n case \"SUB\":\n return \"subscript\" as const\n }\n\n}\n\nexport function toInlineJson(htmlString: InlineHtmlNode) {\n const parser = new DOMParser();\n const htmlDoc = parser.parseFromString(htmlString, 'text/html');\n\n return toInlineJsonFromNodeList(htmlDoc.body.childNodes)\n}\n\nfunction toInlineJsonFromNodeList(nodeList: NodeListOf<Node>) : Array<InlineTreeNode> {\n const inlineJson = [...nodeList].flatMap((node) => {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return ({\n type: \"text\" as const,\n uid: generateUUID(),\n content: node.textContent || \"\",\n });\n break;\n case Node.ELEMENT_NODE:\n // TODO: REFACTOR FuLL SWITCH TO IF STATEMENT WHEN TYPE\n if (!isElement(node)) {return null;}\n\n const mappedType = nodeNameToStyleName(node.nodeName)\n if (mappedType) {\n return ({\n type: mappedType,\n uid: generateUUID(),\n content: toInlineJsonFromNodeList(node.childNodes),\n });\n }\n\n if (node.nodeName === \"A\") {\n return ({\n type: \"link\" as const,\n uid: generateUUID(),\n title: toInlineJsonFromNodeList(node.childNodes),\n url: node.getAttribute(\"href\") || \"\", // TODO: HANDLE MISSING CASE BETTER\n })\n }\n\n if (node.nodeName === \"SPAN\" && node instanceof HTMLElement && rgb2hex(node.style.color) && node.className === \"\") {\n return ({\n type: \"color\" as const,\n uid: generateUUID(),\n content: toInlineJsonFromNodeList(node.childNodes),\n hexCode: rgb2hex(node.style.color) || \"\", // TODO: HANDLE MISSING CASE BETTER\n })\n }\n\n return toInlineJsonFromNodeList(node.childNodes);\n default:\n return null;\n }\n }).filter(notEmpty)\n\n return inlineJson;\n}\n\nfunction rgb2hex(rgb: string) {\n const match = rgb.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/)\n\n if (match) {\n return `#${match.slice(1).map(n => parseInt(n, 10).toString(16).padStart(2, '0')).join('')}`;\n } else {\n return null;\n }\n}\n\nexport function toPlainText(htmlString: InlineHtmlNode) {\n return DocConvertPlainText.fromInlineJson(toInlineJson(htmlString));\n}\n\nexport function toRangeInlineJson(htmlString: InlineHtmlNode) {\n return DocConvertRangeInlineJSON.fromInlineJson(toInlineJson(htmlString));\n}\n\nexport function fromAnyType(inlineNode: InlineNode) {\n if (isRangeInlineJSON(inlineNode)) {\n return DocConvertRangeInlineJSON.toHTML(inlineNode);\n } else if (isTreeInlineJSON(inlineNode)) {\n return fromInlineJson(inlineNode);\n } else if (typeof inlineNode === \"string\") {\n return inlineNode\n }\n}\n\nfunction removeHTMLAmprersandCharacters(string: InlineHtmlNode) {\n return string && string\n .replace(/&/g, \"&\")\n .replace(/>/g, \">\")\n .replace(/</g, \"<\")\n .replace(/"/g, \"\\\"\")\n .replace(/'/g, \"'\")\n .replace(/'/g, \"'\");\n}\n\nfunction addHTMLAmprersandCharacters(string: string) {\n return string && string\n .replace(/&/g, \"&\")\n .replace(/>/g, \">\")\n .replace(/</g, \"<\");\n}\n\nexport function convertAllInlineNodesToHTML(node: DocBlockNode<InlineRangeNode>, includeEditStyles = true) {\n return docMapBlockNodes(node, (blockNode) => {\n const inlineContentKeys = nodeInlineContentKeys(blockNode);\n\n inlineContentKeys.forEach((contentKey) => {\n let newInlineNode = blockNode[contentKey];\n\n if (isRangeInlineJSON(newInlineNode)) {\n newInlineNode = DocConvertRangeInlineJSON.toInlineJson(newInlineNode);\n }\n\n if (newInlineNode && isTreeInlineJSON(newInlineNode)) {\n // EXCEPTION UNTILL ALL LISTS ARE NODE TYPES\n if (blockNode.type !== \"listItem\" || isTreeInlineJSON(newInlineNode)) {\n blockNode[contentKey] = fromInlineJson(newInlineNode, false);\n } else {\n blockNode[contentKey] = blockNode[contentKey].map((listItemChildNode) => convertAllInlineNodesToHTML(listItemChildNode, includeEditStyles));\n }\n }\n });\n\n return blockNode;\n });\n}\n\nexport function standardizeSpaces(string: string) {\n return string && string.replace(/ |\\u202F|\\u00A0/g, \" \");\n}\n\nexport function isElement(node: Node): node is Element { return node.nodeType === 1; }\n\nfunction notEmpty<TValue>(value: TValue | null | undefined): value is TValue {\n return value !== null && value !== undefined;\n}\n","import * as DocConvertHTML from \"./HTML\";\nimport * as DocConvertRangeInlineJSON from \"./RangeInlineJSON\";\n\nimport {isRangeInlineJSON} from \"../Functions/RangeInlineJSON\";\nimport {isTreeInlineJSON} from \"../Functions/TreeInlineJSON\";\n\nexport function fromInlineJson(styledTreeNodes, showHideText=false) {\n return styledTreeNodes.map((node) => {\n switch (node.type) {\n case \"link\":\n return fromInlineJson(node.title, showHideText);\n case \"text\":\n return node.content;\n case \"HIDE_TEXT\":\n return showHideText ? fromInlineJson(node.content, showHideText) : \"\";\n default:\n return fromInlineJson(node.content, showHideText);\n }\n }).join(\"\");\n}\n\nexport function fromHTML(html: InlineHtmlNode) {\n const tempDiv = document.createElement(\"div\");\n tempDiv.innerHTML = html;\n return tempDiv.textContent || tempDiv.innerText || \"\";\n}\n\n// export function toHTML(plainTextString: InlinePlainTextNode) {\n// return DocConvertHTML.fromInlineJson(toInlineJson(plainTextString));\n// }\n\n// export function toRangeInlineJson(plainTextString: InlinePlainTextNode) {\n// return DocConvertRangeInlineJSON.fromInlineJson(toInlineJson(plainTextString));\n// }\n\nexport function fromAnyType(inlineNode) {\n if (isRangeInlineJSON(inlineNode)) {\n return DocConvertRangeInlineJSON.toPlainText(inlineNode);\n } else if (isTreeInlineJSON(inlineNode)) {\n return fromInlineJson(inlineNode);\n } else if (typeof inlineNode === \"string\") {\n return fromHTML(inlineNode);\n } else {\n return \"\"\n }\n}\n","import {\n filter,\n findIndex,\n isString,\n keys,\n minBy,\n omit,\n} from \"lodash\";\n\nimport {docMapBlockNodes, nodeInlineContentKeys} from \"../Functions/base\";\nimport * as TreeInlineJSON from \"../Functions/TreeInlineJSON\";\n\nimport * as DocConvertHTML from \"./HTML\";\nimport * as DocConvertPlainText from \"./PlainText\";\n\nimport {sortItemsWithRangesByStart} from \"../Functions/Range\";\nimport {compressStyleRanges} from \"../Functions/RangeInlineJSON\";\nimport {isTreeInlineJSON} from \"../Functions/TreeInlineJSON\";\n\nexport function fromInlineJson(treeInlineNodes: Array<InlineTreeNode>){\n const th = omit(innerFromInlineJson(treeInlineNodes), \"length\")\n return compressStyleRanges(omit(innerFromInlineJson(treeInlineNodes), \"length\") as any); // TODO: Remove any\n}\n\nfunction innerFromInlineJson(treeInlineNodes: Array<InlineTreeNode>){\n return treeInlineNodes.reduce((currentState, node) => {\n const newCurrentState = {...currentState};\n switch (node.type) {\n case \"text\":\n newCurrentState.text += node.content;\n newCurrentState.length += node.content.length;\n break;\n default:\n const childRange = innerFromInlineJson(node.type === \"link\" ? node.title : node.content);\n\n const newStyle = {\n type: node.type,\n range: {\n start: 0,\n end: childRange.length,\n },\n } as any; // TODO: Remove any\n\n const args = omit(node, [\"type\", \"content\", \"title\", \"uid\"]);\n if (keys(args).length > 0) {\n newStyle.args = args;\n }\n\n const newStates = [newStyle].concat(childRange.styleRanges).map((childStyle) => {\n const newChildStyle = {...childStyle};\n\n newChildStyle.range.start += currentState.length;\n newChildStyle.range.end += currentState.length;\n\n return newChildStyle;\n });\n\n newCurrentState.text += childRange.text;\n newCurrentState.length += childRange.length;\n newCurrentState.styleRanges = newCurrentState.styleRanges.concat(newStates);\n }\n\n return newCurrentState;\n }, {text: \"\", styleRanges: [], length: 0});\n}\n\nexport function toInlineJson(rangedStyle, colorLookup = {}){\n const {\n text,\n inlineIrrlevantRanges = [],\n inlineChangeHighlights = [],\n } = rangedStyle;\n\n let newStyleRanges = rangedStyle.styleRanges as Array<StyleRange>; // TODO: Remove as\n\n if (inlineIrrlevantRanges.length > 0) {\n newStyleRanges = newStyleRanges.concat(inlineIrrlevantRanges);\n }\n\n if (inlineChangeHighlights.length > 0) {\n const inlineChangeHighlightsWithColor = inlineChangeHighlights.map((inlineChangeHighlight) => {\n const color = colorLookup[inlineChangeHighlight.author_id] || [255,0,0];\n\n return {\n ...inlineChangeHighlight,\n args: {\n ...inlineChangeHighlight.args,\n color,\n },\n }\n })\n newStyleRanges = newStyleRanges.concat(inlineChangeHighlightsWithColor);\n }\n\n if (rangedStyle.selectionMimics) {\n const selectionMimicsAsStyles = rangedStyle.selectionMimics.map((selectionMimic) => {\n return {\n type: \"SELECTION_MIMIC\",\n range: selectionMimic.range,\n args: {\n color: [0,0,255],\n },\n };\n });\n newStyleRanges = newStyleRanges.concat(selectionMimicsAsStyles);\n }\n\n const sortedStyles = sortItemsWithRangesByStart(newStyleRanges);\n\n const reduceReturn = sortedStyles.reduce((currentState, newStyleRange, newStyleRangeIndex) => {\n const addNewStyleTo = TreeInlineJSON.contentRightNDeep(currentState.returnValue, currentState.styleRangeStack.length);\n\n if (currentState.textLeftIndex < newStyleRange.range.start) {\n addNewStyleTo.push({\n type: \"text\",\n content: text.slice(currentState.textLeftIndex, newStyleRange.range.start),\n });\n currentState.textLeftIndex = newStyleRange.range.start;\n }\n\n addNewStyleTo.push(rangeInlineToEmptyTreeInline(newStyleRange));\n currentState.styleRangeStack.push(newStyleRange);\n\n const letNextItem = sortedStyles[newStyleRangeIndex + 1];\n let minEnd = minBy(currentState.styleRangeStack, (styleRange: any) => styleRange.range.end); // TODO: Remove any\n while (minEnd && (!letNextItem || minEnd.range.end <= letNextItem.range.start)) {\n if (currentState.textLeftIndex < minEnd.range.end) {\n const currentLastNode = TreeInlineJSON.nodeRightNDeep(currentState.returnValue, currentState.styleRangeStack.length - 1);\n TreeInlineJSON.appendTextToNode(currentLastNode, text.slice(currentState.textLeftIndex, minEnd.range.end));\n currentState.textLeftIndex = minEnd.range.end;\n }\n\n const indexOfFirstMin = findIndex(currentState.styleRangeStack, (styleRange: any) => (styleRange.range.end <= minEnd.range.end)); // TODO: Remove any\n const styleRangeStackWithMinsRemoved = filter(currentState.styleRangeStack, (styleRange) => (styleRange.range.end > minEnd.range.end));\n\n const remainingStylesWhole = styleRangeStackWithMinsRemoved.slice(0, indexOfFirstMin);\n const remainingStylesSplit = styleRangeStackWithMinsRemoved.slice(indexOfFirstMin);\n\n if (remainingStylesSplit.length > 0) {\n const addSplitStylesTo = TreeInlineJSON.contentRightNDeep(currentState.returnValue, indexOfFirstMin);\n\n addSplitStylesTo.push(styleRangeStackToStyleTree(remainingStylesSplit));\n }\n\n currentState.styleRangeStack = styleRangeStackWithMinsRemoved;\n\n minEnd = minBy(currentState.styleRangeStack, (styleRange) => styleRange.range.end);\n }\n\n return currentState;\n }, {\n returnValue: [],\n textLeftIndex: 0,\n styleRangeStack: [],\n });\n\n if (reduceReturn.textLeftIndex < text.length) {\n reduceReturn.returnValue.push({\n type: \"text\",\n content: text.slice(reduceReturn.textLeftIndex),\n });\n }\n\n return reduceReturn.returnValue;\n}\n\nexport function toHTML(rangedStyle, colorLookup = {}) {\n return DocConvertHTML.fromInlineJson(toInlineJson(rangedStyle, colorLookup));\n}\n\nexport function toPlainText(rangedStyle, colorLookup = {}) {\n return DocConvertPlainText.fromInlineJson(toInlineJson(rangedStyle, colorLookup));\n}\n\nfunction styleRangeStackToStyleTree(styleRangeStack) {\n if (styleRangeStack.length > 0) {\n const rangeInline = rangeInlineToEmptyTreeInline(styleRangeStack[0]);\n\n if (styleRangeStack.length > 1) {\n const content = styleRangeStackToStyleTree(styleRangeStack.slice(1));\n\n switch (rangeInline.type) {\n case \"link\":\n rangeInline.title = [content];\n break;\n default:\n rangeInline.content = [content];\n }\n }\n\n return rangeInline;\n } else {\n return null;\n }\n}\n\nfunction rangeInlineToEmptyTreeInline(rangeInline) {\n const returnValue = {\n type: rangeInline.type,\n ...rangeInline.args,\n };\n\n switch (rangeInline.type) {\n case \"link\":\n returnValue.title = [];\n break;\n default:\n returnValue.content = [];\n }\n\n return returnValue;\n}\n\nexport function convertAllInlineNodesToRangeJSON(node) {\n return docMapBlockNodes(node, (blockNode) => {\n const inlineContentKeys = nodeInlineContentKeys(blockNode);\n\n inlineContentKeys.forEach((contentKey) => {\n let newInlineNode = blockNode[contentKey];\n\n if (isString(newInlineNode)) {\n newInlineNode = DocConvertHTML.toInlineJson(newInlineNode);\n }\n\n if (newInlineNode && !isString(newInlineNode[\"text\"])) {\n // EXCEPTION UNTILL ALL LISTS ARE NODE TYPES\n if (blockNode.type !== \"listItem\" || isTreeInlineJSON(newInlineNode)) {\n blockNode[contentKey] = fromInlineJson(newInlineNode);\n } else {\n blockNode[contentKey] = blockNode[contentKey].map((listItemChildNode) => convertAllInlineNodesToRangeJSON(listItemChildNode));\n }\n }\n });\n\n return blockNode;\n });\n}\n","import {\n clone,\n compact,\n create,\n find,\n forEach,\n isFunction,\n map,\n} from 'lodash';\nimport generateUUID from '../../generateUUID';\n\nimport additional_diagnoses_text from \"../../../../../../../lib/case_metadata/additional_diagnoses.txt\";\nimport clinical_principles_text from \"../../../../../../../lib/case_metadata/clinical_principles.txt\";\nimport differential_diagnosis_text from \"../../../../../../../lib/case_metadata/differential_diagnosis.txt\";\nimport final_diagnoses_text from \"../../../../../../../lib/case_metadata/final_diagnoses.txt\";\nimport presenting_problems_text from \"../../../../../../../lib/case_metadata/presenting_problems.txt\";\nimport sciences_core_concepts_text from \"../../../../../../../lib/case_metadata/sciences_core_concepts.txt\";\n\nconst ADDITIONAL_DIAGNOSES = additional_diagnoses_text.split(\"\\n\");\nconst CLINICAL_PRINCIPLES = clinical_principles_text.split(\"\\n\");\nconst DIFFERENTIAL_DIAGNOSIS = differential_diagnosis_text.split(\"\\n\");\nconst FINAL_DIAGNOSES = final_diagnoses_text.split(\"\\n\");\nconst PRESENTING_PROBLEMS = presenting_problems_text.split(\"\\n\");\nconst SCIENCES_CORE_CONCEPTS = sciences_core_concepts_text.split(\"\\n\");\n\nfunction DocType() {\n this.isRequired = false;\n this.isSyncable = false;\n this.shouldInit = false;\n this.shouldInitWith = false;\n}\n\nObject.defineProperties(DocType.prototype, {\n \"required\": { \"get\": function() { this.isRequired = true; return this; }},\n \"notRequired\": { \"get\": function() { this.isRequired = false; return this; }},\n \"syncable\": { \"get\": function() { this.isSyncable = true; return this; }},\n \"notSyncable\": { \"get\": function() { this.isSyncable = false; return this; }},\n \"init\": { \"get\": function() { this.shouldInit = true; return this; }},\n \"notInit\": { \"get\": function() { this.shouldInit = true; this.shouldInitWith = false; return this; }}\n});\n\nDocType.prototype.initWith = function(arg) {\n this.shouldInit = true;\n this.shouldInitWith = true;\n this.initWithArg = arg;\n return this;\n};\n\nDocType.prototype.withDefault = function(defaultValue) {\n this.defaultValue = defaultValue;\n return this;\n};\n\nDocType.prototype.editWith = function(arg) {\n this.shouldEditWith = arg;\n return this;\n};\n\nDocType.prototype.shouldEditWithArgs = function () {\n return {\n default: this.defaultValue\n };\n};\n\nDocType.prototype.generate = function(nodeDefinitions, context) {\n let initData;\n if (this.shouldInitWith) {\n initData = this.initWithArg;\n } else {\n initData = this.initDefault;\n }\n\n return this.generateWith(initData, nodeDefinitions, context);\n};\n\nDocType.prototype.generateWith = function(initData, nodeDefinitions, context) {\n if (isFunction(initData)) {\n return initData(nodeDefinitions, context);\n } else {\n return initData;\n }\n};\n\nDocType.prototype.generateChild = function(childData, nodeDefinitions, context) {\n if (isFunction(childData)) {\n return childData(nodeDefinitions, context);\n } else if (childData instanceof DocTypeRef) {\n // @ts-ignore TODO: Remove once converted to classes\n return childData.generate(nodeDefinitions, context);\n } else {\n return childData;\n }\n};\n\nDocType.prototype.dup = function() {\n return clone(this);\n};\n\nDocType.prototype.deref = function(nodeDefinitions) {\n return this;\n};\n\nDocType.prototype.withDisplayName = function(displayName) {\n this.displayNameString = displayName;\n return this;\n};\nDocType.prototype.displayName = function() {\n return this.displayNameString;\n};\n\n\nfunction DocTypeMore() {\n}\n\nDocTypeMore.prototype = create(DocType.prototype, {\n 'constructor': DocTypeMore\n});\n\nexport function DTMore() {\n return new DocTypeMore();\n}\n\nDocTypeMore.prototype.merge = function(typeDefinition) {\n const returnTypeDefinition = clone(typeDefinition);\n\n const transferFields = [\n \"isRequired\",\n \"isSyncable\",\n \"shouldInit\",\n \"shouldInitWith\",\n \"initWithArg\",\n \"displayNameString\"\n ];\n\n transferFields.forEach((instanceVariable) => {\n if (this[instanceVariable] !== undefined) {\n returnTypeDefinition[instanceVariable] = this[instanceVariable];\n }\n });\n\n return returnTypeDefinition;\n};\n\nfunction DocTypeRef(refName) {\n this.refName = refName;\n}\nDocTypeRef.prototype = create(DocType.prototype, {\n 'constructor': DocTypeRef\n});\nexport function DTRef(refName) {\n return new DocTypeRef(refName);\n}\nDocTypeRef.prototype.deref = function(nodeDefinitions) {\n const nodeDefinition = clone(nodeDefinitions[this.refName]);\n\n const transferFields = [\n \"isRequired\",\n \"isSyncable\",\n \"shouldInit\",\n \"shouldInitWith\",\n \"initWithArg\",\n \"displayNameString\"\n ];\n\n transferFields.forEach((instanceVariable) => {\n if (this[instanceVariable] !== undefined) {\n nodeDefinition[instanceVariable] = this[instanceVariable];\n }\n });\n\n return nodeDefinition.deref(nodeDefinitions);\n};\nDocTypeRef.prototype.generate = function(nodeDefinitions, context) {\n return this.deref(nodeDefinitions).generate(nodeDefinitions, context);\n};\nDocTypeRef.prototype.generateOptions = function(nodeDefinitions) {\n return this.deref(nodeDefinitions).generateOptions(nodeDefinitions);\n};\nDocTypeRef.prototype.description = function(nodeDefinitions) {\n return this.deref(nodeDefinitions).description(nodeDefinitions);\n};\nDocTypeRef.prototype.displayName = function(nodeDefinitions) {\n return this.deref(nodeDefinitions).displayName(nodeDefinitions);\n};\n\n\nfunction DocTypeSubObject(refName, objectModel) {\n DocTypeRef.call(this, refName);\n this.objectModel = objectModel;\n}\nDocTypeSubObject.prototype = create(DocTypeRef.prototype, {\n 'constructor': DocTypeSubObject\n});\nexport function DTSubObject(refName, objectModel) {\n return new DocTypeSubObject(refName, objectModel);\n}\nDocTypeSubObject.prototype.deref = function(nodeDefinitions) {\n const newObject = DocTypeRef.prototype.deref.call(this, nodeDefinitions);\n\n newObject.objectModel = clone(newObject.objectModel);\n\n forEach(this.objectModel, (definitionOrReference, key) => {\n if (definitionOrReference instanceof DocTypeMore) {\n // @ts-ignore TODO: Remove once converted to classes\n newObject.objectModel[key] = definitionOrReference.merge(newObject.objectModel[key]);\n } else {\n newObject.objectModel[key] = definitionOrReference;\n }\n });\n\n return newObject;\n};\n\n\nfunction DocTypeString() {\n DocType.call(this);\n this.initDefault = \"\";\n}\nDocTypeString.prototype = create(DocType.prototype, {\n 'constructor': DocTypeString\n});\nfunction DTString() {\n return new DocTypeString();\n}\n\n\n\nfunction DocTypeBoolean() {\n DocType.call(this);\n this.initDefault = false;\n}\nDocTypeBoolean.prototype = create(DocType.prototype, {\n 'constructor': DocTypeBoolean\n});\nfunction DTBoolean() {\n return new DocTypeBoolean();\n}\n\n\n\nfunction DocTypeInteger() {\n DocType.call(this);\n this.initDefault = 0;\n}\nDocTypeInteger.prototype = create(DocType.prototype, {\n 'constructor': DocTypeInteger\n});\nfunction DTInteger() {\n return new DocTypeInteger();\n}\n\n\n\nfunction DocTypeFloat() {\n DocType.call(this);\n this.initDefault = 0.0;\n}\nDocTypeFloat.prototype = create(DocType.prototype, {\n 'constructor': DocTypeFloat\n});\nfunction DTFloat() {\n return new DocTypeFloat();\n}\n\n\n\nfunction DocTypeArray(docType) {\n DocType.call(this);\n this.docType = docType;\n this.initDefault = [];\n}\nDocTypeArray.prototype = create(DocType.prototype, {\n 'constructor': DocTypeArray\n});\nDocTypeArray.prototype.generateWith = function(initData, nodeDefinitions, context) {\n if (isFunction(initData)) {\n return initData(nodeDefinitions, context);\n } else {\n return initData.map((childData) => {\n return this.init.generateChild(childData, nodeDefinitions, context);\n });\n }\n};\nDocTypeArray.prototype.generateOptions = function(nodeDefinitions) {\n return this.docType.generateOptions(nodeDefinitions);\n};\nDocTypeArray.prototype.shouldEditWithArgs = function () {\n return {\n ...this.docType.shouldEditWithArgs(),\n default: this.defaultValue\n };\n};\nexport function DTArray(docType) {\n return new DocTypeArray(docType);\n}\n\n\n\nfunction DocTypeMap() {\n DocType.call(this);\n this.initDefault = {};\n}\nDocTypeMap.prototype = create(DocType.prototype, {\n 'constructor': DocTypeMap\n});\nfunction DTMap() {\n return new DocTypeMap();\n}\n\n\n\nfunction DocTypeObject(objectModel) {\n DocType.call(this);\n this.initDefault = {};\n this.objectModel = objectModel;\n}\nObject.defineProperties(DocTypeObject.prototype, {\n \"objectModel\": { \"set\": function(objectModel) { this.objectModel = objectModel;}}\n});\nDocTypeObject.prototype = create(DocType.prototype, {\n 'constructor': DocTypeObject\n});\nDocTypeObject.prototype.generateWith = function(initData, nodeDefinitions, context) {\n if (isFunction(initData)) {\n return initData(nodeDefinitions, context);\n } else {\n const generatedObject = {};\n forEach(this.objectModel, (definitionOrReference, key) => {\n if (key in initData) {\n generatedObject[key] = this.generateChild(initData[key], nodeDefinitions, context);\n } else {\n if (definitionOrReference instanceof DocType) {\n // @ts-ignore TODO: Remove once converted to classes\n if (definitionOrReference.shouldInit) {\n // @ts-ignore TODO: Remove once converted to classes\n generatedObject[key] = definitionOrReference.generate(nodeDefinitions, context);\n }\n } else {\n generatedObject[key] = definitionOrReference;\n }\n }\n });\n return generatedObject;\n }\n};\n\nDocTypeObject.prototype.generateEditWithList = function() {\n return compact(map(this.objectModel, (definitionOrReference, key) => {\n if (!(definitionOrReference instanceof DocType)) return null;\n\n // @ts-ignore TODO: Remove once converted to classes\n const editWith = definitionOrReference.shouldEditWith;\n if (!editWith) return null;\n\n // @ts-ignore TODO: Remove once converted to classes\n const displayName = definitionOrReference.displayName()\n\n // @ts-ignore TODO: Remove once converted to classes\n return [key, editWith, definitionOrReference.shouldEditWithArgs(), displayName];\n }));\n};\n\n\nDocTypeObject.prototype.description = function(nodeDefinitions) {\n return this.objectModel[\"subtype\"] || this.objectModel[\"type\"];\n};\nDocTypeObject.prototype.displayName = function(nodeDefinitions) {\n return this.displayNameString || this.objectModel[\"subtype\"] || this.objectModel[\"type\"];\n};\nDocTypeObject.prototype.deref = function(nodeDefinitions) {\n return this;\n};\nfunction DTObject(objectModel) {\n return new DocTypeObject(objectModel);\n}\n\nfunction DocTypeOr() {\n DocType.call(this);\n this.orTypes = Array.prototype.slice.call(arguments);\n}\nDocTypeOr.prototype = create(DocType.prototype, {\n 'constructor': DocTypeOr\n});\nDocTypeOr.prototype.generateOptions = function(nodeDefinitions) {\n return this.orTypes;\n};\nfunction DTOr(...args) {\n // @ts-ignore TODO: Remove once converted to classes\n return new DocTypeOr(...Array.prototype.slice.call(args));\n}\n\nfunction DocTypeEnum() {\n DocType.call(this);\n this.enumOptions = Array.prototype.slice.call(arguments);\n}\nDocTypeEnum.prototype = create(DocType.prototype, {\n 'constructor': DocTypeEnum\n});\nDocTypeEnum.prototype.generateOptions = function(nodeDefinitions) {\n return this.enumOptions;\n};\nDocTypeEnum.prototype.shouldEditWithArgs = function() {\n return {\n options: this.enumOptions,\n default: this.defaultValue\n };\n};\nfunction DTEnum(...args) {\n // @ts-ignore TODO: Remove once converted to classes\n return new DocTypeEnum(...Array.prototype.slice.call(args));\n}\n\nfunction newStartWithInlineContent(contentKey) {\n return {\n contentKey: contentKey,\n range: {\n start: 0,\n end: 0\n }\n };\n}\n\nexport const nodeDefinitions = {\n uid: DTString().initWith(generateUUID),\n sectionContent: DTArray(DTOr(\n DTRef(\"audio\"),\n DTRef(\"horizontalRule\"),\n DTRef(\"image\"),\n DTRef(\"imageGallery\"),\n DTRef(\"numberedList\"),\n DTRef(\"paragraph\"),\n DTRef(\"regularList\"),\n DTRef(\"table\"),\n DTRef(\"tp_clinical_reasoning\"),\n DTRef(\"tp_clinical_skills\"),\n DTRef(\"tp_knowledge\"),\n DTRef(\"tp_management\"),\n DTRef(\"tp_principles\"),\n DTRef(\"tp_studies\"),\n DTRef(\"video\"),\n )),\n answerCommentContent: DTArray(DTOr(\n DTRef(\"alert\"),\n DTRef(\"audio\"),\n DTRef(\"horizontalRule\"),\n DTRef(\"image\"),\n DTRef(\"imageGallery\"),\n DTRef(\"numberedList\"),\n DTRef(\"paragraph\"),\n DTRef(\"regularList\"),\n DTRef(\"section\"),\n DTRef(\"table\"),\n DTRef(\"RLOModal\"),\n DTRef(\"tp_clinical_reasoning\"),\n DTRef(\"tp_clinical_skills\"),\n DTRef(\"tp_knowledge\"),\n DTRef(\"tp_management\"),\n DTRef(\"tp_principles\"),\n DTRef(\"tp_studies\"),\n DTRef(\"video\"),\n )),\n alertContent: DTArray(DTOr(\n DTRef(\"audio\"),\n DTRef(\"horizontalRule\"),\n DTRef(\"image\"),\n DTRef(\"numberedList\"),\n DTRef(\"paragraph\"),\n DTRef(\"regularList\"),\n DTRef(\"section\"),\n DTRef(\"table\"),\n DTRef(\"video\"),\n )),\n categoryMatcherContent: DTArray(DTOr(\n DTRef(\"alert\"),\n DTRef(\"audio\"),\n DTRef(\"horizontalRule\"),\n DTRef(\"image\"),\n DTRef(\"imageGallery\"),\n DTRef(\"numberedList\"),\n DTRef(\"paragraph\"),\n DTRef(\"regularList\"),\n DTRef(\"section\"),\n DTRef(\"table\"),\n DTRef(\"video\"),\n )),\n dialogBoxContent: DTArray(DTOr(\n DTRef(\"audio\"),\n DTRef(\"horizontalRule\"),\n DTRef(\"image\"),\n DTRef(\"numberedList\"),\n DTRef(\"paragraph\"),\n DTRef(\"regularList\"),\n DTRef(\"section\"),\n DTRef(\"video\"),\n )),\n neutralTextContent: DTArray(DTOr(\n DTRef(\"alert\"),\n DTRef(\"audio\"),\n DTRef(\"horizontalRule\"),\n DTRef(\"image\"),\n DTRef(\"imageGallery\"),\n DTRef(\"numberedList\"),\n DTRef(\"paragraph\"),\n DTRef(\"regularList\"),\n DTRef(\"section\"),\n DTRef(\"table\"),\n DTRef(\"video\"),\n )),\n harmStatementContent: DTArray(DTOr(\n DTRef(\"audio\"),\n DTRef(\"horizontalRule\"),\n DTRef(\"image\"),\n DTRef(\"numberedList\"),\n DTRef(\"paragraph\"),\n DTRef(\"regularList\"),\n DTRef(\"section\"),\n DTRef(\"table\"),\n DTRef(\"video\"),\n )),\n modMapCardContent: DTArray(DTOr(\n DTRef(\"underlying_core_concepts\"),\n DTRef(\"mod_map_image\"),\n )),\n coreConceptContent: DTArray(DTOr(\n DTRef(\"core_concept_header\"),\n DTRef(\"RLOModal\"),\n )),\n deepDiveContent: DTArray(DTOr(\n DTRef(\"audio\"),\n DTRef(\"horizontalRule\"),\n DTRef(\"image\"),\n DTRef(\"imageGallery\"),\n DTRef(\"numberedList\"),\n DTRef(\"paragraph\"),\n DTRef(\"regularList\"),\n DTRef(\"RLOModal\"),\n DTRef(\"section\"),\n DTRef(\"table\"),\n DTRef(\"video\"),\n )),\n referencesContent: DTArray(DTOr(\n DTRef(\"horizontalRule\"),\n DTRef(\"numberedList\"),\n DTRef(\"paragraph\"),\n DTRef(\"regularList\"),\n DTRef(\"section\"),\n )),\n freeTextContent: DTArray(DTOr(\n DTRef(\"alert\"),\n DTRef(\"audio\"),\n DTRef(\"horizontalRule\"),\n DTRef(\"image\"),\n DTRef(\"imageGallery\"),\n DTRef(\"numberedList\"),\n DTRef(\"paragraph\"),\n DTRef(\"regularList\"),\n DTRef(\"section\"),\n DTRef(\"table\"),\n DTRef(\"video\"),\n )),\n questionContent: DTArray(DTOr(\n DTRef(\"alert\"),\n DTRef(\"audio\"),\n DTRef(\"horizontalRule\"),\n DTRef(\"image\"),\n DTRef(\"imageGallery\"),\n DTRef(\"numberedList\"),\n DTRef(\"paragraph\"),\n DTRef(\"regularList\"),\n DTRef(\"section\"),\n DTRef(\"table\"),\n DTRef(\"video\"),\n )),\n summaryStatementContent: DTArray(DTOr(\n DTRef(\"audio\"),\n DTRef(\"horizontalRule\"),\n DTRef(\"image\"),\n DTRef(\"numberedList\"),\n DTRef(\"paragraph\"),\n DTRef(\"regularList\"),\n DTRef(\"section\"),\n DTRef(\"table\"),\n DTRef(\"video\"),\n )),\n listItemContent: DTArray(DTOr(\n DTRef(\"paragraph\"),\n DTRef(\"regularList\"),\n DTRef(\"numberedList\"),\n DTRef(\"table\"),\n DTRef(\"image\")\n )),\n tableCellContent: DTArray(DTOr(\n DTRef(\"numberedList\"),\n DTRef(\"paragraph\"),\n DTRef(\"regularList\"),\n )),\n tpContent: DTArray(DTOr(\n DTRef(\"alert\"),\n DTRef(\"audio\"),\n DTRef(\"horizontalRule\"),\n DTRef(\"image\"),\n DTRef(\"imageGallery\"),\n DTRef(\"numberedList\"),\n DTRef(\"paragraph\"),\n DTRef(\"regularList\"),\n DTRef(\"RLOModal\"),\n DTRef(\"section\"),\n DTRef(\"table\"),\n DTRef(\"video\"),\n )),\n styledChildren: DTOr(\n DTString(),\n DTArray(DTOr(\n DTRef(\"text\"),\n DTRef(\"bold\"),\n DTRef(\"italic\"),\n DTRef(\"underline\"),\n DTRef(\"superscript\"),\n DTRef(\"subscript\"),\n DTRef(\"link\"),\n DTRef(\"color\"),\n DTRef(\"modalMedia\")\n ))\n ).initWith(\"\"),\n section: DTObject({\n type: \"section\",\n uid: DTRef(\"uid\").init,\n level: DTInteger(),\n title: DTRef(\"styledChildren\").init,\n content: DTRef(\"sectionContent\").init,\n nested: DTBoolean().withDefault(false).initWith(true),\n collapsible: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n collapsed: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n classes: DTArray(DTString()).withDefault([]).editWith(\"tagsInput\"),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n bookmarked: DTBoolean().withDefault(false),\n _newStartWith: \"title\",\n }).withDisplayName(\"Section Header\"),\n listItem: DTObject({\n type: \"listItem\",\n uid: DTRef(\"uid\").init,\n content: DTRef(\"listItemContent\").initWith([DTRef(\"paragraph\").init]),\n classes: DTArray(DTString()).withDefault([]),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false),\n }),\n openListItem: DTSubObject(\"listItem\", {\n content: DTMore().initWith([DTRef(\"paragraph\").init]),\n }),\n table: DTObject({\n type: \"table\",\n uid: DTRef(\"uid\").init,\n rows: DTArray(DTRef(\"tableRow\")).initWith([DTRef(\"tableRow\").init]),\n classes: DTArray(DTString()).withDefault([]),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false),\n bookmarked: DTBoolean().withDefault(false),\n }).withDisplayName(\"Table\"),\n tableRow: DTObject({\n type: \"tableRow\",\n uid: DTRef(\"uid\").init,\n cells: DTArray(DTRef(\"tableCell\")).initWith([DTRef(\"tableCell\").init,DTRef(\"tableCell\").init]),\n classes: DTArray(DTString()).withDefault([]),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false),\n }),\n tableCell: DTObject({\n type: \"tableCell\",\n uid: DTRef(\"uid\").init,\n content: DTArray(DTRef(\"tableCellContent\")).initWith([DTRef(\"paragraph\")]).init,\n classes: DTArray(DTString()).withDefault([]),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false),\n }),\n textInput: DTObject({\n type: \"textInput\",\n uid: DTRef(\"uid\").init,\n value: DTString(),\n characterLimit: DTInteger().initWith(1000).editWith(\"integerTextInput\"),\n boxLines: DTInteger().initWith(5).editWith(\"integerTextInput\"),\n graded: DTBoolean().withDefault(false),\n classes: DTArray(DTString()).withDefault([]),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false),\n bookmarked: DTBoolean().withDefault(false),\n }),\n multipleChoice: DTObject({\n type: \"multipleChoice\",\n uid: DTRef(\"uid\").init,\n multipleSelect: DTBoolean().initWith(true).editWith(\"booleanInput\"),\n content: DTArray(DTRef(\"multipleChoiceAnswer\")).initWith([DTRef(\"multipleChoiceAnswer\").init, DTRef(\"multipleChoiceAnswer\").init, DTRef(\"multipleChoiceAnswer\").init, DTRef(\"multipleChoiceAnswer\").init, DTRef(\"multipleChoiceAnswer\").init]),\n graded: DTBoolean().withDefault(false),\n classes: DTArray(DTString()).withDefault([]).editWith(\"tagsInput\"),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false),\n bookmarked: DTBoolean().withDefault(false),\n }),\n multipleChoiceAnswer: DTObject({\n type: \"multipleChoiceAnswer\",\n uid: DTRef(\"uid\").init,\n content: DTRef(\"styledChildren\").init,\n value: DTBoolean(),\n answer: DTBoolean(),\n classes: DTArray(DTString()).withDefault([]),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false),\n _newStartWith: \"content\"\n }),\n cdq_case_content: DTArray(DTOr(\n DTRef(\"paragraph\"),\n DTRef(\"regularList\"),\n DTRef(\"numberedList\"),\n DTRef(\"table\"),\n DTRef(\"image\"),\n DTRef(\"imageGallery\"),\n DTRef(\"video\"),\n DTRef(\"audio\"),\n DTRef(\"cdq_question\"),\n )),\n cdq_case: DTSubObject(\"generic_page\", {\n subtype: 'cdq_case',\n classes: DTMore().initWith(['card', 'cdq_case']),\n title: DTString().initWith(\"Mr. Smith\"),\n content: DTRef(\"cdq_case_content\").initWith([\n DTRef(\"paragraph\"),\n DTRef(\"cdq_question\")\n ]),\n cdqFeatures: DTArray(DTRef(\"cdqFeature\")).initWith([DTRef(\"cdqFeature\").init, DTRef(\"cdqFeature\").init, DTRef(\"cdqFeature\").init]),\n }),\n cdqFeature: DTObject({\n type: \"cdqFeature\",\n uid: DTRef(\"uid\").init,\n content: DTString().initWith(\"Feature\"),\n _newStartWith: \"content\",\n }),\n cdqQuestion: DTObject({\n type: \"cdqQuestion\",\n uid: DTRef(\"uid\").init,\n limit: DTOr(DTInteger(), DTBoolean()).withDefault(false).initWith(false).editWith(\"falseOrNumberInput\"),\n isExplicitLimit: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n content: DTArray(DTRef(\"cdqQuestionAnswer\")).initWith([DTRef(\"cdqQuestionAnswer\").init, DTRef(\"cdqQuestionAnswer\").init, DTRef(\"cdqQuestionAnswer\").init]),\n gradingRules: DTEnum('strict', 'loose').withDefault('strict').editWith(\"selectInput\"),\n shouldShowGrade: DTBoolean().withDefault(false),\n graded: DTBoolean().withDefault(false),\n classes: DTArray(DTString()).withDefault([]),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false),\n bookmarked: DTBoolean().withDefault(false),\n }),\n cdqQuestionAnswer: DTObject({\n type: \"cdqQuestionAnswer\",\n uid: DTRef(\"uid\").init,\n feature: DTString(),\n content: DTRef(\"styledChildren\").init,\n value: DTBoolean(),\n answer: DTEnum(true, false, \"poison\"),\n classes: DTArray(DTString()).withDefault([]),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false),\n _newStartWith: \"content\",\n }),\n categoryMatcher: DTObject({\n type: \"categoryMatcher\",\n uid: DTRef(\"uid\").init,\n contentCategories: DTArray(DTRef(\"matchItem\")).initWith([DTRef(\"matchItem\").init]),\n contentItems: DTArray(DTRef(\"matchItem\")).initWith([DTRef(\"matchItem\").init]),\n value: DTMap(),\n answer: DTMap(),\n classes: DTArray(DTString()).withDefault([]),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false),\n bookmarked: DTBoolean().withDefault(false),\n }),\n matchItem: DTObject({\n type: \"matchItem\",\n uid: DTRef(\"uid\").init,\n content: DTRef(\"styledChildren\").init,\n classes: DTArray(DTString()).withDefault([]),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false),\n bookmarked: DTBoolean().withDefault(false),\n _newStartWith: \"content\",\n }),\n button: DTObject({\n type: \"button\",\n title: DTRef(\"styledChildren\").init,\n onClick: DTArray(DTRef(\"action\")).init,\n uid: DTRef(\"uid\").init,\n classes: DTArray(DTString()).withDefault([]),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false),\n bookmarked: DTBoolean().withDefault(false),\n _newStartWith: \"title\",\n }),\n ratingBar: DTObject({\n type: \"ratingBar\",\n uid: DTRef(\"uid\").init,\n maxValue: DTInteger().initWith(5).editWith(\"integerTextInput\"),\n _newStartWith: {contentKey: \"maxValue\"}\n }),\n action: DTObject({\n type: \"action\",\n uid: DTRef(\"uid\").init,\n arguments: DTMap()\n }),\n text: DTObject({\n type: \"text\",\n uid: DTRef(\"uid\").init,\n content: DTRef(\"styledContent\")\n }),\n bold: DTObject({\n type: \"bold\",\n uid: DTRef(\"uid\").init,\n content: DTRef(\"styledContent\")\n }),\n underline: DTObject({\n type: \"underline\",\n uid: DTRef(\"uid\").init,\n content: DTRef(\"styledContent\")\n }),\n italic: DTObject({\n type: \"italic\",\n uid: DTRef(\"uid\").init,\n content: DTRef(\"styledContent\")\n }),\n superscript: DTObject({\n type: \"superscript\",\n uid: DTRef(\"uid\").init,\n content: DTRef(\"styledContent\")\n }),\n subscript: DTObject({\n type: \"subscript\",\n uid: DTRef(\"uid\").init,\n content: DTRef(\"styledContent\")\n }),\n modalMedia: DTObject({\n type: \"modalMedia\",\n uid: DTRef(\"uid\").init,\n content: DTRef(\"styledContent\")\n }),\n link: DTObject({\n type: \"link\",\n uid: DTRef(\"uid\").init,\n content: DTRef(\"styledContent\")\n }),\n color: DTObject({\n type: \"color\",\n uid: DTRef(\"uid\").init,\n content: DTRef(\"styledContent\")\n }),\n root: DTSubObject(\"section\", {\n subtype: 'root',\n content: DTArray(DTOr(\n DTRef(\"author\"),\n DTRef(\"care_discussion_page\"),\n DTRef(\"case_synopsis_page\"),\n DTRef(\"clinical_reasoning_page\"),\n DTRef(\"excellence_in_action_page\"),\n DTRef(\"generic_page\"),\n DTRef(\"history_page\"),\n DTRef(\"learning_objectives_page\"),\n DTRef(\"management_page\"),\n DTRef(\"physical_exam_page\"),\n DTRef(\"saq_page\"),\n DTRef(\"teaching_page\"),\n DTRef(\"testing_page\"),\n DTRef(\"therapeutics_page\"),\n DTRef(\"overview_page\"),\n DTRef(\"clinical_feature_page\"),\n DTRef(\"epidemiology_page\"),\n DTRef(\"implications_for_management_page\"),\n DTRef(\"implications_for_further_workup_page\"),\n DTRef(\"mod_map_page\"),\n )),\n nested: DTMore().initWith(false),\n classes: DTMore().initWith([\"root\"]),\n sex: DTEnum('unspecified', 'female', 'male', 'other').withDefault('unspecified').initWith('unspecified').editWith(\"selectInput\").withDisplayName(\"Sex\"),\n race: DTEnum('unknown', 'white', 'black', 'native_american_or_islander', 'asian', 'hispanic').withDefault('unknown').initWith('unknown').editWith(\"selectInput\").withDisplayName(\"Race\"),\n clinical_locations: DTArray(DTEnum(\n \"Emergency department\",\n \"Home visit\",\n \"Inpatient/hospital\",\n \"Intensive care\",\n \"Outpatient clinic/urgent care\",\n \"Skilled nursing facility\",\n \"Other\"\n )).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Clinical Locations\"),\n clinical_disciplines: DTArray(DTEnum(\n \"Critical Care\",\n \"Emergency Medicine\",\n \"Family Medicine\",\n \"Geriatrics\",\n \"Internal Medicine\",\n \"Neurology\",\n \"Obstetrics & Gynecology\",\n \"Palliative Care\",\n \"Pediatrics\",\n \"Psychiatry\",\n \"Radiology\",\n \"Surgery\"\n )).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Clinical Disciplines\"),\n systems: DTArray(DTEnum(\n \"Allergy/Immune/Infection\",\n \"Cardiovascular\",\n \"Endocrine\",\n \"Female Reproductive & Breast\",\n \"Gastrointestinal\",\n \"Growth & Development\",\n \"Head & Neck\",\n \"Health & Wellness\",\n \"Hematopoietic\",\n \"Male Reproductive\",\n \"Metabolic & Nutrition\",\n \"Mind & Behavioral\",\n \"Musculoskeletal\",\n \"Nervous\",\n \"Renal & Urinary\",\n \"Respiratory\",\n \"Skin & Connective Tissue\"\n )).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Systems\"),\n clinical_focuses: DTArray(DTEnum(\n \"Diagnosis\",\n \"Course of Illness\",\n \"Further Work Up\",\n \"Management\",\n \"Prevention\"\n )).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Clinical Focuses\"),\n age_groups: DTArray(DTEnum(\n \"Newborn/Infant (0-1 year)\",\n \"Child (1-12 years)\",\n \"Adolescent (13-18 years)\",\n \"Adult (19-64 years)\",\n \"Older Adult / Elderly (65+ years)\",\n \"N/A\"\n )).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Age Groups\"),\n clinical_excellence: DTArray(DTEnum(\n \"Diagnostic Excellence\",\n \"High Value Care\",\n \"Palliative Care\",\n \"Social Determinants of Health\",\n \"Telemedicine\",\n \"Trauma-Informed Care\"\n )).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Clinical Excellence Integration\"),\n clinical_principles: DTArray(DTEnum(...CLINICAL_PRINCIPLES)).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Clinical Principles\"),\n basic_science_disciplines: DTArray(DTEnum(\n \"Anatomy\",\n \"Biochemistry\",\n \"Embryology\",\n \"Genetics and Genomics\",\n \"Immunology / Inflammation\",\n \"Microbiology\",\n \"Molecular Biology\",\n \"Neuroscience\",\n \"Pathology\",\n \"Pharmacology\",\n \"Physiology\"\n )).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Sciences Integration\"),\n sciences_core_concepts: DTArray(DTEnum(...SCIENCES_CORE_CONCEPTS)).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Sciences Core Concepts\"),\n presenting_problems: DTArray(DTEnum(...PRESENTING_PROBLEMS)).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Presenting Problem\"),\n final_diagnoses: DTArray(DTEnum(...FINAL_DIAGNOSES)).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Final Diagnosis\"),\n differential_diagnosis: DTArray(DTEnum(...DIFFERENTIAL_DIAGNOSIS)).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Differential Diagnosis\"),\n additional_diagnoses: DTArray(DTEnum(...ADDITIONAL_DIAGNOSES)).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Additional Conditions\"),\n collapsible: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n disableDiagnoses: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n disableNotes: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n disableFindings: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n disableBookmarks: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n disableLabValues: DTBoolean().withDefault(true).editWith(\"booleanInput\"),\n onlyOneUncollapsedSection: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n }),\n\n generic_page: DTSubObject(\"section\", {\n subtype: 'generic_page',\n content: DTArray(DTOr(\n DTRef(\"alert\"),\n DTRef(\"audio\"),\n DTRef(\"category_matcher_question\"),\n DTRef(\"core_concept_header\"),\n DTRef(\"causal_explanation\"),\n DTRef(\"deep_dive\"),\n DTRef(\"dialog_box\"),\n DTRef(\"free_text_question\"),\n DTRef(\"harm_statement\"),\n DTRef(\"horizontalRule\"),\n DTRef(\"image\"),\n DTRef(\"imageGallery\"),\n DTRef(\"mcq_diff_diagnosis\"),\n DTRef(\"mcq_feq\"),\n DTRef(\"mcq_multiple\"),\n DTRef(\"mcq_no_best\"),\n DTRef(\"mcq_single\"),\n DTRef(\"neutral_text\"),\n DTRef(\"numberedList\"),\n DTRef(\"paragraph\"),\n DTRef(\"references\"),\n DTRef(\"regularList\"),\n DTRef(\"RLOModal\"),\n DTRef(\"section\"),\n DTRef(\"summary_statement\"),\n DTRef(\"table\"),\n DTRef(\"tp_clinical_reasoning\"),\n DTRef(\"tp_clinical_skills\"),\n DTRef(\"tp_knowledge\"),\n DTRef(\"tp_management\"),\n DTRef(\"tp_principles\"),\n DTRef(\"tp_studies\"),\n DTRef(\"video\"),\n )).init,\n classes: DTMore().initWith([\"card\"]),\n collapsible: DTMore().initWith(true),\n collapsed: DTMore().initWith(true),\n }).withDisplayName(\"Page - Generic\"),\n care_discussion_page: DTSubObject(\"generic_page\", {\n subtype: \"care_discussion_page\",\n classes: DTMore().initWith([\"card\", \"care_discussion_card\"])\n }).withDisplayName(\"Page - Care Discussion\"),\n case_synopsis_page: DTSubObject(\"section\", {\n subtype: 'case_synopsis_page',\n content: DTArray(DTOr(\n DTRef(\"horizontalRule\"),\n DTRef(\"image\"),\n DTRef(\"numberedList\"),\n DTRef(\"paragraph\"),\n DTRef(\"regularList\"),\n DTRef(\"section\"),\n DTRef(\"table\"),\n )).init,\n uid: DTMore().initWith('case_synopsis_card'),\n classes: DTMore().initWith(['card', 'case_synopsis_card']),\n title: DTString().initWith(\"Case Synopsis\")\n }).withDisplayName(\"Page - Synopsis\"),\n category_page: DTSubObject(\"generic_page\", {\n subtype: \"category_page\",\n classes: DTMore().initWith([\"card\", \"category_card\"])\n }).withDisplayName(\"Page - Category\"),\n clinical_reasoning_page: DTSubObject(\"generic_page\", {\n subtype: \"clinical_reasoning_page\",\n classes: DTMore().initWith([\"card\", \"clinical_reasoning_card\"])\n }).withDisplayName(\"Page - Clinical Reasoning\"),\n excellence_in_action_page: DTSubObject(\"generic_page\", {\n subtype: \"excellence_in_action_page\",\n classes: DTMore().initWith([\"card\", \"excellence_in_action_card\"]),\n title: DTString().initWith(\"Excellence In Action\"),\n }).withDisplayName(\"Page - Excellence In Action\"),\n history_page: DTSubObject(\"generic_page\", {\n subtype: \"history_page\",\n classes: DTMore().initWith([\"card\", \"history_card\"])\n }).withDisplayName(\"Page - History\"),\n learning_objectives_page: DTSubObject(\"generic_page\", {\n subtype: \"learning_objectives_page\",\n content: DTArray(DTOr(\n DTRef(\"learningObjectivesList\")\n )).initWith([\n DTRef(\"learningObjectivesList\").init\n ]),\n classes: DTMore().initWith([\"card\", \"learning_objectives_card\"]),\n }).withDisplayName(\"Page - Learning Objectives\"),\n management_page: DTSubObject(\"generic_page\", {\n subtype: \"management_page\",\n classes: DTMore().initWith([\"card\", \"management_card\"])\n }).withDisplayName(\"Page - Management\"),\n physical_exam_page: DTSubObject(\"generic_page\", {\n subtype: \"physical_exam_page\",\n classes: DTMore().initWith([\"card\", \"physical_exam_card\"])\n }).withDisplayName(\"Page - Physical Exam\"),\n references_page: DTSubObject(\"generic_page\", {\n subtype: \"references_page\",\n classes: DTMore().initWith([\"card\", \"references_card\"])\n }).withDisplayName(\"Page - References\"),\n saq_page: DTSubObject(\"section\", {\n subtype: 'saq_page',\n content: DTArray(DTOr(\n DTRef(\"category_matcher_question\"),\n DTRef(\"free_text_question\"),\n DTRef(\"mcq_diff_diagnosis\"),\n DTRef(\"mcq_feq\"),\n DTRef(\"mcq_multiple\"),\n DTRef(\"mcq_no_best\"),\n DTRef(\"mcq_single\"),\n )).init,\n classes: DTMore().initWith(['card', 'saq_card']),\n title: DTString().initWith(\"Assessment Question\"),\n }).withDisplayName(\"Page - SAQ\"),\n teaching_page: DTSubObject(\"generic_page\", {\n subtype: \"teaching_page\",\n classes: DTMore().initWith([\"card\", \"teaching_card\"])\n }).withDisplayName(\"Page - Teaching\"),\n testing_page: DTSubObject(\"generic_page\", {\n subtype: \"testing_page\",\n classes: DTMore().initWith([\"card\", \"testing_card\"])\n }).withDisplayName(\"Page - Testing\"),\n therapeutics_page: DTSubObject(\"generic_page\", {\n subtype: \"therapeutics_page\",\n classes: DTMore().initWith([\"card\", \"therapeutics_card\"])\n }).withDisplayName(\"Page - Therapeutics\"),\n overview_page: DTSubObject(\"overview_card\", {\n subtype: \"overview_page\",\n classes: DTMore().initWith([\"card\", \"overview_card\"]),\n title: DTString().initWith(\"Overview\")\n }).withDisplayName(\"Page - Overview\"),\n clinical_feature_page: DTSubObject(\"clinical_feature_card\", {\n subtype: \"clinical_feature_page\",\n classes: DTMore().initWith([\"card\", \"clinical_feature_card\"]),\n title: DTString().initWith(\"Clinical Feature\")\n }).withDisplayName(\"Page - Clinical Feature\"),\n epidemiology_page: DTSubObject(\"epidemiology_card\", {\n subtype: \"epidemiology_page\",\n classes: DTMore().initWith([\"card\", \"epidemiology_card\"]),\n title: DTString().initWith(\"Epidemiology\")\n }).withDisplayName(\"Page - Epidemiology\"),\n implications_for_management_page: DTSubObject(\"implications_for_management_card\", {\n subtype: \"implications_for_management_page\",\n classes: DTMore().initWith([\"card\", \"implications_for_management_card\"]),\n title: DTString().initWith(\"Implications for Further Management\")\n }).withDisplayName(\"Page - Implications for Further Management\"),\n implications_for_further_workup_page: DTSubObject(\"implications_for_further_workup_card\", {\n subtype: \"implications_for_further_workup_page\",\n classes: DTMore().initWith([\"card\", \"implications_for_further_workup_card\"]),\n title: DTString().initWith(\"Implications for Further Workup\")\n }).withDisplayName(\"Page - Implications for Further Workup\"),\n mod_map_page: DTSubObject(\"mod_map_card\", {\n subtype: \"mod_map_page\",\n classes: DTMore().initWith([\"card\", \"mod_map_card\"]),\n title: DTString().initWith(\"MOD Map (Mechanism of Disease & Underlying Concepts)\")\n }).withDisplayName(\"Page - MOD Map (Mechanism of Disease & Underlying Concepts)\"),\n alert: DTSubObject(\"section\", {\n subtype: 'alert',\n content: DTRef(\"alertContent\").initWith([DTRef(\"paragraph\").init]),\n classes: DTMore().initWith([\"alert\"]),\n }).withDisplayName(\"Alert\"),\n audio: DTObject({\n type: \"audio\",\n uid: DTRef(\"uid\").init,\n title: DTRef(\"styledChildren\").init,\n source: DTEnum(\"local\").initWith(\"local\"),\n url: DTString().init,\n classes: DTArray(DTString()).withDefault([]),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false),\n bookmarked: DTBoolean().withDefault(false),\n _newStartWith: {menu: 'mediaPicker'}\n }).withDisplayName(\"Audio\"),\n category_matcher_question: DTSubObject(\"question\", {\n subtype: 'category_matcher_question',\n content: DTRef(\"categoryMatcherContent\").initWith([DTRef(\"paragraph\").init, DTRef(\"categoryMatcher\").init, DTRef(\"submit_button\").init, DTRef(\"answer_comment\").init]),\n }).withDisplayName(\"Question Item - Matching\"),\n causal_explanation: DTSubObject(\"section\", {\n subtype: 'causal_explanation',\n title: DTString().initWith(\"Causal Explanation (Why?)\"),\n content: DTRef(\"deepDiveContent\").initWith([DTRef(\"paragraph\").init]),\n classes: DTMore().initWith([\"causal_explanation\"]),\n }).withDisplayName(\"Causal Explanation\"),\n deep_dive: DTSubObject(\"section\", {\n subtype: 'deep_dive',\n title: DTString().initWith(\"\"),\n content: DTRef(\"deepDiveContent\").initWith([DTRef(\"paragraph\").init]),\n classes: DTMore().initWith([\"expert_comment\"]),\n collapsible: DTMore().initWith(true),\n collapsed: DTMore().initWith(true),\n }).withDisplayName(\"Deep Dive\"),\n dialog_box: DTSubObject(\"section\", {\n subtype: 'dialog_box',\n content: DTRef(\"dialogBoxContent\").initWith([DTRef(\"paragraph\").init]),\n classes: DTMore().initWith([\"dialog_box\"]),\n collapsible: DTMore().initWith(true),\n collapsed: DTMore().initWith(true),\n }).withDisplayName(\"Dialog Box\"),\n free_text_question: DTSubObject(\"question\", {\n classes: DTMore().initWith([\"question\", \"free_text_question\"]),\n subtype: 'free_text_question',\n content: DTRef(\"freeTextContent\").initWith([DTRef(\"paragraph\").init, DTRef(\"textInput\").init, DTRef(\"submit_button\").init, DTRef(\"answer_comment\").init]),\n }).withDisplayName(\"Question Item - Free Text \"),\n harm_statement: DTSubObject(\"section\", {\n subtype: 'harm_statement',\n content: DTRef(\"harmStatementContent\").initWith([DTRef(\"paragraph\").init]),\n title: DTString().initWith(\"Harm Statement\"),\n classes: DTMore().initWith([\"harm_statement\"]),\n }).withDisplayName(\"Harm Statement\"),\n horizontalRule: DTObject({\n type: \"horizontalRule\",\n uid: DTRef(\"uid\").init,\n classes: DTArray(DTString()).withDefault([]),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false),\n }).withDisplayName(\"Horizontal Rule\"),\n image: DTObject({\n type: \"image\",\n uid: DTRef(\"uid\").init,\n title: DTRef(\"styledChildren\").init,\n source: DTEnum(\"local\").initWith(\"local\"),\n url: DTString().init,\n classes: DTArray(DTString()).withDefault([]).editWith(\"tagsInput\"),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false),\n bookmarked: DTBoolean().withDefault(false),\n alignment: DTEnum(\"left\", \"right\", \"none\").withDefault(\"none\").editWith(\"selectInput\"),\n _newStartWith: {menu: 'mediaPicker'}\n }).withDisplayName(\"Image\"),\n imageGallery: DTObject({\n type: \"imageGallery\",\n uid: DTRef(\"uid\").init,\n images: DTArray(DTRef(\"image\")).initWith([DTRef(\"image\").init]),\n classes: DTArray(DTString()).withDefault([]).editWith(\"tagsInput\"),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false),\n bookmarked: DTBoolean().withDefault(false),\n }).withDisplayName(\"Image Gallery\"),\n learningObjective: DTObject({\n type: \"learningObjective\",\n uid: DTRef(\"uid\").init,\n content: DTRef(\"styledChildren\").init,\n classes: DTArray(DTString()).withDefault([]),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false),\n }).withDisplayName(\"Learning Objective\"),\n learningObjectivesList: DTObject({\n type: \"learningObjectivesList\",\n uid: DTRef(\"uid\").init,\n content: DTArray(DTRef(\"learningObjective\")).initWith([]),\n classes: DTArray(DTString()).withDefault([]),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false),\n }).withDisplayName(\"Learning Objective List\"),\n mcq_diff_diagnosis: DTSubObject(\"question\", {\n subtype: 'mcq_diff_diagnosis',\n content: DTRef(\"questionContent\").initWith([DTRef(\"paragraph\").init, DTRef(\"multipleChoice\").init, DTRef(\"submit_button\").init, DTRef(\"answer_comment\").init]),\n }).withDisplayName(\"Question Item - MCQ Differential Diagnosis\"),\n mcq_feq: DTSubObject(\"question\", {\n subtype: 'mcq_feq',\n content: DTRef(\"questionContent\").initWith([DTRef(\"paragraph\").init, DTRef(\"multipleChoice\").init, DTRef(\"submit_button\").init, DTRef(\"answer_comment\").init]),\n }).withDisplayName(\"Question Item - MCQ FEQ\"),\n mcq_multiple: DTSubObject(\"question\", {\n subtype: 'mcq_multiple',\n content: DTRef(\"questionContent\").initWith([DTRef(\"paragraph\").init, DTRef(\"paragraph\").initWith({content: \"<strong>Select all that apply.</strong>\"}), DTRef(\"multipleChoice\").init, DTRef(\"submit_button\").init, DTRef(\"answer_comment\").init]),\n }).withDisplayName(\"Question Item - MCQ Multiple Response\"),\n mcq_no_best: DTSubObject(\"question\", {\n subtype: 'mcq_no_best',\n content: DTRef(\"questionContent\").initWith([DTRef(\"paragraph\").init, DTRef(\"paragraph\").initWith({content: \"<strong>Select all that apply.</strong>\"}), DTRef(\"multipleChoice\").init, DTRef(\"submit_button\").init, DTRef(\"answer_comment\").init]),\n }).withDisplayName(\"Question Item - No Single Best Answer\"),\n mcq_single: DTSubObject(\"question\", {\n subtype: 'mcq_single',\n content: DTRef(\"questionContent\").initWith([DTRef(\"paragraph\").init, DTRef(\"paragraph\").initWith({content: \"<strong>Choose the single best answer.</strong>\"}), DTRef(\"multipleChoice\").initWith({multipleSelect: false}), DTRef(\"submit_button\").init, DTRef(\"answer_comment\").init]),\n }).withDisplayName(\"Question Item - MCQ Single Answer\"),\n neutral_text: DTSubObject(\"section\", {\n subtype: 'neutral_text',\n content: DTRef(\"neutralTextContent\").initWith([DTRef(\"paragraph\").init]),\n collapsible: DTMore().initWith(true),\n collapsed: DTMore().initWith(true),\n classes: DTMore().initWith([\"neutral_text\"]),\n }).withDisplayName(\"Neutral Text Expand\"),\n numberedList: DTObject({\n type: \"numberedList\",\n uid: DTRef(\"uid\").init,\n content: DTArray(DTRef(\"listItem\")).initWith([DTRef(\"listItem\").init]),\n classes: DTArray(DTString()).withDefault([]),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false),\n bookmarked: DTBoolean().withDefault(false),\n }).withDisplayName(\"List - Numbered\"),\n paragraph: DTObject({\n type: \"paragraph\",\n uid: DTRef(\"uid\").init,\n content: DTRef(\"styledChildren\").init,\n classes: DTArray(DTString()).withDefault([]),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n bookmarked: DTBoolean().withDefault(false),\n _newStartWith: \"content\",\n }).withDisplayName(\"Paragraph\"),\n references: DTSubObject(\"section\", {\n subtype: 'references',\n title: DTString().initWith(\"References\"),\n content: DTRef(\"referencesContent\").initWith([DTRef(\"paragraph\").init]),\n classes: DTMore().initWith([\"references\"]),\n _newStartWith: undefined,\n }).withDisplayName(\"References\"),\n regularList: DTObject({\n type: \"regularList\",\n uid: DTRef(\"uid\").init,\n content: DTArray(DTRef(\"listItem\")).initWith([DTRef(\"listItem\").init]),\n classes: DTArray(DTString()).withDefault([]),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false),\n bookmarked: DTBoolean().withDefault(false),\n }).withDisplayName(\"List - Bulleted\"),\n RLOModal: DTObject({\n type: \"RLOModal\",\n uid: DTRef(\"uid\").init,\n title: DTRef(\"styledChildren\").init,\n content: DTRef(\"alertContent\").initWith([DTRef(\"paragraph\").init]),\n classes: DTArray(DTString()).withDefault([]).editWith(\"tagsInput\"),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n bookmarked: DTBoolean().withDefault(false),\n nested: DTBoolean().withDefault(false).initWith(true),\n collapsible: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n collapsed: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n }).withDisplayName(\"Reusable Content\"),\n summary_statement: DTSubObject(\"question\", {\n subtype: 'summary_statement',\n classes: DTMore().initWith([\"question\", \"summary_statement_question\"]),\n title: DTString().initWith(\"Summary Statement Question\"),\n content: DTRef(\"summaryStatementContent\").initWith([DTRef(\"paragraph\").init, DTRef(\"textInput\").init, DTRef(\"submit_button\").init, DTRef(\"answer_comment\").init]),\n }).withDisplayName(\"Summary Statement\"),\n tp_clinical_reasoning: DTSubObject(\"section\", {\n subtype: 'tp_clinical_reasoning',\n content: DTRef(\"tpContent\").initWith([DTRef(\"paragraph\").init]),\n classes: DTMore().initWith([\"clinical_reasoning\"]),\n }).withDisplayName(\"TP - Clinical Reasoning\"),\n tp_clinical_skills: DTSubObject(\"section\", {\n subtype: 'tp_clinical_skills',\n content: DTRef(\"tpContent\").initWith([DTRef(\"paragraph\").init]),\n classes: DTMore().initWith([\"clinical_skills\"]),\n }).withDisplayName(\"TP - Clinical Skills\"),\n tp_knowledge: DTSubObject(\"section\", {\n subtype: 'tp_knowledge',\n content: DTRef(\"tpContent\").initWith([DTRef(\"paragraph\").init]),\n classes: DTMore().initWith([\"knowledge\"]),\n }).withDisplayName(\"TP - Knowledge\"),\n tp_management: DTSubObject(\"section\", {\n subtype: 'tp_management',\n content: DTRef(\"tpContent\").initWith([DTRef(\"paragraph\").init]),\n classes: DTMore().initWith([\"management\"]),\n }).withDisplayName(\"TP - Management\"),\n tp_principles: DTSubObject(\"section\", {\n subtype: 'tp_principles',\n content: DTRef(\"tpContent\").initWith([DTRef(\"paragraph\").init]),\n classes: DTMore().initWith([\"principles\"]),\n }).withDisplayName(\"TP - Principles\"),\n tp_studies: DTSubObject(\"section\", {\n subtype: 'tp_studies',\n content: DTRef(\"tpContent\").initWith([DTRef(\"paragraph\").init]),\n classes: DTMore().initWith([\"studies\"]),\n }).withDisplayName(\"TP - Studies\"),\n video: DTObject({\n type: \"video\",\n uid: DTRef(\"uid\").init,\n title: DTRef(\"styledChildren\").init,\n source: DTEnum(\"local\", \"youtube\", \"vimeo\").initWith(\"local\"),\n url: DTString().init,\n classes: DTArray(DTString()).withDefault([]),\n inactive: DTBoolean().withDefault(0),\n invisible: DTBoolean().withDefault(false),\n bookmarked: DTBoolean().withDefault(false),\n _newStartWith: {menu: 'mediaPicker'}\n }).withDisplayName(\"Video\"),\n answer_comment: DTSubObject(\"section\", {\n subtype: 'answer_comment',\n content: DTRef(\"answerCommentContent\").initWith([DTRef(\"paragraph\").init]),\n title: DTString().initWith(\"Answer Comment\"),\n classes: DTMore().initWith([\"answer_comment\"]),\n invisible: DTMore().initWith(true)\n }),\n submit_button: DTSubObject(\"button\", {\n subtype: 'submit_button',\n title: DTString().initWith(\"Submit\")\n }),\n save_button: DTSubObject(\"button\", {\n subtype: 'submit_button',\n title: DTString().initWith(\"Save\")\n }),\n question: DTSubObject(\"section\", {\n subtype: 'question',\n content: DTRef(\"questionContent\").initWith([DTRef(\"paragraph\").init]),\n title: DTString().initWith(\"Question\"),\n classes: DTMore().initWith([\"question\"]),\n _newStartWith: undefined,\n }).withDisplayName(\"Question\"),\n cdq_question: DTSubObject(\"question\", {\n classes: DTMore().initWith([\"question\"]),\n subtype: 'cdq_question',\n content: DTMore().initWith([DTRef(\"paragraph\").init, DTRef(\"cdqQuestion\").init, DTRef(\"submit_button\").init]),\n }),\n finish_case_page: DTSubObject(\"generic_page\", {\n subtype: 'finish_case_page',\n uid: DTMore().initWith('finish_case_card'),\n classes: DTMore().initWith(['card', 'finish_case_card']),\n title: DTString().initWith(\"Case Summary Download\")\n }),\n release_notes_page: DTSubObject(\"generic_page\", {\n subtype: 'release_notes_page',\n uid: DTMore().initWith('release_notes_card'),\n classes: DTMore().initWith(['card', 'release_notes_card']),\n title: DTString().initWith(\"Release Notes\"),\n content: DTArray(DTOr(\n DTRef(\"release_notes_section\")\n )).init\n }).withDisplayName(\"Release Notes\"),\n release_notes_section: DTSubObject(\"section\", {\n subtype: 'release_notes_section',\n classes: DTMore().initWith(['release_notes_section']),\n title: DTString().initWith(\"M_NAME DD, YYYY\"),\n collapsible: DTMore().initWith(true),\n collapsed: DTMore().initWith(true),\n content: DTArray(DTOr(\n DTRef(\"regularList\"),\n DTRef(\"section\")\n )).init\n }).withDisplayName(\"Release Notes Section\"),\n content_updates: DTSubObject(\"section\", {\n subtype: 'content_updates',\n classes: DTMore().initWith(['release_notes_updates_section']),\n title: DTString().initWith(\"Content Updates:\"),\n content: DTArray(DTOr(DTRef(\"regularList\"))).initWith([DTRef(\"regularList\").init]),\n }),\n engagement_questions_updates: DTSubObject(\"section\", {\n subtype: 'engagement_questions_updates',\n classes: DTMore().initWith(['release_notes_updates_section']),\n title: DTString().initWith(\"Engagement Questions:\"),\n content: DTArray(DTOr(DTRef(\"regularList\"))).initWith([DTRef(\"regularList\").init]),\n }),\n self_assesment_questions_updates: DTSubObject(\"section\", {\n subtype: 'self_assesment_questions_updates',\n classes: DTMore().initWith(['release_notes_updates_section']),\n title: DTString().initWith(\"Self-Assessment Questions:\"),\n content: DTArray(DTOr(DTRef(\"regularList\"))).initWith([DTRef(\"regularList\").init]),\n }),\n references_updates: DTSubObject(\"section\", {\n subtype: 'references_updates',\n classes: DTMore().initWith(['release_notes_updates_section']),\n title: DTString().initWith(\"References:\"),\n content: DTArray(DTOr(DTRef(\"regularList\"))).initWith([DTRef(\"regularList\").init]),\n }),\n custom_updates: DTSubObject(\"section\", {\n subtype: 'custom_updates',\n classes: DTMore().initWith(['release_notes_updates_section']),\n title: DTString().initWith(\"\"),\n content: DTArray(DTOr(DTRef(\"regularList\"))).initWith([DTRef(\"regularList\").init]),\n }),\n signature_case_template: DTSubObject(\"root\", {\n content: DTMore().initWith([\n DTRef(\"author\"),\n DTRef(\"generic_page\"),\n DTRef(\"finish_case_page\"),\n DTRef(\"release_notes_page\"),\n DTRef(\"learning_objectives_page\").initWith({\n uid: 'learning_objectives_card',\n title: 'Learning Objectives',\n }),\n DTRef(\"case_synopsis_page\")\n ])\n }),\n cdq_case_template: DTSubObject(\"root\", {\n content: DTArray(DTOr(\n DTRef(\"cdq_case\"),\n )).initWith([\n DTRef(\"cdq_case\"),\n ]),\n }),\n test_case_template: DTSubObject(\"root\", {\n content: DTMore().initWith([\n DTRef(\"learning_objectives_card\"),\n ]),\n }),\n illness_script_template: DTSubObject(\"root\", {\n content: DTArray(DTOr(\n DTRef(\"overview_card\"),\n DTRef(\"epidemiology_card\"),\n DTRef(\"clinical_feature_card\"),\n DTRef(\"implications_for_further_workup_card\"),\n DTRef(\"implications_for_management_card\"),\n DTRef(\"mod_map_card\"),\n )).initWith([\n DTRef(\"lead_editors\"),\n DTRef(\"contributing_authors\"),\n DTRef(\"overview_card\"),\n DTRef(\"epidemiology_card\"),\n DTRef(\"clinical_feature_card\"),\n DTRef(\"clinical_feature_card\"),\n DTRef(\"clinical_feature_card\"),\n DTRef(\"clinical_feature_card\"),\n DTRef(\"clinical_feature_card\"),\n DTRef(\"clinical_feature_card\"),\n DTRef(\"implications_for_further_workup_card\"),\n DTRef(\"implications_for_management_card\"),\n DTRef(\"mod_map_card\"),\n DTRef(\"release_notes_page\"),\n DTRef(\"synopsis_page\"),\n ]),\n disableNotes: false,\n disableFeedback: false,\n disableFindings: true,\n disableBookmarks: false,\n disableDiagnoses: true,\n disableLabValues: false,\n }),\n question_vignette: DTSubObject(\"section\", {\n subtype: 'question_vignette',\n title: DTString().initWith(\"Vignette\"),\n content: DTArray(DTOr(\n DTRef(\"image\"),\n DTRef(\"imageGallery\"),\n DTRef(\"numberedList\"),\n DTRef(\"paragraph\"),\n DTRef(\"regularList\"),\n )).initWith([DTRef(\"paragraph\").init]),\n classes: DTMore().initWith([\"question_vignette\"]),\n }),\n question_stem: DTSubObject(\"section\", {\n subtype: 'question_stem',\n title: DTString().initWith(\"Stem\"),\n content: DTArray(DTOr(\n DTRef(\"paragraph\"),\n )).initWith([DTRef(\"paragraph\").init]),\n classes: DTMore().initWith([\"question_stem\"]),\n }),\n assessment_question_mcq: DTSubObject(\"generic_page\", {\n subtype: 'assessment_question_mcq',\n title: DTString().initWith(\"Question\"),\n content: DTArray(DTOr(\n DTRef(\"question_vignette\"),\n DTRef(\"question_stem\"),\n DTRef(\"multipleChoice\"),\n )).initWith([\n DTRef(\"question_vignette\").init,\n DTRef(\"question_stem\").init,\n DTRef(\"multipleChoice\").initWith({multipleSelect: false})\n ]),\n classes: DTMore().initWith([\"card\", \"assessment_question_mcq\"]),\n collapsed: DTMore().initWith(false)\n }),\n assessment_question_mcq_template: DTSubObject(\"root\", {\n content: DTArray(DTOr(\n DTRef(\"assessment_question_mcq\")\n )).initWith([DTRef(\"assessment_question_mcq\").init]),\n }),\n author: DTSubObject(\"paragraph\", {\n content: DTString().initWith(\"<strong>Author(s):</strong>\"),\n classes: DTMore().initWith([\"authors\"])\n }).withDisplayName(\"Authors\"),\n lead_editors: DTSubObject(\"paragraph\", {\n content: DTString().initWith(\"<strong>Lead Editors:</strong>\"),\n classes: DTMore().initWith([\"lead_editors\"])\n }),\n contributing_authors: DTSubObject(\"paragraph\", {\n content: DTString().initWith(\"<strong>Contributing Authors:</strong>\"),\n classes: DTMore().initWith([\"contributing_authors\"])\n }),\n overview_card: DTSubObject(\"generic_page\", {\n title: DTString().initWith(\"Overview\"),\n classes: DTMore().initWith([\"card\", \"overview_card\"]),\n collapsed: DTMore().initWith(false),\n content: DTMore().initWith([\n DTRef(\"paragraph\"),\n ])\n }).withDisplayName(\"Overview\"),\n epidemiology_card: DTSubObject(\"generic_page\", {\n title: DTString().initWith(\"Epidemiology\"),\n classes: DTMore().initWith([\"card\", \"epidemiology_card\"]),\n content: DTMore().initWith([\n DTRef(\"paragraph\"),\n ])\n }).withDisplayName(\"Epidemiology\"),\n clinical_feature_card: DTSubObject(\"generic_page\", {\n title: DTString().initWith(\"Clinical Feature\"),\n classes: DTMore().initWith([\"card\", \"clinical_feature_card\"]),\n content: DTMore().initWith([\n DTRef(\"paragraph\"),\n DTRef(\"section\"),\n ])\n }),\n mod_map_card: DTSubObject(\"generic_page\", {\n title: DTString().initWith(\"Mechanism of Disease & Underlying Concepts\"),\n classes: DTMore().initWith([\"card\", \"mod_map_card\"]),\n content: DTRef(\"modMapCardContent\").initWith([\n DTRef(\"mod_map_image\"),\n DTRef(\"underlying_core_concepts\"),\n ])\n }),\n mod_map_image: DTSubObject(\"image\", {\n alignment: DTMore().initWith(\"left\"),\n classes: DTMore().initWith([\"mod-map-image\"])\n }).withDisplayName(\"MOD Map Image\"),\n synopsis_page: DTSubObject(\"section\", {\n subtype: 'synopsis_page',\n content: DTArray(DTOr(\n DTRef(\"horizontalRule\"),\n DTRef(\"image\"),\n DTRef(\"numberedList\"),\n DTRef(\"paragraph\"),\n DTRef(\"regularList\"),\n DTRef(\"section\"),\n DTRef(\"table\"),\n )).initWith([\n DTSubObject(\"paragraph\", {\n content: DTString().initWith(\"Building on the traditional illness script format, Integrated Illness Scripts embed basic science core concepts as causal and explanatory mechanisms associated with clinical features. Integrated Illness Scripts are designed specifically to promote cognitive integration and provide a framework for learners to link basic science and clinical knowledge.\")\n }),\n ]),\n uid: DTMore().initWith('synopsis_card'),\n classes: DTMore().initWith(['card', 'synopsis_card']),\n title: DTString().initWith(\"Synopsis\"),\n collapsible: DTMore().initWith(true),\n collapsed: DTMore().initWith(true),\n invisible: DTMore().initWith(true)\n }).withDisplayName(\"Page - Synopsis\"),\n underlying_core_concepts: DTSubObject(\"section\", {\n subtype: 'underlying_core_concepts',\n title: DTString().initWith(\"Underlying Core Concepts\"),\n content: DTRef(\"coreConceptContent\").initWith([DTRef(\"core_concept_header\").init]),\n classes: DTMore().initWith([\"underlying_core_concepts\"])\n }).withDisplayName(\"Underlying Core Concepts\"),\n core_concept_header: DTSubObject(\"section\", {\n subtype: 'core_concept_header',\n content: DTMore().initWith([DTRef(\"paragraph\")]),\n classes: DTMore().initWith([\"core_concept_header\"]),\n collapsible: DTMore().initWith(true),\n collapsed: DTMore().initWith(false)\n }).withDisplayName(\"Core Concept Header\"),\n implications_for_further_workup_card: DTSubObject(\"generic_page\", {\n title: DTString().initWith(\"Implications for Further Work Up\"),\n classes: DTMore().initWith([\"card\", \"implications_for_further_workup_card\"]),\n content: DTMore().initWith([\n DTSubObject(\"paragraph\", {\n content: DTString().initWith(\"Using what you now understand about the integrated illness script, enter your thoughts below about the implications for further workup for this condition.\")\n }),\n DTSubObject(\"paragraph\", {\n content: DTString().initWith(\"Your responses will be recorded in your Student Report and may also be viewed by faculty.\")\n }),\n DTRef(\"implications_for_further_workup_notes\")\n ])\n }),\n implications_for_further_workup_notes: DTSubObject(\"section\", {\n title: DTString().initWith(\"Implications for Further Workup:\"),\n content: DTMore().initWith([DTRef(\"implications_for_further_workup_response\").init, DTRef(\"save_button\").init]),\n classes: DTMore().initWith([\"implications_for_further_workup_notes\"]),\n collapsible: DTMore().initWith(true),\n collapsed: DTMore().initWith(false),\n }),\n implications_for_further_workup_response: DTSubObject(\"textInput\", {\n uid: DTMore().initWith(\"implications_for_further_workup_response\"),\n }),\n implications_for_management_card: DTSubObject(\"generic_page\", {\n title: DTString().initWith(\"Implications for Management\"),\n classes: DTMore().initWith([\"card\", \"implications_for_management_card\"]),\n content: DTMore().initWith([\n DTSubObject(\"paragraph\", {\n content: DTString().initWith(\"Using what you now understand about the integrated illness script, enter your thoughts below about the implications for management for this condition.\")\n }),\n DTSubObject(\"paragraph\", {\n content: DTString().initWith(\"Your responses will be recorded in your Student Report and may also be viewed by faculty.\")\n }),\n DTRef(\"implications_for_management_notes\")\n ])\n }),\n implications_for_management_notes: DTSubObject(\"section\", {\n title: DTString().initWith(\"Implications for Management:\"),\n content: DTMore().initWith([DTRef(\"implications_for_management_response\").init, DTRef(\"save_button\").init]),\n classes: DTMore().initWith([\"implications_for_management_notes\"]),\n collapsible: DTMore().initWith(true),\n collapsed: DTMore().initWith(false),\n }),\n implications_for_management_response: DTSubObject(\"textInput\", {\n uid: DTMore().initWith(\"implications_for_management_response\"),\n }),\n unassigned_case_template: DTSubObject(\"root\", {\n content: DTMore().initWith([\n DTRef(\"generic_page\"),\n ])\n })\n};\n\nexport const subtypeClassifiers = {\n section: [\n [\"alert\", (n) => n.classes?.includes(\"alert\")],\n [\"answer_comment\", (n) => n.classes?.includes(\"answer_comment\")],\n [\"category_page\", (n) => n.classes?.includes(\"category_card\")],\n [\"care_discussion_page\", (n) => n.classes?.includes(\"care_discussion_card\")],\n [\"causal_explanation\", (n) => n.classes?.includes(\"causal_explanation\")],\n [\"clinical_reasoning_page\", (n) => n.classes?.includes(\"clinical_reasoning_card\")],\n [\"cdq_case\", (n) => n.classes?.includes(\"cdq_case\")],\n [\"custom_updates\", (n) => n.classes?.includes(\"release_notes_updates_section\")],\n [\"underlying_core_concepts\", (n) => n.classes?.includes(\"underlying_core_concepts\")],\n [\"dialog_box\", (n) => n.classes?.includes(\"dialog_box\")],\n [\"deep_dive\", (n) => n.classes?.includes(\"expert_comment\")],\n [\"excellence_in_action_page\", (n) => n.classes?.includes(\"excellence_in_action_card\")],\n [\"harm_statement\", (n) => n.classes?.includes(\"harm_statement\")],\n [\"finish_case_page\", (n) => n.classes?.includes(\"finish_case_card\")],\n [\"history_page\", (n) => n.classes?.includes(\"history_card\")],\n [\"neutral_text\", (n) => n.classes?.includes(\"neutral_text\")],\n [\"core_concept_header\", (n) => n.classes?.includes(\"core_concept_header\")],\n [\"release_notes_section\", (n) => n.classes?.includes(\"release_notes_section\")],\n [\"learning_objectives_page\", (n) => n.classes?.includes(\"learning_objectives_card\")],\n [\"management_page\", (n) => n.classes?.includes(\"management_card\")],\n [\"physical_exam_page\", (n) => n.classes?.includes(\"physical_exam_card\")],\n [\"category_matcher_question\", (n) => n.classes?.includes(\"question\") && n.content.some((child) => child.type === \"categoryMatcher\")],\n [\"free_text_question\", (n) => n.classes?.includes(\"free_text_question\")],\n [\"summary_statement\", (n) => n.classes?.includes(\"summary_statement_question\")],\n [\"question\", (n) => n.classes?.includes(\"question\")],\n [\"references\", (n) => n.classes?.includes(\"references\")],\n [\"references_page\", (n) => n.classes?.includes(\"references_card\")],\n [\"release_notes_page\", (n) => n.classes?.includes(\"release_notes_card\")],\n [\"saq_page\", (n) => n.classes?.includes(\"saq_card\")],\n [\"testing_page\", (n) => n.classes?.includes(\"testing_card\")],\n [\"teaching_page\", (n) => n.classes?.includes(\"teaching_card\")],\n [\"therapeutics_page\", (n) => n.classes?.includes(\"therapeutics_card\")],\n [\"mod_map_page\", (n) => n.classes?.includes(\"mod_map_card\")],\n [\"implications_for_further_workup_page\", (n) => n.classes?.includes(\"implications_for_further_workup_card\")],\n [\"implications_for_management_page\", (n) => n.classes?.includes(\"implications_for_management_card\")],\n [\"overview_page\", (n) => n.classes?.includes(\"overview_card\")],\n [\"overview_page\", (n) => n.classes?.includes(\"synopsis_card\")],\n ['epidemiology_page', (n) => n.classes?.includes(\"epidemiology_card\")],\n ['clinical_feature_page', (n) => n.classes?.includes(\"clinical_feature_card\")],\n [\"case_synopsis_page\", (n) => n.classes?.includes(\"case_synopsis_card\")],\n [\"generic_page\", (n) => n.classes?.includes(\"card\")],\n [\"tp_clinical_reasoning\", (n) => n.classes?.includes(\"clinical_reasoning\")],\n [\"tp_clinical_skills\", (n) => n.classes?.includes(\"clinical_skills\")],\n [\"tp_knowledge\", (n) => n.classes?.includes(\"knowledge\")],\n [\"tp_management\", (n) => n.classes?.includes(\"management\")],\n [\"tp_principles\", (n) => n.classes?.includes(\"principles\")],\n [\"tp_studies\", (n) => n.classes?.includes(\"studies\")],\n [\"assessment_question_mcq\", (n) => n.classes?.includes(\"assessment_question_mcq\")],\n [\"question_stem\", (n) => n.classes?.includes(\"question_stem\")],\n [\"question_vignette\", (n) => n.classes?.includes(\"question_vignette\")],\n [\"root\", (n) => n.classes?.includes(\"root\") || n.level === 0]\n ],\n} as Record<\"section\", Array<[string, (n: DocSectionType<unknown>) => boolean]>>;\n\nexport function getSubType(node: DocBlockNode<unknown>) {\n const nodeClassifiers = subtypeClassifiers[node.type];\n if (nodeClassifiers) {\n const returnedClassifier = find(nodeClassifiers, (classifier) => classifier[1](node));\n if (returnedClassifier) {\n return returnedClassifier[0];\n }\n }\n\n return node.subtype || node.type;\n}\n","export default \"Asthma\\nBronchiolitis\\nImmunization\\nGrowth disorders\\nNeuropathy\\nArrhythmia - ventricular\\nAnxiety\\nSubstance use disorder\\nPain - chest / angina\\nOsteopenia / osteoporosis\\nGastroesophageal reflux disease\\nSinusitis\\nInfection - Mycobacterial\\nMyocardial infarction\\nMeningitis / encephalitis\\nPain - chronic\\nPalliative care\\nCardiomegaly\\nHeart failure\\nConstipation\\nChronic disease\\nJaundice\\nPneumonia\\nPharyngitis\\nWheezing\\nSubstance withdrawl\\nFetal alcohol syndrome\\nSexually transmitted infection\\nObesity\\nEndometriosis\\nPelvic inflammatory disease\\nDermatitis\\nInfection - HIV\\nAutism\\nChromosomal abnormality\\nContraception\\nInfection - Influenza\\nBronchitis\\nGastroenteritis\\nCeliac disease\\nIncreased intracranial pressure\\nAcute Respiratory Distress Syndrome\\nEmpyema\\nInflammatory bowel disease\\nBowel obstruction\\nTorsion - testicular\\nAppendicitis\\nCholelithiasis\\nCholangitis\\nPain - back\\nPregnancy - ectopic\\nHealth promotion / disease prevention / screening\\nDental caries and abscess\\nMedication issue\\nCognitive impairment\\nSpondyloarthropathies\\nArthritis - degenerative\\nFracture\\nAltered mental status / confusion\\nHypotension\\nMenses\\nBacteremia\\nDiabetes mellitus - adult\\nDrug interaction\\nCancer\\nHypertension\\nMuscle injury / strain\\nColic\\nDepression\\nObstructive sleep apnea\\nElectrolyte disturbances - potassium\\nNutritional deficiencies\\nSkin lesion\\nPulmonary embolus\\nEpididymitis\\nHernia\\nCerebrovascular disease / stroke\\nParkinson disease\\nThyroid disease - hypothyroidism\\nTransfusion reaction\\nAnemia\\nTrauma\\nArthritis - infectious\\nCancer - leukemia\\nUpper respiratory infection\\nUrinary tract infection - including pyelonophritis / cystitis\\nCellulitis / impetigo\\nThrombophlebitis\\nCancer - lymphoma\\nIrritable bowel syndrome\\nAbnormal cervical cytology\\nGlucose disturbance - hypoglycemia\\nDevelopmental dysplasia of hip\\nFetal growth abnormalities\\nBehavioral disorder\\nHypoxia / hypoxemia\\nRaynaud syndrome or phenomenon\\nFalls in the elderly\\nArthritis - inflammatory\\nTorsion - ovarian\\nPancreatitis\\nDelirium\\nCancer - lung\\nNephritis\\nConjunctivitis\\nAllergic disease\\nAcne\\nInfection - Scabies / lice\\nMass / cyst - breast\\nPregnancy - normal uterine\\nPulmonary hypertension\\nFailure to thrive\\nSepsis\\nAcid-base disturbance\\nRenal disease and failure - acute\\nMultifactorial condition\\nAtaxia\\nCancer - pancreatic\\nCholecystitis\\nArthritis\\nHealth care systems / communication issue\\nFetal distress\\nPneumothorax\\nHospital admission / discharge planning\\nUrinary retention\\nIntussusception\\nCoronary artery disease\\nAnemia - hemolytic\\nCancer - metastatic\\nDisc herniation\\nFeeding disorder\\nNeglect & abuse\\nDiabetes mellitus - DKA\\nShock\\nShock - hypovolemic\\nDehydration\\nColitis - infectious\\nDeep vein thrombosis\\nPeritonitis\\nEating disorder\\nDiabetes mellitus - juvenile\\nTrauma - thoracic\\nHeadache\\nDementia\\nIatrogenic pathology\\nThromboembolism\\nPulmonary Embolism\\nShock - septic\\nShock - cardiac\\nHemorrhage - intracranial\\nTransient ischemic attack\\nPyloric stenosis\\nArthritis - rheumatologic\\nOsteomylitis\\nFracture - occult\\nCancer - renal\\nElectrolyte disturbances - sodium\\nCritical respiratory failure\";","export default \"Diagnostic Excellence: Metacognition, knowledge, and decision-making\\nDiagnostic Excellence: Cognitive biases and diagnostic error\\nDiagnostic Excellence: Elements that affect diagnostic error\\nDiagnostic Excellence: Effects of diagnostic error\\nDiagnostic Excellence: Deliberate practice and diagnostic excellence\\nDiagnostic Excellence: Uncertainty and diagnosis excellence\\nHigh Value Care: Benefits and harms in decision-making\\nHigh Value Care: Evidence-based practice\\nHigh Value Care: Patient goals and values in decision-making\\nHigh Value Care: Insurance, payment models, and patient resources\\nHigh Value Care: Test results and patient outcomes\\nHigh Value Care: Value versus costs\\nHigh Value Care: Stewardship of resources\\nPalliative Care: Needs assessment and care alignment\\nPalliative Care: Interprofessional collaboration and coordination\\nPalliative Care: Evidence-based and holistic care\\nPalliative Care: Culturally responsive palliative care\\nPalliative Care: Palliative care education and promotion\\nSocial Determinants: Advocacy for equitable care\\nSocial Determinants: Culture and health care\\nSocial Determinants: Inequity in care and health outcomes\\nSocial Determinants: Nonmedical factors that shape health outcomes\\nTelemedicine: Technology and telehealth\\nTelemedicine: Televisit best practices\\nTelemedicine: Patient access and response to telehealth\\nTrauma-Informed Care: Safety\\nTrauma-Informed Care: Trustworthiness amd transparency\\nTrauma-Informed Care: Peer support\\nTrauma-Informed Care: Collaboration and mutuality\\nTrauma-Informed Care: Empowerment, voice, and choice\\nTrauma-Informed Care: Cultural, historical, and gender issues\";","export default \"Asthma\\nBronchiolitis\\nForeign body\\nHealth promotion / disease prevention / screening\\nDyslipidemia\\nImmunization\\nGrowth disorders\\nCancer - neuroblastoma\\nNeuropathy\\nArthritis - degenerative\\nPain - chronic\\nDeep vein thrombosis\\nHeart failure\\nArrhythmia - ventricular\\nAnxiety\\nSubstance use disorder\\nThyroid disease - hyperthyroidism\\nThyroid disease - hypothyroidism\\nHypertension\\nObesity\\nPain - chest / angina\\nKawasaki disease\\nAdenitis\\nOsteopenia / osteoporosis\\nMenopause\\nGastroesophageal reflux disease\\nSinusitis\\nInfection - Mycobacterial\\nRhinitis\\nAllergic disease\\nMyocardial infarction\\nMeningitis / encephalitis\\nHeadache\\nColic\\nInfection - HIV\\nInfection - opportunistic\\nPalliative care\\nCancer - lung\\nNeutropenia\\nElectrolyte disturbances - calcium\\nCardiomegaly\\nAneurysm - aortic\\nConstipation\\nPneumonia\\nDelirium\\nChronic disease\\nJaundice\\nAltered mental status / confusion\\nFeeding disorder\\nPharyngitis\\nInfection - Influenza\\nBronchitis\\nWheezing\\nPancreatitis\\nSubstance withdrawl\\nLiver disease\\nInfection - hepatitis\\nChronic obstructive pulmonary disease\\nFetal alcohol syndrome\\nSexually transmitted infection\\nFetal growth abnormalities\\nDiabetes mellitus - adult\\nEndometriosis\\nPelvic inflammatory disease\\nDysmenorrhea\\nLeiomyoma / fibroids\\nDermatitis\\nDrug reaction\\nCancer - skin\\nCellulitis / impetigo\\nAutism\\nChromosomal abnormality\\nCerebral palsy\\nSpeech disorders\\nContraception\\nUrinary tract infection - including pyelonophritis / cystitis\\nSeizure - febrile\\nViral syndrome\\nDiabetes mellitus - DKA\\nDehydration\\nColitis - infectious\\nFracture\\nAnemia\\nMedication issue\\nPregnancy - normal uterine\\nInfection - Epstein-Barr virus / Mono\\nGastroenteritis\\nCeliac disease\\nInflammatory bowel disease\\nPain - abdominal\\nIncreased intracranial pressure\\nTrauma - head\\nAcute Respiratory Distress Syndrome\\nEmpyema\\nPleural effusion\\nBowel obstruction\\nCancer - colon\\nHealth care systems / communication issue\\nPulmonary embolus\\nPulmonary edema\\nTorsion - testicular\\nAppendicitis\\nIntussusception\\nEpiglottitis / tracheitis\\nCholelithiasis\\nCholangitis\\nCholecystitis\\nPeritonitis\\nPain - back\\nPregnancy - ectopic\\nAbortion - spontaneous\\nDental caries and abscess\\nDementia\\nBehavioral disorder\\nCognitive impairment\\nNeglect & abuse\\nSpondyloarthropathies\\nMuscle injury / strain\\nCancer - prostate\\nFracture - occult\\nHypotension\\nMultifactorial condition\\nFalls in the elderly\\nIatrogenic pathology\\nUlcer\\nMenses\\nAnemia - iron & vitamin deficiency\\nBacteremia\\nDrug interaction\\nGlucose disturbance - hypoglycemia\\nDepression\\nCancer\\nDisc herniation\\nObstructive sleep apnea\\nElectrolyte disturbances - potassium\\nRenal disease and failure - chronic\\nNutritional deficiencies\\nSkin lesion\\nAttention deficit hyperactivity disorder\\nInfection - streptococcal\\nCoronary artery disease\\nEpididymitis\\nHernia\\nPain - acute\\nCerebrovascular disease / stroke\\nValvular heart disease\\nArrhythmia - atrial\\nParkinson disease\\nInsomnia\\nTransfusion reaction\\nGastrointestinal hemorrhage\\nGastritis\\nTrauma\\nArthritis - infectious\\nCancer - leukemia\\nArthritis - inflammatory\\nLimp / abnormal gait\\nUpper respiratory infection\\nOtitis media - acute / recurrent / effusion\\nHearing impairment\\nInfection - C. difficile\\nProstate disease\\nArthritis - rheumatologic\\nCongenital heart disease\\nMetabolic syndrome\\nThrombophlebitis\\nCancer - lymphoma\\nIrritable bowel syndrome\\nAbnormal cervical cytology\\nDomestic violence\\nVulvovaginitis\\nDevelopmental dysplasia of hip\\nTransient tachypnea of the newborn\\nHypoxia / hypoxemia\\nRaynaud syndrome or phenomenon\\nSystemic lupus erythematosus\\nSyncope\\nSyndrome of inappropriate diuretic hormone\\nElectrolyte disturbances - sodium\\nUrethritis\\nInfection - gonococcal\\nTorsion - ovarian\\nCor pulmonale\\nNephritis\\nConjunctivitis\\nNephrotic syndrome\\nAcne\\nInfection - Scabies / lice\\nUrticaria\\nAbscess\\nMass / cyst - breast\\nCancer - breast\\nMultifactorial gene disorder\\nInfertility\\nPulmonary hypertension\\nFailure to thrive\\nSepsis\\nRespiratory distress and failure\\nHemoglobinopathies\\nAcid-base disturbance\\nPyloric stenosis\\nRenal disease and failure - acute\\nTrauma - abdominal\\nTrauma - thoracic\\nAtaxia\\nCancer - brain\\nCancer - pancreatic\\nSomatoform / functional disorder\\nArthritis\\nJoint pain and injury - foot & ankle\\nUrinary incontinence / frequency\\nFetal distress\\nLabor - including preterm\\nNewborn transition\\nPneumothorax\\nJoint pain and injury - shoulder\\nHospital admission / discharge planning\\nSexual dysfuntion - male\\nUrinary retention\\nToxic ingestion / poisoning\\nCancer - metastatic\\nCancer - bone\\nPetechiae / purpura\\nCystic fibrosis\\nMalrotation / volvulus\\nTransient ischemic attack\\nAdjustment disorder\\nAnemia - hemolytic\\nPneumonia - aspiration\\nSeizure\\nJoint pain and injury - knee\\nJoint pain and injury - hip\\nInfection - respiratory syncytial virus\\nJoint effusion\\nShock\\nGlucose disturbance - hyperglycemia\\nShock - hypovolemic\\nAtelectasis\\nDiverticular disease\\nShock - septic\\nEating disorder\\nCoagulopathy / disseminated intravascular coagulation\\nDiabetes mellitus - juvenile\\nVertigo\\nAneurysm - cerebral\\nThromboembolism\\nPulmonary Embolism\\nShock - cardiac\\nHemorrhage - intracranial\\nOsteomylitis\\nCancer - renal\\nRenal and ureteric calculi\\nTransverse myelitis\\nEpidural hematoma\\nPeripheral nerve and root\\nGuillain - Barre syndrome\\nChronic immune demyelinating polyradiculoneuropathy (CIDP)\\nPolyradiculopathy\\nMyasthenia gravis\\nBotulism\\nToxic - metabolic encephalopathy (AKI, fentanyl overdose)\\nIschemic stroke\\nPosterior - reversible leukoencephalopathy syndrome\\nHypoxic - ischemic injury\\nNon - convulsive status epilepticus\\nIntoxication \\nNon - epileptic seizures\\nSubclavian steal syndrome\\nMultisystem organ dysfunctions that include neurologic dysfunction\\nLower motor neuron diseases (anterior horn cell disorders)\\nPolyneuropathies \\nDisorder of neuromuscular transmission\\nMuscle dysfunction\\nMultiple sclerosis (MS)\\nLyme neuroborreliosis\\nSarcoidosis\\nMyopathy\\nNeuromuscular junction disorder\\nDrug - induced tremor\\nEnhanced physiologic tremor\\nEssential tremor\\nPsychogenic tremor\\nDiabetic polyneuropathy\\nToxin - mediated nerve injury\\nAutoimmune neuropathy\\nParaneoplastic polyneuropathy\\nIdiopathic polyneuropathy\\nAlzheimer dementia\\nVascular disease/dementia \\nDementia with Lewy bodies\\nFrontotemporal lobar degeneration\\nMigraine\\nTension headache\\nBasilar migraine\\nBrain tumor\\nMedication overuse headache\\nTemporal arteritis\\nHypokalemic periodic paralysis\\nHemiplegic migraine\\nVestibular migraine\\nBenign paroxysmal positional vertigo (BPPV)\\nCardiac arrhythmia \\nCerebellar infarct \\nMeniere disease, acute labyrinthitis\";","export default \"Foreign body\\nHealth promotion / disease prevention / screening\\nDyslipidemia\\nCancer - neuroblastoma\\nArthritis - degenerative\\nPain - chronic\\nDeep vein thrombosis\\nHeart failure\\nThyroid disease - hyperthyroidism\\nThyroid disease - hypothyroidism\\nHypertension\\nObesity\\nAnxiety\\nKawasaki disease\\nAdenitis\\nMenopause\\nAsthma\\nRhinitis\\nAllergic disease\\nMyocardial infarction\\nHeadache\\nColic\\nInfection - HIV\\nInfection - opportunistic\\nCancer - lung\\nNeutropenia\\nElectrolyte disturbances - calcium\\nAneurysm - aortic\\nPneumonia\\nDelirium\\nChronic disease\\nAltered mental status / confusion\\nFeeding disorder\\nInfection - Influenza\\nBronchitis\\nSinusitis\\nPancreatitis\\nSubstance withdrawl\\nLiver disease\\nInfection - hepatitis\\nChronic obstructive pulmonary disease\\nFetal growth abnormalities\\nMeningitis / encephalitis\\nDiabetes mellitus - adult\\nDysmenorrhea\\nLeiomyoma / fibroids\\nDrug reaction\\nCancer - skin\\nCellulitis / impetigo\\nCerebral palsy\\nSpeech disorders\\nUrinary tract infection - including pyelonophritis / cystitis\\nSexually transmitted infection\\nPharyngitis\\nSubstance use disorder\\nSeizure - febrile\\nViral syndrome\\nDiabetes mellitus - DKA\\nDehydration\\nColitis - infectious\\nFracture\\nAnemia\\nMedication issue\\nPregnancy - normal uterine\\nInfection - Epstein-Barr virus / Mono\\nInflammatory bowel disease\\nPain - abdominal\\nTrauma - head\\nPleural effusion\\nCancer - colon\\nImmunization\\nHealth care systems / communication issue\\nPulmonary embolus\\nPulmonary edema\\nIntussusception\\nBronchiolitis\\nEpiglottitis / tracheitis\\nCholecystitis\\nPeritonitis\\nAbortion - spontaneous\\nNeuropathy\\nDementia\\nBehavioral disorder\\nNeglect & abuse\\nCognitive impairment\\nMuscle injury / strain\\nCancer - prostate\\nFracture - occult\\nMultifactorial condition\\nFalls in the elderly\\nIatrogenic pathology\\nUlcer\\nAnemia - iron & vitamin deficiency\\nGlucose disturbance - hypoglycemia\\nDepression\\nMenses\\nDisc herniation\\nPain - back\\nRenal disease and failure - chronic\\nSkin lesion\\nAttention deficit hyperactivity disorder\\nInfection - streptococcal\\nCoronary artery disease\\nTorsion - testicular\\nPain - acute\\nValvular heart disease\\nArrhythmia - atrial\\nInsomnia\\nGastrointestinal hemorrhage\\nGastritis\\nArthritis - inflammatory\\nLimp / abnormal gait\\nOtitis media - acute / recurrent / effusion\\nHearing impairment\\nInfection - C. difficile\\nProstate disease\\nArthritis - rheumatologic\\nCongenital heart disease\\nMetabolic syndrome\\nInfection - Mycobacterial\\nDomestic violence\\nVulvovaginitis\\nTransient tachypnea of the newborn\\nJaundice\\nNutritional deficiencies\\nSystemic lupus erythematosus\\nSyncope\\nSyndrome of inappropriate diuretic hormone\\nElectrolyte disturbances - sodium\\nUrethritis\\nInfection - gonococcal\\nPelvic inflammatory disease\\nCor pulmonale\\nNephrotic syndrome\\nUrticaria\\nDermatitis\\nAbscess\\nContraception\\nCancer - breast\\nMultifactorial gene disorder\\nInfertility\\nPregnancy - ectopic\\nRespiratory distress and failure\\nHemoglobinopathies\\nGastroenteritis\\nPyloric stenosis\\nTrauma - abdominal\\nTrauma - thoracic\\nCancer - brain\\nCholelithiasis\\nAppendicitis\\nTorsion - ovarian\\nSomatoform / functional disorder\\nJoint pain and injury - foot & ankle\\nUrinary incontinence / frequency\\nLabor - including preterm\\nNewborn transition\\nPneumothorax\\nCerebrovascular disease / stroke\\nJoint pain and injury - shoulder\\nHypotension\\nSexual dysfuntion - male\\nBowel obstruction\\nToxic ingestion / poisoning\\nArrhythmia - ventricular\\nCancer - metastatic\\nCancer - bone\\nPetechiae / purpura\\nCystic fibrosis\\nMalrotation / volvulus\\nTransient ischemic attack\\nAdjustment disorder\\nAnemia - hemolytic\\nPneumonia - aspiration\\nHospital admission / discharge planning\\nSeizure\\nSepsis\\nChromosomal abnormality\\nCancer - leukemia\\nJoint pain and injury - knee\\nJoint pain and injury - hip\\nInfection - respiratory syncytial virus\\nJoint effusion\\nConstipation\\nGlucose disturbance - hyperglycemia\\nShock - hypovolemic\\nAtelectasis\\nEmpyema\\nDiverticular disease\\nShock - septic\\nRenal disease and failure - acute\\nCoagulopathy / disseminated intravascular coagulation\\nUpper respiratory infection\\nVertigo\\nAneurysm - cerebral\\nThromboembolism\\nPulmonary Embolism\\nDiabetes mellitus - juvenile\\nGastroesophageal reflux disease\\nShock - cardiac\\nHemorrhage - intracranial\\nOsteopenia / osteoporosis\\nRenal and ureteric calculi\\nAcid-base disturbance\\nElectrolyte disturbances - potassium\\nGuillain - Barre Syndrome\\nHypoxic - ischemic brain injury\\nFocal epilepsy\\nSpinal muscular atrophy (SMA) type 1\\nMultiple sclerosis (MS)\\nMyasthenia gravis\\nParkinson disease (PD)\\nDiabetic polyneuropathy\\nAlzheimer dementia\\nCerebellar astrocytoma\\nMigraine headache\\nAtrial fibrillation\\nVertebral dissection\";","export default \"Cough\\nWheezing\\nHealth promotion / disease prevention / screening\\nPain - abdominal\\nMass / cyst - abdominal\\nJoint pain and injury - knee\\nJoint pain and injury - hand & arm\\nDeep vein thrombosis\\nDyspnea\\nEdema and third spacing\\nWeight loss\\nAmenorrhea\\nPalpitations\\nFever\\nSkin lesion\\nVaginal bleeding - abnormal\\nRhinitis\\nDermatitis\\nPain - chest / angina\\nHeadache\\nPain - acute\\nColic\\nFever - immunocompromised host\\nConstipation\\nAltered mental status / confusion\\nDelirium\\nWeakness\\nCongenital anomalies\\nChronic disease\\nFeeding disorder\\nVomiting / emesis\\nLiver disease\\nFetal growth abnormalities\\nSeizure\\nDiabetes mellitus - adult\\nDysmenorrhea\\nDiarrhea\\nCellulitis / impetigo\\nCognitive impairment\\nGait abnormality\\nSpeech disorders\\nDysuria\\nSubstance use disorder\\nUpper respiratory infection\\nDehydration\\nAcid-base disturbance\\nColitis - infectious\\nFracture\\nAnemia\\nHeart failure\\nFatigue\\nMurmur\\nPregnancy - normal uterine\\nPharyngitis\\nHematochezia\\nTrauma - head\\nCerebral herniation\\nTrauma - thoracic\\nImmunization\\nHealth care systems / communication issue\\nAneurysm - aortic\\nPulmonary embolus\\nRenal disease and failure - acute\\nHip click\\nHydrocephalus\\nPain - back\\nAbortion - spontaneous\\nNeuropathy\\nUrinary incontinence / frequency\\nAgitation\\nNeglect & abuse\\nFalls in the elderly\\nIatrogenic pathology\\nGastrointestinal hemorrhage\\nGlucose disturbance - hypoglycemia\\nAdjustment disorder\\nArthritis\\nNutritional deficiencies\\nMenopause\\nUlcer\\nHypertension\\nAttention deficit hyperactivity disorder\\nTorsion - testicular\\nPain - groin\\nSyncope\\nInsomnia\\nDepression\\nDizziness\\nLimp / abnormal gait\\nDementia\\nFever - undetermined origin\\nSexually transmitted infection\\nVulvovaginitis\\nDomestic violence\\nRespiratory distress and failure\\nPrematurity\\nHypoxia / hypoxemia\\nJaundice\\nArthritis - rheumatologic\\nGastroesophageal reflux disease\\nApnea\\nUrticaria\\nContraception\\nAsthma\\nHypoxia / Hypoxemia\\nCancer - breast\\nMultifactorial gene disorder\\nLeiomyoma / fibroids\\nInfertility\\nPregnancy - ectopic\\nHemoglobinopathies\\nTrauma - abdominal\\nAnxiety\\nNausea\\nPain - pelvic\\nJoint pain and injury - foot & ankle\\nLabor - including preterm\\nPneumothorax\\nJoint pain and injury - shoulder\\nFunctional decline\\nSexual dysfuntion - male\\nHypotension\\nUrinary retention\\nSepsis\\nBruising\\nFailure to thrive\\nMalabsorption\\nBowel obstruction\\nMass / cyst - rectal\\nAnemia - hemolytic\\nHepatomegaly\\nSplenomegaly\\nElectrolyte disturbance - sodium\\nGlucose disturbance - hyperglycemia\\nVision impairment\\nOliguria\\nShock - hypovolemic\\nHospital admission / discharge planning\\nCongenital heart disease\\nPetechiae / purpura\\nAnorexia / appetite disorders\\nObesity\\nJoint pain and injury - neck\\nProstate disease\\nUrinary tract infection - including pyelonophritis / cystitis\\nPain - chronic\\nAcute respiratory distress syndrome\\nShock - septic\\nDiabetes mellitus - juvenile\\nPneumonia\\nElectrolyte disturbances - potassium\\ncough\\nMyocardial infarction\\nShock - cardiac\\nAbscess\\nInfection - Influenza\\nSpeech disorder\\nCerebrovascular disease / stroke\\nHemorrhage - intracranial\\nIncreased intracranial pressure\\nTransient ischemic attack\\nDiaphoresis\\nDyslipidemia\\nJoint pain and injury - hip\\nJoint effusion\\nOsteopenia / osteoporosis\\nHematuria\\nRenal disease and failure - chronic\\nShortness of breath\\nComa\\nCardiac arrest\\nHypotonia\\nNumbness\\nTingling\\nFatigability\\nTremor\\nPtosis\\nMemory loss\";","export default \"3D relationships\\nAbsorption and distribution\\nAcid/base balance\\nAdverse effects and toxicity\\nAirway/GI access\\nAllelic variation and personalized medicine\\nAnatomical structure\\nAnatomical support\\nApoptosis\\nAssessing drug therapy\\nAutoimmunity\\nBiomolecular structure and function\\nBlood flow\\nBlood-brain barrier\\nCancer genetics\\nCell injury\\nCell populations\\nCell potential\\nCell to cell communication\\nCell/tissue metabolic specialization\\nCellular aging\\nCellular proliferation during development\\nCerebral and spinal vasculature\\nChromosomal abnormalities\\nChronic inflammation\\nCognitive function\\nCommunicating genetic information\\nComplications of premature birth\\nConsciousness\\nDNA replication and telomeres\\nDrug interactions\\nEffects of teratogens\\nEpigenetic gene regulation\\nExtracellular matrix interactions: wound healing, hemodynamics, thrombosis\\nFlow gradients\\nFusion of tissues\\nGenetic factors influencing development\\nGenetic screening and diagnostic testing\\nGenetic testing\\nGenetic variation\\nGenetics of common disorders\\nGlucose homeostasis\\nImmunodeficiency\\nImmunodiagnostics\\nImmunologically mediated disorders\\nImmunosuppression/immunocompromised patient\\nImplications of genetic testing\\nInductive tissue interactions\\nInfection is different than disease\\nInflammation and tissue damage\\nInheritance patterns\\nLate genetic presentations\\nLymphatic drainage\\nMechanisms of action\\nMetabolic regulation - intercellular communication\\nMetabolism and excretion\\nMicrobial epidemiology\\nMicrobial genetics\\nMicrobial homeostasis: normal microbiome\\nMicrobial immunology\\nMicrobial laboratory diagnosis\\nMicrobial pathogenesis\\nMicrobial structure informs function\\nMicrobial transmission\\nMicronutrients\\nMigration of cells and organs\\nMolecular biology techniques in diagnosis\\nMolecular cloning and recombinant therapies\\nMovement disorders\\nMusculoskeletal anatomy\\nMutagenesis and repair\\nMutation and neoplasia\\nNecrosis and cell death\\nNeurodevelopment\\nNitrogen balance\\nNutritional immunology\\nPain\\nPeripheral innervation\\nPopulation genetics\\nProgrammed cell death\\nReferred pain\\nRegulation of blood glucose\\nRegulation of electrolytes (potassium (K) and calcium ion (Ca2+))\\nRegulation of gene expression\\nRegulation of hydrogen ion concentration (pH)\\nRegulation of intracranial pressure\\nRegulation of mean arterial pressure (MAP)\\nRegulation of neuronal activity\\nRegulation of osmolarity\\nRegulation of oxygen and carbon dioxide\\nRegulation of reproduction\\nRegulatory RNAs\\nSecondary effects of developmental disturbances\\nSteady state determination of metabolites and markers\\nStructure/function organization of the CNS/PNS\\nSurface landmarks\\nSystemic inflammation\\nTherapeutic uses\\nTransitory structures\\nTransplantation\\nTransport mechanisms\\nUnique features of prokaryotes and implications for therapy\\nVaccines and immunotherapies\\nViral structure and replication\\nWaste and toxin disposal\\nWhole body energy balance\";","import { range } from \"lodash\";\n\nexport function stringReplaceByRange(string: string, range: DocRange, newString: string) {\n return string.substr(0,range.start) + newString + string.substr(range.end);\n}\n\nexport function isEqualRanges(range1: DocRange, range2: DocRange) {\n return (range1.start === range2.start) && (range1.end === range2.end);\n}\n\n//TODO isRangeCollapsed vs isRangeEmpty\nexport function isRangeCollapsed(range: DocRange) {\n return range.start === range.end;\n}\n\nexport function isRangeEmpty(range: DocRange) {\n return range.start >= range.end;\n}\n\nexport function rangeLength(range: DocRange) {\n return range.end - range.start;\n}\n\nexport function rangesDoTouch(range1: DocRange, range2: DocRange) {\n return range1.end >= range2.start && range1.start <= range2.end;\n}\n\nexport function rangesDoOverlap(range1: DocRange, range2: DocRange) {\n return range1.end > range2.start && range1.start < range2.end;\n}\n\nexport function rangesIntersection(range1: DocRange, range2: DocRange) {\n return rangesDoTouch(range1, range2) ? {start: Math.max(range1.start, range2.start), end: Math.min(range1.end, range2.end)} : null;\n}\n\nexport function rangesUnion(range1: DocRange, range2: DocRange) {\n return rangesDoTouch(range1, range2) ? {start: Math.min(range1.start, range2.start), end: Math.max(range1.end, range2.end)} : null;\n}\n\nexport function rangesExcept(range1: DocRange, range2: DocRange) {\n if (rangesDoTouch(range1, range2)) {\n let newRanges: Array<DocRange> = [];\n\n if (range1.start < range2.start) {\n newRanges.push({\n start: range1.start,\n end: range2.start,\n })\n }\n\n if (range1.end > range2.end) {\n newRanges.push({\n start: range2.end,\n end: range1.end,\n })\n }\n\n return newRanges;\n } else {\n return [range1];\n }\n}\n\nexport function extendRangeAtIndexByValue(range: DocRange, index: number, value: number) {\n return {\n start: range.start > index ? range.start + value : range.start,\n end: range.end >= index ? range.end + value: range.end,\n }\n}\n\nexport function splitAndShiftRangeAtIndexByValue(range: DocRange, index: number, value: number) {\n if (range.end <= index) {\n return [range];\n } else if(range.start >= index) {\n return [shiftRange(range, value)];\n } else {\n return [\n {\n start: range.start,\n end: index,\n },\n {\n start: index + value,\n end: range.end + value\n }\n ]\n }\n}\n\nexport function deleteRangeAtIndexByValue(range: DocRange, index: number, value: number) {\n const newStart = range.start > index ? Math.max(range.start - value, index) : range.start;\n const newEnd = range.end > index ? Math.max(range.end - value, index) : range.end;\n\n if (newStart !== newEnd) {\n return {\n start: newStart,\n end: newEnd\n }\n } else {\n return null;\n }\n}\n\nexport function isInOrEndRange(range: DocRange, index: number) {\n return index > range.start && index <= range.end;\n}\n\nexport function collapsedRangeAtIndex(index: number) {\n return {\n start: index,\n end: index,\n };\n}\n\nexport function collapseRangeToStart(range: DocRange) {\n return {\n start: range.start,\n end: range.start,\n }\n}\n\nexport function collapseRangeToEnd(range: DocRange) {\n return {\n start: range.end,\n end: range.end,\n }\n}\n\nexport function shiftRange(range: DocRange, value: number) {\n return {\n start: range.start + value,\n end: range.end + value,\n }\n}\n\nexport function offsetOfTouchStart(range1: DocRange, range2: DocRange) {\n if (rangesDoTouch(range1, range2)) {\n if (range1.start < range2.start ) {\n return range2.start - range1.start;\n } else {\n return 0;\n }\n } else {\n return null;\n }\n}\n\nexport function offsetOfTouchEnd(range1: DocRange, range2: DocRange) {\n if (rangesDoTouch(range1, range2)) {\n if (range1.end > range2.end ) {\n return range2.end - range1.start;\n } else {\n return rangeLength(range1);\n }\n } else {\n return null;\n }\n}\n\nexport function offsetRangeOfTouch(range1: DocRange, range2: DocRange) {\n if (rangesDoTouch(range1, range2)) {\n return {\n start: offsetOfTouchStart(range1, range2),\n end: offsetOfTouchEnd(range1, range2),\n };\n } else {\n return null;\n }\n}\n\nexport function rangesSortByStart(ranges: Array<DocRange>) {\n return ranges.sort((range1, range2) => {return range1.start - range2.start;});\n}\n\nexport function rangesSortByEnd(ranges: Array<DocRange>) {\n return ranges.sort((range1, range2) => {return range1.end - range2.end;});\n}\n\nexport function compressRanges(ranges: Array<DocRange>) {\n return rangesSortByStart(ranges).reduce((compressedRanges, range) => {\n const prevRange = compressedRanges.pop();\n if (!prevRange) {\n return [range];\n } else {\n const unionOfRanges = rangesUnion(prevRange, range);\n\n if (unionOfRanges) {\n compressedRanges.push(unionOfRanges);\n } else {\n compressedRanges.push(prevRange, range);\n }\n\n return compressedRanges;\n }\n }, [] as Array<DocRange>);\n}\n\nexport function isRangeCoveredByRanges(range: DocRange, coverRanges: Array<DocRange>) {\n const compressedCoverRanges = compressRanges(coverRanges);\n const relevantCoverRange = compressedCoverRanges.find((coverRange) => coverRange.end > range.start);\n\n return (\n !!relevantCoverRange\n && relevantCoverRange.start <= range.start\n && relevantCoverRange.end >= range.end\n );\n}\n\n// withRange functions\n\nexport function rejectItemsWithEmptyRanges<T extends WithDocRange>(withRanges: Array<T>) {\n return withRanges.filter((withRange) => !isRangeEmpty(withRange.range));\n}\n\nexport function sortItemsWithRangesByStart<T extends WithDocRange>(withRanges: Array<T>) {\n return withRanges.sort((withRange1, withRange2) => {return withRange1.range.start - withRange2.range.start;});\n}\n","import {\n compact,\n findLast,\n flatten,\n groupBy,\n isPlainObject,\n values,\n} from \"lodash\";\n\nimport * as R from \"ramda\";\n\nimport {\n rangesUnion,\n rejectItemsWithEmptyRanges,\n sortItemsWithRangesByStart,\n isInOrEndRange,\n compressRanges,\n isRangeCoveredByRanges,\n} from \"./Range\";\n\nimport {\n findNodePathByUid,\n findNodeAtPath,\n} from \"./base\";\n\nimport * as selection from \"../selection\";\n\nfunction styleRangeCompressKey(styleRange: StyleRange) {\n switch (styleRange.type) {\n case \"link\":\n return [styleRange.type, styleRange.args.url];\n break;\n case \"color\":\n return [styleRange.type, styleRange.args.hexCode];\n break;\n default:\n return styleRange.type;\n }\n}\n\n// Convert To Use compressRanges function\nexport function compressStyleRanges(rangeInlineJSON: InlineRangeNode) {\n const styleRanges = rangeInlineJSON.styleRanges;\n const preppedStyleRanges = rejectItemsWithEmptyRanges(styleRanges);\n\n const styleRangesGroups = groupBy(preppedStyleRanges, (styleRange) => styleRangeCompressKey(styleRange));\n\n const allCompressedStyleRanges = sortItemsWithRangesByStart(flatten(values(styleRangesGroups).map((styleRangesGroup) => {\n return sortItemsWithRangesByStart(styleRangesGroup).reduce((compressedStyleRanges, styleRange) => {\n if (compressedStyleRanges.length === 0) {\n return [styleRange];\n } else {\n const prevStyleRange = compressedStyleRanges.pop();\n const unionOfStyleRanges = rangesUnion(prevStyleRange.range, styleRange.range);\n\n if (unionOfStyleRanges) {\n const newStyleRange = {...prevStyleRange};\n newStyleRange.range = unionOfStyleRanges;\n compressedStyleRanges.push(newStyleRange);\n } else {\n compressedStyleRanges.push(prevStyleRange, styleRange);\n }\n\n return compressedStyleRanges;\n }\n }, []);\n })));\n\n rangeInlineJSON.styleRanges = allCompressedStyleRanges;\n return rangeInlineJSON;\n}\n\nexport function visibleIndexLessEqualGivenIndex(rangeInlineJSON, endIndex: number) {\n const hideRanges = rangeInlineJSON.styleRanges.filter((styleRange) => styleRange.style === \"HIDE_TEXT\").map((styleRange) => styleRange.range);\n const compressedRanges = compressRanges(hideRanges);\n\n const lastRelevanteHideRange = findLast(compressedRanges, (range) => range.end < endIndex);\n\n if (lastRelevanteHideRange && lastRelevanteHideRange.end < endIndex) {\n return lastRelevanteHideRange.start;\n } else {\n return endIndex;\n }\n}\n\nexport function stylesAtIndex(rangeInlineJSON: InlineRangeNode, index: number) {\n const styleRangesAtIndex = rangeInlineJSON.styleRanges.filter((styleRange) => isInOrEndRange(styleRange.range, index));\n return styleRangesAtIndex.map((styleRange) => styleRange.type);\n}\n\nexport function stylesCoveringRangeWithHideText(rangeInlineJSON: InlineRangeNode, range) { // TODO: REVISE WHEN InlineRangeNode Split in two\n const styleRanges = rangeInlineJSON.styleRanges || [];\n const preppedStyleRanges = rejectItemsWithEmptyRanges(styleRanges);\n\n const styleRangesGroups = groupBy(preppedStyleRanges, (styleRange) => styleRangeCompressKey(styleRange));\n\n let hideTextRanges = [];\n if (styleRangesGroups[\"HIDE_TEXT\"]) {\n hideTextRanges = styleRangesGroups[\"HIDE_TEXT\"].map((hideTextStyleRange) => hideTextStyleRange.range);\n delete styleRangesGroups[\"HIDE_TEXT\"];\n }\n\n return R.fromPairs(compact(values(styleRangesGroups).map((styleRangeGroup) => {\n const styleRanges = styleRangeGroup.map((hideTextStyleRange) => hideTextStyleRange.range);\n return isRangeCoveredByRanges(range, styleRanges.concat(hideTextRanges)) ? [styleRangeGroup[0].type, styleRangeGroup[0]] : null;\n })));\n}\n\nexport function stylesCoveringDocSelection(data: DocBlockNode<InlineRangeNode>, docSelection: DocSelection) {\n const {\n uid: startUID,\n contentKey: startKey,\n index: startIndex,\n } = docSelection.start;\n\n const {\n uid: endUID,\n contentKey: endKey,\n index: endIndex,\n } = docSelection.end;\n\n const startNodePath = findNodePathByUid(data, startUID);\n\n if (!startNodePath) { return {} }\n\n const startNode = findNodeAtPath(data, startNodePath);\n\n if (selection.isInOneInline(docSelection)) {\n return startNode[startKey] ? stylesCoveringRangeWithHideText(startNode[startKey], {start: startIndex, end: endIndex}) : {};\n } else {\n const endNodePath = findNodePathByUid(data, endUID);\n const endNode = findNodeAtPath(data, endNodePath);\n\n const startStyles = startKey ? stylesCoveringRangeWithHideText(startNode[startKey], {start: startIndex, end: startNode[startKey].text.length}) : {};\n const endStyles = endKey ? stylesCoveringRangeWithHideText(endNode[endKey], {start: 0, end: endIndex}) : {};\n\n // TODO EXPAND TO COVER MIDDLE NODES\n\n return R.pick(R.keys(endStyles), startStyles);\n }\n}\n\n\nexport function isRangeInlineJSON(possibleRangeInlineJSON: InlineNode): possibleRangeInlineJSON is InlineRangeNode {\n return typeof possibleRangeInlineJSON !== \"string\" && (\"text\" in possibleRangeInlineJSON) && (typeof possibleRangeInlineJSON.text === \"string\");\n}\n\nexport function rangeInlineJSONWithText(text = \"\") {\n return {\n text: text,\n styleRanges: [],\n };\n}\n","export function lastLeaf(treeInlineNodes: Array<InlineTreeNodeSimple>) : InlineTreeNodeSimple | null {\n const rightNode = treeInlineNodes.slice(-1)[0];\n if (rightNode) {\n if (rightNode.type === \"text\") {\n return rightNode;\n } else if (rightNode.type === \"link\") {\n return lastLeaf(rightNode.title) || rightNode;\n } else {\n return lastLeaf(rightNode.content) || rightNode;\n }\n } else {\n return null;\n }\n}\n\nexport function contentRightNDeep(treeInlineNodes: Array<InlineTreeNodeSimple>, n: number) {\n if (n <= 0) {\n return treeInlineNodes;\n } else {\n const rightNode = treeInlineNodes.slice(-1)[0];\n if (rightNode) {\n switch (rightNode.type) {\n case \"text\":\n return null;\n break;\n case \"link\":\n return contentRightNDeep(rightNode.title, n - 1);\n break;\n default:\n return contentRightNDeep(rightNode.content, n - 1);\n }\n } else {\n return null;\n }\n }\n}\n\nexport function nodeRightNDeep(treeInlineNodes: Array<InlineTreeNodeSimple>, n: number) {\n const content = contentRightNDeep(treeInlineNodes, n);\n return content && content.slice(-1)[0];\n}\n\nexport function appendTextToNode(treeInlineNode: InlineTreeNodeSimple, text: string) {\n switch (treeInlineNode.type) {\n case \"text\":\n treeInlineNode.content += text;\n break;\n case \"link\":\n treeInlineNode.title.push({\n type: \"text\",\n content: text,\n });\n break;\n default:\n treeInlineNode.content.push({\n type: \"text\",\n content: text,\n });\n }\n return treeInlineNode;\n}\n\nexport function isTreeInlineJSON(possibleTreeInlineJSON: InlineNodeAll): possibleTreeInlineJSON is Array<InlineTreeNode> {\n return (\n Array.isArray(possibleTreeInlineJSON) &&\n (\n possibleTreeInlineJSON.length === 0 ||\n [\n \"text\",\n \"bold\",\n \"italic\",\n \"underline\",\n \"subscript\",\n \"superscript\",\n \"link\",\n \"color\",\n \"HIDE_TEXT\",\n \"SELECTION_MIMIC\",\n \"ADD_COMMENT_THREAD\",\n \"ADD_CONTENT\",\n \"ADDED_TEXT\",\n \"CHANGED_TEXT\",\n \"DELETE_CONTENT\",\n \"DELETED_TEXT\",\n \"ADDED_STYLE\",\n \"DELETED_STYLE\",\n ].includes(possibleTreeInlineJSON[0].type)\n )\n );\n}\n","import {\n assign,\n flatten,\n isObject,\n isPlainObject,\n reduce,\n} from \"lodash\";\n\nimport * as R from \"ramda\";\n\nimport generateUUID from \"../../generateUUID\";\nimport { isRangeInlineJSON } from \"./RangeInlineJSON\";\n\ntype ObjTester = (data: any) => boolean; // TODO: Remove any\ntype NodeTester = (node: DocBlockNode<unknown>) => boolean;\n\nexport function deepFind(data, tester: ObjTester) {\n let result = null;\n if (data instanceof Array) {\n for (let i = 0; i < data.length; i += 1) {\n result = deepFind(data[i], tester);\n if (result) {\n return result;\n }\n }\n } else if (data instanceof Object) {\n if (tester(data)) {\n return data;\n }\n\n for (const prop in data) {\n if (data[prop] instanceof Object || data[prop] instanceof Array) {\n result = deepFind(data[prop], tester);\n if (result) {\n return result;\n }\n }\n }\n }\n return result;\n}\n\nexport function deepFindObjectPath(data, tester: ObjTester) {\n if (data instanceof Array) {\n for (let i = 0; i < data.length; i += 1) {\n const result = deepFindObjectPath(data[i], tester);\n if (result) {\n return result;\n }\n }\n } else {\n if (tester(data)) {\n return [data];\n }\n\n for (const prop in data) {\n if ((data[prop] instanceof Object || data[prop] instanceof Array) && prop !== \"contentListNodes\") {\n const result = deepFindObjectPath(data[prop], tester);\n if (result) {\n return ([data].concat(result));\n }\n }\n }\n }\n return null;\n}\n\nexport function deepFindAllObjectPaths(data, tester: ObjTester) {\n if (data instanceof Array) {\n return data.flatMap((datum) => deepFindAllObjectPaths(datum, tester));\n } else {\n let objectPaths = Object.entries(data)\n .filter(([key, datum]) => (datum instanceof Object || datum instanceof Array) && key !== \"contentListNodes\")\n .flatMap(([key, datum]) => deepFindAllObjectPaths(datum, tester))\n .map((path) => [data].concat(path));\n\n if (tester(data)) {\n objectPaths = [[data]].concat(objectPaths);\n }\n\n return objectPaths;\n }\n}\n\nexport function deepFindPath(data, tester: ObjTester) {\n if (data instanceof Array) {\n for (let i = 0; i < data.length; i += 1) {\n const result = deepFindPath(data[i], tester);\n if (result) {\n return [i].concat(result);\n }\n }\n } else {\n if (tester(data)) {\n return [];\n }\n\n for (const prop in data) {\n if (data[prop] instanceof Object || data[prop] instanceof Array) {\n const result = deepFindPath(data[prop], tester);\n if (result) {\n return ([prop].concat(result));\n }\n }\n }\n }\n return null;\n}\n\nexport function deepFindAllPaths(data, tester: ObjTester) {\n if (data instanceof Array) {\n return data.flatMap((datum, index) => deepFindAllPaths(datum, tester).map((indexPaths) => [index].concat(indexPaths)));\n } else {\n let indexPaths = Object.entries(data)\n .filter(([key, datum]) => (datum instanceof Object || datum instanceof Array))\n .flatMap(([key, datum], index) => deepFindAllPaths(datum, tester).map((indexPaths) => [key].concat(indexPaths)));\n\n if (tester(data)) {\n indexPaths = ([[]]).concat(indexPaths);\n }\n\n return indexPaths;\n }\n return [];\n}\n\n\nexport function deepFindAll(data, tester: ObjTester) {\n let result = [];\n if (data instanceof Array) {\n return data.reduce((acc, curData) => acc.concat(deepFindAll(curData, tester)), []);\n } else if (data instanceof Object) {\n if (tester(data)) {\n result.push(data);\n }\n\n for (const prop in data) {\n if (data[prop] instanceof Object || data[prop] instanceof Array) {\n const innerResult = deepFindAll(data[prop], tester);\n if (innerResult) {\n result = result.concat(innerResult);\n }\n }\n }\n }\n return result;\n}\n\nexport function findAtPath(data, indexPath) {\n return R.view(R.lensPath(indexPath), data);\n}\n\nexport function filterPathsByFunction(data, paths, func) {\n return paths.filter((path) => func(R.view(R.lensPath(path), data)));\n}\n\nexport function findCommonAncestorPath(pathA, pathB) {\n return R.takeWhile(([a, b]: any) => R.equals(a,b), R.zip(pathA, pathB)).flatMap(R.init); // TODO: Remove any\n}\n\nexport function isPathChildOfPath(path, possibleAncestorPath) {\n return path.length > possibleAncestorPath.length && R.equals(R.take(possibleAncestorPath.length, path), possibleAncestorPath);\n}\n\n////////////////////////////////////////\n////////////////////////////////////////\n\nexport function normalizeDocNode(node) {\n const toNormalizeKeys = nodeBlockContentKeys(node);\n\n const toNormalizeChildren = flatten(toNormalizeKeys.map((key) => {\n return node[key] || [];\n }));\n\n const newNode = {...node};\n toNormalizeKeys.forEach((key) => {\n if (newNode[key]) {\n newNode[key] = newNode[key].map((childNode) => childNode.uid);\n }\n });\n\n return assign({[node.uid]: newNode}, ...(toNormalizeChildren.map((childNode) => {\n return normalizeDocNode(childNode);\n })));\n}\n\n// export function normalizeDocNodeWithAncestorUids(node, ancestorUids = []) {\n// const toNormalizeKeys = nodeBlockContentKeys(node);\n\n// const toNormalizeChildren = flatten(toNormalizeKeys.map((key) => {\n// return node[key] || [];\n// }));\n\n// const newNode = {...node,\n// ancestorUids,\n// };\n// toNormalizeKeys.forEach((key) => {\n// if (newNode[key]) {\n// newNode[key] = newNode[key].map((childNode) => childNode.uid);\n// }\n// });\n\n// return assign({[node.uid]: newNode}, ...(toNormalizeChildren.map((childNode) => {\n// return normalizeDocNodeWithAncestorUids(childNode, concat(ancestorUids, node.uid));\n// })));\n// }\n\nexport function denormalizeDocNode(nodesObject, rootNodeUid, ancestorUids = []) {\n if (ancestorUids.includes(rootNodeUid)) {\n console.log(`Error: circular node nesting of node with UID: ${rootNodeUid}`);\n return null;\n }\n\n const newNode = nodesObject[rootNodeUid] && {...nodesObject[rootNodeUid]};\n\n if (!newNode) {\n console.log(`Error: no node with UID: ${rootNodeUid}`);\n return null;\n }\n\n const toDenormalizeKeys = nodeBlockContentKeys(newNode);\n\n toDenormalizeKeys.forEach((key) => {\n if (newNode[key]) {\n newNode[key] = newNode[key].map((childNodeUid) => {\n return denormalizeDocNode(nodesObject, childNodeUid, [...ancestorUids, rootNodeUid]);\n });\n }\n });\n\n return newNode;\n}\n\n\nexport function nodeBlockContentKeys<T>(node: DocBlockNode<T>) {\n switch (node.type) {\n case \"section\":\n return [\"content\", \"diagnoses\", \"findings\", \"notes\", \"feedback\", \"cdqFeatures\"];\n case \"regularList\":\n case \"numberedList\":\n case \"multipleChoice\":\n case \"cdqQuestion\":\n case \"tableCell\":\n case \"learningObjectivesList\":\n return [\"content\"];\n case \"table\":\n return [\"content\", \"rows\"];\n case \"tableRow\":\n return [\"content\", \"cells\"];\n case \"imageGallery\":\n return [\"images\"];\n case \"categoryMatcher\":\n return [\"contentCategories\", \"contentItems\"];\n case \"listItem\":\n return !isObject(node.content) || isRangeInlineJSON(node.content as any) ? [] : [\"content\"]; // TODO: Remove any\n default:\n return [];\n }\n}\n\nexport function nodeInlineContentKeys<T>(node: DocBlockNode<T>) {\n switch (node.type) {\n case \"section\":\n case \"image\":\n case \"video\":\n case \"audio\":\n case \"button\":\n return [\"title\"];\n case \"paragraph\":\n case \"multipleChoiceAnswer\":\n case \"checkbox\":\n case \"matchItem\":\n case \"cdqQuestionAnswer\":\n case \"cdqFeature\":\n case \"learningObjective\":\n return [\"content\"];\n case \"listItem\":\n return !isObject(node.content) || isRangeInlineJSON(node.content as any) ? [\"content\"] : []; // TODO: Remove any\n default:\n return [];\n }\n}\n\nexport function nodeInlineInFlowContentKeys<T>(node: DocBlockNode<T>) {\n switch (node.type) {\n case \"paragraph\":\n return [\"content\"];\n case \"listItem\":\n return !isObject(node.content) || isRangeInlineJSON(node.content as any) ? [\"content\"] : []; // TODO: Remove any\n case \"section\":\n case \"image\":\n case \"video\":\n case \"audio\":\n case \"button\":\n case \"multipleChoiceAnswer\":\n case \"checkbox\":\n case \"matchItem\":\n case \"cdqQuestionAnswer\":\n default:\n return [];\n }\n}\n\nexport function nodeInlineNotFlowContentKeys<T>(node: DocBlockNode<T>) {\n switch (node.type) {\n case \"section\":\n case \"image\":\n case \"video\":\n case \"audio\":\n case \"button\":\n return [\"title\"];\n case \"multipleChoiceAnswer\":\n case \"checkbox\":\n case \"matchItem\":\n case \"cdqQuestionAnswer\":\n case \"cdqFeature\":\n case \"learningObjective\":\n return [\"content\"];\n case \"paragraph\":\n case \"listItem\":\n default:\n return [];\n }\n}\n\nexport function nodeAllContentKeys<T>(node: DocBlockNode<T>) {\n return nodeInlineContentKeys(node).concat(nodeBlockContentKeys(node));\n}\n\nexport function isNode<T>(node: any): node is DocBlockNode<T> {\n return isPlainObject(node) && node[\"type\"] && node[\"uid\"] && !node[\"change_id\"] && !node.is_change_summary;\n}\n\nexport function isNodeAtPath(doc: DocBlockNode<unknown>, nodePath: NodePath) {\n return isNode(findNodeAtPath(doc, nodePath));\n}\n\nexport function findDeepestLineagePathFromPath<T>(rootNode: DocBlockNode<T>, path, nodeTester: NodeTester) {\n const node = findAtPath(rootNode, path);\n if (isNode(node) && nodeTester(node)) {\n return path;\n } else if (path.length > 0) {\n return findDeepestLineagePathFromPath(rootNode, R.init(path), nodeTester);\n } else {\n return null;\n }\n}\n\n////////////////////////////////////////\n////////////////////////////////////////\n\n// findNode : NODE -> (NODE -> Bool) -> NODE\nexport function findNode<T>(rootNode: DocBlockNode<T>, nodeTester: NodeTester) {\n return deepFind(rootNode, (node) => isNode(node) && nodeTester(node));\n}\n\n// findNodeByUid : NODE -> UID -> NODE\nexport function findNodeByUid<T>(rootNode: DocBlockNode<T>, uid: UID) {\n return findNode(rootNode, (node) => node[\"uid\"] === uid);\n}\n\n//findNodes : NODE -> (NODE -> Bool) -> [NODE]\nexport function findNodes<T>(rootNode: DocBlockNode<T>, nodeTester: NodeTester) {\n return deepFindAll(rootNode, (node) => isNode(node) && nodeTester(node));\n}\n\n// findNodesByUids : NODE -> [UID] -> [NODE]\nexport function findNodesByUids<T>(rootNode: DocBlockNode<T>, uids: UID[]) {\n return findNodes(rootNode, (node) => uids.includes(node[\"uid\"]));\n}\n\nexport function findNodeLineage<T>(rootNode: DocBlockNode<T>, nodeTester: NodeTester) {\n return deepFindObjectPath(rootNode, (node) => isNode(node) && nodeTester(node));\n}\n\nexport function findNodeLineageByUid<T>(rootNode: DocBlockNode<T>, uid: UID) {\n return findNodeLineage(rootNode, (node) => node[\"uid\"] === uid);\n}\n\nexport function findNodesLineages<T>(rootNode: DocBlockNode<T>, nodeTester: NodeTester) {\n return deepFindAllObjectPaths(rootNode, (node) => isNode(node) && nodeTester(node));\n}\n\nexport function findNodeAncestors<T>(rootNode: DocBlockNode<T>, nodeTester: NodeTester) {\n return findNodeLineage(rootNode, nodeTester).slice(0,-1);\n}\n\nexport function findNodeAncestorsByUid<T>(rootNode: DocBlockNode<T>, uid: UID) {\n return findNodeAncestors(rootNode, (node) => node[\"uid\"] === uid);\n}\n\nexport function findNodeParent<T>(rootNode: DocBlockNode<T>, nodeTester: NodeTester) {\n const ancestors = findNodeAncestors(rootNode, nodeTester);\n return (ancestors && ancestors[ancestors.length - 1]);\n}\n\nexport function findNodeParentByUid<T>(rootNode: DocBlockNode<T>, uid: UID) {\n const ancestors = findNodeAncestorsByUid(rootNode, uid);\n return (ancestors && ancestors[ancestors.length - 1]);\n}\n\nexport function findNodeSiblingBeforeByPath<T>(rootNode: DocBlockNode<T>, nodePath: Array<any>) { // TODO: Remove any\n if (typeof R.last(nodePath) === \"number\" && R.last(nodePath) > 0) {\n const siblingPath = R.adjust(-1, R.dec, nodePath);\n return findNodeAtPath(rootNode, siblingPath);\n } else {\n return undefined;\n }\n}\n\nexport function findNodeSiblingBefore<T>(rootNode: DocBlockNode<T>, nodeTester: NodeTester) {\n const nodePath = findNodePath(rootNode, nodeTester);\n return findNodeSiblingBeforeByPath(rootNode, nodePath);\n}\n\nexport function findNodeSiblingAfterPathByPath<T>(rootNode: DocBlockNode<T>, nodePath) {\n if (typeof R.last(nodePath) === \"number\") {\n return R.adjust(-1, R.inc, nodePath);\n } else {\n return undefined;\n }\n}\n\nexport function findNodeSiblingAfterByPath<T>(rootNode: DocBlockNode<T>, path: NodePath) {\n const siblingPath = findNodeSiblingAfterPathByPath(rootNode, path);\n return siblingPath && findNodeAtPath(rootNode, siblingPath);\n}\n\nexport function findNodeSiblingAfter<T>(rootNode: DocBlockNode<T>, nodeTester: NodeTester) {\n const nodePath = findNodePath(rootNode, nodeTester);\n return findNodeSiblingAfterByPath(rootNode, nodePath);\n}\n\nexport function findNodePath<T>(rootNode: DocBlockNode<T>, nodeTester: NodeTester) {\n return deepFindPath(rootNode, (node) => isNode(node) && nodeTester(node));\n}\n\nexport function findNodePathByUid<T>(rootNode: DocBlockNode<T>, uid: UID) {\n return findNodePath(rootNode, (node) => node[\"uid\"] === uid);\n}\n\nexport function findNodesPaths<T>(rootNode: DocBlockNode<T>, nodeTester: NodeTester) {\n return deepFindAllPaths(rootNode, (node) => isNode(node) && nodeTester(node));\n}\n\nexport function findNodeAtPath<T>(rootNode: DocBlockNode<T>, path: NodePath) {\n return R.view(R.lensPath(path), rootNode);\n}\n\nfunction youngestNodePathFromPath<T>(rootNode: DocBlockNode<T>, path: NodePath) : NodePath | undefined {\n if (isNodeAtPath(rootNode, path)) {\n return path;\n } else {\n return path.length > 0 ? youngestNodePathFromPath(rootNode, R.init(path)) : undefined;\n }\n}\n\nexport function nodeParentPathFromPath<T>(rootNode: DocBlockNode<T>, path: NodePath) {\n return youngestNodePathFromPath(rootNode, R.init(path))\n}\n\nexport function nodeIndexFromPath<T>(rootNode: DocBlockNode<T>, path: NodePath) {\n const parentPath = nodeParentPathFromPath(rootNode, path);\n\n const possibleIndex = R.nth(-1, path);\n if (parentPath && parentPath.length + 2 === path.length && (typeof possibleIndex) === \"number\") {\n return possibleIndex;\n }\n\n return undefined;\n}\n\nexport function nodeContentKeyFromPath<T>(rootNode: DocBlockNode<T>, path: NodePath) {\n const parentPath = nodeParentPathFromPath(rootNode, path);\n\n if (parentPath) {\n if (parentPath.length + 2 === path.length && typeof R.nth(-2, path) === \"string\") {\n return R.nth(-2, path);\n } else if(parentPath.length + 1 === path.length && typeof R.nth(-1, path) === \"string\") {\n return R.nth(-1, path);\n }\n }\n\n return undefined;\n}\n\nexport function nodePathToUnfilteredLineagePaths<T>(doc: DocBlockNode<T>, nodePath: NodePath) {\n return R.repeat(nodePath, nodePath.length + 1).map((nodePath, index) => R.take(index, nodePath));\n}\n\nexport function nodePathToLineagePaths<T>(doc: DocBlockNode<T>, nodePath: NodePath) {\n const unfilteredLineagePaths = nodePathToUnfilteredLineagePaths(doc, nodePath);\n return unfilteredLineagePaths.filter((path) => isNodeAtPath(doc, path));\n}\n\nexport function nodePathToAncestorPaths<T>(doc: DocBlockNode<T>, nodePath: NodePath) {\n return R.init(nodePathToLineagePaths(doc, nodePath));\n}\n\n////////////////////////////////////////\n////////////////////////////////////////\n\nexport function insertAtPath<T>(rootNode: DocBlockNode<T>, newNode: DocBlockNode<T>, indexPath: NodePath) {\n return insertAllAtPath(rootNode, [newNode], indexPath);\n}\n\nexport function insertAllAtPath<T>(rootNode: DocBlockNode<T>, newNodes: DocBlockNode<T>[], indexPath: NodePath) {\n const arrayPath = R.init(indexPath);\n const index: any = R.last(indexPath); // TODO: Remove any\n\n const arrayLens = R.lensPath(arrayPath);\n\n return R.over(arrayLens, R.insertAll(index, newNodes), rootNode);\n}\n\nexport function deleteAtPath<T>(rootNode: DocBlockNode<T>, nodePath: NodePath) {\n const arrayPath = R.init(nodePath);\n const index: any = R.last(nodePath); // TODO: Remove any\n\n const arrayLens = R.lensPath(arrayPath);\n\n return R.over(arrayLens, R.remove(index, 1), rootNode);\n}\n\nexport function replaceAtPath<T>(rootNode: DocBlockNode<T>, newNode: DocBlockNode<T>, nodePath: NodePath) {\n const arrayPath = R.init(nodePath);\n const index: any = R.last(nodePath); // TODO: Remove any\n\n const arrayLens = R.lensPath(arrayPath);\n\n return R.over(arrayLens, R.adjust(index, R.always(newNode)), rootNode);\n}\n\nexport function moveAtPathToPath<T>(rootNode: DocBlockNode<T>, oldPath: NodePath, newPath: NodePath) {\n const node = findAtPath(rootNode, oldPath);\n\n return R.pipe(\n R.curry(deleteAtPath(R.__ as any, oldPath)), // TODO: Remove any\n R.curry(insertAtPath(R.__ as any, node, newPath)), // TODO: Remove any\n )(rootNode);\n}\n\nexport function setAtPath<T>(rootNode: DocBlockNode<T>, nodePath: NodePath, value) {\n return overAtPath(rootNode, nodePath, R.always(value));\n}\n\nexport function overAtPath<T>(rootNode: DocBlockNode<T>, nodePath: NodePath, func) {\n return R.over(R.lensPath(nodePath), func, rootNode);\n}\n\n////////////////////////////////////////\n////////////////////////////////////////\n\n// export function addNodesAtUidKeyIndex(rootNode, newNodes, uid, contentKey, index) {\n// const parentPath = findNodePathByUid(rootNode, uid);\n\n// return insertAllAtPath(rootNode, newNodes, [...parentPath, contentKey, index]);\n// }\n\n// export function addNodeAtUidKeyIndex(rootNode, newNode, uid, contentKey, index) {\n// return addNodesAtUidKeyIndex(rootNode, [newNode], uid, contentKey, index);\n// }\n\n// export function addNodesAfterUid(rootNode, newNodes, uid) {\n// const siblingPath = findNodePathByUid(rootNode, uid);\n// const afterSiblingPath = R.adjust(-1, R.inc, siblingPath);\n\n// return insertAllAtPath(rootNode, newNodes, afterSiblingPath);\n// }\n\n// export function addNodeAfterUid(rootNode, newNode, uid) {\n// return addNodesAfterUid(rootNode, [newNode], uid);\n// }\n\n// export function addNodesBeforeUid(rootNode, newNodes, uid) {\n// const siblingPath = findNodePathByUid(rootNode, uid);\n\n// return insertAllAtPath(rootNode, newNodes, siblingPath);\n// }\n\n// export function addNodeBeforeUid(rootNode, newNode, uid) {\n// return addNodesBeforeUid(rootNode, [newNode], uid);\n// }\n\n// export function deleteNodeWithUID(rootNode, uid) {\n// return deleteAtPath(rootNode, findNodePathByUid(rootNode, uid));\n// }\n\n// export function replaceNodeWithUID(rootNode, newNode, uid) {\n// return replaceAtPath(rootNode, newNode, findNodePathByUid(rootNode, uid));\n// }\n\n// export function replaceNodeWithUIDChildren(rootNode, nodes, uid, contentKey) {\n// const parentPath = findNodePathByUid(rootNode, uid);\n\n// const arrayPath = [...parentPath, contentKey];\n// const arrayLens = R.lensPath(arrayPath);\n\n// return R.set(arrayLens, nodes, rootNode);\n// }\n\n// export function moveNodeWithUIDToIndex(rootNode, moveUid, newParentUid, contentKey, index) {\n// const oldPath = findNodePathByUid(rootNode, moveUid);\n// const newParentPath = findNodePathByUid(rootNode, newParentUid);\n// const newPath = [...newParentPath, contentKey, index];\n\n// return moveAtPathToPath(rootNode, oldPath, newPath);\n// }\n\nexport function editNodeWithUIDKeyValueWithFunction<T>(rootNode: DocBlockNode<T>, uid: UID, key: ContentKey, func) {\n const nodePath = findNodePathByUid(rootNode, uid);\n\n return nodePath ? R.over(R.lensPath([...nodePath, key]), func, rootNode) : rootNode;\n}\n\nexport function editNodeWithUIDKeyValue<T>(rootNode: DocBlockNode<T>, uid: UID, key: ContentKey, value) {\n return editNodeWithUIDKeyValueWithFunction(rootNode, uid, key, R.always(value));\n}\n\nexport function editNodeWithUIDKeysValues<T>(rootNode: DocBlockNode<T>, uid: UID, updates: {}) { // TODO: Remove {}\n const nodePath = findNodePathByUid(rootNode, uid);\n const nodeLens = R.lensPath(nodePath);\n\n return R.over(nodeLens, R.mergeLeft(updates), rootNode);\n}\n\nexport function arePathsSameLineage(pathA: NodePath, pathB: NodePath) {\n return R.zip(pathA, pathB).every(([a, b]) => a === b);\n}\n\n////////////////////////////////////////\n////////////////////////////////////////\n\nfunction docReduceWithCallbackForKey<T, Acc>(node: DocBlockNode<T>, callback: (a: Acc, n: DocBlockNode<T>) => Acc, accum: Acc, keyCallback: (n: DocBlockNode<T>) => string[]) {\n const newAccum = callback(accum, node);\n\n const toReduceKeys = keyCallback(node);\n\n const toReduceChildren = flatten(toReduceKeys.map((key) => {\n return node[key] || [];\n }));\n\n return reduce(toReduceChildren, (childAccum, childNode) => docReduceWithCallbackForKey(childNode, callback, childAccum, keyCallback), newAccum);\n}\n\nexport function docReduceAllNodes<T, Acc>(node: DocBlockNode<T>, callback: (a: Acc, n: DocBlockNode<T>) => Acc, accum: Acc) {\n return docReduceWithCallbackForKey(node, callback, accum, nodeAllContentKeys);\n}\n\nexport function docReduceBlockNodes<T, Acc>(node: DocBlockNode<T>, callback: (a: Acc, n: DocBlockNode<T>) => Acc, accum: Acc) {\n return docReduceWithCallbackForKey(node, callback, accum, nodeBlockContentKeys);\n}\n\nexport function docReduceInlineNodes<T, Acc>(node: DocBlockNode<T>, callback: (a: Acc, n: DocBlockNode<T>) => Acc, accum: Acc) {\n return docReduceWithCallbackForKey(node, callback, accum, nodeInlineContentKeys);\n}\n\nexport function docMapAllNodes<T>(node: DocBlockNode<T>, callback: (n: DocBlockNode<T>) => DocBlockNode<T>) {\n const newNode = callback(node);\n\n const contentKeys = nodeAllContentKeys(newNode);\n\n contentKeys.forEach((contentKey) => {\n if (newNode[contentKey]) {\n if (Array.isArray(newNode[contentKey])) {\n newNode[contentKey] = newNode[contentKey].map((childNode) => docMapAllNodes(childNode, callback));\n } else if (newNode[contentKey] instanceof Object) {\n newNode[contentKey] = callback(newNode[contentKey]);\n }\n }\n });\n\n return newNode;\n}\n\nexport function docMapInlineNodes<T extends DocBlockNode<U>, U>(node: T, callback) {\n const newNode = {...node};\n\n const blockContentKeys = nodeBlockContentKeys(newNode);\n\n blockContentKeys.forEach((contentKey) => {\n if (newNode[contentKey]) {\n newNode[contentKey] = newNode[contentKey].map((childNode) => docMapInlineNodes(childNode, callback));\n }\n });\n\n const inlineContentKeys = nodeInlineContentKeys(newNode);\n\n inlineContentKeys.forEach((contentKey) => {\n if (newNode[contentKey]) {\n if (Array.isArray(newNode[contentKey])) {\n newNode[contentKey] = newNode[contentKey].map((childNode) => docMapAllNodes(childNode, callback));\n } else {\n newNode[contentKey] = callback(newNode[contentKey]);\n }\n }\n });\n\n return newNode;\n}\n\nexport function docMapBlockNodes<T extends DocBlockNode<U>, U>(node: T, callback: (oldNode: T) => T) {\n const newNode = callback(node);\n\n const contentKeys = nodeBlockContentKeys(newNode);\n\n contentKeys.forEach((contentKey) => {\n if (newNode[contentKey]) {\n newNode[contentKey] = newNode[contentKey].map((childNode) => docMapBlockNodes(childNode, callback));\n }\n });\n\n return newNode;\n}\n\nexport function addMissingUids(node) {\n let newNode = node;\n const toAddUidsTo = node.content || node.rows || node.cells;\n if (Array.isArray(toAddUidsTo)) {\n const newChildren = toAddUidsTo.map((childNode) => {\n return (addMissingUids(childNode));\n });\n\n if (newChildren.length > 0) {\n switch (node.type) {\n case \"table\":\n newNode = Object.assign({}, node, {rows: newChildren});\n break;\n case \"tableRow\":\n newNode = Object.assign({}, node, {cells: newChildren});\n break;\n case \"listItem\":\n default:\n newNode = Object.assign({}, node, {content: newChildren});\n break;\n }\n }\n }\n\n if (newNode.uid === undefined) {\n newNode = Object.assign({}, newNode, {uid: generateUUID()});\n }\n\n return (newNode);\n}\n\n////////////////////////////////////////\n////////////////////////////////////////\n\nexport function replaceAllUIDs<T>(node: DocBlockNode<T>) {\n const clonedNode = R.clone(node);\n\n findNodes(clonedNode, node => !!node.uid).forEach((nodeToChange) => {\n nodeToChange.uid = generateUUID();\n nodeToChange.changes = [];\n nodeToChange.changeSummaries = [];\n });\n\n return clonedNode;\n}\n\n////////////////////////////////////////\n////////////////////////////////////////\n\nexport function adjustSelectionStartToIncludeListItemIfNeeded<T>(doc: DocBlockNode<T>, selection: DocSelection) {\n if (selection.start.contentKey !== \"content\" || selection.start.index !== 0) {\n return selection;\n }\n\n const startPath = findNodePathByUid(doc, selection.start.uid);\n if (!startPath) {\n return selection;\n }\n\n const beforeSibling = findNodeSiblingBeforeByPath(doc, startPath);\n if (!beforeSibling || beforeSibling.type !== \"listItem\") {\n return selection;\n }\n\n return (\n {\n ...selection,\n start: {\n uid: beforeSibling.uid,\n contentKey: \"content\",\n index: 0,\n }\n }\n )\n}\n\n////////////////////////////////////////\n////////////////////////////////////////\n\n// function forEachBlockNode<T extends DocBlockNode>(node: T, fn: ) {\n// return node\n// }\n// function mapBlockNode(node, fn) {}\n// function reduceBlockNode(node, fn) {}\n// function forEachDeepBlockNode(node, fn) {}\n// function mapDeepBlockNode(node, fn) {}\n// function reduceDeepBlockNode(node, fn) {}\n\n// function forEachInlineNode(node, fn) {}\n// function mapInlineNode(node, fn) {}\n// function reduceInlineNode(node, fn) {}\n// function forEachDeepInlineNode(node, fn) {}\n// function mapDeepInlineNode(node, fn) {}\n// function reduceDeepInlineNode(node, fn) {}\n","import {\n cloneDeep,\n times,\n} from \"lodash\";\n\nimport * as R from \"ramda\";\n\nimport { DTRef } from \"../Define/base\";\n\nimport {\n nodeDefinitions,\n} from \"../Define/base\";\n\nexport function generateTableRowWithNTableCells(cellCount: number) {\n const rowDefinition = cloneDeep(nodeDefinitions[\"tableRow\"]);\n rowDefinition.objectModel.cells.initWith(times(cellCount, () => DTRef(\"tableCell\").init));\n return rowDefinition.generate(nodeDefinitions, {});\n}\n\nexport function generateNTableCells(cellCount: number) {\n const cellDefinition = cloneDeep(nodeDefinitions[\"tableCell\"]);\n return times(cellCount, () => cellDefinition.generate(nodeDefinitions, {}));\n}\n\nexport function generateTableCell() {\n const cellDefinition = cloneDeep(nodeDefinitions[\"tableCell\"]);\n return cellDefinition.generate(nodeDefinitions, {})\n}\n\nfunction anyRowOrColumnMultiSpan(table: DocTableType<unknown>) {\n return table.rows.some(row =>\n row.cells.some(cell =>\n (cell.columnSpan && cell.columnSpan !== 1) || (cell.rowSpan && cell.rowSpan !== 1)\n )\n )\n}\n\nfunction allRowsHaveSameNumberOfCells(table: DocTableType<unknown>) {\n return R.uniq(table.rows.map(row => row.cells.length)).length === 1\n}\n\nfunction getColumnCount(table: DocTableType<unknown>) {\n return R.sum(table.rows[0].cells.map(cell => cell.columnSpan || 1))\n}\n\nfunction getRowCount(table: DocTableType<unknown>) {\n const firstOfEachColumn = table.rows.map(row => row.cells[0])\n const reduceResult = firstOfEachColumn.reduce(\n (prev, cell) => {\n if (prev.cellsToSkip > 0) {\n return {\n rowCount: prev.rowCount,\n cellsToSkip: prev.cellsToSkip - 1,\n }\n } else {\n const rowCount = cell.rowSpan || 1\n\n return {\n rowCount: prev.rowCount + rowCount,\n cellsToSkip: rowCount - 1,\n }\n }\n\n },\n {cellsToSkip: 0, rowCount: 0}\n )\n\n return reduceResult.rowCount\n}\n\nfunction inASpan(columnIndex: number, rowIndex: number, span: DocTableSpan) {\n return (\n ((columnIndex >= span.columnIndex) && (columnIndex < span.columnIndex + span.columnSpan)) &&\n ((rowIndex >= span.rowIndex) && (rowIndex < span.rowIndex + span.rowSpan))\n )\n}\n\nexport function addMissingCellsToTable<T>(table: DocTableType<T>) {\n if(anyRowOrColumnMultiSpan(table)) {\n if (!allRowsHaveSameNumberOfCells(table)) {\n const rowCount = getRowCount(table)\n const columnCount = getColumnCount(table)\n\n const spansToSearch: Array<DocTableSpan> = []\n\n R.range(0, rowCount).forEach(rowIndex => {\n if (!table.rows[rowIndex]) {\n const newRow = generateTableRowWithNTableCells(0)\n table = R.over(R.lensPath([\"rows\"]), R.insert(rowIndex, newRow), table)\n }\n\n R.range(0, columnCount).forEach(columnIndex => {\n if (spansToSearch.some(span => inASpan(columnIndex, rowIndex, span))) {\n const newCell = generateTableCell()\n table = R.over(R.lensPath([\"rows\", rowIndex, \"cells\"]), R.insert(columnIndex, newCell), table)\n } else {\n const cell = table.rows[rowIndex].cells[columnIndex]\n\n const columnSpan = cell.columnSpan || 1\n const rowSpan = cell.rowSpan || 1\n\n if (columnSpan !== 1 || rowSpan !== 1) {\n spansToSearch.push({\n rowIndex: rowIndex,\n rowSpan: rowSpan,\n columnIndex: columnIndex,\n columnSpan: columnSpan,\n })\n }\n }\n })\n })\n }\n }\n\n return table;\n}\n","import * as _ from \"lodash\";\nimport * as R from \"ramda\";\nimport memoize from \"memoize-weak\";\n\nimport generateUUID from \"../../helpers/generateUUID\";\n\nimport {\n deepFindAllPaths,\n deepFindAll,\n deepFindPath,\n findAtPath,\n setAtPath,\n overAtPath,\n deleteAtPath,\n insertAtPath,\n normalizeDocNode,\n nodeBlockContentKeys,\n nodeInlineContentKeys,\n findNodePathByUid,\n findNodeAtPath,\n editNodeWithUIDKeyValueWithFunction,\n filterPathsByFunction,\n moveAtPathToPath,\n findDeepestLineagePathFromPath,\n arePathsSameLineage,\n findNodeByUid,\n isNode,\n nodeInlineNotFlowContentKeys,\n findNodeParentByUid,\n nodeContentKeyFromPath,\n nodeIndexFromPath,\n nodeParentPathFromPath,\n docMapAllNodes,\n} from \"./Functions/base\";\n\nimport {\n generateTableRowWithNTableCells,\n generateTableCell,\n addMissingCellsToTable,\n} from \"./Functions/table\";\n\nimport {\n rangesDoTouch,\n rangeLength,\n rangesUnion,\n rangesExcept,\n rangesIntersection,\n shiftRange,\n isRangeCollapsed,\n splitAndShiftRangeAtIndexByValue,\n extendRangeAtIndexByValue,\n deleteRangeAtIndexByValue,\n} from \"./Functions/Range\";\n\nimport { convertAllInlineNodesToRangeJSON } from \"./Convert/RangeInlineJSON\";\n\nimport {\n NEW_COMMENT_THREAD,\n EDIT_COMMENT,\n} from \"./menu\"\n\nimport * as MenuTypes from \"./menu\"\n\nexport const changesDisplayModes = {\n ONLY_PUBLISHED: \"ONLY_PUBLISHED\",\n HIDE_SUGGESTIONS: \"HIDE_SUGGESTIONS\",\n HIGHLIGHT_SUGGESTIONS: \"HIGHLIGHT_SUGGESTIONS\",\n HIGHLIGHT_ALL_CHANGES: \"HIGHLIGHT_ALL_CHANGES\",\n} as const;\n\nexport function isChangesDisplayMode(str: string): str is ChangesDisplayMode {\n return !!Object.values(changesDisplayModes).find((displayMode) => str === displayMode)\n}\n\nexport const decisionTypes = {\n ACCEPTED: \"ACCEPTED\",\n REJECTED: \"REJECTED\",\n};\n\n// Change Types\nexport const CHANGE_TEXT_AND_NODES = \"CHANGE_TEXT_AND_NODES\";\nexport const MOVE_NODE = \"MOVE_NODE\";\nexport const SET_KEYS_VALUES = \"SET_KEYS_VALUES\";\nexport const ADD_STYLE = \"ADD_STYLE\";\nexport const DELETE_STYLE = \"DELETE_STYLE\";\nexport const ADD_TABLE_ROW = \"ADD_TABLE_ROW\";\nexport const DELETE_TABLE_ROW = \"DELETE_TABLE_ROW\";\nexport const ADD_TABLE_COLUMN = \"ADD_TABLE_COLUMN\";\nexport const DELETE_TABLE_COLUMN = \"DELETE_TABLE_COLUMN\";\nexport const MERGE_TABLE_CELLS = \"MERGE_TABLE_CELLS\";\nexport const UNMERGE_TABLE_CELLS = \"UNMERGE_TABLE_CELLS\";\nexport const ACCEPT_CHANGES = \"ACCEPT_CHANGES\";\nexport const REJECT_CHANGES = \"REJECT_CHANGES\";\nexport const PUBLISH = \"PUBLISH\";\nexport const ADD_COMMENT_THREAD = \"ADD_COMMENT_THREAD\";\nexport const CLOSE_COMMENT_THREAD = \"CLOSE_COMMENT_THREAD\";\nexport const ADD_CHANGE_COMMENT = \"ADD_CHANGE_COMMENT\";\nexport const DELETE_CHANGE_COMMENT = \"DELETE_CHANGE_COMMENT\";\nexport const ADD_SUMMARY_OF_EDIT = \"ADD_SUMMARY_OF_EDIT\";\nexport const DELETE_SUMMARY_OF_EDIT = \"DELETE_SUMMARY_OF_EDIT\";\nexport const ADD_STUDENT_FEEDBACK = \"ADD_STUDENT_FEEDBACK\";\nexport const DELETE_STUDENT_FEEDBACK = \"DELETE_STUDENT_FEEDBACK\";\n\n// FAKE CHANGES\nexport const ADD_NODE = \"ADD_NODE\";\nexport const ADD_TEXT_AND_NODES_BEFORE_NODE = \"ADD_TEXT_AND_NODES_BEFORE_NODE\";\nexport const ADD_TEXT_AND_NODES_TO_NODE = \"ADD_TEXT_AND_NODES_TO_NODE\";\nexport const DELETE_NODE = \"DELETE_NODE\";\nexport const MOVE_NODE_UP = \"MOVE_NODE_UP\";\nexport const MOVE_NODE_DOWN = \"MOVE_NODE_DOWN\";\n\nexport const ADD_CONTENT = \"ADD_CONTENT\";\nexport const DELETE_CONTENT = \"DELETE_CONTENT\";\n\n// Change Summary Types\nexport const ADDED_NODE = \"ADDED_NODE\";\nexport const DELETED_NODE = \"DELETED_NODE\";\nexport const CHANGED_TEXT_AND_NODES = \"CHANGED_TEXT_AND_NODES\";\nexport const MOVED_NODE = \"MOVED_NODE\";\nexport const CHANGED_KEYS_VALUES = \"CHANGED_KEYS_VALUES\";\nexport const CHANGED_UID = \"CHANGED_UID\";\nexport const CHANGED_TEXT = \"CHANGED_TEXT\";\nexport const ADDED_TEXT = \"ADDED_TEXT\";\nexport const DELETED_TEXT = \"DELETED_TEXT\";\nexport const ADDED_STYLE = \"ADDED_STYLE\";\nexport const DELETED_STYLE = \"DELETED_STYLE\";\nexport const ADDED_TABLE_ROW = \"ADDED_TABLE_ROW\";\nexport const DELETED_TABLE_ROW = \"DELETED_TABLE_ROW\";\nexport const ADDED_TABLE_COLUMN = \"ADDED_TABLE_COLUMN\";\nexport const DELETED_TABLE_COLUMN = \"DELETED_TABLE_COLUMN\";\nexport const MERGED_TABLE_CELLS = \"MERGED_TABLE_CELLS\";\nexport const UNMERGED_TABLE_CELLS = \"UNMERGED_TABLE_CELLS\";\nexport const OPENED_INLINE_COMMENT_THREAD = \"OPENED_INLINE_COMMENT_THREAD\";\nexport const OPENED_NODE_COMMENT_THREAD = \"OPENED_NODE_COMMENT_THREAD\";\n\nexport const HIDE_TEXT = \"HIDE_TEXT\";\n\nexport function addChangeToDoc(doc, change) {\n // console.log(\"CHANGE\", change);\n\n if (change.selection) {\n const translatedRange = translateSelectionToFlowRange(doc, change.selection);\n\n if (translatedRange) {\n // console.log(\"translatedRange\", translatedRange)\n change = R.dissoc('selection', change)\n change.uid = translatedRange.uid;\n change.key = translatedRange.contentKey;\n change.range = translatedRange.range;\n } else {\n console.log(\"ERROR: COULD NOT TRANSLATE SELECTION TO FLOW RANGE\")\n return doc;\n }\n }\n\n switch (change.type) {\n case CHANGE_TEXT_AND_NODES:\n return addChangeTextAndNodesChange(doc, change);\n case ADD_NODE:\n return addAddNodeChange(doc, change);\n case ADD_TEXT_AND_NODES_BEFORE_NODE:\n return addAddTextAndNodesBeforeNodeChange(doc, change);\n case ADD_TEXT_AND_NODES_TO_NODE:\n return addAddTextAndNodesToNodeChange(doc, change);\n case DELETE_NODE:\n return addDeleteNodeChange(doc, change);\n case MOVE_NODE:\n return addMoveNodeChange(doc, change);\n case MOVE_NODE_UP:\n return addMoveNodeUpChange(doc, change);\n case MOVE_NODE_DOWN:\n return addMoveNodeDownChange(doc, change);\n case SET_KEYS_VALUES:\n return addSetKeyValuesChange(doc, change);\n case ADD_STYLE:\n case DELETE_STYLE:\n return addStyleChange(doc, change);\n case ADD_TABLE_ROW:\n return addAddTableRowChangeToNodeWithUID(doc, change);\n case DELETE_TABLE_ROW:\n return addDeleteTableRowChangeToNodeWithUID(doc, change);\n case ADD_TABLE_COLUMN:\n return addAddTableColumnChange(doc, change);\n case DELETE_TABLE_COLUMN:\n return addDeleteTableColumnChange(doc, change);\n case MERGE_TABLE_CELLS:\n case UNMERGE_TABLE_CELLS:\n return addTableCellSpanChangeToNodeWithUID(doc, change);\n case ACCEPT_CHANGES:\n const acceptChangePaths = findAllChangePathsByChangeId(doc, change.accept_change_id);\n doc = acceptChangePaths.reduce((reduceDoc, changePath) => markChangeAtPathAccepted(reduceDoc, changePath, change), doc);\n\n // For any move/delete\n // Remove old moveSummary?\n\n return doc;\n case REJECT_CHANGES:\n const rejectChangePaths = findAllChangePathsByChangeId(doc, change.reject_change_id);\n doc = rejectChangePaths.reduce((reduceDoc, changePath) => markChangeAtPathRejected(reduceDoc, changePath, change), doc);\n\n // For any move/delete\n // Remove old moveSummary?\n\n return doc;\n case PUBLISH:\n const changePaths = findAllPublishableChangePaths(doc);\n doc = changePaths.reduce((reduceDoc, changePath) => markChangeAtPathPublished(reduceDoc, changePath, change), doc);\n\n // Clean out all old published changes and stuff\n\n return doc;\n case ADD_COMMENT_THREAD:\n return addAddCommentThread(doc, change);\n case CLOSE_COMMENT_THREAD:\n return deleteChangeWithID(doc, change);\n case ADD_CHANGE_COMMENT:\n return addCommentToChangeWithID(doc, change.parent_change_id, change);\n case DELETE_CHANGE_COMMENT:\n return deleteCommentWithID(doc, change.comment_id, change);\n case ADD_SUMMARY_OF_EDIT:\n return addSummaryOfEditChange(doc, change);\n case DELETE_SUMMARY_OF_EDIT:\n return deleteSummaryOfEditChange(doc, change);\n case ADD_STUDENT_FEEDBACK:\n return addStudentFeedbackChange(doc, change);\n case DELETE_STUDENT_FEEDBACK:\n return deleteStudentFeedbackChange(doc, change);\n }\n}\n\n\n///////////////////////////////////////\n///////////////////////////////////////\n///////////////////////////////////////\n\nexport const weakMemoizedApplyAllChanges = memoize(applyAllChanges);\nexport function applyAllChanges(node, changesDisplayMode, editIndex = 0) {\n if (isMoveSummary(node) || !isRelevantNode(node, changesDisplayMode)) { return null; }\n\n node = applyEditIndexToNode(node, editIndex);\n node = applyInlineChangesToNode(node, changesDisplayMode);\n node = applyKeyValueChangesToNode(node, changesDisplayMode);\n node = applyTableChangesToNode(node, changesDisplayMode);\n node = applyBlockChangeHighlightsToNode(node, changesDisplayMode);\n\n // TODO MOVE NODES TO CORRECT PLACE\n if ([\"section\", \"tableCell\"].includes(node.type)) {\n // TODO ADD CORRECT EDIT INDEX\n node = applyListIndentKeyValueChangesToChildren(node, changesDisplayMode);\n\n node = {\n ...node,\n content: flatFlowToTreeFlow(node.content, node.contentListNodes, changesDisplayMode)\n }\n }\n\n node = applyAllChangesToChildren(node, changesDisplayMode);\n\n return node;\n}\n\n// Create a new Map({})\nfunction mergeChangeMaps(map1, map2) {\n for (const [key, value] of map2) {\n if (map1.get(key)) {\n map1.set(key, map1.get(key).concat(value));\n } else {\n map1.set(key, value);\n }\n }\n\n return map1;\n}\n\nfunction addChangeToChangeMap(changeMap, change) {\n if (changeMap.get(change.change_id)) {\n changeMap.get(change.change_id).push(change);\n } else {\n changeMap.set(change.change_id, [change]);\n }\n}\n\nexport const weakMemoizedCollectAllSuggestionChanges = memoize(collectAllSuggestionChanges);\nfunction collectAllSuggestionChanges(node, variantId=undefined) {\n const newChangeMap = new Map();\n\n const newVariantId = node.variantId || variantId\n\n mergeChangeMaps(newChangeMap, collectSuggestionAddDeleteChanges(node, newVariantId));\n mergeChangeMaps(newChangeMap, collectSuggestionKeyValueChanges(node, newVariantId));\n mergeChangeMaps(newChangeMap, collectSuggestionInlineChanges(node, newVariantId));\n mergeChangeMaps(newChangeMap, collectSuggestionTableChanges(node, newVariantId));\n mergeChangeMaps(newChangeMap, collectSuggestionBlockChanges(node, newVariantId));\n\n return newChangeMap;\n}\n\nfunction collectSuggestionBlockChanges(node, variantId=undefined) {\n const newChangeMap = new Map();\n\n nodeBlockContentKeys(node).forEach((nodeKey) => {\n if (node[nodeKey]) {\n node[nodeKey].forEach(blockNode => {\n mergeChangeMaps(newChangeMap, weakMemoizedCollectAllSuggestionChanges(blockNode, variantId));\n })\n }\n })\n\n return newChangeMap;\n}\n\nfunction collectSuggestionAddDeleteChanges(node, variantId=undefined) {\n const newChangeMap = new Map();\n\n const allChanges = node.addDeleteChanges || [];\n let suggestionChanges = allChanges.filter((change) => isOpenSuggestionChange(change));\n\n if (suggestionChanges[0] && suggestionChanges[0].uid !== node.uid) {\n suggestionChanges = suggestionChanges.map(change => {\n return {\n ...change,\n uid: node.uid,\n changeNodeType: node.type\n }\n })\n }\n\n if (variantId) {\n suggestionChanges = suggestionChanges.map(change => {\n return {\n ...change,\n variantId: variantId,\n }\n })\n }\n\n suggestionChanges.forEach(change => {\n addChangeToChangeMap(newChangeMap, change);\n })\n\n return newChangeMap;\n}\n\nfunction collectSuggestionKeyValueChanges(node, variantId=undefined) {\n const newChangeMap = new Map();\n\n const allChanges = node.key_value_changes || [];\n let suggestionChanges = allChanges.filter((change) => isOpenSuggestionChange(change));\n\n if (variantId) {\n suggestionChanges = suggestionChanges.map(change => {\n return {\n ...change,\n variantId: variantId,\n }\n })\n }\n\n suggestionChanges.forEach(change => {\n addChangeToChangeMap(newChangeMap, change);\n });\n\n return newChangeMap;\n}\n\nfunction collectSuggestionInlineChanges(node, variantId=undefined) {\n const newChangeMap = new Map();\n\n nodeInlineContentKeys(node).forEach((nodeKey) => {\n if (node[nodeKey]) {\n const allChanges = [\n ...node[nodeKey].addDeleteChanges || [],\n ...node[nodeKey].styleChanges || [],\n ...node[nodeKey].commentThreadChanges || [],\n ]\n\n let suggestionChanges = allChanges.filter((change) => isOpenSuggestionChange(change));\n\n if (suggestionChanges[0]) {\n suggestionChanges = suggestionChanges.map(change => {\n return {\n text: node[nodeKey].text.slice(change.range.start, change.range.end),\n ...change,\n uid: node.uid,\n key: nodeKey,\n }\n })\n }\n\n if (variantId) {\n suggestionChanges = suggestionChanges.map(change => {\n return {\n ...change,\n variantId: variantId,\n }\n })\n }\n\n suggestionChanges.forEach(change => {\n addChangeToChangeMap(newChangeMap, change);\n })\n }\n })\n\n return newChangeMap;\n}\n\nfunction collectSuggestionTableChanges(node, variantId=undefined) {\n const {\n rowChanges = [],\n columnChanges = [],\n cellSpanChanges = [],\n } = node\n\n const newChangeMap = new Map();\n\n const allTableChanges = [\n ...R.flatten(rowChanges),\n ...R.flatten(columnChanges),\n ...cellSpanChanges\n ]\n\n allTableChanges.forEach(change => {\n if (isOpenSuggestionChange(change)) {\n change = {\n ...change,\n uid: change.table_uid\n };\n\n if (variantId) {\n change = {\n ...change,\n variantId: variantId,\n }\n }\n\n addChangeToChangeMap(newChangeMap, change);\n }\n });\n\n return newChangeMap;\n}\n\nfunction applyEditIndexToNode(node, editIndex) {\n return R.assoc(\"editIndex\", editIndex, node);\n}\n\nfunction applyInlineChangesToNode(node, changesDisplayMode) {\n return nodeInlineContentKeys(node).reduce((node, nodeKey) => {\n return R.when(\n R.has(nodeKey),\n R.over(R.lensProp(nodeKey), (rangeInlineJSON) => applyInlineChangesToRangeInlineJson(rangeInlineJSON, changesDisplayMode)),\n node,\n );\n }, node);\n}\n\nfunction applyKeyValueChangesToNode(node, changesDisplayMode) {\n return filterRelevantChanges(node.key_value_changes || [], changesDisplayMode).reduce((node, kvChange) => {\n return {...node, ...kvChange.keys_and_values};\n }, node);\n}\n\nfunction applyListIndentKeyValueChangesToChildren(node, changesDisplayMode) {\n return nodeBlockContentKeys(node).reduce((node, nodeKey) => {\n return R.when(\n R.has(nodeKey),\n R.over(\n R.lensProp(nodeKey), R.pipe(\n R.map((blockNode: any) => {\n if (blockNode.type === \"listItem\") {\n return weakMemoizedApplyListIndentKeyValueChangesToNode(blockNode, changesDisplayMode);\n } else {\n return blockNode;\n }\n }),\n )),\n node,\n );\n }, node);\n}\n\n\nexport const weakMemoizedApplyListIndentKeyValueChangesToNode = memoize(applyListIndentKeyValueChangesToNode);\nfunction applyListIndentKeyValueChangesToNode(node, changesDisplayMode) {\n return applyKeyValueChangesToNode(node, changesDisplayMode);\n}\n\nfunction applyAllChangesToChildren(node, changesDisplayMode) {\n return nodeBlockContentKeys(node).reduce((node, nodeKey) => {\n return R.when(\n R.has(nodeKey),\n R.over(R.lensProp(nodeKey), R.pipe(\n R.addIndex(R.map)((blockNode, index) => weakMemoizedApplyAllChanges(blockNode, changesDisplayMode, index)),\n R.reject(R.isNil),\n )),\n node,\n );\n }, node);\n}\n\nexport const weakMemoizedSetBlockNodesContainsSelection = memoize(setBlockNodesContainsSelection);\nfunction setBlockNodesContainsSelection(doc, docSelection) {\n const uidToLockAround = docSelection.start.uid;\n const nodePath = findNodePathByUid(doc, uidToLockAround);\n\n if (!nodePath) { return doc; }\n\n const node = findNodeAtPath(doc, nodePath);\n\n // REVISE TEST\n if (![\"paragraph\", \"listItem\"].includes(node.type) && docSelection.start.contentKey) { return doc; }\n\n let pathToLockFrom = nodePath\n if (!docSelection.start.contentKey) {\n pathToLockFrom = nodeParentPathFromPath(doc, nodePath);\n }\n\n const toLockAncestorPath = findDeepestLineagePathFromPath(doc, pathToLockFrom, (node) => [\"section\", \"tableCell\"].includes(node.type));\n\n if (!toLockAncestorPath) { return doc; }\n\n return setAtPath(doc, [...toLockAncestorPath, \"blockNodesContainsSelection\"], true);\n}\n\nexport const weakMemoizedAttachCurrentMenuToNode = memoize(attachCurrentMenuToNode);\nfunction attachCurrentMenuToNode(doc, currentMenu, localClipboard) {\n if (currentMenu.uid) {\n const nodePath = findNodePathByUid(doc, currentMenu.uid);\n if (nodePath) {\n doc = setAtPath(doc, [...nodePath, \"currentMenu\"], currentMenu);\n\n if (currentMenu.menu === MenuTypes.ADD_NODE) {\n doc = setAtPath(doc, [...nodePath, \"localClipboard\"], localClipboard);\n }\n }\n }\n\n return doc;\n}\n\n///////////////////////////////////////\n//////////// REORGANIZE ///////////////\n///////////////////////////////////////\n\nexport const weakMemoizedConvertAllToFlatFlowAndInlineRangeJSON = memoize(convertAllToFlatFlowAndInlineRangeJSON);\nexport function convertAllToFlatFlowAndInlineRangeJSON(node) {\n node = convertAllTablesToFullCells(node);\n node = convertAllInlineNodesToRangeJSON(node);\n node = convertAllTreeFlowToFlatFlow(node);\n\n return node;\n}\n\nexport function convertAllTablesToFullCells(node) {\n if (node.type === \"table\") {\n node = addMissingCellsToTable(node);\n }\n\n node = nodeBlockContentKeys(node).reduce((node, nodeKey) => {\n return R.when(\n R.has(nodeKey),\n R.over(R.lensProp(nodeKey), (childNodes) => childNodes.map(childNode => convertAllTablesToFullCells(childNode))),\n node\n );\n }, node);\n\n return node;\n}\n\nexport function convertAllTreeFlowToFlatFlow(node) {\n switch (node.type) {\n case \"paragraph\":\n case \"listItem\":\n return node;\n case \"section\":\n case \"tableCell\":\n if (!node.contentListNodes) {\n const {\n nodes,\n listNodes,\n } = treeFlowToFlatFlow(node.content);\n\n node = {\n ...node,\n content: nodes,\n contentListNodes: listNodes,\n }\n }\n default:\n }\n\n node = nodeBlockContentKeys(node).reduce((node, nodeKey) => {\n return R.when(\n R.has(nodeKey),\n R.over(R.lensProp(nodeKey), (childNodes) => childNodes.map(childNode => convertAllTreeFlowToFlatFlow(childNode))),\n node\n );\n }, node);\n\n return node;\n}\n\nfunction treeFlowToFlatFlow(treeFlowNodes, listUid=null, listIndentation = -1) {\n treeFlowNodes = Array.isArray(treeFlowNodes) ? treeFlowNodes : [treeFlowNodes];\n return treeFlowNodes.reduce((flatFlowData, treeFlowNode) => {\n let localListUid = listUid || treeFlowNode.listUid;\n let localListIndentation = typeof treeFlowNode.listIndentation === \"number\" ? treeFlowNode.listIndentation : listIndentation;\n localListIndentation = Math.max(localListIndentation, 0);\n\n if (localListUid) {\n treeFlowNode = {\n ...treeFlowNode,\n listUid: localListUid,\n listIndentation: localListIndentation,\n }\n }\n\n switch (treeFlowNode.type) {\n case \"regularList\":\n case \"numberedList\":\n const returnedListData = treeFlowToFlatFlow(treeFlowNode[\"content\"], localListUid || treeFlowNode.uid, listIndentation + 1);\n const cleanedListNode = R.dissoc(\"content\", treeFlowNode);\n\n return {\n nodes: R.concat(flatFlowData.nodes, returnedListData.nodes),\n listNodes: R.assoc(treeFlowNode.uid, cleanedListNode, flatFlowData.listNodes),\n }\n case \"listItem\":\n const returnedListItemData = treeFlowToFlatFlow(treeFlowNode[\"content\"], localListUid, localListIndentation);\n const cleanedListItemNode = R.assoc(\"content\", [], treeFlowNode);\n\n return {\n ...flatFlowData,\n nodes: [...flatFlowData.nodes, cleanedListItemNode, ...returnedListItemData.nodes],\n }\n case \"paragraph\":\n default:\n return {\n ...flatFlowData,\n nodes: [...flatFlowData.nodes, treeFlowNode],\n }\n }\n }, {nodes: [], listNodes: {}});\n}\n\nexport function flatFlowToTreeFlow(flatFlowNodes, listNodes, changesDisplayMode) {\n return flatFlowNodes.reduce((treeFlowNodes, flatFlowNode) => {\n const prevTreeFlowNode = R.last(treeFlowNodes as any[]);\n if (!prevTreeFlowNode) {\n if (isRelevantNode(flatFlowNode, changesDisplayMode)) {\n flatFlowNode = weakMemoizedNewListIfNeeded(flatFlowNode, listNodes);\n return R.append(flatFlowNode, treeFlowNodes)\n } else {\n return treeFlowNodes\n }\n } else {\n switch (prevTreeFlowNode.type) {\n case \"paragraph\":\n if (isRelevantNode(flatFlowNode, changesDisplayMode)) {\n flatFlowNode = weakMemoizedNewListIfNeeded(flatFlowNode, listNodes);\n return R.append(flatFlowNode, treeFlowNodes);\n } else {\n const newLastNode = weakMemoizedAppendNodeToParagraph(prevTreeFlowNode, flatFlowNode);\n return R.update(-1, newLastNode, treeFlowNodes);\n }\n case \"regularList\":\n case \"numberedList\":\n if (isRelevantNode(flatFlowNode, changesDisplayMode)) {\n if ([\"paragraph\", \"listItem\"].includes(flatFlowNode.type) && flatFlowNode.listUid === prevTreeFlowNode.uid){\n const newLastNode = weakMemoizedAppendNodeToList(prevTreeFlowNode, flatFlowNode);\n return R.update(-1, newLastNode, treeFlowNodes);\n } else {\n flatFlowNode = weakMemoizedNewListIfNeeded(flatFlowNode, listNodes);\n return R.append(flatFlowNode, treeFlowNodes);\n }\n } else {\n const newLastNode = weakMemoizedAppendNodeToLastParagraphInList(prevTreeFlowNode, flatFlowNode);\n return R.update(-1, newLastNode, treeFlowNodes);\n }\n default:\n if (isRelevantNode(flatFlowNode, changesDisplayMode)) {\n flatFlowNode = weakMemoizedNewListIfNeeded(flatFlowNode, listNodes);\n return R.append(flatFlowNode, treeFlowNodes);\n } else {\n return treeFlowNodes;\n }\n }\n }\n }, [])\n}\n\nexport function findFlatFlowNodesWithFlowRange(doc, flowRange) {\n const parentNode = findNodeByUid(doc, flowRange.uid);\n const contentNodes = parentNode[flowRange.contentKey];\n const contentListNodes = parentNode[`${flowRange.contentKey}ListNodes`];\n\n if (!isBlock(contentNodes) && !isBlockChangeSet(contentNodes)) { return null; }\n\n const startNodeOffset = findNodeOffsetFromFlattenedNodes(contentNodes, flowRange.range.start);\n const endNodeOffset = findNodeOffsetFromFlattenedNodes(contentNodes, flowRange.range.end);\n\n let inRangeFlatFlowNodes = [];\n\n let startNode = contentNodes[startNodeOffset.nodeIndex];\n if (startNodeOffset.innerIndex < flattenedNodeLength(startNode)) {\n if (startNode.type === \"paragraph\") {\n let newContent = startNode.content;\n\n if (startNodeOffset.nodeIndex === endNodeOffset.nodeIndex) {\n newContent = beforeRangeInlineJSONAt(newContent, endNodeOffset.innerIndex - 1);\n }\n\n newContent = afterRangeInlineJSONAt(newContent, startNodeOffset.innerIndex - 1)\n\n startNode = {\n ...startNode,\n content: newContent,\n }\n }\n\n inRangeFlatFlowNodes.push(startNode);\n }\n\n if (startNodeOffset.nodeIndex + 1 < endNodeOffset.nodeIndex) {\n inRangeFlatFlowNodes = inRangeFlatFlowNodes.concat(contentNodes.slice(startNodeOffset.nodeIndex + 1, endNodeOffset.nodeIndex));\n }\n\n if (startNodeOffset.nodeIndex != endNodeOffset.nodeIndex && endNodeOffset.innerIndex > 0) {\n let endNode = contentNodes[endNodeOffset.nodeIndex];\n\n if (endNode.type === \"paragraph\") {\n endNode = {\n ...endNode,\n content: beforeRangeInlineJSONAt(endNode.content, endNodeOffset.innerIndex - 1),\n }\n }\n\n inRangeFlatFlowNodes.push(endNode);\n }\n\n return {\n nodes: inRangeFlatFlowNodes,\n listNodes: contentListNodes,\n }\n}\n\nconst weakMemoizedNewListIfNeeded = memoize(newListIfNeeded);\nfunction newListIfNeeded(flatFlowNode, listNodes={}) {\n if (flatFlowNode.type === \"listItem\") {\n const list = listNodes[flatFlowNode.listUid]\n return weakMemoizedCombineListAndListItem(list, flatFlowNode);\n } else {\n return flatFlowNode;\n }\n}\n\nconst weakMemoizedCombineListAndListItem = memoize(combineListAndListItem);\nfunction combineListAndListItem(list, listItem) {\n return {\n ...list,\n content: safeAppend(list.content, listItem),\n }\n}\n\nconst weakMemoizedAppendNodeToParagraph = memoize(appendNodeToParagraph);\nfunction appendNodeToParagraph(paragraphNode, otherNode) {\n let newContent = concatRangeInlineJSON(\n paragraphNode.content,\n {\n text: \"#\",\n addDeleteChanges: [\n {\n type: \"DELETE_CONTENT\",\n range: {\n start: 0,\n end: 1,\n }\n }\n ]\n }\n )\n\n if (otherNode.type === \"paragraph\") {\n newContent = concatRangeInlineJSON(newContent, otherNode.content)\n }\n\n return {\n ...paragraphNode,\n content: newContent,\n }\n}\n\nconst weakMemoizedAppendNodeToList = memoize(appendNodeToList);\nfunction appendNodeToList(listNode, otherNode) {\n switch (otherNode.type) {\n case \"listItem\":\n if (typeof otherNode.listIndentation === \"number\") {\n const indentedListPath = findLastListOfIndentPath(listNode, otherNode.listIndentation)\n\n if (indentedListPath) {\n return R.over(R.lensPath([...indentedListPath, \"content\"]), (content) => safeAppend(content, otherNode), listNode);\n } else {\n const lastListItemPath = findLastListItemPath(listNode);\n if (lastListItemPath) {\n const newListNode = {\n type: listNode.type,\n uid: `list-${otherNode.uid}`,\n content: [otherNode],\n }\n\n return R.over(R.lensPath([...lastListItemPath, \"content\"]), (content) => safeAppend(content, newListNode), listNode);\n } else {\n const lastListPath = findLastListPath(listNode);\n return R.over(R.lensPath([...lastListPath, \"content\"]), (content) => safeAppend(content, otherNode), listNode);\n }\n }\n } else {\n const lastListPath = findLastListPath(listNode)\n return R.over(R.lensPath([...lastListPath, \"content\"]), (content) => safeAppend(content, otherNode), listNode);\n }\n case \"paragraph\":\n default:\n const lastListItemPath = findLastListItemPath(listNode);\n return R.over(R.lensPath([...lastListItemPath, \"content\"]), (content) => safeAppend(content, otherNode), listNode);\n }\n}\n\n\nconst weakMemoizedAppendNodeToLastParagraphInList = memoize(appendNodeToLastParagraphInList);\nfunction appendNodeToLastParagraphInList(listNode, otherNode) {\n const lastListItemPath = findLastListItemPath(listNode);\n\n if (!lastListItemPath) {\n return listNode;\n }\n\n const lastListItem = R.view(R.lensPath(lastListItemPath), listNode);\n const lastListItemIndex = lastListItem.content.length - 1\n\n if (lastListItemIndex === -1) {\n return listNode;\n }\n\n const lastNode = lastListItem.content[lastListItemIndex]\n\n if (lastNode.type !== \"paragraph\") {\n return listNode;\n }\n\n return R.over(R.lensPath([...lastListItemPath, \"content\", lastListItemIndex]), (paragraphNode) => weakMemoizedAppendNodeToParagraph(paragraphNode, otherNode), listNode);\n}\n\n\nfunction findLastListOfIndentPath(node, indent) {\n switch (node.type) {\n case \"regularList\":\n case \"numberedList\":\n if (indent === 0) {\n return [];\n }\n\n const lastListIndex = node.content.length - 1;\n if (lastListIndex === -1) {\n return null;\n }\n\n const remainingListPath = findLastListOfIndentPath(node.content[lastListIndex], indent - 1);\n if (!remainingListPath) {\n return null;\n }\n\n return [\"content\", lastListIndex, ...remainingListPath];\n case \"listItem\":\n const lastListItemIndex = node.content.length - 1;\n if (lastListItemIndex === -1) {\n return null;\n }\n\n const remainingListItemPath = findLastListOfIndentPath(node.content[lastListItemIndex], indent);\n if (!remainingListItemPath) {\n return null;\n }\n\n return [\"content\", lastListItemIndex, ...remainingListItemPath];\n default:\n return null;\n }\n}\n\nfunction findLastListPath(node) {\n switch (node.type) {\n case \"regularList\":\n case \"numberedList\":\n const lastListIndex = node.content.length - 1;\n if (lastListIndex === -1) {\n return [];\n }\n\n const remainingListPath = findLastListPath(node.content[lastListIndex]);\n if (!remainingListPath) {\n return [];\n }\n\n return [\"content\", lastListIndex, ...remainingListPath];\n case \"listItem\":\n const lastListItemIndex = node.content.length - 1;\n if (lastListItemIndex === -1) {\n return null;\n }\n\n const remainingListItemPath = findLastListPath(node.content[lastListItemIndex]);\n if (!remainingListItemPath) {\n return null;\n }\n\n return [\"content\", lastListItemIndex, ...remainingListItemPath];\n default:\n return null;\n }\n}\n\nfunction findLastListItemOfIndentPath(node, indent) {\n const lastListPath = findLastListOfIndentPath(node, indent);\n\n if (!lastListPath) {\n return null;\n }\n\n const lastList = R.view(R.lensPath(lastListPath), node);\n\n const lastListLastIndex = lastList.content.length - 1;\n\n if (lastListLastIndex === -1) {\n return null;\n }\n\n if (lastList.content[lastListLastIndex].type === \"listItem\") {\n return [...lastListPath, \"content\", lastListLastIndex];\n } else {\n return null;\n }\n}\n\nfunction findLastListItemPath(node) {\n const lastListPath = findLastListPath(node);\n\n if (!lastListPath) {\n return null;\n }\n\n const lastList = R.view(R.lensPath(lastListPath), node);\n\n const lastListLastIndex = lastList.content.length - 1;\n\n if (lastListLastIndex === -1) {\n return null;\n }\n\n if (lastList.content[lastListLastIndex].type === \"listItem\") {\n return [...lastListPath, \"content\", lastListLastIndex];\n } else {\n return null;\n }\n}\n\nfunction safeAppend(array=[], element) {\n return R.append(element, array);\n}\n\nfunction safeConcat(array1=[], array2=[]) {\n return array2.length > 0 ? R.concat(array1, array2) : array1;\n}\n\nfunction safeMerge(obj1={}, obj2={}) {\n return R.keys(obj2).length > 0 ? R.mergeRight(obj1, obj2) : obj1;\n}\n\nfunction shiftChildRange(rangeParent, value) {\n return {\n ...rangeParent,\n range: shiftRange(rangeParent.range, value),\n }\n}\n\nfunction flattenedNodeLength(node) {\n if (node.type === \"paragraph\") {\n return 1 + node.content.text.length;\n } else {\n return 1;\n }\n}\n\nexport function translateSelectionToFlowRange(doc, docSelection) {\n const startPath = findNodePathByUid(doc, docSelection.start.uid);\n const endPath = findNodePathByUid(doc, docSelection.end.uid);\n\n if (!startPath || !endPath) { return null; }\n\n const fullStartPath = docSelection.start.contentKey ? [...startPath, docSelection.start.contentKey] : startPath;\n const fullEndPath = docSelection.end.contentKey ? [...endPath, docSelection.end.contentKey] : endPath;\n\n const startFlowRootPath = flowRootPathFromPath(doc, fullStartPath);\n const endFlowRootPath = flowRootPathFromPath(doc, fullEndPath);\n\n if (!startFlowRootPath || !R.equals(startFlowRootPath, endFlowRootPath)) { return null; }\n\n let baseContent = findAtPath(doc, startFlowRootPath);\n const baseNode = findAtPath(doc, R.init(startFlowRootPath));\n\n if (\n isBlock(baseContent) ||\n isBlockChangeSet(baseContent)\n ) {\n const startNodeIndex = baseContent.findIndex(node => node.uid === docSelection.start.uid);\n const startNode = baseContent[startNodeIndex];\n const beforeStartLength = R.sum(R.slice(0, startNodeIndex, baseContent as any[]).map(node => flattenedNodeLength(node)));\n const startIndex = startNode.type === \"paragraph\" ? beforeStartLength + docSelection.start.index + 1 : beforeStartLength + docSelection.start.index;\n\n const endNodeIndex = baseContent.findIndex(node => node.uid === docSelection.end.uid);\n const endNode = baseContent[endNodeIndex];\n const beforeEndLength = R.sum(R.slice(0, endNodeIndex, baseContent as any[]).map(node => flattenedNodeLength(node)));\n const endIndex = endNode.type === \"paragraph\" ? beforeEndLength + docSelection.end.index + 1 : beforeEndLength + docSelection.end.index;\n\n return {\n uid: baseNode.uid,\n contentKey: R.last(startFlowRootPath),\n range: {\n start: startIndex,\n end: endIndex,\n }\n }\n } else if (\n isInline(baseContent) ||\n isInlineChangeSet(baseContent)\n ) {\n return {\n uid: baseNode.uid,\n contentKey: R.last(startFlowRootPath),\n range: {\n start: docSelection.start.index,\n end: docSelection.end.index,\n }\n }\n } else {\n // ERROR\n }\n}\n\nexport function isBlock(content) {\n return Array.isArray(content) && (content.length === 0 || isBlockNode(content[0]));\n}\n\nfunction isBlockNode(content) {\n return typeof content === 'object' && !!content.uid && !!content.type;\n}\n\nexport function isBlockChangeSet(content) {\n return typeof content === 'object' && !!content.nodes;\n}\n\nfunction isInline(content) {\n return typeof content === 'string';\n}\n\nfunction isInlineChangeSet(content) {\n return typeof content === 'object' && typeof content.text === 'string';\n}\n\nexport function flowRootPathFromPath(doc, path) {\n const possibleKey = R.last(path);\n const possibleNodePath = R.init(path);\n\n if (R.isNil(possibleKey)) { return null };\n\n if (typeof possibleKey !== \"string\") { return flowRootPathFromPath(doc, possibleNodePath); }\n\n const possibleNode = findAtPath(doc, possibleNodePath)\n\n if (!isNode(possibleNode)) { return flowRootPathFromPath(doc, possibleNodePath); }\n\n if (\n ![\"paragraph\", \"listItem\", \"regularList\", \"numberedList\"].includes(possibleNode.type)\n ) {\n return [...possibleNodePath, possibleKey];\n } else {\n return flowRootPathFromPath(doc, possibleNodePath);\n }\n}\n\nfunction findNodeOffsetFromFlattenedNodes(nodes, index: number) {\n if (index <= 0) {\n return {\n nodeIndex: 0,\n innerIndex: 0,\n }\n }\n\n let nodeOffset = nodes.reduce((agg, node) => {\n if (!agg.innerIndex) {\n const restOfIndex = agg.remainingIndex - flattenedNodeLength(node)\n if (restOfIndex <= 0) {\n return {\n nodeIndex: agg.nodeIndex,\n innerIndex: agg.remainingIndex,\n }\n } else {\n return {\n remainingIndex: restOfIndex,\n nodeIndex: agg.nodeIndex + 1,\n }\n }\n } else {\n return agg;\n }\n }, {remainingIndex: index, nodeIndex: 0})\n\n return nodeOffset.innerIndex ? nodeOffset : null\n}\n\n// RENAME TO RANGED CHANGE\nfunction appendRangedItemToFlattenedNodes(nodes, rangedItemsName, rangedItem) {\n return nodes.reduce((agg, node) => {\n const nodeLength = flattenedNodeLength(node);\n\n return {\n offsetRangedItem: {\n ...agg.offsetRangedItem,\n range: shiftRange(agg.offsetRangedItem.range, -1 * nodeLength)\n },\n newNodes: [\n ...agg.newNodes,\n appendRangedItemToFlatNode(node, rangedItemsName, agg.offsetRangedItem)\n ],\n }\n\n }, {offsetRangedItem: rangedItem, newNodes: []}).newNodes;\n}\n\nfunction appendRangedItemToFlatNode(node, rangedItemsName, rangedItem) {\n if (rangedItem.range.start < 1 && rangedItem.range.end > 0) {\n const newRangedItem = {\n ...rangedItem,\n range: {\n start: 0,\n end: 1,\n }\n }\n\n let newRangedItems = node[rangedItemsName] || [];\n let toCombineRangeIndex = R.findLastIndex((rangedItemB: any) => {\n return (\n rangedItemB.type === newRangedItem.type &&\n rangedItemB.change_id === newRangedItem.change_id &&\n rangesDoTouch(rangedItemB.range, newRangedItem.range)\n );\n }, newRangedItems);\n if (toCombineRangeIndex >= 0) {\n newRangedItems = R.adjust(toCombineRangeIndex, (rangedItemB: any) => {\n return {\n ...newRangedItem,\n range: rangesUnion(rangedItemB.range, newRangedItem.range)\n };\n }, newRangedItems);\n } else {\n newRangedItems = R.append(newRangedItem, newRangedItems);\n }\n\n node = R.assoc(rangedItemsName, newRangedItems, node)\n }\n\n if (node[\"type\"] === \"paragraph\") {\n if (rangedItem.range.start < node.content.text.length + 1 && rangedItem.range.end > 1) {\n const newRangedItem = {\n ...rangedItem,\n range: {\n start: R.max(0, rangedItem.range.start - 1),\n end: R.min(node.content.text.length, rangedItem.range.end - 1),\n }\n }\n\n node = R.over(R.lensPath([\"content\"]), (rangeInlineJSON) => {\n return appendRangedItemToRangeInlineJSON(rangeInlineJSON, rangedItemsName, newRangedItem);\n }, node)\n }\n }\n\n return node;\n}\n\nfunction appendRangedItemToRangeInlineJSON(rangeInlineJSON, rangedItemsName, rangedItem) {\n let rangesToRemove = [];\n if (rangedItemsName === \"addDeleteChanges\" && rangedItem.type === DELETE_CONTENT && rangeInlineJSON[rangedItemsName]) {\n const addRangeItemsToCheck = rangeInlineJSON[rangedItemsName].filter(rangedItemB => {\n return (\n canCompressChanges(rangedItem, rangedItemB) &&\n rangesDoTouch(rangedItem.range, rangedItemB.range) &&\n rangedItemB.type === ADD_CONTENT\n );\n })\n\n rangesToRemove = addRangeItemsToCheck.map(addRangeItem => rangesIntersection(addRangeItem.range, rangedItem.range));\n }\n\n rangeInlineJSON = R.over(R.lensPath([rangedItemsName]), (rangedItems) => {\n let newRangedItems = rangedItems || [];\n let toCombineRangeIndex = R.findLastIndex((rangedItemB: any) => {\n return (\n rangedItemB.type === rangedItem.type &&\n rangedItemB.change_id === rangedItem.change_id &&\n rangesDoTouch(rangedItemB.range, rangedItem.range)\n );\n }, newRangedItems);\n\n if (toCombineRangeIndex >= 0) {\n newRangedItems = R.adjust(toCombineRangeIndex, (rangedItemB: any) => {\n return {\n ...rangedItem,\n range: rangesUnion(rangedItemB.range, rangedItem.range)\n };\n }, newRangedItems);\n } else {\n newRangedItems = R.append(rangedItem, newRangedItems);\n }\n\n return newRangedItems;\n }, rangeInlineJSON);\n\n R.reverse(rangesToRemove).forEach(rangeToRemove => {\n rangeInlineJSON = removeRangeFromRangeInlineJSON(rangeInlineJSON, rangeToRemove)\n })\n\n return rangeInlineJSON;\n}\n\nfunction isFlowTypeAndKey(type, key) {\n return (\n (type === \"section\" && key === \"content\") ||\n (type === \"tableCell\" && key === \"content\")\n )\n}\n\nfunction isSecondaryTypeAndKey(type, key) {\n return (\n (type === \"section\" && key === \"title\") ||\n (type === \"image\" && key === \"title\") ||\n (type === \"audio\" && key === \"title\") ||\n (type === \"video\" && key === \"title\")\n // TODO FILL IN WITH REST OF ITEMS\n )\n}\n\nfunction appendChangeToChanges(changes, change) {\n if (!changes) {changes = [];}\n\n const previousChange = R.last(changes);\n if (previousChange) {\n const compressedChange = compressTwoChangesIfPossible(previousChange, change);\n\n if (compressedChange) {\n return R.update(-1, compressedChange, changes);\n }\n }\n\n return R.append(change, changes);\n}\n\nconst possibleRangeKeys = [\n \"styleRanges\",\n \"styleChanges\",\n \"addDeleteChanges\",\n \"commentThreadChanges\",\n // ADD MORE POSSIBLE RANGES\n]\n\nfunction concatRangeInlineJSON(rangeInline1, rangeInline2) {\n let newRangeInlineJSON = {\n ...rangeInline1,\n text: `${rangeInline1.text}${rangeInline2.text}`,\n }\n\n possibleRangeKeys.forEach(possibleRangeKey => {\n if (rangeInline2[possibleRangeKey]) {\n const shiftedRanges = rangeInline2[possibleRangeKey].map(possibleRange => shiftChildRange(possibleRange, rangeInline1.text.length));\n newRangeInlineJSON[possibleRangeKey] = safeConcat(newRangeInlineJSON[possibleRangeKey], shiftedRanges)\n }\n })\n\n return newRangeInlineJSON;\n}\n\nfunction insertRangeInlineJSONAtIndex(rangeInline1, rangeInline2, index: number) {\n const beforeText = rangeInline1.text.slice(0, index);\n const afterText = rangeInline1.text.slice(index);\n\n let newRangeInlineJSON = {\n ...rangeInline1,\n text: `${beforeText}${rangeInline2.text}${afterText}`,\n }\n\n const insertLength = rangeInline2.text.length;\n\n possibleRangeKeys.forEach(possibleRangeKey => {\n if (newRangeInlineJSON[possibleRangeKey]) {\n if (possibleRangeKey.includes(\"addDeleteChanges\")) {\n newRangeInlineJSON[possibleRangeKey] = newRangeInlineJSON[possibleRangeKey].flatMap((rangedItem) =>\n splitAndShiftRangeAtIndexByValue(rangedItem.range, index, insertLength).map((newRanges) => (\n {\n ...rangedItem,\n range: newRanges,\n }\n ))\n );\n } else {\n newRangeInlineJSON[possibleRangeKey] = newRangeInlineJSON[possibleRangeKey].map((rangedItem) => ({\n ...rangedItem,\n range: extendRangeAtIndexByValue(rangedItem.range, index, insertLength),\n }));\n }\n }\n\n if (rangeInline2[possibleRangeKey]) {\n const shiftedRanges = rangeInline2[possibleRangeKey].map(possibleRange => shiftChildRange(possibleRange, rangeInline1.text.length));\n newRangeInlineJSON[possibleRangeKey] = safeConcat(newRangeInlineJSON[possibleRangeKey], shiftedRanges)\n }\n })\n\n return newRangeInlineJSON;\n}\n\nfunction removeRangeFromRangeInlineJSON(rangeInline, range) {\n const beforeText = rangeInline.text.slice(0, range.start);\n const afterText = rangeInline.text.slice(range.end);\n\n let newRangeInlineJSON = {\n ...rangeInline,\n text: `${beforeText}${afterText}`,\n }\n\n possibleRangeKeys.forEach(possibleRangeKey => {\n if (newRangeInlineJSON[possibleRangeKey]) {\n newRangeInlineJSON[possibleRangeKey] = newRangeInlineJSON[possibleRangeKey].map((rangedItem) => {\n const newRange = deleteRangeAtIndexByValue(rangedItem.range, range.start, rangeLength(range));\n if (newRange) {\n return {\n ...rangedItem,\n range: newRange\n }\n } else {\n return null;\n }\n }).filter(x => x);\n }\n })\n\n return newRangeInlineJSON;\n}\n\nfunction beforeRangeInlineJSONAt(rangeInline, index: number) {\n let newBeforeRangeInlineJSON = {\n ...rangeInline,\n text: rangeInline.text.slice(0, index),\n }\n\n possibleRangeKeys.forEach(possibleRangeKey => {\n if (newBeforeRangeInlineJSON[possibleRangeKey]) {\n newBeforeRangeInlineJSON[possibleRangeKey] = newBeforeRangeInlineJSON[possibleRangeKey]\n .filter(rangeParent => rangeParent.range.start < index)\n .map(rangeParent => (\n {\n ...rangeParent,\n range: {\n start: rangeParent.range.start,\n end: R.min(rangeParent.range.end, index)\n }\n }\n ))\n }\n })\n\n return newBeforeRangeInlineJSON;\n}\n\nfunction afterRangeInlineJSONAt(rangeInline, index: number) {\n let newAfterRangeInlineJSON = {\n ...rangeInline,\n text: rangeInline.text.slice(index),\n }\n\n possibleRangeKeys.forEach(possibleRangeKey => {\n if (newAfterRangeInlineJSON[possibleRangeKey]) {\n newAfterRangeInlineJSON[possibleRangeKey] = newAfterRangeInlineJSON[possibleRangeKey]\n .filter(rangeParent => rangeParent.range.end > index)\n .map(rangeParent => (\n {\n ...rangeParent,\n range: {\n start: R.max(rangeParent.range.start - index, 0),\n end: rangeParent.range.end - index\n }\n }\n ))\n }\n })\n\n return newAfterRangeInlineJSON;\n}\n\nfunction splitRangeInlineJSONAt(rangeInline, index: number) {\n return [\n beforeRangeInlineJSONAt(rangeInline, index),\n afterRangeInlineJSONAt(rangeInline, index),\n ]\n}\n\nfunction addChangeTextAndNodesChange(doc, change) {\n const node = findNodeByUid(doc, change.uid);\n\n if (!nodeInlineNotFlowContentKeys(node).includes(change.key)) {\n return addChangeTextAndNodesChangeToFlow(doc, change);\n } else {\n return addChangeTextAndNodesChangeToSecondary(doc, change);\n }\n}\n\nfunction reduceFlatNodesWithOffset(flowNodes, reduceFunc, initialValue) {\n const finalResultContainer = flowNodes.reduce((resultContainer, node) => {\n const newResult = reduceFunc(\n resultContainer.result,\n node,\n resultContainer.offset\n );\n\n const newOffset = resultContainer.offset + flattenedNodeLength(node);\n\n return {\n result: newResult,\n offset: newOffset\n }\n }, {result: initialValue, offset: 0})\n\n return finalResultContainer.result;\n}\n\nfunction addChangeTextAndNodesChangeToFlow(doc, change) {\n const nodePath = findNodePathByUid(doc, change.uid)\n const flowPath = [...nodePath, change.key]\n const flowListNodesPath = [...nodePath, `${change.key}ListNodes`]\n\n let listNodesToAdd = {}\n\n doc = overAtPath(doc, flowPath, (flowNodes) => {\n let nodes = flowNodes || [];\n\n const compressableChange = reduceFlatNodesWithOffset(nodes, (result, node, offset) => {\n if ( result ) { return result };\n\n if (node.addDeleteChanges) {\n const adjustedRange = shiftRange(change.range, -1 * offset);\n\n const compressableNodeAddDropChange = node.addDeleteChanges.find(addDropChange => {\n canCompressChanges(change, addDropChange) &&\n rangesDoTouch(adjustedRange, addDropChange.range)\n })\n\n if (compressableNodeAddDropChange) { return compressableNodeAddDropChange }\n }\n\n if (node.type === \"paragraph\" && node.content.addDeleteChanges) {\n const adjustedRange = shiftRange(change.range, -1 * offset - 1);\n const compressableContentAddDropChange = node.content.addDeleteChanges.find(addDropChange => {\n return (\n canCompressChanges(change, addDropChange) &&\n rangesDoTouch(adjustedRange, addDropChange.range)\n )\n })\n\n if (compressableContentAddDropChange) { return compressableContentAddDropChange }\n }\n }, null);\n\n if (compressableChange) {\n change = {\n ...change,\n ...changeMetadata(compressableChange),\n change_id: compressableChange.change_id,\n }\n }\n\n let nodesToAdd = change.nodes || [];\n const nodesToAddData = treeFlowToFlatFlow(nodesToAdd);\n\n nodesToAdd = nodesToAddData.nodes;\n listNodesToAdd = nodesToAddData.listNodes;\n\n let styledTextToAdd = change.styledText;\n\n const startNodeOffset = findNodeOffsetFromFlattenedNodes(nodes, change.range.start);\n const startNode = startNodeOffset && nodes[startNodeOffset.nodeIndex];\n\n if (styledTextToAdd) {\n if (\n !startNode ||\n startNode.type !== \"paragraph\" ||\n startNodeOffset.innerIndex === 0\n ) {\n const newParagraph = {\n type: \"paragraph\",\n uid: generateUUID(),\n content: styledTextToAdd,\n }\n\n styledTextToAdd = null;\n nodesToAdd = R.append(newParagraph, nodesToAdd);\n }\n }\n\n let newLength = R.sum(nodesToAdd.map(node => flattenedNodeLength(node)))\n if (styledTextToAdd) {\n newLength = newLength + styledTextToAdd.text.length;\n }\n\n if (nodesToAdd.length > 0) {\n if (\n startNode &&\n startNode.type === \"paragraph\" &&\n startNodeOffset.innerIndex > 0 &&\n startNode.content.text.length + 1 > startNodeOffset.innerIndex\n ) {\n const [\n beforeInline,\n afterInline\n ] = splitRangeInlineJSONAt(startNode.content, startNodeOffset.innerIndex - 1);\n\n nodes = R.set(R.lensPath([startNodeOffset.nodeIndex, \"content\"]), beforeInline, nodes);\n\n if (R.last(nodesToAdd as any[]).type === \"paragraph\") {\n nodesToAdd = R.over(R.lensPath([nodesToAdd.length - 1, \"content\"]), content => concatRangeInlineJSON(content, afterInline), nodesToAdd)\n } else {\n const newParagraph = {\n type: \"paragraph\",\n uid: generateUUID(),\n content: afterInline,\n }\n\n newLength = newLength + 1;\n nodesToAdd = R.append(newParagraph, nodesToAdd);\n }\n }\n }\n\n if (styledTextToAdd) {\n nodes = R.over(R.lensPath([startNodeOffset.nodeIndex, \"content\"]), (oldContent) => {\n return insertRangeInlineJSONAtIndex(oldContent, styledTextToAdd, startNodeOffset.innerIndex - 1);\n }, nodes)\n }\n\n if (nodesToAdd.length > 0) {\n let insertIndex = 0;\n\n if (startNodeOffset) {\n if (startNodeOffset.innerIndex === 0) {\n insertIndex = startNodeOffset.nodeIndex;\n } else {\n insertIndex = startNodeOffset.nodeIndex + 1;\n }\n }\n\n nodes = R.insertAll(insertIndex, nodesToAdd, nodes)\n }\n\n const cleanedChange = R.omit([\"nodes\", \"styledText\"], change)\n\n if (!isRangeCollapsed(change.range)) {\n const deleteChange = {\n ...cleanedChange,\n type: DELETE_CONTENT,\n range: shiftRange(change.range, newLength),\n };\n\n nodes = appendRangedItemToFlattenedNodes(nodes, \"addDeleteChanges\", deleteChange);\n }\n\n // ADD ADD CHANGES TO NEW NODES\n if (newLength > 0) {\n const addRange = {\n ...cleanedChange,\n type: ADD_CONTENT,\n range: {\n start: change.range.start,\n end: change.range.start + newLength,\n }\n }\n\n nodes = appendRangedItemToFlattenedNodes(nodes, \"addDeleteChanges\", addRange);\n }\n\n return nodes;\n })\n\n doc = overAtPath(doc, flowListNodesPath, (listNodes) => safeMerge(listNodes, listNodesToAdd));\n\n return doc;\n}\n\nfunction addChangeTextAndNodesChangeToSecondary(doc, change) {\n const nodePath = findNodePathByUid(doc, change.uid)\n const secondaryTextPath = [...nodePath, change.key]\n\n doc = overAtPath(doc, secondaryTextPath, (rangeInlineJSON) => {\n const compressableChange = rangeInlineJSON.addDeleteChanges?.find(addDropChange => {\n return (\n canCompressChanges(change, addDropChange) &&\n rangesDoTouch(change.range, addDropChange.range)\n )\n })\n\n if (compressableChange) {\n change = {\n ...change,\n ...changeMetadata(compressableChange),\n change_id: compressableChange.change_id,\n }\n }\n\n const styledText = change.styledText || {text: \"\", styleRanges: []}\n\n rangeInlineJSON = insertRangeInlineJSONAtIndex(rangeInlineJSON, styledText, change.range.start);\n\n const cleanedChange = R.omit([\"nodes\", \"styledText\"], change)\n\n if (!isRangeCollapsed(change.range)) {\n const deleteChange = {\n ...cleanedChange,\n type: DELETE_CONTENT,\n range: shiftRange(change.range, styledText.text.length),\n };\n\n rangeInlineJSON = appendRangedItemToRangeInlineJSON(rangeInlineJSON, \"addDeleteChanges\", deleteChange);\n }\n\n if (styledText.text.length > 0) {\n const addChange = {\n ...cleanedChange,\n type: ADD_CONTENT,\n range: {\n start: change.range.start,\n end: change.range.start + styledText.text.length,\n }\n }\n\n rangeInlineJSON = appendRangedItemToRangeInlineJSON(rangeInlineJSON, \"addDeleteChanges\", addChange);\n }\n\n return rangeInlineJSON;\n })\n\n return doc;\n}\n\nfunction addAddNodeChange(doc, change) {\n const parentPath = findNodePathByUid(doc, change.parent_uid);\n const content = findAtPath(doc, [...parentPath, change.parent_key]);\n const beforeContent = content.slice(0, change.parent_index);\n\n const beforeLength = R.sum(beforeContent.map(node => flattenedNodeLength(node)));\n\n const modifiedChange = {\n ...change,\n type: CHANGE_TEXT_AND_NODES,\n uid: change.parent_uid,\n key: change.parent_key,\n range: {\n start: beforeLength,\n end: beforeLength\n },\n nodes: [convertAllInlineNodesToRangeJSON(change.node)],\n }\n\n return addChangeToDoc(doc, modifiedChange);\n}\n\nfunction addAddTextAndNodesBeforeNodeChange(doc, change) {\n const {\n nodes,\n styledText,\n sibling_uid,\n } = change\n\n const siblingPath = findNodePathByUid(doc, sibling_uid);\n const sibling = findNodeAtPath(doc, siblingPath);\n\n let parent, parentKey, parentIndex;\n if ([\"regularList\", \"numberedList\"].includes(sibling.type)) {\n // Truncate path to find parent\n let parentPath = R.takeWhile(n => n !== \"contentListNodes\", siblingPath) as NodePath; // TODO: Remove as when can\n parent = findNodeAtPath(doc, parentPath);\n\n const listIndex = parent.content.findIndex(node => node.listUid === sibling.uid);\n // FIND FIRST NON DELETED ITEM\n if (listIndex < 0) { return doc; }\n\n parentKey = \"content\";\n parentIndex = listIndex;\n } else {\n parent = findNodeParentByUid(doc, sibling_uid);\n parentKey = nodeContentKeyFromPath(doc, siblingPath);\n parentIndex = nodeIndexFromPath(doc, siblingPath);\n }\n\n const beforeContent = parent.content.slice(0, parentIndex);\n const beforeLength = R.sum(beforeContent.map(node => flattenedNodeLength(node)));\n\n const modifiedChange = {\n ...change,\n type: CHANGE_TEXT_AND_NODES,\n uid: parent.uid,\n key: parentKey,\n range: {\n start: beforeLength,\n end: beforeLength,\n },\n styledText: styledText,\n nodes: nodes,\n }\n\n return addChangeToDoc(doc, modifiedChange);\n}\n\nfunction addAddTextAndNodesToNodeChange(doc, change) {\n const {\n nodes,\n styledText,\n parent_uid,\n parent_key,\n } = change;\n\n const parent = findNodeByUid(doc, parent_uid);\n const parentLength = R.sum(parent[parent_key].map(node => flattenedNodeLength(node)));\n\n const modifiedChange = {\n ...change,\n type: CHANGE_TEXT_AND_NODES,\n uid: parent_uid,\n key: parent_key,\n range: {\n start: parentLength,\n end: parentLength,\n },\n styledText: styledText,\n nodes: nodes,\n }\n\n return addChangeToDoc(doc, modifiedChange);\n}\n\nfunction addDeleteNodeChange(doc, change) {\n const nodePath = findNodePathByUid(doc, change.uid);\n const node = findAtPath(doc, nodePath);\n\n let parent, parentKey, parentStartIndex, parentEndIndex;\n if ([\"regularList\", \"numberedList\"].includes(node.type)) {\n // Truncate path to find parent\n let parentPath = R.takeWhile(n => n !== \"contentListNodes\", nodePath) as NodePath; // TODO: Remove when ready\n parent = findNodeAtPath(doc, parentPath);\n\n parentKey = \"content\";\n\n parentStartIndex = parent.content.findIndex(n => n.listUid === node.uid);\n // FIND FIRST NON DELETED ITEM\n if (parentStartIndex < 0) { return doc; }\n\n parentEndIndex = parent.content.findLastIndex(n => n.listUid === node.uid);\n // FIND FIRST NON DELETED ITEM\n if (parentEndIndex < 0) { return doc; }\n\n parentEndIndex = parentEndIndex+1;\n } else {\n parent = findNodeParentByUid(doc, node.uid);\n parentKey = nodeContentKeyFromPath(doc, nodePath);\n parentStartIndex = nodeIndexFromPath(doc, nodePath);\n\n if ([\"listItem\"].includes(node.type)) {\n parentEndIndex = parentStartIndex + 2;\n } else {\n parentEndIndex = parentStartIndex + 1;\n }\n }\n\n const content = parent[parentKey];\n\n const beforeContent = content.slice(0, parentStartIndex);\n const beforeLength = R.sum(beforeContent.map(node => flattenedNodeLength(node)));\n\n const nodeLength = R.sum(content.slice(parentStartIndex, parentEndIndex).map(node => flattenedNodeLength(node)));\n\n const modifiedChange = {\n ...change,\n type: CHANGE_TEXT_AND_NODES,\n uid: parent.uid,\n key: parentKey,\n range: {\n start: beforeLength,\n end: beforeLength + nodeLength,\n },\n }\n\n return addChangeToDoc(doc, modifiedChange);\n}\n\nfunction addMoveNodeChange(doc, change) {\n return doc;\n\n // const oldPath = findNodePathByUid(doc, change.uid);\n // const newPath = [...findNodePathByUid(doc, change.parent_uid), change.parent_key, change.parent_index];\n\n // const node = findAtPath(doc, oldPath);\n\n // const oldEditStage = blockEditStageFromNode(node);\n // const newEditStage = editStageFromChange(change);\n\n // doc = addBlockChangeToNodeAtPath(doc, oldPath, change);\n // doc = moveAtPathToPath(doc, oldPath, newPath);\n\n // switch (editStageComparison(oldEditStage, newEditStage)) {\n // case EditStage.MORE_FINAL:\n // let summaryPath = oldPath;\n\n // if (newPath.length <= summaryPath.length && arePathsSameLineage(R.init(newPath), summaryPath) && R.last(newPath) <= summaryPath[newPath.length - 1]) {\n // summaryPath = R.adjust(newPath.length - 1, R.inc, summaryPath);\n // }\n\n // doc = insertAtPath(doc, newMoveSummary(node.uid, oldEditStage), summaryPath);\n // break;\n // case EditStage.LESS_FINAL:\n // doc = removeMoveSummary(doc, node.uid, newEditStage);\n // break;\n // }\n}\n\nfunction addMoveNodeUpChange(doc, change) {\n return addMoveNodeUpOrDownChange(doc, change, true);\n}\n\nfunction addMoveNodeDownChange(doc, change) {\n return addMoveNodeUpOrDownChange(doc, change, false);\n}\n\nfunction addMoveNodeUpOrDownChange(doc, change, isUp) {\n const nodePath = findNodePathByUid(doc, change.uid);\n let unadjustedNode = findNodeAtPath(doc, nodePath);\n\n let parent = findNodeParentByUid(doc, change.uid);\n let parentPath = findNodePathByUid(doc, parent.uid);\n\n let parentKey, parentIndex;\n\n let node;\n if ([\"regularList\", \"numberedList\"].includes(unadjustedNode.type)) {\n parentPath = nodePath.slice(0, -2);\n parent = findNodeAtPath(doc, parentPath);\n\n const listIndex = parent.content.findIndex(nodeB => nodeB.listUid === unadjustedNode.uid);\n // FIND FIRST NON DELETED ITEM\n if (listIndex < 0) { return doc; }\n\n parentKey = \"content\";\n parentIndex = listIndex;\n node = parent.content[parentIndex];\n } else {\n parentKey = nodeContentKeyFromPath(doc, nodePath);\n parentIndex = nodeIndexFromPath(doc, nodePath);\n node = unadjustedNode;\n }\n\n const parentContent = parent[parentKey];\n\n const afterSiblings = parentContent.slice(parentIndex + 1);\n\n const moveAfterSiblings = R.takeWhile((nodeB:any) => {\n switch (unadjustedNode.type) {\n case \"paragraph\":\n return (\n isMoveSummary(nodeB) ||\n isDeletedOrProposedDeletedNode(nodeB)\n );\n case \"listItem\":\n return (\n isMoveSummary(nodeB) ||\n isDeletedOrProposedDeletedNode(nodeB) ||\n (\n node.listUid === nodeB.listUid &&\n (node.listIndentation || 0) <= (nodeB.listIndentation || 0) &&\n nodeB.type !== \"listItem\"\n )\n )\n case \"regularList\":\n case \"numberedList\":\n return (\n isMoveSummary(nodeB) ||\n isDeletedOrProposedDeletedNode(nodeB) ||\n unadjustedNode.uid === nodeB.listUid\n )\n default:\n return false;\n }\n }, afterSiblings);\n\n const nodesToMove = [node, ...moveAfterSiblings];\n\n let newIndex;\n if (isUp) {\n const beforeSiblings = parentContent.slice(0, parentIndex);\n\n const endOfValidSiblingIndex = R.findLastIndex((nodeB:any) => (\n !isMoveSummary(nodeB) &&\n !isDeletedOrProposedDeletedNode(nodeB) &&\n (!unadjustedNode.listUid || (listLevel(unadjustedNode) <= listLevel(nodeB) && unadjustedNode.listUid === nodeB.listUid))\n ), beforeSiblings);\n\n if (endOfValidSiblingIndex === -1) { return doc; }\n\n const endOfValidSibling = parentContent[endOfValidSiblingIndex];\n const toEndOfValidSiblingSiblings = parentContent.slice(0, endOfValidSiblingIndex + 1);\n\n let validSiblingIndex\n if (unadjustedNode.listUid) {\n validSiblingIndex = R.findLastIndex((nodeB:any) => (\n unadjustedNode.listUid === nodeB.listUid && listLevel(unadjustedNode) >= listLevel(nodeB)\n ), toEndOfValidSiblingSiblings);\n\n if (validSiblingIndex === -1) { return doc; }\n } else {\n if (endOfValidSibling.listUid) {\n const beforeValidSiblingIndex = R.findLastIndex((nodeB:any) => (\n endOfValidSibling.listUid !== nodeB.listUid\n ), toEndOfValidSiblingSiblings);\n\n validSiblingIndex = beforeValidSiblingIndex + 1;\n } else {\n validSiblingIndex = endOfValidSiblingIndex;\n }\n }\n\n newIndex = validSiblingIndex === -1 ? 0 : validSiblingIndex;\n } else {\n const afterSiblingsIndex = parentIndex + nodesToMove.length;\n const afterSiblings = parentContent.slice(afterSiblingsIndex);\n\n const validSiblingOffset = R.findIndex((nodeB:any) => (\n !isMoveSummary(nodeB) &&\n !isDeletedOrProposedDeletedNode(nodeB) &&\n (\n unadjustedNode.listUid ?\n listLevel(unadjustedNode) === listLevel(nodeB) && unadjustedNode.listUid === nodeB.listUid :\n listLevel(nodeB) <= 0 // Future can just be true\n )\n ), afterSiblings);\n\n if (validSiblingOffset === -1) { return doc; }\n\n const validSiblingIndex = afterSiblingsIndex + validSiblingOffset;\n\n const validSibling = parentContent[validSiblingIndex];\n const afterValidSiblingSiblings = parentContent.slice(validSiblingIndex + 1);\n\n\n let endOfValidSiblingOffset = R.findIndex((nodeB:any) => (\n !validSibling.listUid ||\n (\n unadjustedNode.listUid ?\n listLevel(validSibling) >= listLevel(nodeB) || validSibling.listUid !== nodeB.listUid :\n listLevel(nodeB) === -1 || validSibling.listUid !== nodeB.listUid\n )\n ), afterValidSiblingSiblings);\n\n newIndex = endOfValidSiblingOffset === -1 ? parentContent.length : validSiblingIndex + 1 + endOfValidSiblingOffset;\n }\n\n if (newIndex > parentIndex) {\n newIndex = Math.max(parentIndex, newIndex - nodesToMove.length);\n }\n\n let newParentContent = parentContent;\n newParentContent = R.remove(parentIndex, nodesToMove.length, newParentContent);\n newParentContent = R.insertAll(newIndex, nodesToMove, newParentContent);\n\n return setAtPath(doc, [...parentPath, parentKey], newParentContent);\n}\n\nfunction listLevel(node) {\n if (node.listUid) {\n const unadjustedListLevel = node.listIndentation || 0;\n\n if (node.type === \"listItem\") {\n return unadjustedListLevel\n } else {\n return unadjustedListLevel + 1;\n }\n } else {\n return -1;\n }\n}\n\nfunction isDeletedOrProposedDeletedNode(node) {\n return !isRelevantNode(node, changesDisplayModes.HIGHLIGHT_SUGGESTIONS);\n}\n\nfunction addStyleChange(doc, change) {\n const node = findNodeByUid(doc, change.uid);\n\n if (isFlowTypeAndKey(node.type, change.key)) {\n return addStyleChangeToFlow(doc, change);\n } else {\n return addStyleChangeToSecondary(doc, change);\n }\n}\n\n\nfunction addStyleChangeToFlow(doc, change) {\n const nodePath = findNodePathByUid(doc, change.uid)\n const flowPath = [...nodePath, change.key]\n\n doc = overAtPath(doc, flowPath, (flowNodes) => appendRangedItemToFlattenedNodes(flowNodes, \"styleChanges\", change)); // SHOULD NARROW CHANGE?\n\n return doc;\n}\n\nfunction addStyleChangeToSecondary(doc, change) {\n const nodePath = findNodePathByUid(doc, change.uid)\n const secondaryTextPath = [...nodePath, change.key]\n\n doc = overAtPath(doc, secondaryTextPath, (rangeInlineJSON) => {\n return {\n ...rangeInlineJSON,\n styleChanges: safeAppend(rangeInlineJSON.styleChanges, change), // SHOULD NARROW CHANGE?\n }\n })\n\n return doc;\n}\n\nfunction addAddCommentThread(doc, change) {\n const node = findNodeByUid(doc, change.uid);\n\n if (isFlowTypeAndKey(node.type, change.key)) {\n return addAddCommentThreadChangeToFlow(doc, change);\n } else {\n return addAddCommentThreadChangeToSecondary(doc, change);\n }\n}\n\nfunction addAddCommentThreadChangeToFlow(doc, change) {\n const nodePath = findNodePathByUid(doc, change.uid)\n const flowPath = [...nodePath, change.key]\n\n doc = overAtPath(doc, flowPath, (flowNodes) => appendRangedItemToFlattenedNodes(flowNodes, \"commentThreadChanges\", change)); // SHOULD NARROW CHANGE?\n\n return doc;\n}\n\nfunction addAddCommentThreadChangeToSecondary(doc, change) {\n const nodePath = findNodePathByUid(doc, change.uid);\n const secondaryTextPath = [...nodePath, change.key];\n\n doc = overAtPath(doc, secondaryTextPath, (rangeInlineJSON) => {\n return {\n ...rangeInlineJSON,\n commentThreadChanges: appendChangeToChanges(rangeInlineJSON.commentThreadChanges, change),\n }\n })\n\n return doc;\n}\n\nfunction addBlockChangeToNodeAtPath(doc, path, change) {\n return overAtPath(doc, [path, \"changes\"], (changes) => appendChangeToChanges(changes, change));\n}\n\nfunction addSetKeyValuesChange(doc, change) {\n return editNodeWithUIDKeyValueWithFunction(doc, change.uid, \"key_value_changes\", (changes) => appendChangeToChanges(changes, change));\n}\n\n// function addInlineTextChangeToNodeWithUID(doc, uid, key, change) {\n// const nodePath = findNodePathByUid(doc, uid);\n// return overAtPath(doc, [...nodePath, key, \"changes\"], (changes) => appendChangeToChanges(changes, change));\n// }\n\nfunction addAddTableRowChangeToNodeWithUID(doc, change) {\n const nodePath = findNodePathByUid(doc, change.table_uid);\n\n doc = addInEmptyRowChanges(doc, nodePath);\n doc = overAtPath(doc, [...nodePath, \"rowChanges\"], R.insert(change.index, []))\n doc = overAtPath(doc, [...nodePath, \"rowChanges\", change.index], (changes) => appendChangeToChanges(changes, change));\n\n const firstRow = findNodeAtPath(doc, [...nodePath, \"rows\", 0]);\n const columnCount = firstRow.cells.length;\n const newRow = convertAllInlineNodesToRangeJSON(generateTableRowWithNTableCells(columnCount))\n\n doc = overAtPath(doc, [...nodePath, \"rows\"], R.insert(change.index, newRow))\n\n return doc;\n}\n\nfunction addDeleteTableRowChangeToNodeWithUID(doc, change) {\n const nodePath = findNodePathByUid(doc, change.table_uid);\n\n doc = addInEmptyRowChanges(doc, nodePath);\n doc = overAtPath(doc, [...nodePath, \"rowChanges\", change.index], (changes) => appendChangeToChanges(changes, change));\n return doc;\n}\n\nfunction addInEmptyRowChanges(doc, nodePath) {\n const rows = findNodeAtPath(doc, [...nodePath, \"rows\"]);\n const rowCount = rows.length;\n\n return overAtPath(doc, [...nodePath, \"rowChanges\"], R.defaultTo(R.repeat([], rowCount)))\n}\n\nfunction addAddTableColumnChange(doc, change) {\n const nodePath = findNodePathByUid(doc, change.table_uid);\n\n doc = addInEmptyColumnChanges(doc, nodePath);\n doc = overAtPath(doc, [...nodePath, \"columnChanges\"], R.insert(change.index, []));\n doc = overAtPath(doc, [...nodePath, \"columnChanges\", change.index], (changes) => appendChangeToChanges(changes, change));\n\n doc = overAtPath(doc, [...nodePath, \"rows\"], R.map((row: any) => { // TODO: Remove any when done\n const newCell = convertAllInlineNodesToRangeJSON(generateTableCell());\n return overAtPath(row, [\"cells\"], R.insert(change.index, newCell))\n }))\n\n return doc;\n}\n\nfunction addDeleteTableColumnChange(doc, change) {\n const nodePath = findNodePathByUid(doc, change.table_uid);\n\n doc = addInEmptyColumnChanges(doc, nodePath);\n doc = overAtPath(doc, [...nodePath, \"columnChanges\", change.index], (changes) => appendChangeToChanges(changes, change));\n return doc;\n}\n\nfunction addInEmptyColumnChanges(doc, nodePath) {\n const firstRow = findNodeAtPath(doc, [...nodePath, \"rows\", 0]);\n const columnCount = firstRow.cells.length;\n\n return overAtPath(doc, [...nodePath, \"columnChanges\"], R.defaultTo(R.repeat([], columnCount)))\n}\n\nfunction addTableCellSpanChangeToNodeWithUID(doc, change) {\n const nodePath = findNodePathByUid(doc, change.table_uid);\n return overAtPath(doc, [...nodePath, \"cellSpanChanges\"], (changes) => appendChangeToChanges(changes, change));\n}\n\nfunction deleteChangeWithID(doc, change) {\n const nodePath = deepFindPath(doc, (node) => node.change_id === change.comment_thread_change_id);\n return deleteAtPath(doc, nodePath);\n}\n\nfunction addCommentToChangeWithID(doc, parent_change_id, change) {\n const nodePath = deepFindPath(doc, (node) => node.change_id === parent_change_id);\n return overAtPath(doc, [...nodePath, \"comments\"], (changes) => appendChangeToChanges(changes, change));\n}\n\nfunction deleteCommentWithID(doc, comment_id, change) {\n const nodePath = deepFindPath(doc, (node) => node.comment_id === comment_id);\n return deleteAtPath(doc, nodePath);\n}\n\nfunction addSummaryOfEditChange(doc, change) {\n return overAtPath(doc, [\"summary_of_edits\"], (changes) => appendChangeToChanges(changes, change));\n}\n\nfunction deleteSummaryOfEditChange(doc, change) {\n return overAtPath(doc, [\"summary_of_edits\"], (changes) => changes.filter((changeN) => changeN.summary_of_edit_id !== change.summary_of_edit_id));\n}\n\nfunction addStudentFeedbackChange(doc, change) {\n return overAtPath(doc, [\"student_feedbacks\"], (changes) => appendChangeToChanges(changes, change));\n}\n\nfunction deleteStudentFeedbackChange(doc, change) {\n return overAtPath(doc, [\"student_feedbacks\"], (changes) => changes.filter((changeN) => changeN.student_feedback_id !== change.student_feedback_id));\n}\n\nfunction findAllChangePathsByChangeId(doc, change_id) {\n return deepFindAllPaths(doc, (obj) => obj.change_id === change_id);\n}\n\nfunction findAllPublishableChangePaths(doc) {\n return deepFindAllPaths(doc, (obj) => obj.change_id && isPublishableChange(obj));\n}\n\nfunction markChangeAtPathAccepted(doc, path, change) {\n return R.over(R.lensPath(path), R.merge({decision: decisionTypes.ACCEPTED, decision_at: change.created_at, decision_by: change.author_id}), doc);\n}\n\nfunction markChangeAtPathRejected(doc, path, change) {\n return R.over(R.lensPath(path), R.merge({decision: decisionTypes.REJECTED, decision_at: change.created_at, decision_by: change.author_id}), doc);\n}\n\nfunction markChangeAtPathPublished(doc, path, change) {\n return R.over(R.lensPath(path), R.merge({published_at: change.created_at, published_by: change.author_id}), doc);\n}\n\nfunction isMoveSummary(node) {\n return node.type === \"move_summary\";\n}\n\nfunction newMoveSummary(uid, editStage) {\n return {\n type: \"move_summary\",\n move_uid: uid,\n edit_stage: editStage,\n };\n}\n\nfunction findMoveSummariesPaths(doc) {\n return deepFindAllPaths(doc, isMoveSummary);\n}\n\nfunction removeMoveSummary(doc, uid, editStage) {\n const moveSummaryPaths = findMoveSummariesPaths(doc);\n const toRemovePaths = filterPathsByFunction(doc, moveSummaryPaths, (node) => node.moved_uid === uid && node.edit_stage === editStage);\n\n return toRemovePaths.reduce((redDoc, path) => deleteAtPath(redDoc, path), doc);\n}\n\n\nconst EditStage = {\n PUBLISHED: \"EditStage/PUBLISHED\",\n ACCEPTED: \"EditStage/ACCEPTED\",\n PROPOSED: \"EditStage/PROPOSED\",\n REJECTED: \"EditStage/REJECTED\",\n\n MORE_FINAL: \"EditStage/MORE_FINAL\",\n AS_FINAL: \"EditStage/AS_FINAL\",\n LESS_FINAL: \"EditStage/LESS_FINAL\",\n};\n\n\nfunction blockEditStageFromNode(node) {\n const lastBlockChange = R.last(node.changes || []);\n return lastBlockChange ? editStageFromChange(lastBlockChange) : EditStage.PUBLISHED;\n}\n\n\nfunction editStageFromChange(change) {\n if (change.published_at) {\n return EditStage.PUBLISHED;\n } else if (!change.is_suggestion) {\n return EditStage.ACCEPTED;\n } else if (change.decision) {\n return change.decision;\n } else {\n return EditStage.PROPOSED;\n }\n}\n\nconst EDIT_STAGE_VALUE_MAP = {\n [EditStage.REJECTED]: 0,\n [EditStage.PROPOSED]: 1,\n [EditStage.ACCEPTED]: 2,\n [EditStage.PUBLISHED]: 3,\n};\n\nfunction editStageComparison(editStage1, editStage2) {\n const value1 = EDIT_STAGE_VALUE_MAP[editStage1];\n const value2 = EDIT_STAGE_VALUE_MAP[editStage2];\n\n if (value1 > value2) {\n return EditStage.MORE_FINAL;\n } else if (value1 === value2) {\n return EditStage.AS_FINAL;\n } else {\n return EditStage.LESS_FINAL;\n }\n}\n\n\n////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////\n\nexport const weakMemoizedCloneAndNormalizeDoc = memoize(cloneAndNormalizeDoc);\nfunction cloneAndNormalizeDoc(doc) {\n return normalizeDocNode(_.cloneDeep(doc));\n}\n\n// const weakMemoizedCacheTableInfo = memoize(cacheTableInfo);\n// function cacheTableInfo(node, changesDisplayMode) {\nfunction applyTableChangesToNode(node, changesDisplayMode) {\n if (node.type !== \"table\") { return node; }\n\n const allRowCount = node.rows.length;\n const allColumnCount = node.rows[0]?.cells?.length || 0;\n\n const originalCellSpans = getOriginalCellSpans(node);\n\n const rowChangesByIndex = node.rowChanges || _.times(allRowCount, () => []);\n const columnChangesByIndex = node.columnChanges || _.times(allColumnCount, () => []);\n const cellSpanChanges = node.cellSpanChanges || [];\n\n const isRowRelevantByIndex = rowChangesByIndex.map(rowChanges => isRelevantRow(rowChanges, changesDisplayMode));\n const isColumnRelevantByIndex = columnChangesByIndex.map(columnChanges => isRelevantColumn(columnChanges, changesDisplayMode));\n\n const relevantCellSpanChanges = filterRelevantChanges(cellSpanChanges, changesDisplayMode);\n let collapsedCellSpans = convertCellSpanChangesToCellSpans(relevantCellSpanChanges, originalCellSpans);\n\n const markedRows = node.rows.map((row, rowIndex) => {\n const isRelevantRow = isRowRelevantByIndex[rowIndex];\n\n const markedCells = row.cells.map((cell, columnIndex) => {\n const isRelevantColumn = isColumnRelevantByIndex[columnIndex]\n\n let isRelevantCell;\n let rowSpan = cell.rowSpan || 1;\n let columnSpan = cell.columnSpan || 1;\n if (isRelevantRow && isRelevantColumn) {\n const overlappingCellSpan = isPointInSpan(rowIndex, columnIndex, collapsedCellSpans);\n\n if (overlappingCellSpan) {\n if (!overlappingCellSpan.claimed) {\n overlappingCellSpan.claimed = true;\n rowSpan = isRowRelevantByIndex.slice(rowIndex, overlappingCellSpan.rowRange.end + 1).filter(x => x === true).length\n columnSpan = isColumnRelevantByIndex.slice(columnIndex, overlappingCellSpan.columnRange.end + 1).filter(x => x === true).length\n isRelevantCell = true;\n } else {\n isRelevantCell = false;\n }\n } else {\n isRelevantCell = true;\n }\n } else {\n isRelevantCell = false;\n }\n\n return {\n ...cell,\n isRelevant: isRelevantCell,\n rowIndex,\n columnIndex,\n rowSpan,\n columnSpan,\n }\n })\n\n const filteredCells = markedCells.filter(markedCell => markedCell.isRelevant);\n\n return {\n ...row,\n index: rowIndex,\n cells: filteredCells,\n isRelevant: isRelevantRow,\n }\n })\n\n const filteredRows = markedRows.filter(markedRow => markedRow.isRelevant);\n\n const relevantRowIndices = isRowRelevantByIndex.map((item, index) => item && index).filter((item) => _.isNumber(item));\n const relevantColumnIndices = isColumnRelevantByIndex.map((item, index) => item && index).filter((item) => _.isNumber(item));\n\n return {\n ...node,\n rows: filteredRows,\n relevantColumnIndices,\n // changeSummaries: R.concat(columnChangeSummaries, cellSpanChangeSummaries),\n };\n}\n\nfunction applyBlockChangeHighlightsToNode(node, changesDisplayMode) {\n const {\n addDeleteChanges = [],\n } = node;\n\n const releventAddDeleteChanges = addDeleteChanges.filter((change) => isRelevantChange(change, changesDisplayMode))\n const acceptedDeleteChange = releventAddDeleteChanges.find((change) => isAcceptedChange(change) && change.type === DELETE_CONTENT);\n\n if (acceptedDeleteChange && changesDisplayMode !== changesDisplayModes.HIGHLIGHT_ALL_CHANGES) {\n return node\n }\n\n const highlightDeleteChange = releventAddDeleteChanges.find((change) => change.type === DELETE_CONTENT && isHighlightChange(change, changesDisplayMode));\n\n if (highlightDeleteChange) {\n return {\n ...node,\n blockChangeHighlight: highlightDeleteChange,\n }\n }\n\n const highlightAddChange = releventAddDeleteChanges.find((change) => change.type === ADD_CONTENT && isHighlightChange(change, changesDisplayMode));\n\n if (highlightAddChange) {\n return {\n ...node,\n blockChangeHighlight: highlightAddChange,\n }\n }\n\n return node;\n}\n\nfunction getOriginalCellSpans(table) {\n return (\n table.rows.flatMap((row, rowIndex) =>\n row.cells.flatMap((cell, columnIndex) => {\n const rowSpan = cell.rowSpan || 1\n const columnSpan = cell.columnSpan || 1\n if (rowSpan > 1 || columnSpan > 1) {\n return [\n {\n rowRange: {\n start: rowIndex,\n end: rowIndex + rowSpan - 1,\n },\n columnRange: {\n start: columnIndex,\n end: columnIndex + columnSpan - 1,\n },\n }\n ]\n } else {\n return [];\n }\n })\n )\n )\n}\n\nfunction convertCellSpanChangesToCellSpans(cellSpanChanges, originalSpans=[]) {\n return cellSpanChanges.reduce((cellSpans, cellSpanChange) => {\n const newSpan = {\n rowRange: cellSpanChange.rowRange,\n columnRange: cellSpanChange.columnRange,\n }\n\n let [overlappingSpans, restSpans] = R.partition((cellSpan) => doSpansOverlap(newSpan, cellSpan), cellSpans);\n\n switch (cellSpanChange.type) {\n case MERGE_TABLE_CELLS:\n const combinedSpan = [newSpan, ...overlappingSpans].reduce((spanA, spanB) => unionSpans(spanA, spanB));\n return [...restSpans, combinedSpan];\n case UNMERGE_TABLE_CELLS:\n return restSpans;\n default:\n return cellSpans;\n }\n }, originalSpans)\n}\n\n// TODO MOVE\nfunction isPointInSpan(rowIndex, columnIndex, collapsedCellSpans) {\n return collapsedCellSpans.find(cellSpan =>\n cellSpan.rowRange.start <= rowIndex\n && cellSpan.rowRange.end >= rowIndex\n && cellSpan.columnRange.start <= columnIndex\n && cellSpan.columnRange.end >= columnIndex\n )\n}\n\n// TODO MOVE\nfunction doSpansOverlap(spanA, spanB) {\n return rangesDoTouch(spanA.rowRange, spanB.rowRange) && rangesDoTouch(spanA.columnRange, spanB.columnRange)\n}\n\nfunction unionSpans(spanA, spanB) {\n return {\n rowRange: rangesUnion(spanA.rowRange, spanB.rowRange),\n columnRange: rangesUnion(spanA.columnRange, spanB.columnRange)\n }\n}\n\nfunction normalizedDocAllBlockChanges(normalizedDoc) {\n const allNodes = _.values(normalizedDoc);\n return _.compact(allNodes.map((nodeToAccept) => {\n return normalizedNodeBlockChanges(nodeToAccept);\n }).flat());\n}\n\nfunction normalizedNodeBlockChanges(node) {\n return _.compact(nodeBlockContentKeys(node).map((blockNodeKey) => node[blockNodeKey] ).flat()).filter((uidOrChange) => (typeof uidOrChange) === \"object\");\n}\n\nconst weakMemoizedAddSelectionMimic = memoize(addSelectionMimic);\nfunction addSelectionMimic(normalizedDoc, selectionMimic) {\n if (selectionMimic) {\n return R.set(\n R.lensPath([selectionMimic.uid, selectionMimic.contentKey, \"selectionMimics\"]),\n [selectionMimic],\n normalizedDoc,\n );\n } else {\n return normalizedDoc;\n }\n}\n\nconst weakMemoizedMoveNodeChangesGroupedByUid = memoize(moveNodeChangesGroupedByUid);\nfunction moveNodeChangesGroupedByUid(normalizedDoc) {\n const allMoveNodeChanges = normalizedDocAllBlockChanges(normalizedDoc).filter((change) => change.type === MOVE_NODE);\n return _.groupBy(allMoveNodeChanges, (change) => change.uid);\n}\n\nexport function isRelevantNode(node, changesDisplayMode) {\n return isRelevantFunctionGenerator(ADD_CONTENT, DELETE_CONTENT)(node.addDeleteChanges || [], changesDisplayMode);\n}\n\nexport const isRelevantRow = isRelevantFunctionGenerator(ADD_TABLE_ROW, DELETE_TABLE_ROW);\n\nexport const isRelevantColumn = isRelevantFunctionGenerator(ADD_TABLE_COLUMN, DELETE_TABLE_COLUMN);\n\nexport function isRelevantFunctionGenerator(addChangeType, deleteChangeType) {\n return (changes, changesDisplayMode) => {\n const allAddChanges = changes.filter((change) => change.type === addChangeType);\n const relevantChanges = changes.filter((change) => isRelevantChange(change, changesDisplayMode));\n const relevantAddChanges = relevantChanges.filter((change) => change.type === addChangeType);\n const relevantDeleteChanges = relevantChanges.filter((change) => change.type === deleteChangeType);\n\n return (\n (allAddChanges.length === 0 || relevantAddChanges.length > 0)\n && (relevantDeleteChanges.length === 0 || relevantDeleteChanges.every((change) => isHighlightChange(change, changesDisplayMode)))\n );\n };\n}\n\nfunction filterRelevantChanges(changes, changesDisplayMode) {\n return changes.filter((change) => isRelevantChange(change, changesDisplayMode));\n}\n\nexport function isOpenSuggestionChange(change) {\n return change.is_suggestion && !change.decision;\n}\n\nexport function isAcceptedChange(change) {\n return !change.is_suggestion || change.decision === decisionTypes.ACCEPTED;\n}\n\nexport function isRejectedChange(change) {\n return change.decision === decisionTypes.REJECTED;\n}\n\nexport function isPublishedChange(change) {\n return change.published_at;\n}\n\nfunction isPublishableChange(change) {\n return isAcceptedChange(change) && !isPublishedChange(change);\n}\n\nexport function isRelevantChange(change, changesDisplayMode) {\n switch (changesDisplayMode) {\n case changesDisplayModes.ONLY_PUBLISHED:\n return isPublishedChange(change);\n case changesDisplayModes.HIDE_SUGGESTIONS:\n return isAcceptedChange(change);\n case changesDisplayModes.HIGHLIGHT_SUGGESTIONS:\n case changesDisplayModes.HIGHLIGHT_ALL_CHANGES:\n return !isRejectedChange(change);\n default:\n // TODO ADD ERROR WARNING\n }\n}\n\nexport function isHighlightChange(change, changesDisplayMode) {\n switch (changesDisplayMode) {\n case changesDisplayModes.ONLY_PUBLISHED:\n case changesDisplayModes.HIDE_SUGGESTIONS:\n return false;\n case changesDisplayModes.HIGHLIGHT_SUGGESTIONS:\n return isOpenSuggestionChange(change);\n case changesDisplayModes.HIGHLIGHT_ALL_CHANGES:\n return !isRejectedChange(change) && !isPublishedChange(change);\n default:\n // TODO ADD ERROR WARNING\n }\n}\n\nexport function isRelevantHighlightChange(change, changesDisplayMode) {\n return isRelevantChange(change, changesDisplayMode)\n && isHighlightChange(change, changesDisplayMode);\n}\n\nexport function backgroundStyleFromNode(props) {\n const blockChangeHighlight = props.blockChangeHighlight;\n const colorLookup = props.editingContext.colorLookup;\n\n switch (props.type) {\n case \"paragraph\":\n switch (blockChangeHighlight?.type) {\n case \"DELETE_CONTENT\":\n case \"MOVE_CONTENT\":\n case \"ADD_CONTENT\":\n default:\n return {};\n }\n\n break;\n case \"listItem\":\n switch (blockChangeHighlight?.type) {\n case \"DELETE_CONTENT\":\n case \"MOVE_CONTENT\":\n case \"ADD_CONTENT\":\n default:\n return {};\n }\n\n break;\n default:\n switch (blockChangeHighlight?.type) {\n case \"DELETE_CONTENT\":\n // STRIKE THROUGH PARAGRAPH SYMBOL\n return {\n backgroundImage: `url(\"data:image/svg+xml,%3Csvg width='52' height='26' viewBox='0 0 52 26' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='rgb(${colorLookup[blockChangeHighlight.author_id]})' fill-opacity='0.4'%3E%3Cpath d='M10 10c0-2.21-1.79-4-4-4-3.314 0-6-2.686-6-6h2c0 2.21 1.79 4 4 4 3.314 0 6 2.686 6 6 0 2.21 1.79 4 4 4 3.314 0 6 2.686 6 6 0 2.21 1.79 4 4 4v2c-3.314 0-6-2.686-6-6 0-2.21-1.79-4-4-4-3.314 0-6-2.686-6-6zm25.464-1.95l8.486 8.486-1.414 1.414-8.486-8.486 1.414-1.414z' /%3E%3C/g%3E%3C/g%3E%3C/svg%3E\")`\n };\n case \"MOVE_CONTENT\":\n return {};\n case \"ADD_CONTENT\":\n // PARAGRAPH SYMBOL\n return {\n backgroundColor: `rgba(${colorLookup[blockChangeHighlight.author_id]},0.25)`\n };\n default:\n return {};\n }\n\n break;\n }\n\n // return backgroundStyleFromChangeSummaries(\n // props.changeSummaries || [],\n // props.editingContext.changesDisplayMode,\n // props.editingContext.colorLookup,\n // props.userContext.id,\n // [NEW_COMMENT_THREAD, EDIT_COMMENT].includes(props.currentMenu?.menu) && props.type !== \"paragraph\",\n // );\n}\n\nfunction backgroundStyleFromChangeSummaries(changes, changesDisplayMode, colorLookup, currentAuthorId, isCurrentlyEditingNodeComment) {\n const highlightChangeSummaries = changes.filter((change) => {\n return isRelevantHighlightChange(change, changesDisplayMode);\n });\n\n const backgroundStyles: any = {};\n\n const isNewNode = highlightChangeSummaries.find((change) => change.type === ADDED_NODE);\n if (isNewNode) {\n // `url(\\\"data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%239C92AC' fill-opacity='0.4'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\")`\n backgroundStyles.backgroundColor = `rgba(${colorLookup[isNewNode.author_id]},0.25)`;\n }\n\n const isMovedNode = highlightChangeSummaries.find((change) => change.type === MOVED_NODE);\n if (isMovedNode) {\n backgroundStyles.borderLeft = `5px solid rgba(${colorLookup[isMovedNode.author_id]},0.5)`;\n }\n\n const isDeletedNode = highlightChangeSummaries.find((change) => change.type === DELETED_NODE);\n if (isDeletedNode) {\n backgroundStyles.backgroundImage = `url(\"data:image/svg+xml,%3Csvg width='52' height='26' viewBox='0 0 52 26' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='rgb(${colorLookup[isDeletedNode.author_id]})' fill-opacity='0.4'%3E%3Cpath d='M10 10c0-2.21-1.79-4-4-4-3.314 0-6-2.686-6-6h2c0 2.21 1.79 4 4 4 3.314 0 6 2.686 6 6 0 2.21 1.79 4 4 4 3.314 0 6 2.686 6 6 0 2.21 1.79 4 4 4v2c-3.314 0-6-2.686-6-6 0-2.21-1.79-4-4-4-3.314 0-6-2.686-6-6zm25.464-1.95l8.486 8.486-1.414 1.414-8.486-8.486 1.414-1.414z' /%3E%3C/g%3E%3C/g%3E%3C/svg%3E\")`;\n }\n\n const isCommentedNode = highlightChangeSummaries.find((change) => change.type === OPENED_NODE_COMMENT_THREAD);\n if (isCommentedNode) { // Existing comment\n backgroundStyles.border = `5px solid rgba(\n ${colorLookup[isCommentedNode.author_id]},\n ${isCurrentlyEditingNodeComment ? \"0.5\" : \"0.25\"})`;\n } else if (isCurrentlyEditingNodeComment) { // New Comment\n backgroundStyles.border = `5px solid rgba(${colorLookup[currentAuthorId]},0.5)`;\n }\n\n return backgroundStyles;\n}\n\nexport function clotheChange(nakedChange, author, is_tracking) {\n return {\n author_id: author.id,\n author_full_name: `${author.first_name} ${author.last_name}`,\n is_suggestion: is_tracking,\n created_at: (new Date()).getTime(),\n ...nakedChange,\n };\n}\n\nexport function newChange(type, detail) {\n return {\n change_id: generateUUID(),\n type: type,\n ...detail,\n };\n}\n\nexport function newAddNodeChange(node, parent_uid, parent_key, parent_index) {\n return newChange(ADD_NODE, {\n uid: node.uid,\n node: convertAllInlineNodesToRangeJSON(node),\n parent_uid: parent_uid,\n parent_key: parent_key,\n parent_index: parent_index,\n });\n}\n\nexport function newAddTextNodesBeforeNodeChange(sibling_uid, styledText, nodes=[]) {\n return newChange(ADD_TEXT_AND_NODES_BEFORE_NODE, {\n sibling_uid: sibling_uid,\n styledText: styledText,\n nodes: nodes.map(node => convertAllInlineNodesToRangeJSON(node)),\n });\n}\n\nexport function newAddTextAndNodesToNodeChange(parent_uid, parent_key, styledText, nodes=[]) {\n return newChange(ADD_TEXT_AND_NODES_TO_NODE, {\n parent_uid: parent_uid,\n parent_key: parent_key,\n styledText: styledText,\n nodes: nodes.map(node => convertAllInlineNodesToRangeJSON(node)),\n });\n}\n\nexport function newDeleteNodeChange(uid) {\n return newChange(DELETE_NODE, {\n uid: uid,\n });\n}\n\nexport function newChangeTextAndNodesChange(selection, styledText, nodes=[]) {\n return newChange(CHANGE_TEXT_AND_NODES, {\n selection: selection,\n styledText: styledText,\n nodes: nodes.map(node => convertAllInlineNodesToRangeJSON(node)),\n })\n}\n\nexport function newMoveNodeChange(uid, parent_uid, parent_key, parent_index) {\n return newChange(MOVE_NODE, {\n uid: uid,\n parent_uid: parent_uid,\n parent_key: parent_key,\n parent_index: parent_index,\n });\n}\n\nexport function newMoveNodeUpChange(uid) {\n return newChange(MOVE_NODE_UP, {\n uid: uid,\n });\n}\n\nexport function newMoveNodeDownChange(uid) {\n return newChange(MOVE_NODE_DOWN, {\n uid: uid,\n });\n}\n\nexport function newSetKeysValuesChange(uid, keys_and_values) {\n return newChange(SET_KEYS_VALUES, {\n uid: uid,\n keys_and_values: keys_and_values,\n });\n}\n\nexport function newSetKeyValueChange(uid, key, value) {\n return newSetKeysValuesChange(uid, {[key]: value});\n}\n\nexport function newAddStyleChange(selection, style, args = null) {\n const detail: any = {\n selection: selection,\n style: style,\n };\n\n if (args) {\n detail.args = args;\n }\n\n return newChange(ADD_STYLE, detail);\n}\n\nexport function newDeleteStyleChange(selection, style) {\n return newChange(DELETE_STYLE, {\n selection: selection,\n style: style,\n });\n}\n\nexport function newAddTableRowChange(table_uid, index: number) {\n return newChange(ADD_TABLE_ROW, {\n table_uid: table_uid,\n index: index,\n });\n}\n\nexport function newDeleteTableRowChange(table_uid, index: number) {\n return newChange(DELETE_TABLE_ROW, {\n table_uid: table_uid,\n index: index,\n });\n}\n\nexport function newAddTableColumnChange(table_uid, index: number) {\n return newChange(ADD_TABLE_COLUMN, {\n table_uid: table_uid,\n index: index,\n });\n}\n\nexport function newDeleteTableColumnChange(table_uid, index: number) {\n return newChange(DELETE_TABLE_COLUMN, {\n table_uid: table_uid,\n index: index,\n });\n}\n\nexport function newMergeTableCells(table_uid, rowRange, columnRange) {\n return newChange(MERGE_TABLE_CELLS, {\n table_uid: table_uid,\n rowRange: rowRange,\n columnRange: columnRange,\n });\n}\n\nexport function newUnmergeTableCells(table_uid, rowRange, columnRange) {\n return newChange(UNMERGE_TABLE_CELLS, {\n table_uid: table_uid,\n rowRange: rowRange,\n columnRange: columnRange,\n });\n}\n\nexport function newAcceptChangesChange(change_id) {\n return newChange(ACCEPT_CHANGES, {\n accept_change_id: change_id,\n });\n}\n\nexport function newRejectChangesChange(change_id) {\n return newChange(REJECT_CHANGES, {\n reject_change_id: change_id,\n });\n}\n\nexport function newPublishChange() {\n return newChange(PUBLISH, {});\n}\n\nexport function newAddCommentThreadChange(selection, text) {\n return newChange(ADD_COMMENT_THREAD, {\n selection: selection,\n text: text,\n comment_thread_id: generateUUID(), // GET RID OF?\n is_suggestion: true,\n });\n}\n\nexport function newCloseCommentThreadChange(comment_thread_change_id) {\n return newChange(CLOSE_COMMENT_THREAD, {\n comment_thread_change_id: comment_thread_change_id,\n });\n}\n\nexport function newAddChangeCommentChange(parent_change_id, text) {\n return newChange(ADD_CHANGE_COMMENT, {\n parent_change_id: parent_change_id,\n comment_id: generateUUID(),\n text: text,\n });\n}\n\nexport function newDeleteChangeCommentChange(comment_id) {\n return newChange(DELETE_CHANGE_COMMENT, {\n comment_id: comment_id,\n });\n}\n\nexport function newAddSummaryOfEditChange(uid, key, index, text) {\n return newChange(ADD_SUMMARY_OF_EDIT, {\n uid: uid,\n key: key,\n index: index,\n summary_of_edit_id: generateUUID(),\n text: text,\n });\n}\n\nexport function newDeleteSummaryOfEditChange(summary_of_edit_id) {\n return newChange(DELETE_SUMMARY_OF_EDIT, {\n summary_of_edit_id: summary_of_edit_id,\n });\n}\n\nexport function newAddStudentFeedbackChange(text) {\n return newChange(ADD_STUDENT_FEEDBACK, {\n student_feedback_id: generateUUID(),\n text: text,\n });\n}\n\nexport function newDeleteStudentFeedbackChange(student_feedback_id) {\n return newChange(DELETE_STUDENT_FEEDBACK, {\n student_feedback_id: student_feedback_id,\n });\n}\n\nexport function canCompressChanges(change1, change2) {\n return (\n change1.user_id === change2.user_id &&\n change1.is_suggestion === change2.is_suggestion &&\n change1.decision === change2.decision &&\n change1.published_at === change2.published_at\n )\n}\n\nconst changeMetadataFields = [\n \"created_at\",\n \"author_id\",\n \"author_full_name\",\n \"is_suggestion\",\n \"comments\",\n \"decision\",\n \"decision_at\",\n \"decision_by\",\n \"published_at\",\n \"published_by\",\n]\n\nfunction changeMetadata(change) {\n return R.pick(changeMetadataFields, change);\n}\n\n//Given two Changes returns a compressed Change if possible, otherwise null\nexport function compressTwoChangesIfPossible(change1, change2) {\n if (change1.user_id !== change2.user_id || change1.is_suggestion !== change2.is_suggestion ) {\n return null;\n }\n\n switch (change1.type) {\n case ADD_STYLE:\n case DELETE_STYLE:\n switch (change2.type) {\n case ADD_STYLE:\n case DELETE_STYLE:\n if (\n change1.type === change2.type\n && change1.uid === change2.uid\n && change1.key === change2.key\n && change1.style === change2.style\n && _.isEqual(change1.args, change1.args)\n && rangesDoTouch(change1.range, change2.range)\n ) {\n return {\n ...change1,\n range: {\n start: Math.min(change1.range.start, change2.range.start),\n end: Math.max(change1.range.end, change2.range.end),\n },\n };\n } else {\n return null;\n }\n break;\n default:\n return null;\n }\n break;\n case MOVE_NODE:\n switch (change2.type) {\n case MOVE_NODE:\n if (\n change1.uid === change2.uid\n ) {\n if (\n change1.parent_uid === change2.parent_uid\n && change1.parent_key === change2.parent_key\n && change1.parent_index < change2.parent_index\n ) {\n return {\n ...change2,\n parent_index: change2.parent_index - 1,\n };\n } else {\n return change2;\n }\n }\n break;\n default:\n return null;\n }\n default:\n return null;\n }\n}\n\nfunction changeTextAfterRange(change) {\n return {\n start: change.range.start,\n end: change.range.start + change.text.length,\n };\n}\n\nexport function changeSummaryDescription(changeSummary, node) {\n switch (changeSummary.type) {\n case ADD_CONTENT:\n case DELETE_CONTENT:\n const firstAddTextChanges = changeSummary.allChanges.find(change => change.type === ADD_CONTENT && change.text);\n const firstDeleteTextChanges = changeSummary.allChanges.find(change => change.type === DELETE_CONTENT && change.text);\n const firstAddNodeChanges = changeSummary.allChanges.find(change => change.type === ADD_CONTENT && change.changeNodeType);\n const firstDeleteNodeChanges = changeSummary.allChanges.find(change => change.type === DELETE_CONTENT && change.changeNodeType);\n\n if (firstAddTextChanges) {\n if (firstDeleteTextChanges) {\n return `Changed Text: ${firstAddTextChanges.text}`;\n } else {\n return `Added: ${firstAddTextChanges.text}`;\n }\n } else if (firstDeleteTextChanges) {\n return `Deleted: ${firstDeleteTextChanges.text}`;\n } else if (firstAddNodeChanges) {\n return `Added Node: ${firstAddNodeChanges.changeNodeType}`;\n } else if (firstDeleteNodeChanges) {\n return `Deleted Node: ${firstDeleteNodeChanges.changeNodeType}`;\n }\n case ADDED_NODE:\n return `Added Node`;\n case DELETED_NODE:\n return `Deleted Node`;\n case CHANGED_TEXT:\n return `Changed Text: ${changeSummary.text}`;\n case ADDED_TEXT:\n return `Added: ${changeSummary.text}`;\n case DELETED_TEXT:\n return `Deleted: ${changeSummary.text}`;\n case MOVE_NODE:\n return `Moved Node`;\n case SET_KEYS_VALUES:\n return `Changed Metadata: ${Object.keys(changeSummary.keys_and_values).join(\", \")}`;\n case ADD_STYLE:\n return `Added ${changeSummary.style}: ${changeSummary.text}`;\n case DELETE_STYLE:\n return `Removed ${changeSummary.style}: ${changeSummary.text}`;\n case ADD_TABLE_ROW:\n return \"Added Row\";\n case DELETE_TABLE_ROW:\n return \"Deleted Row\";\n case ADD_TABLE_COLUMN:\n return \"Added Column\";\n case DELETE_TABLE_COLUMN:\n return \"Deleted Column\";\n case MERGE_TABLE_CELLS:\n return \"Merged Cells\";\n case UNMERGE_TABLE_CELLS:\n return \"Unmerged Cells\";\n default:\n return \"Change\";\n }\n}\n\nexport function applyInlineChangesToRangeInlineJson(rangeInlineJSON, changesDisplayMode: ChangesDisplayMode) {\n const {\n addDeleteChanges = [],\n styleChanges = [],\n commentThreadChanges = [],\n } = rangeInlineJSON;\n\n let {\n styleRanges = [],\n inlineIrrlevantRanges = [],\n inlineChangeHighlights = [],\n } = rangeInlineJSON;\n\n addDeleteChanges.forEach((change) => {\n if (isRelevantChange(change, changesDisplayMode)) {\n if (isHighlightChange(change, changesDisplayMode)) {\n inlineChangeHighlights.push(\n {\n type: change.type,\n change_id: change.change_id,\n range: change.range,\n author_id: change.author_id,\n }\n );\n } else {\n if (change.type === DELETE_CONTENT) {\n inlineIrrlevantRanges.push(\n {\n type: HIDE_TEXT,\n change_id: change.change_id,\n range: change.range,\n }\n );\n } else {\n return null;\n }\n }\n } else {\n if (change.type === ADD_CONTENT) {\n inlineIrrlevantRanges.push(\n {\n type: HIDE_TEXT,\n change_id: change.change_id,\n range: change.range,\n }\n );\n } else {\n return null;\n }\n }\n });\n\n styleChanges.forEach((change) => {\n if (isRelevantChange(change, changesDisplayMode)) {\n switch (change.type) {\n case ADD_STYLE:\n const newStyleRange: any = {\n type: change.style,\n range: {...change.range},\n };\n\n if (change.args) {\n newStyleRange.args = {...change.args};\n }\n\n styleRanges = styleRanges.flatMap((oldStyle) => {\n if (oldStyle.type === newStyleRange.type && rangesDoTouch(oldStyle.range, newStyleRange.range)) {\n const newRanges = rangesExcept(oldStyle.range, newStyleRange.range);\n return newRanges.map(newRange => ({...oldStyle, range: newRange}));\n } else {\n return [oldStyle];\n }\n })\n\n styleRanges = styleRanges.concat([newStyleRange]);\n\n if (isHighlightChange(change, changesDisplayMode) && change.style !== \"color\") {\n inlineChangeHighlights.push(\n {\n type: ADDED_STYLE,\n change_id: change.change_id,\n range: change.range,\n style: change.style,\n author_id: change.author_id,\n }\n )\n }\n\n break;\n case DELETE_STYLE:\n styleRanges = _.compact(_.flatten(styleRanges.map((styleRange) => {\n if (styleRange.type === change.style) {\n if (styleRange.range.start < change.range.start) {\n if (styleRange.range.end > change.range.end) {\n return [\n {\n ...styleRange,\n range: {\n start: styleRange.range.start,\n end: change.range.start,\n },\n },\n {\n ...styleRange,\n range: {\n start: change.range.end,\n end: styleRange.range.end,\n },\n },\n ];\n\n } else if (styleRange.range.end > change.range.start) {\n // styleRange.range.end = change.range.start\n return R.assocPath([\"range\", \"end\"], change.range.start, styleRange);\n }\n } else {\n if (styleRange.range.end <= change.range.end) {\n return null;\n } else if (styleRange.range.start < change.range.end) {\n // styleRange.range.start = change.range.end\n return R.assocPath([\"range\", \"start\"], change.range.end, styleRange);\n }\n }\n }\n\n return styleRange;\n })));\n\n if (isHighlightChange(change, changesDisplayMode)) {\n inlineChangeHighlights.push(\n {\n type: DELETED_STYLE,\n change_id: change.change_id,\n range: change.range,\n style: change.style,\n author_id: change.author_id,\n }\n )\n }\n\n break;\n default:\n // ADD ERROR\n break;\n }\n }\n });\n\n commentThreadChanges.forEach((change) => {\n if (isRelevantChange(change, changesDisplayMode) && isHighlightChange(change, changesDisplayMode)) {\n inlineChangeHighlights.push(\n {\n type: change.type,\n change_id: change.change_id,\n range: change.range,\n author_id: change.author_id,\n }\n );\n }\n });\n\n return {\n ...rangeInlineJSON,\n styleRanges,\n inlineIrrlevantRanges,\n inlineChangeHighlights,\n }\n}\n\n//////////////////////////////////\n\nexport function computeSpacedChangeSummaries(doc, currentMenu, currentDocSelection: DocSelection, currentPrioritizedOffsetChangeSummary) {\n let changeSummaries: (ChangeSummary | NewCommentThreadChangeSummary)[] = Array.from(weakMemoizedCollectAllSuggestionChanges(doc).values()).map((arr) => ({...arr[0], allChanges: arr}));\n\n if (currentMenu?.menu === NEW_COMMENT_THREAD) {\n const newCommentThread = {\n type: \"NEW_COMMENT_THREAD\" as const,\n change_set_id: \"newCommentThread\" as const,\n selection: currentDocSelection,\n uid: currentDocSelection.start.uid,\n contentKey: currentDocSelection.start.contentKey,\n range: {\n start: currentDocSelection.start.index,\n end: currentDocSelection.end.index,\n },\n variantId: currentDocSelection.variantId,\n }\n\n changeSummaries = changeSummaries.concat([newCommentThread]);\n }\n\n const htmlDocument = window.document;\n const bodyElement = htmlDocument.getElementById(\"doc-body-wrapper\")\n const bodyOffset = bodyElement ? bodyElement.getBoundingClientRect().top : 70;\n\n let desiredOffestChangeSummaries = changeSummaries.map((changeSummary) => {\n const nodeElement = htmlDocument.getElementById(changeSummary.uid);\n const changeSummaryElement = htmlDocument.getElementById(`changeSummary--${changeSummary.change_set_id}`);\n\n return {\n changeSummary: changeSummary,\n desiredOffset: nodeElement ? nodeElement.getBoundingClientRect().top - bodyOffset : -1000000,\n height: changeSummaryElement?.clientHeight,\n prioritizeOffset: false,\n };\n });\n\n desiredOffestChangeSummaries = desiredOffestChangeSummaries.sort((a, b) => {\n const offsetDiff = a.desiredOffset - b.desiredOffset;\n\n if (offsetDiff !== 0) {\n return offsetDiff;\n } else {\n return (a.changeSummary.range?.start || 0) - (b.changeSummary.range?.start || 0);\n }\n });\n\n let prioritizeOffsetIndex = -1;\n if (currentMenu?.menu === NEW_COMMENT_THREAD) {\n prioritizeOffsetIndex = desiredOffestChangeSummaries.findIndex((offsetChangeSummary) => offsetChangeSummary.changeSummary.type === \"NEW_COMMENT_THREAD\")\n } else if (currentMenu?.menu === EDIT_COMMENT) {\n prioritizeOffsetIndex = R.findIndex((offsetChangeSummary) => (\n offsetChangeSummary.changeSummary.change_set_id === currentMenu.change_set_id\n ), desiredOffestChangeSummaries);\n console.log(prioritizeOffsetIndex)\n } else if (currentDocSelection) {\n prioritizeOffsetIndex = R.findLastIndex((offsetChangeSummary) => (\n offsetChangeSummary.changeSummary.uid === currentDocSelection.start?.uid\n && offsetChangeSummary.changeSummary.range?.start <= currentDocSelection.start?.index\n ), desiredOffestChangeSummaries);\n } else if(currentPrioritizedOffsetChangeSummary) {\n prioritizeOffsetIndex = R.findIndex((offsetChangeSummary) => (\n offsetChangeSummary.changeSummary.change_set_id === currentPrioritizedOffsetChangeSummary.change_set_id\n ), desiredOffestChangeSummaries);\n }\n\n if (prioritizeOffsetIndex >= 0) {\n desiredOffestChangeSummaries[prioritizeOffsetIndex].prioritizeOffset = true;\n }\n\n const MARGIN = 10;\n const DEFAULT_HEIGHT = 120;\n\n // ADJUST TO NOT CONFILT\n let offsetChangeSummaries = desiredOffestChangeSummaries.reduce(({minOffset, returnChangeSummaries}, offsetChangeSummary) => {\n let offset = 0;\n let newMinOffset = minOffset;\n if (offsetChangeSummary.desiredOffset < 0) {\n offset = offsetChangeSummary.desiredOffset;\n } else if (offsetChangeSummary.prioritizeOffset) {\n offset = offsetChangeSummary.desiredOffset;\n newMinOffset = offset + MARGIN + (offsetChangeSummary.height || DEFAULT_HEIGHT);\n } else {\n offset = Math.max(minOffset, offsetChangeSummary.desiredOffset);\n newMinOffset = offset + MARGIN + (offsetChangeSummary.height || DEFAULT_HEIGHT);\n }\n\n return {minOffset: newMinOffset, returnChangeSummaries: [...returnChangeSummaries, {...offsetChangeSummary, offset: offset}]};\n }, {minOffset: 0, returnChangeSummaries: [] as OffsetChangeSummary[]}).returnChangeSummaries;\n\n // ADJUST AROUND PRIORITY\n offsetChangeSummaries = offsetChangeSummaries.reduceRight(({maxOffset, returnChangeSummaries}, offsetChangeSummary) => {\n let offset = 0;\n let newMaxOffset = maxOffset;\n if (offsetChangeSummary.desiredOffset < 0) {\n offset = offsetChangeSummary.desiredOffset;\n } else if (offsetChangeSummary.prioritizeOffset) {\n offset = offsetChangeSummary.desiredOffset;\n newMaxOffset = offset - MARGIN;\n } else {\n const offsetChangeSummaryHeight = (offsetChangeSummary.height || DEFAULT_HEIGHT);\n const possibleMaxHeight = maxOffset - offsetChangeSummaryHeight;\n\n offset = Math.min(possibleMaxHeight, offsetChangeSummary.offset);\n newMaxOffset = offset - MARGIN;\n }\n\n return {maxOffset: newMaxOffset, returnChangeSummaries: [...returnChangeSummaries, {...offsetChangeSummary, offset: offset}]};\n }, {maxOffset: Number.MAX_SAFE_INTEGER, returnChangeSummaries: []}).returnChangeSummaries;\n\n return offsetChangeSummaries;\n}\n\n/////////////////////////\n/////////////////////////\n\nexport function stripExtraChangeDataFields(doc) {\n return docMapAllNodes(doc, (node) => (\n R.omit([\n \"_newStartWith\",\n \"editIndex\",\n \"listIndentation\",\n \"listUid\",\n \"blockChangeHighlight\",\n \"addDeleteChanges\",\n \"key_value_changes\",\n \"styleChanges\",\n \"rowChanges\",\n \"columnChanges\",\n \"cellSpanChanges\",\n \"contentListNodes\",\n \"contentItemsListNodes\",\n \"contentCategoriesListNodes\",\n \"imagesListNodes\",\n \"cdqFeaturesListNodes\",\n ], node as any) as any // TODO: Remove any\n ))\n}\n","import * as R from \"ramda\";\n\nconst colors: Array<[number, number, number]> = [\n [255,0,0], // Red\n [0,0,255], // Blue\n [0,128,0], // Green\n [255,255,0], // Yellow\n [128,0,128], // Purple\n [255,165,0], // Orange\n [0,255,255], // Aqua\n [255,0,255], // Fuchsia\n [0,255,0], // Lime\n [128,0,0], // Maroon\n [0,128,128], // Teal\n [0,0,128], //Navy\n];\n\nexport function generateColorLookup(keys: Array<number>) {\n const repeatCount = Math.ceil(keys.length / colors.length);\n const longEnoughColorList = R.unnest(R.repeat(colors, repeatCount));\n\n return R.zipObj(keys, longEnoughColorList);\n}\n","import * as pluralize from 'pluralize'\n\nfunction generateReasoningToolStateFunctions(type: string, addState: AddStateFunction, rootUID: string) {\n const pluralType = pluralize.plural(type)\n\n return {\n add: (uid: string, data={}) => {\n addState({\n [uid]: {type, uid, ...data},\n [rootUID]: {[pluralType]: (nodeUIDs=[]) => [...nodeUIDs, uid]}\n })\n },\n delete: (uid: string) => {\n addState({\n [rootUID]: {[pluralType]: (nodeUIDs=[]) => nodeUIDs.filter(nodeUID => nodeUID !== uid)}\n })\n },\n update: (uid: string, data={}) => {\n addState({\n [uid]: data\n })\n }\n }\n}\n\nexport function generateNotesStateFunctions(addState: AddStateFunction, rootUID: string) {\n const noteFunctions = generateReasoningToolStateFunctions(\"note\", addState, rootUID)\n\n return {\n addNote: noteFunctions.add,\n deleteNote: noteFunctions.delete,\n updateNote: noteFunctions.update,\n }\n}\n\nexport function generateFindingsStateFunctions(addState: AddStateFunction, rootUID: string) {\n const findingFunctions = generateReasoningToolStateFunctions(\"finding\", addState, rootUID)\n\n return {\n addFinding: findingFunctions.add,\n deleteFinding: findingFunctions.delete,\n updateFinding: findingFunctions.update,\n }\n}\n\nexport function generateDiagnosesStateFunctions(addState: AddStateFunction, rootUID: string) {\n const diagnosisFunctions = generateReasoningToolStateFunctions(\"diagnosis\", addState, rootUID)\n\n return {\n addDiagnosis: diagnosisFunctions.add,\n deleteDiagnosis: diagnosisFunctions.delete,\n updateDiagnosis: diagnosisFunctions.update,\n setIsDangerousDiagnosis: (uid: string, value: boolean) => {\n addState({\n [uid]: {isDangerousDiagnosis: value}\n })\n },\n setIsLeadingDiagnosis: (uid: string) => {\n addState({\n [rootUID]: {leadingDiagnosis: uid}\n })\n }\n }\n}\n","import memoize from \"memoize-weak\";\n\nimport { uniq } from \"lodash\";\n\nimport { displayModes } from \"./displayMode\";\nimport { generateColorLookup } from \"./colors\";\n\nimport { changesDisplayModes } from \"./changes\";\n\nimport {\n generateNotesStateFunctions,\n generateFindingsStateFunctions,\n generateDiagnosesStateFunctions,\n} from \"./generateReasoningToolStateFunctions\";\n\nexport const weakMemoizedGenerateCurrentDocument = memoize(generateCurrentDocument);\nexport function generateCurrentDocument(\n document: Document,\n docType: DocType | undefined, // TODO: Narrow down\n reload: () => void,\n) {\n return {\n ...document,\n docType,\n reload,\n };\n}\n\nexport const weakMemoizedGenerateCurrentVersion = memoize(generateCurrentVersion);\nexport function generateCurrentVersion(\n id: number,\n published: boolean,\n awsFolderUrl: string,\n coverImage: string,\n onlyOneUncollapsedSection: boolean,\n disableBookmarks: boolean,\n reload: () => void,\n) {\n return {\n id,\n published,\n awsFolderUrl,\n localImageURL: (name: string) => `${awsFolderUrl}/compressed/images/${name}`,\n localAudioURL: (name: string) => `${awsFolderUrl}/original/audios/${name}`,\n localVideoURL: (name: string) => `${awsFolderUrl}/original/videos/${name}`,\n localCaptionURL: (name: string) => `${awsFolderUrl}/original/captions/${name}`,\n coverImage,\n onlyOneUncollapsedSection,\n disableBookmarks,\n reload,\n };\n}\n\nexport const weakMemoizedGenerateCurrentUser = memoize(generateCurrentUser);\nexport function generateCurrentUser(\n currentUser: User,\n currentGroupRoleDefinition: GroupRoleDefinition | undefined,\n isAdmin: boolean,\n sessionId: number | undefined, // TODO: Remove undefined\n permissions: AqPermissions,\n loadDocumentUserState: () => void,\n addStateDocumentUserState: (state: UserStateStripped, callback?: () => void) => void,\n destroyDocumentUserState: () => void,\n submitExam: ((successNotice: string) => void) | undefined, // TODO: Remove undefined\n pauseExam: (() => void) | undefined, // TODO: Remove undefined\n logEvent: (logType: string, args?: Record<string, any>) => void,\n rootUID: string,\n) {\n return {\n id: currentUser.id,\n firstName: currentUser.first_name,\n lastName: currentUser.last_name,\n email: currentUser.email,\n groupRoleDefinition: currentGroupRoleDefinition,\n isAdmin: isAdmin,\n sessionId: sessionId,\n permissions: permissions,\n addState: addStateDocumentUserState,\n resetState: () => {\n destroyDocumentUserState(),\n loadDocumentUserState();\n },\n submitExam: submitExam,\n pauseExam: pauseExam,\n logEvent: logEvent,\n ...generateNotesStateFunctions(addStateDocumentUserState, rootUID),\n ...generateFindingsStateFunctions(addStateDocumentUserState, rootUID),\n ...generateDiagnosesStateFunctions(addStateDocumentUserState, rootUID),\n };\n}\n\nexport const weakMemoizedGenerateDisplayContext = memoize(generateDisplayContext);\nexport function generateDisplayContext(\n displayMode: DisplayMode,\n setDisplayMode: (displayMode: DisplayMode) => void,\n isOnline: boolean,\n focusedBookmarkUid: UID | undefined,\n setFocusedBookmarkUid: (uid: UID) => void,\n togglePanel: (panel: PanelType) => void,\n panelNodeEditStart: (uid: UID) => void,\n isEmbeded: boolean | undefined, // TODO: Narrow down\n enableAiSummaryStatementFeedback: boolean | undefined, // TODO: Narrow down\n isLockedByOtherUser: boolean | undefined, // TODO: Narrow down\n styleGuideId: number | undefined\n) {\n let isDisplayFull = false;\n let isUngated = false;\n let onlyDisplaySectionTitles = false;\n let canBeEditing = false;\n\n switch (displayMode) {\n case displayModes.STUDENT:\n isDisplayFull = false;\n isUngated = false;\n onlyDisplaySectionTitles = false;\n canBeEditing = false;\n break;\n case displayModes.UNGATED:\n isDisplayFull = false;\n isUngated = true;\n onlyDisplaySectionTitles = false;\n canBeEditing = !isLockedByOtherUser;\n break;\n case displayModes.FULL:\n isDisplayFull = true;\n isUngated = true;\n onlyDisplaySectionTitles = false;\n canBeEditing = !isLockedByOtherUser;\n break;\n case displayModes.OUTLINE:\n isDisplayFull = true;\n isUngated = true;\n onlyDisplaySectionTitles = true;\n canBeEditing = false;\n break;\n default:\n isDisplayFull = false;\n isUngated = false;\n onlyDisplaySectionTitles = false;\n canBeEditing = false;\n }\n\n return {\n displayMode: displayMode,\n setDisplayMode: setDisplayMode,\n isDisplayFull: isDisplayFull,\n isUngated: isUngated,\n onlyDisplaySectionTitles: onlyDisplaySectionTitles,\n isOnline: isOnline,\n canBeEditing: canBeEditing,\n focusedBookmarkUid: focusedBookmarkUid,\n setFocusedBookmarkUid: setFocusedBookmarkUid,\n togglePanel: togglePanel,\n panelNodeEditStart: panelNodeEditStart,\n isEmbeded: isEmbeded,\n enableAiSummaryStatementFeedback: enableAiSummaryStatementFeedback,\n styleGuideId: styleGuideId\n };\n}\n\nexport const weakMemoizedGenerateEditingContext = memoize(generateEditingContext);\nexport function generateEditingContext(\n shouldShowEditor: true,\n canBeEditing: boolean, // displayContext.canBeEditing\n isVersionEditActivated: boolean,\n changesDisplayMode: ChangesDisplayMode | undefined, // TODO: Narrow down\n isPublishedVersion: boolean,\n isMaintenanceVersion: boolean,\n canEditOM: boolean,\n nodeDefinitions: NodeDefinitions,\n currentUserId: number,\n changeAuthorIds: number[],\n addChanges: (change: Change[], variantId?: number) => void,\n setCurrentDocSelection: (selection: DocSelection) => void,\n clearCurrentDocSelection: () => void,\n setCurrentMenu: (menu: DocMenuName, data?: Record<string, any>) => void,\n closeCurrentMenu: () => void,\n setLocalClipboard: (data: LocalClipboardData) => void,\n editors: EditorSpecialType[] | undefined,\n allowLearningObjectivesEdit: string,\n) {\n const isEditing = canBeEditing && isVersionEditActivated\n && !(isPublishedVersion || ([changesDisplayModes.HIDE_SUGGESTIONS, changesDisplayModes.ONLY_PUBLISHED] as ChangesDisplayMode[]).includes(changesDisplayMode))\n && !(isMaintenanceVersion && !canEditOM);\n\n return {\n shouldShowEditor,\n isVersionEditActivated,\n isEditing,\n changesDisplayMode,\n nodeDefinitions,\n colorLookup: generateColorLookup(uniq([currentUserId].concat(changeAuthorIds))),\n addChange: (change: Change, variantId?: number) => addChanges([change], variantId),\n addChanges: addChanges,\n setCurrentDocSelection,\n clearCurrentDocSelection,\n setCurrentMenu,\n closeCurrentMenu,\n setLocalClipboard,\n editors,\n allowLearningObjectivesEdit,\n };\n}\n\nexport const weakMemoizedGenerateEditingContextAllFalse = memoize(generateEditingContextAllFalse);\nexport function generateEditingContextAllFalse(\n currentUserId: number = 1,\n changeAuthorIds: Array<number> = [],\n): EditingContextAllFalse {\n return {\n shouldShowEditor: false,\n isVersionEditActivated: false,\n isEditing: false,\n colorLookup: generateColorLookup(uniq([currentUserId].concat(changeAuthorIds))),\n };\n}\n\nexport const weakMemoizedGenerateIntegrationInfo = memoize(generateIntegrationInfo);\nexport function generateIntegrationInfo (\n final_diagnoses,\n clinical_excellence,\n basic_science_disciplines,\n) {\n return {\n final_diagnoses,\n clinical_excellence,\n basic_science_disciplines,\n }\n}\n","export const displayModes = {\n STUDENT: \"student\",\n UNGATED: \"ungated\",\n FULL: \"full\",\n OUTLINE: \"outline\",\n} as const;\n\nexport function isDisplayMode(str: string): str is DisplayMode {\n return !!Object.values(displayModes).find((displayMode) => str === displayMode)\n}\n","import {\n assign,\n assignWith,\n mapValues,\n} from \"lodash\";\n\nimport * as R from \"ramda\";\n\nimport {\n weakMemoizedCloneAndNormalizeDoc,\n} from \"./changes\";\n\nimport {\n denormalizeDocNode,\n} from \"./Functions/base\";\n\nexport function mergeStates<T extends UserState | UserStateStripped>(stateA: T, stateB: T) {\n return assignWith({}, stateA, stateB, (nodeDataA, nodeDataB, uid) => {\n if (nodeDataA && nodeDataB) {\n return assignWith({}, nodeDataA, nodeDataB, (keyDataA, keyDataB, key) => {\n if (keyDataA && keyDataB) {\n if (keyDataA[\"updatedAt\"] > keyDataB[\"updatedAt\"]) {\n return keyDataA;\n } else {\n return keyDataB;\n }\n } else {\n return keyDataA || keyDataB;\n }\n });\n } else {\n return nodeDataA || nodeDataB;\n }\n });\n}\n\n// TODO CONPOSE WITH BELOW FUNCTIONS\nexport function stripState(state: UserState) {\n return mapValues(state, (nodeData) => {\n return mapValues(nodeData, (valueObject) => {\n return valueObject.value;\n });\n });\n}\n\nexport function mergeStrippedStates(stateA: UserStateStripped, stateB: UserStateStripped) {\n return assignWith({}, stateA, stateB, (nodeDataA, nodeDataB, uid) => {\n if (nodeDataA && nodeDataB) {\n return assign({}, nodeDataA, nodeDataB);\n } else {\n return nodeDataA || nodeDataB;\n }\n });\n}\n\n// TODO: Remove function if not used\nexport function stripStateSingleNode(nodeState) {\n return mapValues(nodeState, (valueObject) => valueObject.value);\n}\n\n// TODO: Remove function if not used\nexport function mergeStrippedSingleNode(nodeStateA, nodeStateB) {\n if (nodeStateA && nodeStateB) {\n return assign({}, nodeStateA, nodeStateB);\n } else {\n return nodeStateA || nodeStateB;\n }\n}\n\nexport function addDocumentUserState(doc, state: UserState) {\n const rootNodeUid = doc.uid;\n const normalizedDoc = weakMemoizedCloneAndNormalizeDoc(doc);\n\n const strippedState = stripState(state);\n const mergedNormalizedVersion = mergeStrippedStates(normalizedDoc, strippedState);\n\n return denormalizeDocNode(mergedNormalizedVersion, rootNodeUid);\n}\n\nexport function wrapStateAsSetNodeKVPairActions(state: UserStateStripped): Array<DocActionSetNodeKVPair> {\n return R.toPairs(state).map(([uid, valueMap]) => (\n R.toPairs(valueMap).map(([key, value]) => {\n const returnAction: DocActionSetNodeKVPair = {\n type: \"action\",\n action: \"setNodeKVPair\",\n arguments: {\n uid,\n key,\n value,\n },\n }\n\n return returnAction;\n })\n )).flat();\n}\n\n// const DENORMALIZE_KEYS = [\"diagnoses\", \"findings\", \"notes\"]\n// export function denormalizeDocumentUserState(strippedState) {\n// mapValues(strippedState, valuesHash => {\n// return DENORMALIZE_KEYS.forEach(denormalizeKey => {\n// if(valuesHash[denormalizeKey]) {\n// valuesHash = {\n// ...valuesHash,\n// [valuesHash[denormalizeKey]]: valuesHash[denormalizeKey].map(uid => strippedState[uid])\n// }\n// }\n// })\n// })\n// }\n//\n// export function applyDocumentUserState(docNode, documentUserState) {\n// let returnNode = docNode\n//\n// if (documentUserState[returnNode.uid]) {\n// returnNode = {\n// ...returnNode,\n// documentUserState[returnNode.uid]\n// }\n// }\n// }\n","export const ADD_NODE = \"ADD_NODE\"\nexport const EDIT_COMMENT = \"EDIT_COMMENT\"\nexport const EDIT_LINK = \"EDIT_LINK\"\nexport const FIND_AND_REPLACE = \"FIND_AND_REPLACE\"\nexport const LIST_RLO_MODAL = \"LIST_RLO_MODAL\"\nexport const MEDIA_MANAGER = \"MEDIA_MANAGER\"\nexport const MEDIA_PICKER = \"MEDIA_PICKER\"\nexport const NEW_COMMENT_THREAD = \"NEW_COMMENT_THREAD\"\nexport const NEW_STUDENT_FEEDBACK = \"NEW_STUDENT_FEEDBACK\"\nexport const NEW_SUMMARY_OF_EDITS = \"NEW_SUMMARY_OF_EDITS\"\nexport const RLO_MODAL = \"RLO_MODAL\"\nexport const TEXT_COLOR_PICKER = \"TEXT_COLOR_PICKER\"\nexport const EDIT_RO_NAME_MODAL = \"EDIT_RO_NAME_MODAL\"\nexport const LEARNING_OBJECTIVES_CONFIRM_EDIT = \"LEARNING_OBJECTIVES_CONFIRM_EDIT\";\nexport const LEARNING_OBJECTIVES_ADD_NEW = \"LEARNING_OBJECTIVES_ADD_NEW\";\n","import {\n last,\n tail,\n} from \"lodash\";\n\nexport function scrollToLineage(lineage: Array<any>, addStateCallback: AddStateFunction) {\n const ancestorSections = lineage.filter((ancestor) => ancestor.type === \"section\");\n const ancestorSectionsUids = ancestorSections.map((ancestor) => ancestor.uid);\n\n const openSectionsState = tail(ancestorSectionsUids).reduce((acc, ancestorUid) => ({\n ...acc,\n [ancestorUid]: {collapsed: false},\n }), {})\n\n addStateCallback(openSectionsState);\n\n setTimeout(() => {\n const el = document.getElementById(`bookmark${last(lineage).uid}`) || document.getElementsByClassName(last(lineage).uid)[0];\n if (el) {\n window.scrollTo(0, window.scrollY + el.getBoundingClientRect().top - 240);\n }\n }, 300);\n}\n\nexport function scrollToUidAndContentKey(uid: string, contentKey: string) {\n setTimeout(() => {\n const el = document.getElementById(`${uid}//${contentKey}`);\n if (el) {\n window.scrollTo(0, window.scrollY + el.getBoundingClientRect().top - 240);\n }\n }, 300);\n}\n\nexport function scrollToUid(uid: string) {\n setTimeout(() => {\n const el = document.querySelector(`[data-uid=\"${uid}\"]`);\n if (el) {\n window.scrollTo(0, window.scrollY + el.getBoundingClientRect().top - 240);\n }\n }, 300);\n}\n\nexport function scrollToElementWithUid(uid_candidates: Array<string>) {\n const matching_elements = uid_candidates\n .map((uid) => document.getElementsByClassName(uid)[0])\n .filter((x) => !!x);\n const el = matching_elements[0];\n\n if (el) {\n window.scrollTo(0, window.scrollY + el.getBoundingClientRect().top - 300);\n\n // We can't only click on the given element.\n // We must also click on the nested elements, and experimentation shows that we only want to\n // click on nested elements that have text content.\n const recursiveClick = (elem: Element) => {\n if (elem instanceof HTMLElement && !!elem.textContent) {\n elem.click();\n }\n [...elem.children].forEach((child) => {\n recursiveClick(child);\n });\n };\n recursiveClick(el);\n }\n return el;\n}\n","import * as R from \"ramda\";\n\n///////////////////\n// DOM SELECTION //\n///////////////////\n\nfunction getDOMSelection() {\n const domSelection = window.getSelection();\n return domSelection && domSelection.rangeCount > 0 ? domSelection : null;\n}\n\nexport function getDOMRange() {\n const domSelection = getDOMSelection();\n if (domSelection) {\n return domSelection.getRangeAt(0);\n } else {\n return null;\n }\n}\n\nfunction setDOMRange(domRange: Range) {\n const domSelection = window.getSelection();\n domSelection?.removeAllRanges();\n domSelection?.addRange(domRange);\n}\n\nfunction clearAllDOMRanges() {\n const domSelection = window.getSelection();\n domSelection?.removeAllRanges();\n}\n\nexport function areDOMRangesEqual(domRange1?: Range, domRange2?: Range) {\n const toCompareKeys = [\n \"commonAncestorContainer\",\n \"endContainer\",\n \"endOffset\",\n \"startContainer\",\n \"startOffset\",\n ];\n\n return domRange1 && domRange2 && R.equals(R.pickAll(toCompareKeys, domRange1), R.pickAll(toCompareKeys, domRange2));\n}\n\n///////////////////\n// Doc Selection //\n///////////////////\n\n// DOC_SELECTION\n// {\n// start: SELECTION_BOUNDRY\n// end: SELECTION_BOUNDRY\n// variantId?: Number\n// }\n//\n// DOC_SELECTION_BOUNDRY\n// {\n// uid: UID\n// index: INDEX\n// contentKey: CONTENT_KEY // OPTIONAL\n// }\n//\n// INLINE vs BLOCK SELECTION\n\nexport function getDocSelection() {\n return domRangeToDocSelection(getDOMRange());\n}\n\nexport function clearDocSelection() {\n if (getDocSelection()) {\n clearAllDOMRanges();\n }\n}\n\nfunction domRangeToDocSelection(domRange?: Range | null) {\n if (!domRange) { return null; }\n\n const commonIndependentlyEditableAncestor = getIndependentlyEditableAncestor(domRange.commonAncestorContainer);\n\n if (!commonIndependentlyEditableAncestor) { return null; }\n\n const startBoundry = domRangeBoundryToDocSelectionBoundry(domRange.startContainer, domRange.startOffset, commonIndependentlyEditableAncestor);\n const endBoundry = domRangeBoundryToDocSelectionBoundry(domRange.endContainer, domRange.endOffset, commonIndependentlyEditableAncestor);\n\n if (startBoundry === null || endBoundry === null ) {\n if (startBoundry || endBoundry) {\n //TODO ADD ERROR FOR ONE SIDED SELECTION\n }\n return null;\n }\n\n const returnSelection: DocSelection = {\n start: startBoundry,\n end: endBoundry,\n }\n\n const variantId = domRangeBoundryToVariantId(domRange.startContainer, commonIndependentlyEditableAncestor)\n if (typeof variantId === 'number') {\n returnSelection.variantId = variantId\n }\n\n return returnSelection;\n}\n\nfunction domRangeBoundryToVariantId(node: Node, commonIndependentlyEditableAncestor: Node) {\n if (isInNoDocumentSelection(node)) { return; }\n\n const thisIndependentlyEditableAncestor = getIndependentlyEditableAncestor(node);\n const directlyInCommonIndependentlyEditableAncestor = thisIndependentlyEditableAncestor === commonIndependentlyEditableAncestor;\n\n if (directlyInCommonIndependentlyEditableAncestor) {\n const ancestorStyledTextNode = getAncestorStyledTextNodeFromChildNode(node);\n if (ancestorStyledTextNode instanceof HTMLElement) {\n const variantId = ancestorStyledTextNode.dataset.variantid;\n return variantId && parseInt(variantId);\n }\n }\n\n return;\n}\n\nfunction domRangeBoundryToDocSelectionBoundry(node: Node, offset: number, commonIndependentlyEditableAncestor: Node) {\n if (isInNoDocumentSelection(node)) { return null; }\n\n const thisIndependentlyEditableAncestor = getIndependentlyEditableAncestor(node);\n const directlyInCommonIndependentlyEditableAncestor = thisIndependentlyEditableAncestor === commonIndependentlyEditableAncestor;\n\n if (directlyInCommonIndependentlyEditableAncestor) {\n const ancestorStyledTextNode = getAncestorStyledTextNodeFromChildNode(node);\n if (ancestorStyledTextNode instanceof HTMLElement && ancestorStyledTextNode.dataset.uid) {\n const index = 0;\n const nodeOffset = ancestorStyledTextNode.dataset.isEmpty !== \"true\"\n ? findTextOffsetNodeInNode(ancestorStyledTextNode, node) : 0;\n\n if (nodeOffset === null) { return null; }\n\n return {\n uid: ancestorStyledTextNode.dataset.uid,\n contentKey: ancestorStyledTextNode.dataset.contentkey,\n index: ancestorStyledTextNode.dataset.isEmpty !== \"true\" ? nodeOffset + offset : 0,\n };\n }\n\n const ancestorDocNode = getAncestorDocNodeFromChildNode(node);\n if (ancestorDocNode instanceof HTMLElement && ancestorDocNode.dataset.uid) {\n return {\n uid: ancestorDocNode.dataset.uid,\n index: offset > 0 ? 1 : 0,\n };\n }\n\n const nextDocNodeSibling = findNextDocNodeSibling(node);\n if (nextDocNodeSibling instanceof HTMLElement && nextDocNodeSibling.dataset.uid) {\n return {\n uid: nextDocNodeSibling.dataset.uid,\n index: 0,\n };\n }\n\n const previousDocNodeSibling = findPreviousDocNodeSibling(node);\n if (previousDocNodeSibling instanceof HTMLElement && previousDocNodeSibling.dataset.uid) {\n return {\n uid: previousDocNodeSibling.dataset.uid,\n index: 1,\n };\n }\n } else {\n const ancestorDocNode = findDeepestDocNodeDirectlyInIndependentlyEditableNode(commonIndependentlyEditableAncestor, node);\n if (ancestorDocNode instanceof HTMLElement && ancestorDocNode.dataset.uid) {\n return {\n uid: ancestorDocNode.dataset.uid,\n index: offset > 0 || ancestorDocNode !== node ? 1 : 0,\n };\n }\n }\n\n return null;\n}\n\nexport function areDocSelectionsEqual(selection1: DocSelection, selection2: DocSelection) {\n return selection1 && selection2 && R.equals(selection1, selection2);\n}\n\nexport function isCollapsed(selection: DocSelection) {\n return selection && R.equals(selection.start, selection.end);\n}\n\nexport function isInOneInline(selection: DocSelection) {\n return R.equals(selection.start.uid, selection.end.uid) && !!selection.start.contentKey && R.equals(selection.start.contentKey, selection.end.contentKey);\n}\n\nexport function areBothInlineBoundries(selection: DocSelection) {\n return !!(selection.start.contentKey && selection.end.contentKey);\n}\n\nexport function isInOneNode(selection: DocSelection) {\n return R.equals(selection.start.uid, selection.end.uid);\n}\n\nexport function isInlineBoundry(boundry: DocSelectionBoundry) {\n return !!boundry.contentKey;\n}\n\nexport function isBlockBoundry(boundry: DocSelectionBoundry) {\n return !boundry.contentKey;\n}\n\nexport function toRange(selection: DocSelection) {\n return {\n start: selection.start.index,\n end: selection.end.index,\n };\n}\n\nexport function isDocSelectionWithinStyledText(docSelection: DocSelection) {\n return docSelection && docSelection\n && docSelection.start.uid === docSelection.end.uid\n && docSelection.start.contentKey === docSelection.end.contentKey;\n}\n\nexport function newCollapsedDocSelection(uid: string, contentKey: string, index: number) {\n return {\n start: newDocSelectionBoundry(uid, contentKey, index),\n end: newDocSelectionBoundry(uid, contentKey, index),\n };\n}\n\nexport function newDocSelectionBoundry(uid: string, contentKey: string, index: number) {\n return {\n uid,\n contentKey,\n index,\n };\n}\n\nexport function collapseDocSelectionToStart(docSelection: DocSelection) {\n return {\n start: docSelection.start,\n end: docSelection.start,\n };\n}\n\nexport function shiftDocSelectionBy(docSelection: DocSelection, shiftCount: number) {\n return {\n start: shiftDocSelectionBoundryBy(docSelection.start, shiftCount),\n end: shiftDocSelectionBoundryBy(docSelection.end, shiftCount),\n };\n}\n\nexport function shiftDocSelectionStartBy(docSelection: DocSelection, shiftCount: number): DocSelection {\n return {\n start: shiftDocSelectionBoundryBy(docSelection.start, shiftCount),\n end: docSelection.end,\n };\n}\n\nexport function shiftDocSelectionEndBy(docSelection: DocSelection, shiftCount: number) {\n return {\n start: docSelection.start,\n end: shiftDocSelectionBoundryBy(docSelection.end, shiftCount),\n };\n}\n\nexport function shiftDocSelectionBoundryBy(docSelectionBoundry: DocSelectionBoundry, shiftCount: number) {\n return {\n ...docSelectionBoundry,\n index: docSelectionBoundry.index + shiftCount,\n };\n}\n\nexport function setDocSelection(docSelection?: DocSelection) {\n const domRange = docSelectionToDOMRange(docSelection);\n\n if (domRange) { setDOMRange(domRange); }\n}\n\nexport function docSelectionToDOMRange(docSelection?: DocSelection) {\n if (!docSelection) { return null; }\n\n const startBoundry = getDOMBoundryFromDocSelectionBoundry(docSelection.start);\n const endBoundry = getDOMBoundryFromDocSelectionBoundry(docSelection.end);\n\n if (!startBoundry || !endBoundry) { return null; }\n\n const domRange = document.createRange();\n domRange.setStart(...startBoundry);\n domRange.setEnd(...endBoundry);\n return domRange;\n}\n\nfunction getDOMBoundryFromDocSelectionBoundry(docBoundry: DocSelectionBoundry) {\n const parentNode = getAncestorStyledTextNodeFromUIDAndContentKey(docBoundry.uid, docBoundry.contentKey);\n\n if (!parentNode) { return null; }\n\n return findNodeAndOffsetFromTextOffset(parentNode, docBoundry.index);\n}\n\n\n////////////////////////////////////////////////////////\n// Doc Selection and Range Selection Shared Functions //\n////////////////////////////////////////////////////////\n\nfunction nodeTextLength(node: Node) {\n if (node.nodeType === Node.TEXT_NODE && node.textContent) {\n return node.textContent.length;\n } else {\n return 0;\n }\n}\n\nfunction findTextOffsetNodeInNode(parentNode: Node, childNode: Node) {\n if (parentNode === childNode) {return 0;}\n\n const newWalker = document.createTreeWalker(parentNode, NodeFilter.SHOW_ALL);\n\n let offset = 0;\n while (newWalker.nextNode()) {\n const currentNode = newWalker.currentNode;\n\n if (currentNode === childNode) {\n return offset;\n } else {\n offset = offset + nodeTextLength(currentNode);\n }\n }\n\n return null;\n}\n\nfunction isNodeDocNode(node: Node) {\n return node instanceof HTMLElement && !!node.dataset?.isNode;\n}\n\nfunction isNodeBlockNodes(node: Node) {\n return node instanceof HTMLElement && !!node.dataset?.isBlockNodes;\n}\n\nfunction isNodeStyledText(node: Node) {\n return node instanceof HTMLElement && !!node.dataset?.isStyledText;\n}\n\nfunction isNodeIndpendentlyEditable(node: Node) {\n return node instanceof HTMLElement && !!node.dataset?.isIndependentlyEditable;\n}\n\nfunction getIndependentlyEditableAncestor(node: Node | null) : Node | null {\n if (!node) { return null; }\n\n return isNodeIndpendentlyEditable(node) ? node : getIndependentlyEditableAncestor(node.parentNode);\n}\n\nfunction getAncestorStyledTextNodeFromChildNode(node: Node | null) : Node | null {\n if (!node) { return null; }\n\n return isNodeStyledText(node) ? node : getAncestorStyledTextNodeFromChildNode(node.parentNode);\n}\n\nfunction isInNoDocumentSelection(node: Node | null) : boolean {\n if (!node) { return false; }\n\n return isNoDocumentSelection(node) || isInNoDocumentSelection(node.parentNode);\n}\n\nfunction isNoDocumentSelection(node: Node) {\n return node instanceof HTMLElement && node.classList?.contains(\"no-document-selection\")\n}\n\nfunction getAncestorDocNodeFromChildNode(node: Node | null) : Node | null {\n if (!node || isNodeBlockNodes(node)) { return null; }\n\n return isNodeDocNode(node) ? node : getAncestorDocNodeFromChildNode(node.parentNode);\n}\n\nfunction findDeepestDocNodeDirectlyInIndependentlyEditableNode(independentlyEditableNode: Node, startNode: Node | null, currentDeepest: Node | null = null) {\n if (!startNode) { return null; }\n\n if (!currentDeepest && isNodeDocNode(startNode)) {\n currentDeepest = startNode;\n }\n\n if (independentlyEditableNode === startNode) { return currentDeepest; }\n\n return findDeepestDocNodeDirectlyInIndependentlyEditableNode(independentlyEditableNode, startNode.parentNode, isNodeIndpendentlyEditable(startNode) ? null : currentDeepest);\n}\n\nfunction findNextDocNodeSibling(node: Node | null) {\n if (!node || isNodeIndpendentlyEditable(node)) { return null; }\n if (isNodeDocNode(node)) { return node; }\n\n return findNextDocNodeSibling(node.nextSibling ? node.nextSibling : node.parentNode);\n}\n\nfunction findPreviousDocNodeSibling(node: Node | null) {\n if (!node || isNodeIndpendentlyEditable(node)) { return null; }\n if (isNodeDocNode(node)) { return node; }\n\n return findPreviousDocNodeSibling(node.previousSibling ? node.previousSibling : node.parentNode);\n}\n\nfunction getAncestorStyledTextNodeFromUIDAndContentKey(uid, contentKey: string) {\n return document.querySelector(`[data-uid=\"${uid.replaceAll(\"\\\"\", \"\\\\\\\"\")}\"][data-contentkey=\"${contentKey}\"].doc-styled-text`);\n}\n\nfunction findNodeAndOffsetFromTextOffset(parentNode: Node, textOffset: number): [Node, any] | null { // TODO: Remove any\n if (textOffset === 0) {\n return [parentNode, 0];\n }\n\n const newWalker = document.createTreeWalker(parentNode, NodeFilter.SHOW_ALL);\n\n let currentOffset = 0;\n while (newWalker.nextNode()) {\n const currentNode = newWalker.currentNode;\n\n const textLength = nodeTextLength(currentNode);\n\n const newOffset = currentOffset + textLength;\n if (newOffset >= textOffset) {\n return [currentNode, textOffset - currentOffset];\n } else {\n currentOffset = newOffset;\n }\n }\n\n return null;\n}\n","export const trackChangesEditModes = {\n EDITING_MODE: \"EDITING_MODE\",\n SUGGESTING_MODE: \"SUGGESTING_MODE\",\n} as const;\n\nexport function isTrackChangesEditMode(str: string): str is TrackChangesEditMode {\n return !!Object.values(trackChangesEditModes).find((displayMode) => str === displayMode)\n}\n","export const versionTypes = Object.freeze({\n PUBLISHED: \"PUBLISHED\",\n ONGOING_MAINTENANCE: \"ONGOING_MAINTENANCE\",\n SCHEDULED_REVIEW: \"SCHEDULED_REVIEW\",\n OTHER: \"OTHER\",\n});\n\nexport const variantTypes = Object.freeze({\n PUBLISHED: \"PUBLISHED\",\n MAINTENANCE: \"MAINTENANCE\",\n REVIEW: \"REVIEW\",\n OTHER: \"OTHER\",\n});\n\nexport function versionTypeShortName(versionType: VersionType) {\n switch (versionType) {\n case versionTypes.PUBLISHED:\n return \"PUB\";\n case versionTypes.ONGOING_MAINTENANCE:\n return \"OM\";\n case versionTypes.SCHEDULED_REVIEW:\n return \"SR\";\n default:\n // TODO ADD ERROR\n }\n}\n\nexport function versionTypeFullName(versionType: VersionType) {\n switch (versionType) {\n case versionTypes.PUBLISHED:\n return \"Published\";\n case versionTypes.ONGOING_MAINTENANCE:\n return \"Ongoing Maintenance\";\n case versionTypes.SCHEDULED_REVIEW:\n return \"Scheduled Review\";\n default:\n // TODO ADD ERROR\n }\n}\n\nexport function versionTypeCssClassPrefix(versionType: VersionType) {\n switch (versionType) {\n case versionTypes.PUBLISHED:\n return \"published\";\n case versionTypes.ONGOING_MAINTENANCE:\n return \"ongoing-maintenance\";\n case versionTypes.SCHEDULED_REVIEW:\n return \"scheduled-review\";\n default:\n // TODO ADD ERROR\n }\n}\n\nexport function versionPushButtonData(versionType: VersionType) {\n switch (versionType) {\n case versionTypes.SCHEDULED_REVIEW:\n return {\n pushButtonName: \"Push To OM\",\n pushButtonConfirmationText: \"Are you sure you want to replace the current Ongoing Maintenance Version with the Scheduled Review Version?\",\n pushButtonPath: \"replace_edit\",\n pushButtonReplaceableVariant: \"maintenance_variant\",\n }\n case versionTypes.ONGOING_MAINTENANCE:\n return {\n pushButtonName: \"Push To SR\" ,\n pushButtonConfirmationText: \"Are you sure you want to replace the current Scheduled Review Version with the Ongoing Maintenance Version?\",\n pushButtonPath: \"replace_scheduled_review\",\n pushButtonReplaceableVariant: \"review_variant\",\n }\n default:\n return {}\n }\n}\n\nexport function determineVersionType(documentContext: DocumentContext, versionID: number) {\n switch (versionID) {\n case publishVersionId(documentContext):\n return versionTypes.PUBLISHED;\n case ongoingMaintenaceVersionId(documentContext):\n return versionTypes.ONGOING_MAINTENANCE;\n case scheduledReviewVersionId(documentContext):\n return versionTypes.SCHEDULED_REVIEW;\n default:\n return versionTypes.OTHER;\n }\n}\n\nexport function publishVersionId(documentContext: DocumentContext) {\n return documentContext.docType == \"ReusableObject\" ? documentContext.publishVariantId : documentContext.publishVersionId;\n}\n\nexport function ongoingMaintenaceVersionId(documentContext: DocumentContext) {\n return documentContext.docType == \"ReusableObject\" ? documentContext.maintenanceVariantId : documentContext.editVersionId;\n}\n\nexport function scheduledReviewVersionId(documentContext: DocumentContext) {\n return documentContext.docType == \"ReusableObject\" ? documentContext.reviewVariantId : documentContext.scheduledReviewVersionId;\n}\n\nexport function determineVariantTypeFromVersionType(versionType: VersionType) {\n switch (versionType) {\n case versionTypes.PUBLISHED:\n return variantTypes.PUBLISHED;\n case versionTypes.ONGOING_MAINTENANCE:\n return variantTypes.MAINTENANCE;\n case versionTypes.SCHEDULED_REVIEW:\n return variantTypes.REVIEW;\n default:\n return variantTypes.OTHER;\n }\n}\n\nexport function variantKeyFromVariantVersion(variantType: VariantType) {\n switch (variantType) {\n case variantTypes.PUBLISHED:\n return 'publishVariantId';\n case variantTypes.MAINTENANCE:\n return 'maintenanceVariantId';\n case variantTypes.REVIEW:\n return 'reviewVariantId';\n default:\n return 'publishVariantId';\n }\n}\n","import {full_url} from 'helpers/url'\nimport { updateProgress } from '../helpers/progressHelper';\n\nexport const EXPANDED_MOD_MAP_LOG = \"ExpandedModMapLog\"\nexport const OPENED_DOCUMENT_LOG = \"OpenedDocumentLog\"\nexport const OPENED_LAB_VALUES_LOG = \"OpenedLabValuesLog\"\nexport const OPENED_MOD_MAP_LOG = \"OpenedModMapLog\"\nexport const OPENED_SECTION_LOG = \"OpenedSectionLog\"\n\nexport function postDocumentUserLog(document_id, log_type, args={}) {\n fetch(full_url(`/documents/${document_id}/document_user_logs`), {\n method: 'POST',\n headers: ReactOnRails.authenticityHeaders({\n 'Accept': \"application/json\",\n 'Content-Type': 'application/json',\n }),\n body: JSON.stringify({\n document_user_log: {\n type: log_type,\n created_at: Math.floor(Date.now() / 1000),\n ...args\n }\n })\n })\n .then(response => {\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n return response.json();\n })\n .then(data => {\n updateProgress(data);\n })\n .catch(error => {\n console.error(error);\n Rollbar.warning(\"Logging Data Failed\");\n });\n}\n","export const CAUSAL_EXPLANATION_CLASSES = [\n \"causal_explanation\",\n]\n\nexport const CORE_CONCEPT_CLASSES = [\n \"core_concept_header\",\n]\n\nexport const DEEP_DIVE_CLASSES = [\n \"expert_comment\",\n]\n\nexport const TEACHING_POINT_CLASSES = [\n \"clinical_reasoning\",\n \"clinical_skills\",\n \"clinical\",\n \"knowledge\",\n \"management\",\n \"studies\",\n \"teaching\", // TODO: HAS THIS BEEN ADDED?\n]\n\nexport const POSSIBLE_RO_CLASSES = [\n ...CAUSAL_EXPLANATION_CLASSES,\n ...CORE_CONCEPT_CLASSES,\n ...DEEP_DIVE_CLASSES,\n ...TEACHING_POINT_CLASSES,\n]","import { formatDate } from './dates'\nimport { truncateWithTooltip, formatLabel } from './utils'\n\nexport const answerChoices = [\"A\", \"B\", \"C\", \"D\", \"E\"];\n\nexport const formatCellValue = (value, truncate) => {\n if (Array.isArray(value)) {\n return value.length > 0 ? value.join(\", \") : \"-\";\n }\n if (value == null || value === \"\") return \"-\";\n\n const stringValue = String(value);\n return truncate && stringValue.length > 200 ? truncateWithTooltip(stringValue) : stringValue;\n};\n\nexport const resolveNestedValue = (obj, key) =>\n key.split(\".\").reduce((acc, field) => (acc && acc[field] ? acc[field] : null), obj);\n\nexport const getSpecialCellValue = (question, key) => {\n if (key === \"select\") return null;\n if (key === \"efficiency_breakpoints_seconds\") return (Array.isArray(question[key]) && question[key].length > 0) ? 'Yes' : 'No';\n if (key === \"updated_at\" || key === \"created_at\") return formatDate(question[key]);\n if (key === \"status\") return formatLabel(question[key]);\n if (key === \"course_name\") return question[\"case_summary_identifier\"].replace(/\\d{2}-\\d{2}$/, \"\");\n\n if (key === \"content.images\") {\n const images = question.content?.images || [];\n return !Array.isArray(images) || images.length === 0\n ? \"-\"\n : images\n .map(\n (img, index) =>\n `<a href=\"${img}\" target=\"_blank\" style=\"--background: url(${img})\" class=\"qb-thumbnail\">image ${index + 1}</a>`\n )\n .join(\"<br />\");\n }\n\n if (key === \"content.correct_answer_index\") {\n return answerChoices[question.content?.correct_answer_index];\n }\n\n if (key.startsWith(\"choice_\")) {\n const index = answerChoices.indexOf(key.split(\"_\")[1].toUpperCase());\n return question.content?.choices?.[index] || \"-\";\n }\n\n return null;\n};\n\n// Main function for getting cell value\nexport const getCellValue = (question, key, truncate = true) => {\n const specialValue = getSpecialCellValue(question, key);\n if (specialValue !== null) return specialValue;\n\n const value = resolveNestedValue(question, key);\n return formatCellValue(value, truncate);\n};\n","export const formatDate = (\n date: Date | string | number, \n format: string = \"MM-DD-YYYY\"\n): string => {\n let parsedDate: Date;\n\n if (date instanceof Date) {\n parsedDate = date;\n } else {\n parsedDate = new Date(date);\n if (isNaN(parsedDate.getTime())) {\n throw new Error(\"Invalid date\");\n }\n }\n\n const map: Record<string, string> = {\n YYYY: parsedDate.getFullYear().toString(),\n MM: String(parsedDate.getMonth() + 1).padStart(2, \"0\"),\n DD: String(parsedDate.getDate()).padStart(2, \"0\"),\n HH: String(parsedDate.getHours()).padStart(2, \"0\"),\n mm: String(parsedDate.getMinutes()).padStart(2, \"0\"),\n ss: String(parsedDate.getSeconds()).padStart(2, \"0\"),\n };\n\n return format.replace(/YYYY|MM|DD|HH|mm|ss/g, (match) => map[match]);\n}","export default function generateUUID() { // Public Domain/MIT\n var d = new Date().getTime()\n if (typeof performance !== 'undefined' && typeof performance.now === 'function'){\n d += performance.now() //use high-precision timer if available\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = (d + Math.random() * 16) % 16 | 0\n d = Math.floor(d / 16)\n return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16)\n })\n}\n","import axios from 'axios'\nimport { full_url } from 'helpers/url'\nimport { defaultInTransformer } from 'reducers/itemReducer'\n\nconst BASE_ASSET_ENDPOINT = full_url(\"/api/v2/digital_assets/\")\n\nconst ASSET_TYPES = {\n image:\"image\",\n video:\"video\",\n audio:\"audio\",\n pdf:\"pdf\",\n caption:\"caption\"\n}\n\nexport function getAssetAssociations({externalId, responseHandler = defaultHandler} = {}) {\n return apiRequest({\n path: \"asset_associations\",\n method: \"GET\",\n params: {\n external_id: externalId\n },\n responseHandler: responseHandler\n })\n}\n\nexport function deleteAssetAssociation({modelId = \"\", modelType = \"\", externalId = \"\", responseHandler = defaultHandler} = {}) {\n apiRequest({\n path: \"delete_asset_association\",\n method: \"POST\",\n params: {\n model_id: modelId,\n model_type: modelType,\n external_id: externalId\n },\n responseHandler: responseHandler\n })\n}\n\nexport function initializeMedia({isEmbeded = false, modelId = \"\", modelType = \"\", responseHandler = defaultHandler} = {}) {\n if (isEmbeded) {\n return responseHandler({\n \"images\": [],\n \"audios\": [],\n \"videos\": [],\n \"pdfs\": [],\n \"captions\": []\n })\n }\n return syncAssets({\n modelId,\n modelType,\n responseHandler: organizeMediaAssets\n }).then((assets) => {\n return responseHandler(assets)\n })\n}\n\nexport function mediaKeyHelper(asset) {\n let key = asset.media_type\n if (key == 'document') {\n key = asset.file_ext\n }\n return {\n image: 'images',\n audio: 'audios',\n video: 'videos',\n pdf: 'pdfs',\n vtt: 'captions',\n srt: 'captions'\n }[key]\n}\n\nexport function organizeMediaAssets(model) {\n const transformedModel = defaultInTransformer(model)\n const checkAndFilterAssets = (doc, type) => {\n if (!doc || !doc.digitalAssets || !doc.digitalAssets.length) {\n return false;\n }\n switch (type) {\n case ASSET_TYPES['image']:\n return doc.digitalAssets.filter(da => da.media_type == \"image\")\n case ASSET_TYPES['audio']:\n return doc.digitalAssets.filter(da => da.media_type == \"audio\")\n case ASSET_TYPES['video']:\n return doc.digitalAssets.filter(da => da.media_type == \"video\")\n case ASSET_TYPES['pdf']:\n return doc.digitalAssets.filter(da => da.media_type == \"document\" && da.file_ext == \"pdf\")\n case ASSET_TYPES['caption']:\n return doc.digitalAssets.filter(da => da.media_type == \"document\" && (da.file_ext == \"vtt\" || da.file_ext == \"srt\"))\n default:\n return false\n }\n }\n\n return {\n \"images\": checkAndFilterAssets(transformedModel, ASSET_TYPES['image']) || [],\n \"audios\": checkAndFilterAssets(transformedModel, ASSET_TYPES['audio']) || [],\n \"videos\": checkAndFilterAssets(transformedModel, ASSET_TYPES['video']) || [],\n \"pdfs\": checkAndFilterAssets(transformedModel, ASSET_TYPES['pdf']) || [],\n \"captions\": checkAndFilterAssets(transformedModel, ASSET_TYPES['caption']) || [],\n }\n}\n\nfunction syncAssets({modelId = \"\", modelType = \"\", responseHandler = defaultHandler} = {}) {\n return apiRequest({\n path: \"sync_assets\",\n method: \"POST\",\n params: {\n model_id: modelId,\n model_type: modelType\n },\n responseHandler: responseHandler\n })\n}\n\nfunction apiRequest({path, method = \"GET\", params = {}, responseHandler = defaultHandler} = {}) {\n const url = BASE_ASSET_ENDPOINT + path\n return axios({\n url,\n method,\n params,\n withCredentials: true,\n headers: ReactOnRails.authenticityHeaders({\n 'Accept': 'application/json'\n }),\n })\n .then((response) => {\n return responseHandler(response.data)\n })\n .catch((error) => {\n return responseHandler(error)\n })\n}\n\nfunction formatResource(resource) {\n return {\n external_identifier: resource[\"ref\"],\n media_type: resource[\"resource_type\"],\n file_ext: resource[\"file_extension\"],\n title: resource[\"field8\"]\n }\n}\n\nfunction defaultHandler(x) {\n return x\n}\n","export function updateProgress(data: any): void {\n if (data.progress !== undefined && data.progress !== 0) {\n const progressBar = document.querySelector('.progress-text');\n const progress = data.progress + '%';\n\n if (progressBar && progress === '100%') {\n document.querySelector('.progress-text')?.classList.add('hide');\n document.querySelector('.progress-box')?.classList.add('hide');\n document.querySelector('.complete-progress-icon')?.classList.remove('hide');\n document.querySelector('.my-time')?.classList.remove('hide');\n document.querySelector('.my-time-content')!.innerHTML =\"My time: <br/> \" + Math.round(data.time_on_case / 1000 / 60).toString() + \" min\";\n document.getElementById('resetQuestionButton')?.classList.remove('hide');\n } else if (progressBar) {\n document.querySelector('.progress-box')?.classList.remove('hide');\n document.querySelector('.progress-text')!.textContent = progress + \" Complete\";\n document.querySelector<HTMLElement>('.progress-bar-length')!.style.width =progress;\n }\n }\n}","import _ from 'lodash';\n\nexport function currentTimeInSeconds(){\n return Math.floor(new Date().getTime() / 1000)\n}\n\nexport function intToDateString(intTime){\n return intTime && (new Date(intTime)).toISOString().split(\"T\")[0]\n}\n\nexport function intToDateTimeString(intTime){\n let h = (new Date(intTime)).toString().split(' ')[4].split(':')[0]\n let m = (new Date(intTime)).toString().split(' ')[4].split(':')[1]\n let month = (new Date(intTime)).toString().split(' ')[1]\n let day = (new Date(intTime)).toString().split(' ')[2]\n let year = (new Date(intTime)).toString().split(' ')[3]\n let dd = 'AM'\n if (h >= 12) {\n h = h - 12\n dd = 'PM'\n }\n if (h === 0) {\n h = 12\n }\n return intTime && month + ' ' + day + ' ' + year + ' ' + h + ':' + m + ' ' + dd + ' '\n}\n\nexport function intTimeToHHMMSS(intTime){\n let secondsDiff = Math.floor(intTime / 1000)\n\n let hours = Math.floor(secondsDiff / 3600)\n secondsDiff -= (hours * 3600)\n\n let minutes = Math.floor(secondsDiff / 60)\n secondsDiff -= minutes * 60\n\n let seconds = secondsDiff\n\n return hours + \":\" + _.padStart(minutes, 2, \"0\") + \":\" + _.padStart(seconds, 2, \"0\")\n}\n\nexport function intTimeToHHMMSSOrHours(intTime, hours) {\n if (hours * 60 * 60 * 1000 < intTime) {\n return \"Greater than \" + hours + \" hours\"\n } else {\n return intTimeToHHMMSS(intTime)\n }\n}\n","const already_url = /^https?:\\/\\//\n\nexport function full_url(path, options={}){\n if (!path) throw \"no path specified\"\n\n if (path.match(already_url)) {\n return path\n }\n\n let hostname = window.location.hostname\n\n if (options.subdomain) {\n let splitHostname = hostname.split(\".\")\n if (splitHostname.length >= 3) {\n splitHostname[0] = options.subdomain\n hostname = splitHostname.join('.')\n }\n }\n\n // CAN NOT USE window.location.origin BECAUSE OF INTERNET EXPLORER\n return window.location.protocol + \"//\" + hostname + (window.location.port ? ':' + window.location.port: '') + path\n}\n\nexport function getUrlParameter(sParam){\n var sPageURL = window.location.search.substring(1)\n var sURLVariables = sPageURL.split('&')\n for (var i = 0; i < sURLVariables.length; i++)\n {\n var sParameterName = sURLVariables[i].split('=')\n if (sParameterName[0] === sParam)\n {\n return sParameterName[1]\n }\n }\n}\n","// Utility functions\nexport const escapeHtml = (unsafe) =>\n unsafe\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n\nexport const truncateWithTooltip = (value, maxLength = 200) => {\n if (value.length <= maxLength) return value;\n\n const truncated = value.substring(0, maxLength) + \"...\";\n return `<div data-hover-text=\"${escapeHtml(value)}\">${escapeHtml(truncated)}</div>`;\n};\n\nexport const formatLabel = (key: string) => {\n return key\n .replace(/_/g, ' ')\n .replace(/\\b\\w/g, char => char.toUpperCase())\n}","import * as R from 'ramda'\n\nimport {\n assignWith,\n isFunction,\n} from 'lodash'\n\nimport { Dispatch } from \"redux\";\n\nimport { generateReducer, generateActions } from './itemReducer'\n\nimport { mergeStates } from '../helpers/Doc/documentUserState'\n\nconst itemKey = 'documentUserState'\nconst endpoint = 'api/v2/document_user_states/'\n\nexport function generateDocumentUserStateActions(id: ItemId) {\n const documentUserStateActions = generateActions<DocumentUserState, DocumentUserStateExtraData>(itemKey, id, endpoint, {}, {editDataMergeFunction: editDataMergeFunction})\n\n return {\n startNewDocumentUserState: documentUserStateActions.startNewItem,\n cancelNewDocumentUserState: documentUserStateActions.cancelNewItem,\n startEditDocumentUserState: documentUserStateActions.startEditItem,\n cancelEditDocumentUserState: documentUserStateActions.cancelEditItem,\n setAllDataWithFunctionDocumentUserState: documentUserStateActions.setAllDataWithFunctionItem,\n setSyncDataDocumentUserState: documentUserStateActions.setSyncDataItem,\n setSyncDataWithFunctionDocumentUserState: documentUserStateActions.setSyncDataWithFunctionItem,\n setEditDataDocumentUserState: documentUserStateActions.setEditDataItem,\n setEditDataWithFunctionDocumentUserState: documentUserStateActions.setEditDataWithFunctionItem,\n resetEditDataDocumentUserState: documentUserStateActions.resetEditDataItem,\n setExtraDataDocumentUserState: documentUserStateActions.setExtraDataItem,\n setExtraDataWithFunctionDocumentUserState: documentUserStateActions.setExtraDataWithFunctionItem,\n resetExtraDataDocumentUserState: documentUserStateActions.resetExtraDataItem,\n loadDocumentUserState: documentUserStateActions.loadItem,\n createDocumentUserState: documentUserStateActions.createItem,\n updateDocumentUserState: documentUserStateActions.updateItem,\n destroyDocumentUserState: documentUserStateActions.destroyItem,\n loadIfNeededDocumentUserState: documentUserStateActions.loadIfNeededItem,\n documentUserStateFromState: documentUserStateActions.itemFromState,\n documentUserStateSyncDataFromState: documentUserStateActions.itemSyncDataFromState,\n documentUserStateSyncMetaFromState: documentUserStateActions.itemSyncMetaFromState,\n documentUserStateEditDataFromState: documentUserStateActions.itemEditDataFromState,\n documentUserStateMergedDataFromState: documentUserStateActions.itemMergedDataFromState,\n documentUserStateExtraDataFromState: documentUserStateActions.itemExtraDataFromState,\n addStateDocumentUserState: (state: UserStateStripped, callback?: () => void) => addStateDocumentUserState(id, state, callback)\n }\n}\n\nexport const documentUserStateCollectionReducer = generateReducer<DocumentUserState, DocumentUserStateExtraData>(itemKey);\n\nfunction editDataMergeFunction(dusOld: DocumentUserState, dusNew: Partial<DocumentUserState>) {\n return assignWith({}, dusOld, dusNew, (valueDataOld, valueDataNew, key) => {\n if (key === 'state') {\n return mergeStates(valueDataOld, valueDataNew)\n } else {\n return valueDataNew || valueDataOld\n }\n })\n}\n\nexport function addStateDocumentUserState(id: ItemId, state: UserStateStripped, callback?: () => void) {\n return (dispatch: Dispatch, getState: () => ReducerState) => {\n const documentUserStateActions = generateDocumentUserStateActions(id)\n\n let mergedDocumentUserState = documentUserStateActions.documentUserStateMergedDataFromState(getState())\n let editDocumentUserState = documentUserStateActions.documentUserStateEditDataFromState(getState()) || {}\n\n let mergedState = mergedDocumentUserState.state || {}\n let editState = editDocumentUserState.state || {}\n\n let newState = R.mapObjIndexed((nodeData, uid, obj1) => {\n return R.mapObjIndexed((value, key, obj2) => {\n let newValue = isFunction(value) ? value(R.path([uid, key, 'value'], mergedState)) : value\n return {value: newValue, updatedAt: (new Date).getTime()}\n }, nodeData)\n }, state)\n\n dispatch(documentUserStateActions.setEditDataDocumentUserState({state: mergeStates(editState, newState)}))\n dispatch(documentUserStateActions.updateDocumentUserState() as any)\n\n if (callback) {\n callback()\n }\n }\n}\n","import { generateReducer, generateActions } from './itemReducer'\n\nconst itemKey = 'document'\nconst endpoint = 'api/v2/documents/'\n\nexport function generateDocumentActions(id: ItemId) {\n const documentActions = generateActions<Document, DocumentExtraData>(itemKey, id, endpoint)\n\n return {\n startNewDocument: documentActions.startNewItem,\n cancelNewDocument: documentActions.cancelNewItem,\n startEditDocument: documentActions.startEditItem,\n cancelEditDocument: documentActions.cancelEditItem,\n setAllDataWithFunctionDocument: documentActions.setAllDataWithFunctionItem,\n setSyncDataDocument: documentActions.setSyncDataItem,\n setSyncDataWithFunctionDocument: documentActions.setSyncDataWithFunctionItem,\n setEditDataDocument: documentActions.setEditDataItem,\n setEditDataWithFunctionDocument: documentActions.setEditDataWithFunctionItem,\n resetEditDataDocument: documentActions.resetEditDataItem,\n setExtraDataDocument: documentActions.setExtraDataItem,\n setExtraDataWithFunctionDocument: documentActions.setExtraDataWithFunctionItem,\n resetExtraDataDocument: documentActions.resetExtraDataItem,\n loadDocument: documentActions.loadItem,\n createDocument: documentActions.createItem,\n updateDocument: documentActions.updateItem,\n destroyDocument: documentActions.destroyItem,\n loadIfNeededDocument: documentActions.loadIfNeededItem,\n documentFromState: documentActions.itemFromState,\n documentSyncDataFromState: documentActions.itemSyncDataFromState,\n documentSyncMetaFromState: documentActions.itemSyncMetaFromState,\n documentEditDataFromState: documentActions.itemEditDataFromState,\n documentMergedDataFromState: documentActions.itemMergedDataFromState,\n documentExtraDataFromState: documentActions.itemExtraDataFromState,\n\n }\n}\n\nexport const documentCollectionReducer = generateReducer<Document, DocumentExtraData>(itemKey);\n","import {\n assign,\n camelCase,\n mapKeys,\n omit,\n snakeCase,\n upperFirst,\n pick,\n} from 'lodash'\n\nimport axios from 'axios'\n\nimport * as pluralize from 'pluralize';\n\nimport { Dispatch, AnyAction } from \"redux\";\nimport { ThunkAction } from 'redux-thunk'\n\nimport {full_url} from '../helpers/url'\n\nimport { updateProgress } from '../helpers/progressHelper';\n\nexport const LIST_LOAD = 'LIST_LOAD'\n\nexport const SEED = 'relier-frontend/item/SEED'\nexport const LOAD = 'relier-frontend/item/LOAD'\nexport const CREATE = 'relier-frontend/item/CREATE'\nexport const UPDATE = 'relier-frontend/item/UPDATE'\nexport const DESTROY = 'relier-frontend/item/DESTROY'\n\nexport const NEW_START = 'relier-frontend/item/NEW_START'\nexport const NEW_CANCEL = 'relier-frontend/item/NEW_CANCEL'\nexport const EDIT_START = 'relier-frontend/item/EDIT_START'\nexport const EDIT_CANCEL = 'relier-frontend/item/EDIT_CANCEL'\n\nexport const SET_ALL_DATA_WITH_FUNCTION = 'relier-frontend/item/SET_ALL_DATA_WITH_FUNCTION'\n\nexport const SET_SYNC_DATA_FIELDS = 'relier-frontend/item/SET_SYNC_DATA_FIELDS'\nexport const SET_SYNC_DATA_WITH_FUNCTION = 'relier-frontend/item/SET_SYNC_DATA_WITH_FUNCTION'\n\nexport const SET_EDIT_DATA_FIELDS = 'relier-frontend/item/SET_EDIT_DATA_FIELDS'\nexport const SET_EDIT_DATA_WITH_FUNCTION = 'relier-frontend/item/SET_EDIT_DATA_WITH_FUNCTION'\nexport const RESET_EDIT_DATA = 'relier-frontend/item/RESET_EDIT_DATA'\n\nexport const SET_EXTRA_DATA_FIELDS = 'relier-frontend/item/SET_EXTRA_DATA_FIELDS'\nexport const SET_EXTRA_DATA_WITH_FUNCTION = 'relier-frontend/item/SET_EXTRA_DATA_WITH_FUNCTION'\nexport const RESET_EXTRA_DATA = 'relier-frontend/item/RESET_EXTRA_DATA'\n\nexport function defaultInTransformer<Item>(data: object): Item {\n return mapKeys(data, (value, key) => camelCase(key)) as Item // TODO: Forced narrowing to Item\n}\n\nconst initialCollectionState = {}\n\nfunction collectionReducer<Item extends {id: number}, ItemExtraData>(state: ItemCollectionState<Item, ItemExtraData> = initialCollectionState, action: Partial<ItemReducerAction<Item>> = {}, options: ReducerOptions<Item> ={}) { // TODO: REMOVE Partial from Partial<ItemReducerAction<Item>>\n const {\n inTransformer=defaultInTransformer,\n itemType=\"noItem\",\n keepKeysOnUpdateFulfilled,\n } = options\n\n if (!action.meta || !action.meta.itemType || action.meta.itemType !== itemType) {\n return state\n }\n\n switch (action.type) {\n case SEED:\n case NEW_START:\n case LOAD + '_PENDING':\n return {...state,\n [action.meta.id]: itemReducer(state[action.meta.id], action, {inTransformer, itemType, keepKeysOnUpdateFulfilled})\n }\n case LIST_LOAD + '_FULFILLED':\n let newState: ItemCollectionState<Item, ItemExtraData> = {}\n\n action.payload.data.forEach((item: Item) => {\n newState[item.id] = {\n syncData: inTransformer({...item}),\n syncMeta: {\n isSyncing: false,\n lastSyncedAt: Date.now(),\n errors: [],\n },\n extraData: {},\n }\n })\n\n return {...state,\n ...newState\n }\n case CREATE + '_FULFILLED':\n return {...(omit(state, [action.meta.id])),\n [action.payload.id]: itemReducer(state[action.meta.id], action, {inTransformer, itemType, keepKeysOnUpdateFulfilled})\n }\n case NEW_CANCEL:\n case DESTROY + '_FULFILLED':\n return omit(state, [action.meta.id])\n case EDIT_START:\n case EDIT_CANCEL:\n case LOAD + '_FULFILLED':\n case LOAD + '_REJECTED':\n case CREATE + '_PENDING':\n case CREATE + '_REJECTED':\n case UPDATE + '_PENDING':\n case UPDATE + '_FULFILLED':\n case UPDATE + '_REJECTED':\n case DESTROY + '_PENDING':\n case DESTROY + '_REJECTED':\n case SET_ALL_DATA_WITH_FUNCTION:\n case SET_SYNC_DATA_FIELDS:\n case SET_SYNC_DATA_WITH_FUNCTION:\n case SET_EDIT_DATA_FIELDS:\n case SET_EDIT_DATA_WITH_FUNCTION:\n case RESET_EDIT_DATA:\n case SET_EXTRA_DATA_FIELDS:\n case SET_EXTRA_DATA_WITH_FUNCTION:\n case RESET_EXTRA_DATA:\n default:\n if (state[action.meta.id]) {\n return {...state,\n [action.meta.id]: itemReducer(state[action.meta.id], action, {inTransformer, itemType, keepKeysOnUpdateFulfilled})\n }\n } else {\n return state\n }\n }\n}\n\nconst initialItemState = {extraData: {}}\n\nfunction itemReducer<Item, ItemExtraData>(state: ReducerItem<Item, ItemExtraData> = initialItemState, action: Partial<ItemReducerAction<Item>> = {}, options: ReducerOptions<Item> = {}): ReducerItem<Item, ItemExtraData> { // TODO: REMOVE Partial from Partial<ItemReducerAction<Item>>\n const {\n inTransformer=defaultInTransformer,\n itemType,\n keepKeysOnUpdateFulfilled,\n } = options\n\n if (!action.meta || !action.meta.itemType || action.meta.itemType !== itemType) {\n return state\n }\n\n switch (action.type) {\n case EDIT_START:\n return {...state,\n editData: {}\n }\n case EDIT_CANCEL:\n return omit(state, ['editData'])\n case LOAD + '_PENDING':\n case CREATE + '_PENDING':\n case UPDATE + '_PENDING':\n case DESTROY + '_PENDING':\n return {...state,\n syncMeta: {\n ...state.syncMeta,\n isSyncing: true,\n editSinceStartOfLastSync: false,\n },\n }\n case SEED:\n case LOAD + '_FULFILLED':\n return {...state,\n syncData: inTransformer({...action.payload.data}),\n syncMeta: {\n isSyncing: false,\n lastSyncedAt: Date.now(),\n errors: [],\n },\n }\n case CREATE + '_FULFILLED':\n case UPDATE + '_FULFILLED':\n // THIS SHOULD NOT BE IN THE REDUCER\n // REMOVE WHEN PROGRESS BAR GETS REDESIGNED\n updateProgress(action.payload.data);\n return {...state,\n syncData: inTransformer({...action.payload.data}),\n syncMeta: {\n isSyncing: false,\n lastSyncedAt: Date.now(),\n errors: [],\n },\n editData: keepKeysOnUpdateFulfilled && state.editData && state.syncMeta?.editSinceStartOfLastSync ? pick(state.editData, keepKeysOnUpdateFulfilled) : {},\n }\n case LOAD + '_REJECTED':\n case CREATE + '_REJECTED':\n case UPDATE + '_REJECTED':\n case DESTROY + '_REJECTED':\n return {...state,\n syncMeta: {\n ...state.syncMeta,\n isSyncing: false,\n errors: [action.payload.message]\n }\n }\n case SET_ALL_DATA_WITH_FUNCTION:\n return {...state,\n ...action.payload.fn(state.syncData, state.editData, state.extraData),\n syncMeta: {\n ...state.syncMeta,\n editSinceStartOfLastSync: true,\n },\n }\n case SET_SYNC_DATA_FIELDS:\n return {...state,\n syncData: {...state.syncData,\n ...action.payload.fields\n }\n }\n case SET_SYNC_DATA_WITH_FUNCTION:\n return {...state,\n syncData: action.payload.fn(state.syncData, state.editData, state.extraData)\n }\n case SET_EDIT_DATA_FIELDS:\n return {...state,\n editData: {...state.editData,\n ...action.payload.fields\n },\n syncMeta: {\n ...state.syncMeta,\n editSinceStartOfLastSync: true,\n },\n }\n case SET_EDIT_DATA_WITH_FUNCTION:\n return {...state,\n editData: action.payload.fn(state.editData, state.syncData, state.extraData),\n syncMeta: {\n ...state.syncMeta,\n editSinceStartOfLastSync: true,\n },\n }\n case RESET_EDIT_DATA:\n return {...state,\n editData: {},\n }\n case SET_EXTRA_DATA_FIELDS:\n return {...state,\n extraData: {...state.extraData,\n ...action.payload.fields\n }\n }\n case SET_EXTRA_DATA_WITH_FUNCTION:\n return {...state,\n extraData: action.payload.fn(state.extraData, state.syncData, state.editData)\n }\n case RESET_EXTRA_DATA:\n return {...state,\n extraData: {},\n }\n case NEW_START:\n return {\n editData: action.meta.newItemState,\n extraData: {},\n }\n default:\n return state\n }\n}\n\n\nexport function defaultOutTransformer<Item extends object>(data: Item): object {\n return mapKeys(data, (value, key) => snakeCase(key))\n}\n\nexport function startNewItem<Item>(itemType: ItemType, newItemState: Partial<Item>, tempId: ItemTempId) {\n return {\n type: NEW_START,\n meta: {\n itemType: itemType,\n newItemState: newItemState,\n id: tempId\n },\n }\n}\n\nexport function cancelNewItem(itemType: ItemType, tempId: ItemId) {\n return {\n type: NEW_CANCEL,\n meta: {\n itemType: itemType,\n id: tempId\n },\n }\n}\n\nexport function seedItem<Item>(itemType: ItemType, id: ItemId, data: Item) {\n return {\n type: SEED,\n meta: {\n itemType: itemType,\n id: id\n },\n payload: {\n data: data\n }\n }\n}\n\nexport function startEditItem(itemType: ItemType, id: ItemId) {\n return {\n type: EDIT_START,\n meta: {\n itemType: itemType,\n id: id\n },\n }\n}\n\nexport function cancelEditItem(itemType: ItemType, id: ItemId) {\n return {\n type: EDIT_CANCEL,\n meta: {\n itemType: itemType,\n id: id\n },\n }\n}\n\nexport function setAllDataWithFunction<Item, ItemExtraData>(itemType: ItemType, id: ItemId, fn: (syncData: Item, editData: Partial<Item>, extraData: ItemExtraData) => ReducerItem<Item, ItemExtraData>) {\n return {\n type: SET_ALL_DATA_WITH_FUNCTION,\n meta: {\n itemType: itemType,\n id: id\n },\n payload: {\n fn: fn\n }\n }\n}\n\nexport function setSyncDataItem<Item>(itemType: ItemType, id: ItemId, fields: Partial<Item>) {\n return {\n type: SET_SYNC_DATA_FIELDS,\n meta: {\n itemType: itemType,\n id: id\n },\n payload: {\n fields: fields\n }\n }\n}\n\nexport function setSyncDataWithFunction<Item, ItemExtraData>(itemType: ItemType, id: ItemId, fn: (syncData: Item, editData: Partial<Item>, extraData: ItemExtraData) => Item) {\n return {\n type: SET_SYNC_DATA_WITH_FUNCTION,\n meta: {\n itemType: itemType,\n id: id\n },\n payload: {\n fn: fn\n }\n }\n}\n\nexport function setEditDataItem<Item>(itemType: ItemType, id: ItemId, fields: Partial<Item>) {\n return {\n type: SET_EDIT_DATA_FIELDS,\n meta: {\n itemType: itemType,\n id: id\n },\n payload: {\n fields: fields\n }\n }\n}\n\nexport function setEditDataWithFunction<Item, ItemExtraData>(itemType: ItemType, id: ItemId, fn: (editData: Partial<Item>, syncData: Item, extraData: ItemExtraData) => Partial<Item>) {\n return {\n type: SET_EDIT_DATA_WITH_FUNCTION,\n meta: {\n itemType: itemType,\n id: id\n },\n payload: {\n fn: fn\n }\n }\n}\n\nexport function resetEditDataItem(itemType: ItemType, id: ItemId) {\n return {\n type: RESET_EDIT_DATA,\n meta: {\n itemType: itemType,\n id: id\n }\n }\n}\n\nexport function setExtraDataItem(itemType: ItemType, id: ItemId, fields: Partial<ExtraData>) {\n return {\n type: SET_EXTRA_DATA_FIELDS,\n meta: {\n itemType: itemType,\n id: id\n },\n payload: {\n fields: fields\n }\n }\n}\n\nexport function setExtraDataWithFunction<Item, ItemExtraData>(itemType: ItemType, id: ItemId, fn: (extraData: ItemExtraData, syncData: Item, editData: Partial<Item>) => ExtraData) {\n return {\n type: SET_EXTRA_DATA_WITH_FUNCTION,\n meta: {\n itemType: itemType,\n id: id\n },\n payload: {\n fn: fn\n }\n }\n}\n\nexport function resetExtraDataItem(itemType: ItemType, id: ItemId) {\n return {\n type: RESET_EXTRA_DATA,\n meta: {\n itemType: itemType,\n id: id\n }\n }\n}\n\nexport function loadItem(itemType: ItemType, endpoint: ItemEndpoint, id: ItemId) {\n return {\n type: LOAD,\n meta: {\n itemType,\n id,\n },\n payload: axios({\n url: full_url('/' + endpoint + (id || '')),\n method: 'get',\n withCredentials: true,\n headers: {'Accept': 'application/json'}\n }),\n }\n}\n\nfunction createItemWithData<Item extends object>(itemType: ItemType, endpoint: ItemEndpoint, tempId: ItemTempId, data: Partial<Item>, outTransformer: (outItem: Partial<Item>) => object=defaultOutTransformer) {\n return {\n type: CREATE,\n meta: {\n itemType,\n tempId,\n },\n payload: axios({\n url: full_url('/' + endpoint),\n data: outTransformer(data),\n method: 'post',\n withCredentials: true,\n headers: {'Accept': 'application/json'}\n })\n }\n}\n\nexport function createItem<Item extends object>(itemType: ItemType, endpoint: ItemEndpoint, tempId: ItemTempId, outTransformer: (outItem: Partial<Item>) => object=defaultOutTransformer, afterDispatch) {\n return (dispatch: Dispatch, getState: () => ReducerState) => {\n let state = getState()\n let item = itemFromState<Item, unknown>(itemType, tempId, state)\n\n const response: any = dispatch(createItemWithData(itemType, endpoint, tempId, item.editData || {}, outTransformer))\n\n if (afterDispatch) {\n response.then((data) => afterDispatch(data))\n }\n }\n}\n\nexport function updateItemWithData<Item extends object>(itemType: ItemType, endpoint: ItemEndpoint, id: ItemId, data: Partial<Item>, outTransformer: (outItem: Partial<Item>) => object=defaultOutTransformer) {\n return {\n type: UPDATE,\n meta: {\n itemType,\n id,\n },\n payload: axios({\n url: full_url('/' + endpoint + (id || '')),\n data: {[snakeCase(itemType)]: outTransformer(data)},\n method: 'put',\n withCredentials: true,\n headers: {'Accept': 'application/json'}\n })\n }\n}\n\nexport function updateItem<Item extends object>(itemType: ItemType, endpoint: ItemEndpoint, id: ItemId, outTransformer: (outItem: Partial<Item>) => object=defaultOutTransformer): ThunkAction<void, ReducerState, unknown, AnyAction> {\n return (dispatch: Dispatch, getState: () => ReducerState) => {\n let state = getState()\n let item = itemFromState<Item, unknown>(itemType, id, state)\n\n dispatch(updateItemWithData(itemType, endpoint, id, item.editData || {}, outTransformer))\n }\n}\n\nexport function destroyItem(itemType: ItemType, endpoint: ItemEndpoint, id: ItemId) {\n return {\n type: DESTROY,\n meta: {\n itemType: itemType,\n id: id\n },\n payload: axios({\n url: full_url('/' + endpoint + (id || '')),\n method: 'delete',\n withCredentials: true,\n headers: {'Accept': 'application/json'}\n })\n }\n}\n\nexport function shouldLoadItem<Item, ItemExtraData>(itemType: ItemType, state: ReducerState, id: ItemId) {\n const item = itemFromState<Item, ItemExtraData>(itemType, id, state)\n if (!item) {\n return true\n } else if (item.syncMeta?.isSyncing) {\n return false\n } else if (item.syncMeta?.lastSyncedAt && (Date.now() - item.syncMeta?.lastSyncedAt > 30000)) {\n return true\n } else {\n return false\n }\n}\n\nexport function loadIfNeededItem(itemType: ItemType, endpoint: ItemEndpoint, id: ItemId) {\n return (dispatch: Dispatch, getState: () => ReducerState) => {\n if (shouldLoadItem(itemType, getState(), id)) {\n return dispatch(loadItem(itemType, endpoint, id))\n }\n }\n}\n\nexport function itemFromState<Item, ItemExtraData>(itemType: ItemType, id: ItemId, state: ReducerState): ReducerItem<Item, ItemExtraData> {\n return state[pluralize(itemType)] && state[pluralize(itemType)][id]\n}\n\nexport function itemSyncDataFromState<Item>(itemType: ItemType, id: ItemId, state: ReducerState) {\n let item = itemFromState<Item, unknown>(itemType, id, state)\n if (item) {\n return item.syncData\n }\n}\n\nexport function itemSyncMetaFromState<Item, ItemExtraData>(itemType: ItemType, id: ItemId, state: ReducerState) {\n let item = itemFromState<Item, ItemExtraData>(itemType, id, state)\n if (item) {\n return item.syncMeta\n }\n}\n\nexport function itemEditDataFromState<Item>(itemType: ItemType, id: ItemId, state: ReducerState) {\n let item = itemFromState<Item, unknown>(itemType, id, state)\n if (item) {\n return item.editData\n }\n}\n\nexport function itemExtraDataFromState<ItemExtraData>(itemType: ItemType, id: ItemId, state: ReducerState) {\n let item = itemFromState<unknown, ItemExtraData>(itemType, id, state)\n if (item) {\n return item.extraData\n }\n}\n\nexport function itemMergedDataFromState<Item>(itemType: ItemType, id: ItemId, state: ReducerState, mergeFunction=(data?: Item, editData?: Partial<Item>) => assign({}, data, editData)) {\n let item = itemFromState<Item, unknown>(itemType, id, state)\n if (item ) {\n return mergeFunction(item.syncData, item.editData)\n }\n}\n\nexport function itemFromStatePlus<Item, ItemExtraData>(itemType: ItemType, id: ItemId, state: ReducerState, mergeFunction=(data?: Item, editData?: Partial<Item>) => assign({}, data, editData)) {\n let item = itemFromState<Item, ItemExtraData>(itemType, id, state)\n if (item) {\n return {\n id,\n ...item,\n mergedData: mergeFunction(item.syncData, item.editData)\n }\n } else {\n return {\n id,\n extraData: {},\n mergedData: undefined,\n }\n }\n}\n\n\nexport function generateReducer<Item extends {id: number}, ItemExtraData extends object>(\n itemType: ItemType,\n options: GenerateReducerOptions<Item> = {},\n) {\n const {\n inTransformer = defaultInTransformer,\n keepKeysOnUpdateFulfilled,\n } = options\n\n return (state: ItemCollectionState<Item, ItemExtraData>, action: ItemReducerAction<Item>) => collectionReducer(state, action, {inTransformer, itemType, keepKeysOnUpdateFulfilled})\n}\n\nexport function generateActions<Item extends object, ItemExtraData extends object>(\n itemType: ItemType,\n id: ItemId,\n endpoint: ItemEndpoint,\n newItemState: Partial<Item> = {},\n options: GenerateActionOptions<Item> = {},\n) {\n const {\n outTransformer = defaultOutTransformer,\n editDataMergeFunction,\n } = options\n\n return {\n startNewItem: () => startNewItem(itemType, newItemState, id),\n cancelNewItem: () => cancelNewItem(itemType, id),\n startEditItem: () => startEditItem(itemType, id),\n cancelEditItem: () => cancelEditItem(itemType, id),\n setAllDataWithFunctionItem: (fn: (syncData: Item, editData: Partial<Item>, extraData: ItemExtraData) => ReducerItem<Item, ItemExtraData>) => setAllDataWithFunction(itemType, id, fn),\n setSyncDataItem: (fields: Partial<Item>) => setSyncDataItem(itemType, id, fields),\n setSyncDataWithFunctionItem: (fn: (syncData: Item, editData: Partial<Item>, extraData: ItemExtraData) => Item) => setSyncDataWithFunction(itemType, id, fn),\n setEditDataItem: (fields: Partial<Item>) => setEditDataItem(itemType, id, fields),\n setEditDataWithFunctionItem: (fn: (editData: Partial<Item>, syncData: Item, extraData: ItemExtraData) => Partial<Item>) => setEditDataWithFunction(itemType, id, fn),\n resetEditDataItem: () => resetEditDataItem(itemType, id),\n setExtraDataItem: (fields: Partial<ItemExtraData>) => setExtraDataItem(itemType, id, fields),\n setExtraDataWithFunctionItem: (fn: (extraData: ItemExtraData, syncData: Item, editData: Partial<Item>) => ExtraData) => setExtraDataWithFunction(itemType, id, fn),\n resetExtraDataItem: () => resetExtraDataItem(itemType, id),\n loadItem: () => loadItem(itemType, endpoint, id),\n createItem: (afterDispatch=null) => createItem(itemType, endpoint, id, outTransformer, afterDispatch),\n updateItem: () => updateItem(itemType, endpoint, id, outTransformer),\n destroyItem: () => destroyItem(itemType, endpoint, id),\n loadIfNeededItem: () => loadIfNeededItem(itemType, endpoint, id),\n itemFromState: (state: ReducerState) => itemFromState(itemType, id, state),\n itemSyncDataFromState: (state: ReducerState) => itemSyncDataFromState<Item>(itemType, id, state),\n itemSyncMetaFromState: (state: ReducerState) => itemSyncMetaFromState(itemType, id, state),\n itemEditDataFromState: (state: ReducerState) => itemEditDataFromState<Item>(itemType, id, state),\n itemMergedDataFromState: (state: ReducerState) => itemMergedDataFromState<Item>(itemType, id, state, editDataMergeFunction),\n itemExtraDataFromState: (state: ReducerState) => itemExtraDataFromState<ItemExtraData>(itemType, id, state),\n }\n}\n\n\n","import { generateReducer, generateActions, itemFromStatePlus } from './itemReducer'\n\nconst itemKey = 'learningObjective'\nconst endpoint = 'learning_objectives/'\n\nexport function generateLearningObjectiveActions(id: ItemId) {\n const learningObjectiveActions = generateActions<LearningObjective, LearningObjectiveExtraData>(itemKey, id, endpoint)\n\n return {\n startNewLearningObjective: learningObjectiveActions.startNewItem,\n cancelNewLearningObjective: learningObjectiveActions.cancelNewItem,\n startEditLearningObjective: learningObjectiveActions.startEditItem,\n cancelEditLearningObjective: learningObjectiveActions.cancelEditItem,\n setAllDataWithFunctionLearningObjective: learningObjectiveActions.setAllDataWithFunctionItem,\n setSyncDataLearningObjective: learningObjectiveActions.setSyncDataItem,\n setSyncDataWithFunctionLearningObjective: learningObjectiveActions.setSyncDataWithFunctionItem,\n setEditDataLearningObjective: learningObjectiveActions.setEditDataItem,\n setEditDataWithFunctionLearningObjective: learningObjectiveActions.setEditDataWithFunctionItem,\n resetEditDataLearningObjective: learningObjectiveActions.resetEditDataItem,\n setExtraDataLearningObjective: learningObjectiveActions.setExtraDataItem,\n setExtraDataWithFunctionLearningObjective: learningObjectiveActions.setExtraDataWithFunctionItem,\n resetExtraDataLearningObjective: learningObjectiveActions.resetExtraDataItem,\n loadLearningObjective: learningObjectiveActions.loadItem,\n createLearningObjective: learningObjectiveActions.createItem,\n updateLearningObjective: learningObjectiveActions.updateItem,\n destroyLearningObjective: learningObjectiveActions.destroyItem,\n loadIfNeededLearningObjective: learningObjectiveActions.loadIfNeededItem,\n learningObjectiveFromState: learningObjectiveActions.itemFromState,\n learningObjectiveSyncDataFromState: learningObjectiveActions.itemSyncDataFromState,\n learningObjectiveSyncMetaFromState: learningObjectiveActions.itemSyncMetaFromState,\n learningObjectiveEditDataFromState: learningObjectiveActions.itemEditDataFromState,\n learningObjectiveMergedDataFromState: learningObjectiveActions.itemMergedDataFromState,\n learningObjectiveExtraDataFromState: learningObjectiveActions.itemExtraDataFromState,\n }\n}\n\nexport function learningObjectiveFromStatePlus(id: ItemId, state: ReducerState) {\n return itemFromStatePlus<LearningObjective, LearningObjectiveExtraData>(itemKey, id, state)\n}\n\nexport const learningObjectiveCollectionReducer = generateReducer<LearningObjective, LearningObjectiveExtraData>(itemKey);\n","import { generateReducer, generateActions } from './itemReducer'\n\nconst itemKey = 'reusableObject'\nconst endpoint = 'reusable_objects/'\n\nexport function generateReusableObjectActions(id: ItemId) {\n const reusableObjectActions = generateActions<ReusableObject, ReusableObjectExtraData>(itemKey, id, endpoint)\n\n return {\n startNewReusableObject: reusableObjectActions.startNewItem,\n cancelNewReusableObject: reusableObjectActions.cancelNewItem,\n startEditReusableObject: reusableObjectActions.startEditItem,\n cancelEditReusableObject: reusableObjectActions.cancelEditItem,\n setAllDataWithFunctionReusableObject: reusableObjectActions.setAllDataWithFunctionItem,\n setSyncDataReusableObject: reusableObjectActions.setSyncDataItem,\n setSyncDataWithFunctionReusableObject: reusableObjectActions.setSyncDataWithFunctionItem,\n setEditDataReusableObject: reusableObjectActions.setEditDataItem,\n setEditDataWithFunctionReusableObject: reusableObjectActions.setEditDataWithFunctionItem,\n resetEditDataReusableObject: reusableObjectActions.resetEditDataItem,\n setExtraDataReusableObject: reusableObjectActions.setExtraDataItem,\n setExtraDataWithFunctionReusableObject: reusableObjectActions.setExtraDataWithFunctionItem,\n resetExtraDataReusableObject: reusableObjectActions.resetExtraDataItem,\n loadReusableObject: reusableObjectActions.loadItem,\n createReusableObject: reusableObjectActions.createItem,\n updateReusableObject: reusableObjectActions.updateItem,\n destroyReusableObject: reusableObjectActions.destroyItem,\n loadIfNeededReusableObject: reusableObjectActions.loadIfNeededItem,\n reusableObjectFromState: reusableObjectActions.itemFromState,\n reusableObjectSyncDataFromState: reusableObjectActions.itemSyncDataFromState,\n reusableObjectSyncMetaFromState: reusableObjectActions.itemSyncMetaFromState,\n reusableObjectEditDataFromState: reusableObjectActions.itemEditDataFromState,\n reusableObjectMergedDataFromState: reusableObjectActions.itemMergedDataFromState,\n reusableObjectExtraDataFromState: reusableObjectActions.itemExtraDataFromState,\n\n }\n}\n\nexport const reusableObjectCollectionReducer = generateReducer<ReusableObject, ReusableObjectExtraData>(itemKey);\n","// EDITOR PANELS\nexport const AET_ADMIN_TOOLS = 'relier-frontend/ui/reasoningTool/AET_ADMIN_TOOLS'\nexport const ASSESSMENT_QUESTION_DATA = 'relier-frontend/ui/reasoningTool/ASSESSMENT_QUESTION_DATA'\nexport const QUESTION_DETAILS = 'relier-frontend/ui/reasoningTool/QUESTION_DETAILS'\nexport const CASE_LEARNING_OBJECTIVES = 'relier-frontend/ui/reasoningTool/CASE_LEARNING_OBJECTIVES'\nexport const CASE_TEACHING_POINTS = 'relier-frontend/ui/reasoningTool/CASE_TEACHING_POINTS'\nexport const CASE_MAP = 'relier-frontend/ui/reasoningTool/CASE_MAP'\nexport const CASE_METADATA = 'relier-frontend/ui/reasoningTool/CASE_METADATA'\nexport const EDITORS_CHECKLIST = 'relier-frontend/ui/reasoningTool/EDITORS_CHECKLIST'\nexport const SUMMARY_OF_EDITS = 'relier-frontend/ui/reasoningTool/SUMMARY_OF_EDITS'\nexport const STUDENT_FEEDBACK = 'relier-frontend/ui/reasoningTool/STUDENT_FEEDBACK'\n\n// STUDENT PANELS\nexport const BOOKMARKS = 'relier-frontend/ui/reasoningTool/BOOKMARKS'\nexport const DIAGNOSES = 'relier-frontend/ui/reasoningTool/DIAGNOSES'\nexport const FEEDBACK = 'relier-frontend/ui/reasoningTool/FEEDBACK'\nexport const FINDINGS = 'relier-frontend/ui/reasoningTool/FINDINGS'\nexport const LABVALUES = 'relier-frontend/ui/reasoningTool/LABVALUES'\nexport const NOTES = 'relier-frontend/ui/reasoningTool/NOTES'\n\n//Action Type Definitions\nexport const TOGGLE_PANEL = 'relier-frontend/ui/reasoningTool/TOGGLE_PANEL'\nexport const OPEN_PANEL = 'relier-frontend/ui/reasoningTool/OPEN_PANEL'\nexport const TOGGLE_PANEL_DELETING = 'relier-frontend/ui/reasoningTool/TOGGLE_PANEL_DELETING'\nexport const PANEL_NODE_EDIT_START = 'relier-frontend/ui/reasoningTool/PANEL_NODE_EDIT_START'\nexport const PANEL_NODE_EDIT_END = 'relier-frontend/ui/reasoningTool/PANEL_NODE_EDIT_END'\nexport const RESET = 'relier-frontend/ui/reasoningTool/RESET'\n\n//Intial State\nconst initialState = {\n}\n\n//Reducer\nexport default function reducer(state:any = initialState, action:any = {}) { // TODO: Remove any\n switch (action.type) {\n case TOGGLE_PANEL:\n if (state.activePanel === action.payload.panelType) {\n return {...state, activePanel: undefined, isPanelDeleting: false, activeEditNodeUid: null}\n } else {\n return {...state, activePanel: action.payload.panelType, isPanelDeleting: false, activeEditNodeUid: null}\n }\n case OPEN_PANEL:\n return {...state, activePanel: action.payload.panelType, isPanelDeleting: false, activeEditNodeUid: null}\n case TOGGLE_PANEL_DELETING:\n return {...state, isPanelDeleting: !state.isPanelDeleting}\n case PANEL_NODE_EDIT_START:\n return {...state, activeEditNodeUid: action.payload.nodeUid}\n case PANEL_NODE_EDIT_END:\n if (state.activeEditNodeUid === action.payload.nodeUid) {\n return {...state, activeEditNodeUid: null}\n } else {\n return state\n }\n case RESET:\n return {...initialState}\n default:\n return state\n }\n}\n\n//Actions\nexport function togglePanel(panelType) {\n return {\n type: TOGGLE_PANEL,\n payload: {panelType}\n }\n}\n\nexport function openPanel(panelType) {\n return {\n type: OPEN_PANEL,\n payload: {panelType}\n }\n}\n\nexport function togglePanelDeleting() {\n return {\n type: TOGGLE_PANEL_DELETING,\n }\n}\n\nexport function panelNodeEditStart(nodeUid: UID) {\n return {\n type: PANEL_NODE_EDIT_START,\n payload: {nodeUid}\n }\n}\n\nexport function panelNodeEditEnd(nodeUid: UID) {\n return {\n type: PANEL_NODE_EDIT_END,\n payload: {nodeUid}\n }\n}\n\nexport function reset() {\n return {\n type: RESET,\n }\n}\n\nexport const reasoningToolActionCreators = {\n togglePanel: togglePanel,\n openPanel: openPanel,\n togglePanelDeleting: togglePanelDeleting,\n panelNodeEditStart: panelNodeEditStart,\n panelNodeEditEnd: panelNodeEditEnd,\n reset: reset,\n}\n","import {\n camelCase,\n mapKeys,\n} from 'lodash'\n\nimport { addMissingUids } from '../helpers/Doc/Functions/base'\n\nimport { generateReducer, generateActions, itemFromStatePlus } from './itemReducer'\n\nconst itemKey = 'variant'\nconst endpoint = 'variants/'\n\nfunction inTransformer(data) {\n let transformedData = mapKeys(data, (value, key) => camelCase(key)) as Variant;\n if (typeof transformedData.data !== \"string\") {\n transformedData.data = addMissingUids(transformedData.data);\n }\n\n return transformedData\n}\n\nexport function generateVariantActions(id: ItemId) {\n const variantActions = generateActions<Variant, VariantExtraData>(itemKey, id, endpoint)\n\n return {\n startNewVariant: variantActions.startNewItem,\n cancelNewVariant: variantActions.cancelNewItem,\n startEditVariant: variantActions.startEditItem,\n cancelEditVariant: variantActions.cancelEditItem,\n setAllDataWithFunctionVariant: variantActions.setAllDataWithFunctionItem,\n setSyncDataVariant: variantActions.setSyncDataItem,\n setSyncDataWithFunctionVariant: variantActions.setSyncDataWithFunctionItem,\n setEditDataVariant: variantActions.setEditDataItem,\n setEditDataWithFunctionVariant: variantActions.setEditDataWithFunctionItem,\n resetEditDataVariant: variantActions.resetEditDataItem,\n setExtraDataVariant: variantActions.setExtraDataItem,\n setExtraDataWithFunctionVariant: variantActions.setExtraDataWithFunctionItem,\n resetExtraDataVariant: variantActions.resetExtraDataItem,\n loadVariant: variantActions.loadItem,\n createVariant: variantActions.createItem,\n updateVariant: variantActions.updateItem,\n destroyVariant: variantActions.destroyItem,\n loadIfNeededVariant: variantActions.loadIfNeededItem,\n variantFromState: variantActions.itemFromState,\n variantSyncDataFromState: variantActions.itemSyncDataFromState,\n variantSyncMetaFromState: variantActions.itemSyncMetaFromState,\n variantEditDataFromState: variantActions.itemEditDataFromState,\n variantMergedDataFromState: variantActions.itemMergedDataFromState,\n variantExtraDataFromState: variantActions.itemExtraDataFromState,\n }\n}\n\nexport function variantFromStatePlus(id: ItemId, state: ReducerState) {\n return itemFromStatePlus<Variant, VariantExtraData>(itemKey, id, state)\n}\n\nexport const variantCollectionReducer = generateReducer<Variant, VariantExtraData>(itemKey, {inTransformer: inTransformer, keepKeysOnUpdateFulfilled: [\"changeData\"]});;\n","import {\n camelCase,\n mapKeys,\n} from 'lodash'\n\nimport { addMissingUids } from '../helpers/Doc/Functions/base'\n\nimport { generateReducer, generateActions } from './itemReducer'\n\nconst itemKey = 'version'\nconst endpoint = 'api/v2/versions/'\n\nfunction inTransformer(data) {\n let transformedData = mapKeys(data, (value, key) => camelCase(key)) as Version;\n transformedData.data = addMissingUids(transformedData.data);\n\n transformedData.changeAuthorIds = [] // TODO ADD BACK IN IDS\n\n return transformedData\n}\n\nexport function generateVersionActions(id: ItemId) {\n const versionActions = generateActions<Version, VersionExtraData>(itemKey, id, endpoint)\n\n return {\n startNewVersion: versionActions.startNewItem,\n cancelNewVersion: versionActions.cancelNewItem,\n startEditVersion: versionActions.startEditItem,\n cancelEditVersion: versionActions.cancelEditItem,\n setAllDataWithFunctionVersion: versionActions.setAllDataWithFunctionItem,\n setSyncDataVersion: versionActions.setSyncDataItem,\n setSyncDataWithFunctionVersion: versionActions.setSyncDataWithFunctionItem,\n setEditDataVersion: versionActions.setEditDataItem,\n setEditDataWithFunctionVersion: versionActions.setEditDataWithFunctionItem,\n resetEditDataVersion: versionActions.resetEditDataItem,\n setExtraDataVersion: versionActions.setExtraDataItem,\n setExtraDataWithFunctionVersion: versionActions.setExtraDataWithFunctionItem,\n resetExtraDataVersion: versionActions.resetExtraDataItem,\n loadVersion: versionActions.loadItem,\n createVersion: versionActions.createItem,\n updateVersion: versionActions.updateItem,\n destroyVersion: versionActions.destroyItem,\n loadIfNeededVersion: versionActions.loadIfNeededItem,\n versionFromState: versionActions.itemFromState,\n versionSyncDataFromState: versionActions.itemSyncDataFromState,\n versionSyncMetaFromState: versionActions.itemSyncMetaFromState,\n versionEditDataFromState: versionActions.itemEditDataFromState,\n versionMergedDataFromState: versionActions.itemMergedDataFromState,\n versionExtraDataFromState: versionActions.itemExtraDataFromState,\n }\n}\n\nexport const versionCollectionReducer = generateReducer<Version, VersionExtraData>(itemKey, {inTransformer: inTransformer, keepKeysOnUpdateFulfilled: [\"changeData\"]});\n","// EDITOR PANELS\nexport const SET_KEYS = 'relier-frontend/docSetting/SET_KEY'\n\n//Intial State\nconst initialState = {\n}\n\n//Reducer\nexport default function reducer(state:any = initialState, action:any = {}) { // TODO: Remove any\n switch (action.type) {\n case SET_KEYS:\n return {...state, ...action.payload.fields}\n default:\n return state\n }\n}\n\n//Actions\nexport function setSettings(fields={}) {\n return {\n type: SET_KEYS,\n payload: {fields}\n }\n}\n\nexport function settingFromState(key: string, state: ReducerState) {\n return state.docSettings[key]\n}\n","import { combineReducers } from 'redux'\n\nimport { documentCollectionReducer as documents } from './documents'\nimport { documentUserStateCollectionReducer as documentUserStates } from './documentUserStates'\nimport { learningObjectiveCollectionReducer as learningObjectives } from './learningObjectives'\nimport { reusableObjectCollectionReducer as reusableObjects } from './reusableObjects'\nimport { variantCollectionReducer as variants } from './variants'\nimport { versionCollectionReducer as versions } from './versions'\n\nimport docSettings from './docSettings';\nimport reasoningTool from './ui/reasoningTool'\n\nconst ui = combineReducers({\n reasoningTool,\n})\n\nexport default combineReducers({\n ui,\n\n documents,\n documentUserStates,\n learningObjectives,\n reusableObjects,\n variants,\n versions,\n docSettings,\n})\n","import { applyMiddleware, createStore, compose } from 'redux'\nimport { thunk } from 'redux-thunk'\nimport promise from 'redux-promise-middleware'\n// import { createLogger } from 'redux-logger'\n\n\nimport reducer from 'reducers/indexNewDocEdit'\n\nconst middleware = applyMiddleware(\n thunk,\n promise,\n // createLogger({}),\n)\n\nconst composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose\n\nexport default () => {\n const store = createStore(reducer, composeEnhancers(middleware))\n return store\n}\n","import * as React from 'react'\nimport { Provider } from 'react-redux'\nimport * as ActionCable from '@rails/actioncable'\n\nimport store from '../store/storeNewDocEdit'\nimport NewEditDocContainer from '../components/NewEditDoc/Container'\nconst CableApp = {\n cable: ActionCable.createConsumer()\n}\n\nconst sessionId = Math.floor((Math.random() * 10000000000));\n\nconst NewEditDocApp = (props, _railsContext) => (\n () => (\n <Provider store={store()}>\n <NewEditDocContainer cableApp={CableApp} sessionId={sessionId} {...props}/>\n </Provider>\n )\n)\n\nexport default NewEditDocApp\n\nexport function UnwrappedNewEditDocApp(props, _railsContext) {\n return (\n <Provider store={store()}>\n <NewEditDocContainer {...props}/>\n </Provider>\n )\n}\n","import Swal from 'sweetalert2';\n\nconst MySwal = Swal.mixin({\n customClass: {\n confirmButton: 'aq-button-2 medium with-margin',\n cancelButton: 'aq-button-2 medium with-margin outline black',\n closeButton: 'aq-button-2 medium with-margin outline black',\n denyButton: 'aq-button-2 medium with-margin outline black',\n },\n buttonsStyling: false,\n});\n\nexport default MySwal;"],"names":["analyticsModule","track","eventName","data","ahoy","window","analytics","authToken","Cookies","get","client","setConfig","baseUrl","headers","Authorization","createClient","createConfig","getAdminAssessmentQuestionSets","options","_objectSpread","url","createAdminAssessmentQuestionSet","post","getAdminAssessmentQuestions","updateBulkAdminAssessmentQuestions","patch","deleteBulkAdminAssessmentQuestions","delete","getAdminAssessmentQuestion","importAdminAssessmentQuestions","formDataBodySerializer","forkAdminAssessmentQuestion","getAdminAssessmentStatistics","getAdminInitData","getAdminLearningObjectives","getAdminReusableObjects","getAdminVersions","getCommonUser","VersionsList","itemId","itemType","itemData","_useState2","_slicedToArray","useState","versions","setVersions","_useState4","filteredVersions","setFilteredVersions","_useState6","comparisonKeys","setComparisonKeys","_useState8","hideCreateEvent","setHideCreateEvent","_useState10","hideUnmodifiedColumns","setHideUnmodifiedColumns","useEffect","async","resp","query","item_id","item_type","per","fetchVersions","res","filter","version","event","generateComparisonKeys","extractKeys","obj","prefix","Object","keys","reduce","key","fullPath","Array","isArray","push","keysSet","Set","forEach","reified_object","add","modifiedKeys","from","i","length","currentValue","getValueByPath","previousObject","previousValue","JSON","stringify","path","split","acc","undefined","React","className","type","checked","onChange","e","target","style","marginLeft","map","colSpan","textAlign","index","prevVersion","id","whodunnit","Date","created_at","toLocaleString","isLost","backgroundColor","AqButton","props","_props$disabled","disabled","_props$outline","outline","children","onClick","classNames","AssessmentDashboardModal","Component","constructor","super","handleKeyDown","this","isOpen","onClose","handleSave","handleCheckboxChange","_event$target","name","setState","_this$state","state","preserveAssessment","preservePurpose","preserveStudents","confirmMessage","confirm","proceedToSave","_this$state2","preserveDates","requestUrl","URLSearchParams","preserve_dates","preserve_assessment","preserve_purpose","preserve_students","toString","location","href","isDateRangeValid","_date_range$split$map2","date_range","date","componentDidMount","document","addEventListener","componentWillUnmount","removeEventListener","render","_this$props","_this$state3","assessmentName","assessment","replace","showAvailabilityDates","fontSize","fontWeight","padding","paddingRight","purpose","student_count","margin","float","textTransform","CohortProgressesDeliveriesTable","sortDeliveries","sortCol","sortDir","filteredData","sortByClc","sort","a","b","fa","toLowerCase","fb","sortImage","TableDownArrowImage","TableUpArrowImage","cohorts","search","cohortFiltered","rows","assessment_date","discipline","system","clinical_focus","cohortFilters","clcFractionNames","dir","applyFilters","item","matchesSystem","some","sys","includes","matchesClinicalFocus","cf","matchesSearch","learning_objective","teaching_point_url_name","case","handleFilterChange","filterName","values","setFilters","getFilteredDetails","ids","params","fetch","filter_url","json","filtersRow","multiple_cohorts","CustomMultiSelect","assessment_date_options","selectedOptions","placeholder","discipline_options","option","purpose_options","system_options","clinical_focus_options","selectedAssessmentDate","updatedssessmentDates","ad","selectedDiscipline","updatedDisciplines","d","selectedSystem","updatedSystems","s","selectedPurpose","updatedPurpose","selectedClinicalFocus","updatedClinicalFocus","getCorrectResponses","row","accuracy_fraction","accuracy_percentage","getClcStyle","percentage","display","width","currentFilterCol","value","filters","cohort","dateMatch","courseNameMatch","course_name","trim","purposeMatch","p","c","delivery_id","then","details","indexOf","getTeachingPointModal","TeachingPointModal","title","docType","documentId","teaching_point","versionId","teaching_point_publish_variant_id","currentUser","user","isAdmin","admin","currentRoleName","permissions","displayUid","uid","students_count","src","alt","wordBreak","overflowWrap","excel_fraction","Math","round","competent_fraction","unsure_fraction","novice_fraction","warning_fraction","color","document_set_document_relation_path","textDecoration","case_completed_fraction","ClcBar","cognitive_competence_score_excel","cognitive_competence_score_competent","cognitive_competence_score_unsure","cognitive_competence_score_novice","cognitive_competence_score_warning","CurricularSummaryDiscipline","updateCollapsedState","isSmallScreen","innerWidth","collapsed","handleSort","isClc","SortingCurricularSummary","isDefaultCollapse","questions_count_by_clinical_disciplines","tabIndex","onKeyPress","newSortDir","Ibubble","completed_questions","ccc_hash","students_assessed","CurricularSummaryFocus","questions_count_by_clinical_focuses","CurricularSummarySystem","questions_count_by_systems","categories","description","comparison","currentSortCol","onSort","handleSortAsc","handleSortDesc","onTouchStart","handleClickOutside","dropdownRef","current","contains","toggleDropdown","prevState","handleOptionChange","optionValue","updatedOptions","dropdownArrow","ref","position","cursor","StudentLearningProgressTable","sortProgresses","order","aIndex","concat","early_assessment_date","late_assessment_date","assessment_type","matchesEarlyAssessmentDate","date_range_for_early_assessment","matchesLateAssessmentDate","date_range_for_late_assessment","matchesAssessmentType","student_name","status","report_type","status_for_early_assessment","status_for_late_assessment","early_assessment_date_options","late_assessment_date_options","justifyContent","marginBottom","selectedAssessmentType","updatedAssessmentType","at","selectedEarlyAssessmentDate","updatedEarlyAssessmentDate","adt","selectedLateAssessmentDate","updatedLateAssessmentDate","rowSpan","height","sortColName","marginTop","student_case_log_path","progress_indicator_color_early","progress_indicator_text_early","early_rostering_progress_url","ind_result_faculty_feature","page","source","student_full_name","student_email","email","assessment_name","lpi","progress_indicator_color_late","progress_indicator_text_late","late_rostering_progress_url","case_completion_fraction","FileUploader","onSubmit","preventDefault","files","changeLoadingCountByValue","formData","FormData","append","entries","extraData","val","firstFileName","axios","fileUploadPath","ReactOnRails","response","onSuccess","alert","catch","error","console","loadingCount","label","bind","onClickWrapper","confirmTitle","confirmOKText","stopPropagation","action","customConfirmBox","message","callback","okLabel","_props$className","_props$highlighted","highlighted","_props$small","small","_props$loading","loading","loadingName","ariaLabel","GenLoadingSpinner","CollapsibleListItem","header","content","setCollapsed","handleClick","flat","GenDirectionalButtons","selectedValue","selectedDirection","onUpdate","buttons","onButtonClick","direction","FILTERS_SETTINGS","forKey","optionsKey","filterGroup","shouldHide","context","subtitle","optionsCount","GenList","createFilterOptions","filterType","documentLookupTable","arrayOptions","uniqueCount","k","getHistoryState","history","pick","setHistoryState","currentState","newPartial","newState","assign","replaceState","handleSearchChange","searchValue","currentItems","gettingNewPage","pageNumber","searchTimer","clearTimeout","setTimeout","updateSearchWithTimer","handleLOSearchChange","loSearchValue","loSearchTimer","handleSearchKeyPress","getUpdatedList","timer","updateSort","newSortValue","newSortDirection","sortValue","sortDirection","that","newKey","newSelect","newValue","currentActiveFilters","activeFilters","newActiveFilters","attr","computeStateFilterOptions","selectedDocuments","otherOptions","collectDocuments","newActiveDynamicFilters","scopeHash","fromPairs","filterSetting","documentArray","documentCountHash","elem","calculateDynamicOptions","currentFilters","selectedValueLabel","filterOptions","find","z","parseInt","substring","lastIndexOf","newFilterOptions","currentFilterDocuments","allDocumentsKeys","newClonedFilter","handleDynamicFilterChange","currentActiveDynamicFilters","activeDynamicFilters","selectedFilters","every","v","nv","handleGenericFilterChange","currentActiveGenericFilters","activeGenericFilters","newActiveGenericFilters","moreClick","getAdditionalPage","checkVisibilityForMore","getElementById","moreScrollId","elm","rect","getBoundingClientRect","viewHeight","max","documentElement","clientHeight","innerHeight","bottom","top","checkVisible","dataForQuery","notIds","not_ids","lo_search","sort_order","sort_by","itemsPerPage","per_page","filterValues","dynamic_filters","permanentFilters","where","genericFilterValues","selectedOption","activeGenericFilter","genericFilterOptions","genericFilter","genericFilterWhere","generic_filters","getPageCount","successCallback","itemCountURL","$","ajax","full_url","dataType","contentType","success","xhr","log","responseText","mergeDocumentItems","newItems","itemsMap","reducedItem","stripSearchSpans","prerequisite_document","prerequisiteDocuments","newItem","x","getPage","result","historyPersistance","uniqBy","itemsLastRecieved","isInfiniteScroll","currentItemCountMsg","moreItems","MoreItemsContainer","tableHeader","InfiniteScrollContainer","handleToggleSelectionBasketModalOpen","selectionBasketModalOpen","selectionBasketItem","docItem","paddingBottom","paddingTop","hasAnySelectedSubservientDocuments","removeIdFromSelectionBasket","removeDocumentId","selectedDocumentId","deselectAll","selected","defaults","defaultItemsPerPage","floor","random","merged","ongoingFetchController","abort","controller","AbortController","queryParams","itemsURL","signal","html","htmlAfterOneStrip","viewSelectionBasket","itemCountBox","searchBox","searchBoxForLO","sortOptions","controlPanel","modalHeader","showPrerequisiteWarning","removeAllButton","selectionBasketModal","GenModal","open","borderBottom","useSelectionBasket","filterRole","searchByLO","coursePageUpgrade","marginRight","role","defaultSortValue","defaultSortDirection","boxShadow","border","filterPanel","defaultValue","dynamicFilters","isMultiSelect","groupBy","filterSettings","Select","isMulti","listItems","pinnedItems","itemView","tableStyle","stripSearch","canRemove","otherPages","selectPanel","coursepage","displayDiv","defaultProps","variant","GenPostButton","handleSubmit","isLoading","submit","classes","method","openInNewTab","StickyTable","setStickyHeader","querySelectorAll","stickyTable","stickyRowHeights","stickyRow","stickyCell","offsetHeight","onresize","GenSortTable","dataURL","rowData","rowDataGenerator","defaultSort","table","searchWidth","exportWidth","searchKeys","exportButtonURL","infoText","extraButtons","dangerouslySetInnerHTML","__html","searchPlaceholder","exportButton","columnGroup","columnWidths","calculatedWidths","headerView","words","word","rowDatum","searchKey","compare","percent_complete","prev","next","localeCompare","rowView","noRowsMessage","GenToggleBar","toggleButtons","button","GenButton","GenToggleView","views","viewObj","activeKey","toggleControls","activeViewIndex","view","IntegrationsTags","finalDiagnosesInfo","final_diagnoses","final_diagnosis","clinicalExcellenceInfo","clinical_excellence","basicScienceDisciplineInfo","basic_science_disciplines","DocEditBarFindAndReplaceControls","userContext","editingContext","editingContextExtra","mergedData","currentMenu","menu","findScope","findText","replaceText","isFindButtonDisabled","findMatches","isReplaceButtonDisabled","closeCurrentMenu","setCurrentMenu","FIND_AND_REPLACE","batch","setFindText","handleFind","encodeURIComponent","ok","text","Error","globalSearchResultCount","match","csvFile","Blob","downloadLink","createElement","download","URL","createObjectURL","body","appendChild","click","resultCount","newFindMatches","slice","baseNode","RegExp","escapeRegExp","docReduceBlockNodes","accum","node","nodeInlineContentKeys","inlineContentKey","findRegExp","regResult","exec","start","contentKey","end","findAllSelectionsByText","firstMatch","setCurrentDocSelection","lineage","findNodeLineageByUid","scrollToLineage","addState","setReplaceText","toReplaceSelection","replaceStyledText","styleRanges","addChange","newChangeTextAndNodesChange","allMatches","addChanges","DocEditHeaderColorPicker","currentDocSelection","isColorPickerOpen","TEXT_COLOR_PICKER","currentColor","activeStylesFromChanges","args","hexCode","_React$useState2","newColor","setNewColor","selectedColor","handleChange","hex","newAddStyleChange","variantId","handleCancel","colorPicker","ChromePicker","DocEditHeaderLinkInput","link","autoFocus","newDeleteStyleChange","DocEditHeaderBooleanInput","default","htmlFor","disableMetadataEdit","newSetKeyValueChange","DocEnumTagsInput","editWindowOpen","toggleEditWindow","tags","editWindow","optionName","isChecked","join","DocEditHeaderFalseOrNumberInput","newNumber","isNaN","DocEditHeaderSelectInput","DocEditHeaderTextInput","handleBlur","inputValue","beforeSaveFunction","onBlur","DocEditHeaderTagsInput","inputTag","setTags","newTags","onMinusClick","toDeleteTag","tag","onPlusClick","uniq","keyHandlers","return","HotKeysAnyType","HotKeys","handlers","DocEditHeaderMultiSelectInput","isDisabled","onChangeValue","DocEditHeaderMetadataInputs","onlyKeys","nodeType","getSubType","nodeDefinition","nodeDefinitions","deref","editWithInputs","editWithList","generateEditWithList","editWithData","editNodeInvisible","editKey","editWithName","editWithArgs","displayName","inAllEditHeaderInputs","toInteger","DocEditHeaderEnumTagsInput","DocEditHeader","isEditing","currentlyEditingNodeLineage","editContentNodes","nodeLineage","prevNode","nodesSinceLastSection","takeRightWhile","lastElementIndex","indexOfToEditNodes","allNodesEditHeaders","indexOfToEditNode","level","editPages","nonRootActionButtons","parent","pathFromParent","findNodePathByUid","parentContentKey","displaySiblingIndex","displaySiblingCount","displaySiblingBeforeIndex","editIndex","displaySiblingAfterIndex","newMoveNodeUpChange","variantUid","newMoveNodeDownChange","deleteContentNodes","deletePages","clearCurrentDocSelection","newDeleteNodeChange","divider","editHeader","ConvertToRLOModal","rlo","mappingContext","disableFields","setName","_React$useState4","setDescription","_React$useState6","learningObjectiveId","setLearningObjectiveId","_React$useState8","nameError","setNameError","_React$useState10","currentRO","setCurrentRO","_React$useState12","errorModalOpen","setErrorModalOpen","_React$useState14","confirmationModalOpen","setConfirmationModalOpen","learningObjectiveReusableObjects","loro","reusable_object","rloClasses","shouldMapToLearningObjectives","R","CAUSAL_EXPLANATION_CLASSES","CORE_CONCEPT_CLASSES","whiteSpace","document_sets","documents","learningObjectives","lo","closeErrorModal","roData","learning_objective_id","loroToBeSaved","reusable_object_id","roId","newProposedLoros","proposedLearningObjectiveReusableObjects","setProposedLearningObjectiveReusableObjects","randRGBLvl","ActiveEditor","editor","hasLock","hasLockInSession","lockIfFree","unlockIfOwned","forceLock","isHovering","setIsHovering","extraMessage","onClickAction","onMouseOver","onMouseLeave","ActiveEditors","activeEditors","lockState","lockIsLocked","lockUserId","sessionId","lockSessionId","rloModalOpen","setRloModalOpen","setRlo","addModalOpen","setAddModalOpen","showRLOResponse","setShowRLOResponse","closeRloModal","ReusableObjectList","item_url","document_lookup_table","addModalContinue","LIST_RLO_MODAL","review_variant","change_data","roDocumentCount","siblingUid","newAddTextNodesBeforeNodeChange","newAddTextAndNodesToNodeChange","RLO_MODAL","closeAddModal","DocEditBarNodeGeneralControls","documentContext","projectContext","activeEditorsDisplay","shouldShowEditor","controls","isActiveStyle","isLinkStyle","EDIT_LINK","selection","toggleStyle","tempForType","createComments","NEW_COMMENT_THREAD","createExistingContentRlo","activeMemberName","projectProductionAssociate","ListRLOModal","featureFlag","new_landing_pages","DocEditBarTopControls","currentVersion","displayContext","versionType","determineVersionType","_versionPushButtonDat","versionPushButtonData","pushButtonName","pushButtonConfirmationText","pushButtonPath","pushButtonReplaceableVariant","pushButtonURL","displayModeSelector","displayMode","isDisplayMode","setDisplayMode","displayModes","STUDENT","UNGATED","FULL","OUTLINE","publishPermission","publishMultiUseRlo","publish","versionTypeCssClassPrefix","versionTypeShortName","setVersionId","Number","publishVersionId","ongoingMaintenaceVersionId","scheduledReviewVersionId","canUndo","undo","canRedo","redo","isActiveEditData","save","isSyncing","isAutoSaveOn","toggleAutoSave","resetState","viewMediaAssets","MEDIA_MANAGER","mediaType","trackChangesEditMode","isTrackChangesEditMode","setTrackChangesEditMode","allowedEditMode","trackChangesEditModes","EDITING_MODE","SUGGESTING_MODE","changesDisplayMode","isChangesDisplayMode","setChangesDisplayMode","versionTypes","PUBLISHED","changesDisplayModes","startCase","lowerCase","viewLinksReport","DocEditBarMediaManager","mediaContext","createHandler","deleteHandler","replaceHandler","handleNewResourcesResponse","digital_assets","asset","handleResourceReplacement","assets","old_asset","deleteWithConfirmFunction","dataset","externalId","media_type","getAssetAssociations","responseHandler","associations","deleteAssetAssociation","modelId","modelType","makeCover","setVersionCoverImage","deleteButton","deleteMediaAssets","external_identifier","mediaItems","images","distribution_url","coverImage","editMediaAssets","makeCoverButton","audios","preload","videos","captionsTrack","captionItem","captions","pop","kind","srcLang","crossOrigin","captionsUploadButton","replacing","getUploadCountByMediaType","countChange","changeUploadCountForMediaTypeByValue","pdfs","uploadingParagraph","uploadButton","createMediaAssets","GenUpdateOnBlurTextField","updateOnBlur","EditBarMediaPicker","MEDIA_PICKER","innerContent","imageAsset","makeImage","currentMenuNode","audioAsset","possibleVideos","videoAsset","caption","capn_1","capn","uri","DocEditBar","editBarSideNavChanges","savingErrors","DocEditMediaPicker","DocStyledTextEditor","_props$content","disableStyleTextEditing","independentlyEditable","_props$placeholder","isAllEmpty","inlineIrrlevantRanges","firstRange","compressRanges","range","htmlContent","DocConvertRangeInlineJSON","colorLookup","editableData","contentEditable","sharedProps","autoComplete","autoCorrect","autoCapitalize","spellCheck","draggable","suppressContentEditableWarning","DocStyledText","readOnly","_Array$from2","courseNode","caseTitle","String","startsWith","textContent","renderContent","isRangeInlineJSON","DocConvertHTML","DocCDQFeatures","cdqFeatures","cdqFeatureRows","cdqFeature","includeInAllNodes","backgroundStyleFromNode","returnPlainText","DocSectionHeader","collapsible","inactiveBool","openSiblingSectionUIDs","_props$roDocumentCoun","onHeaderClick","setFocusedBookmarkUid","logEvent","OPENED_SECTION_LOG","node_uid","onlyOneUncollapsedSection","canBeEditing","collapsedIndicator","addLOButton","isEmpty","intersection","IconCircleExpandImage","IconCircleCollapseImage","startCoverEditAction","saq_phase_1","rightHeader","cardClass","cl","cardC","cardText","upperCase","cardIcon","kebabCase","topper","TEACHING_POINT_CLASSES","icon","topperTitle","faIcon","topperCollapsedIndicator","sectionTitle","MultiUseImage","SingleUseImage","QUESTION_NODE_TYPES","DocAddNode","parentNode","localClipboard","shouldHaveSpace","createContentNodes","createPages","isNumber","addNodeMenu","ADD_NODE","currentlyEditing","possibleCurrentlyEditing","parentType","addText","objectModel","generateOptions","optionsMap","keyBy","selectOptionSummaries","insertRloToDocuments","optionTitle","optionKey","selectOptions","unshift","handleSelectChange","selectNode","typesToAdd","allowableTypes","refName","cleanedLocalClipboard","docMapAllNodes","nodeP","generateUUID","newNode","generate","onMouseDown","DocBookmark","bookmarked","disableBookmarks","isEmbeded","newBookmarkState","DocNote","noteUid","noted","deleteNote","newUid","addNote","notedNodeUid","togglePanel","NOTES","panelNodeEditStart","DocAudio","isFocusedBookmark","simple","Rollbar","warning","STATE_ACTIONS","CALLBACK_ACTIONS","handleActions","actions","newStates","mergeStates","arguments","inactive","invisible","currentTimeSegmentStart","getTime","callbacks","el","getElementsByClassName","scrollTo","scrollY","submitExam","DocButton","caseName","DocGradedFeedbackBanner","addItemToCategory","mapping","categoryUID","itemUID","newMapping","mapValues","categoryArray","itemUid","DocCategoryMatcher","answer","contentCategories","contentItems","graded","contentItemsExpanded","contentItem","categoryItemValue","pickBy","contentItemArray","categoryItemAnswer","isCorrect","contentCategory","DocConvertPlainText","newAnswer","correct","incorrect","categoryRows","gradedFeedbackBanner","isEachCorrect","DocCDQQuestion","answersSelectedCount","answers","letter","fromCharCode","answerSummary","answerEditor","answerLetter","featureIndex","feature","cdqFeatureSelections","newSetKeysValuesChange","uscs","limit","isExplicitLimit","limitExplinationText","limitExplinationTextExtra","limitExplinationDiv","selectedVsLimitView","scorePreview","score","features","compact","featureScores","questionScore","cdqFeatureName","featureAnswers","correctFeatureAnswers","correctCorrectFeatureAnswers","DocCheckbox","DocHorizontalRule","onExpandCollapseClick","toggleImageModal","DocImage","imageModalOn","openPicker","EXPANDED_MOD_MAP_LOG","onImageExternalLinkClick","OPENED_MOD_MAP_LOG","renderModalContent","imageURL","imageExternalLink","external_id","asset_path","localImageURL","PlaceholderImage","image","ReactDOM","inGallery","alignment","DocImageGallery","renderedImages","EmptyImageGalleryImage","addImageButtons","imageIndex","newAddNodeChange","flatten","zip","Carousel","cols","showDots","loop","DocLearningObjective","editButton","allowLearningObjectivesEdit","learningObjectiveUid","editGradientSmall","DocLearningObjectivesList","DocBlockNodes","shouldHaveAddNodes","DocListItem","possibleInlineContent","isTreeInlineJSON","ChangeHighlightListItemMark","blockChangeHighlight","textDecorationColor","author_id","DocList","listItem","DocMultipleChoice","gradedInfo","answerOnClick","multipleSelect","newUscs","ans","defaultChecked","gradedFeedback","isAllNo","isSingleCorrect","DocParagraph","ChangeHighlightParagraphMark","textColor","hasOwnProperty","DocRatingBar","clickValue","allActions","maxValue","stars","DocTableCell","_props$rowSpan","_props$columnSpan","columnSpan","rowRange","rowIndex","columnRange","columnIndex","newUnmergeTableCells","parentTableUID","firstColumn","newMergeTableCells","firstRow","DocTableRow","cells","cell","newAddTableRowChange","newDeleteTableRowChange","DocTable","editCells","relevantColumnIndices","editColumnIndex","addColumnAfterButton","newAddTableColumnChange","newDeleteTableColumnChange","AqInfoBubble","onMouseEnter","AqSwitch","smileImageSrcs","AqSmileRating","reverse","active","createConsumer","DocTextInput","aiAutomatedSummaryStatementSubscription","aiAutomatedSummaryStatementFeedbackRequested","aiAutomatedSummaryStatementSubscriptionTimer","aiSummaryStatementLoadingFeedback","tempAiSummaryStatementUserRating","tempAiSummaryStatementUserComment","componentWillReceiveProps","newProps","updateUSCWithTimer","updateUSC","loadSummaryStatementFeedback","aiSummaryStatementIdeal","aiSummaryStatementLoadingFeedbackStartedAt","aiSummaryStatementNeedsToAcceptInfo","summaryStatementId","onSummaryStatementFeedback","onConnected","onDisconnected","onRejected","consumer","subscriptions","create","channel","summary_statement_id","received","connected","disconnected","rejected","getFeedback","summaryStatementData","perform","createAutomatedSummaryStatementSubscription","ideal_summary_statement","user_summary_statement","aiSummaryStatementRequestFeedback","aiSummaryStatementResponseError","handleConnectionRejected","document_id","handleConnectionClosed","_this$props2","feedback","_this$props3","aiSubmitButtonActions","aiSummaryStatementResponseRecieved","aiSummaryStatementResponseTime","aiSummaryStatementFeedback","ai_response","aiSummaryStatementModelId","ai_prompt_id","aiSummaryStatementModelUsageTokens","usage_tokens","_this$props4","boxLines","characterLimit","aiAnswerCommentSection","aiSummaryStatementAllowFeedback","_this$props4$aiSummar","aiSummaryStatementUserRating","aiSummaryStatementUserComment","aiSummaryStatementUserRatingSubmitted","studentNotice","textInputArea","maxLength","aiSubmitButton","aiSwitch","renderedInput","userRating","answerCommentSection","summaryStatementModal","newRating","extraActions","wrapStateAsSetNodeKVPairActions","gap","flex","feedbackParagraph","alignItems","groupRoleDefinition","role_definition","DocVariantPlaceholder","variantableId","variantableType","DocVideo","videoPlayer","captionName","localCaptionURL","localVideoURL","PlaceholderVideo","frameBorder","allowFullScreen","allow","blockNodesContainsSelection","integrationInfo","nodeLookup","audio","categoryMatcher","cdqQuestion","checkbox","horizontalRule","imageGallery","learningObjective","learningObjectivesList","multipleChoice","numberedList","paragraph","ratingBar","regularList","section","DocSection","textInput","variantPlaceholder","video","lastNodeType","checkMultipleSelect","multipleSelectElement","contentNodes","newInactiveBool","trueOrEmptyOptions","onlyIfSectionOptions","addNode","NodeTag","onDrop","RatingStars","DocFeedbackModal","onSubmitFinish","rating1","setRating1","rating2","setRating2","comment","setComment","showConfetti","setShowConfetti","modal","Confetti","left","transform","zIndex","fontFamily","GreenCheckImage","feedback_card_1_rating_bar","feedback_card_2_rating_bar","feedback_card_1_text_input_section","handleActionsArgs","sectionRef","oldBoundingClientRect","startingState","showModal","localStorage","getItem","timeLeft","calculateTimeLeft","timeLeftInSeconds","handleShowModal","startTimer","clearInterval","timeLimit","timeUsedBeforeCurrentSegment","setInterval","tick","currentTimeInSeconds","componentWillUpdate","nextProps","nextState","componentDidUpdate","prevProps","newBoundingClientRect","scrollBy","setItem","removeItem","isFeedbackCard","child","submitted","paused","pauseExam","visibleContent","shouldDisplayIntegrationTags","integrations","isDisplayFull","nested","isUngated","onlyDisplaySectionTitles","isSummarySatementSection","test","isSaqCard","isFinishCaseCard","propsClone","enableAiSummaryStatementFeedback","questionSectionIndex","findIndex","questionSection","answerCommentIndex","idealSummaryStatement","summaryStatementTextInput","summaryStatementSubmitButtonIndex","summaryStatementSubmitButton","summaryStatementSubmitButtonActions","quizContent","quizUrl","timeOnCase","todoUrl","todoAction","quizQuestionCount","caseSummaryUrl","modalContent","finalContent","ReasoningToolPanelDeleteCell","deleteNode","ReasoningToolPanel","infoBox","isDeleting","toggleDeleting","headerButton","isAddable","wide","wrappedChildren","pluralize","singular","ReasoningToolAssessmentQuestionDataPanel","clinical_location","assessmentQuestion","patient_age","clinical_disciplines","current_use","questionData","setAssessmentQuestionData","generateSelectOptions","assessmentQuestionStatistics","selectedAssessmentQuestionStatistic","stat","assessmentQuestionEditingData","clinicalLocationOptions","assessmentQuestionClinicalLocationOptions","finalDiagnosisOptions","assessmentQuestionFinalDiagnosisOptions","patientAgeOptions","assessmentQuestionPatientAgeOptions","systemOptions","assessmentQuestionSystemOptions","clinicalFocusOptions","assessmentQuestionClinicalFocusOptions","questionUseOptions","assessmentQuestionQuestionUseOptions","clinicalDisciplineOptions","assessmentQuestionClinicalDisciplineOptions","clinicalExcellenceOptions","assessmentQuestionClinicalExcellenceOptions","isClearable","menuPortalTarget","styles","menuPortal","base","changed","cci_status","rootUid","cciStatusOptions","cciStatus","statistic","administrations_count","difficulty","discrimination","assessmentStatus","delivered","capitalLetter","charCodeAt","lowerLetter","correct_answer_index","skips_count","DetailsTab","columns","renderer","editing_document","scheduled_review_version_id","rel","question_sets","getCellValue","StatisticsTab","questionId","statistics","setStatistics","assessment_question_id","fetchStatistics","choice_a_count","choice_b_count","choice_c_count","choice_d_count","choice_e_count","choice_f_count","average_certainty_rating","updated_at","ReasoningToolBarButton","iconName","isActive","onToggle","openLink","shouldShow","onExpand","ReasoningToolBookmarkSummary","bookmarkedNode","bookmarkedNodeLineage","weakMemoizedGenerateEditingContextAllFalse","displayData","capitalize","ancestorSections","ancestor","firstLevelSectionTitle","DocPrerequisiteMetadata","_props$possible_prere","possible_prerequisite","prerequisite_document_id","updatePrerequisiteSubservient","new_prerequisite_document_id","possiblePrerequisiteDocuments","possiblePrerequisiteDocument","CaseTeachingPointsPanel","closeTeachingPointModal","selectedTeachingPoint","openTeachingPointModal","reusableObject","NewEditDocContainer","review_variant_id","first_name","firstName","last_name","lastName","defaultChangesDisplayMode","HIGHLIGHT_ALL_CHANGES","reusableObjects","styleLink","reusable_object_edited","content_title","CaseMapPanel","closeAssessmentQuestionModal","selectedAssessmentQuestion","openAssessmentQuestionModal","assessmentQuestionModal","teachingPoint","correctAnswer","mapped_learning_objective_edited","mapped_teaching_point_edited","answer_edited","editing_document_id","efficiency_breakpoints_seconds","row_hashes","row_hash","idx","learningObjectiveReusableObject","loro_data","teaching_point_edited","teachingPointObject","questions","assessment_question","body_system","question","case_summary_identifier","mapped_system","assessmentQuestionObject","isMappedSystemEdited","is_mapped_system_edited","isAssessmentQuestionEdited","question_edited","isAssessmentQuestionUsedAvailableForm","used_in_available_form","caseMapTable","AqueductTable","table_def","name_prefix","ReasoningToolFeedbackSummary","PANEL_QUESTIONS","GenGen","_props$canShow","canShow","_props$children","GenSpan","_props$canEdit","canEdit","_props$isEditing","onSpanClick","onEnterKeyPress","_props$shouldAutoFocu","shouldAutoFocus","_props$isControlled","isControlled","which","keyCode","GenParagraph","_props$rows","titles","DIAGNOSES","FINDINGS","infoBoxes","panelComponents","startNodeEdit","endNodeEdit","isLeadingDiagnosis","isDangerousDiagnosis","setIsDangerousDiagnosis","setIsLeadingDiagnosis","noteNodeLineage","noteNode","last","ReasoningToolTextListPanel","reasoningToolContext","leadingDiagnosis","_props$diagnoses","diagnoses","_props$findings","findings","_props$notes","notes","activePanel","togglePanelDeleting","panelNodeEditEnd","isPanelDeleting","activeEditNodeUid","panelData","items","addDiagnosis","updateNode","updateDiagnosis","deleteDiagnosis","addFinding","updateFinding","deleteFinding","updateNote","doc","noteNodesUids","note","noteNodeLineages","findNodesLineages","noteNodeLineagesLookup","fromEntries","attachNodesToNotes","PanelComponent","renderedItems","trackEvent","GenColorDot","dotStyle","colorArray","borderRadius","DocAuthorHeader","flexGrow","authorName","createdAt","intToDateTimeString","ReasoningToolStudentFeedback","studentFeedback","author_full_name","newDeleteStudentFeedbackChange","student_feedback_id","control","minHeight","highlighter","input","suggestions","list","DocCommentInput","textAreaValue","onAdd","onAddClick","modReturn","MentionsInput","mentionsInputStyle","onFocus","Mention","mentionStyle","trigger","users","editors","markup","onCancelClick","ReasoningToolSummaryOfEdit","summaryOfEdit","summaryOfEditLineage","newDeleteSummaryOfEditChange","summary_of_edit_id","ReasoningToolEditorsChecklistTable","authenticityHeaders","projects_checklist_item","statusText","initialState","checklistContents","renderedTable","completeButtonStyle","checklistItems","editingCompleteLink","origin","activeMemberId","project_id","nextVersionId","currentAssignmentId","splice","verticalAlign","ReasoningToolTimer","_this$props$shouldSho","isOnline","hrs","padStart","timeFormat","reasoningToolPanelsMap","AET_ADMIN_TOOLS","ASSESSMENT_QUESTION_DATA","QUESTION_DETAILS","activeTab","setActiveTab","setDetails","fetchDetails","handleTabChange","tabId","MySwal","fire","showCancelButton","confirmButtonText","isConfirmed","fontStyle","lock_status_msg","CASE_METADATA","assessmentQuestionSignatureVersion","CASE_TEACHING_POINTS","ReasoningToolCaseTeachingPointsPanel","CASE_LEARNING_OBJECTIVES","renderedLearningObjectives","editLOsButton","learningObjectiveCard","querySelector","scrollPosition","pageYOffset","behavior","CASE_MAP","ReasoningToolCaseMapPanel","SUMMARY_OF_EDITS","newSummaryOfEdit","NEW_SUMMARY_OF_EDITS","author","newAddSummaryOfEditChange","summaryOfEdits","summary_of_edits","panelChildren","change_id","STUDENT_FEEDBACK","newStudentFeedback","NEW_STUDENT_FEEDBACK","newAddStudentFeedbackChange","studentFeedbackChanges","student_feedbacks","studentFeedbackChange","EDITORS_CHECKLIST","ReasoningToolEditorsChecklist","BOOKMARKS","FEEDBACK","userState","strippedState","stripState","feedbackToAquifer","ratingBars","comments","feedback_submitted","prettyIndex","completedFeedback","size","partiallyCompleteFeedback","noFeedback","showsCancel","LABVALUES","ReasoningTool","changeData","_mergedData$disableDi","disableDiagnoses","_mergedData$disableFi","disableFindings","_mergedData$disableNo","disableNotes","_mergedData$disableBo","_mergedData$disableFe","disableFeedback","_mergedData$disableLa","disableLabValues","_mergedData$timeLimit","_mergedData$currentTi","_mergedData$timeUsedB","reasoningToolSideNavChanges","panelButtons","activeUserId","OPENED_LAB_VALUES_LOG","styleGuideId","panel","openPanel","weakMemoizedApplyAllChanges","findNode","OpenPanel","overflow","PoweredByAqueductImage","DocLearningObjectivesAddNewModal","allLearningObjectiveOptions","setIsLoading","reusableObjectId","setReusableObjectId","newLearningObjectiveText","setNewLearningObjectiveText","activeLearningObjective","learningObjectiveOptions","loOption","reusableObjectOptions","ro","createLO","addInLearningObjective","loId","newVariantablePlaceholder","newIndex","TEMP_ID","learningObjectiveActions","learningObjectiveActionsGenerator","startNewLearningObjective","setEditDataLearningObjective","createLearningObjective","DocLearningObjectivesConfirmEdit","setAllowLearningObjectivesEdit","DocModals","DocContentMappingAssessmentMap","selectedLearningObjectiveId","proposedLearningObjectiveReusableObjectId","element","selectedReusableObjectId","resetValue","handleLearningObjectiveChange","handleReusableObjectChange","clickSaveButton","hasSelectedLearningObjective","hasSelectedReusableObject","setLearningObjectiveReusableObjectId","clickResetButton","clickRestoreButton","currentLearningObjectiveReusableObjectId","currentLearningObjectiveReusableObject","learningObjectColumn","teachingPointColumn","displayResetRestoreButton","displaySaveButton","usedAvailableFormIcon","learningObjectColumnValue","teachingPointColumnValue","learningObjectiveSelect","assessmentMappingToolPermission","teachingPointSelect","proposedLearningObjectColumnValue","proposedTeachingPointColumnValue","usedAvailableForm","assessmentTitle","equalProposedLearningObjectiveReusableObject","DocContentMappingLOTPMap","addingNewLoro","handleDeleteWithAlert","confirmAlert","customUI","handleDeleteLoro","proposedLoro","handleRestoreLoro","handleSaveWithAlert","handleSaveNewLoro","handleCancelNewLoro","currentLearningObjectiveReusableObjects","concatedLoros","activeProposedLoros","editingRow","tableRows","isCurrentLoro","currentLoro","isProposedLoro","deleteCell","rowStyle","textDecorationLine","textDecorationStyle","decodeURI","existingRoIds","DocContentMappingTool","isCollapsed","collapsibleTools","doclotpEditorSideNavChanges","contentMappingChild","assessmentMappingTool","activeLoId","borderStyle","DocChangeSummary","changeSummary","offset","sendNotifications","tagger_id","generateCommentText","isNewCommentThread","change_set_id","right","newAddCommentThreadChange","changeDescription","headerButtons","changeNodeType","scrollToUid","scrollToUidAndContentKey","ADD_COMMENT_THREAD","resolveComments","lineHeight","newCloseCommentThreadChange","changeSummaryDescription","acceptTrackedChanges","newAcceptChangesChange","rejectTrackedChanges","newRejectChangesChange","firstChangeId","renderedComments","comment_id","newDeleteChangeCommentChange","commentResponseInput","respondToComments","EDIT_COMMENT","change_uid","newAddChangeCommentChange","DocChangeSummaryColumn","_props$changeSummarie","changeSummaries","offsetChangeSummary","DocROName","newNameState","setNewNameState","editRoNameModal","EDIT_RO_NAME_MODAL","updateRoName","AssessmentQuestionForm","answerExplanation","setAnswerExplanation","answer_explanation","NewEditDoc","documentSetId","openedDocumentLogArgs","document_set_id","OPENED_DOCUMENT_LOG","handleTurbolinksPageChange","mediaState","setMediaState","initializeMedia","handleMediaCreate","mediaKey","mediaKeyHelper","handleMediaDelete","handleMediaReplace","new","old","offlineModal","mediaModal","outsideClasses","insideClasses","showTopBar","docControlsWrapper","isEditor","docControls","showReasoningTool","showControlsInReadOnly","viewTopBar","renderTopBar","topBarRef","topBarHeight","setTopBarHeight","observer","ResizeObserver","observe","disconnect","BaseObserver","delegates","isRunning","startEventListeners","stop","stopEventListeners","registerDelegate","delegate","afterRegistrationInitializer","unregisterDelegate","arrayDelegate","ActiveUserObserver","notifyOnActiveUser","activeUserDidFire","BeforeInputObserver","notifyOnBeforeInput","beforeInputDidFire","CopyObserver","notifyOnCopy","notifyOnCut","notifyOnPaste","copyDidFire","cutDidFire","pasteDidFire","MouseClickObserver","notifyOnMouseDownClick","notifyOnMouseUpClick","mouseDidDownClick","mouseDidUpClick","OfflineObserver","testIfOnlineTimer","notifyOffline","notifyOnline","testIfOnline","navigator","onLine","didGoOnline","didGoOffline","XMLHttpRequest","noResponseTimer","onreadystatechange","readyState","send","SelectionObserver","notifySelectionChange","selectionDidChange","reflow","root_section","end_of_case_text","convertAllInlineNodesToRangeJSON","feedback_cards","remaining_cards","finish_case_cards","finish_case_card","release_notes_cards","learning_objectives_cards","case_synopsis_cards","references_cards","saq_cards","regular_cards","cards","_partitionByClass2","partitionByClass","_partitionByClass4","_partitionByClass6","_partition2","partition","_partitionByClass8","_partition4","_partitionByClass10","finish_case_button","finish_case_text","case_summary_button","finish_case_saq_text","difference","regular_cards_uids","card","next_uid","question_sections","submit_buttons","question_section","old_submit_buttons_actions","flatMap","submit_button","addSubmitButtonActionsToQuestionSection","continue_button","findActionOrNew","generateSetNodeKVPairAction","feedback_introduction_text","feedback_cards_uids","feedback_button","rating_bar_1","rating_bar_2","old_finish_case_button_actions","saq_card","nodes","partitionClass","old_submit_button_actions","answer_comment","action_array","new_actions","new_action","old_action","weakMemoizedReflow","memoize","documentKind","clonedJson","cloneDeep","reflowSignatureCase","undoRedoState","redoStack","deleteAtSelection","variantDataById","dataToUse","_currentDocSelection$","startUID","startIndex","deletionSelection","newSelection","startNodePath","startNodeIndex","startNode","findNodeAtPath","adjustedIndex","deleteRanges","inlineChangeHighlights","highlight","irrelevantRanges","irrelevantRagne","rangesSortByEnd","tempIndex","isInOrEndRange","backIndexUntillNotInDeletionRange","findNodeParentByUid","previousSibling","findNodeSiblingBeforeByPath","effectiveLength","blockNodeFlowContentKey","genrateNodesForAfterReturnNodeWithTextLines","lines","line","afterReturnNodeFor","nodeFlowKey","rangeInlineJSON","addTextToBlockNodeFlow","flowBlockKeys","flowInlineKeys","pasteAtSelection","dataTransfer","newStyledText","newNodes","newSelectionOffset","types","pasteTextLines","plainText","clipboardPlainTextToTextLines","getData","pasteStartText","pasteRestLines","returnAtSelection","startKey","startParentNodePath","nodeParentPathFromPath","startParentNode","newNodeOnReturn","selectionNode","findFirstInlineFlowNode","nodeInlineNotFlowContentKeys","newNodeType","listUid","listIndentation","blockKeys","childNode","replaceInObjectKeys","object","toReplace","replacement","mapKeys","upperFirst","computedGenerateDocumentActionCreators","generateReusableObjectActions","generateDocumentActions","computedGenerateVersionActionCreators","generateVariantActions","generateVersionActions","findVariantPlaceholderNodePaths","findNodesPaths","generateChangeData","weakMemoizedConvertAllToFlatFlowAndInlineRangeJSON","applyChangesToVariant","publishVariantId","useChangeData","sharedDocFunctions","dispatchProps","documentUserStateId","basicFuncs","variantActionsGenerator","documentActions","versionActions","documentUserStateActions","reasoningToolActions","mode","setExtraDataVersion","forceDocSelection","newActiveStyles","newInactiveStyles","setLocalClipboard","setIsMouseDown","isMouseDown","setNewActiveStyles","setNewInactiveStyles","setExtraDataDocument","focusedBookmarkUid","setChangeSummaries","uploadCountChange","setExtraDataWithFunctionVersion","oldUploadCount","newChanges","dispatch","addChangesDispatch","getState","setAllDataWithFunctionVariant","setAllDataWithFunctionVersion","syncData","editData","oldChangeData","newUndoRedoState","currentData","undoStack","undoCompressCount","isSuggestingMode","changeSetId","newChangeData","change","newChange","clotheChange","addChangeToDoc","_undoRedo$undo","newRedoStack","newData","newUndoStack","undoRedo","_undoRedo$undo2","returnedState","_undoRedo$redo","_undoRedo$redo2","weakMemoizedGenerateDocumentFunctions","assessmentQuestionSignatureVersionId","loadAssessmentQuestionSignatureVersionPublishVersion","loadVersion","logType","postDocumentUserLog","newVersionCoverImage","setEditDataVersion","deleteMedia","mediaName","setEditDataWithFunctionDocument","newMediaList","updateDocument","successNotice","weakMemoizedGenerateReusableObjectFunctions","newName","setEditDataDocument","keyMap","tab","shiftTab","bold","italic","underline","superscript","subscript","browserName","beforeInputObserver","activeUserObserver","copyObserver","mouseClickObserver","offlineObserver","selectionObserver","lastActiveAt","loadIfNeededDocumentUserStateTimer","versionChannelCheckInTimer","browser","Bowser","userAgent","getBrowserName","alreadyScrolled","loadResourcesIfNeeded","versionSyncMeta","startEditVersion","documentSyncMeta","loadDocument","startEditDocument","syncMeta","loadLearningObjective","variants","variantActions","loadVariant","startEditVariant","createVersionChannelSubscription","now","startNewDocumentUserState","setEditDataDocumentUserState","loadDocumentUserState","loadIfNeededDocumentUserState","scrollable_uids","selectedVersionId","cableApp","cable","container","versionChannelSubscription","version_id","session_id","checkIn","lockUserSessionId","lockRequestSessionId","lockRequestUserId","lockRequestUserSessionId","hadLock","cancelEditVersion","last_active","requestLock","unsubscribeVersionChannelSubscription","unsubscribe","getSnapshotBeforeUpdate","beforeUpdateDocSelection","snapshot","syncDOMSelection","scrollToElementWithUid","versionExtraData","prioritizedOffsetChangeSummary","prioritizeOffset","computeSpacedChangeSummaries","autoSaveInterval","checkMappedContentEditMode","mappingData","reusableObjectIds","proposedReusableObjectIds","totalReusableObjectIds","reusableObjectUids","currentlyEditingNodeLineageUids","checkEditingContentIsMappedLO","checkEditingContentIsProposeddLO","checkEditingContentIsMappedTP","isMultiUseRO","toUpperCase","inputType","insertAtSelection","addSelectionToCacheIfValid","adjustSelectionStartToIncludeListItemIfNeeded","translatedSelection","translateSelectionToFlowRange","foundFlatFlowNodes","findFlatFlowNodesWithFlowRange","newClipboardNodes","flatFlowToTreeFlow","listNodes","HIGHLIGHT_SUGGESTIONS","syncCurrentDocSelection","newDocSelection","newDocumentSelection","showingDOMRange","newDOMRange","autoSave","unsavedChanges","changesToMappedContent","allLoChanges","findNodeByUid","n","addDeleteChanges","validRoNodes","roTitleChanges","roContentChanges","unpublishedLoChanges","published_at","unpublishedRoTitleChanges","unpublishedRoContentChanges","publishMergedData","_this$props5","localLearningObjectives","publishChange","newPublishChange","HIDE_SUGGESTIONS","learningObjectivePlaceholderPaths","vpPath","findAtPath","learningObjectiveNodePathsById","loPlaceholderPath","variantType","determineVariantTypeFromVersionType","variantKey","variantKeyFromVariantVersion","learningObjectiveVariant","parentLearningObjective","learningObjectiveNodePath","appliedData","setAtPath","publishWithoutWarning","shouldUpdateBanner","_this$props6","allHTMLData","stripExtraChangeDataFields","publishUrl","publishData","changedMappedContent","should_update_banner","cover_image","mod_map_image_filename","modMapImageFilename","withCredentials","Accept","customAlertBox","reload","_this$props7","cancel","_this$props8","versionEditData","currentGroupRoleDefinition","documentUserState","reasoningToolUi","localLearningObjectiveVariants","weakMemoizedGenerateCurrentUser","addStateDocumentUserState","destroyDocumentUserState","isNotGated","weakMemoizedGenerateDisplayContext","weakMemoizedGenerateCurrentDocument","organizeMediaAssets","weakMemoizedSetBlockNodesContainsSelection","weakMemoizedAttachCurrentMenuToNode","nodePath","addDocumentUserState","editNodeWithUIDKeyValue","defaultCurrectRLO","currentActiveDocSelection","POSSIBLE_RO_CLASSES","urlParams","has","topHeight","offsetTop","weakMemoizedGenerateCurrentVersion","published","awsFolderUrl","weakMemoizedGenerateEditingContext","accessOmVersion","accessRloMaintenance","changeAuthorIds","currentDocSelectionDetail","RangeInlineJSON","activeStyles","xor","soloSelectedNodeUid","currentMenuDetail","allowedMode","isVersionEditActivated","errors","toggleStyleAtSelection","currentAssessmentQuestionEditingData","learning_objective_uid","isAssessmentQuestion","loRoId","proposedSystem","setSystem","loros","proposedClinicalFocus","setClinicalFocus","activeElement","HTMLElement","blur","tabAtSelection","shiftTabAtSelection","weakMemoizedGenerateIntegrationInfo","Beforeunload","onBeforeunload","connect","mapStateToProps","ownProps","usableDocumentActionCreators","generateUsableDocumentActions","documentProps","documentSyncDataFromState","documentSyncMetaFromState","documentExtraData","documentExtraDataFromState","usableVersionActionCreators","generateUsableVersionActions","versionProps","versionMergedDataFromState","versionSyncMetaFromState","versionEditDataFromState","versionExtraDataFromState","ONLY_PUBLISHED","learningObjectiveFromStatePlus","variantMergedDataById","variantFromStatePlus","varaintPlaceholder","dusId","currentUserProps","generateDocumentUserStateActions","documentUserStateMergedDataFromState","extraProps","versionSyncDataFromState","ui","reasoningTool","mapDispatchToProps","bindActionCreators","generateLearningObjectiveActions","reusableObjectActions","reasoningToolActionCreators","mergeProps","stateProps","objectFunctions","compiledProps","updateVersion","setEditDataVariant","updateVariant","editActionContext","newText","initalStyles","_currentDocSelection$2","nodeLineageToListItem","_editActionContext$ne","_editActionContext$ne2","item_response_id","itemResponseId","getEmbeded","skipProvider","publish_version_id","teaching_point_uid","UnwrappedNewEditDocApp","Paginator","pagination","pages","onSelect","Pagify","Context","segments","segmentize","beginPages","endPages","sidePages","Button","Segment","field","Ellipsis","previousField","nextField","PerPage","_ref","perPage","column","onPerPage","onSearch","onColumnChange","show_pagination","_objectWithoutProperties","_excluded","sortingHeader","sortable","getSortingColumns","sortingColumns","tooltipText","sortHeader","selectedColumn","editingCell","controlling_attribute","edit","editing","onActivate","onValue","property","Checkbox","AddNameAttribute","other","innards","ROSTERING_TIMING_OPTIONS","CCI_PROJECT_ROLE_OPTIONS","FLAGGED_ASSESSMENT_PROJECT_ROLE_OPTIONS","NEW_ASSESSMENT_PROJECT_ROLE_OPTIONS","TABLE_DEFS","project_editors_report_table","call","sortableHeader","formatters","visible","project_name","extraParameters","project_status_report_url","new_item_authors_report_table","transforms","student_performance_report","teaching_point_title","case_name","case_path","case_content_report_table","project_team_table","editable","deleteAction","delete_action","showEditColumns","show_edit_columns","loadOptions","editors_url","searchParams","set","editorData","handleInputChange","handleEditors","user_id","projectRoleOptions","project_type","_","extra","DragDrop","AsyncSelect","cacheOptions","defaultOptions","team_member_user_id_field_name","member_id_field_name","filterable","editor_checklist_path","edit_assignments_path","project_question_set_table","show_question_set_path","project_statuses_table","showCciProjectColumn","show_cci_project_column","showAssessmentProjectColumn","show_assessment_project_column","workflow_report_link","project_dashboard_table","projectDetailsAction","project_details_action","showAquiferAdminColumns","show_aquifer_admin_columns","report_action","edit_path","reviewable","aet_path","workflow_status_path","details_url","report_path","user_report_table","dashboard_question_set_index","exam_variation_label","dashboard_exam_variations_index","statusOptions","status_options","statusAction","status_action","status_target","exam_label","exam_variation_url","deliveriesCount","delivered_to_path","dashboard_deliveries_index","exam_items","conditionally_editable","visibleRows","gatherRows","allVisibleAreSelected","toggleSelect","scored","scorable","ev","exam_variation_deliveries_index","program_name","edit_delivery_path","rosterings_new","legacy_form","rostering_label","timing","rosterings_edit","form_editable","timing_editable","examFormOptions","exam_form_options","examFormAction","exam_form_action","restartAction","restart_action","featureFlagOn","feature_flag","visibleSelectableRows","freeze_selection","frozen_selection_tooltip","toBeWrapped","switch_key","ActionLink","explain_status_action","explain_status_switch","is_rostered","cssClass","can_change_form","formValue","exam_form","defaultFormName","default_form_name","optionPair","formName","can_restart","restart_url","document_questions","question_edit_url","case_map","searchColumn","first_column_sort","selection_tooltip","getColumns","onRow","onRowSelected","onRemove","onToggleColumn","closest","rowsToToggle","doSelect","rowIdsToToggle","compose","amountOfPages","ceil","startPage","amount","paginate","orderBy","matches","resolve","filterPlaceholder","paginated","windowTableName","window_table_name","tableHeight","table_height","selectable_columns","VisibilityToggles","PrimaryControls","Table","overflowX","rowKey","CustomFooter","row_class","row_target","min","footer","ReusableObjectDetail","openRloInReadOnlyMode","DescriptionModal","closeDescModal","CommonModal","handleClose","MultipleUsedDesc","documentRows","learning_objective_reusable_objects","learning_objectives","age_groups","clinical_locations","systems","presenting_problems","additional_diagnoses","clinical_focuses","allDocumentsLearningObjectives","loroLearningObjectives","WhereUsedModal","closeWhereUsedModal","descModalOpen","setDescModalOpen","whereUsedModalOpen","setWhereUsedModalOpen","reusableObjectListDefaults","ReusableObjectSummary","TAG_PAIRS","fromInlineJson","styledTreeNodes","includeEditStyles","string","tagData","_tagData","htmlStyle","toInlineJson","htmlString","toInlineJsonFromNodeList","DOMParser","parseFromString","childNodes","nodeList","Node","TEXT_NODE","ELEMENT_NODE","isElement","mappedType","nodeName","nodeNameToStyleName","getAttribute","rgb2hex","notEmpty","rgb","convertAllInlineNodesToHTML","docMapBlockNodes","blockNode","newInlineNode","listItemChildNode","showHideText","fromAnyType","inlineNode","tempDiv","innerHTML","innerText","fromHTML","innerFromInlineJson","treeInlineNodes","newCurrentState","childRange","newStyle","omit","childStyle","newChildStyle","rangedStyle","_rangedStyle$inlineIr","_rangedStyle$inlineCh","newStyleRanges","inlineChangeHighlightsWithColor","inlineChangeHighlight","selectionMimics","selectionMimicsAsStyles","selectionMimic","sortedStyles","sortItemsWithRangesByStart","reduceReturn","newStyleRange","newStyleRangeIndex","addNewStyleTo","TreeInlineJSON","returnValue","styleRangeStack","textLeftIndex","rangeInlineToEmptyTreeInline","letNextItem","minEnd","minBy","styleRange","currentLastNode","indexOfFirstMin","styleRangeStackWithMinsRemoved","remainingStylesSplit","styleRangeStackToStyleTree","toHTML","toPlainText","rangeInline","isString","compressStyleRanges","ADDITIONAL_DIAGNOSES","CLINICAL_PRINCIPLES","DIFFERENTIAL_DIAGNOSIS","FINAL_DIAGNOSES","PRESENTING_PROBLEMS","SCIENCES_CORE_CONCEPTS","DocType","isRequired","isSyncable","shouldInit","shouldInitWith","DocTypeMore","DTMore","DocTypeRef","DTRef","DocTypeSubObject","DTSubObject","DocTypeString","initDefault","DTString","DocTypeBoolean","DTBoolean","DocTypeInteger","DTInteger","DocTypeFloat","DocTypeArray","DTArray","DocTypeMap","DTMap","DocTypeObject","DTObject","DocTypeOr","orTypes","prototype","DTOr","DocTypeEnum","enumOptions","DTEnum","defineProperties","initWith","arg","initWithArg","withDefault","editWith","shouldEditWith","shouldEditWithArgs","initData","generateWith","isFunction","generateChild","childData","dup","clone","withDisplayName","displayNameString","merge","typeDefinition","returnTypeDefinition","instanceVariable","newObject","definitionOrReference","init","generatedObject","sectionContent","answerCommentContent","alertContent","categoryMatcherContent","dialogBoxContent","neutralTextContent","harmStatementContent","modMapCardContent","coreConceptContent","deepDiveContent","referencesContent","freeTextContent","questionContent","summaryStatementContent","listItemContent","tableCellContent","tpContent","styledChildren","_newStartWith","openListItem","tableRow","tableCell","multipleChoiceAnswer","cdq_case_content","cdq_case","subtype","gradingRules","shouldShowGrade","cdqQuestionAnswer","matchItem","modalMedia","root","sex","race","clinical_principles","sciences_core_concepts","differential_diagnosis","generic_page","care_discussion_page","case_synopsis_page","category_page","clinical_reasoning_page","excellence_in_action_page","history_page","learning_objectives_page","management_page","physical_exam_page","references_page","saq_page","teaching_page","testing_page","therapeutics_page","overview_page","clinical_feature_page","epidemiology_page","implications_for_management_page","implications_for_further_workup_page","mod_map_page","category_matcher_question","causal_explanation","deep_dive","dialog_box","free_text_question","harm_statement","mcq_diff_diagnosis","mcq_feq","mcq_multiple","mcq_no_best","mcq_single","neutral_text","references","RLOModal","summary_statement","tp_clinical_reasoning","tp_clinical_skills","tp_knowledge","tp_management","tp_principles","tp_studies","save_button","cdq_question","finish_case_page","release_notes_page","release_notes_section","content_updates","engagement_questions_updates","self_assesment_questions_updates","references_updates","custom_updates","signature_case_template","cdq_case_template","test_case_template","illness_script_template","question_vignette","question_stem","assessment_question_mcq","assessment_question_mcq_template","lead_editors","contributing_authors","overview_card","epidemiology_card","clinical_feature_card","mod_map_card","mod_map_image","synopsis_page","underlying_core_concepts","core_concept_header","implications_for_further_workup_card","implications_for_further_workup_notes","implications_for_further_workup_response","implications_for_management_card","implications_for_management_notes","implications_for_management_response","unassigned_case_template","subtypeClassifiers","nodeClassifiers","returnedClassifier","classifier","isRangeCollapsed","rangeLength","rangesDoTouch","range1","range2","rangesIntersection","rangesUnion","rangesExcept","newRanges","extendRangeAtIndexByValue","splitAndShiftRangeAtIndexByValue","shiftRange","deleteRangeAtIndexByValue","newStart","newEnd","ranges","rangesSortByStart","compressedRanges","prevRange","unionOfRanges","isRangeCoveredByRanges","coverRanges","relevantCoverRange","coverRange","rejectItemsWithEmptyRanges","withRanges","withRange","withRange1","withRange2","styleRangeCompressKey","preppedStyleRanges","styleRangesGroups","allCompressedStyleRanges","styleRangesGroup","compressedStyleRanges","prevStyleRange","unionOfStyleRanges","stylesCoveringRangeWithHideText","hideTextRanges","hideTextStyleRange","styleRangeGroup","stylesCoveringDocSelection","docSelection","_docSelection$start","_docSelection$end","endUID","endKey","endIndex","endNodePath","endNode","startStyles","endStyles","possibleRangeInlineJSON","rangeInlineJSONWithText","contentRightNDeep","rightNode","nodeRightNDeep","appendTextToNode","treeInlineNode","possibleTreeInlineJSON","deepFind","tester","prop","deepFindObjectPath","deepFindAllObjectPaths","datum","objectPaths","deepFindPath","deepFindAllPaths","indexPaths","indexPath","normalizeDocNode","toNormalizeKeys","nodeBlockContentKeys","toNormalizeChildren","denormalizeDocNode","nodesObject","rootNodeUid","ancestorUids","childNodeUid","isObject","nodeAllContentKeys","isNode","isPlainObject","is_change_summary","isNodeAtPath","findDeepestLineagePathFromPath","rootNode","nodeTester","findNodeLineage","findNodeAncestors","ancestors","findNodeAncestorsByUid","findNodePath","youngestNodePathFromPath","nodeIndexFromPath","parentPath","possibleIndex","nodeContentKeyFromPath","deleteAtPath","arrayPath","arrayLens","overAtPath","func","editNodeWithUIDKeyValueWithFunction","docReduceWithCallbackForKey","keyCallback","newAccum","toReduceKeys","toReduceChildren","childAccum","addMissingUids","toAddUidsTo","newChildren","startPath","beforeSibling","generateTableRowWithNTableCells","cellCount","rowDefinition","times","generateTableCell","addMissingCellsToTable","anyRowOrColumnMultiSpan","allRowsHaveSameNumberOfCells","rowCount","cellsToSkip","getRowCount","columnCount","getColumnCount","spansToSearch","newRow","span","inASpan","newCell","str","decisionTypes","ACCEPTED","REJECTED","CHANGE_TEXT_AND_NODES","MOVE_NODE","SET_KEYS_VALUES","ADD_STYLE","DELETE_STYLE","ADD_TABLE_ROW","DELETE_TABLE_ROW","ADD_TABLE_COLUMN","DELETE_TABLE_COLUMN","MERGE_TABLE_CELLS","UNMERGE_TABLE_CELLS","ACCEPT_CHANGES","REJECT_CHANGES","PUBLISH","CLOSE_COMMENT_THREAD","ADD_CHANGE_COMMENT","DELETE_CHANGE_COMMENT","ADD_SUMMARY_OF_EDIT","DELETE_SUMMARY_OF_EDIT","ADD_STUDENT_FEEDBACK","DELETE_STUDENT_FEEDBACK","ADD_TEXT_AND_NODES_BEFORE_NODE","ADD_TEXT_AND_NODES_TO_NODE","DELETE_NODE","MOVE_NODE_UP","MOVE_NODE_DOWN","ADD_CONTENT","DELETE_CONTENT","ADDED_NODE","DELETED_NODE","CHANGED_TEXT","ADDED_TEXT","DELETED_TEXT","ADDED_STYLE","DELETED_STYLE","HIDE_TEXT","translatedRange","secondaryTextPath","compressableChange","addDropChange","canCompressChanges","changeMetadata","styledText","insertRangeInlineJSONAtIndex","cleanedChange","appendRangedItemToRangeInlineJSON","addChangeTextAndNodesChangeToSecondary","flowPath","flowListNodesPath","listNodesToAdd","flowNodes","reduceFunc","initialValue","finalResultContainer","resultContainer","flattenedNodeLength","reduceFlatNodesWithOffset","adjustedRange","compressableNodeAddDropChange","compressableContentAddDropChange","nodesToAdd","nodesToAddData","treeFlowToFlatFlow","styledTextToAdd","startNodeOffset","findNodeOffsetFromFlattenedNodes","nodeIndex","innerIndex","newParagraph","newLength","_splitRangeInlineJSON2","beforeRangeInlineJSONAt","afterRangeInlineJSONAt","beforeInline","afterInline","concatRangeInlineJSON","oldContent","insertIndex","appendRangedItemToFlattenedNodes","obj1","obj2","safeMerge","addChangeTextAndNodesChangeToFlow","addChangeTextAndNodesChange","parent_uid","parent_key","beforeContent","parent_index","beforeLength","modifiedChange","addAddNodeChange","sibling_uid","siblingPath","sibling","parentKey","parentIndex","listIndex","addAddTextAndNodesBeforeNodeChange","parentLength","addAddTextAndNodesToNodeChange","parentStartIndex","parentEndIndex","findLastIndex","nodeLength","addDeleteNodeChange","addMoveNodeChange","addMoveNodeUpOrDownChange","addMoveNodeUpChange","addMoveNodeDownChange","changes","appendChangeToChanges","addSetKeyValuesChange","isFlowTypeAndKey","addStyleChangeToFlow","styleChanges","safeAppend","addStyleChangeToSecondary","addStyleChange","table_uid","addInEmptyRowChanges","addAddTableRowChangeToNodeWithUID","addDeleteTableRowChangeToNodeWithUID","addInEmptyColumnChanges","addAddTableColumnChange","addDeleteTableColumnChange","addTableCellSpanChangeToNodeWithUID","findAllChangePathsByChangeId","accept_change_id","reduceDoc","changePath","decision","decision_at","decision_by","markChangeAtPathAccepted","reject_change_id","markChangeAtPathRejected","changePaths","isAcceptedChange","isPublishedChange","isPublishableChange","findAllPublishableChangePaths","published_by","markChangeAtPathPublished","addAddCommentThreadChangeToFlow","commentThreadChanges","addAddCommentThreadChangeToSecondary","addAddCommentThread","comment_thread_change_id","deleteChangeWithID","parent_change_id","addCommentToChangeWithID","deleteCommentWithID","addSummaryOfEditChange","changeN","deleteSummaryOfEditChange","addStudentFeedbackChange","deleteStudentFeedbackChange","isMoveSummary","isRelevantNode","_node$addDeleteChange","releventAddDeleteChanges","isRelevantChange","highlightDeleteChange","isHighlightChange","highlightAddChange","applyBlockChangeHighlightsToNode","allRowCount","allColumnCount","originalCellSpans","rowChangesByIndex","rowChanges","columnChangesByIndex","columnChanges","cellSpanChanges","isRowRelevantByIndex","isRelevantRow","isColumnRelevantByIndex","isRelevantColumn","collapsedCellSpans","originalSpans","cellSpans","cellSpanChange","newSpan","_R$partition2","cellSpan","doSpansOverlap","spanA","spanB","overlappingSpans","restSpans","combinedSpan","unionSpans","convertCellSpanChangesToCellSpans","filterRelevantChanges","markedRows","markedCells","isRelevantCell","overlappingCellSpan","isPointInSpan","claimed","isRelevant","filteredCells","markedCell","filteredRows","markedRow","applyTableChangesToNode","applyKeyValueChangesToNode","nodeKey","_rangeInlineJSON$addD","_rangeInlineJSON$styl","_rangeInlineJSON$comm","_rangeInlineJSON$styl2","_rangeInlineJSON$inli","_rangeInlineJSON$inli2","oldStyle","newRange","applyInlineChangesToRangeInlineJson","applyInlineChangesToNode","applyEditIndexToNode","weakMemoizedApplyListIndentKeyValueChangesToNode","applyListIndentKeyValueChangesToChildren","contentListNodes","applyAllChangesToChildren","mergeChangeMaps","map1","map2","_ref2","addChangeToChangeMap","changeMap","weakMemoizedCollectAllSuggestionChanges","newChangeMap","Map","newVariantId","suggestionChanges","isOpenSuggestionChange","collectSuggestionAddDeleteChanges","key_value_changes","collectSuggestionKeyValueChanges","collectSuggestionInlineChanges","_node$rowChanges","_node$columnChanges","_node$cellSpanChanges","collectSuggestionTableChanges","collectSuggestionBlockChanges","kvChange","keys_and_values","uidToLockAround","pathToLockFrom","toLockAncestorPath","MenuTypes","convertAllTablesToFullCells","convertAllTreeFlowToFlatFlow","_treeFlowToFlatFlow","treeFlowNodes","flatFlowData","treeFlowNode","localListUid","localListIndentation","returnedListData","cleanedListNode","returnedListItemData","cleanedListItemNode","flatFlowNodes","flatFlowNode","prevTreeFlowNode","weakMemoizedNewListIfNeeded","newLastNode","weakMemoizedAppendNodeToParagraph","weakMemoizedAppendNodeToList","weakMemoizedAppendNodeToLastParagraphInList","flowRange","isBlock","isBlockChangeSet","endNodeOffset","inRangeFlatFlowNodes","newContent","weakMemoizedCombineListAndListItem","paragraphNode","otherNode","listNode","indentedListPath","findLastListOfIndentPath","lastListItemPath","findLastListItemPath","newListNode","lastListPath","findLastListPath","lastListItem","lastListItemIndex","indent","lastListIndex","remainingListPath","remainingListItemPath","lastList","lastListLastIndex","array","safeConcat","array1","array2","shiftChildRange","rangeParent","endPath","fullStartPath","fullEndPath","startFlowRootPath","flowRootPathFromPath","endFlowRootPath","baseContent","beforeStartLength","endNodeIndex","beforeEndLength","isInlineChangeSet","isBlockNode","possibleKey","possibleNodePath","possibleNode","nodeOffset","agg","restOfIndex","remainingIndex","rangedItemsName","rangedItem","offsetRangedItem","appendRangedItemToFlatNode","newRangedItem","newRangedItems","toCombineRangeIndex","rangedItemB","rangesToRemove","addRangeItem","rangedItems","rangeToRemove","beforeText","afterText","newRangeInlineJSON","possibleRangeKeys","possibleRangeKey","removeRangeFromRangeInlineJSON","previousChange","compressedChange","change1","change2","is_suggestion","compressTwoChangesIfPossible","rangeInline1","rangeInline2","shiftedRanges","possibleRange","insertLength","newBeforeRangeInlineJSON","newAfterRangeInlineJSON","isUp","unadjustedNode","nodeB","parentContent","afterSiblings","moveAfterSiblings","isDeletedOrProposedDeletedNode","nodesToMove","beforeSiblings","endOfValidSiblingIndex","listLevel","endOfValidSibling","toEndOfValidSiblingSiblings","validSiblingIndex","afterSiblingsIndex","validSiblingOffset","validSibling","afterValidSiblingSiblings","endOfValidSiblingOffset","newParentContent","unadjustedListLevel","weakMemoizedCloneAndNormalizeDoc","normalizedDocAllBlockChanges","normalizedDoc","allNodes","nodeToAccept","blockNodeKey","uidOrChange","allMoveNodeChanges","isRelevantFunctionGenerator","addChangeType","deleteChangeType","allAddChanges","relevantChanges","relevantAddChanges","relevantDeleteChanges","isRejectedChange","backgroundImage","nakedChange","is_tracking","detail","comment_thread_id","changeMetadataFields","firstAddTextChanges","allChanges","firstDeleteTextChanges","firstAddNodeChanges","firstDeleteNodeChanges","currentPrioritizedOffsetChangeSummary","arr","newCommentThread","htmlDocument","bodyElement","bodyOffset","desiredOffestChangeSummaries","nodeElement","changeSummaryElement","desiredOffset","offsetDiff","prioritizeOffsetIndex","offsetChangeSummaries","minOffset","returnChangeSummaries","newMinOffset","reduceRight","maxOffset","newMaxOffset","possibleMaxHeight","MAX_SAFE_INTEGER","colors","generateColorLookup","repeatCount","longEnoughColorList","generateReasoningToolStateFunctions","rootUID","pluralType","plural","nodeUIDs","nodeUID","update","localAudioURL","noteFunctions","generateNotesStateFunctions","findingFunctions","generateFindingsStateFunctions","diagnosisFunctions","generateDiagnosesStateFunctions","isLockedByOtherUser","isPublishedVersion","isMaintenanceVersion","canEditOM","currentUserId","stateA","stateB","assignWith","nodeDataA","nodeDataB","keyDataA","keyDataB","nodeData","valueObject","mergedNormalizedVersion","valueMap","addStateCallback","ancestorSectionsUids","tail","ancestorUid","uid_candidates","recursiveClick","getDOMRange","domSelection","getSelection","rangeCount","getDOMSelection","getRangeAt","areDOMRangesEqual","domRange1","domRange2","toCompareKeys","getDocSelection","domRange","commonIndependentlyEditableAncestor","getIndependentlyEditableAncestor","commonAncestorContainer","startBoundry","domRangeBoundryToDocSelectionBoundry","startContainer","startOffset","endBoundry","endContainer","endOffset","returnSelection","isInNoDocumentSelection","directlyInCommonIndependentlyEditableAncestor","ancestorStyledTextNode","getAncestorStyledTextNodeFromChildNode","variantid","domRangeBoundryToVariantId","domRangeToDocSelection","newWalker","createTreeWalker","NodeFilter","SHOW_ALL","nextNode","currentNode","nodeTextLength","findTextOffsetNodeInNode","contentkey","ancestorDocNode","getAncestorDocNodeFromChildNode","nextDocNodeSibling","findNextDocNodeSibling","previousDocNodeSibling","findPreviousDocNodeSibling","findDeepestDocNodeDirectlyInIndependentlyEditableNode","areDocSelectionsEqual","selection1","selection2","isInOneInline","isInOneNode","isInlineBoundry","boundry","newCollapsedDocSelection","newDocSelectionBoundry","collapseDocSelectionToStart","shiftDocSelectionBy","shiftCount","shiftDocSelectionBoundryBy","shiftDocSelectionStartBy","docSelectionBoundry","setDocSelection","docSelectionToDOMRange","removeAllRanges","addRange","setDOMRange","getDOMBoundryFromDocSelectionBoundry","createRange","setStart","setEnd","docBoundry","replaceAll","textOffset","currentOffset","newOffset","findNodeAndOffsetFromTextOffset","isNodeDocNode","isNodeIndpendentlyEditable","isIndependentlyEditable","isStyledText","isNodeStyledText","classList","isNoDocumentSelection","isBlockNodes","isNodeBlockNodes","independentlyEditableNode","currentDeepest","nextSibling","freeze","ONGOING_MAINTENANCE","SCHEDULED_REVIEW","OTHER","variantTypes","MAINTENANCE","REVIEW","versionID","maintenanceVariantId","editVersionId","reviewVariantId","log_type","document_user_log","updateProgress","answerChoices","truncate","specialValue","getSpecialCellValue","formatDate","formatLabel","img","choices","resolveNestedValue","formatCellValue","stringValue","truncateWithTooltip","format","parsedDate","YYYY","getFullYear","MM","getMonth","DD","getDate","HH","getHours","mm","getMinutes","ss","getSeconds","performance","r","BASE_ASSET_ENDPOINT","ASSET_TYPES","pdf","defaultHandler","apiRequest","model_id","model_type","syncAssets","file_ext","vtt","srt","model","transformedModel","defaultInTransformer","checkAndFilterAssets","digitalAssets","da","progress","progressBar","remove","time_on_case","intTime","h","m","month","day","year","dd","intTimeToHHMMSS","secondsDiff","hours","minutes","seconds","already_url","hostname","subdomain","splitHostname","protocol","port","escapeHtml","unsafe","truncated","char","itemKey","endpoint","generateActions","editDataMergeFunction","startNewItem","cancelNewDocumentUserState","cancelNewItem","startEditDocumentUserState","startEditItem","cancelEditDocumentUserState","cancelEditItem","setAllDataWithFunctionDocumentUserState","setAllDataWithFunctionItem","setSyncDataDocumentUserState","setSyncDataItem","setSyncDataWithFunctionDocumentUserState","setSyncDataWithFunctionItem","setEditDataItem","setEditDataWithFunctionDocumentUserState","setEditDataWithFunctionItem","resetEditDataDocumentUserState","resetEditDataItem","setExtraDataDocumentUserState","setExtraDataItem","setExtraDataWithFunctionDocumentUserState","setExtraDataWithFunctionItem","resetExtraDataDocumentUserState","resetExtraDataItem","loadItem","createDocumentUserState","createItem","updateDocumentUserState","updateItem","destroyItem","loadIfNeededItem","documentUserStateFromState","itemFromState","documentUserStateSyncDataFromState","itemSyncDataFromState","documentUserStateSyncMetaFromState","itemSyncMetaFromState","documentUserStateEditDataFromState","itemEditDataFromState","itemMergedDataFromState","documentUserStateExtraDataFromState","itemExtraDataFromState","mergedDocumentUserState","editDocumentUserState","mergedState","editState","updatedAt","documentUserStateCollectionReducer","generateReducer","dusOld","dusNew","valueDataOld","valueDataNew","startNewDocument","cancelNewDocument","cancelEditDocument","setAllDataWithFunctionDocument","setSyncDataDocument","setSyncDataWithFunctionDocument","resetEditDataDocument","setExtraDataWithFunctionDocument","resetExtraDataDocument","createDocument","destroyDocument","loadIfNeededDocument","documentFromState","documentEditDataFromState","documentMergedDataFromState","documentCollectionReducer","LIST_LOAD","SEED","LOAD","CREATE","UPDATE","DESTROY","NEW_START","NEW_CANCEL","EDIT_START","EDIT_CANCEL","SET_ALL_DATA_WITH_FUNCTION","SET_SYNC_DATA_FIELDS","SET_SYNC_DATA_WITH_FUNCTION","SET_EDIT_DATA_FIELDS","SET_EDIT_DATA_WITH_FUNCTION","RESET_EDIT_DATA","SET_EXTRA_DATA_FIELDS","SET_EXTRA_DATA_WITH_FUNCTION","RESET_EXTRA_DATA","camelCase","initialCollectionState","initialItemState","itemReducer","_options$inTransforme2","inTransformer","keepKeysOnUpdateFulfilled","meta","editSinceStartOfLastSync","payload","lastSyncedAt","fn","fields","newItemState","defaultOutTransformer","snakeCase","tempId","outTransformer","afterDispatch","createItemWithData","updateItemWithData","shouldLoadItem","itemFromStatePlus","mergeFunction","_options$inTransforme3","_options$inTransforme","_options$itemType","collectionReducer","_options$outTransform","setAllDataWithFunction","setSyncDataWithFunction","setEditDataWithFunction","setExtraDataWithFunction","cancelNewLearningObjective","startEditLearningObjective","cancelEditLearningObjective","setAllDataWithFunctionLearningObjective","setSyncDataLearningObjective","setSyncDataWithFunctionLearningObjective","setEditDataWithFunctionLearningObjective","resetEditDataLearningObjective","setExtraDataLearningObjective","setExtraDataWithFunctionLearningObjective","resetExtraDataLearningObjective","updateLearningObjective","destroyLearningObjective","loadIfNeededLearningObjective","learningObjectiveFromState","learningObjectiveSyncDataFromState","learningObjectiveSyncMetaFromState","learningObjectiveEditDataFromState","learningObjectiveMergedDataFromState","learningObjectiveExtraDataFromState","learningObjectiveCollectionReducer","startNewReusableObject","cancelNewReusableObject","startEditReusableObject","cancelEditReusableObject","setAllDataWithFunctionReusableObject","setSyncDataReusableObject","setSyncDataWithFunctionReusableObject","setEditDataReusableObject","setEditDataWithFunctionReusableObject","resetEditDataReusableObject","setExtraDataReusableObject","setExtraDataWithFunctionReusableObject","resetExtraDataReusableObject","loadReusableObject","createReusableObject","updateReusableObject","destroyReusableObject","loadIfNeededReusableObject","reusableObjectFromState","reusableObjectSyncDataFromState","reusableObjectSyncMetaFromState","reusableObjectEditDataFromState","reusableObjectMergedDataFromState","reusableObjectExtraDataFromState","reusableObjectCollectionReducer","TOGGLE_PANEL","OPEN_PANEL","TOGGLE_PANEL_DELETING","PANEL_NODE_EDIT_START","PANEL_NODE_EDIT_END","RESET","reducer","panelType","nodeUid","reset","startNewVariant","cancelNewVariant","cancelEditVariant","setSyncDataVariant","setSyncDataWithFunctionVariant","setEditDataWithFunctionVariant","resetEditDataVariant","setExtraDataVariant","setExtraDataWithFunctionVariant","resetExtraDataVariant","createVariant","destroyVariant","loadIfNeededVariant","variantFromState","variantSyncDataFromState","variantSyncMetaFromState","variantEditDataFromState","variantMergedDataFromState","variantExtraDataFromState","variantCollectionReducer","transformedData","startNewVersion","cancelNewVersion","setSyncDataVersion","setSyncDataWithFunctionVersion","setEditDataWithFunctionVersion","resetEditDataVersion","resetExtraDataVersion","createVersion","destroyVersion","loadIfNeededVersion","versionFromState","versionCollectionReducer","SET_KEYS","combineReducers","documentUserStates","docSettings","middleware","applyMiddleware","thunk","promise","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","createStore","CableApp","ActionCable","NewEditDocApp","_railsContext","Provider","store","Swal","customClass","confirmButton","cancelButton","closeButton","denyButton","buttonsStyling"],"sourceRoot":""}