{"version":3,"file":"static/js/20.a2e0c5e57d8bd717012e.chunk.js","mappings":";mcA8CO,MAAMA,EAAiBC,IAC1B,MAmBMC,EAAgBC,IAClB,MAAM,0BAAEC,EAAF,QAA6BC,EAA7B,SAAsCC,EAAtC,UAAgDC,EAAhD,sBAA2DC,GAA0BP,EAE3F,GAAIE,EAAiB,CACjB,IAAKC,EACD,OAEJA,EACKK,WAAW,CACRC,GAAIF,EACJH,QAAAA,EACAM,wBAAyB,CACrBC,cAAeN,EAASO,oBAE5BC,gBAAiBb,EAAMa,gBACvBC,mBAAoBC,MAAOC,EAAiBC,IAlCzBF,OAC/BC,EACAV,EACAD,EACAY,IAEKX,EAGEA,EACFY,6BAA6B,CAAEC,WAAYd,EAASe,OAASC,SAAUL,EAAiBC,aAAAA,IACxFK,MAAKC,IACoB,YAAlBA,EAAOC,QACPxB,EAAMyB,4BAGbC,OAAMC,QATAC,QAAQC,UA4BIC,CAA2Bd,EAAiBV,EAAWD,EAAUY,KAG/ES,OAAMC,YACR,CACH,IAAKrB,EACD,OAEJD,EAAS0B,aAAe,GACxB1B,EAASO,mBAAqB,GAC9BP,EAAS2B,gBAAkB,GAC3B1B,EACK2B,4BAA4B,CAAEd,WAAYd,EAASe,SACnDE,MAAKC,IACoB,YAAlBA,EAAOC,QACPxB,EAAMyB,4BAGbC,OAAMC,UAIbO,EAAkB,CAACC,EAAwCC,KAC7D,IAAKA,IAAqBD,GAAkD,IAA5BC,EAAiBC,OAC7D,MAAO,GAGX,MAAMC,EAAgBF,EAAiBG,MAAKvB,GACjCA,EAAgBL,gBAAkBwB,IAG7C,OAAIG,EACOA,EAAcE,YAElBL,GAkEX,GACKnC,EAAMa,iBACNb,EAAMa,gBAAgB4B,iBACtBzC,EAAM0C,wBACN1C,EAAMa,gBAAgB4B,gBAAgBF,MAAKI,GAAUA,EAAOC,OAAS5C,EAAM0C,yBAKhF,MAAO,CACHG,UAAW,CACPC,YAAa7C,GAEjB8C,iBA5E0B,EAC1BC,EACAC,EACAC,EACAC,EACAf,KAEA,MAAMgB,EAAclB,EAAgBc,EAASpC,mBAAoBwB,GAC3DiB,IAAkBL,EAASpC,mBAE3B0C,EAAepD,GACV,KACHD,EAAaC,IAIrB,OACIqD,EAAAA,cAAAA,EAAAA,SAAAA,KACIA,EAAAA,cAAAA,QAAAA,CAAOC,UAAU,iCACbD,EAAAA,cAAAA,QAAAA,CACI9C,GAAI,6BAA6BuC,EAAS5B,SAC1CqC,KAAK,QACLC,KAAM,gBAAgBV,EAAS5B,SAC/BuC,SAAUL,GAAY,GACtBM,MAAOX,EACPY,SAAUR,EAAa,gBACRA,EACfS,IAAK,GAAGd,EAAS5B,kBAEpB6B,GAELM,EAAAA,cAAAA,QAAAA,CAAOC,UAAU,qCACbD,EAAAA,cAAAA,QAAAA,CACI9C,GAAI,+BAA+BuC,EAAS5B,SAC5CqC,KAAK,QACLC,KAAM,gBAAgBV,EAAS5B,SAC/BuC,SAAUL,GAAY,GACtBM,MAAOV,EACPW,QAASR,EAAa,eACRA,EACdS,IAAK,GAAGd,EAAS5B,kBAEpB8B,GAEJF,EAASpC,mBACN2C,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,qCACXD,EAAAA,cAAAA,OAAAA,CAAMC,UAAU,2CAA2CJ,GAC3DG,EAAAA,cAAAA,SAAAA,CAAQC,UAAU,uCAAuCO,QAAST,GAAY,IACzEH,IAGT,OAyBMa,CACdhE,EAAMK,SACNL,EAAMiE,WACNjE,EAAMkE,kBACNlE,EAAMmD,gBACNnD,EAAMoC,kBAEVgB,YAAalB,EAAgBlC,EAAMK,SAASO,mBAAoBZ,EAAMoC,kBACtElC,kBAAmBF,EAAMK,SAASO,mBAClCuD,eA7BuB,EAACC,EAAkCvD,KAA2C,MACrG,MAAMwD,EAAWxD,MAAAA,GAAH,UAAGA,EAAiB4B,uBAApB,aAAG,EAAkCF,MAAKI,GAAUA,EAAOC,OAASwB,EAAY1B,yBAC9F,OAAO2B,MAAAA,OAAP,EAAOA,EAAUC,aA2BDC,CAAmBvE,EAAOA,EAAMa,iBAChD2D,eAAgB,CACZhB,UAAW,iDCtEvB,MAyHMiB,EAAgB,CAClBpE,EACAD,EACAsE,EACA1E,EACA2E,EACAC,EACAC,KACqB,gBACrB,MAAM,cACFC,EADE,aAEFC,EAFE,GAGFtE,EAHE,SAIFuE,EAJE,QAKFC,EALE,UAMFC,EANE,iBAOFC,EAPE,uBAQFC,EARE,6BASFC,EATE,6BAUFC,EAVE,gCAWFC,EAXE,kCAYFC,EAZE,mCAaFC,EAbE,wCAcFC,EAdE,uDAeFC,EAfE,wBAgBFC,EAhBE,6BAiBFC,EAjBE,eAkBFC,EAlBE,oBAmBFC,EAnBE,UAoBFC,EApBE,oBAqBFC,EArBE,sBAsBF1F,GACAP,EAEEkG,EAAkBjB,EAAQkB,QAAQC,KAAKF,gBACvCG,EAAiBL,GAAaA,EAAU3D,OAAS,GAAK2D,EAAU,GAAGM,KAAON,EAAU,GAAGM,KAAOL,EAC9FM,GA5JNC,EA4J+DxG,EAAMwG,oBA3JrEC,EA2J0F7B,EAxJrF4B,GACAC,GACAA,EAAoBC,0BACpBD,EAAoBE,oBACpBF,EAAoBC,yBAAyBE,kBAK3CH,EAAoBC,yBAAyBE,kBAHzC,GAXuB,IAClCJ,EACAC,EA6JA,MAAMI,EACFzG,GA/IwB,EAC5B0G,EACAN,EACAD,EACAQ,EACAC,KAEA,GAAID,EAAgC,CAChC,IAAIE,EAAmCD,EAQvC,OAJKA,IACDC,EAAmCH,GAAuB,IAGvDN,EACDS,EAAmCV,EAC/BU,EACAV,EACJU,EAEV,OAAIT,GACOD,EAA2BO,EAAsBP,EAErDO,GAuHHI,CACIlH,EAAMmH,oBACNnH,EAAMwG,oBACND,EACAvG,EAAM+G,gCACN3G,MAAAA,GAAA,UAAAA,EAASgH,gBAAT,eAAmBC,kBAAmB,GAIxCC,GAAuBlH,MAAAA,OAAA,EAAAA,EAASmH,iBAAkBC,EAAAA,oBAAAA,WAAiCnH,EAASoH,cAE5FC,EAAeC,EAAAA,iBAAAA,kBAAmCd,QAClDe,EAhIe,EACrBrB,EACAsB,EACA7H,EACAsH,EACAtE,EACA8E,KACoB,MACpB,MAAMC,EAA+B,GAGrC,GADuE,aAAtC,UAAA/H,EAAMyG,2BAAN,eAA2BjF,QAExD,OAGJ,IAAIoD,EACJ,GAAI5E,EAAMgI,sBAAwBC,EAAAA,gBAAAA,YAA4BjI,EAAMgI,wBAChEpD,EAA2B5E,EAAMgI,qBAAqBzF,MAAKkE,GACnDzG,EAAMkI,sBACCzB,EAAoBC,yBAAyByB,YAAcnF,EAASmF,UAG3E1B,EAAoBC,yBAAyByB,YAAcnF,EAASmF,WACpE1B,EAAoB2B,mBAAqBpF,EAASqF,mBAGzBT,IAA7BhD,GACA,OAIJ5E,EAAMsI,eAAiBtI,EAAMwG,sBAAwBc,IACjDf,GAA4B,EAC5BwB,EAAmBQ,KAAKvI,EAAMwI,gBACvBjC,EAA2BsB,IACD,IAA7BtB,EACAwB,EAAmBQ,KAAKvI,EAAMyI,mBAE9BV,EAAmBQ,KAAKvI,EAAM0I,qBAAqBC,QAAQ,YAAapC,EAAyBqC,eAM7G,MAAMC,EAAiB7I,EAAM8I,gBAAgBC,uBACvCC,EAAsBH,MAAAA,OAAH,EAAGA,EAAgBI,QAAOtE,GAASA,EAAMvD,SAAW0G,IAC7E,QAA4BF,IAAxBoB,EACA,IAAK,MAAME,KAAKF,EACRf,EAAAA,gBAAAA,YAA4BiB,EAAEC,qBAC9BD,EAAEC,mBAAmBC,SAAQC,SACOzB,IAA5ByB,EAAWC,cACXvB,EAAmBQ,KAAKc,EAAWC,iBAOvD,OAAIrB,EAAAA,gBAAAA,YAA4BF,GACrBA,EAAmBwB,KAAK,UADnC,GAuEMC,CAAiBjD,EAA0BlG,EAASoJ,SAAWzJ,EAAOsH,EAAsBjH,EAAUA,EAASe,QAE/GsI,EA5DoB,EAACtE,EAA8D/E,IAAuB,KAChH+E,EAAuB/E,IA2DMsJ,CAAsBvE,EAAwB/E,GAErEuJ,GAAUC,EAAAA,EAAAA,kBAAiBC,EAAAA,GAAAA,eAA+B9J,EAAM+J,iBAAmB5E,EAAkB,IACrG6E,IAAaC,EAAAA,EAAAA,wBAAuBjK,EAAM+J,iBAAmBH,GAE7DM,GAAetF,MAAAA,OAAH,EAAGA,EAA0BuF,gBACzCC,GAAgBxF,EAChB,0CAAgCA,EAAyByF,sBAAzD,aAAgC,EAAyCC,qBACzE1C,EAGA2C,GAEF,YADAnK,MAAAA,GAAA,UAAAA,EAASoK,kBAAT,mBAAqBjI,MAAKkI,GAHL,IAGkBA,EAAUC,4BAAjD,mBAAmGC,sBAAnG,eAAmHC,OAGvH,IAAIC,GACJ,GAAIzK,GAGA,GAFAyK,IAAaC,EAAAA,EAAAA,mBAAkB1K,EAASJ,EAAMiF,QAAQ8F,mBAAenD,GAEjEoD,EAAAA,GAAAA,UAAoB,QACpB,MAAMC,EAAU,IAAIC,IAAIL,GAAYM,OAAO9J,SAAS+J,MACpDH,EAAQI,aAAaC,IAAI,YAAa,cAAGjL,EAASkL,iBAAZ,UAAyB,KAC/DV,GAAaI,EAAQG,WAGzBP,IAAaW,EAAAA,EAAAA,8BAA6BnL,EAASiE,aAAe,GAAItE,EAAMiF,QAAQ8F,eAExF,MAAO,CACHU,KAAM,CACFrL,QAAAA,EACAsE,yBAAAA,EACArE,SAAAA,GAEJqL,WAAYrL,EAASe,OACrBO,MAAO+F,EACPiE,WAAWrE,IAAwBtH,EAAMwG,sBAAsBnG,EAASoJ,UAAa5C,MAAAA,EAAAA,EAAe,GACpGxG,SACIkD,EAAAA,cAACqI,EAAAA,0BAAyB,CACtBH,KAAM,CACFzI,SAAU3C,EAEVD,QAAAA,EACAsE,yBAA0BA,GAG9BmD,gBAAiBxH,EAASoJ,SAC1B5C,YAAaA,EACbgF,eAAevE,IAAwBtH,EAAMwG,sBAAsBD,GAA4B,EAC/FxB,aAAcA,EACdD,cAAeA,EACfrE,GAAIA,EACJuE,SAAUA,EACV6F,WAAYA,GACZ5F,QAASA,EACTC,UAAWA,EACXpB,IAAK,GAAGa,KAASkG,KACjBiB,UAAWnH,EACXoH,oBAAqBpE,EAAAA,iBAAAA,kBAAmCvH,GACxD4L,iBAAkBhM,EAAMiM,sCACxBC,gBAAiB9L,MAAAA,OAAF,EAAEA,EAAS+L,gBAC1BzE,aAAcA,EACd0E,0BAA2BlC,GAC3BmC,wBAAyBjC,GACzBkC,iBAA8C,WAA5B,UAAAtM,EAAMM,iBAAN,eAAiBkB,QACnC+K,gCAAiCvM,EAAMuM,gCACvCxC,iBAAkB/J,EAAM+J,iBACxByC,4BAA6BxM,EAAMwM,8BAG3CC,cAAerM,EACTL,EAAc,CACVQ,sBAAAA,EACAD,UAAWN,EAAMM,UACjBD,SAAAA,EACAD,QAAAA,EACA6D,WAAYjE,EAAMiD,WAClBiB,kBAAmBlE,EAAM0M,aACzBvJ,gBAAiBnD,EAAMmD,gBACvBhD,0BAA2BH,EAAMG,0BACjCiC,iBAAkBpC,EAAMoC,iBACxBvB,gBAAiBgE,EACjBnC,uBAC4C,KAAxCrC,EAAS0B,aAAqC1B,EAAS0B,aAAe/B,EAAM0C,uBAChFiK,iCAAkC3M,EAAM2M,iCACxCH,4BAA6BxM,EAAMwM,4BACnC/K,uBAAwBzB,EAAMyB,8BAElCmG,EACNgF,OACIrJ,EAAAA,cAACsJ,EAAAA,OAAMC,OAAAA,OAAAA,CAACtJ,UAAU,6BAA6BO,QAAS2F,EAAsBqD,MAAO5H,GAAsB6E,IACtG7E,GAGT6H,cACI9G,GAAmB9F,IAAYmK,GAC3BhH,EAAAA,cAAC0J,EAAAA,uBAAsB,CACnBzJ,UAAU,iCACVoC,wBAAyBA,EACzBC,6BAA8BA,EAC9BZ,QAASA,EACTxE,GAAIA,EACJqD,IAAKzD,EAASe,OACd4D,SAAUA,EACVqB,eAAgBA,EAChBhG,SAAUA,EACV6M,gBAAc,EACdC,mBAAmB,EACnBC,kBAAkB,EAClBC,mBAAmB,EACnBC,SAAS,SACT7B,KAAM,CACFzF,UAAAA,EACA5F,QAAAA,GAEJmN,UAAWlI,SAGfuC,EAER4F,mBACItH,GAAmBJ,GAAkB1F,EACjCmD,EAAAA,cAACkK,EAAAA,4BAA2B,CACxBjK,UAAWkK,GAAAA,CAAW,uCAAwCnD,GAAwB,WAAa,IACnGjF,6BAA8BA,EAC9BC,gCAAiCA,EACjCC,kCAAmCA,EACnCC,mCAAoCA,EACpCC,wCAAyCA,EACzCC,uDAAwDA,EACxD8F,KAAM,CAAErL,QAAAA,EAASuN,SAAUtN,EAASoJ,UAAY,EAAG3D,eAAAA,EAAgBC,oBAAAA,GACnEd,QAASA,EACTiI,gBAAc,EACdU,8BAA+BrD,GAC/BsD,cAAetD,GACf9J,GAAIA,EACJuE,SAAUA,EAEVqI,mBAAoBrN,EAAMiF,QAAQ6I,IAAIC,OAAOC,iBAAkB,SAGnEpG,IAKHqG,EAAoB,CAC7BC,EAEAC,EACAnO,KAEA,MAAMoO,EAAoC,GAEpCC,EAA4B,GA4ClC,OA3CAF,MAAAA,GAAAA,EAAwB/E,SAAQkF,IACxBA,EAAEC,gBACFF,EAAS9F,KAAK+F,EAAEC,mBAIxBL,EAAUM,KAAI,CAACnO,EAAUsE,KAAS,QAC9B,IAAIvE,EAQAwE,EAYA6J,EAhBArO,EAHAJ,EAAM+G,gCAGI2H,EAAAA,EAAAA,GAAkCrO,EAAS8H,UAAWkG,EAAUhO,EAASgI,YAAarI,EAAMM,YAE5FqO,EAAAA,EAAAA,GAAsBtO,EAAS8H,UAAWkG,GAGpDrO,EAAMgI,sBAAwBC,EAAAA,gBAAAA,YAA4BjI,EAAMgI,wBAChEpD,EAA2B5E,EAAMgI,qBAAqBzF,MAAKkE,IAAsB,MAC5C,EAAjC,OAAIzG,EAAMkI,uBACC,UAAAzB,EAAoBC,gCAApB,eAA8CyB,aAAc9H,EAAS8H,WAG5E,UAAA1B,EAAoBC,gCAApB,eAA8CyB,aAAc9H,EAAS8H,WACrE1B,EAAoB2B,mBAAqB/H,EAASgI,gBAK1DrI,EAAM4O,wBAA0B5O,EAAM4O,uBAAuBvM,OAAS,IACtEoM,EAA6BzO,EAAM4O,uBAAuBrM,MAAK4B,GACpDA,GAAkBA,EAAegE,YAAc9H,EAAS8H,aAIvE,MAAM0G,EAAgBzO,EAChBsE,EAAwB,UAC1ByJ,MAAAA,GAD0B,UAC1BA,EAAwB5L,MAAK+L,IAAC,aAAI,UAAAA,EAAEC,sBAAF,eAAkBO,aAAaD,MAAAA,OAA/B,EAA+BA,EAAeC,oBADtD,aAC1B,EAA2FpK,gCADjE,QAC6F,KAE3H0J,EAAW7F,KACP9D,EAAcpE,EAAUD,EAASsE,EAA0B1E,EAAO2E,EAAOC,EAA0B6J,OAIpGL,GChcEW,EAAsB/O,IAC/B,MAAM,uBAAEmO,EAAF,UAA0BD,GAAclO,EAC9C,MApD4B,EAC5BkO,EAEAC,EACAnO,KAEA,MAAMoO,EAAsC,GAC5C,IAAKD,GAA4D,IAAlCA,EAAuB9L,OAElD,OADArC,EAAMiF,QAAQ+J,UAAUrN,MAAM,iDACvB,KAGX,MAAM0M,EAA4B,GAClCF,MAAAA,GAAAA,EAAwB/E,SAAQkF,IACxBA,EAAEC,gBACFF,EAAS9F,KAAK+F,EAAEC,mBAIxB,MAAMU,EAAyBC,GAAsBC,GAAAA,CAAQD,GAAOE,GAAQA,EAAKxO,qBAE3EyO,GADsBH,EACahB,EADSiB,GAAAA,CAAQD,GAAOE,GAAQA,EAAKrN,gBAAlDmN,IAAAA,EAE5B,MAAMI,EAA6B,GAqBnC,OAlBAxC,OAAOyC,QAAQF,GAAejG,SAAQ,IAAwC,IAAtCoG,EAAcC,GAAwB,EAE1EJ,EAAcG,GAAgBP,EAAsBQ,GACpDH,EAAe/G,KAAK0G,EAAsBQ,OAI9C3C,OAAO4C,KAAKJ,GAAgBlG,SAAQtF,IAChC,MAAM6L,EAAYL,EAAexL,GACjCgJ,OAAO4C,KAAKC,GAAWvG,SAAQzE,IAC3B,MAAM3B,EAAW2M,EAAUhL,GACrBiL,EAAmB3B,EAAkBjL,EAAUmL,EAAwBnO,GACpD,OAArB4P,GACAxB,EAAW7F,KAAKqH,SAKrBxB,GASAyB,CAAwB3B,EAAWC,EAAwBnO,IC1C/De,eAAe+O,EAAiBC,GACnC,MAAMC,EAAgC,GAatC,aAXMC,EAAAA,EAAAA,qCAAoC,IAAIC,EAAAA,iCAAiCH,EAAII,eAAeC,aAAcL,GAC3GzO,MAAK+O,IACEA,IACAL,EAAcK,iBAAmBA,MAGxC3O,OAAMC,IACHoO,EAAIf,UAAUsB,UAAU3O,GACjB,MAGRqO,olBCsFX,IAAMO,EAAN,cAAmBhN,IAAAA,UAafiN,YAAmBxQ,GACfyQ,MAAMzQ,GAPF,KAAA+G,gCAA0C,EAE1C,KAAA2J,YAAsB,EAEb,KAAAC,iBAA2B,uBAuBpC,KAAAC,qBAAuB7P,MAAOX,EAAwB2K,KAC1D,MAAM8F,EAAc,IAAIC,EAAAA,kCACpB1Q,EAAQ0O,UACP/D,EAAcoF,eAAeC,YAAYW,UAC1C3Q,GAGJ,OAAO4Q,EAAAA,EAAAA,iCAAgCH,EAAaI,KAAKjR,MAAMiF,QAAQ8F,eAAerJ,OAAOC,IACzFuP,QAAQC,IAAIxP,OAIb,KAAAyP,uBAAkD,GAiOxC,KAAAC,mBAAsBC,IACnCL,KAAKM,SAAS,CACVC,qBAAsBP,KAAKQ,MAAMD,uBAOxB,KAAAE,0BAA4B,KACzCT,KAAKU,wBAqdQ,KAAAC,iBAAoB9M,GAE7BA,GAAiB,CACb+M,UAAW,CACPC,GAAI,CAAEC,EAAG,gBAAiBC,EAAG,EAAGC,EAAG,GACnCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCG,UAAU,GASL,KAAAC,0BAA6BC,IAC1C,GAAIrB,KAAKjR,MAAMyL,KAAK8G,KAAKhR,OAAQ,CAC7B,MAAMiR,EAAQ,CACVC,YAAa,CAACH,EAAiBlR,OAAQwH,aAE3CqI,KAAKjR,MAAMyL,KAAK8G,KAAKhR,OAChBmR,gBAAgBF,GAChBlR,MAAK,KACF2P,KAAK0B,eAAejR,OAAMC,IACtBsP,KAAKjR,MAAMgP,UAAU4D,QAAQjR,GAC7BsP,KAAKjR,MAAMgP,UAAU6D,MAAM,iCAGlCnR,OAAMC,IACHsP,KAAKjR,MAAMgP,UAAU4D,QAAQjR,GAC7BsP,KAAKjR,MAAMgP,UAAU6D,MAAM,mCAU1B,KAAAxN,6BAA+B,CAAC9D,EAAsClB,KAC7D,UAAlBkB,EAAOC,QAAsBnB,GAC7B4Q,KAAKoB,0BAA0BhS,IAWtB,KAAAyS,uBAAyB,CAACC,EAA4BpF,EAAkB7B,MACrFkH,EAAAA,EAAAA,IACI/B,KAAKlK,+BACLkK,KAAKjR,MAAMyL,KAAK8G,KAAKhR,OACrB0P,KAAKjR,MAAMgP,UACXiC,KAAKQ,MAAMpD,SACX0E,EACApF,GAECrM,MAAM2R,IACH,GAAiC,aAA7BA,MAAAA,OAAA,EAAAA,EAAkBzR,QAMlB,OALAyP,KAAK0B,eAAejR,OAAMC,IACtBsP,KAAKjR,MAAMgP,UAAU4D,QAASjR,EAAgBuR,SAC9CjC,KAAKjR,MAAMgP,UAAU6D,MAAM,+BAGxB,EAGX,IAAKlL,EAAAA,iBAAAA,kBAAmCsL,GAAmB,OAEvD,MAAME,EAA0C,CAC5C/R,OAAQuG,EAAAA,iBAAAA,kBAAmCoL,EAAiB3R,QAAU,IAAM2R,EAAiB3R,OAC7F+H,mBAAoB,CAChB,CACIG,aAAcrB,EAAAA,gBAAAA,YAA4BgL,EAAiBG,mBACrDH,EAAiBG,kBAAkB,GAAG9J,aACtC,GACN+J,iBAAgB,UAAEJ,EAAiBK,oBAAnB,aAAE,EAA+BD,oBAK7DpC,KAAKM,SAAS,CACVzI,gBAAiB,CAAEC,uBAAwB,CAACoK,MAIpD,OAAO,KAEVzR,OAAM,KACI,KAGR,GAMM,KAAA6R,0BAA4B,KACrCtC,KAAKlK,iCACLyM,EAAAA,EAAAA,6BAA4B,IAAIC,EAAAA,wBAA2BxC,KAAKjR,MAAMiF,QAAQ8F,eACzEzJ,MAAK+M,IACF4C,KAAKM,SAAS,CAAElD,SAAAA,OAEnB/M,MAAKP,SAAYkQ,KAAK0B,iBACtBjR,OAAOC,IACJsP,KAAKjR,MAAMgP,UAAU4D,QAAQjR,EAAMuR,SACnCjC,KAAKjR,MAAMgP,UAAU6D,MAAM,+BAj1BvC5B,KAAKlH,kBAAmB2J,EAAAA,EAAAA,oBACpBzC,KAAKjR,MAAMiF,QAAQkB,QAAQwN,kBAC3B1C,KAAKjR,MAAM4T,aACX3C,KAAKjR,MAAMgP,WAEfiC,KAAK4C,SAAUhK,EAAAA,EAAAA,kBAAiB,QAASoH,KAAKlH,iBAAkB,IAChEkH,KAAKI,mBAAqBJ,KAAKI,mBAAmByC,KAAK7C,MACvDA,KAAKS,0BAA4BT,KAAKS,0BAA0BoC,KAAK7C,MAErEA,KAAKQ,MAAQ,CACTD,qBAAqB,EACrBxB,cAAe,GACf3B,SAAU,GACV0F,aAAa,EACbjL,gBAAiB,GACjBqF,uBAAwB,IAqBF,0BAC1B8C,KAAKP,YAAa,EAClB,MAAM,OACF3C,EACA9I,SAAS,cAAE8F,IACXkG,KAAKjR,MAETiR,KAAKlK,qCAAuCkK,KAAK+C,oCAC7C/C,KAAKlK,sCACCkK,KAAK0B,eAEf,IACI,MAAMtE,QAAiB4C,KAAKjR,MAAMyL,KAAK4C,SACvC,IAAK,IAAInF,EAAI,EAAGA,EAAImF,EAAShM,OAAQ6G,IACjC,GAAImF,EAASnF,GAAI,CACb,IAAIc,QAAmBiH,KAAKL,qBAAqBvC,EAASnF,GAAI6B,GAC9DkG,KAAKG,uBAAuB7I,KAAK,CAC7BgG,eAAgBF,EAASnF,GACzBxE,0BAA0BsF,MAAAA,EAAAA,OAA6BpC,IAAfoC,GAA2BA,EAAa,OAKxFiH,KAAKP,YACLO,KAAKM,SAAS,CAAElD,SAAAA,IAEtB,MAAO1M,GACLsP,KAAKjR,MAAMgP,UAAU4D,QAAQjR,GAC7BsP,KAAKjR,MAAMgP,UAAU6D,MAAM,sBAGK,MAAhC9E,EAAOkG,0BACHhD,KAAKP,YAAL,UAAmBO,KAAKjR,MAAMyL,KAAK8G,KAAKhR,cAAxC,OAAmB,EAA6BgR,KAAK2B,WACrDjD,KAAKM,SAAS,CAAEvB,oBAAqBF,EAAiB/E,MAG1DoJ,EAAAA,EAAAA,KACI,4BAAMlD,KAAKjR,MAAMyL,KAAK8G,KAAKhR,cAA3B,aAAM,EAA6BgR,KAAK2B,aACxCnT,UACQkQ,KAAKP,YACLO,KAAKM,SAAS,CAAEvB,oBAAqBF,EAAiB/E,SAUnEqJ,uBACHnD,KAAKP,YAAa,EASf2D,sBAAsBC,EAAwCC,GACjE,OAAItD,KAAKQ,QAAU8C,GAAatD,KAAKjR,MAAMyL,OAAS6I,EAAU7I,KAO3D+I,SAAM,YACT,MACI/I,MACI8G,MAAQhR,OAAQgR,GAChBlE,UAAY9M,OAAQ8M,IAExBpJ,SACIkB,SACIC,MAAM,gBAAEF,EAAF,UAAmBuO,KAP/B,UAUFvP,GACA+L,KAAKjR,MAEH0U,GAAmBC,EAAAA,EAAAA,IAAW,WAAY1D,KAAKjR,MAAMiF,QAAQ8F,gBAAkB,GAC/E6J,GAAoBD,EAAAA,EAAAA,IAAW,OAAQ1D,KAAKjR,MAAMiF,QAAQ8F,gBAAkB,GAC5E8J,EAAc5D,KAAK6D,eAAe5O,EAAiBwO,EAAkBD,GAAa,IAClFM,EAAcxC,GAAQA,EAAKA,KAAK2B,WAA4C,IAA/B3B,EAAKA,KAAK2B,UAAU7R,OACjEsN,EAAYsB,KAAK+D,gBACjBC,EAAqB,UAAGhE,KAAKjR,MAAMiF,QAAQkB,QAAQ+O,eAA9B,aAAG,EAAoCC,sBAC5DC,GAAgCC,EAAAA,EAAAA,4BAA0B,UAC5D9C,MAAAA,OAD4D,EAC5DA,EAAMA,KAAK2B,iBADiD,QACpC,GADoC,UAE5DjD,KAAKjR,MAAMyL,KAAKzD,qBAAqBzG,cAFuB,QAEb,GAC/C0P,KAAKjR,MAAMiF,QAAQ8F,cACnBsD,MAAAA,EAAAA,EAAY,GACZ4G,GAGEtJ,IACDyJ,MAAAA,GAAAA,EAA+BE,WAC9BF,IAAkCnE,KAAKQ,MAAMsC,eAC9CpE,GAAYA,EAAU4F,MAAKlV,GAAYA,EAASsL,WAC/C6J,EAAgC,UAAGvE,KAAKjR,MAAMyL,KAAKgK,aAAalU,cAAhC,aAAG,EAAqCgB,MAC1EkT,GAAsC,oEAAtBA,EAAanP,OAE3BoP,IAAyBnD,MAAAA,GAAAA,EAAMoD,kBAAkBH,MAAAA,OAAzB,EAAyBA,EAAkCI,WACnFtG,EAAiBoG,EAAwBzE,KAAK4E,oBAAsB,KAC1E5E,KAAK4C,QAAQiC,cAAcC,MAAQC,EAAAA,kBAAAA,SACnC,MAAMC,GAA6BhM,EAAAA,EAAAA,wBAAuBgH,KAAKlH,iBAAkBkH,KAAK4C,SACtF5C,KAAK4C,QAAQiC,cAAcC,MAAQC,EAAAA,kBAAAA,cACnC,MAAME,GAA4BjM,EAAAA,EAAAA,wBAAuBgH,KAAKlH,iBAAkBkH,KAAK4C,SACrF5C,KAAK4C,QAAQiC,cAAcC,MAAQC,EAAAA,kBAAAA,eACnC,MAAMG,GAA2BlM,EAAAA,EAAAA,wBAAuBgH,KAAKlH,iBAAkBkH,KAAK4C,SAGpF,GAAIuB,IAAkCA,EAA8BE,QAAS,CACzE,GAAII,GAA4C,OAAnBpG,EACzB,IAAK,MAAM8G,KAAiB9G,EACxB2B,KAAKoF,wCAAwCD,EAAehB,GAIpEnE,KAAKoF,wCAAwC1G,EAAWyF,GAG5D,MAAMkB,EAAY,EAAH,KACRrF,KAAKjR,OADG,IAEXwD,UAAWkK,GAAAA,CAAW,WACtBX,MAAOxJ,IAAAA,cAAAA,KAAAA,CAAIC,UAAU,qBAAqB0B,EAAUqR,WACpDhE,KAAMtB,KAAKjR,MAAMyL,KAAK8G,KAAKhR,OAC3BiV,iBAAkB,CAAEhT,UAAW,uBAC/BiT,oBAAqB,CAAEjT,UAAW+O,MAAAA,GAAAA,EAAMoD,eAAiB,8BAAgC,6BACzFe,kBAAmB,CAAElT,UAAW+O,MAAAA,GAAAA,EAAMoD,eAAiB,6BAA+B,4BACtFzH,UAAWyB,EACXL,eAAAA,EACAqH,UAAW1F,KAAK2F,gBAChBvG,iBAAkBY,KAAK4F,iBACvB5R,QAASgM,KAAKjR,MAAMiF,QACpBD,SAAUiM,KAAKjR,MAAMgF,SACrBgK,UAAWiC,KAAKjR,MAAMgP,UACtBvO,GAAIwQ,KAAKjR,MAAMS,GACfiV,sBAAAA,EACAoB,2BAA4B5R,EAAU4R,2BACtCC,oBAAqB9O,EAAAA,gBAAAA,YAA4BsK,MAAAA,OAA5B,EAA4BA,EAAMA,KAAK2B,WACxD3B,MAAAA,GAAAA,EAAMoD,eACFpS,IAAAA,cAAAA,KAAAA,CAAIC,UAAU,gCAAgC0B,EAAU8R,qBAExDzT,IAAAA,cAAAA,KAAAA,CAAIC,UAAU,8BAA8B0B,EAAU+R,mBAE1D,KACJC,sBAAuBjG,KAAKkG,4BAC5BC,wBAAyBnG,KAAKoG,8BAC9BC,2BAA6BvC,EAUzB,KATAxR,IAAAA,cAACsJ,EAAAA,OAAMC,OAAAA,OAAAA,CACHyK,SAAU5L,EACVnI,UAAU,yBACV4H,KAAMyJ,EACN9H,MAAO7H,EAAUsS,qBACbvB,GAEH/Q,EAAUsS,qBAGnBC,sBACK1C,GAAgB7O,EAUb,KATA3C,IAAAA,cAACsJ,EAAAA,OAAMC,OAAAA,OAAAA,CACHyK,SAAU5L,EACVnI,UAAU,8BACV4H,KAAMsJ,EACN3H,MAAO7H,EAAUwS,0BACbxB,GAEHhR,EAAUwS,0BAGvBC,qBACIpU,IAAAA,cAACsJ,EAAAA,OAAMC,OAAAA,OAAAA,CACHtJ,UAAU,gCACN2S,EAAwB,CAC5B/K,KAAMwJ,EACN7H,MAAO7H,EAAU0S,4BAEhB1S,EAAU0S,2BAGnBC,6BACI5G,KAAK6G,6BAA+BzJ,EAChC9K,IAAAA,cAACwU,EAAAA,iCAAgC,CAC7BvS,kCAAmCyL,KAAK+G,2CAA2C9S,GACnFO,mCAAoCwL,KAAKgH,0CAA0C/S,GACnFgT,yCAA0CjH,KAAKkH,kDAAkDjT,GACjGkT,kCAAmClT,EAAUkT,kCAC7CC,yCAA0CnT,EAAUmT,yCACpDpT,QAASgM,KAAKjR,MAAMiF,QACpBxE,GAAIwQ,KAAKjR,MAAMS,GACfuE,SAAUiM,KAAKjR,MAAMgF,SACrByG,KAAM,CACF3F,eAAgBmL,KAAKjR,MAAMyL,KAAK3F,eAAevE,OAC/CoO,UAAWsB,KAAKjR,MAAMyL,KAAK8G,KAAKhR,OAAQgR,KAAK2B,UAC7CnO,oBAAqBkL,KAAKjR,MAAMyL,KAAK1F,oBAAoBxE,UAGjE,KACR+W,cACIrH,KAAKjR,MAAMuY,MAAMD,eAAiBrH,KAAKjR,MAAMuY,MAAMD,cAAcjW,OAAS,EAAI4O,KAAKjR,MAAMuY,MAAMD,cAAc,GAAK,KACtHlT,uBAAwB6L,KAAKoB,0BAC7BhN,6BAA8B4L,KAAK5L,6BACnCmT,iBAAkBjV,IAAAA,cAACkV,EAAAA,QAAO,CAACjV,UAAU,wCACrCkV,kBAAmD,WAAhCzH,KAAKjR,MAAMyL,KAAK8G,KAAK/Q,OAAsByP,KAAKjR,MAAMkF,UAAUyT,wBAA0B,KAC7GC,eAAgB3H,KAAKjR,MAAMyL,KAAK8G,KAAKhR,QAAU0P,KAAKjR,MAAMyL,KAAK8G,KAAKhR,OAAOsX,QAC3EC,mBAAoB7H,KAAK8H,uBAAuBpJ,GAChD5F,iBAAkBkH,KAAKlH,mBAG3B,OAAOkH,KAAKjR,MAAMgZ,WAAW1C,GAwBzB3E,uBACJV,KAAKM,SAAS,CACVC,qBAAqB,IAQrBsG,4BAAyB,YAC7B,MAAMvF,EAAI,UAAGtB,KAAKjR,MAAMyL,KAAK8G,YAAnB,aAAG,EAAsBhR,OACnC,GAAIoG,EAAAA,iBAAAA,kBAAmC4K,IAASA,EAAKoD,eACjD,OAAO,EAGX,MAAMsD,EAA8B,UAAGhI,KAAKjR,MAAMyL,KAAKgK,aAAalU,cAAhC,aAAG,EAAqCgB,MACxEkT,GAAsC,sDAAtBA,EAAanP,OAEjC,SACI2S,MAAAA,GAAAA,EAAgCrD,WAAhC,UACA3E,KAAKjR,MAAMyL,KAAK1F,oBAAoBxE,cADpC,OACA,EAA4C2X,OAC5CjI,KAAKjR,MAAMyL,KAAK3F,eAAevE,QAC/B0G,EAAAA,gBAAAA,YAAA,UAA4BsK,EAAKA,YAAjC,aAA4B,EAAW2B,YACvCjD,KAAKjR,MAAMyL,KAAK1F,oBAAoBxE,QAYpCsV,iBACJ,OACI5F,KAAKjR,MAAM+N,OAAOkG,yBC5ZCjU,CAAAA,IAC3B,MAAM,GACFS,EADE,mBAEF0Y,EAFE,WAGFC,EACAlU,WAAW,kBAAEmU,EAAF,sBAAqBC,GAJ9B,mBAKFC,EALE,cAMFC,GACAxZ,EAEJ,IAAKiI,EAAAA,gBAAAA,YAA4BmR,GAC7B,OAGJ,MAAMK,EAAU,GAAGhZ,UACb+C,EAAY,sBAClB,MAAO,CACHkW,wBAAyB,CACrBlW,UAAW,uBAEfmW,iBACIpW,IAAAA,cAAAA,IAAAA,SAAAA,KACIA,IAAAA,cAAAA,OAAAA,CAAMC,UAAU,uBAChBD,IAAAA,cAAAA,OAAAA,KAAAA,IAAQvD,EAAMkF,UAAU0U,yBAGhCC,oBACItW,IAAAA,cAAAA,IAAAA,CAAGC,UAAU,2BAA2BsW,SAAU,EAAGC,KAAK,OAAOhW,QAASyV,GACrE,IACAH,EAAmB,KAG5BW,gBACIzW,IAAAA,cAAC0W,EAAAA,MAAK,CAACC,OAAQf,EAAoB3V,UAAW,GAAGA,IAAa2W,OAAQZ,GAClEhW,IAAAA,cAAC6W,EAAAA,YAAW,CAAC5W,UAAW,GAAGA,oBAA6B2W,OAAQZ,GAC5DhW,IAAAA,cAAAA,KAAAA,CAAI9C,GAAIgZ,EAASjW,UAAU,mCACtB8V,IAGT/V,IAAAA,cAAC8W,EAAAA,UAAS,CAAC7W,UAAW,GAAGA,mBACrBD,IAAAA,cAAAA,KAAAA,KACK6V,EAAW5K,KAAI8L,IAAa,MACzB,OACI/W,IAAAA,cAAAA,KAAAA,CAAIC,UAAU,iCAAiCM,IAAKwW,EAAWlZ,QAA/D,UACKkZ,EAAWC,iBADhB,aACK,EAAsBC,UAAW,UAMtDjX,IAAAA,cAACkX,EAAAA,YAAW,CAACjX,UAAW,GAAGA,yBD2W/BkX,CAAe,CACXja,GAAIwQ,KAAKN,iBACTwI,mBAAoBlI,KAAKQ,MAAMD,oBAC/BgI,cAAevI,KAAKI,mBACpBkI,mBAAoBtI,KAAKS,0BACzB0H,WAAYnI,KAAKQ,MAAMzB,cAAcK,iBACrCnL,UAAW,CACP0U,uBAAwB3I,KAAKjR,MAAMkF,UAAU0U,uBAC7CP,kBAAmBpI,KAAKjR,MAAMkF,UAAUmU,kBACxCC,sBAAuBrI,KAAKjR,MAAMkF,UAAUoU,sBAC5CqB,8BAA+B1J,KAAKjR,MAAMkF,UAAUyV,iCAW5DtE,wCACJ1G,EACAiL,GAEA,MAAM,UAAE1V,GAAc+L,KAAKjR,MAE3B,GACIiI,EAAAA,gBAAAA,YAA4B0H,KAC3BiL,EAAkCtF,SACnCrN,EAAAA,gBAAAA,YAA4B2S,EAAkCC,qBAE9D,IAAK,MAAMC,KAAsBF,EAAkCC,oBAAqB,CACpF,MAAM7X,EAAW2M,EAAUpN,MAAKwY,IAAO,aAAI,UAAAA,EAAQtP,YAAR,eAAcpL,SAAS8H,aAAc2S,KAC5E9X,IACAA,EAASrB,MAAQuD,EAAU8V,uBAC3BhY,EAAS2I,UAAW,IAW5BoN,uBAAuBpJ,GAC3B,MAAMsL,EACDtL,GACGA,EACKnB,KAAInO,IAAW,QAIZ,MAFsB,UAAAA,EAASoL,YAAT,mBAAerL,eAAf,eAAwBmH,iBAAkBC,EAAAA,oBAAAA,UAE1CnH,EAASsB,MAAO,OAClC,MAAMuZ,EACF7a,EAASoL,MAAT,UAAiBpL,EAASoL,KAAKrL,eAA/B,OAAiB,EAAuBkG,KAClC,GAAGjG,EAASoL,KAAKrL,QAAQkG,SAASjG,EAASsB,QAC3CtB,EAASsB,MAEnB,OACI4B,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,kBAAkBM,IAAKzD,EAASqL,YAC1CwP,GAKb,OAAO,QAEVjS,QAAQkS,KAAgCA,KACjD,GAEJ,MAAO,CACHC,QAAS,CACLC,IAAKC,EAAAA,MACL9X,UAAW,YACX0W,OAAQe,EAAU5Y,OAAS,EAC3BkZ,MAAO,SACPC,WAAW,EACX,aAAcvK,KAAKjR,MAAMkF,UAAUuW,8BAEvCC,OACInY,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,oBAAmB,cAAa,QAC3CD,IAAAA,cAAAA,OAAAA,CAAMC,UAAU,6BAChBD,IAAAA,cAAAA,OAAAA,KAAO0N,KAAKjR,MAAMkF,UAAUuW,+BAGpCE,OAAQV,GAQR5D,8BACJ,MACI5L,MACI8G,MAAQhR,OAAQgR,IAFlB,UAIFvD,EAJE,UAKF9J,GACA+L,KAAKjR,MAET,OAAOuS,MAAAA,GAAAA,EAAMoD,gBACPiG,EAAAA,EAAAA,GAAe,CACXC,gBAAiB3W,EAAU4W,iBAC3BC,aAAc7W,EAAU6W,aACxBxJ,KAAMA,EAAKA,KACXtN,QAASgM,KAAKjR,MAAMiF,QACpBD,SAAUiM,KAAKjR,MAAMgF,SACrBgK,UAAAA,EACAvO,GAAIwQ,KAAKjR,MAAMS,UAEnBmH,EAOFuP,4BAAyB,YAC7B,MACI1L,MACI8G,MAAQhR,OAAQgR,GADd,4BAEF/F,GAHF,UAKFwC,EALE,UAMF9J,GACA+L,KAAKjR,MAEHgc,EAAuB/K,KAAKjR,MAAMiF,SAAWgM,KAAKjR,MAAMiF,QAAQkB,SAAW8K,KAAKjR,MAAMiF,QAAQkB,QAAQ+O,QAEtGO,EAAY,UAAGxE,KAAKjR,aAAR,iBAAG,EAAYyL,YAAf,aAAG,EAAkBgK,aACjCwG,EAAoCxG,MAAAA,GAAH,UAAGA,EAAclU,cAAjB,iBAAG,EAAsBgB,MAAK6M,GAF/B,oEAEuCA,EAAK9I,cAA3C,aAAG,EACpCsP,UAEN,OAAOoG,IAAwB/T,EAAAA,gBAAAA,YAA4BsK,MAAAA,OAA5B,EAA4BA,EAAMA,KAAK2B,YAAe3B,MAAAA,GAAAA,EAAMoD,oBAmBrF/N,GAlBAsU,EAAAA,EAAAA,GAAgB,CACZ3J,KAAMA,EAAMA,KACZ4J,cAAejX,EAAUkX,oBACzBC,cAAenX,EAAUoX,uBACzBC,iBAAkBrX,EAAUsX,aAC5BC,SAAUvX,EAAUwX,kBACpBb,gBAAiB3W,EAAUyX,WAC3BC,oBAAqB1X,EAAU0X,oBAC/B3X,QAASgM,KAAKjR,MAAMiF,QACpBD,SAAUiM,KAAKjR,MAAMgF,SACrBvE,GAAIwQ,KAAKjR,MAAMS,GACfoc,mBAAoB3X,EAAU4X,sBAC9BC,SAAU7X,EAAU8X,UACpBhB,qBAAAA,EACAC,kCAAAA,EACAzP,4BAA6BA,MAAAA,OAAF,EAAEA,EAA6BjL,OAC1DyN,UAAAA,IASN4H,gBACJ,MACInL,MACI8G,MAAQhR,OAAQgR,IAFlB,UAIFrN,GACA+L,KAAKjR,MAET,OACIuS,GACIhP,IAAAA,cAAC0Z,EAAAA,mBAAkB,CACf1K,KAAMA,EACN2K,qBAAsBhY,EAAUgY,qBAChCC,qBAAsBjY,EAAUiY,qBAChCC,yBAA0BlY,EAAUkY,yBACpCC,4BAA6BnY,EAAUmY,4BACvCC,gBAAiB,IACjBxG,2BAA4B5R,EAAU4R,2BACtCyG,gBAAiBrY,EAAUqY,gBAC3BC,0BAA2BtY,EAAUsY,0BACrCC,8BAA+BvY,EAAUuY,8BACzCC,iCAAkCxY,EAAUwY,iCAC5CC,4BAA6BzY,EAAU0Y,4BACvC3Y,QAASgM,KAAKjR,MAAMiF,QACpBxE,GAAIwQ,KAAKjR,MAAMS,GACfuE,SAAUiM,KAAKjR,MAAMgF,SACrByG,KAAM,GACN1B,iBAAkBkH,KAAKlH,mBAW/BiO,2CAA2C9S,GAC/C,MAAO,CACH2Y,yBAA0B3Y,EAAU2Y,yBAEpCC,wBAAyB5Y,EAAU4Y,wBACnCC,4BAA6B7Y,EAAU6Y,4BAEvCC,gCAAiC9Y,EAAU8Y,gCAC3CC,iCAAkC/Y,EAAU+Y,iCAC5CC,sCAAuChZ,EAAUgZ,sCAEjDC,oBAAqBjZ,EAAUiZ,oBAC/BC,wBAAyBlZ,EAAUkZ,wBACnCC,cAAenZ,EAAUmZ,eASzBC,iDAAiDpZ,GACrD,MAAO,CACHqZ,4BAA6BrZ,EAAUqZ,4BACvCC,2BAA4BtZ,EAAUsZ,2BACtCC,0CAA2CvZ,EAAUuZ,0CACrDC,6CAA8CxZ,EAAUwZ,6CACxDC,0CAA2CzZ,EAAUyZ,0CACrDC,cAAe1Z,EAAU0Z,cACzBC,kBAAmB3Z,EAAU2Z,kBAC7BC,iBAAkB5Z,EAAU4Z,kBAS5B3G,kDAAkDjT,GACtD,MAAO,CACHqZ,4BAA6BrZ,EAAUqZ,4BACvCC,2BAA4BtZ,EAAUsZ,2BACtCO,4CAA6C7Z,EAAU6Z,4CACvDC,+CAAgD9Z,EAAU8Z,+CAC1DC,4CAA6C/Z,EAAU+Z,4CACvDC,+CAAgDha,EAAUga,+CAC1DC,2CAA4Cja,EAAUia,2CACtDC,qDAAsDla,EAAUka,sDAShEC,gEACJna,GAEA,MAAO,CACHoa,yBAA0Bpa,EAAUoa,yBACpCC,8BAA+Bra,EAAUqa,8BACzCC,yBAA0Bta,EAAUsa,yBACpCC,+BAAgCva,EAAUua,gCAS1CxH,0CAA0C/S,GAC9C,MAAO,CACHwa,yBAA0Bxa,EAAUya,0BACpCC,wBAAyB1a,EAAU2a,mBACnCC,2BAA4B5a,EAAU4a,2BACtCC,yBAA0B7a,EAAU8a,+BAEpCC,yBAA0B/a,EAAU+a,yBAEpCC,yBAA0Bhb,EAAUib,8BACpCC,+BAAgClb,EAAUmb,0CAQ1CrL,gBAAa,MACjB,MACIvJ,MACI8G,MAAQhR,OAAQgR,GAChBvM,WAAazE,OAAQyE,GACrBF,gBAAkBvE,OAAQuE,GAC1BC,qBAAuBxE,OAAQwE,IAEnCd,SACIkB,SAAW+O,SAAS,uBAAEoL,GAA2B,CAAEA,4BAAwB1Y,KAR7E,OAUFmG,EAVE,UAWFiB,EAXE,UAYF9J,EAZE,QAaFqb,GACAtP,KAAKjR,MAEH8E,EAAgBmM,KAAKW,iBAAiB7D,EAAOjJ,eAE7CgE,EAAqDmI,KAAKQ,MAAM3I,gBACtE,IAAI0X,EAA0B,GAI9B,OAHID,GAAWzT,OAAO4C,KAAK6Q,GAASle,OAAS,GAAKke,EAAQjI,eAAiBiI,EAAQjI,cAAcjW,OAAS,IACtGme,EAAkBD,EAAQjI,cAAc,GAAG7X,IAExCwH,EAAAA,gBAAAA,YAA4BsK,MAAAA,OAA5B,EAA4BA,EAAMA,KAAK2B,WHzPxBlU,CAAAA,IAC1B,MAAM,uBAAEmO,EAAF,UAA0BD,GAAclO,EAC9C,OAAOiO,EAAkBC,EAAWC,EAAwBnO,IGwPlDygB,CAAc,CACVvS,UAAWqE,EAAMA,KAAK2B,UACtB3T,sBAAuBigB,EACvB1X,gBAAAA,EACAuF,SAAU4C,KAAKQ,MAAMpD,SACrBF,uBAAwB8C,KAAKG,uBAC7BpJ,qBAAsBiJ,KAAKjR,MAAMyL,KAAKzD,qBAAqBzG,OAC3DqN,uBAAwBqC,KAAKjR,MAAMyL,KAAK5K,gBAAgBU,OACxDmf,SAAQ,UAAEzP,KAAKjR,MAAMyL,KAAKiV,gBAAlB,aAAE,EAA0Bnf,OACpCuD,cAAAA,EACA0B,oBAAqByK,KAAKjR,MAAMiF,QAAQ6I,IAAIC,OAAO4S,mBAAoB,EACvExZ,oBAAqB8J,KAAKjR,MAAMiF,QAAQ6I,IAAIC,OAAO6S,2BACnD1Y,sBAA8E,aAAvD+I,KAAKjR,MAAMiF,QAAQ6I,IAAIC,OAAO8S,qBACrD9b,aAAckM,KAAKjR,MAAMiF,QAAQkB,QAAQpB,aACzCE,QAASgM,KAAKjR,MAAMiF,QACpBD,SAAUiM,KAAKjR,MAAMgF,SACrBvE,GAAIwQ,KAAKjR,MAAMS,GACfyE,UAAW,CACP4b,WAAY5b,EAAU6b,yBACtBC,YAAa9b,EAAU+b,0BACvBC,aAAchc,EAAUic,kCACxBC,YAAalc,EAAUmc,0BACvBC,aAAcpc,EAAUqc,2BACxBC,sBAAuBtc,EAAUuc,oBACjCC,uBAAwBxc,EAAUwc,uBAClCC,yBAA0Bzc,EAAUyc,yBACpCC,yBAA0B1c,EAAU0c,yBACpCC,mBAAoB3c,EAAU2c,mBAC9BhD,kBAAmB3Z,EAAU2Z,kBAC7BC,iBAAkB5Z,EAAU4Z,iBAC5BgD,oBAAqB5c,EAAU6c,gBAC/BC,qBAAsB,EAAF,GACb9c,IAGX8J,UAAAA,EACApJ,wBAAyBV,EAAUU,wBACnCC,6BAA8BX,EAAUW,6BACxCV,iBAAkBD,EAAU+c,qBAC5Bhf,WAAYiC,EAAUgd,uBACtBxV,aAAcxH,EAAUid,oBACxBhf,gBAAiB+B,EAAUkd,uBAC3BjiB,0BAA2B8Q,KAAKjR,MAAMyL,KAAKtL,0BAA0BoB,OACrEiH,eAAgBtD,EAAU8V,uBAC1BvS,kBAAmBvD,EAAUmd,8BAC7B3Z,qBAAsBxD,EAAUod,6BAChChiB,UAAW2Q,KAAKjR,MAAMyL,KAAK8G,KAAKhR,OAChCa,iBAAkB6O,KAAKjR,MAAMyL,KAAKrJ,iBAAiBb,OACnD6D,uBAAwB6L,KAAKoB,0BAC7BhN,6BAA8B4L,KAAK5L,6BACnC4G,sCAAuCgF,KAAK6B,uBAC5CrR,uBAAwBwP,KAAKsC,0BAC7BvN,UAAAA,EACAC,oBAAqBf,EAAUe,oBAC/BvD,uBAAwB4d,EACxBhY,cAAeyF,EAAOwU,qBACtBhW,gCAAiCwB,EAAOxB,gCACxCxC,iBAAkBkH,KAAKlH,iBACvBhD,+BAAgCkK,KAAKlK,+BAErCvB,kCAAmCyL,KAAK+G,2CAA2C9S,GACnFO,mCAAoCwL,KAAKgH,0CAA0C/S,GACnFQ,wCAAyCuL,KAAKqN,iDAAiDpZ,GAC/FS,uDAAwDsL,KAAKoO,gEACzDna,GAGJI,6BAA8BJ,EAAUI,6BACxCC,gCAAiCL,EAAUK,gCAC3Cid,0BAA2Btd,EAAUsd,0BACrCC,4BAA6Bvd,EAAUud,4BACvC3c,eAAAA,EACAC,oBAAAA,EACAU,oBAAqBwK,KAAKjR,MAAMyL,KAAKzD,uBAEzC,KAUF8M,eAAe5O,EAA0BwO,EAA0BD,GACvE,GAAIvO,EACA,OAAOwO,EAGX,MACMgO,EADoB,IAAIC,OAAO,kBAAmB,KAChBC,KAAKlO,GAC7C,IAAImO,EAAYnO,EAKhB,OAJI1J,EAAAA,GAAAA,YAAuB0X,IACvBG,EAAY,GAAG1X,OAAO9J,SAASyhB,SAASpO,KAGrC,GAAGD,IAAaA,EAAUsO,SAAS,KAAa,IAAN,SAAeF,IAmI1C,qBACtB,MACIpX,MAAM,KAAE8G,GADN,UAEFvD,EAFE,QAGF/J,GACAgM,KAAKjR,MAEHoT,QAAyE4P,EAAAA,EAAAA,IAE3EzQ,EACAvD,EACA/J,GACA,GAGJ,GAAImO,EAAmB,CACnB,MAAMkC,GAAWrN,EAAAA,gBAAAA,YAA4BmL,EAAkBrK,wBAC/DkI,KAAKM,SAAS,CACVzI,gBAAiBsK,EACjBW,YAAauB,SAGjBrE,KAAKM,SAAS,CAAEwC,aAAa,IAGjC,OAAOkP,EAAAA,YAAAA,UAOoC,sDAC3C,MAAMC,EAAuC,UAAGjS,KAAKjR,MAAMiF,eAAd,iBAAG,EAAoBkB,eAAvB,iBAAG,EAA6B2H,WAAhC,iBAAG,EAAkCqV,gBAArC,aAAG,EAA4CC,iCAC5F,GAAgD,SAA5CF,EACA,OAAO,EAGX,IAAI,MACA,MAAMG,QAAwBpS,KAAKjR,MAAMyL,KAAKgK,aAK9C,MAHI,UAAA4N,EAAgB9gB,MACZkT,GAAsC,oEAAtBA,EAAanP,cADjC,eAEGsP,aAAa,GAEhB,OAAO,EAEb,MAAOjU,GAGL,OAFAsP,KAAKjR,MAAMgP,UAAU4D,QAAQjR,GAC7BsP,KAAKjR,MAAMgP,UAAU6D,MAAM,iCACpB,EAGX,GAAgD,QAA5CqQ,EACA,OAAO,EAEX,IACI,MAAMI,QAAqBrS,KAAKjR,MAAMyL,KAAK1F,oBAC3C,QACMud,IAC4C,QAA5CJ,GAAqDI,EAAapK,OACnB,QAA5CgK,IAAsDI,EAAapK,OAE9E,MAAOvX,GAGL,OAFAsP,KAAKjR,MAAMgP,UAAU4D,QAAQjR,GAC7BsP,KAAKjR,MAAMgP,UAAU6D,MAAM,gCACpB,GAQPgD,oBAAiB,UACrB,MACIpK,MACI8G,MAAQhR,OAAQgR,GAChBvM,WAAazE,OAAQyE,GACrBF,gBAAkBvE,OAAQuE,GAC1BC,qBAAuBxE,OAAQwE,IAEnCd,SACIkB,SAAW+O,SAAS,uBAAEoL,GAA2B,CAAEA,4BAAwB1Y,KAR7E,OAUFmG,EAVE,UAWFiB,EAXE,UAYF9J,EAZE,QAaFqb,GACAtP,KAAKjR,MAEH8E,EAAgBmM,KAAKW,iBAAiB7D,EAAOjJ,eAC7CgE,EAAqDmI,KAAKQ,MAAM3I,gBACtE,IAAI0X,EAA0B,GAK9B,OAJID,GAAWzT,OAAO4C,KAAK6Q,GAASle,OAAS,GAAKke,EAAQjI,eAAiBiI,EAAQjI,cAAcjW,OAAS,IACtGme,EAAkBD,EAAQjI,cAAc,GAAG7X,IAGxCwQ,KAAKjR,MAAMyL,KAAK4C,UACnB4C,KAAKjR,MAAMyL,KAAK4C,SAAS9M,QACzBgR,GACAA,EAAKA,KAAK2B,WACV3B,EAAKA,KAAK2B,UAAU7R,OAAS,GAJ1B,UAKH4O,KAAKjR,MAAMyL,KAAKe,mCALb,OAKH,EAA6CjL,OAC3CwN,EAAmB,CACfb,UAAWqE,EAAKA,KAAK2B,UACrB3T,sBAAuBigB,EACvB1X,gBAAAA,EACAuF,SAAU4C,KAAKjR,MAAMyL,KAAK4C,SAAS9M,OACnC4M,uBAAwB8C,KAAKG,uBAC7BpJ,qBAAsBiJ,KAAKjR,MAAMyL,KAAKzD,qBAAqBzG,OAC3DqN,uBAAwBqC,KAAKjR,MAAMyL,KAAK5K,gBAAgBU,OACxDmf,SAAQ,UAAEzP,KAAKjR,MAAMyL,KAAKiV,gBAAlB,aAAE,EAA0Bnf,OACpCuD,cAAAA,EACA0B,oBAAqByK,KAAKjR,MAAMiF,QAAQ6I,IAAIC,OAAO4S,mBAAoB,EACvExZ,oBAAqB8J,KAAKjR,MAAMiF,QAAQ6I,IAAIC,OAAO6S,2BACnD7b,aAAckM,KAAKjR,MAAMiF,QAAQkB,QAAQpB,aACzCE,QAASgM,KAAKjR,MAAMiF,QACpBD,SAAUiM,KAAKjR,MAAMgF,SACrBvE,GAAIwQ,KAAKjR,MAAMS,GACfyE,UAAW,CACP4b,WAAY5b,EAAU6b,yBACtBC,YAAa9b,EAAU+b,0BACvBC,aAAchc,EAAUic,kCACxBC,YAAalc,EAAUmc,0BACvBC,aAAcpc,EAAUqc,2BACxBC,sBAAuBtc,EAAUuc,oBACjCC,uBAAwBxc,EAAUwc,uBAClCC,yBAA0Bzc,EAAUyc,yBACpCC,yBAA0B1c,EAAU0c,yBACpCC,mBAAoB3c,EAAU2c,mBAC9BhD,kBAAmB3Z,EAAU2Z,kBAC7BC,iBAAkB5Z,EAAU4Z,iBAC5BgD,oBAAqB5c,EAAU6c,gBAC/BC,qBAAsB,EAAF,GACb9c,IAGX8J,UAAAA,EACApJ,wBAAyBV,EAAUU,wBACnCC,6BAA8BX,EAAUW,6BACxCV,iBAAkBD,EAAU+c,qBAC5Bhf,WAAYiC,EAAUgd,uBACtBxV,aAAcxH,EAAUid,oBACxBhf,gBAAiB+B,EAAUkd,uBAC3BjiB,0BAA2B8Q,KAAKjR,MAAMyL,KAAKtL,0BAA0BoB,OACrEiH,eAAgBtD,EAAU8V,uBAC1BvS,kBAAmBvD,EAAUmd,8BAC7B3Z,qBAAsBxD,EAAUod,6BAChChiB,UAAW2Q,KAAKjR,MAAMyL,KAAK8G,KAAKhR,OAChCa,iBAAkB6O,KAAKjR,MAAMyL,KAAKrJ,iBAAiBb,OACnD6D,uBAAwB6L,KAAKoB,0BAC7BhN,6BAA8B4L,KAAK5L,6BACnC4G,sCAAuCgF,KAAK6B,uBAC5CrR,uBAAwBwP,KAAKsC,0BAC7BvN,UAAAA,EACAC,oBAAqBf,EAAUe,oBAC/BvD,uBAAwB4d,EACxBhY,cAAeyF,EAAOwU,qBACtBhW,gCAAiCwB,EAAOxB,gCACxCxC,iBAAkBkH,KAAKlH,iBACvBhD,+BAAgCkK,KAAKlK,+BAErCvB,kCAAmCyL,KAAK+G,2CAA2C9S,GACnFO,mCAAoCwL,KAAKgH,0CAA0C/S,GACnFQ,wCAAyCuL,KAAKqN,iDAAiDpZ,GAC/FS,uDAAwDsL,KAAKoO,gEACzDna,GAGJI,6BAA8BJ,EAAUI,6BACxCC,gCAAiCL,EAAUK,gCAC3Cid,0BAA2Btd,EAAUsd,0BACrCC,4BAA6Bvd,EAAUud,4BACvC3c,eAAAA,EACAC,oBAAAA,EACAyG,4BAA2B,UAAEyE,KAAKjR,MAAMyL,KAAKe,mCAAlB,aAAE,EAA6CjL,OAC1E2G,sBAA8E,aAAvD+I,KAAKjR,MAAMiF,QAAQ6I,IAAIC,OAAO8S,qBACrDpa,oBAAqBwK,KAAKjR,MAAMyL,KAAKzD,uBAEzC,OA7hCRuI,GAAI,SADTgT,EAAAA,IACKhT,GAiiCN,+EEhoCA,MA0CMiT,EAAqBpK,GAEnB7V,EAAAA,cAAAA,EAAAA,SAAAA,KACIA,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAKsM,EAAWM,yBAChBN,EAAWO,iBACXP,EAAWS,oBACXT,EAAWY,kBAMtB0J,EAAmB,CACrB/T,EACAzK,EACAoT,EACAX,EACAa,EACAE,EACAE,EACA7O,EACA4Z,EACA1O,KAEA,MAAM,cAAE2O,GAAkB1e,EAE1B,OAAIwT,EACOnV,EAAAA,cAAAA,EAAAA,SAAAA,KAAGmV,GAEV/I,EACOA,EAAUnB,KAAI,CAACxL,EAAU2B,IAExBpB,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,sBAAsBM,IAAKa,GACtCpB,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,qBACXD,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,0BACVR,EAAS3C,SACTsjB,EACK,KACAE,EAAkB7gB,EAAUkC,EAAWoT,EAAevO,EAAkBkL,IAElF1R,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,2BAA2BR,EAAS4J,SAEtD+W,EACGpgB,EAAAA,cAACkgB,EAAAA,KAAI,CAACjgB,UAAU,sCACXsgB,EAAuB9gB,EAAUkC,EAAWoT,EAAevO,EAAkBkL,GAE7EjS,EAASgK,eAEdhK,EAASwK,mBACTjK,EAAAA,cAACkgB,EAAAA,KAAI,CAACjgB,UAAU,gCACZD,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,sCAEVR,EAASgK,gBAIlBzJ,EAAAA,cAAAA,EAAAA,SAAAA,KAAGP,EAASgK,kBAMzB4L,EACHrV,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,wBACXD,EAAAA,cAAAA,IAAAA,CAAGC,UAAU,iBAAiBogB,GAC7BjM,GAGLpU,EAAAA,cAAAA,EAAAA,SAAAA,KAAGiV,IAULuL,EAAuB,CAAC/gB,EAA+B9C,IAA6B,KACtF8C,EAASyJ,eAAiBzJ,EAASyJ,cAAc5J,UAAUC,aAAa5C,IAQtE8jB,EAAwBhhB,GAAkC,KAC5DA,EAASyJ,eAAiBzJ,EAASyJ,cAAc5J,UAAUC,aAAY,IAGrE+gB,EAAoB,CACtB7gB,EACAkC,EACAoT,EACAvO,EACAkL,KACoB,MAEpB,IAAKjS,EAASyJ,gBAAkB6L,IAAiB,UAAAtV,EAASyI,YAAT,eAAepL,SAAS0B,gBAAiBkT,EACtF,OAAO,KAGX,MAAM,uBACFiN,EADE,yBAEF+B,EAFE,oBAGF9B,EAHE,8BAIF+B,EAJE,uBAKF9B,GACAld,EAEEhF,EAAkB8C,EAASyJ,cAAcvM,gBAEzC2T,GAAUhK,EAAAA,EAAAA,kBAAiB,QAASE,EAAmBiM,EAAAA,kBAAAA,eACvDmO,GAAyBla,EAAAA,EAAAA,wBAAuBF,EAAmB8J,GAEzE,OACItQ,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAK9J,EAASyJ,cAAcjI,gBAC7BjB,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,+BACVtD,EACGqD,EAAAA,cAAAA,OAAAA,CAAMC,UAAU,WAAW0gB,GAE3B3gB,EAAAA,cAAAA,OAAAA,CAAMC,UAAU,QAAQygB,IAG/B/jB,GACGqD,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,oCACXD,EAAAA,cAAAA,OAAAA,CAAMC,UAAU,0CAA0CR,EAASyJ,cAAcrJ,aACjFG,EAAAA,cAACsJ,EAAAA,OAAM,CAACkN,KAAK,OAAOvW,UAAU,mCAAmCO,QAASigB,EAAqBhhB,IAC1Fof,IAIb7e,EAAAA,cAACsJ,EAAAA,OAAMC,OAAAA,OAAAA,CACHtJ,UAAU,4BACN2gB,EAAsB,CAC1BpgB,QAASggB,EAAqB/gB,EAAU9C,KAEvCA,EAAkBgiB,EAAyBC,KAMtDiC,EAAqBC,GAClBA,GAAyC,IAA5BA,EAAU1I,OAAOtZ,OAI/BkB,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAKuX,EAAUjJ,SACfiJ,EAAU3I,OACV2I,EAAU1I,QALR,KAUT2I,EAA2B,CAC7BC,EACA7N,EACA1W,IAEKukB,EAIDhhB,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAK4J,GACL1W,EAAM2W,UACN4N,EAAkBC,SAClBD,EAAkBE,eAAiBF,EAAkBE,eAAiB,KACtEF,EAAkBG,SAClBH,EAAkBI,SAClBJ,EAAkBK,YAClBL,EAAkBM,IAClBN,EAAkB5H,YAXhB,KAgBTmI,EAA6B,CAC/BC,EACArO,EACA1W,IAEK+kB,EAKDxhB,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAK4J,GACLqO,EAAoBC,SACpBD,EAAoBE,SACpBF,EAAoBG,QACpBH,EAAoBpI,aARzB3c,EAAMiF,QAAQ+J,UAAUrN,MAAM,uDACvB,MAYTwjB,EAAwB,CAACnlB,EAAuBkF,KACW,MAA7D,OAAIlF,EAAMsP,gBAAkBtP,EAAMsP,eAAejN,OAAS,EAElDkB,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,wBAAf,UACKxD,EAAMsP,sBADX,aACK,EAAsBd,KAAI,CAACN,EAAWpK,KAAO,QAC1C,OACIP,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,8BAA8BM,IAAKA,GAC7CshB,EACGlX,EAAU,GACVlO,EAAMsY,cACNpT,EACAmgB,EAAYnX,GAJY,UAKxBlO,EAAMiF,QAAQ8F,cAAcoF,eAAe+E,eALnB,aAKxB,EAAoDC,uBAEvDuO,EACGxV,EACAlO,EAAMkF,UACNlF,EAAMsY,cACNtY,EAAM2X,qBACN3X,EAAMwY,iBACNxY,EAAM0Y,kBACN1Y,EAAM4Y,eACN5Y,EAAM+J,iBACN/J,EAAM0V,sBATO,UAUb1V,EAAMiF,QAAQ8F,cAAcoF,eAAe+E,eAV9B,aAUb,EAAoDC,4BAQzEnV,EAAM4Y,eACTrV,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,uBACXD,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,wBACXD,EAAAA,cAAAA,IAAAA,CAAGC,UAAU,iBAAiBxD,EAAMkF,UAAU0e,eAC7C5jB,EAAM2X,uBAIfpU,EAAAA,cAAAA,EAAAA,SAAAA,KAAGvD,EAAMwY,mBAGX4M,EAA8B,CAChCpiB,EACAsV,EACApT,EACAogB,EACArQ,KACA,MACA,MAAM/U,EAAkB8C,MAAAA,GAAH,UAAGA,EAAUyJ,qBAAb,aAAG,EAAyBvM,iBAC3C,WAAEqlB,EAAF,aAAcC,EAAd,kBAA4BC,GAAsBvgB,EACxD,IAAIwgB,EAKJ,OAHAA,EAAaxlB,EAAkBqlB,EAAaC,EAC5CE,EAAa1iB,EAASyI,MAAQzI,EAASyI,KAAKpL,SAAS0B,eAAiBkT,EAAwBwQ,EAAoBC,EAG9GniB,EAAAA,cAAAA,EAAAA,SAAAA,KACIA,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,8CACXD,EAAAA,cAAAA,IAAAA,CAAGC,UAAW,8CAA8CkiB,EAAWpb,uBACvE/G,EAAAA,cAAAA,IAAAA,CAAGC,UAAW,8CAA8CkiB,EAAWpb,iBAAkBob,GACxFC,EAA2B3iB,EAAUkC,EAAWogB,MAM3DxB,EAAyB,CAC3B9gB,EACAkC,EACAoT,EACAvO,EACAkL,KACoB,MAEpB,IAAKjS,EAASyJ,gBAAkB6L,IAAiB,UAAAtV,EAASyI,YAAT,eAAepL,SAAS0B,gBAAiBkT,EACtF,OAAO,KAGX,MAAM,uBAAEmN,EAAF,uBAA0BF,EAA1B,oBAAkDC,GAAwBjd,EAE1EhF,EAAkB8C,EAASyJ,cAAcvM,gBAEzC2T,GAAUhK,EAAAA,EAAAA,kBAAiB,QAASE,EAAmBiM,EAAAA,kBAAAA,eACvDmO,GAAyBla,EAAAA,EAAAA,wBAAuBF,EAAmB8J,GAEzE,OACItQ,EAAAA,cAAAA,EAAAA,SAAAA,KACKrD,EACGqD,EAAAA,cAACsJ,EAAAA,OAAM,CAACkN,KAAK,OAAOvW,UAAU,qCAAqCO,QAASigB,EAAqBhhB,IAC5Fof,GAEL,KACJ7e,EAAAA,cAACsJ,EAAAA,OAAMC,OAAAA,OAAAA,CACHiN,KAAK,OACLvW,UAAU,sCACN2gB,EAAsB,CAC1BpgB,QAASggB,EAAqB/gB,EAAU9C,KAEvCA,EAAkBgiB,EAAyBC,KAMtDkD,EAAeriB,IACjB,IAAI4iB,EAAY,EAIhB,OAHAA,EAAY5iB,EAAS6iB,QAAO,CAACP,EAAOlW,KAAQ,MACxC,OAAOkW,IAAS,UAAAlW,EAAK3D,YAAL,eAAWpL,SAASoJ,WAAY,KACjD,GACImc,GAGLD,EAA6B,CAAC3iB,EAA+BkC,EAA8BogB,KAAiB,UAC9G,MAAMplB,EAAkB8C,MAAAA,GAAH,UAAGA,EAAUyJ,qBAAb,aAAG,EAAyBvM,iBAC3C,UAAE4lB,EAAF,WAAaC,GAAe7gB,EAC5B8gB,EAASV,EAAQ,EAAIS,EAAaD,EACxC,OACIviB,EAAAA,cAAAA,EAAAA,SAAAA,KACIA,EAAAA,cAACkgB,EAAAA,KAAI,CAACjgB,UAAU,oDACXtD,EACGqD,EAAAA,cAAAA,IAAAA,CAAGC,UAAU,uDACRR,MAAAA,GADL,UACKA,EAAUyJ,qBADf,aACK,EAAyBtI,eACzB,KACAnB,MAAAA,GAHL,UAGKA,EAAUyJ,qBAHf,aAGK,EAAyBrJ,aAE9B,KACJG,EAAAA,cAAAA,IAAAA,CAAGC,UAAU,uDAAb,IACM8hB,EADN,IACcU,EADd,QAQVC,EAA2BC,GAEzB3iB,EAAAA,cAACkgB,EAAAA,KAAI,CAACjgB,UAAU,iCACZD,EAAAA,cAAAA,IAAAA,CAAG6H,KAAM8a,EAAK1iB,UAAU,yBAAuB,kBAO3D,EA/X4CxD,IAAD,eACvCuD,EAAAA,cAAAA,MAAAA,OAAAA,OAAAA,CAAKC,UAAWxD,EAAMwD,UAAW/C,GAAIT,EAAMS,IAAQT,EAAMmmB,uBAAuBnmB,IAC3EA,EAAM2X,qBACN3X,EAAM+M,MACN/M,EAAMqQ,kBAAoBmT,EAAkBxjB,EAAMqQ,kBAClDrQ,EAAM0V,sBACHyP,EAAsBnlB,EAAOA,EAAMkF,WAEnC3B,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAK9M,EAAMwW,kBACXkN,EACG1jB,EAAMkO,UACNlO,EAAMkF,UACNlF,EAAMsY,cACNtY,EAAM2X,qBACN3X,EAAMwY,iBACNxY,EAAM0Y,kBACN1Y,EAAM4Y,eACN5Y,EAAM+J,iBACN/J,EAAM0V,sBATO,UAUb1V,EAAMiF,QAAQ8F,cAAcoF,eAAe+E,eAV9B,aAUb,EAAoDC,wBAI/DnV,EAAM+W,qBACHxT,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAK9M,EAAMyW,qBACXzW,EAAM+W,oBACN,UAAA/W,EAAMuS,YAAN,SAAYoD,eACPmP,EAA2B9kB,EAAMoX,wBAAyBpX,EAAM0W,kBAAmB1W,GACnFskB,EAAyBtkB,EAAMkX,sBAAuBlX,EAAM0W,kBAAmB1W,GACpFokB,EAAkBpkB,EAAM8Y,oBACxB9Y,EAAMsX,2BACNtX,EAAMyX,sBACNwO,EAlCQ,aAmCRjmB,EAAM6X,8BAGd7X,EAAMsY,gOCQf,SAAS8N,EACLnhB,EACAD,EACAqhB,EACAC,EACAC,EACAC,GAAkB,MAElB,IAAKF,EACD,OAAO,KAGX,MAAMG,EAAa,UAAGF,MAAAA,OAAH,EAAGA,EAAc3d,kBAAjB,aAA+BhB,EAC5C8e,EAhCV,SAA4BC,EAAiBD,GAEzC,GAAIC,GAAUD,EAAiB,CAC3B,MAAME,EAAgBD,EAAOE,QAFP,GAGtB,OAAOC,EAAAA,EAAAA,QAAOJ,GAAmB,GAAIE,EAAe,KAExD,MAAO,GA0BiBG,CAAmBT,EAAWE,GAEtD,OACIjjB,IAAAA,cAACyjB,EAAAA,gBAAe,CACZ/hB,QAASA,EACTxE,GAAI4lB,EACJrhB,SAAUA,EACVshB,UAAWA,EACXW,YAAaR,EACbS,UAAQ,EACRV,UAAWE,EACXjb,KAAM,KA2FX,MAAM0b,EAAwD,IAWhE,IAXiE,KAClE1b,EADkE,QAElExG,EAFkE,cAGlEH,EAHkE,YAIlEsiB,EAJkE,cAKlExI,EALkE,kBAMlEC,EANkE,gBAOlE6H,EAPkE,SAQlE1hB,EARkE,GAUlEvE,GACC,EACD,MAAML,EAAUqL,EAAKrL,QACrB,OAAKA,EAKDmD,IAAAA,cAAAA,IAAAA,SAAAA,KACIA,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,4BACXD,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,mCAxD/B,SACI2M,EACArL,EACAC,EACAsiB,EACAC,GAEA,IAAKD,IAAatiB,IAAiBD,EAC/B,OAAO,KAEX,MAAMyiB,EAAsB,CACxBC,IAAKH,EACLC,QAASA,GAAoB,IAE3BG,EAAa,CACf1iB,aAAAA,EACAD,cAAAA,GAGJ,OADA2iB,EAAW3iB,cAAc4iB,iBAAkB,EACpCnkB,IAAAA,cAACokB,EAAAA,GAAK7a,OAAAA,OAAAA,GAAKya,EAAaE,EAAU,CAAEtX,eAAgBA,EAAgByX,oBAAoB,WAsC9EC,CACG5iB,EAAQ8F,cAAcoF,eACtBrL,EACAG,EAAQkB,QAAQpB,aAChB3E,EAAQ+L,gBACR/L,EAAQkG,OAGhB/C,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,qCACXD,IAAAA,cAAAA,KAAAA,CAAIC,UAAU,mCAAmCpD,EAAQkG,MAxG7E,SACIrB,EACAD,EACA8iB,EACAC,EACAC,EACAZ,EACAxI,EACAC,GAEA,MAAMoJ,EAAsB,CACxBC,UAAWH,EACXI,cAAeH,EACfI,wBAAyBJ,GAG7B,OACIzkB,IAAAA,cAAC8kB,EAAAA,eAAc,CACXpjB,QAASA,EACTxE,GAAIqnB,EACJ9iB,SAAUA,EACVyG,KAAM,CAAEwc,MAAAA,GACRb,YAAaA,EACbxI,cAAeA,EACfC,kBAAmBA,IAiFVyJ,CAAYrjB,EAASD,EAAUvE,EAAIL,EAAQ8nB,UAAW9nB,EAAQmoB,MAAOnB,EAAaxI,EAAeC,IA/K3F2J,EAgLYpoB,EAAQkE,YA/KpCf,IAAAA,cAAAA,IAAAA,CAAGC,UAAU,kCAAkCglB,KAgLpCvjB,EAAQ6I,IAAIC,OAAO0a,YACjBrC,EAAanhB,EAASD,EAAUvE,EAAIL,EAAQsoB,cAAetoB,EAAQuoB,aAAcjC,MApB1F,KA9Jf,IAA2B8B,GC2GrBI,EAAe,CAACxZ,EAA8BpP,KAAqF,MAOrI,MAAO,CACH6oB,sBAAuB,CAAErlB,UAAW,iDACpCslB,QARgB1Z,EAAK0Z,SA1FP,EAACC,EAAkC/oB,KACrD,MAAMmQ,EAAiBnQ,EAAMmQ,eAC7B,OACI5M,EAAAA,cAACylB,EAAAA,GAAa,CACVC,KAAMF,EACN1N,IAAI,IACJ7X,UAAU,sDACV0lB,UAAW,CAKPC,OAAQ7X,IACJtR,EAAMopB,2BAA2B9X,IAErCnB,eAAAA,MA2EwBkZ,CAAcja,EAAK0Z,QAAS9oB,GAS5DipB,KARkB7Z,EAAKka,SAhEP,EAACC,EAAwCvpB,KAC7D,MAAMmQ,EAAiBnQ,EAAMmQ,eAC7B,OACI5M,EAAAA,cAACylB,EAAAA,GAAa,CACVC,KAAMM,EACNlO,IAAI,IACJ7X,UAAU,2DACV0lB,UAAW,CAKPC,OAAQ7X,IACJtR,EAAMopB,2BAA2B9X,IAErCnB,eAAAA,MAiD0BqZ,CAAgBpa,EAAKka,QAAStpB,GAShEypB,MARW,UAAGra,EAAKqa,aAAR,aAAG,EAAYjb,KAAI,CAACkb,EAAqB/kB,IArCxC,EAAC+kB,EAAqB1pB,EAA2C2pB,KACjF,MAAMC,EAAoC,CACtCpD,UAAWkD,EAAQlD,UACnBhjB,UAAW,4DACXqmB,SAAUH,EAAQG,SAClBC,QAASJ,EAAQI,QAAQC,eACzBC,aAAcN,EAAQO,eACtBlQ,KAAM,UAEJ5J,EAAiBnQ,EAAMmQ,eAC7B,OACI5M,EAAAA,cAACylB,EAAAA,GAAa,CACVllB,IAAK6lB,EACLO,KAAMN,EACNV,UAAW,CAKPiB,aAAc7Y,IACVtR,EAAMoqB,+BAA+BT,EAAWrY,IAEpDnB,eAAAA,MAgBDka,CAAYX,EAAS1pB,EAAO2E,KAQnC2lB,2BAA4B,CAAE9mB,UAAW,4DACzC+mB,2BAA4B,CAAE/mB,UAAW,yDASpCgnB,EACTxqB,IAEA,MAAM,kBAAEyqB,GAAsBzqB,EAC9B,GAAKyqB,EAIL,OAAO7B,EAAa6B,EAAmBzqB,QCjI/B0qB,EAgCAC,0lBAhCZ,SAAYD,GACRA,EAAAA,EAAAA,aAAAA,GAAAA,eACAA,EAAAA,EAAAA,cAAAA,GAAAA,gBACAA,EAAAA,EAAAA,iBAAAA,GAAAA,mBACAA,EAAAA,EAAAA,iBAAAA,GAAAA,mBACAA,EAAAA,EAAAA,aAAAA,GAAAA,eACAA,EAAAA,EAAAA,YAAAA,GAAAA,cACAA,EAAAA,EAAAA,iBAAAA,GAAAA,mBACAA,EAAAA,EAAAA,aAAAA,IAAAA,eACAA,EAAAA,EAAAA,cAAAA,IAAAA,gBACAA,EAAAA,EAAAA,kBAAAA,GAAAA,oBACAA,EAAAA,EAAAA,0BAAAA,IAAAA,4BACAA,EAAAA,EAAAA,wBAAAA,IAAAA,0BACAA,EAAAA,EAAAA,4BAAAA,IAAAA,8BACAA,EAAAA,EAAAA,0BAAAA,GAAAA,4BACAA,EAAAA,EAAAA,aAAAA,IAAAA,eACAA,EAAAA,EAAAA,eAAAA,GAAAA,iBACAA,EAAAA,EAAAA,SAAAA,MAAAA,WACAA,EAAAA,EAAAA,WAAAA,GAAAA,aACAA,EAAAA,EAAAA,SAAAA,GAAAA,WACAA,EAAAA,EAAAA,YAAAA,IAAAA,cACAA,EAAAA,EAAAA,YAAAA,KAAAA,cACAA,EAAAA,EAAAA,WAAAA,KAAAA,aACAA,EAAAA,EAAAA,qBAAAA,GAAAA,uBACAA,EAAAA,EAAAA,sBAAAA,IAAAA,wBACAA,EAAAA,EAAAA,iBAAAA,KAAAA,mBAzBJ,CAAYA,IAAAA,EAAkB,KAgC9B,SAAYC,GACRA,EAAAA,MAAAA,UACAA,EAAAA,eAAAA,UAFJ,CAAYA,IAAAA,EAAY,KAuCjB,MAAMC,UAAoBrnB,IAAAA,UAW7BiN,YAAmBxQ,GACfyQ,MAAMzQ,GALF,KAAA6qB,oBAA8B,EAE9B,KAAAC,SAAwD,KA8CzD,KAAAC,oBAAsB,KACzB,GAAI/f,EAAAA,GAAAA,UAAoB,CACpB,MAAMggB,EAA4B/Z,KAAKjR,MAAMirB,gBAC7C,GAA0C,OAAtCD,EAA0BE,QAC1B,OAAOF,EAA0BE,QAAQC,cAU9C,KAAAC,qBAAuB,KAC1B,GAAIpgB,EAAAA,GAAAA,UAAoB,CACpB,MAAMggB,EAA4B/Z,KAAKjR,MAAMirB,gBAC7C,GAA0C,OAAtCD,EAA0BE,QAC1B,OAAOF,EAA0BE,QAAQG,eAW9C,KAAAC,gBAAmBC,IAEtB,MAGMhqB,EAHQ,IAAIohB,OAAO,8CAA+C,KAGnD6I,KAAKD,GAE1B,OAAOhqB,EACD,CACIkqB,OAAQC,OAAOC,SAASpqB,EAAO,GAAI,IACnCqqB,OAAQF,OAAOC,SAASpqB,EAAO,GAAI,IACnCsqB,OAAQH,OAAOC,SAASpqB,EAAO,GAAI,KAEvC,CACIkqB,OARW,EASXG,OATW,EAUXC,OAVW,IAqBlB,KAAAC,sBAAwB,CAAC7C,EAAc8C,EAAkBC,EAAqBC,KAAuB,QACxG,MAAMC,EAAsBxB,EAAmBwB,YACzCjnB,EAAO,oBAAGgM,KAAKkb,QAAQjB,eAAhB,aAAG,EAAsBkB,WAAW,aAApC,QAA6Cnb,KAAK6Z,SAC/D,GAAI7lB,GAAWgM,KAAK4Z,mBAAoB,CACpC,MAAMwB,EAAgB3B,EAAmB2B,cACnCC,EAAoB5B,EAAmB4B,kBACvCC,EAActnB,EAAQunB,YAAYvD,GAAMwD,MAAQJ,EACtDpnB,EAAQynB,UAAY,QAAQV,EAASP,WAAWO,EAASJ,WAAWI,EAASH,WAAWI,MACpFjhB,EAAAA,GAAAA,WAAsB2hB,SAASC,KAAKC,eAAqE,QAApDF,SAASC,KAAKC,cAAcC,aAAa,OAC9F7nB,EAAQ8nB,SAAS9D,EAAM8C,EAAO,GAAKQ,EAAcL,EAAcG,EAAgBH,EAAaH,EAAO,GAAKO,GAExGrnB,EAAQ8nB,SAAS9D,EAAM8C,EAAO,GAAKQ,EAAcL,EAAcG,EAAgBH,EAAaH,EAAO,GAAKO,KAU7G,KAAAU,WAAa,CAAC/D,EAAc8C,KAA0B,QACzD,MAAM,MAAExQ,EAAQoP,EAAapP,MAAvB,eAA8B0R,EAAiBtC,EAAasC,gBAAmBhc,KAAKjR,MACpFksB,EAAsBxB,EAAmBwB,YACzCjnB,EAAO,oBAAGgM,KAAKkb,QAAQjB,eAAhB,aAAG,EAAsBkB,WAAW,aAApC,QAA6Cnb,KAAK6Z,SAC/D,GAAI7lB,GAAWgM,KAAK4Z,mBAAoB,CACpC,MAAMqC,EAAexC,EAAmBwC,aAClCb,EAAgB3B,EAAmB2B,cACnCC,EAAoB5B,EAAmB4B,kBACvCC,EAActnB,EAAQunB,YAAYvD,GAAMwD,MAAQJ,EAChDc,EAAkBpB,EAAO,GAAKQ,EAAcL,EAC5CkB,EAAkBrB,EAAO,GAAKmB,EAAehB,EAC7CmB,EAAUH,EAAehB,EAE/BjnB,EAAQqoB,YACRroB,EAAQsoB,OAAOJ,EAAkBE,EAASD,GAC1CnoB,EAAQuoB,OAAOL,EAAkBZ,EAAcc,EAASD,GACxDnoB,EAAQwoB,MACJN,EAAkBZ,EAClBa,EACAD,EAAkBZ,EAClBa,EAAkBC,EAClBA,GAEJpoB,EAAQuoB,OAAOL,EAAkBZ,EAAaa,EAAkBF,EAAeG,GAC/EpoB,EAAQwoB,MACJN,EAAkBZ,EAClBa,EAAkBF,EAClBC,EAAkBZ,EAAcc,EAChCD,EAAkBF,EAClBG,GAEJpoB,EAAQuoB,OAAOL,EAAkBE,EAASD,EAAkBF,GAC5DjoB,EAAQwoB,MAAMN,EAAiBC,EAAkBF,EAAcC,EAAiBC,EAAkBC,EAASA,GAC3GpoB,EAAQuoB,OAAOL,EAAiBC,EAAkBC,GAClDpoB,EAAQwoB,MAAMN,EAAiBC,EAAiBD,EAAkBE,EAASD,EAAiBC,GAC5FpoB,EAAQuoB,OAAOL,EAAkBE,EAASD,GAC1CnoB,EAAQyoB,SACRzoB,EAAQ0oB,YACR1oB,EAAQynB,UAAYnR,EACpBtW,EAAQ2oB,OACR3oB,EAAQynB,UAAYO,EAChBjiB,EAAAA,GAAAA,WAAsB2hB,SAASC,KAAKC,eAAqE,QAApDF,SAASC,KAAKC,cAAcC,aAAa,OAC9F7nB,EAAQ8nB,SAAS9D,EAAM8C,EAAO,GAAKQ,EAAcL,EAAcG,EAAgBH,EAAaH,EAAO,GAAKO,GAExGrnB,EAAQ8nB,SAAS9D,EAAM8C,EAAO,GAAKQ,EAAcL,EAAcG,EAAgBH,EAAaH,EAAO,GAAKO,KAS7G,KAAAuB,gBAAmB9B,IAA0B,MAChD,MAAM,MAAExQ,EAAQoP,EAAapP,MAAvB,eAA8B0R,EAAiBtC,EAAasC,gBAAmBhc,KAAKjR,MACpF8tB,EAAU,UAAG7c,KAAKjR,MAAM+tB,4BAAd,aAAG,EAAiCD,WACpD,IAAIE,EAAsBtD,EAAmBuD,0BAC7C,MAAMC,EAAiBnC,EAAO,GACxBoC,EAAiBpC,EAAO,GACxBqC,EAAoB1D,EAAmB2D,wBACvCC,EAAS5D,EAAmB6D,aAC5BC,EAAW9D,EAAmB8D,SAC9BC,EAAa/D,EAAmB+D,WAChCC,EAAWhE,EAAmBgE,SACpC,IAAIC,EAAkBjE,EAAmBkE,qBACzC,MAAMC,EAAsB5d,KAAKqa,gBAAgB2B,EAAe6B,qBAK1DC,EAAU,KAAK,QACjB,MAAM9pB,EAAO,oBAAGgM,KAAKkb,QAAQjB,eAAhB,aAAG,EAAsBkB,WAAW,aAApC,QAA6Cnb,KAAK6Z,SAC1D7lB,IAGLA,EAAQqoB,YACRroB,EAAQ+pB,QAAQd,EAAgBC,EAAgBG,EAAQN,EAAqBQ,EAAUC,EAAYC,GACnGzpB,EAAQynB,UAAYnR,EACpBtW,EAAQ2oB,OACR3oB,EAAQynB,UAAYnR,EAChBuS,IACIE,EAAsBI,GACtBa,sBAAsBF,GACtB9d,KAAK6a,sBAAsBgC,EAAY/B,EAAQ8C,EAAqBF,GACpEA,GAAmBjE,EAAmBwE,iBACtClB,KAEA/c,KAAK+b,WAAWc,EAAY,CAACI,EAAgBC,OAKrDld,KAAK4Z,oBACLkE,KAQD,KAAAI,kBAAqBpD,IAA0B,MAClD,MAAM,MAAExQ,EAAQoP,EAAapP,MAAvB,eAA8B0R,EAAiBtC,EAAasC,gBAAmBhc,KAAKjR,MACpF8tB,EAAU,UAAG7c,KAAKjR,MAAM+tB,4BAAd,aAAG,EAAiCD,WACpD,IAAIE,EAAsBtD,EAAmB0E,4BAC7C,MAAMlB,EAAiBnC,EAAO,GACxBoC,EAAiBpC,EAAO,GACxBqC,EAAoB1D,EAAmB2E,0BACvCb,EAAW9D,EAAmB8D,SAC9Bc,EAAc5E,EAAmB4E,YACjCC,EAAc7E,EAAmB6E,YACjCC,EAAa9E,EAAmB8E,WAChClB,EAAS5D,EAAmB+E,eAC5BhB,EAAa/D,EAAmB+D,WAChCC,EAAWhE,EAAmBgE,SACpC,IAAIgB,EAAmBhF,EAAmBiF,sBAC1C,MAAMd,EAAsB5d,KAAKqa,gBAAgB2B,EAAe6B,qBAK1DC,EAAU,KAAK,QACjB,MAAM9pB,EAAO,oBAAGgM,KAAKkb,QAAQjB,eAAhB,aAAG,EAAsBkB,WAAW,aAApC,QAA6Cnb,KAAK6Z,SAC1D7lB,IAGLA,EAAQqoB,YACRroB,EAAQ2qB,UAAU1B,EAAiBoB,EAAanB,EAAiBmB,EAAaE,EAAYD,GAC1FtqB,EAAQ+pB,QAAQd,EAAgBC,EAAgBG,EAAQN,EAAqBQ,EAAUC,EAAYC,GACnGzpB,EAAQynB,UAAYnR,EACpBtW,EAAQ2oB,OACJQ,EAAoBJ,GAAuBF,IAC3CmB,sBAAsBF,GACtB9d,KAAK6a,sBAAsBgC,EAAY/B,EAAQ8C,EAAqBa,GACpEA,GAAoBhF,EAAmBwE,iBACvClB,OAIJ/c,KAAK4Z,oBACLkE,KAQD,KAAAc,WAAc9D,IAA0B,QAC3C,MAAM,MAAExQ,EAAQoP,EAAapP,MAAvB,SAA8BuU,GAAa7e,KAAKjR,MAChD+vB,EAA2BrF,EAAmBqF,iBAC9CtB,EAAqB/D,EAAmB+D,WACxCxpB,EAAO,oBAAGgM,KAAKkb,QAAQjB,eAAhB,aAAG,EAAsBkB,WAAW,aAApC,QAA6Cnb,KAAK6Z,SACzDwD,EAAsB,OAAbwB,GAAkC,OAAbA,EAAoB/D,EAAO,GAAKgE,EAAmBhE,EAAO,GACzF9mB,IAGLA,EAAQynB,UAAYnR,EACpBtW,EAAQqoB,YACRroB,EAAQ+qB,YAAczU,EACtBtW,EAAQgrB,IAAIlE,EAAO,GAAIA,EAAO,GAAIuC,EAAQG,EAAYyB,KAAKC,GAAKJ,GAChE9qB,EAAQ0oB,YACR1oB,EAAQyoB,SACRzoB,EAAQ2oB,SAQL,KAAAwC,YAAerE,IAClB,MAAM,SAAEsE,GAAapf,KAAKjR,MACpBswB,EAAuB5F,EAAmB4F,aAC1CC,EAAuB7F,EAAmB6F,aAG1C9D,EAAQxb,KAAK8Z,sBACbyF,EAAQ/D,GAAS4D,GAAYA,EAAWC,EAAe7D,EAAQ4D,EAAWE,EAChF,OAAOxE,EAAOvd,KAAIiiB,GAASA,EAAQD,KAMhC,KAAAE,qBAAuB,KAC1B,MAAM,QAAEC,GAAY1f,KAAKjR,MACzB2wB,EAAQC,MAAMpiB,KAAIqiB,IACd5f,KAAK4e,WAAW5e,KAAKmf,YAAYS,EAAK9E,SAC/B,SASR,KAAA+E,cAAiBD,IACpB,MAAME,EAAe9f,KAAKmf,YAAYS,EAAK9E,QAC3C,MAAO,CAACgF,EAAa,GAAIA,EAAa,KAOnC,KAAAC,cAAiBH,IAChBA,EAAKI,QAAUhgB,KAAKkb,QAAQjB,UAC5Bja,KAAK4e,WAAW5e,KAAKmf,YAAYS,EAAK9E,SACtC9a,KAAK4c,gBAAgBgD,EAAKI,UAQ3B,KAAAC,eAAkBL,IACrB,GAAI5f,KAAKkb,QAAQjB,QAAS,CAAC,IAAD,EACtB,MAAMjmB,EAAO,UAAGgM,KAAKkb,QAAQjB,QAAQkB,WAAW,aAAnC,QAA4Cnb,KAAK6Z,SACxDqG,EAA0BzG,EAAmB0G,iBAC7CC,EAA0B3G,EAAmB4G,iBAEnD,IAAKrsB,EACD,OAEJA,EAAQ2qB,UAAUuB,EAAiBE,EAAiBpgB,KAAKkb,QAAQjB,QAAQuB,MAAOxb,KAAKkb,QAAQjB,QAAQqG,QACrGtgB,KAAKyf,uBACDG,EAAKI,QACLhgB,KAAKke,kBAAkB0B,EAAKI,UAWjC,KAAAO,MAAQ,CAACX,EAAalsB,IAAmB2M,IAC5C,MAAM,QAAEvN,GAAYkN,KAAKjR,MACrB+D,IACAuN,EAAMmgB,iBACN1tB,EAAQ8sB,EAAMlsB,EAAO2M,KAUtB,KAAAogB,QAAU,CAACb,EAAalsB,IAAmB2M,IAC9C,MAAM,aAAEqgB,GAAiB1gB,KAAKjR,MAC9BiR,KAAK+f,cAAcH,GACfc,GACAA,EAAad,EAAMlsB,EAAO2M,IAU3B,KAAAsgB,SAAW,CAACf,EAAalsB,IAAmB2M,IAC/C,MAAM,aAAEugB,GAAiB5gB,KAAKjR,MAE9BiR,KAAKigB,eAAeL,GAEhBgB,GACAA,EAAahB,EAAMlsB,EAAO2M,IAQ3B,KAAAwgB,YAAc,KAAoB,QACrC,MAAM,QAAEnB,EAAF,SAAWb,GAAa7e,KAAKjR,MAC7B8tB,EAAa,UAAA7c,KAAKjR,MAAM+tB,4BAAX,SAAiCD,WAAa7c,KAAKjR,MAAM+tB,qBAAqBD,WAAa,GACxGxG,EAAU,UAAArW,KAAKjR,MAAM+tB,4BAAX,SAAiCzG,QAAUrW,KAAKjR,MAAM+tB,qBAAqBzG,QAAU,GAC/FyI,EAA2BrF,EAAmBqF,iBAEpD,OAAOY,EAAQC,MAAMpiB,KAAI,CAACqiB,EAAMlsB,KAAS,MACrC,MAAMosB,EAAe9f,KAAKmf,YAAYS,EAAK9E,QACrCgG,EAAWlB,EAAK9E,OAAO,GAAKgE,EACjB,OAAbD,IACAiB,EAAa,GAAKgB,GAEtB,MAAMd,EAAShgB,KAAK6f,cAAcD,GAC5BmB,EAAY,OAAQnB,GAAR,IAAcE,aAAAA,EAAcE,OAAAA,IACxCgB,EAAU,QAAQttB,IAClButB,EAAyB5K,EAC1B3e,QAAQ,eAAgBmlB,GAA0B,IAClDnlB,QAAQ,gBAAiB,UAAAkoB,EAAKsB,2BAAL,SAA0B7rB,KAAOuqB,EAAKsB,oBAAoB7rB,KAAO,IAC/F,OACI/C,IAAAA,cAAAA,OAAAA,CACIO,IAAKmuB,EACLG,MAAM,SACNrG,OAAQgF,EAAaxnB,KAAK,KAC1BooB,aAAc1gB,KAAKygB,QAAQM,EAAcrtB,GACzCktB,aAAc5gB,KAAK2gB,SAASI,EAAcrtB,GAC1CZ,QAASkN,KAAKugB,MAAMQ,EAAcrtB,GAClC0tB,QAASphB,KAAKygB,QAAQM,EAAcrtB,GACpC2tB,OAAQrhB,KAAK2gB,SAASI,EAAcrtB,GACpCyG,KAAMylB,EAAKhmB,WACXiP,SAAU,EACVyY,IAAKL,EAAsB,aACfA,QASrB,KAAAM,WAAa,KAAW,UAC3B,IAAKvhB,KAAKkb,QAAQjB,UAAYja,KAAKwhB,iBAAiBvH,UAAYja,KAAKyhB,WAAWxH,QAC5E,OAGJ,MAAM,MAAE3P,EAAF,OAASoX,GAAW1hB,KAAKjR,MACzBswB,EAAuB5F,EAAmB4F,aAC1CsC,EAAwBlI,EAAmBkI,cAE3CC,EAAW,UAAG5hB,KAAK8Z,6BAAR,QAAiCuF,EAC5CwC,EAAY,UAAG7hB,KAAKma,8BAAR,QAAkCwH,EAEpD3hB,KAAKkb,QAAQjB,QAAQuB,MAAQoG,EAC7B5hB,KAAKkb,QAAQjB,QAAQqG,OAASuB,EAC9B7hB,KAAKyhB,WAAWxH,QAAQ6H,MAAMtG,MAAQ,GAAGoG,MAEzC,MAAM5tB,EAAO,UAAGgM,KAAKkb,QAAQjB,QAAQkB,WAAW,aAAnC,QAA4Cnb,KAAK6Z,SACzD7lB,IAGLA,EAAQynB,UAAYnR,MAAAA,EAAAA,EAAS,GAEzBoX,GACAA,IAGJ1hB,KAAKyf,yBApdLzf,KAAKwhB,iBAAmBlvB,IAAAA,YACxB0N,KAAKyhB,WAAanvB,IAAAA,YAClB0N,KAAKkb,QAAU5oB,IAAAA,YAMZyvB,oBACH,MAAM,SAAElD,GAAa7e,KAAKjR,MAC1BiR,KAAKuhB,aACLvhB,KAAK4Z,mBAAkC,OAAbiF,GAAkC,OAAbA,EAC/C7e,KAAK6gB,cACL7gB,KAAK6Z,SAAW,KAMbmI,qBACH,MAAM,SAAEnD,GAAa7e,KAAKjR,MAC1BiR,KAAKuhB,aACLvhB,KAAK4Z,mBAAkC,OAAbiF,GAAkC,OAAbA,EAQ5Czb,sBAAsBC,GACzB,IAAI4e,GAAe,EAInB,OAHI5e,IAAcrD,KAAKjR,QACnBkzB,GAAe,GAEZA,EAwbJ1e,SAAM,MACT,MAAM,UAAE2e,EAAF,QAAaxC,EAAb,eAAsBxgB,GAAmBc,KAAKjR,MAEpD,OACIuD,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,6BAA6B4vB,IAAKniB,KAAKyhB,YAClDnvB,IAAAA,cAACokB,EAAAA,GAAK,CACFH,IAAK2L,EAAU3L,IACf6L,OAAQ,IAAI1C,EAAQjtB,OACpB6uB,IAAK5B,EAAQjtB,KACb0vB,IAAKniB,KAAKwhB,iBACVlB,OAAQ4B,EAAU5B,OAClB9E,MAAO0G,EAAU1G,MACjBjpB,UAAU,uBACVsB,cAAequB,EAAUruB,cACzBC,aAAY,UAAEoL,EAAepL,oBAAjB,QAAiC,GAC7CoL,eAAgBA,IAEpB5M,IAAAA,cAAAA,SAAAA,CAAQ6vB,IAAKniB,KAAKkb,QAAS3oB,UAAU,4BACrCD,IAAAA,cAAAA,MAAAA,CAAKG,KAAMitB,EAAQjtB,KAAMF,UAAU,wBAC9ByN,KAAK6gB,slBC9hBnB,IAAKwB,GAAZ,SAAYA,GACRA,EAAAA,EAAAA,gBAAAA,KAAAA,kBACAA,EAAAA,SAAAA,QACAA,EAAAA,OAAAA,SAHJ,CAAYA,IAAAA,EAAoB,KAWzB,MAAMC,UAAoBhwB,EAAAA,cAiB7BiN,YAAmBxQ,GACfyQ,MAAMzQ,GAbO,KAAAwzB,yBAAmC,IAEnC,KAAAC,wBAAkC,IAElC,KAAAC,cAAyB,GAuDnC,KAAAC,gBAAkB,CAAC9C,EAAyBzwB,EAA8B2rB,EAAkBlhB,KACnF,IAAD,EAANgmB,GACD5f,KAAKyiB,cAAcnrB,KAAK,CACpBqrB,OAAQxzB,EAAQ0O,SAASlG,WACzBmjB,OAAAA,EACA7f,gBAAe,UAAE9L,EAAQ+L,uBAAV,QAA6B,GAC5CtB,WAAAA,EACAsnB,oBAAqB/xB,KAmB1B,KAAAyzB,kBAAoB,KACvB,MAAMC,GAAWC,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAAA,QAAqBhvB,QAASgM,KAAKjR,MAAMiF,QAAQkB,UACtF8K,KAAKM,SAAS,CAAE4Z,YAAala,KAAK8Z,sBAAuB+I,SAAAA,IACzD7iB,KAAK4Z,mBAAkC,OAAbiJ,GAAkC,OAAbA,GAiD5C,KAAAI,kBAAoB,KAA6B,MACpD,MAAM,OAAEnmB,EAAF,QAAU9I,GAAYgM,KAAKjR,MAG3Bm0B,EAAiBljB,KAAKjR,MAAMyL,KAAK4C,SAAS9M,OAChD,GAAIwM,EAAOqmB,cAAgBD,EACvB,IAAK,MAAM/zB,KAAW+zB,EAClB,IAAK,MAAME,KAAiBtmB,EAAOqmB,aAC/B,GAAIh0B,EAAQk0B,SAAWD,EAAcE,OAAQ,CAAC,IAAD,QACzC,MAAM1pB,GAAa2pB,EAAAA,EAAAA,uBAAqB,UAACp0B,EAAQkG,YAAT,QAAiB,GAAIlG,EAAQ0O,SAAU7J,EAAQ8F,mBAAenD,GAChGmkB,EAAS,WACXsI,EAAcI,iBADH,QARC,EAQD,UAEXJ,EAAcK,iBAFH,QARC,EAQD,UAGXL,EAAc/F,cAHH,QARC,GAaVuC,EAAO5f,KAAKyiB,cAAcnxB,MAAKoyB,GAAeC,KAAKC,UAAUF,EAAY5I,UAAY6I,KAAKC,UAAU9I,KAC1G9a,KAAK0iB,gBAAgB9C,EAAMzwB,EAAS2rB,EAAQlhB,GAK5D,MAAMiqB,EAAuB,CACzBpxB,KAAM,OAAOuN,KAAK8jB,oBAClBnE,MAAO3f,KAAKyiB,cAAcrxB,OApBA,EAoByB4O,KAAKyiB,cAAgB,IAI5E,OACInwB,EAAAA,cAACqnB,EAAW,CACRkF,SAAU7e,KAAKQ,MAAMqiB,SACrB3jB,eAAgBc,KAAKjR,MAAMiF,QAAQ8F,cAAcoF,eACjDsc,MAAOxb,KAAKQ,MAAM0Z,YAClBkF,SAAUpf,KAAKjR,MAAM+N,OAAO8kB,YAC5B9uB,QAASkN,KAAK+jB,UACd3C,QAASphB,KAAK+jB,UACdrD,aAAc1gB,KAAK+jB,UACnBnD,aAAc5gB,KAAKgkB,UACnB9B,UAAS,UAAEliB,KAAKjR,MAAM+N,OAAOmnB,mBAApB,QAAmC,GAC5CvE,QAASmE,EACT7J,gBAAiBha,KAAKkkB,iBACtBpH,qBAAsB,CAClBzG,QAASrW,KAAKjR,MAAMkF,UAAUkwB,uCAC9BtH,WAAY7c,KAAKjR,MAAMkF,UAAUmwB,sBAY1C,KAAAL,UAAY,CAACnE,EAAalsB,EAAe2M,KAC5CL,KAAKM,SAAS,CAAEsf,KAAAA,EAAMyE,aAAc,6BAChCrkB,KAAKjR,MAAM2xB,cACX1gB,KAAKjR,MAAM2xB,aAAad,EAAMlsB,EAAO2M,GAEF,UAAnCA,EAAM7N,KAAKqrB,qBAAmC7d,KAAK4Z,oBACnD1f,OAAOoqB,KAAK1E,EAAKhmB,WAAY,UAO9B,KAAAoqB,UAAY,KACXhkB,KAAK4Z,oBACL5Z,KAAKukB,cAON,KAAAA,WAAa,KAChBvkB,KAAKM,SAAS,CAAEsf,KAAM,KAAMyE,aAAc,MAOvC,KAAAG,uBAAyB,KAAsB,MAClD,aAAIxkB,KAAKQ,MAAMof,YAAf,OAAI,EAAiBsB,oBAAqB,CAAC,IAAD,IACtC,MAEMjmB,EAA0B,GAFH+E,KAAKjR,MAAMiF,QAAQkB,QAAQiK,YAAYslB,eACtD,UAAWzkB,KAAKQ,MAAMof,KAAK3kB,uBAA3B,QAA8C,KAEtD9L,EAA+B6Q,KAAKQ,MAAMof,KAAKsB,oBAGrD,OAFA/xB,EAAQ+L,gBAAkBD,EAGtB3I,EAAAA,cAAC4jB,EAAsB,CACnBliB,QAASgM,KAAKjR,MAAMiF,QACpBH,cAAemM,KAAKjR,MAAM+N,OAAO4nB,qBACjCl1B,GAAE,UAAEL,EAAQk0B,cAAV,QAAoB,GACtBtvB,SAAUiM,KAAKjR,MAAMgF,UAAY,GACjCyG,KAAM,CAAErL,QAAAA,KAIpB,OAAOmD,EAAAA,UAOJ,KAAAqyB,kBAAoB,KACvB,MAAM,KAAE/E,GAAS5f,KAAKQ,MAEtB,OACIlO,EAAAA,cAAAA,EAAAA,SAAAA,MACKstB,MAAAA,OAAA,EAAAA,EAAMI,SACH1tB,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,gCAAgC4vB,IAAKniB,KAAK4kB,oBACrDtyB,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,wCAAwCM,IAAK+sB,EAAK+C,SAC3D3iB,KAAK4Z,oBAAsBtnB,EAAAA,cAAAA,SAAAA,CAAQQ,QAASkN,KAAKukB,WAAYhyB,UAAU,iBACxEqtB,EAAKsB,qBAAuBlhB,KAAKwkB,0BAChCxkB,KAAK4Z,oBACHtnB,EAAAA,cAAAA,IAAAA,CAAG6H,KAAMylB,EAAKhmB,WAAYrH,UAAU,mBAC/ByN,KAAKjR,MAAMkF,UAAUmwB,uBAc/C,KAAAS,cAAgB,IACZvyB,EAAAA,cAAAA,EAAAA,SAAAA,MAAI0N,KAAK4Z,oBAAsBtnB,EAAAA,cAAAA,MAAAA,CAAKC,UAAWyN,KAAKQ,MAAM6jB,gBAQ9D,KAAAS,wBAA0B,KAAa,cAC1C,MAAMC,EAAuB/kB,KAAKglB,0BAC5BC,EAA4B,UAAAjlB,KAAKjR,MAAM+N,OAAO4nB,4BAAlB,SAAwC9jB,UAAxC,UAC5BZ,KAAKjR,MAAM+N,OAAO4nB,qBAAqB9jB,UAAUM,UADrB,aAC5B,EAAqDH,EADzB,UAE5BgkB,EAAqBnkB,UAAUM,UAFH,aAE5B,EAAmCH,EAGnCmkB,EAA2BD,GAAwDjlB,KAAKuiB,0BACxF,KAAE3C,EAAF,YAAQ1F,EAAR,SAAqB2I,GAAa7iB,KAAKQ,MACvCyc,EAAc,UAAG2C,MAAAA,GAAH,UAAGA,EAAMI,cAAT,aAAG,EAAe,UAAlB,QAAwB9F,EAHhB,EAItBiL,EAAqBlI,EAAiBiI,EAAmBA,EAJnC,EAM5B,IAAIE,GAAoBlL,EAAcgL,GANV,EAc5B,MAPiB,OAAbrC,GAAkC,OAAbA,GAAkC,OAAbA,IAEtCuC,EADAD,EATyB,EAMLlI,EAAiBiI,EALjB,EAWTC,GAGZC,GAQJ,KAAAC,wBAA0B,KAAa,UAC1C,MAAMN,EAAuB/kB,KAAKglB,0BAC5BM,EAA6B,UAAAtlB,KAAKjR,MAAM+N,OAAO4nB,4BAAlB,SAAwC9jB,UAAxC,UAC7BZ,KAAKjR,MAAM+N,OAAO4nB,qBAAqB9jB,UAAUM,UADpB,aAC7B,EAAqDF,EADxB,UAE7B+jB,EAAqBnkB,UAAUM,UAFF,aAE7B,EAAmCF,GAEnC,KAAE4e,EAAF,SAAQiD,GAAa7iB,KAAKQ,MAC1B+kB,EAA0BD,GAA0DtlB,KAAKwiB,wBAE/F,IAAI4C,GADoBplB,KAAKma,uBAAyBoL,GAH1B,EAKsC,IAAD,IAAhD,OAAb1C,GAAkC,OAAbA,GAAkC,OAAbA,IAC1CuC,GAAW,UAACxF,MAAAA,GAAD,UAACA,EAAMI,cAAP,aAAC,EAAe,UAAhB,QAAsBhgB,KAAKma,uBANd,GAMsDoL,EANtD,GAQ5B,OAAOH,GAOJ,KAAAJ,wBAA0B,KACyB,CAClDpkB,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,IAAKC,EAAG,KACvCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,IAAKC,EAAG,KACvCwkB,GAAI,CAAE1kB,EAAG,kBAAmBC,EAAG,IAAKC,EAAG,MAE3CG,UAAU,IAUX,KAAAskB,QAAWplB,IACd,GAAIA,EAAMxN,MAAQwvB,EAAqBqD,SAAU,CAC7C,MAAMC,EAAsBtlB,EAAMslB,OAClC,GAAwB,SAApBA,EAAOC,SAAqB,CAC5B,MAAMhG,EAAwB+F,EAC1B/F,EAAKzlB,MACLD,OAAOoqB,KAAK1E,EAAKzlB,KAAM,UAI/BkG,EAAMxN,MAAQwvB,EAAqBwD,QACnC7lB,KAAKukB,cAQN,KAAAzK,oBAAsB,KAEzB,GAAI/f,EAAAA,GAAAA,UAAqC,CACrC,MAAMggB,EAA4B/Z,KAAKkkB,iBACvC,GAA0C,OAAtCnK,EAA0BE,QAC1B,OAAOF,EAA0BE,QAAQC,YAGjD,OAP6B,GAc1B,KAAAC,qBAAuB,KAE1B,GAAIpgB,EAAAA,GAAAA,UAAqC,CACrC,MAAMggB,EAA4B/Z,KAAKkkB,iBACvC,GAA0C,OAAtCnK,EAA0BE,QAC1B,OAAOF,EAA0BE,QAAQG,aAGjD,OAP8B,GAyB3B,KAAA0L,iBAAoBzlB,IACvBL,KAAKjR,MAAM+N,OAAO+a,QAASG,KAAO3X,EAAMslB,OAAOhzB,OAO5C,KAAAozB,sBAAyB1lB,IAC5BL,KAAKjR,MAAM+N,OAAOkpB,UAAY3lB,EAAMslB,OAAOhzB,OAuCxC,KAAAszB,8BAAgC,KACnC,MAAM,MAAEzN,GAAUxY,KAAKjR,MAAM+N,OACvB8F,GAAUhK,EAAAA,EAAAA,kBAAiB,QAASoH,KAAKkmB,kBAAmB,IAElE,OAAO1N,MAAAA,OAAP,EAAOA,EAAOjb,KAAI,CAAC4oB,EAAiCzyB,KAChDkP,EAAQiC,cAAcC,MAAQqhB,EAASvN,SACvC,MAAM7f,GAAaC,EAAAA,EAAAA,wBAAuBgH,KAAKkmB,kBAAmBtjB,GAC5DwjB,EAAS1yB,EACTilB,EAAoC,CACtCpD,UAAW4Q,EAAS5Q,UACpBhjB,UAAW,uCACXqmB,SAAUuN,EAASvN,SACnBC,QAASsN,EAAStN,QAAQC,eAC1BC,aAAcoN,EAASE,iBACvBvd,KAAM,SACNwd,qBAAsBvtB,GAG1B,OACIzG,EAAAA,cAACyH,EAAAA,GAAa,CACVlH,IAAKuzB,EACLnN,KAAMN,EACNV,UAAW,CAKPiB,aAAc7Y,IACVL,KAAKumB,qBAAqB7yB,EAAO2M,IAErCnB,eAAgBc,KAAKjR,MAAMiF,QAAQkB,eAWhD,KAAAsxB,gCAAkC,KAAkC,MACvE,MAAM,QAAE3O,GAAY7X,KAAKjR,MAAM+N,OAE/B,OACI+a,GACIvlB,EAAAA,cAACyH,EAAAA,GAAa,CACVxH,UAAU,mCACV6X,IAAG,UAAEyN,EAAQzN,WAAV,QAAiB,KACpB4N,KAAMH,EAAQG,KACdC,UAAW,CAAEC,OAAQlY,KAAK8lB,iBAAkB5mB,eAAgBc,KAAKjR,MAAMiF,QAAQkB,YAUxF,KAAAuxB,kCAAoC,KACvC,MAAM,UAAET,GAAchmB,KAAKjR,MAAM+N,OAEjC,OACIkpB,GACI1zB,EAAAA,cAACyH,EAAAA,GAA0B,CACvBie,KAAMgO,EACNzzB,UAAU,kCACV0lB,UAAW,CAAEC,OAAQlY,KAAK+lB,sBAAuB7mB,eAAgBc,KAAKjR,MAAMiF,QAAQkB,YAU7F,KAAAwxB,iBAAmB,KACtB,MAAM,YAAEzC,GAAgBjkB,KAAKjR,MAAM+N,OACnC,IAAI6pB,EAAwB,GAC5B,GAAI1C,MAAAA,GAAAA,EAAa1N,IAAK,CAAC,IAAD,EAClB,MAAMqQ,EAAoB3C,EAAY1N,IAAIsQ,MAAM,KAC1CC,EAAuB,EAE7BH,EAAa,UADaC,EAAkBA,EAAkBx1B,OAAS01B,GAAcD,MAAM,KACzD,UAArB,QAA2B,GAE5C,OAAOF,GAOM,KAAAI,oBAAuB1mB,IAAqB,MACzD,UAAIL,KAAK4kB,mBAAmB3K,eAA5B,OAAI,EAAiC+M,SAAS3mB,EAAMslB,SAGpD3lB,KAAKukB,cA1hBLvkB,KAAKkmB,mBAAoBzjB,EAAAA,EAAAA,oBACrBzC,KAAKjR,MAAMiF,QAAQkB,QAAQwN,kBAC3B1C,KAAKjR,MAAM4T,aACX3C,KAAKjR,MAAMgP,WAEf,MAAM8kB,GAAWC,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAAA,QAAqBhvB,QAASgM,KAAKjR,MAAMiF,QAAQkB,UACtF8K,KAAK8jB,kBAAoB,oBAAoB9jB,KAAK0mB,qBAClD1mB,KAAKQ,MAAQ,CACT0Z,YAAa,EACb0F,KAAM,KACNiD,SAAAA,EACAwB,aAAc,IAElBrkB,KAAK4Z,mBAAkC,OAAbiJ,GAAkC,OAAbA,EAC/C7iB,KAAKkkB,iBAAmB5xB,EAAAA,YACxB0N,KAAK4kB,mBAAqBtyB,EAAAA,YAGvByvB,oBAUH,GATIhoB,EAAAA,GAAAA,YACAG,OAAO+sB,iBAAiB,SAAUjnB,KAAK4iB,mBACvClH,SAASuL,iBAAiB,UAAWjnB,KAAKylB,SAAS,GACnD/J,SAASuL,iBAAiB,YAAajnB,KAAK+mB,sBAEhDG,YAAW,KACPlnB,KAAK4iB,sBACNP,EAAqB8E,iBAEpBptB,EAAAA,GAAAA,WAAuCiG,KAAKkkB,iBAAiBjK,QAAS,CACtE,MAAMmN,EAAoCpnB,KAAKkkB,iBAAiBjK,QAAQoN,uBACpE,4CAEArwB,EAAAA,gBAAAA,YAA4BswB,MAAMC,KAAKH,KACvCA,EAAO,GAAGI,gBAAgB,WA2B/BrkB,uBACCpJ,EAAAA,GAAAA,YACAG,OAAOutB,oBAAoB,SAAUznB,KAAK4iB,mBAC1ClH,SAAS+L,oBAAoB,UAAYznB,KAAKylB,SAAsC,GACpF/J,SAAS+L,oBAAoB,YAAaznB,KAAK+mB,qBAAqB,IAiBrExjB,SACH,MAAM8B,EAAS,OACPrF,KAAKjR,OADE,IAEX24B,qBAAsB,CAClBC,YAAa3nB,KAAKjR,MAClBwD,UAAWkK,GAAAA,CAAW,mBAAoBuD,KAAK8jB,kBAAmB9jB,KAAKjR,MAAM+N,OAAOvK,YAExFq1B,4BAA6B,CACzBxd,IAAK,MACL7X,UAAWkK,GAAAA,CAAW,2BAA4BuD,KAAK8jB,kBAAmB9jB,KAAKjR,MAAM+N,OAAOvK,WAC5F4vB,IAAKniB,KAAKkkB,kBAEd9E,SAAUpf,KAAKjR,MAAM+N,OAAO8kB,YAC5BiG,YAAa7nB,KAAKijB,oBAClB6E,QAAS9nB,KAAK6kB,gBACdkD,YAAa/nB,KAAK2kB,oBAClBqD,wBAAyBhoB,KAAK8kB,0BAC9BmD,uBAAwBjoB,KAAKqlB,0BAC7BvpB,MAAOkE,KAAKwmB,kCACZxO,KAAMhY,KAAKymB,oCACXjO,MAAOxY,KAAKimB,gCACZiC,iBAAkB,CAAE31B,UAAW,6BAC/B41B,oBAAqB,CAAE51B,UAAW,kCAClCinB,kBAAmBD,EAA6B,CAC5Cra,eAAgBc,KAAKjR,MAAMiF,QAAQkB,QACnCskB,kBAAmBxZ,KAAKjR,MAAM+N,OAAO0c,kBACrCrB,2BAA4BnY,KAAKmY,2BACjCiQ,gCAAiCpoB,KAAKooB,gCACtCjP,+BAAgCnZ,KAAKmZ,iCAEzCkP,qBAAsBroB,KAAKmY,2BAC3BmQ,0BAA2BtoB,KAAKooB,gCAChCG,yBAA0BvoB,KAAKmY,6BAGnC,OAAOnY,KAAKjR,MAAMgZ,WAAW1C,GA0Q1BkhB,qBAAqB7N,EAAmBrY,GACvCL,KAAKjR,MAAM+N,OAAO0b,OAASxY,KAAKjR,MAAM+N,OAAO0b,MAAMiC,OAAO/B,MAC1D1Y,KAAKjR,MAAM+N,OAAO0b,MAAMiC,OAAO/B,IAAYE,SAAWvY,EAAMslB,OAAOhzB,OAwBpEwlB,2BAA2B9X,GAC1BL,KAAKjR,MAAM+N,OAAO0c,oBAClBxZ,KAAKjR,MAAM+N,OAAO0c,kBAAkB3B,QAAUxX,EAAMslB,OAAOhzB,OAS5DwmB,+BAA+BT,EAAmBrY,GAAoC,MACzF,MAAMmZ,EAAiB,UAAGxZ,KAAKjR,MAAM+N,OAAO0c,yBAArB,QAA0C,GAC7DA,EAAkBhB,QAClBgB,EAAkBhB,MAAMiC,OAAO/B,IAAYE,SAAWvY,EAAMslB,OAAOhzB,OAQpEy1B,gCAAgC/nB,GAC/BL,KAAKjR,MAAM+N,OAAO0c,oBAClBxZ,KAAKjR,MAAM+N,OAAO0c,kBAAkBnB,QAAUhY,EAAMslB,OAAOhzB,QA6GvE,qGCloBA,MAiBa61B,EAAmDz5B,IAC5D,OACIuD,EAAAA,cAACm2B,EAAAA,OAAM5sB,OAAAA,OAAAA,GAAK9M,EAAM24B,sBACdp1B,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAK9M,EAAM64B,6BACX74B,EAAM84B,YACPv1B,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAK9M,EAAMm5B,iBAAgB,CAAE31B,UAAWxD,EAAMm5B,iBAAmBn5B,EAAMm5B,iBAAiB31B,UAAY,KACpGxD,EAAM+M,MACN/M,EAAMipB,KACNjpB,EAAMyqB,oBAzBMA,EAyBuCzqB,EAAMyqB,kBAvBtElnB,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAK2d,EAAkB5B,uBACvB4B,EAAkB3B,QACnBvlB,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAK2d,EAAkBH,4BACvBG,EAAkBxB,KACnB1lB,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAK2d,EAAkBF,4BAA6BE,EAAkBhB,UAoBvElmB,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAK9M,EAAMo5B,oBAAmB,CAAE51B,UAAWxD,EAAMo5B,oBAAsBp5B,EAAMo5B,oBAAoB51B,UAAY,KAC7GxD,EAAMypB,SAInBlmB,EAAAA,cAACkgB,EAAAA,KAAI,CACDjgB,UAAU,0CACVuvB,MAAO,CAAE4G,IAAK,GAAG35B,EAAMk5B,2BAA4BU,KAAM,GAAG55B,EAAMi5B,8BAEjEj5B,EAAM+4B,QACN/4B,EAAMg5B,cApCUvO,IAAAA,GA0CjC,4OC7BO,MAAMoP,EAGTrpB,YAAmBJ,GAQZ,KAAA0pB,YAAc,KAAcC,EAAAA,EAAAA,eAAc,mCAAoC9oB,KAAKb,aAMnF,KAAA4pB,mBAAqB,IAAc,mCAMnC,KAAAC,cAAgB,IAAiB,OAnBpChpB,KAAKb,YAAcA,GAqCpBrP,eAAem5B,EAClB1nB,EACAvN,GAGA,IAAKuN,EAAMpC,YAAYW,UACnB,MAAM,IAAIopB,MAAM,0EAEpB,MACM5nB,SADkB6nB,EAAAA,EAAAA,cAAan1B,IACdsN,KACjBlE,QAAiBmF,EAAAA,EAAAA,6BAA4B,IAAIC,EAAAA,wBAA2BxO,GAE5Eo1B,EAAqC,GAG3C,QAAazyB,IAAT2K,IAAuBtK,EAAAA,gBAAAA,YAA4BoG,GACnD,OAAOzM,QAAQC,QAAQw4B,GAa3B,aAV4BC,EAAAA,oBAAAA,wBACxB,CACIC,cAAet1B,EACfu1B,oBAAqBC,EAAAA,yBAAAA,qCAA8Dx1B,IAEvFoJ,EAASG,KAAIpO,GAAWA,EAAQ0O,WAChC,GAdiB,IAyBiC4rB,EAAAA,EAAAA,IAA2B,CACjFj6B,GAAI,6EACJk6B,OAAQT,EACR1nB,MAjDiBooB,GACV,IAAIf,EAAqCe,EAAUzqB,eAAeC,8CCnD7E,MA0DarB,EAAsB/O,IAC/B,MAAM,SAAEqO,EAAF,UAAYH,EAAZ,eAAuByH,GAAmB3V,EAChD,OAAO2V,EAtB4B,EACnChG,EACAtB,EACArO,KAEA,MAAMoO,EAAsC,GAC5C,GAAIuB,GAAaA,EAAUtN,OAAS,EAAG,CAEnC,MAAMuN,GAAmB3B,EAAAA,EAAAA,GAAkB0B,EAAWtB,EAAUrO,GACvC,OAArB4P,GACAxB,EAAW7F,KAAKqH,GAGxB,OAAOxB,GAUDysB,CAA+B3sB,EAAWG,EAAUrO,GA7D9B,EAC5BkO,EACAG,EACArO,KAEA,MAAMoO,EAAsC,GAC5C,IAAKC,GAAgC,IAApBA,EAAShM,OAEtB,OADArC,EAAMiF,QAAQ+J,UAAUrN,MAAM,iDACvB,KAGX,MAAMsN,EAAyBC,GAAsBC,GAAAA,CAAQD,GAAOE,GAAQA,EAAKxO,qBAE3EyO,GADsBH,EACahB,EADSiB,GAAAA,CAAQD,GAAOE,GAAQA,EAAKrN,gBAAlDmN,IAAAA,EAE5B,MAAMI,EAA6B,GAqBnC,OAlBAxC,OAAOyC,QAAQF,GAAejG,SAAQ,IAAwC,IAAtCoG,EAAcC,GAAwB,EAE1EJ,EAAcG,GAAgBP,EAAsBQ,GACpDH,EAAe/G,KAAK0G,EAAsBQ,OAI9C3C,OAAO4C,KAAKJ,GAAgBlG,SAAQtF,IAChC,MAAM6L,EAAYL,EAAexL,GACjCgJ,OAAO4C,KAAKC,GAAWvG,SAAQzE,IAC3B,MAAM3B,EAAW2M,EAAUhL,GACrBiL,GAAmB3B,EAAAA,EAAAA,GAAkBjL,EAAUqL,EAAUrO,GACtC,OAArB4P,GACAxB,EAAW7F,KAAKqH,SAKrBxB,GA2BDyB,CAAwB3B,EAAWG,EAAUrO,kBCpDhDe,eAAe+O,EAAiBC,GACnC,MAAMC,EAAgC,GAatC,aAXMC,EAAAA,EAAAA,qCAAoC,IAAIC,EAAAA,iCAAiCH,EAAII,eAAeC,aAAcL,GAC3GzO,MAAK+O,IACEA,IACAL,EAAcK,iBAAmBA,MAGxC3O,OAAMC,IACHoO,EAAIf,UAAUsB,UAAU3O,GACjB,MAGRqO,ukBCqFX,IAAMO,EAAN,cAAmBhN,IAAAA,UAafiN,YAAmBxQ,GACfyQ,MAAMzQ,GAPF,KAAA+G,gCAA0C,EAE1C,KAAA2J,YAAsB,EAEb,KAAAC,iBAA2B,uBA0P3B,KAAAU,mBAAsBC,IACnCL,KAAKM,SAAS,CACVC,qBAAsBP,KAAKQ,MAAMD,uBAOxB,KAAAE,0BAA4B,KACzCT,KAAKU,wBA+dQ,KAAAC,iBAAoB9M,GAE7BA,GAAiB,CACb+M,UAAW,CACPC,GAAI,CAAEC,EAAG,gBAAiBC,EAAG,EAAGC,EAAG,GACnCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCG,UAAU,GASL,KAAAC,0BAA6BC,IAC1C,GAAIrB,KAAKjR,MAAMyL,KAAK8G,KAAKhR,OAAQ,CAC7B,MAAMiR,EAAQ,CACVC,YAAa,CAACH,EAAiBlR,OAAQwH,aAE3CqI,KAAKjR,MAAMyL,KAAK8G,KAAKhR,OAChBmR,gBAAgBF,GAChBlR,MAAK,KACF2P,KAAK0B,eAAejR,OAAMC,IACtBsP,KAAKjR,MAAMgP,UAAU4D,QAAQjR,GAC7BsP,KAAKjR,MAAMgP,UAAU6D,MAAM,iCAGlCnR,OAAMC,IACHsP,KAAKjR,MAAMgP,UAAU4D,QAAQjR,GAC7BsP,KAAKjR,MAAMgP,UAAU6D,MAAM,mCAU1B,KAAAxN,6BAA+B,CAAC9D,EAAsClB,KAC7D,UAAlBkB,EAAOC,QAAsBnB,GAC7B4Q,KAAKoB,0BAA0BhS,IAWtB,KAAAyS,uBAAyB,CAACC,EAA4BpF,EAAkB7B,MACrFkH,EAAAA,EAAAA,IACI/B,KAAKlK,+BACLkK,KAAKjR,MAAMyL,KAAK8G,KAAKhR,OACrB0P,KAAKjR,MAAMgP,UACXiC,KAAKjR,MAAMyL,KAAK4C,SAAS9M,OACzBwR,EACApF,GAECrM,MAAM2R,IACH,GAAiC,aAA7BA,MAAAA,OAAA,EAAAA,EAAkBzR,QAMlB,OALAyP,KAAK0B,eAAejR,OAAMC,IACtBsP,KAAKjR,MAAMgP,UAAU4D,QAASjR,EAAgBuR,SAC9CjC,KAAKjR,MAAMgP,UAAU6D,MAAM,+BAGxB,EAGX,IAAKlL,EAAAA,iBAAAA,kBAAmCsL,GAAmB,CAAC,IAAD,EAEvD,MAAME,EAA0C,CAC5C/R,OAAQuG,EAAAA,iBAAAA,kBAAmCoL,EAAiB3R,QAAU,IAAM2R,EAAiB3R,OAC7F+H,mBAAoB,CAChB,CACIG,aAAcrB,EAAAA,gBAAAA,YAA4BgL,EAAiBG,mBACrDH,EAAiBG,kBAAkB,GAAG9J,aACtC,GACN+J,iBAAgB,UAAEJ,EAAiBK,oBAAnB,aAAE,EAA+BD,oBAK7DpC,KAAKM,SAAS,CACVzI,gBAAiB,CAAEC,uBAAwB,CAACoK,MAIpD,OAAO,KAEVzR,OAAM,KACI,KAGR,GAMM,KAAA6R,0BAA4B,KACrCtC,KAAKlK,iCAELyM,EAAAA,EAAAA,6BAA4B,IAAIC,EAAAA,wBAA2BxC,KAAKjR,MAAMiF,QAAQ8F,eACzEzJ,MAAKP,SAAYkQ,KAAK0B,iBACtBjR,OAAOC,IACJsP,KAAKjR,MAAMgP,UAAU4D,QAAQjR,EAAMuR,SACnCjC,KAAKjR,MAAMgP,UAAU6D,MAAM,+BA/0BvC5B,KAAKlH,kBAAmB2J,EAAAA,EAAAA,oBACpBzC,KAAKjR,MAAMiF,QAAQkB,QAAQwN,kBAC3B1C,KAAKjR,MAAM4T,aACX3C,KAAKjR,MAAMgP,WAEfiC,KAAK4C,SAAUhK,EAAAA,EAAAA,kBAAiB,QAASoH,KAAKlH,iBAAkB,IAChEkH,KAAKI,mBAAqBJ,KAAKI,mBAAmByC,KAAK7C,MACvDA,KAAKS,0BAA4BT,KAAKS,0BAA0BoC,KAAK7C,MAErEA,KAAKQ,MAAQ,CACTD,qBAAqB,EACrBxB,cAAe,GACf+D,aAAa,EACb+mB,0BAAsBlzB,EACtBkB,gBAAiB,IAOK,0BAC1BmI,KAAKP,YAAa,EAClB,MAAM,OACF3C,EACA9I,SAAS,cAAE8F,IACXkG,KAAKjR,MAQ4B,IAAD,GANpCiR,KAAKlK,qCACMkK,KAAK+C,2CAA+C/C,KAAK8pB,iCAChE9pB,KAAKlK,sCACCkK,KAAK0B,eAGX5E,EAAOkG,2BACHhD,KAAKP,YAAL,UAAmBO,KAAKjR,MAAMyL,KAAK8G,KAAKhR,cAAxC,OAAmB,EAA6BgR,KAAK2B,WACrDjD,KAAKM,SAAS,CAAEvB,oBAAqBF,EAAiB/E,MAG1DoJ,EAAAA,EAAAA,KACI,4BAAMlD,KAAKjR,MAAMyL,KAAK8G,KAAKhR,cAA3B,aAAM,EAA6BgR,KAAK2B,aACxCnT,UACQkQ,KAAKP,YACLO,KAAKM,SAAS,CAAEvB,oBAAqBF,EAAiB/E,UAKtEoJ,EAAAA,EAAAA,KACI,4BAAMlD,KAAKjR,MAAMyL,KAAK8G,KAAKhR,cAA3B,aAAM,EAA6BgR,KAAK2B,aACxCnT,UACI,GAAIkQ,KAAKP,WAAY,CACjB,MAAM8B,EAAQ,IAAIqnB,EAAAA,qCAAqC9uB,EAAcoF,eAAeC,aACpFa,KAAKM,SAAS,CAAEupB,2BAA4BZ,EAAiC1nB,EAAOzH,SAS7FqJ,uBACHnD,KAAKP,YAAa,EASf2D,sBAAsBC,EAAkCC,GAC3D,OAAItD,KAAKQ,QAAU8C,GAAatD,KAAKjR,MAAMyL,OAAS6I,EAAU7I,KAO3D+I,SAAM,gBACT,MACI/I,MACI8G,MAAQhR,OAAQgR,GAChBlE,UAAY9M,OAAQ8M,IAExBpJ,SACIkB,SACIC,MAAM,gBAAEF,EAAF,UAAmBuO,KAP/B,UAUFvP,GACA+L,KAAKjR,MAEH0U,GAAmBC,EAAAA,EAAAA,IAAW,WAAY1D,KAAKjR,MAAMiF,QAAQ8F,gBAAkB,GAC/E6J,GAAoBD,EAAAA,EAAAA,IAAW,OAAQ1D,KAAKjR,MAAMiF,QAAQ8F,gBAAkB,GAC5E8J,EAAc5D,KAAK6D,eAAe5O,EAAiBwO,EAAkBD,GAAa,IAClFM,EAAcxC,GAAQA,EAAKA,KAAK2B,WAA4C,IAA/B3B,EAAKA,KAAK2B,UAAU7R,OACjEsN,EAAYsB,KAAK+D,gBACjBC,EAAqB,UAAGhE,KAAKjR,MAAMiF,QAAQkB,QAAQ+O,eAA9B,aAAG,EAAoCC,sBAC5DC,GAAgCC,EAAAA,EAAAA,4BAA0B,UAC5D9C,MAAAA,OAD4D,EAC5DA,EAAMA,KAAK2B,iBADiD,QACpC,GADoC,UAE5DjD,KAAKjR,MAAMyL,KAAKzD,qBAAqBzG,cAFuB,QAEb,GAC/C0P,KAAKjR,MAAMiF,QAAQ8F,cACnBsD,MAAAA,EAAAA,EAAY,GACZ4G,GAGEtJ,IACDyJ,MAAAA,GAAAA,EAA+BE,WAC9BF,IAAkCnE,KAAKQ,MAAMsC,eAC9CpE,GAAYA,EAAU4F,MAAKlV,GAAYA,EAASsL,WAC/C6J,EAAgC,UAAGvE,KAAKjR,MAAMyL,KAAKgK,aAAalU,cAAhC,aAAG,EAAqCgB,MAC1EkT,GAAsC,oEAAtBA,EAAanP,OAE3BoP,EAAwBF,MAAAA,OAAH,EAAGA,EAAkCI,WAE1D,aAAEH,GAAiBxE,KAAKjR,MAAMyL,KAC9BuvB,GACF,UAAAvlB,EAAalU,cAAb,mBAAqBgB,MAAM6M,GAHQ,2DAGeA,EAAK9I,cAAvD,eAAiGsP,aAAa,EAC5GqlB,GAAmBC,EAAAA,EAAAA,IAAajqB,KAAKjR,MAAMiF,QAAQkB,UACzDg1B,EAAAA,EAAAA,mBAAkBF,GAClB,MAAM3rB,EAAiBiD,MAAAA,GAAAA,EAAMoD,gBAAkBD,EAAwBzE,KAAK4E,oBAAsB,KAClG5E,KAAK4C,QAAQiC,cAAcC,MAAQC,EAAAA,kBAAAA,SACnC,MAAMC,GAA6BhM,EAAAA,EAAAA,wBAAuBgH,KAAKlH,iBAAkBkH,KAAK4C,SACtF5C,KAAK4C,QAAQiC,cAAcC,MAAQC,EAAAA,kBAAAA,cACnC,MAAME,GAA4BjM,EAAAA,EAAAA,wBAAuBgH,KAAKlH,iBAAkBkH,KAAK4C,SACrF5C,KAAK4C,QAAQiC,cAAcC,MAAQC,EAAAA,kBAAAA,eACnC,MAAMG,GAA2BlM,EAAAA,EAAAA,wBAAuBgH,KAAKlH,iBAAkBkH,KAAK4C,SAGpF,GAAIuB,IAAkCA,EAA8BE,QAAS,CACzE,GAAII,GAA4C,OAAnBpG,EACzB,IAAK,MAAM8G,KAAiB9G,EACxB2B,KAAKoF,wCAAwCD,EAAehB,GAIpEnE,KAAKoF,wCAAwC1G,EAAWyF,GAG5D,MAAMkB,EAAS,OACRrF,KAAKjR,OADG,IAEXwD,UAAWkK,GAAAA,CAAW,WACtBX,MAAOxJ,IAAAA,cAAAA,KAAAA,CAAIC,UAAU,qBAAqB0B,EAAUqR,WACpDhE,KAAMtB,KAAKjR,MAAMyL,KAAK8G,KAAKhR,OAC3BiV,iBAAkB,CAAEhT,UAAW,uBAC/BiT,oBAAqB,CAAEjT,UAAW+O,MAAAA,GAAAA,EAAMoD,eAAiB,8BAAgC,6BACzFe,kBAAmB,CAAElT,UAAW+O,MAAAA,GAAAA,EAAMoD,eAAiB,6BAA+B,4BACtFzH,UAAWyB,EACXL,eAAAA,EACAqH,UAAW1F,KAAK2F,gBAChBvG,iBAAkBY,KAAK4F,iBACvB5R,QAASgM,KAAKjR,MAAMiF,QACpBD,SAAUiM,KAAKjR,MAAMgF,SACrBgK,UAAWiC,KAAKjR,MAAMgP,UACtBvO,GAAIwQ,KAAKjR,MAAMS,GACfiV,sBAAAA,EACAoB,2BAA4B5R,EAAU4R,2BACtCC,oBAAqB9O,EAAAA,gBAAAA,YAA4BsK,MAAAA,OAA5B,EAA4BA,EAAMA,KAAK2B,WACxD3B,MAAAA,GAAAA,EAAMoD,eACFpS,IAAAA,cAAAA,KAAAA,CAAIC,UAAU,gCAAgC0B,EAAU8R,qBAExDzT,IAAAA,cAAAA,KAAAA,CAAIC,UAAU,8BAA8B0B,EAAU+R,mBAE1D,KACJC,sBAAuBjG,KAAKkG,4BAC5BC,wBAAyBnG,KAAKoG,8BAC9BC,2BAA6BvC,EAUzB,KATAxR,IAAAA,cAACsJ,EAAAA,OAAMC,OAAAA,OAAAA,CACHyK,SAAU5L,EACVnI,UAAU,yBACV4H,KAAMyJ,EACN9H,MAAO7H,EAAUsS,qBACbvB,GAEH/Q,EAAUsS,qBAGnBC,sBACK1C,GAAgB7O,IAAmB+K,KAAKjR,MAAM+N,OAAOqtB,wBAUlD,KATA73B,IAAAA,cAACsJ,EAAAA,OAAMC,OAAAA,OAAAA,CACHyK,SAAU5L,EACVnI,UAAU,8BACV4H,KAAMsJ,EACN3H,MAAO7H,EAAUwS,0BACbxB,GAEHhR,EAAUwS,0BAGvB2jB,sBAAwBtmB,EAAgD,KAAlC9D,KAAKjR,MAAMuY,MAAM+iB,eACvDC,8BAA+B,CAAE/3B,UAAW,8CAC5CmU,qBACIpU,IAAAA,cAACsJ,EAAAA,OAAMC,OAAAA,OAAAA,CACHtJ,UAAU,gCACN2S,EAAwB,CAC5B/K,KAAMwJ,EACN7H,MAAO7H,EAAU0S,4BAEhB1S,EAAU0S,2BAGnBC,6BACI5G,KAAK6G,6BAA+BzJ,EAChC9K,IAAAA,cAACwU,EAAAA,iCAAgC,CAC7BvS,kCAAmCyL,KAAK+G,2CAA2C9S,GACnFO,mCAAoCwL,KAAKgH,0CAA0C/S,GACnFgT,yCAA0CjH,KAAKkH,kDAAkDjT,GACjGS,uDAAwDsL,KAAKoO,gEACzDna,GAEJkT,kCAAmClT,EAAUkT,kCAC7CC,yCAA0CnT,EAAUmT,yCACpDpT,QAASgM,KAAKjR,MAAMiF,QACpBxE,GAAIwQ,KAAKjR,MAAMS,GACfuE,SAAUiM,KAAKjR,MAAMgF,SACrBw2B,oCAAqCR,IAAoC,EACzES,UAAWR,EACXxvB,KAAM,CACF3F,eAAgBmL,KAAKjR,MAAMyL,KAAK3F,eAAevE,OAC/CoO,UAAWsB,KAAKjR,MAAMyL,KAAK8G,KAAKhR,OAAQgR,KAAK2B,UAC7CnO,oBAAqBkL,KAAKjR,MAAMyL,KAAK1F,oBAAoBxE,UAGjE,KACRm6B,qCAAsC,KACtCpjB,cACIrH,KAAKjR,MAAMuY,MAAMD,eAAiBrH,KAAKjR,MAAMuY,MAAMD,cAAcjW,OAAS,EAAI4O,KAAKjR,MAAMuY,MAAMD,cAAc,GAAK,KACtHlT,uBAAwB6L,KAAKoB,0BAC7BhN,6BAA8B4L,KAAK5L,6BACnCmT,iBAAkBjV,IAAAA,cAACkV,EAAAA,QAAO,CAACjV,UAAU,wCACrCkV,kBAAmD,WAAhCzH,KAAKjR,MAAMyL,KAAK8G,KAAK/Q,OAAsByP,KAAKjR,MAAMkF,UAAUyT,wBAA0B,KAC7GC,eAAgB3H,KAAKjR,MAAMyL,KAAK8G,KAAKhR,QAAU0P,KAAKjR,MAAMyL,KAAK8G,KAAKhR,OAAOsX,QAC3EC,mBAAoB7H,KAAK8H,uBAAuBpJ,GAChD5F,iBAAkBkH,KAAKlH,mBAG3B,OAAOkH,KAAKjR,MAAMgZ,WAAW1C,GAwBzB3E,uBACJV,KAAKM,SAAS,CACVC,qBAAqB,IAQrBsG,4BAAyB,QAC7B,MAAMvF,EAAI,UAAGtB,KAAKjR,MAAMyL,KAAK8G,YAAnB,aAAG,EAAsBhR,OACnC,OAAIoG,EAAAA,iBAAAA,kBAAmC4K,KAASA,EAAKoD,oBAKjDgmB,EAAAA,EAAAA,IAAiB1qB,KAAKjR,MAAMiF,QAAQ8F,cAAcoF,iBAClDc,KAAKjR,MAAMyL,KAAK3F,eAAevE,QAC/B0G,EAAAA,gBAAAA,YAAA,UAA4BsK,EAAKA,YAAjC,aAA4B,EAAW2B,YACvCjD,KAAKjR,MAAMyL,KAAK1F,oBAAoBxE,QAYpCsV,iBACJ,OACI5F,KAAKjR,MAAM+N,OAAOkG,0BAClByG,EAAAA,EAAAA,GAAe,CACXja,GAAIwQ,KAAKN,iBACTwI,mBAAoBlI,KAAKQ,MAAMD,oBAC/BgI,cAAevI,KAAKI,mBACpBkI,mBAAoBtI,KAAKS,0BACzB0H,WAAYnI,KAAKQ,MAAMzB,cAAcK,iBACrCnL,UAAW,CACP0U,uBAAwB3I,KAAKjR,MAAMkF,UAAU0U,uBAC7CP,kBAAmBpI,KAAKjR,MAAMkF,UAAUmU,kBACxCC,sBAAuBrI,KAAKjR,MAAMkF,UAAUoU,sBAC5CqB,8BAA+B1J,KAAKjR,MAAMkF,UAAUyV,iCAW5DtE,wCACJ1G,EACAiL,GAEA,MAAM,UAAE1V,GAAc+L,KAAKjR,MAE3B,GACIiI,EAAAA,gBAAAA,YAA4B0H,KAC3BiL,EAAkCtF,SACnCrN,EAAAA,gBAAAA,YAA4B2S,EAAkCC,qBAE9D,IAAK,MAAMC,KAAsBF,EAAkCC,oBAAqB,CACpF,MAAM7X,EAAW2M,MAAAA,OAAH,EAAGA,EAAWpN,MAAKwY,IAAO,aAAI,UAAAA,EAAQtP,YAAR,eAAcpL,SAAS8H,aAAc2S,KAC7E9X,IACAA,EAASrB,MAAQuD,EAAU8V,uBAC3BhY,EAAS2I,UAAW,IAW5BoN,uBAAuBpJ,GAC3B,MAAMsL,EACDtL,GACGA,EACKnB,KAAInO,IAAW,QAIZ,MAFsB,UAAAA,EAASoL,YAAT,mBAAerL,eAAf,eAAwBmH,iBAAkBC,EAAAA,oBAAAA,UAE1CnH,EAASsB,MAAO,CAAC,IAAD,EAClC,MAAMuZ,EACF7a,EAASoL,MAAT,UAAiBpL,EAASoL,KAAKrL,eAA/B,OAAiB,EAAuBkG,KAClC,GAAGjG,EAASoL,KAAKrL,QAAQkG,SAASjG,EAASsB,QAC3CtB,EAASsB,MAEnB,OACI4B,IAAAA,cAAAA,MAAAA,CAAKO,IAAKoX,EAAW1X,UAAU,mBAC1B0X,GAKb,OAAO,QAEVjS,QAAQkS,KAAgCA,KACjD,GAEJ,MAAO,CACHC,QAAS,CACLC,IAAKC,EAAAA,MACL9X,UAAW,YACX0W,OAAQe,EAAU5Y,OAAS,EAC3BkZ,MAAO,SACPC,WAAW,EACX,aAAcvK,KAAKjR,MAAMkF,UAAUuW,8BAEvCC,OACInY,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,oBAAmB,cAAa,QAC3CD,IAAAA,cAAAA,OAAAA,CAAMC,UAAU,6BAChBD,IAAAA,cAAAA,OAAAA,KAAO0N,KAAKjR,MAAMkF,UAAUuW,+BAGpCE,OAAQV,GAQR5D,8BACJ,MACI5L,MACI8G,MAAQhR,OAAQgR,IAFlB,UAIFvD,EAJE,UAKF9J,GACA+L,KAAKjR,MAET,OAAOuS,MAAAA,GAAAA,EAAMoD,gBACPiG,EAAAA,EAAAA,GAAe,CACXC,gBAAiB3W,EAAU4W,iBAC3BC,aAAc7W,EAAU6W,aACxBxJ,KAAMA,EAAKA,KACXtN,QAASgM,KAAKjR,MAAMiF,QACpBD,SAAUiM,KAAKjR,MAAMgF,SACrBgK,UAAAA,EACAvO,GAAIwQ,KAAKjR,MAAMS,UAEnBmH,EAOFuP,4BAAyB,cAC7B,MACI1L,MACI8G,MAAQhR,OAAQgR,GADd,4BAEF/F,GAHF,UAKFwC,EALE,UAMF9J,GACA+L,KAAKjR,MAEHgc,EAAuB/K,KAAKjR,MAAMiF,SAAWgM,KAAKjR,MAAMiF,QAAQkB,SAAW8K,KAAKjR,MAAMiF,QAAQkB,QAAQ+O,QAEtGO,EAAY,UAAGxE,KAAKjR,aAAR,iBAAG,EAAYyL,YAAf,aAAG,EAAkBgK,aACjCwG,EAAoCxG,MAAAA,GAAH,UAAGA,EAAclU,cAAjB,iBAAG,EAAsBgB,MAAK6M,GAF/B,oEAEuCA,EAAK9I,cAA3C,aAAG,EACpCsP,UAEAgmB,GAA+G,KAAtF,UAAA3qB,KAAKjR,MAAMiF,QAAQkB,QAAQ2H,IAAIC,cAA/B,eAAuC8tB,4CAEtE,OAAO7f,IAAwB/T,EAAAA,gBAAAA,YAA4BsK,MAAAA,OAA5B,EAA4BA,EAAMA,KAAK2B,YAAe3B,MAAAA,GAAAA,EAAMoD,oBAqBrF/N,GApBAk0B,EAAAA,EAAAA,GAAa,CACTvpB,KAAMA,EAAMA,KACZ4J,cAAejX,EAAUkX,oBACzBC,cAAenX,EAAUoX,uBACzBC,iBAAkBrX,EAAUsX,aAC5BC,SAAUvX,EAAUwX,kBACpBb,gBAAiB3W,EAAUyX,WAC3BC,oBAAqB1X,EAAU0X,oBAC/B3X,QAASgM,KAAKjR,MAAMiF,QACpBD,SAAUiM,KAAKjR,MAAMgF,SACrBvE,GAAIwQ,KAAKjR,MAAMS,GACfoc,mBAAoB3X,EAAU4X,sBAC9BC,SAAU7X,EAAU8X,UACpBhB,qBAAAA,EACAC,kCAAAA,EACAzP,4BAA6BA,MAAAA,OAAF,EAAEA,EAA6BjL,OAC1DyN,UAAAA,EACA+sB,qBAAsBxpB,EAAMA,KAAKypB,qBACjCC,iBAAkBL,IASxBhlB,gBACJ,MACInL,MACI8G,MAAQhR,OAAQgR,IAFlB,UAIFrN,GACA+L,KAAKjR,MAET,OACIuS,GACIhP,IAAAA,cAAC0Z,EAAAA,mBAAkB,CACf1K,KAAMA,EACN2K,qBAAsBhY,EAAUgY,qBAChCC,qBAAsBjY,EAAUiY,qBAChCC,yBAA0BlY,EAAUkY,yBACpCC,4BAA6BnY,EAAUmY,4BACvCC,gBAAiB,IACjBxG,2BAA4B5R,EAAU4R,2BACtCyG,gBAAiBrY,EAAUqY,gBAC3BC,0BAA2BtY,EAAUsY,0BACrCC,8BAA+BvY,EAAUuY,8BACzCC,iCAAkCxY,EAAUwY,iCAC5CC,4BAA6BzY,EAAU0Y,4BACvC3Y,QAASgM,KAAKjR,MAAMiF,QACpBxE,GAAIwQ,KAAKjR,MAAMS,GACfuE,SAAUiM,KAAKjR,MAAMgF,SACrByG,KAAM,GACN1B,iBAAkBkH,KAAKlH,mBAW/BiO,2CAA2C9S,GAC/C,MAAO,CACH2Y,yBAA0B3Y,EAAU2Y,yBAEpCC,wBAAyB5Y,EAAU4Y,wBACnCC,4BAA6B7Y,EAAU6Y,4BAEvCC,gCAAiC9Y,EAAU8Y,gCAC3CC,iCAAkC/Y,EAAU+Y,iCAC5CC,sCAAuChZ,EAAUgZ,sCAEjDC,oBAAqBjZ,EAAUiZ,oBAC/BC,wBAAyBlZ,EAAUkZ,wBACnCC,cAAenZ,EAAUmZ,eASzBC,iDAAiDpZ,GACrD,MAAO,CACHqZ,4BAA6BrZ,EAAUqZ,4BACvCC,2BAA4BtZ,EAAUsZ,2BACtCC,0CAA2CvZ,EAAUuZ,0CACrDC,6CAA8CxZ,EAAUwZ,6CACxDC,0CAA2CzZ,EAAUyZ,0CACrDC,cAAe1Z,EAAU0Z,cACzBC,kBAAmB3Z,EAAU2Z,kBAC7BC,iBAAkB5Z,EAAU4Z,kBAS5B3G,kDAAkDjT,GACtD,MAAO,CACHqZ,4BAA6BrZ,EAAUqZ,4BACvCC,2BAA4BtZ,EAAUsZ,2BACtCO,4CAA6C7Z,EAAU6Z,4CACvDC,+CAAgD9Z,EAAU8Z,+CAC1DC,4CAA6C/Z,EAAU+Z,4CACvDC,+CAAgDha,EAAUga,+CAC1DC,2CAA4Cja,EAAUia,2CACtDC,qDAAsDla,EAAUka,sDAShEC,gEACJna,GAEA,MAAO,CACHoa,yBAA0Bpa,EAAUoa,yBACpCC,8BAA+Bra,EAAUqa,8BACzCC,yBAA0Bta,EAAUsa,yBACpCC,+BAAgCva,EAAUua,gCAS1CxH,0CAA0C/S,GAC9C,MAAO,CACHwa,yBAA0Bxa,EAAUya,0BACpCC,wBAAyB1a,EAAU2a,mBACnCC,2BAA4B5a,EAAU4a,2BACtCC,yBAA0B7a,EAAU8a,+BAEpCC,yBAA0B/a,EAAU+a,yBAEpCC,yBAA0Bhb,EAAUib,8BACpCC,+BAAgClb,EAAUmb,0CAQ1CrL,gBAAa,YACjB,MACIvJ,MACI8G,MAAQhR,OAAQgR,GAChBvM,WAAazE,OAAQyE,GACrBF,gBAAkBvE,OAAQuE,GAC1BC,qBAAuBxE,OAAQwE,IAEnCd,SACIkB,SAAW+O,SAAS,uBAAEoL,GAA2B,CAAEA,4BAAwB1Y,KAR7E,OAUFmG,EAVE,UAWFiB,EAXE,UAYF9J,EAZE,QAaFqb,GACAtP,KAAKjR,MAEH8E,EAAgBmM,KAAKW,iBAAiB7D,EAAOjJ,eAE7C0Q,EAAgC,UAAGvE,KAAKjR,MAAMyL,KAAKgK,aAAalU,cAAhC,aAAG,EAAqCgB,MAC1EkT,GAAsC,oEAAtBA,EAAanP,OAE3BoP,EAAwBF,MAAAA,OAAH,EAAGA,EAAkCI,UAE1D9M,EAAqDmI,KAAKQ,MAAM3I,gBACtE,IAAI0X,EAA0B,GAC1BD,GAAWzT,OAAO4C,KAAK6Q,GAASle,OAAS,GAAKke,EAAQjI,eAAiBiI,EAAQjI,cAAcjW,OAAS,IACtGme,EAAkBD,EAAQjI,cAAc,GAAG7X,IAE/C,MACMu6B,GACF,UAAA/pB,KAAKjR,MAAMyL,KAAKgK,aAAalU,cAA7B,mBAAqCgB,MAAM6M,GAFR,2DAE+BA,EAAK9I,cAAvE,eAAiHsP,aACjH,EACJ,OAAO3N,EAAAA,gBAAAA,YAA4BsK,MAAAA,OAA5B,EAA4BA,EAAMA,KAAK2B,YACxCuM,EAAAA,EAAAA,GAAc,CACVvS,UAAWqE,EAAMA,KAAK2B,UACtB3T,sBAAuBigB,EACvB1X,gBAAAA,EACAuF,SAAU4C,KAAKjR,MAAMyL,KAAK4C,SAAS9M,OACnCyG,qBAAsBiJ,KAAKjR,MAAMyL,KAAKzD,qBAAqBzG,OAC3DqN,uBAAwBqC,KAAKjR,MAAMyL,KAAK5K,gBAAgBU,OACxDmf,SAAQ,UAAEzP,KAAKjR,MAAMyL,KAAKiV,gBAAlB,aAAE,EAA0Bnf,OACpCuD,cAAAA,EACA0B,oBAAqByK,KAAKjR,MAAMiF,QAAQ6I,IAAIC,OAAO4S,mBAAoB,EACvExZ,qBAAqB+0B,EAAAA,EAAAA,kCAAiCjrB,KAAKjR,MAAMiF,QAAQ6I,IAAIC,OAAO6S,4BACpF1Y,sBAA8E,aAAvD+I,KAAKjR,MAAMiF,QAAQ6I,IAAIC,OAAO8S,qBACrD9b,aAAckM,KAAKjR,MAAMiF,QAAQkB,QAAQpB,aACzCE,QAASgM,KAAKjR,MAAMiF,QACpBD,SAAUiM,KAAKjR,MAAMgF,SACrBvE,GAAIwQ,KAAKjR,MAAMS,GACfkM,iCAAkC+I,EAClCxQ,UAAW,CACP4b,WAAY5b,EAAU6b,yBACtBC,YAAa9b,EAAU+b,0BACvBC,aAAchc,EAAUic,kCACxBC,YAAalc,EAAUmc,0BACvBC,aAAcpc,EAAUqc,2BACxBC,sBAAuBtc,EAAUuc,oBACjCC,uBAAwBxc,EAAUwc,uBAClCC,yBAA0Bzc,EAAUyc,yBACpCC,yBAA0B1c,EAAU0c,yBACpCC,mBAAoB3c,EAAU2c,mBAC9BhD,kBAAmB3Z,EAAU2Z,kBAC7BC,iBAAkB5Z,EAAU4Z,iBAC5BgD,oBAAqB5c,EAAU6c,gBAC/Boa,0BAA2Bj3B,EAAUi3B,0BACrCna,qBAAqB,EAAD,GACb9c,IAGX8J,UAAAA,EACApJ,wBAAyBV,EAAUU,wBACnCC,6BAA8BX,EAAUW,6BACxCV,iBAAkBD,EAAU+c,qBAC5Bhf,WAAYiC,EAAUgd,uBACtBxV,aAAcxH,EAAUid,oBACxBhf,gBAAiB+B,EAAUkd,uBAC3BjiB,0BAA2B8Q,KAAKjR,MAAMyL,KAAKtL,0BAA0BoB,OACrEiH,eAAgBtD,EAAU8V,uBAC1BvS,kBAAmBvD,EAAUmd,8BAC7B3Z,qBAAsBxD,EAAUod,6BAChChiB,UAAW2Q,KAAKjR,MAAMyL,KAAK8G,KAAKhR,OAChCa,iBAAkB6O,KAAKjR,MAAMyL,KAAKrJ,iBAAiBb,OACnD6D,uBAAwB6L,KAAKoB,0BAC7BhN,6BAA8B4L,KAAK5L,6BACnC4G,sCAAuCgF,KAAK6B,uBAC5CrR,uBAAwBwP,KAAKsC,0BAC7BvN,UAAAA,EACAC,oBAAqBf,EAAUe,oBAC/BvD,uBAAwB4d,EACxBhY,cAAeyF,EAAOwU,qBACtBhW,gCAAiCwB,EAAOxB,gCACxCxC,iBAAkBkH,KAAKlH,iBACvBhD,+BAAgCkK,KAAKlK,+BAErCvB,kCAAmCyL,KAAK+G,2CAA2C9S,GACnFO,mCAAoCwL,KAAKgH,0CAA0C/S,GACnFQ,wCAAyCuL,KAAKqN,iDAAiDpZ,GAC/FS,uDAAwDsL,KAAKoO,gEACzDna,GAGJI,6BAA8BJ,EAAUI,6BACxCC,gCAAiCL,EAAUK,gCAC3Cid,0BAA2Btd,EAAUsd,0BACrCC,4BAA6Bvd,EAAUud,4BACvC3c,eAAAA,EACAC,oBAAAA,EACAU,oBAAqBwK,KAAKjR,MAAMyL,KAAKzD,qBACrCwzB,oCAAqCR,IAAoC,IAE7E,KAUFlmB,eAAe5O,EAA0BwO,EAA0BD,GACvE,GAAIvO,EACA,OAAOwO,EAGX,MAAMgO,GAAgB0Z,EAAAA,EAAAA,UAAS1nB,GAC/B,IAAImO,EAAYnO,EAKhB,OAJI1J,EAAAA,GAAAA,YAAuB0X,IACvBG,EAAY,GAAG1X,OAAO9J,SAASyhB,SAASpO,KAGrC,GAAGD,IAAaA,EAAUsO,SAAS,KAAa,IAAN,SAAeF,IAiI1C,qBACtB,IAAK5R,KAAKlK,+BAEN,OADAkK,KAAKM,SAAS,CAAEwC,aAAa,IACtBkP,EAAAA,YAAAA,UAGX,MACIxX,MAAM,KAAE8G,GADN,UAEFvD,EAFE,QAGF/J,GACAgM,KAAKjR,MAEHoT,QAAyE4P,EAAAA,EAAAA,IAAkBzQ,EAAMvD,EAAW/J,GAAS,GAE3H,GAAImO,EAAmB,CACnB,MAAMkC,GAAWrN,EAAAA,gBAAAA,YAA4BmL,EAAkBrK,wBAC/DkI,KAAKM,SAAS,CACVzI,gBAAiBsK,EACjBW,YAAauB,SAGjBrE,KAAKM,SAAS,CAAEwC,aAAa,IAGjC,OAAOkP,EAAAA,YAAAA,UAOoC,sDAC3C,MAAMC,EAAuC,UAAGjS,KAAKjR,MAAMiF,eAAd,iBAAG,EAAoBkB,eAAvB,iBAAG,EAA6B2H,WAAhC,iBAAG,EAAkCqV,gBAArC,aAAG,EAA4CC,iCAC5F,GAAgD,SAA5CF,EACA,OAAO,EAGX,IAAK,IAAD,EACA,MAAMG,QAAwBpS,KAAKjR,MAAMyL,KAAKgK,aAK9C,MAHI,UAAA4N,EAAgB9gB,MACZkT,GAAsC,oEAAtBA,EAAanP,cADjC,eAEGsP,aAAa,GAEhB,OAAO,EAEb,MAAOjU,GAGL,OAFAsP,KAAKjR,MAAMgP,UAAU4D,QAAQjR,GAC7BsP,KAAKjR,MAAMgP,UAAU6D,MAAM,iCACpB,EAGX,GAAgD,QAA5CqQ,EACA,OAAO,EAEX,IACI,MAAMI,QAAqBrS,KAAKjR,MAAMyL,KAAK1F,oBAC3C,QACMud,IAC4C,QAA5CJ,GAAqDI,EAAapK,OACnB,QAA5CgK,IAAsDI,EAAapK,OAE9E,MAAOvX,GAGL,OAFAsP,KAAKjR,MAAMgP,UAAU4D,QAAQjR,GAC7BsP,KAAKjR,MAAMgP,UAAU6D,MAAM,gCACpB,GAI6B,6CACxC,MAAMwQ,QAAwBpS,KAAKjR,MAAMyL,KAAKgK,aAExC4mB,EAAoChZ,MAAAA,GAAH,UAAGA,EAAiB9gB,MACvDkT,GAAsC,wEAAtBA,EAAanP,cADM,aAAG,EAEvCsP,UAEH,OAAOymB,MAAAA,GAAAA,EAOHxmB,oBAAiB,kBACrB,MACIpK,MACI8G,MAAQhR,OAAQgR,GAChBvM,WAAazE,OAAQyE,GACrBF,gBAAkBvE,OAAQuE,GAC1BC,qBAAuBxE,OAAQwE,IAEnCd,SACIkB,SAAW+O,SAAS,uBAAEoL,GAA2B,CAAEA,4BAAwB1Y,KAR7E,OAUFmG,EAVE,UAWFiB,EAXE,UAYF9J,EAZE,QAaFqb,GACAtP,KAAKjR,MAEH8E,EAAgBmM,KAAKW,iBAAiB7D,EAAOjJ,eAC7CgE,EAAqDmI,KAAKQ,MAAM3I,gBACtE,IAAI0X,EAA0B,GAC1BD,GAAWzT,OAAO4C,KAAK6Q,GAASle,OAAS,GAAKke,EAAQjI,eAAiBiI,EAAQjI,cAAcjW,OAAS,IACtGme,EAAkBD,EAAQjI,cAAc,GAAG7X,IAG/C,MAAM+U,EAAgC,UAAGvE,KAAKjR,MAAMyL,KAAKgK,aAAalU,cAAhC,aAAG,EAAqCgB,MAC1EkT,GAAsC,oEAAtBA,EAAanP,OAE3BoP,EAAwBF,MAAAA,OAAH,EAAGA,EAAkCI,WAC1D,aAAEH,GAAiBxE,KAAKjR,MAAMyL,KAE9BuvB,GACF,UAAAvlB,EAAalU,cAAb,mBAAqBgB,MAAM6M,GAFQ,2DAEeA,EAAK9I,cAAvD,eAAiGsP,aAAa,EAClH,OAAO3E,KAAKjR,MAAMyL,KAAK4C,WAClBkE,MAAAA,GAAAA,EAAMoD,gBAAkB1E,KAAKjR,MAAMyL,KAAK4C,SAAS9M,SAClDgR,GACAA,EAAKA,KAAK2B,WACV3B,EAAKA,KAAK2B,UAAU7R,OAAS,GAJ1B,UAKH4O,KAAKjR,MAAMyL,KAAKe,mCALb,OAKH,EAA6CjL,OAC3CwN,EAAmB,CACfb,UAAWqE,EAAKA,KAAK2B,UACrB3T,sBAAuBigB,EACvB1X,gBAAAA,EACAuF,SAAU4C,KAAKjR,MAAMyL,KAAK4C,SAAS9M,OACnCyG,qBAAsBiJ,KAAKjR,MAAMyL,KAAKzD,qBAAqBzG,OAC3DqN,uBAAwBqC,KAAKjR,MAAMyL,KAAK5K,gBAAgBU,OACxDmf,SAAQ,UAAEzP,KAAKjR,MAAMyL,KAAKiV,gBAAlB,aAAE,EAA0Bnf,OACpCuD,cAAAA,EACA0B,oBAAqByK,KAAKjR,MAAMiF,QAAQ6I,IAAIC,OAAO4S,mBAAoB,EACvEhL,gBAAgBpD,MAAAA,OAAA,EAAAA,EAAMoD,kBAAkB,EACxCxO,qBAAqB+0B,EAAAA,EAAAA,kCAAiCjrB,KAAKjR,MAAMiF,QAAQ6I,IAAIC,OAAO6S,4BACpF7b,aAAckM,KAAKjR,MAAMiF,QAAQkB,QAAQpB,aACzCE,QAASgM,KAAKjR,MAAMiF,QACpB0H,iCAAkC+I,EAClC1Q,SAAUiM,KAAKjR,MAAMgF,SACrBvE,GAAIwQ,KAAKjR,MAAMS,GACfyE,UAAW,CACP4b,WAAY5b,EAAU6b,yBACtBC,YAAa9b,EAAU+b,0BACvBC,aAAchc,EAAUic,kCACxBC,YAAalc,EAAUmc,0BACvBC,aAAcpc,EAAUqc,2BACxBC,sBAAuBtc,EAAUuc,oBACjCC,uBAAwBxc,EAAUwc,uBAClCC,yBAA0Bzc,EAAUyc,yBACpCC,yBAA0B1c,EAAU0c,yBACpCC,mBAAoB3c,EAAU2c,mBAC9BhD,kBAAmB3Z,EAAU2Z,kBAC7BC,iBAAkB5Z,EAAU4Z,iBAC5BgD,oBAAqB5c,EAAU6c,gBAC/Boa,0BAA2Bj3B,EAAUi3B,0BACrCna,qBAAqB,EAAD,GACb9c,IAGX8J,UAAAA,EACApJ,wBAAyBV,EAAUU,wBACnCC,6BAA8BX,EAAUW,6BACxCV,iBAAkBD,EAAU+c,qBAC5Bhf,WAAYiC,EAAUgd,uBACtBxV,aAAcxH,EAAUid,oBACxBhf,gBAAiB+B,EAAUkd,uBAC3BjiB,0BAA2B8Q,KAAKjR,MAAMyL,KAAKtL,0BAA0BoB,OACrEiH,eAAgBtD,EAAU8V,uBAC1BvS,kBAAmBvD,EAAUmd,8BAC7B3Z,qBAAsBxD,EAAUod,6BAChChiB,UAAW2Q,KAAKjR,MAAMyL,KAAK8G,KAAKhR,OAChCa,iBAAkB6O,KAAKjR,MAAMyL,KAAKrJ,iBAAiBb,OACnD6D,uBAAwB6L,KAAKoB,0BAC7BhN,6BAA8B4L,KAAK5L,6BACnC4G,sCAAuCgF,KAAK6B,uBAC5CrR,uBAAwBwP,KAAKsC,0BAC7BvN,UAAAA,EACAC,oBAAqBf,EAAUe,oBAC/BvD,uBAAwB4d,EACxBhY,cAAeyF,EAAOwU,qBACtBhW,gCAAiCwB,EAAOxB,gCACxCxC,iBAAkBkH,KAAKlH,iBACvBhD,+BAAgCkK,KAAKlK,+BAErCvB,kCAAmCyL,KAAK+G,2CAA2C9S,GACnFO,mCAAoCwL,KAAKgH,0CAA0C/S,GACnFQ,wCAAyCuL,KAAKqN,iDAAiDpZ,GAC/FS,uDAAwDsL,KAAKoO,gEACzDna,GAGJI,6BAA8BJ,EAAUI,6BACxCC,gCAAiCL,EAAUK,gCAC3Cid,0BAA2Btd,EAAUsd,0BACrCC,4BAA6Bvd,EAAUud,4BACvC3c,eAAAA,EACAC,oBAAAA,EACAyG,4BAA2B,UAAEyE,KAAKjR,MAAMyL,KAAKe,mCAAlB,aAAE,EAA6CjL,OAC1E2G,sBAA8E,aAAvD+I,KAAKjR,MAAMiF,QAAQ6I,IAAIC,OAAO8S,qBACrDpa,oBAAqBwK,KAAKjR,MAAMyL,KAAKzD,qBACrC8yB,qBAAsB7pB,KAAKQ,MAAMqpB,uBAAX,UAAmC7pB,KAAKjR,MAAMyL,KAAK6wB,8BAAnD,aAAmC,EAAwC/6B,QACjGi6B,oCAAqCR,IAAoC,IAE7E,OAhjCRzqB,GAAI,SADTgT,EAAAA,IACKhT,GAojCN,kGC3pCA,MAAMmT,EAAmB,CACrB/T,EACA4sB,EACA/lB,EACA8B,EACAX,EACAa,EACAE,EACAE,IAEIF,EACOnV,EAAAA,cAAAA,EAAAA,SAAAA,KAAGmV,GAEV/I,EACOA,EAAUnB,KAAIxL,IAAW,MAC5B,OACIO,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,sBAAsBM,IAAK,aAAGd,EAAS0I,kBAAZ,QAA0B,MAAMV,EAAAA,GAAAA,UAAAA,cACrEhI,EAAS3C,SACTiY,GAAiBtV,EAASyJ,cACvBlJ,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAK9J,EAASyJ,cAAcjI,gBAAiBxB,EAASyJ,cAAc1J,kBACzE,KACHC,EAASwK,mBACNjK,EAAAA,cAACkgB,EAAAA,KAAI,CAACjgB,UAAU,gCACXR,EAAS4J,OACT5J,EAASgK,cACThK,EAASwK,oBAGdjK,EAAAA,cAAAA,EAAAA,SAAAA,KACKP,EAAS4J,OACT5J,EAASgK,mBAO3B4L,EACHrV,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,wBACXD,EAAAA,cAAAA,IAAAA,CAAGC,UAAU,iBAAiB+4B,GAC7B5kB,GAGLpU,EAAAA,cAAAA,EAAAA,SAAAA,KAAGiV,GA8HLgkB,EAA6B,CAC/BjX,EACAC,EACAiX,EACAC,EACA15B,EACAiS,KACA,MAEA,IAAIyQ,EAOJ,OALAA,GAHqB,UAAwB1iB,EAASyJ,qBAAjC,aAAwB,EAAwBvM,iBAGtCqlB,EAAaC,EACvCmX,EAAAA,iBAAAA,cAA+B1nB,KAChCyQ,EAAa1iB,EAASyI,MAAQzI,EAASyI,KAAKpL,SAAS0B,eAAiBkT,EAAwBwnB,EAAoB/W,GAIlHniB,EAAAA,cAAAA,EAAAA,SAAAA,KACIA,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,8CACXD,EAAAA,cAAAA,IAAAA,CAAGC,UAAW,8CAA8CkiB,EAAWpb,uBACvE/G,EAAAA,cAAAA,IAAAA,CAAGC,UAAW,8CAA8CkiB,EAAWpb,iBAAkBob,GA/CvE,EAAC1iB,EAA+B05B,KAAyB,UACvF,MAAMx8B,EAAe,UAAwB8C,EAASyJ,qBAAjC,aAAwB,EAAwBvM,gBACrE,OACIqD,EAAAA,cAAAA,EAAAA,SAAAA,KACIA,EAAAA,cAACkgB,EAAAA,KAAI,CAACjgB,UAAU,oDACXtD,EACGqD,EAAAA,cAAAA,IAAAA,CAAGC,UAAU,uDAAb,UACKR,EAASyJ,qBADd,aACK,EAAwBtI,eACxBu4B,EAFL,UAGK15B,EAASyJ,qBAHd,aAGK,EAAwBrJ,aAE7B,QAqCHw5B,CAA0B55B,EAAU05B,MA8FrD,EAxC4C18B,IAAD,QAhMhBqkB,EAwEAjL,EAwHgB,OACvC7V,EAAAA,cAAAA,MAAAA,OAAAA,OAAAA,CAAKC,UAAWxD,EAAMwD,UAAW/C,GAAIT,EAAMS,IAAQT,EAAMmmB,uBAAuBnmB,IAC3EA,EAAM+M,QACN,UAAC/M,EAAMuS,YAAP,OAAC,EAAYoD,iBAAkB3V,EAAMqQ,mBA3HnB+I,EA2HyDpZ,EAAMqQ,iBAzHlF9M,EAAAA,cAAAA,EAAAA,SAAAA,KACIA,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAKsM,EAAWM,yBAChBN,EAAWO,iBACXP,EAAWS,oBACXT,EAAWY,mBAsHnBha,EAAM0V,sBA/Ce1V,CAAAA,GACtBA,EAAMsP,gBAAkBrH,EAAAA,gBAAAA,YAA4BjI,EAAMsP,gBAEtD/L,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,wBACVxD,EAAMsP,eAAed,KAAIN,IAAY,MAClC,OACI3K,EAAAA,cAAAA,MAAAA,CAAKO,IAAKoK,EAAU,GAAGxC,WAAYlI,UAAU,+BACxCg5B,EACGx8B,EAAMkF,UAAUqgB,WAChBvlB,EAAMkF,UAAUsgB,aAChBxlB,EAAMkF,UAAUugB,kBAChBzlB,EAAMkF,UAAUw3B,cAChBxuB,EAAU,GALa,UAMvBlO,EAAMiF,QAAQ8F,cAAcoF,eAAe+E,eANpB,aAMvB,EAAoDC,uBAEvDuO,EACGxV,EACAlO,EAAMkF,UAAU0e,cAChB5jB,EAAMwW,iBACNxW,EAAMsY,cACNtY,EAAM2X,qBACN3X,EAAMwY,iBACNxY,EAAM0Y,kBACN1Y,EAAM4Y,qBAQ3B5Y,EAAM4Y,eACTrV,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,uBACXD,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,wBACXD,EAAAA,cAAAA,IAAAA,CAAGC,UAAU,iBAAiBxD,EAAMkF,UAAU0e,eAC7C5jB,EAAM2X,uBAIfpU,EAAAA,cAAAA,EAAAA,SAAAA,KAAGvD,EAAMwY,kBASLqkB,CAAqB78B,GAErBuD,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAK9M,EAAMwW,kBACXkN,EACG1jB,EAAMkO,UACNlO,EAAMkF,UAAU0e,cAChB5jB,EAAMwW,iBACNxW,EAAMsY,cACNtY,EAAM2X,qBACN3X,EAAMwY,iBACNxY,EAAM0Y,kBACN1Y,EAAM4Y,iBAIjB5Y,EAAM+W,qBACHxT,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAK9M,EAAMyW,qBACXzW,EAAM+W,oBACN,UAAA/W,EAAMuS,YAAN,SAAYoD,eApMM,EAC/BoP,EACArO,EACA1W,IAEK+kB,EAKDxhB,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAK4J,GACLqO,EAAoBC,SACpBD,EAAoBE,SACpBF,EAAoBG,QACpBH,EAAoBpI,aARzB3c,EAAMiF,QAAQ+J,UAAUrN,MAAM,uDACvB,MA8LOmjB,CAA2B9kB,EAAMoX,wBAAyBpX,EAAM0W,kBAAmB1W,GA3KxE,EAC7BukB,EACA7N,EACA1W,IAEKukB,EAKDhhB,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAK4J,GACL1W,EAAM2W,UACN4N,EAAkBG,SAClBH,EAAkBI,SAClBJ,EAAkBK,YAClBL,EAAkBM,IAClBN,EAAkBE,eAAiBF,EAAkBE,eAAiB,KACtEF,EAAkB5H,aAXvB3c,EAAMiF,QAAQ+J,UAAUrN,MAAM,qDACvB,MAqKO2iB,CAAyBtkB,EAAMkX,sBAAuBlX,EAAM0W,kBAAmB1W,IAzN1EqkB,EA0NQrkB,EAAM8Y,qBAzNlB7Q,EAAAA,gBAAAA,YAA4Boc,EAAU1I,QAIrDpY,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAKuX,EAAUjJ,SACfiJ,EAAU3I,OACV2I,EAAU1I,QALR,KAyNE3b,EAAMsX,2BACNtX,EAAMyX,sBACNzX,EAAMq7B,uBAAyBpzB,EAAAA,gBAAAA,YAA4BjI,EAAMq7B,uBAC9D93B,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAK9M,EAAMu7B,+BAAgCv7B,EAAMq7B,uBACtD,KACHr7B,EAAM2X,qBACN3X,EAAM6X,8BAGd7X,EAAMsY,mFCvQR,MAAMoC,EAAkB1a,IAC3B,MAAM,GACFS,EADE,mBAEF0Y,EAFE,WAGFC,EACAlU,WAAW,kBAAEmU,EAAF,sBAAqBC,GAJ9B,mBAKFC,EALE,cAMFC,GACAxZ,EAEJ,IAAKiI,EAAAA,gBAAAA,YAA4BmR,GAC7B,OAGJ,MAAMK,EAAU,GAAGhZ,UACb+C,EAAY,sBAClB,MAAO,CACHkW,wBAAyB,CACrBlW,UAAW,uBAEfmW,iBACIpW,IAAAA,cAAAA,IAAAA,SAAAA,KACIA,IAAAA,cAAAA,OAAAA,CAAMC,UAAU,uBAChBD,IAAAA,cAAAA,OAAAA,KAAAA,IAAQvD,EAAMkF,UAAU0U,yBAGhCC,oBACItW,IAAAA,cAAAA,IAAAA,CAAGC,UAAU,2BAA2BsW,SAAU,EAAGC,KAAK,OAAOhW,QAASyV,GACrE,IACAH,EAFL,IAEyB,KAG7BW,gBACIzW,IAAAA,cAAC0W,EAAAA,MAAK,CAACC,OAAQf,EAAoB3V,UAAW,GAAGA,IAAa2W,OAAQZ,GAClEhW,IAAAA,cAAC6W,EAAAA,YAAW,CAAC5W,UAAW,GAAGA,oBAA6B2W,OAAQZ,GAC5DhW,IAAAA,cAAAA,KAAAA,CAAI9C,GAAIgZ,EAASjW,UAAU,mCACtB8V,IAGT/V,IAAAA,cAAC8W,EAAAA,UAAS,CAAC7W,UAAW,GAAGA,mBACrBD,IAAAA,cAAAA,KAAAA,KACK6V,EAAW5K,KAAI8L,IAAa,MACzB,OACI/W,IAAAA,cAAAA,KAAAA,CAAIC,UAAU,iCAAiCM,IAAKwW,EAAWlZ,QAA/D,UACKkZ,EAAWC,iBADhB,aACK,EAAsBC,UAD3B,IACuC,UAMvDjX,IAAAA,cAACkX,EAAAA,YAAW,CAACjX,UAAW,GAAGA,gMCyD3C,MAgHMiB,EAAgB,CAClBpE,EACAD,EACAJ,EACA2E,EACAC,EACAk2B,KACqB,kBACrB,MAAM,cACFh2B,EADE,aAEFC,EAFE,GAGFtE,EAHE,SAIFuE,EAJE,QAKFC,EALE,UAMFC,EANE,iBAOFC,EAPE,uBAQFC,EARE,6BASFC,EATE,6BAUFC,EAVE,gCAWFC,EAXE,kCAYFC,EAZE,mCAaFC,EAbE,wCAcFC,EAdE,uDAeFC,EAfE,wBAgBFC,EAhBE,6BAiBFC,EAjBE,eAkBFC,EAlBE,oBAmBFC,EAnBE,UAoBFC,EApBE,oBAqBFC,EArBE,sBAsBF1F,EAtBE,oCAuBFi7B,GACAx7B,EAEEkG,EAAkBjB,EAAQkB,QAAQC,KAAKF,gBACvCG,EAAiBL,GAAaA,EAAU3D,OAAS,GAAK2D,EAAU,GAAGM,KAAON,EAAU,GAAGM,KAAOL,EAC9FM,GAnJNC,EAmJ+DxG,EAAMwG,oBAlJrEC,EAkJ0F7B,EA/IrF4B,GACAC,GACAA,EAAoBC,0BACpBD,EAAoBE,oBACpBF,EAAoBC,yBAAyBE,kBAK3CH,EAAoBC,yBAAyBE,kBAHzC,GAXuB,IAClCJ,EACAC,EAoJA,MAAMI,EACFzG,GAtIwB,EAC5B0G,EACAN,EACAD,EACAQ,EACAC,KAEA,GAAID,EAAgC,CAChC,IAAIE,EAAmCD,EAQvC,OAJKA,IACDC,EAAmCH,GAAuB,IAGvDN,EACDS,EAAmCV,EAC/BU,EACAV,EACJU,EAEV,OAAIT,GACOD,EAA2BO,EAAsBP,EAErDO,GA8GHI,CACIlH,EAAMmH,oBACNnH,EAAMwG,oBACND,EACAvG,EAAM+G,gCACN3G,MAAAA,GAAA,UAAAA,EAASgH,gBAAT,eAAmBC,kBAAmB,GAIxCC,GAAuBlH,MAAAA,OAAA,EAAAA,EAASmH,iBAAkBC,EAAAA,oBAAAA,WAAiCnH,EAASoH,cAE5FC,EAAeC,EAAAA,iBAAAA,kBAAmCd,QAClDe,EAvHe,EACrBrB,EACAsB,EACA7H,EACAsH,EACAtE,EACA8E,EACAlD,KACoB,MACpB,MAAMmD,EAA+B,GAGrC,GADuE,aAAtC,UAAA/H,EAAMyG,2BAAN,eAA2BjF,QAExD,OAGJ,GAAIxB,EAAMgI,sBAAwBC,EAAAA,gBAAAA,YAA4BjI,EAAMgI,4BAC/BJ,IAA7BhD,EAEA,OADAmD,EAAmBQ,KAAKvI,EAAMwI,gBACvBT,EAAmBa,WAG9B5I,EAAMsI,eAAiBtI,EAAMwG,sBAAwBc,IACjDf,GAA4B,EAC5BwB,EAAmBQ,KAAKvI,EAAMwI,gBACvBjC,EAA2BsB,IACD,IAA7BtB,EACAwB,EAAmBQ,KAAKvI,EAAMyI,mBAE9BV,EAAmBQ,KAAKvI,EAAM0I,qBAAqBC,QAAQ,YAAapC,EAAyBqC,eAM7G,MAAMC,EAAiB7I,EAAM8I,gBAAgBC,uBACvCC,EAAsBH,MAAAA,OAAH,EAAGA,EAAgBI,QAAOtE,GAASA,EAAMvD,SAAW0G,IAC7E,QAA4BF,IAAxBoB,EACA,IAAK,MAAME,KAAKF,EACRf,EAAAA,gBAAAA,YAA4BiB,EAAEC,qBAC9BD,EAAEC,mBAAmBC,SAAQC,SACOzB,IAA5ByB,EAAWC,cACXvB,EAAmBQ,KAAKc,EAAWC,iBAOvD,OAAIrB,EAAAA,gBAAAA,YAA4BF,GACrBA,EAAmBwB,KAAK,UADnC,GAuEMC,CACIjD,EACAlG,EAASoJ,SACTzJ,EACAsH,EACAjH,EACAA,EAASe,OACTwD,GAGJ8E,EApEoB,EAACtE,EAA8D/E,IAAuB,KAChH+E,EAAuB/E,IAmEMsJ,CAAsBvE,EAAwB/E,GAErEuJ,GAAUC,EAAAA,EAAAA,kBAAiBC,EAAAA,GAAAA,eAA+B9J,EAAM+J,iBAAmB5E,EAAkB,IACrG6E,IAAaC,EAAAA,EAAAA,wBAAuBjK,EAAM+J,iBAAmBH,GAE7DM,GAAetF,MAAAA,OAAH,EAAGA,EAA0BuF,gBACzCC,GAAgBxF,EAChB,0CAAgCA,EAAyByF,sBAAzD,aAAgC,EAAyCC,qBACzE1C,EAGA2C,GAEF,YADAnK,MAAAA,GAAA,UAAAA,EAASoK,kBAAT,mBAAqBjI,MAAKkI,GAHL,IAGkBA,EAAUC,4BAAjD,mBAAmGC,sBAAnG,eAAmHC,OAGvH,IAAIC,GACJ,GAAIzK,GAGA,GAFAyK,IAAaC,EAAAA,EAAAA,mBAAkB1K,EAASJ,EAAMiF,QAAQ8F,mBAAenD,GAEjEoD,EAAAA,GAAAA,YAAsB2wB,EAAAA,EAAAA,IAAiB37B,EAAMiF,QAAQ8F,cAAcoF,gBAAiB,CAAC,IAAD,GACpF,MAAMlF,EAAU,IAAIC,IAAIL,GAAYM,OAAO9J,SAAS+J,MACpDH,EAAQI,aAAaC,IAAI,YAAa,cAAGjL,EAASkL,iBAAZ,UAAyB,KAC/DV,GAAaI,EAAQG,WAGzBP,IAAaW,EAAAA,EAAAA,8BAA6BnL,EAASiE,aAAe,GAAItE,EAAMiF,QAAQ8F,eAGxF,MAAO,CACHU,KAAM,CACFrL,QAAAA,EACAC,SAAAA,GAEJqL,WAAYrL,EAASe,OACrBO,MAAO+F,EACPiE,WACMrE,IAAwBtH,EAAMwG,sBAAsBnG,EAASoJ,UAAa5C,MAAAA,EAAAA,EAAe,KACzFc,EAAAA,iBAAAA,kBAAmCD,KAAkBi1B,EAAAA,iBAAAA,cAA+Bj1B,GAC1FrH,SACIkD,EAAAA,cAACu5B,EAAAA,sBAAqB,CAClBrxB,KAAM,CACFzI,SAAU3C,EACVC,UAAWN,EAAMM,UACjBF,QAAAA,EACAsgB,SAAU1gB,EAAM0gB,UAEpB7Y,gBAAiBxH,EAASoJ,SAC1B5C,YAAaA,EACbgF,eAAevE,IAAwBtH,EAAMwG,sBAAsBD,GAA4B,EAC/FxB,aAAcA,EACdD,cAAeA,EACfrE,GAAIA,EACJuE,SAAUA,EACV6F,WAAYA,GACZ5F,QAASA,EACTC,UAAWA,EACXpB,IAAK,GAAGa,KAASkG,KACjBiB,UAAWnH,EACXoH,oBAAqBpE,EAAAA,iBAAAA,kBAAmCvH,GACxD4L,iBAAkBhM,EAAMiM,sCACxBC,gBAAiB9L,MAAAA,OAAF,EAAEA,EAAS+L,gBAC1BzE,aAAcA,EACd0E,0BAA2BlC,GAC3BmC,wBAAyBjC,GACzBkC,iBAA8C,WAA5B,UAAAtM,EAAMM,iBAAN,eAAiBkB,QACnC+K,gCAAiCvM,EAAMuM,gCACvCxC,iBAAkB/J,EAAM+J,iBACxByC,4BAA6BxM,EAAMwM,4BACnCuwB,cAAa,UAAE93B,EAAQkB,QAAQ+O,eAAlB,aAAE,EAAyB8nB,WAGhDvwB,cAAerM,GACTL,EAAAA,EAAAA,GAAc,CACVQ,sBAAAA,EACAD,UAAWN,EAAMM,UACjBD,SAAAA,EACAD,QAAAA,EACA6D,WAAYjE,EAAMiD,WAClBiB,kBAAmBlE,EAAM0M,aACzBvJ,gBAAiBnD,EAAMmD,gBACvBhD,0BAA2BH,EAAMG,0BACjCiC,iBAAkBpC,EAAMoC,iBACxBvB,gBAAiBi6B,EACjBp4B,uBAC4C,KAAxCrC,EAAS0B,aAAqC1B,EAAS0B,aAAe/B,EAAM0C,uBAChFiK,iCAAkC3M,EAAM2M,iCACxCH,4BAA6BxM,EAAMwM,4BACnC/K,uBAAwBzB,EAAMyB,8BAElCmG,EACNgF,OACIrJ,EAAAA,cAACsJ,EAAAA,OAAMC,OAAAA,OAAAA,CAACtJ,UAAU,6BAA6BO,QAAS2F,EAAsBqD,MAAO5H,GAAsB6E,IACtG7E,GAGT6H,cACI9G,GAAmB9F,IAAYmK,GAC3BhH,EAAAA,cAAC0J,EAAAA,uBAAsB,CACnBzJ,UAAU,iCACVoC,wBAAyBA,EACzBC,6BAA8BA,EAC9BZ,QAASA,EACTxE,GAAIA,EACJqD,IAAKzD,EAASe,OACd4D,SAAUA,EACVqB,eAAgBA,EAChBhG,SAAUA,EACV6M,gBAAc,EACdC,mBAAmB,EACnBC,kBAAkB,EAClBC,mBAAmB,EACnBC,SAAS,SACT7B,KAAM,CACFzF,UAAAA,EACA5F,QAAAA,GAEJmN,UAAWlI,SAGfuC,EAER4F,mBACItH,GAAmBJ,GAAkB1F,EACjCmD,EAAAA,cAACkK,EAAAA,4BAA2B,CACxBjK,UAAWkK,GAAAA,CAAW,uCAAwCnD,GAAwB,WAAa,IACnGjF,6BAA8BA,EAC9BC,gCAAiCA,EACjCC,kCAAmCA,EACnCC,mCAAoCA,EACpCC,wCAAyCA,EACzCC,uDAAwDA,EACxD8F,KAAM,CAAErL,QAAAA,EAASuN,SAAUtN,EAASoJ,UAAY,EAAG3D,eAAAA,EAAgBC,oBAAAA,GACnEd,QAASA,EACTiI,gBAAc,EACdU,8BAA+BrD,GAC/BsD,cAAetD,GACf9J,GAAIA,EACJuE,SAAUA,EAEVqI,mBAAoBrN,EAAMiF,QAAQ6I,IAAIC,OAAOC,iBAAkB,EAC/DlJ,mBAAuC8C,IAAxB5H,EAAM8E,cAA8B9E,EAAM8E,mBAAgB8C,EACzE4zB,oCAAqCA,IAAuC,EAC5EC,UAAWp7B,EAASkL,iBAGxB3D,IAKHqG,EAAoB,CAC7BC,EACAG,EACArO,KAEA,MAAMoO,EAAoC,GA0C1C,OAxCAF,EAAUM,KAAI,CAACnO,EAAUsE,KACrB,IAAIvE,EAQAwE,EAJAxE,EAHAJ,EAAM+G,gCAGI2H,EAAAA,EAAAA,GAAkCrO,EAAS8H,UAAWkG,EAAUhO,EAASgI,YAAarI,EAAMM,YAE5FqO,EAAAA,EAAAA,GAAsBtO,EAAS8H,UAAWkG,GAKxD,MAAM4uB,GAAeC,EAAAA,EAAAA,0BACjB78B,EACAL,EAAM2M,iCACN3M,EAAMwM,4BACNxM,EAAM0C,wBAeV,IAAIo4B,EAbA96B,EAAMgI,sBAAwBC,EAAAA,gBAAAA,YAA4BjI,EAAMgI,wBAChEpD,EAA2B5E,EAAMgI,qBAAqBzF,MAAKkE,IACJ,IAAD,MAAlD,OAAKzG,EAAMkI,uBAAyB+0B,GAG5B,UAAAx2B,EAAoBC,gCAApB,eAA8CyB,aAAc9H,EAAS8H,YACrE,UAAA1B,EAAoB2B,wBAApB,eAAsC+0B,kBAAtC,UAAwD98B,EAASgI,mBAAjE,aAAwD,EAAsB80B,eAG/E12B,EAAoBC,yBAAyByB,YAAc9H,EAAS8H,mBAKhDP,IAA/B5H,EAAM86B,sBAAsC7yB,EAAAA,gBAAAA,YAA4BjI,EAAM86B,wBAC9EA,EAAuB96B,EAAM86B,qBAAqBv4B,MAAK4B,GAC5CA,GAAkBA,EAAegE,YAAc9H,EAAS8H,aAGvEiG,EAAW7F,KAAK9D,EAAcpE,EAAUD,EAASJ,EAAO2E,EAAOC,EAA0Bk2B,OAGtF1sB,GAOEqS,EAAiBzgB,IAC1B,MAAM,SAAEqO,EAAF,UAAYH,GAAclO,EAChC,OAAOiO,EAAkBC,EAAWG,EAAUrO,4DC1d3C,MAAMD,EAAiBC,IAC1B,MAmBMC,EAAgBC,IAClB,MAAM,0BAAEC,EAAF,QAA6BC,EAA7B,SAAsCC,EAAtC,UAAgDC,EAAhD,sBAA2DC,GAA0BP,EAE3F,GAAIE,EAAiB,CACjB,IAAKC,EACD,OAEJA,EACKK,WAAW,CACRC,GAAIF,EACJH,QAAAA,EACAM,wBAAyB,CACrBC,cAAeN,EAASO,oBAE5BC,gBAAiBb,EAAMa,gBACvBC,mBAAoBC,MAAOC,EAAiBC,IAlCzBF,OAC/BC,EACAV,EACAD,EACAY,IAEKX,EAGEA,EACFY,6BAA6B,CAAEC,WAAYd,EAASe,OAASC,SAAUL,EAAiBC,aAAAA,IACxFK,MAAKC,IACoB,YAAlBA,EAAOC,QACPxB,EAAMyB,4BAGbC,OAAMC,QATAC,QAAQC,UA4BIC,CAA2Bd,EAAiBV,EAAWD,EAAUY,KAG/ES,OAAMC,YACR,CACH,IAAKrB,EACD,OAEJD,EAAS0B,aAAe,GACxB1B,EAASO,mBAAqB,GAC9BP,EAAS2B,gBAAkB,GAC3B1B,EACK2B,4BAA4B,CAAEd,WAAYd,EAASe,SACnDE,MAAKC,IACoB,YAAlBA,EAAOC,QACPxB,EAAMyB,4BAGbC,OAAMC,UAIbO,EAAkB,CAACC,EAAwCC,KAC7D,IAAKA,IAAqBD,GAAkD,IAA5BC,EAAiBC,OAC7D,MAAO,GAGX,MAAMC,EAAgBF,EAAiBG,MAAKvB,GACjCA,EAAgBL,gBAAkBwB,IAG7C,OAAIG,EACOA,EAAcE,YAElBL,GAwFX,GAAKnC,EAAMa,iBAAoBb,EAAMa,gBAAgB4B,gBAArD,CAIkF,IAAD,EAAjF,GAAIzC,EAAM2M,kCAAoC3M,EAAMwM,6BAChD,IAvByB,EACzB4wB,EACAC,KAEA,MAAMl5B,EAA2B,GASjC,OARAi5B,MAAAA,GAAAA,EAAwB5uB,KAAInK,IACxB,MAAMi5B,EAASD,MAAAA,OAAH,EAAGA,EAAuB96B,MAAKg7B,GAAgBA,IAAiBl5B,EAASzB,OAIrF,OAHI06B,GACAn5B,EAAeoE,KAAK+0B,GAEjBn5B,KAGJ8D,EAAAA,gBAAAA,YAA4B9D,IAU9Bq5B,CAAqBx9B,EAAMa,gBAAgB4B,gBAAvB,UAAwCzC,EAAMwM,mCAA9C,aAAwC,EAAmCixB,yBAChG,YAED,IACFz9B,EAAM0C,yBACN1C,EAAMa,gBAAgB4B,gBAAgBF,MAAKI,GAAUA,EAAOC,OAAS5C,EAAM0C,yBAE5E,OAGJ,MAAO,CACHG,UAAW,CACPC,YAAa7C,GAEjB8C,iBAxG0B,EAC1BC,EACAC,EACAC,EACAC,EACAf,KAEA,MAAMgB,EAAclB,EAAgBc,EAASpC,mBAAoBwB,GAC3DiB,IAAkBL,EAASpC,mBAE3B0C,EAAepD,GACV,KACHD,EAAaC,IAIrB,OACIqD,EAAAA,cAAAA,EAAAA,SAAAA,KACIA,EAAAA,cAAAA,QAAAA,CAAOC,UAAU,iCACbD,EAAAA,cAAAA,QAAAA,CACI9C,GAAI,6BAA6BuC,EAAS5B,SAC1CqC,KAAK,QACLC,KAAM,gBAAgBV,EAAS5B,SAC/BuC,SAAUL,GAAY,GACtBM,MAAOX,EACPY,SAAUR,EAAa,gBACRA,EACfS,IAAK,GAAGd,EAAS5B,kBAEpB6B,GAELM,EAAAA,cAAAA,QAAAA,CAAOC,UAAU,qCACbD,EAAAA,cAAAA,QAAAA,CACI9C,GAAI,+BAA+BuC,EAAS5B,SAC5CqC,KAAK,QACLC,KAAM,gBAAgBV,EAAS5B,SAC/BuC,SAAUL,GAAY,GACtBM,MAAOV,EACPW,QAASR,EAAa,eACRA,EACdS,IAAK,GAAGd,EAAS5B,kBAEpB8B,GAEJF,EAASpC,mBACN2C,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,qCACXD,EAAAA,cAAAA,OAAAA,CAAMC,UAAU,2CAA2CJ,GAC3DG,EAAAA,cAAAA,SAAAA,CAAQC,UAAU,uCAAuCO,QAAST,GAAY,IACzEH,IAGT,OAqDMa,CACdhE,EAAMK,SACNL,EAAMiE,WACNjE,EAAMkE,kBACNlE,EAAMmD,gBACNnD,EAAMoC,kBAEVgB,YAAalB,EAAgBlC,EAAMK,SAASO,mBAAoBZ,EAAMoC,kBACtElC,kBAAmBF,EAAMK,SAASO,mBAClCuD,eAzDuB,EAACC,EAAkCvD,KAA2C,MACrG,MAAMwD,EAAWxD,MAAAA,GAAH,UAAGA,EAAiB4B,uBAApB,aAAG,EAAkCF,MAAKI,GAAUA,EAAOC,OAASwB,EAAY1B,yBAC9F,OAAO2B,MAAAA,OAAP,EAAOA,EAAUC,aAuDDC,CAAmBvE,EAAOA,EAAMa,iBAChD2D,eAAgB,CACZhB,UAAW,6IC9KvB,MAOMk6B,EAPoC19B,IACtC,MAAM,sBAAE29B,GAA0B39B,EAAM49B,UAClC,QAAEC,GAAY79B,EAEpB29B,GAAyBE,GAAWF,EAAsBE,IAYxDC,EAAoCtrB,GAAqC,KAC3EkrB,EAAyClrB,IAGhCurB,EAAuBvrB,IAChC,MAAM,GACFwrB,EADE,cAEFC,EAFE,gCAGFC,EAHE,mBAIFC,EAJE,SAKFP,EALE,KAMFl6B,EANE,cAOFoB,EAPE,QAQFG,EARE,iBASF8E,EATE,uBAUFq0B,GACA5rB,EAEJ,IAAKwrB,EACD,OAAO,KAGX,MASM,UAAEK,GAAcT,EAEtB,MAAO,CACH95B,IAAK,GAAGk6B,aACRM,mBAAoBC,EAA2Bt5B,EAASg5B,EAAcO,mBAAoB15B,EAAes5B,GACzGK,uBAAwBC,EAAiBlsB,GACzCmsB,kBACIp7B,EAAAA,cAAAA,MAAAA,KACIA,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,sCACXD,EAAAA,cAAAA,IAAAA,CAAG6H,KAlBc,MAAa,MAC1C,MAAM8a,EAAG,WAAGvR,EAAAA,EAAAA,IAAW,gBAAiB1P,EAAQ8F,sBAAvC,QAAyD,GAC5D6zB,EAAY1Y,EAAInD,SAAS,KAAO,IAAM,IAC5C,OAAIib,EACO,GAAG9X,IAAM0Y,OAAeZ,IAE5B,IAYca,GAA0B,aAAcn7B,GAC5CA,IAGTH,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,iCACVy6B,EAAca,WACd,IAFL,cAKAv7B,EAAAA,cAAAA,KAAAA,CAAIgY,MAAM,aAGlBwjB,gBACIx7B,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,4CACXD,EAAAA,cAACy7B,EAAAA,gCAA+B,CAC5Bv+B,GAAIu9B,EACJ/4B,QAASA,EACTD,SAAUwN,EAAMysB,eAChBxzB,KAAM,CACFwyB,cAAezrB,EAAMyrB,eAEzBz6B,UAAU,uCACV07B,cAAe1sB,EAAM2sB,aACrBC,cAAe5sB,EAAMtN,UACrB6E,iBAAkBA,EAClByxB,oCAAqChpB,EAAMgpB,uCAIvD6D,aACI97B,EAAAA,cAACsJ,EAAAA,OAAM,CACHrJ,UAAU,iCAAgC,aAC9B06B,EACZn6B,QAAS+5B,EAAiCtrB,KAGlD8sB,2BAA4BnB,GAAsBA,EAAmBjkB,QAAUikB,EAAmBoB,aAC9Fh8B,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,4BACXD,EAAAA,cAAC+X,EAAAA,MAAK,CAACC,MAAO4iB,EAAmBqB,gBAAiBtlB,OAAQikB,EAAmBjkB,OAAQC,OAAQkkB,GACzF96B,EAAAA,cAAAA,OAAAA,KAAO46B,EAAmBoB,iBAYxCE,EAAkB50B,GAAuB,KAC3CM,OAAO9J,SAASq+B,OAAO70B,IAGrB0zB,EAA6B,CAC/Bt5B,EACAu5B,EACA15B,EACAs5B,KAEA,MAAMpI,EAAuC,CACzCnkB,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCwkB,GAAI,CAAE1kB,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCG,UAAU,GAGd,GAAIosB,EAAoB,CACpB,MAAMlZ,EAAQkZ,EAAmBn8B,OAAS,EAAIm8B,EAAmBn8B,OAAS,EAE1E,OACIkB,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,sCACVg7B,MAAAA,OADL,EACKA,EAAoBmB,MAAM,EAAGra,GAAO9W,KAAI2M,IAAO,wBAC5C,MAAMtQ,EAAasQ,EAAKykB,YAClBC,EAAyB1kB,EAAKykB,YAAYE,eAAgB76B,EAASkW,MAAAA,GAA3C,UAA2CA,EAAM4kB,uBAAjD,aAA2C,EAAuBx0B,WAC1F,GAEN,OACIhI,EAAAA,cAACokB,EAAAA,GAAK,CACFL,QAAO,oBAAEnM,EAAKykB,mBAAP,aAAE,EAAkBE,eAAex5B,YAAnC,QAA2C,QAClD6J,eAAgBlL,EAAQ8F,cAAcoF,eACtCrM,IAAG,UAAEqX,EAAKykB,mBAAP,aAAE,EAAkBE,eAAex5B,KACtCkhB,IAAG,oBAAErM,EAAKykB,mBAAP,aAAE,EAAkBE,eAAe3zB,uBAAnC,QAAsD,GACzD6zB,YAAW,WACPC,EAAAA,EAAAA,qBAAmB,UACf9kB,EAAKykB,mBADU,aACf,EAAkBE,eAAexL,OACjCrvB,EAAQ8F,cAAcoF,eAAeC,YAFtB,UAGfnL,EAAQkB,QAAQ2H,WAHD,iBAGf,EAAqBC,cAHN,aAGf,EAA6BmyB,yBAJ1B,QAKF,GAETn7B,aAAcE,EAAQkB,QAAQpB,aAC9BD,cAAeA,MAAAA,EAAAA,EAAiBkxB,EAChCpO,oBAAoB,QACpB7jB,QAASq6B,GAA0BqB,EAAe50B,GAClDrH,UAAW46B,EAAyB,eAAiB,SAO7E,OAAO76B,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,wCAIpBq8B,EAA2B,CAACtxB,EAA+BtJ,EAAuBw2B,KACpF,MAAM5wB,GAAaC,EAAAA,EAAAA,mBAAkByD,EAAgBtJ,EAAQ8F,mBAAenD,GAC5E,IAAK+0B,EAAAA,iBAAAA,mBAAoC9xB,SAA6BjD,IAAd6zB,EAAyB,CAC7E,MAAMxwB,EAAU,IAAIC,IAAIL,EAAYM,OAAO9J,SAAS+J,MAEpD,OADAH,EAAQI,aAAaC,IAAI,YAAa,GAAGmwB,MAAAA,EAAAA,EAAa,KAC/CxwB,EAAQG,KAEnB,OAAOP,GAGL6zB,EAAoB1+B,IACtB,MAAM,KAAE0D,GAAS1D,EACjB,MAAO,GAAG0D,yBC7NP,MAAMy8B,EAAiF,IAAmC,IAAlC,UAAE38B,EAAF,UAAa48B,EAAb,KAAwBnX,GAAU,EAC7H,OAAQmX,GACJ,IAAK,QACD,OAAO78B,EAAAA,cAAAA,IAAAA,CAAGC,UAAWkK,GAAAA,CAAW,sCAAuClK,IAAaylB,GACxF,IAAK,SACD,OAAO1lB,EAAAA,cAAAA,IAAAA,CAAGC,UAAWkK,GAAAA,CAAW,uCAAwClK,IAAaylB,GACzF,IAAK,UACL,QACI,OAAO1lB,EAAAA,cAAAA,IAAAA,CAAGC,UAAU,yCAAyCylB,gLCfzE,MAAMoX,EAAgE98B,IAAAA,YA4DtE,EAtC6EvD,IACzE,MAAMsgC,EAAkB/8B,IAAAA,aAAkB,QAEvC,KACIg9B,EAAiCC,IAAkCC,EAAAA,EAAAA,WAAS,GAC7EC,EAAsBn9B,IAAAA,aAAkB,KAC1Ci9B,GAA+B,KAChC,IAEH,OACIj9B,IAAAA,cAAAA,IAAAA,SAAAA,KACIA,IAAAA,cAAAA,SAAAA,CACIC,UAAU,6DACV+X,MAAM,UACNxX,QAAS28B,EACTtN,IAAKiN,EAAyB,aAClBrgC,EAAM2gC,yBAEjB3gC,EAAM2gC,yBAEXp9B,IAAAA,cAACq9B,EAAAA,wBAAuB,CACpBp9B,UAAU,iCACVq9B,UAAWN,EACXO,gBAAgB,EAChBC,aAAcP,EACdv7B,QAASjF,EAAMiF,QACfxE,GAAIT,EAAMS,GACVgL,KAAM,GACNzG,SAAUhF,EAAMgF,SAChBo6B,cAAep/B,EAAMyF,mCACrBu7B,SAAUV,EACV/yB,UAAWvN,EAAMihC,uBACjBC,iBAAkBb,2kBCVlC,IAAMc,EAAN,cAAgC59B,EAAAA,UAC5BiN,YAAYxQ,GACRyQ,MAAMzQ,GAmIO,KAAAohC,yCAA2C,KACxD,IAAI5F,GAAsC,EACP,IAAD,IAA9BvqB,KAAKjR,MAAMyL,KAAKgK,eAChB+lB,GACI,UAAAvqB,KAAKjR,MAAMyL,KAAKgK,aAAalU,cAA7B,mBAAqCgB,MACjC8+B,GAA4B,2DAAjBA,EAAQ/6B,cADvB,eAEGsP,aAAa,GAExB,OAAO4lB,GAgDM,KAAA8F,WAAa,KAC1BrwB,KAAKM,SAAS,CACV2I,QAAQ,KAIC,KAAAqnB,YAAcxgC,UAC3BoK,OAAO9J,SAASmgC,UAGH,KAAAC,+BAAkCC,IAC/C,MAAM,QAAEz8B,EAAF,KAAWwG,EAAX,UAAiBuD,EAAjB,UAA4B9J,GAAc+L,KAAKjR,OAC/C,eAAE8F,GAAmB2F,EAE3B,GAAIxG,GAAWA,EAAQ8F,cAAe,CAElC,GADkB9F,EAAQkB,QAAQC,KAAKF,iBAAmBjB,EAAQkB,QAAQC,KAAKu7B,OAC9D77B,EAAevE,QAAUuE,EAAevE,OAAO,IAAMmgC,EAAe,CACjF,MAAMzD,EAAgBn4B,EAAevE,OAAOgB,MAAK+L,GAAKA,EAAEszB,YAAY5D,KAAO0D,IACvEzD,GACA4D,EAAAA,EAAAA,aAAY,CAAEtH,cAAet1B,EAAQ8F,eAAiBkzB,EAAc2D,aAC/DtgC,OACAI,OAAOC,IACJqN,EAAU4D,QAAQ,0DAClB5D,EAAUrN,MAAMA,GAChBsP,KAAKM,SAAS,CACVssB,QAAS6D,EACTI,oBAAqB58B,EAAU68B,8BAC/BvC,gBAAiB,SACjBwC,aAAc,8BACd9nB,QAAQ,OAGf5Y,KAAK2P,KAAKswB,aACV7/B,OAAOC,IACJqN,EAAU4D,QAAQ,0DAClB5D,EAAUrN,MAAMA,MAGxBqN,EAAU4D,QAAQ,4FAGtB5D,EAAU4D,QAAQ,4DAnO1B3B,KAAKQ,MAAQ,CACTosB,QAAS,GACT0B,YAAa,GACbuC,oBAAqB,GACrBtC,gBAAiB,UACjBwC,aAAc,eACd9nB,QAAQ,GAIc,0BAC1BjJ,KAAKM,SAAS,IAGX8C,sBACHC,EACAC,GAEA,OAAItD,KAAKQ,QAAU8C,GAAatD,KAAKjR,MAAMyL,OAAS6I,EAAU7I,KAM3D+I,SAAM,QACT,MAAM,UAAEhR,EAAF,QAAaslB,GAAY7X,KAAKjR,MAAM+N,QACpC,uBAAEk0B,EAAF,4BAA0BC,GAAgCjxB,KAAKjR,MAAMkF,WACrE,eAAEY,GAAmBmL,KAAKjR,MAAMyL,KAChC02B,EAAqBr8B,GAAkBA,EAAevE,OACtD6gC,EAAwB,UAAGtZ,MAAAA,OAAH,EAAGA,EAASG,YAAZ,QAAoBhY,KAAKjR,MAAMkF,UAAUm9B,uBAEvE,GAA8B,YAA1Bv8B,EAAetE,OAAsB,CAAC,IAAD,EACrC,MAAM8gC,EAAU,OACRrxB,KAAKjR,OADG,IAEZmhC,kBAAmB,CACfvI,YAAa3nB,KAAKjR,MAClBwD,UAAWkK,GAAAA,CAAW,oBAAqBlK,IAE/ChC,OAAQ,UACR+gC,cAAeh/B,EAAAA,cAACi/B,EAAAA,EAAO,CAACh/B,UAAU,oBAAoBi/B,IAAKxxB,KAAKjR,MAAMkF,UAAUw9B,2BAChF5Z,QACIvlB,EAAAA,cAACo/B,EAAAA,QAAO,CAACn/B,UAAU,6BAA6B6X,IAAG,UAAEyN,MAAAA,OAAF,EAAEA,EAASzN,WAAX,QAAc,KAAmB4N,KAAMmZ,MAGlG,OAAOnxB,KAAKjR,MAAMgZ,WAAWspB,GAGjC,GAAIH,GAAoD,IAA9BA,EAAmB9/B,OAAc,CAAC,IAAD,EAEvD,MAAMugC,EAAc,OACZ3xB,KAAKjR,OADO,IAEhBmhC,kBAAmB,CACfvI,YAAa3nB,KAAKjR,MAClBwD,UAAWkK,GAAAA,CAAW,oBAAqBlK,IAE/ChC,OAAQ,QACR+gC,cAAeh/B,EAAAA,cAAC48B,EAAAA,EAA8B,CAACC,UAAU,QAAQnX,KAAMgZ,IACvEY,0BACIt/B,EAAAA,cAACu/B,EAAgC,CAC7B79B,QAASgM,KAAKjR,MAAMiF,QACpBxE,GAAIwQ,KAAKjR,MAAMS,GACfuE,SAAUiM,KAAKjR,MAAMgF,SACrByG,KAAM,GACNk1B,wBAAyBuB,EACzBjB,uBAAwBhwB,KAAKswB,YAC7B97B,mCAAoCwL,KAAKgH,0CAA0ChH,KAAKjR,MAAMkF,aAGtG4jB,QACIvlB,EAAAA,cAACo/B,EAAAA,QAAO,CAACn/B,UAAU,6BAA6B6X,IAAG,UAAEyN,MAAAA,OAAF,EAAEA,EAASzN,WAAX,QAAc,KAAmB4N,KAAMmZ,MAIlG,OAAOnxB,KAAKjR,MAAMgZ,WAAW4pB,GAGjC,MAAMtsB,EAAS,OACPrF,KAAKjR,OADE,IAEXmhC,kBAAmB,CACfvI,YAAa3nB,KAAKjR,MAClBwD,UAAWkK,GAAAA,CAAW,oBAAqBlK,IAE/ChC,OAAQ,UACRsnB,QAASvlB,EAAAA,cAACo/B,EAAAA,QAAO,CAACn/B,UAAU,6BAA6B6X,IAAG,UAAEyN,MAAAA,OAAF,EAAEA,EAASzN,WAAX,QAAc,KAAmB4N,KAAMmZ,IACnGS,0BACIt/B,EAAAA,cAACu/B,EAAgC,CAC7B79B,QAASgM,KAAKjR,MAAMiF,QACpBxE,GAAIwQ,KAAKjR,MAAMS,GACfuE,SAAUiM,KAAKjR,MAAMgF,SACrByG,KAAM,GACNk1B,wBAAyBuB,EACzBjB,uBAAwBhwB,KAAKswB,YAC7B97B,mCAAoCwL,KAAKgH,0CAA0ChH,KAAKjR,MAAMkF,aAGtG69B,4BAA6B9xB,KAAKQ,MAAMyI,QAAUjJ,KAAKQ,MAAMqwB,qBACzDv+B,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,sCACXD,EAAAA,cAAC+X,EAAAA,MAAK,CAACC,MAAOtK,KAAKQ,MAAM+tB,gBAAiBtlB,OAAQjJ,KAAKQ,MAAMyI,OAAQC,OAAQlJ,KAAKqwB,YAC9E/9B,EAAAA,cAAAA,OAAAA,KAAO0N,KAAKQ,MAAMqwB,uBAI9BkB,eAAgB,CACZx/B,UAAW,+BACX6X,IAAK,MAET4nB,cAAe,CACXz/B,UAAW,0BACX6X,IAAK,MAETvV,eAAgBq8B,GAAsBlxB,KAAKiyB,yBAAyBf,KAGxE,OAAOlxB,KAAKjR,MAAMgZ,WAAW1C,GAGzB2B,0CAA0C/S,GAC9C,MAAO,CACHwa,yBAA0Bxa,EAAUya,0BACpCC,wBAAyB1a,EAAU2a,mBACnCC,2BAA4B5a,EAAU4a,2BACtCC,yBAA0B7a,EAAU8a,+BAEpCC,yBAA0B/a,EAAU+a,yBAEpCC,yBAA0Bhb,EAAUib,8BACpCC,+BAAgClb,EAAUmb,0CAe1C6iB,yBAAyBp9B,GAC7B,MAAM,QAAEb,EAAF,UAAW+J,GAAciC,KAAKjR,OAC9B,cAAE8E,EAAF,uBAAiBs5B,GAA2BntB,KAAKjR,MAAM+N,OAC7D,OAAOjI,EAAe0I,KAAI,CAACyvB,EAA8Bt5B,KACrD,MAAMw+B,EAAkD,CACpDhF,mBAAoBltB,KAAKQ,MACzBusB,GAAIC,EAAc2D,YAAY5D,GAC9Bt6B,KAAMu6B,EAAc2D,YAAYt7B,KAChC23B,cAAAA,EACAh5B,QAAAA,EACAH,cAAAA,EACAs5B,uBAAAA,EACAF,gCAAiC,SACjCiB,aAAcluB,KAAKjR,MAAMkF,UAAUk+B,mBACnCz+B,MAAAA,EACAk5B,QAASI,EAAc2D,YAAY5D,GACnChvB,UAAAA,EACAq0B,SAAUpyB,KAAKjR,MAAMS,GACrBw+B,eAAgBhuB,KAAKjR,MAAMgF,SAC3B44B,SAAU,CACND,sBAAuB1sB,KAAKwwB,+BAC5BpD,UAAWptB,KAAKqwB,YAEpBp8B,UAAW,CACPo+B,sBAAuBryB,KAAKjR,MAAMkF,UAAUo+B,sBAC5CC,wBAAyBtyB,KAAKjR,MAAMkF,UAAUq+B,wBAC9CC,wBAAyBvyB,KAAKjR,MAAMkF,UAAUs+B,wBAC9CC,wBAAyBxyB,KAAKjR,MAAMkF,UAAUu+B,wBAC9CC,0BAA2BzyB,KAAKjR,MAAMkF,UAAUw+B,0BAChDC,gCAAiC,CAC7BC,mBAAoB3yB,KAAKjR,MAAMkF,UAAU0+B,mBACzCC,6BAA8B5yB,KAAKjR,MAAMkF,UAAU2+B,6BACnDC,mCAAoC7yB,KAAKjR,MAAMkF,UAAU4+B,mCACzDC,mCAAoC9yB,KAAKjR,MAAMkF,UAAU6+B,mCACzDC,sCAAuC/yB,KAAKjR,MAAMkF,UAAU8+B,sCAC5DC,kCAAmChzB,KAAKjR,MAAMkF,UAAU++B,oCAGhEzI,oCAAqCvqB,KAAKmwB,4CAG9C,OAAOrD,EAAAA,EAAAA,GAAoBoF,QAzLjChC,GAAiB,SADtB5d,EAAAA,IACK4d,GA4ON,0GCtRO,MAAM+C,EAA+DlkC,IACxE,MAAM,kBACFmhC,EADE,OAEF3/B,EAFE,cAGF+gC,EAHE,QAIFzZ,EAJE,eAKFka,EALE,eAMFl9B,EANE,cAOFm9B,EAPE,0BAQFJ,EARE,4BASFE,GACA/iC,EAEJ,OACIuD,EAAAA,cAACm2B,EAAAA,OAAM5sB,OAAAA,OAAAA,GAAKq0B,GACPrY,EACW,YAAXtnB,GAAwB+gC,EACzBh/B,EAAAA,cAACkgB,EAAAA,KAAI,CAACjgB,UAAU,IACXq/B,EACAE,GAEJC,GAAkBl9B,GAAkBA,EAAezD,OAAS,GACzDkB,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAKk2B,GACLl9B,GACGA,EAAe0I,KAAIyvB,GACRkG,EAAqBlG,EAAegF,QAQjEkB,EAAuB,CAAClG,EAA8CgF,KACxE,MAAM,IAAEn/B,EAAF,gBAAOi7B,EAAP,mBAAwBT,EAAxB,2BAA4CgB,EAA5C,aAAwED,EAAxE,kBAAsFV,GAAsBV,EAClH,OACI16B,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,CAAChJ,IAAKA,EAAKN,UAAWy/B,EAAez/B,WAAey/B,GACpDtE,EACAL,EACAS,EACAM,EACAC,IAKb,+CClDA,QAAgBt/B,GACZuD,EAAAA,cAAAA,EAAAA,SAAAA,KACIA,EAAAA,cAAAA,MAAAA,CAAKC,UAAW,GAAGxD,EAAMwD,8BACxBxD,MAAAA,OAAA,EAAAA,EAAOyiC,MAAOl/B,EAAAA,cAAAA,MAAAA,CAAKC,UAAW,GAAGxD,EAAMwD,2BAA4BxD,MAAAA,OAArD,EAAqDA,EAAOyiC,8DC4D9E2B,yzBAAL,SAAKA,GACDA,EAAAA,EAAAA,OAAAA,GAAAA,SACAA,EAAAA,EAAAA,YAAAA,GAAAA,cACAA,EAAAA,EAAAA,qBAAAA,GAAAA,uBACAA,EAAAA,EAAAA,SAAAA,GAAAA,WACAA,EAAAA,EAAAA,MAAAA,GAAAA,QACAA,EAAAA,EAAAA,QAAAA,GAAAA,UANJ,CAAKA,IAAAA,EAAO,KAyBL,MAAMC,UAA0B9gC,IAAAA,UAwBnCiN,YAAYxQ,GACRyQ,MAAMzQ,GAxBH,KAAAyR,MAAiC,CACpCyI,QAAQ,EACRoqB,MAAO,GACPj2B,SAAU,GACVk2B,gBAAiB,GACjBC,QAASJ,EAAQK,OACjBC,gBAAiB,KACjBC,kBAAmB,GAGhB,KAAA3O,qBAAuC,CAC1CnkB,UAAW,CACPC,GAAI,CAAEC,EAAG,gBAAiBC,EAAG,EAAGC,EAAG,GACnCE,GAAI,CAAEJ,EAAG,gBAAiBC,EAAG,EAAGC,EAAG,GACnCwkB,GAAI,CAAE1kB,EAAG,gBAAiBC,EAAG,EAAGC,EAAG,IAEvCG,UAAU,GAGP,KAAAwyB,gBAAqDrhC,IAAAA,YAE3C,KAAAshC,iBAAuDthC,IAAAA,YAwEvD,KAAAuhC,kBAAoB,KACjC,MACI5/B,WAAW,sBAAE6/B,EAAF,2BAAyBC,EAAzB,uBAAqDC,IAChEh0B,KAAKjR,MAET,OACIuD,IAAAA,cAAAA,OAAAA,CACIC,UAAU,wCAAuC,aACrCuhC,EACZrhC,KAAK,mCACLqW,KAAK,OACLmrB,aAAa,MACbC,SAAUl0B,KAAKm0B,iBAEdn0B,KAAKQ,MAAM8yB,iBAAmBt8B,EAAAA,gBAAAA,YAA4BgJ,KAAKQ,MAAM8yB,kBAClEhhC,IAAAA,cAAAA,IAAAA,SAAAA,KACIA,IAAAA,cAAAA,QAAAA,CAAOC,UAAW,2CAA4C6hC,QAAS,6CAClEJ,GAEL1hC,IAAAA,cAAAA,SAAAA,CACI9C,GAAG,6CACH+C,UAAU,kFACVG,SAAUsN,KAAKq0B,2BAEdr0B,KAAKs0B,qBAIlBhiC,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,qEACXD,IAAAA,cAAAA,QAAAA,CACIE,KAAK,OACL+hC,WAAS,eACGR,EACZxhC,UAAU,0DACViiC,YAAaT,EACbphC,MAAOqN,KAAKQ,MAAM6yB,MAClB3gC,SAAUsN,KAAKy0B,eACftS,IAAKniB,KAAK2zB,gBACVe,UAAW,MAEfpiC,IAAAA,cAAAA,SAAAA,CAAQC,UAAU,0CAAyC,aAAauhC,EAAuBxpB,MAAM,eAMpG,KAAA6pB,gBAAmB9zB,IAChCA,EAAMmgB,iBAEN,MAAM6S,EAAQ,IAAIrzB,KAAM,gCAAiC,MAEpDqzB,IAILrzB,KAAKM,SAAS,CACVizB,QAASJ,EAAQwB,UAGrB30B,KAAK40B,kBAAkBvB,GAClBhjC,MAAKC,IACoB,IAAlBA,EAAOc,OACP4O,KAAKM,SAAS,CACVlD,SAAU9M,EACVijC,QAASJ,EAAQ0B,WAGrB70B,KAAKM,SAAS,CACVlD,SAAU9M,EACVijC,QAASJ,EAAQ2B,iBAI5BrkC,OAAMC,IACHsP,KAAKM,SAAS,CACVizB,QAASJ,EAAQjK,aAKhB,KAAA6L,yBAA4B10B,IACzCL,KAAKM,SAAS,CACV00B,kBAAmB30B,EAAMslB,OAAOhzB,SAIvB,KAAAsiC,cAAgBnlC,MAAAA,IAC7B,MAAM,cACFgK,EACA5E,SACIiK,aAAa,UAAEW,KAEnBE,KAAKjR,MAAMiF,QACTkhC,EAAgB,IAAIC,EAAAA,qBAAqBhmC,EAAQ0O,SAAUiC,EAAW,QAAInJ,EAAWqJ,KAAKjR,MAAMiF,QAAQkB,SACxGkgC,QAAuBC,EAAAA,EAAAA,oBAAmBH,EAAep7B,GAE/D,IAAKs7B,EAED,OADAp1B,KAAKjR,MAAMiF,QAAQ+J,UAAUrN,MAAM,oCAC5BC,QAAQC,QAAQ,IAG3B,MAAM0kC,QAAmBt1B,KAAKu1B,sBAAsBpmC,GAQpD,OANA6Q,KAAKM,SAAS,CACVk1B,0BAA2BF,EAC3B/B,QAASJ,EAAQsC,qBACjBhC,gBAAiB2B,IAGdE,GAGM,KAAAb,eAAkBp0B,IAC/BL,KAAKM,SAAS,CACV+yB,MAAOhzB,EAAMslB,OAAOhzB,SAIX,KAAA+iC,0BAA4B,KACzC11B,KAAKM,SAAS,CACVizB,QAASJ,EAAQ2B,eAIR,KAAAa,qBAAwBljC,IACrC,MAAMmjC,EAAanjC,GAAQojC,SAASpjC,EAAKiF,QAAQ,IAAIga,OAAO1R,KAAKQ,MAAM6yB,MAAO,KAAM,oBAEpF,OACI/gC,IAAAA,cAAAA,MAAAA,CACIC,UAAU,0CAEVujC,wBAAyB,CAAEC,OAAQH,GAAc,OAK5C,KAAAI,iBAAmB,IACzBh2B,KAAKjR,MAAMkF,UAAUgiC,0BACvBv+B,QAAQ,UAAWsI,KAAKQ,MAAMpD,SAAShM,OAAOuG,YAC9CD,QAAQ,YAAa,GAAGsI,KAAKjR,MAAMkF,UAAUiiC,4BAA4Bl2B,KAAKQ,MAAMpD,SAAShM,OAAS,EAAI,IAAM,MAuExG,KAAA+kC,0BAA4BrmC,MAAAA,IACzC,MAAM,gBACFsmC,EACApiC,SAAS,cAAE8F,GAFT,oCAGFywB,GACAvqB,KAAKjR,MACHy7B,EAAYxqB,KAAKQ,MAAMkzB,kBACvBnyB,EAAQgpB,EACR,IAAI8L,EAAAA,4BACAD,EACAt5B,EAAO3N,QAAQ0O,SACff,EAAOJ,SACPI,EAAO3N,QAAQmnC,sBAAwB,KACvC/L,EACAC,GAEJ,IAAI6L,EAAAA,4BACAD,EACAt5B,EAAO3N,QAAQ0O,SACff,EAAOJ,SACPI,EAAO3N,QAAQmnC,sBAAwB,MAE3ChmC,QAAeimC,EAAAA,EAAAA,wBAAuBh1B,EAAOzH,GAOnD,OANAkG,KAAKM,SAAS,CACV2I,QAAQ,EACRutB,YAAY,IAGhBt8B,OAAO9J,SAASmgC,SACTjgC,GAuCM,KAAA+jC,0BAA6Bh0B,IAC1CL,KAAKM,SAAS,CACVozB,kBAAmBjZ,OAAOC,SAASra,EAAMslB,OAAOhzB,MAAO,OA2C9C,KAAA8jC,oBAAsB,KACnC,GAAIz2B,KAAKQ,MAAMyI,OAAQ,CACnB,MAAMrG,GAAUhK,EAAAA,EAAAA,kBAAiB,QAASoH,KAAKjR,MAAM+J,iBAAmB,uBAAwB,KAChG49B,EAAAA,EAAAA,kBAAiB12B,KAAKjR,MAAM+J,iBAAmB8J,EAAS,wBACxD5C,KAAK22B,eACL32B,KAAK4zB,iBAAiB3Z,QAAS2c,QAGnC52B,KAAKM,SAAS,CACV2I,QAASjJ,KAAKQ,MAAMyI,OACpBsqB,QAASJ,EAAQK,SAGjBxzB,KAAKQ,MAAMg2B,aACXt8B,OAAO9J,SAASmgC,SAChBvwB,KAAKM,SAAS,CACVk2B,YAAY,MArZjBK,sBAAmB,MACtB,UAAA72B,KAAK2zB,gBAAgB1Z,eAArB,SAA8B2c,QAG3B7U,oBACH/hB,KAAK22B,eAGFG,uBAAoB,MACvB,UAAA92B,KAAK2zB,gBAAgB1Z,eAArB,SAA8B2c,QAGP,oBACvB,OAAO52B,KAAKQ,MAAM+yB,UAAYJ,EAAQsC,qBAGnCryB,sBAAsBC,EAAoCC,GAC7D,OAAItD,KAAKQ,QAAU8C,GAAatD,KAAKjR,QAAUsU,EAM5CE,SACH,MACItP,WAAW,qBAAE8iC,EAAF,kBAAwBC,IACnCh3B,KAAKjR,MAEHkoC,EAAU,OACTj3B,KAAKjR,OADI,IAEZwD,UAAW,2BACX2W,OAAQlJ,KAAKy2B,oBACbxtB,OAAQjJ,KAAKQ,MAAMyI,OACnBsM,UAAWwhB,IAGf,OACIzkC,IAAAA,cAAAA,IAAAA,SAAAA,KACIA,IAAAA,cAAC0W,EAAAA,MAAKnN,OAAAA,OAAAA,GAAKo7B,GACP3kC,IAAAA,cAAC6W,EAAAA,YAAW,CAACD,OAAQlJ,KAAKy2B,qBACrBz2B,KAAKk3B,eACF5kC,IAAAA,cAAAA,SAAAA,CACIE,KAAK,SACLD,UAAU,yBAAwB,aACtBykC,EACZlkC,QAASkN,KAAK01B,4BAGrBqB,GAEJ/2B,KAAKm3B,kBAEV7kC,IAAAA,cAAAA,SAAAA,CACIE,KAAK,SACLD,UAAU,2CAA0C,aACxCwkC,EACZjkC,QAASkN,KAAKy2B,oBACdtU,IAAKniB,KAAK4zB,kBAEVthC,IAAAA,cAAAA,OAAAA,MACCykC,IAoJTI,iBACJ,OAAQn3B,KAAKQ,MAAM+yB,SACf,KAAKJ,EAAQsC,qBACT,MAAM,gBAAEhC,EAAF,0BAAmB+B,GAA8Bx1B,KAAKQ,MACtD6E,EAAS,OACRrF,KAAKjR,OADG,IAEX8E,cAAemM,KAAKjR,MAAM8E,eAAiBmM,KAAK+kB,qBAChD51B,QAASskC,EACT6B,WAAYE,EACZ4B,qBAAsBp3B,KAAKm2B,0BAC3BkB,wBAAyBr3B,KAAK+0B,yBAC9BuC,oBAAqBt3B,KAAK21B,qBAC1B4B,WAAYv3B,KAAK6zB,sBAGrB,OAAOvhC,IAAAA,cAACmjC,EAAoB55B,OAAAA,OAAAA,GAAKwJ,IAErC,KAAK8tB,EAAQ2B,YACT,MAAM0C,EAAY,OACXx3B,KAAKjR,OADM,IAEd8E,cAAemM,KAAKjR,MAAM8E,eAAiBmM,KAAK+kB,qBAChD0S,aAAcz3B,KAAKi1B,cACnB73B,SAAU4C,KAAKQ,MAAMpD,SACrBk6B,oBAAqBt3B,KAAK21B,qBAC1B4B,WAAYv3B,KAAK6zB,oBACjB6D,sBAAuB13B,KAAKg2B,mBAGhC,OACI1jC,IAAAA,cAAC8W,EAAAA,UAAS,KACN9W,IAAAA,cAACwiC,EAAWj5B,OAAAA,OAAAA,GAAK27B,KAI7B,KAAKrE,EAAQwB,QACT,OACIriC,IAAAA,cAAC8W,EAAAA,UAAS,KACLpJ,KAAK6zB,oBACNvhC,IAAAA,cAACi/B,EAAAA,EAAO,CAACh/B,UAAU,2BAA2Bi/B,IAAKxxB,KAAKjR,MAAMkF,UAAUw9B,4BAIpF,KAAK0B,EAAQ0B,SACT,MAAM,0BAAE8C,EAAF,+BAA6BC,GAAmC53B,KAAKjR,MAAMkF,UAEjF,OACI3B,IAAAA,cAAC8W,EAAAA,UAAS,KACN9W,IAAAA,cAAAA,IAAAA,CAAGC,UAAU,iDAAiDyN,KAAKg2B,oBAClEh2B,KAAK6zB,oBACNvhC,IAAAA,cAACulC,EAAiB,CAACnnC,MAAOinC,EAA2BnG,IAAKoG,KAItE,KAAKzE,EAAQjK,MACT,OACI52B,IAAAA,cAAC8W,EAAAA,UAAS,KACLpJ,KAAK6zB,oBACNvhC,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,mBAAkB,YAAW,aACvCyN,KAAKjR,MAAMkF,UAAU6jC,qBAKtC,QACI,OAAOxlC,IAAAA,cAAC8W,EAAAA,UAAS,KAAEpJ,KAAK6zB,sBAwC5B8C,eACJ,MAAM,oCAAEpM,EAAF,SAAuC9a,GAAazP,KAAKjR,MAGzDukC,EAAkB/I,GAAuC9a,EAAWA,EAAW,GAG/E+a,GAAYP,EAAAA,EAAAA,IAAajqB,KAAKjR,MAAMiF,QAAQkB,UAClDg1B,EAAAA,EAAAA,mBAAkBM,GAElBxqB,KAAKM,SAAS,CACVgzB,gBAAiBA,EACjBI,kBAAmBlJ,IAInB8J,mBACJ,MAAM,gBAAEhB,EAAF,kBAAmBI,GAAsB1zB,KAAKQ,MACpD,OAAI8yB,GAAmBt8B,EAAAA,gBAAAA,YAA4Bs8B,GACxCA,EAAgB/1B,KAAKw6B,IAExB,MAAMC,EAAaD,EAAel6B,WAAa61B,EAC/C,OACIphC,IAAAA,cAAAA,SAAAA,CAAQK,MAAOolC,EAAel6B,SAAUhL,IAAKklC,EAAel6B,SAAUo6B,SAAUD,EAAU,gBAAiBA,GACtGD,EAAe1iC,SAKzB,GASHu/B,kBAAkBsD,GACtB,MACIlkC,SAAS,cACL8F,EACA5E,SACIiK,aAAa,UAAEW,MAGvBE,KAAKjR,OACH,kBAAE2kC,GAAsB1zB,KAAKQ,MAC7B23B,EAA6C,GASnD,OAPAA,EAAoBC,QAAU,CAC1BC,UAAWv4B,EACXxF,UAAWo5B,GAEfyE,EAAoBG,mBAAoB,EACxCH,EAAoBI,gBAAkBL,GAE/BM,EAAAA,EAAAA,uBAAsB,CAAElP,cAAexvB,GAAiBq+B,GAGhC,4BAAChpC,GAChC,MACI6E,SAAS,cACL8F,EACA5E,SACIiK,aAAa,UAAEW,MAGvBE,KAAKjR,MACHS,EAAKL,EAAQspC,gBAAkBtpC,EAAQspC,gBAAkBtpC,EAAQ0O,SAEvE,OAAO66B,EAAAA,EAAAA,iCACH,IAAIC,EAAAA,qCAAqCnpC,EAAIsQ,EAAW,GAAIE,KAAKjR,MAAMiF,QAAQkB,SAC/E4E,KArXE8+B,EAAAA,EAAAA,IAAAA,CAATC,EAAAA,IAAS,kCC/FP,MAAMC,UAAiBxmC,EAAAA,cAG1BiN,YAAYxQ,EAAuByR,GAC/BhB,MAAMzQ,GAHO,KAAAgqC,WAAiDzmC,EAAAA,YA2CjD,KAAA0mC,WAAc34B,IAC3BL,KAAKM,SAAS,CAAE24B,cAAe54B,EAAMslB,OAAOhzB,QAExCqN,KAAKjR,MAAM2D,UACXsN,KAAKjR,MAAM2D,SAAS,CAChBwmC,WAAYl5B,KAAKjR,MAAMmqC,WACvBC,SAAU94B,EAAMslB,OAAOhzB,MACvBymC,cAAe/4B,EAAMslB,OAAO0T,aA9CpCr5B,KAAKQ,MAAQ,CACTy4B,cAAe,IAIhBlX,oBACC/hB,KAAK+4B,WAAW9e,UAChBja,KAAK+4B,WAAW9e,QAAQgf,cAAgB,GAIzC11B,SACH,MAAM,WAAE21B,EAAF,aAAcI,EAAd,aAA4BC,GAAiBv5B,KAAKjR,MAExD,OACIuD,EAAAA,cAAAA,SAAAA,CACI9C,GAAI,uBAAuB0pC,IAC3B/W,IAAKniB,KAAK+4B,WAAU,aACRQ,EACZhnC,UAAU,uBACVG,SAAUsN,KAAKg5B,YAEdM,EAAa/7B,KACTY,GACGA,GACI7L,EAAAA,cAAAA,SAAAA,CACIK,MAAOwL,EAAK3O,GACZqD,IAAKsL,EAAK3O,GACVyoC,UAAWj4B,KAAKQ,MAAMy4B,gBAAmB96B,EAAK3O,GAAE,iBAChCwQ,KAAKQ,MAAMy4B,gBAAmB96B,EAAK3O,IAElD2O,EAAKxL,WCrE/B,MAAMklC,EAAqB9oC,GAC9BuD,EAAAA,cAAAA,EAAAA,SAAAA,KACIA,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,8CACfD,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,4CAA4CxD,EAAM2B,OACjE4B,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,iEAAiExD,EAAMyiC,kBCqB9F,IAAqBgI,EAArB,cAAmDlnC,EAAAA,cAS/CiN,YAAYxQ,GACRyQ,MAAMzQ,GAHO,KAAA0qC,SAA8CnnC,EAAAA,YA2G9C,KAAAonC,aAAe,KAC5B,MAAMC,OAA8BhjC,IAAnBqJ,KAAKjR,MAAM6qC,IAAoB,EAAI55B,KAAKjR,MAAM6qC,IAE3DC,MAAM75B,KAAKQ,MAAMs5B,eAAiB95B,KAAKQ,MAAMs5B,aAAeH,EAC5D35B,KAAKjR,MAAM2D,UAAYsN,KAAKjR,MAAM2D,SAASinC,GAE3C35B,KAAKjR,MAAM2D,UAAYsN,KAAKjR,MAAM2D,SAASsN,KAAKQ,MAAMs5B,eA7G1D95B,KAAKQ,MAAQ,CAAEs5B,aAAc/qC,EAAMgrC,cAAgB,GACnD/5B,KAAKg6B,cAAgBh6B,KAAKg6B,cAAcn3B,KAAK7C,OAE7CkD,EAAAA,EAAAA,KACI,IAAMlD,KAAKjR,MAAMgrC,eACjB,KACI/5B,KAAKM,SAAS,CAAEw5B,aAAc95B,KAAKjR,MAAMgrC,cAAgB,OAK9Dx2B,SACH,MAAM02B,EAA8B,GAAGj6B,KAAKjR,MAAMmrC,+CAC5CC,EAA6B,GAAGn6B,KAAKjR,MAAMqrC,+CAC3C9zB,EAAWtG,KAAKjR,MAAMgrC,eAAiB/5B,KAAKjR,MAAM6qC,IAClDS,EAAcr6B,KAAKjR,MAAMgrC,eAAiB/5B,KAAKjR,MAAMurC,IACrDC,EAAev6B,KAAKQ,MAAMs5B,aAChC,IAAIU,EAAa,GACbl0B,EAEAk0B,EAAa,WACNx6B,KAAKjR,MAAMuX,WAElBk0B,EAAa,cAEjB,MAAMC,EAAoBC,GAAmB,KACzC16B,KAAK26B,qBAAqBD,IAG9B,OACIpoC,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,YACXD,EAAAA,cAAAA,SAAAA,CACIgU,SAAUtG,KAAKjR,MAAMuX,UAAYA,EACjCxK,MAAOwK,EAAW,GAAKtG,KAAKjR,MAAM2hB,yBAClCne,UAAW,gCAAgCioC,IAC3C1nC,QAAS2nC,GAAkB,GAAE,8BAEjB,GAAGz6B,KAAKjR,MAAM2hB,2BAC1B7H,UAAW,EACXyB,MAAM,aAENhY,EAAAA,cAAAA,OAAAA,CAAMC,UAAW0nC,KAErB3nC,EAAAA,cAAAA,QAAAA,CACIE,KAAK,SACLD,UAAU,iBACVqoC,QAAQ,SACRjoC,MAAO4nC,EACP7nC,SAAUsN,KAAKg6B,cACf3Y,OAAQrhB,KAAK05B,aAAY,YACf,SAAQ,aACN,GAAG15B,KAAKjR,MAAM0hB,yBAC1B3H,KAAK,aAAY,gBACF,EAAC,gBACD9I,KAAKjR,MAAMurC,IAAG,gBACdC,EACfpY,IAAKniB,KAAKy5B,SACVnzB,SAAUtG,KAAKjR,MAAMuX,WAEzBhU,EAAAA,cAAAA,SAAAA,CACIgU,SAAUtG,KAAKjR,MAAMuX,UAAY+zB,EACjCv+B,MAAOu+B,EAAc,GAAKr6B,KAAKjR,MAAM4hB,yBACrCpe,UAAW,iCAAgC8nC,EAAc,WAAa,IACtEvnC,QAAS2nC,EAAiB,GAAE,8BAEhB,GAAGz6B,KAAKjR,MAAM4hB,2BAC1B9H,UAAW,EACXyB,MAAM,aAENhY,EAAAA,cAAAA,OAAAA,CAAMC,UAAW4nC,MAMzBQ,qBAAqBD,GACzB,MAAMG,EAAkB76B,KAAKQ,MAAMs5B,aAAeY,EAE9CG,GAAmB,GAAKA,GAAmB76B,KAAKjR,MAAMurC,KACtDt6B,KAAKjR,MAAM2D,UAAYsN,KAAKjR,MAAM2D,SAASmoC,GAI3Cb,cAAcc,GAClB,MAAMP,EAAe9f,OAAOC,SAASogB,EAAEnV,OAAOhzB,MAAO,IAC/CgnC,OAA8BhjC,IAAnBqJ,KAAKjR,MAAM6qC,IAAoB,EAAI55B,KAAKjR,MAAM6qC,IACzDmB,EACF/6B,KAAKy5B,UAAYz5B,KAAKy5B,SAASxf,SAAWja,KAAKy5B,SAASxf,mBAAmB+gB,kBAAoBh7B,KAAKy5B,SAASxf,QAE7GsgB,EAAev6B,KAAKjR,MAAMurC,IAC1Bt6B,KAAKM,SAAS,CAAEw5B,aAAc95B,KAAKjR,MAAMurC,MAEzCt6B,KAAKM,SAAS,CAAEw5B,aAAcS,IAAgB,KAC1C,KAAS,KACAV,MAAM75B,KAAKQ,MAAMs5B,eAAmB95B,KAAKQ,MAAMs5B,aAAeH,IAAaoB,IAC5EA,EAAaE,aAAa,gBAAiBV,EAAa5iC,YACxDojC,EAAaE,aAAa,QAASV,EAAa5iC,eAErD,IALH,QAvGE6hC,EAAAA,aAAwC,CAClDI,IAAK,EACLM,oBAAqB,eACrBE,oBAAqB,eAJRZ,GAAqB,SADzClnB,EAAAA,IACoBknB,GAAA,+kBCwBd,MAAM/D,UAA6BnjC,IAAAA,UAGtCiN,YAAYxQ,GACRyQ,MAAMzQ,GAHF,KAAAmsC,mBAAyB,GA6LhB,KAAAC,oBAAuBC,GACpCp7B,KAAKjR,MAAMkF,UAAUonC,sBAAsB3jC,QAAQ,mBAAoB0jC,GAE1D,KAAAE,sBAAwBxrC,MAAAA,IAErCkQ,KAAKM,SAAS,CACVi7B,QAAQ,EACRC,qBAAqB,EACrB9wB,OAAO,OAAM1K,KAAKQ,MAAMkK,QAAlB,IAA0B+wB,SAAK9kC,MAGzC,MAAM+kC,EAAoB17B,KAAKQ,MAAM80B,WAChC/3B,KAAI/D,GAAaA,EAAUC,mBAAmB9B,aAC9CK,QAAOxF,IAASwN,KAAKk7B,mBAAmB1oC,KAE7CwN,KAAKM,SAAS,CACVoK,OAAQ,CAAElR,UAAWkiC,KAErBA,EAAkBtqC,OAAS,EAC3B4O,KAAKM,SAAS,CACVi7B,QAAQ,IAKhBv7B,KAAKjR,MACAqoC,qBADL,KAC+Bp3B,KAAKQ,QAC/BnQ,MAAKE,IAEEA,EAAOorC,eACP37B,KAAKM,SAAS,CACVi7B,QAAQ,EACRC,qBAAqB,OAIhC/qC,OAAMC,IACH,MAAM,4BAAEkrC,EAAF,0BAA+BC,GAA8B77B,KAAKjR,MAAMkF,UAC9E,IAAIwC,EAGAA,EADqB,wDAArB/F,EAAMA,MAAM+B,KACGmpC,EAEAC,EAGnB77B,KAAKM,SAAS,CACVi7B,QAAQ,EACR7wB,OAAO,OAAM1K,KAAKQ,MAAMkK,QAAlB,IAA0B+wB,IAAKhlC,MAEzCuJ,KAAKjR,MAAMiF,QAAQ+J,UAAUrN,MAAM,2CAI9B,KAAAorC,kBAAqBC,IAClC/7B,KAAKM,SAAS,CACV5D,SAAUq/B,EACVC,WAAYD,EAAW/7B,KAAKjR,MAAMI,QAAQmoB,SAIjC,KAAA2kB,sBAAwB,CACrCC,EACAC,KAEA,GAAIA,GAAcD,EAAqBE,gBACnC,OAAOF,EAAqBE,gBAAgB9qC,MAAKkI,GAAaA,EAAUqE,YAAcs+B,KAO7E,KAAAE,oBAAsBvsC,MAAAA,IAAyD,QAC5F,MAAM,QAAEX,EAAF,WAAWmmC,EAAX,QAAuBthC,GAAYgM,KAAKjR,OACxC,cACF+K,EACA5E,SACIiK,aAAa,UAAEW,KAEnB9L,EAGEsoC,EAAyB,UAAGt8B,KAAKQ,MAAMkK,cAAd,iBAAG,EAAmBlR,iBAAtB,aAAG,EAA8BxB,QAAOxI,GAAMA,IAAO+sC,EAAUrD,WAAWvhC,aAEzGqI,KAAKM,SAAS,CACVi7B,QAAQ,EACRC,qBAAqB,EACrBgB,gBAAgB,EAChB9xB,OAAQ,CAAE+wB,SAAK9kC,EAAW6C,UAAW8iC,KAIzCt8B,KAAKk7B,mBAAmBqB,EAAUrD,aAAeqD,EAAUpD,SAE3D,MAAMsD,EAAmBnH,MAAAA,OAAH,EAAGA,EACnB/3B,KAAI/D,IACK,CACHC,mBAAoBD,EAAUC,mBAC9BC,eACIsG,KAAKi8B,sBAAsBziC,EAAWwG,KAAKk7B,mBAAmB1hC,EAAUC,sBACxED,EAAUE,eACdgjC,oBAAqBljC,EAAUkjC,wBAGtC1kC,QAAOwB,GACGA,GAAaA,EAAUE,iBAGhCijC,QAAuBtH,EAAAA,EAAAA,oBACzB,IAAIF,EAAAA,qBACAhmC,EAAQspC,gBAAkBtpC,EAAQspC,gBAAkBtpC,EAAQ0O,SAC5DiC,EACA28B,OACA9lC,EACAqJ,KAAKjR,MAAMiF,QAAQkB,SAEvB4E,GAGJ,IAAK6iC,EAID,YAHA38B,KAAKjR,MAAMiF,QAAQ+J,UAAUrN,MACzB,gDAAgDvB,EAAQspC,gBAAkBtpC,EAAQspC,gBAAkBtpC,EAAQ0O,YAKpH,MAAM++B,EAAiB,IAAIjE,EAAAA,qCACvBgE,EAAe9+B,SACfiC,EACA28B,EACAz8B,KAAKjR,MAAMiF,QAAQkB,SAEjB2nC,QAA0BnE,EAAAA,EAAAA,iCAAgCkE,EAAgB9iC,GAEhF,IAAK+iC,EAKD,OAJA78B,KAAKjR,MAAMiF,QAAQ+J,UAAUrN,MAAM,qEACnCsP,KAAKM,SAAS,CACVk8B,gBAAgB,IAKxB,MAAMM,EAAoB,IAAIC,EAAAA,6CAC1B5tC,EAAQspC,gBAAkBtpC,EAAQspC,gBAAkBtpC,EAAQ0O,SAC5DiC,GAIEk9B,QAA6BC,EAAAA,EAAAA,4CAA2CH,EAAmBhjC,GAC3FojC,EAAa,IAAIC,EAAAA,6BAA6BhuC,EAAQ0O,SAAUiC,GAChEs9B,QAAqBC,EAAAA,EAAAA,4BAA2BH,EAAYpjC,GAElE,IAAKsjC,EAKD,OAJAp9B,KAAKjR,MAAMiF,QAAQ+J,UAAUrN,MAAM,gEACnCsP,KAAKM,SAAS,CACVk8B,gBAAgB,IAKxBx8B,KAAKM,SAAS,CACVk8B,gBAAgB,EAChBc,yBAA2BN,GAAwBA,EAAqB,SAAOrmC,EAC/E4mC,YAAaH,EAAanmB,WAAa9nB,EAAQmoB,OAC/Cge,WAAYuH,EAAkBW,MAAK,CAACC,EAAGC,IAAMD,EAAEhkC,mBAAqBikC,EAAEjkC,qBACtEtK,QAASwtC,KAIA,KAAAgB,iBAAmB,CAACC,EAAuB3pC,KACxD,OAAQ2pC,GACJ,KAAK,EACD,OAAO3pC,EAAU+b,0BACrB,KAAK,EACD,OAAO/b,EAAUic,kCACrB,KAAK,EACD,OAAOjc,EAAU6b,yBACrB,KAAK,EACD,OAAO7b,EAAUmc,0BACrB,QACI,MAAO,KA7WfpQ,KAAKQ,MAAQ,CACT9D,SAAU,EACV6gC,UAAWxuC,EAAMI,QAAQmoB,MACzB0kB,WAAYjtC,EAAMI,QAAQmoB,MAC1BnoB,QAASJ,EAAMI,QACfmmC,WAAYvmC,EAAMumC,WAAWkI,MAAK,CAACC,EAAGC,IAAMD,EAAEhkC,mBAAqBikC,EAAEjkC,qBACrEyhC,mBAAoB,GACpBsB,gBAAgB,EAChBhB,qBAAqB,GAItBp4B,sBAAsBC,EAAuCC,GAChE,OAAItD,KAAKQ,QAAU8C,GAAatD,KAAKjR,QAAUsU,EAM5CE,SAAM,gBACT,MACIvP,SACI8F,eACIoF,gBAAgB,YAAEC,IAEtBjK,SAAS,aAAEpB,IAEfG,WAAW,sBACP4pC,EADO,8BAEPC,EAFO,yBAGPptB,EAHO,yBAIPC,EAJO,oBAKPotB,EALO,kCAMPC,EANO,gBAOPC,GAdF,cAgBFpqC,EAhBE,oBAiBFyjC,GACAt3B,KAAKjR,OACH,eAAEytC,EAAF,QAAkBrtC,EAAlB,SAA2BuN,EAA3B,UAAqC6gC,EAArC,WAAgDvB,EAAhD,oBAA4DR,EAA5D,OAAiF9wB,GAAW1K,KAAKQ,MACjG09B,EAA0Bl+B,KAAKjR,MAAMw7B,oCAAsC,0BAA4B,GAC7G,OACIj4B,IAAAA,cAAAA,IAAAA,SAAAA,KACIA,IAAAA,cAAC8W,EAAAA,UAAS,KACLpJ,KAAKjR,MAAMwoC,WACZjlC,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,4CACXD,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,8DACXD,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,8DACXD,IAAAA,cAACokB,EAAAA,GAAK,CACFL,QAAO,UAAElnB,EAAQkG,YAAV,QAAkB,QACzB6J,eAAgBc,KAAKjR,MAAMiF,QAAQ8F,cAAcoF,eACjDqX,IAAG,UAAEpnB,MAAAA,OAAF,EAAEA,EAAS+L,uBAAX,QAA8B,GACjC6zB,YAAW,WACPC,EAAAA,EAAAA,qBACI7/B,MAAAA,OADe,EACfA,EAASk0B,OACTlkB,EAFe,UAGfa,KAAKjR,MAAMiF,QAAQkB,QAAQ2H,WAHZ,iBAGf,EAAgCC,cAHjB,aAGf,EAAwCmyB,yBAJrC,QAKF,GAET18B,UAAU,YACVsB,cAAeA,EACfC,aAAcA,EACd6iB,oBAAoB,UAExBrkB,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,iDACXD,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,yCAAyCpD,MAAAA,OAAxD,EAAwDA,EAASk0B,QAChEiU,EAAmB,UAACnoC,MAAAA,OAAD,EAACA,EAASkG,YAAV,QAAkB,IACtC/C,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,iDACVurC,EACA,IACA99B,KAAKm+B,aAAaZ,IAEvBjrC,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,0CACVyrC,EACA,IACA7uC,MAAAA,OAHL,EAGKA,EAASmnC,wBAItBhkC,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,wDAAwDyN,KAAKo+B,wBAEhF9rC,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,sBACXD,IAAAA,cAAAA,MAAAA,KAAMyrC,GACNzrC,IAAAA,cAACknC,EAAqB,CAClBhqC,GAAG,qDACHuqC,aAAcr9B,EACdhK,SAAUsN,KAAK87B,kBACfrrB,uBAAuB,mCACvB6pB,IAAK,IACL5pB,yBAA0BA,EAC1BC,yBAA0BA,MAItCre,IAAAA,cAAAA,MAAAA,CAAKC,UAAW,kDAAkD2rC,KAC7DD,EACA,IACAj+B,KAAKm+B,aAAanC,KAG3B1pC,IAAAA,cAACkX,EAAAA,YAAW,KACPgyB,GACGlpC,IAAAA,cAAAA,MAAAA,CACIC,UAAU,oEAAmE,YACnE,YACVuW,KAAK,SAELxW,IAAAA,cAAAA,OAAAA,CAAAA,cAAkB,SACjB0N,KAAKq+B,4BAGb3zB,MAAAA,OAAA,EAAAA,EAAQ+wB,MACLnpC,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,kEACXD,IAAAA,cAAAA,OAAAA,CAAMC,UAAU,2BAA0B,cAAa,SACtDmY,EAAO+wB,KAGhBnpC,IAAAA,cAACsJ,EAAAA,OAAM,CACHrJ,UAAWkK,GAAAA,CAAW,0DAA2D,CAAE,UAAWuD,KAAKQ,MAAM+6B,SAAS,aACtGsC,EACZ/qC,QAASkN,KAAKs7B,sBACdh1B,SAAUk2B,GAETqB,KAObQ,0BACJ,MAAMC,EAAyBt+B,KAAKQ,MAAM80B,WACrC/3B,KAAI/D,IAAY,QACb,IAAIupB,EAAO,UAAGvpB,EAAU4iC,uBAAb,iBAAG,EAA2B9qC,MACrCqB,GAASA,EAAMkL,WAAamC,KAAKk7B,mBAAmB1hC,EAAUC,6BADvD,aAAG,EAEXE,MAIH,OAHqC,IAAjCH,EAAUC,qBACVspB,EAAU,QAAQA,KAEfA,KAEV/qB,QAAOrF,GAASA,IAErB,OAAOqN,KAAKjR,MAAMkF,UAAUsqC,0BACvB7mC,QAAQ,UAAWsI,KAAKQ,MAAM9D,SAAS/E,YACvCD,QAAQ,yBAA0B,GAAGsI,KAAKQ,MAAMrR,QAAQkG,SAASwG,OAAO2iC,OAAOF,GAAwBhmC,KAAK,SAG7G8lC,sBACJ,MAAM,WAAE9I,GAAet1B,KAAKQ,OACtB,UAAEvM,GAAc+L,KAAKjR,MAE3B,OAAOumC,MAAAA,OAAP,EAAOA,EAAY/3B,KAAK/D,IAAmC,QACvD,MAAM,gBAAE4iC,EAAF,mBAAmB3iC,GAAuBD,EAK1C4hC,EAAgBp7B,KAAK29B,iBAAiBlkC,EAAoBxF,GAC1DqlC,EAAqC8C,EAAkBA,EAAgB7+B,KALtD5K,IAAD,CAClBnD,GAAImD,EAAMkL,SACVlL,MAAOA,EAAMgH,OAAS,OAG4F,GAGtH,OAFA2/B,EAAamF,QAAQ,CAAEjvC,GAAI,EAAGmD,MAAO,YAAYyoC,MAG7C9oC,IAAAA,cAAAA,MAAAA,CAAKO,IAAK4G,GACNnH,IAAAA,cAAAA,MAAAA,KAAM8oC,IACL,UAAAp7B,KAAKQ,MAAMkK,cAAX,mBAAmBlR,iBAAnB,eAA8BsY,SAASrY,EAAmB9B,cACvDrF,IAAAA,cAAC+X,EAAAA,MAAK,CAACC,MAAM,SAASC,WAAS,eAAavK,KAAKm7B,oBAAoBC,IACjE9oC,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,oBAAmB,cAAa,QAC3CD,IAAAA,cAAAA,OAAAA,CAAMC,UAAU,6BAChBD,IAAAA,cAAAA,OAAAA,KAAO0N,KAAKm7B,oBAAoBC,MAI5C9oC,IAAAA,cAACwmC,EAAQ,CACLI,WAAYz/B,EACZ8/B,aAAcv5B,KAAK29B,iBAAiBlkC,EAAoBxF,GACxDqlC,aAAcA,EACd5mC,SAAUsN,KAAKq8B,0BAgM3B8B,aAAannB,GACjB,MACIhjB,SACI0qC,kBAAkB,eACdC,EADc,aAIdC,KAGR5+B,KAAKjR,MAET,OAAO4vC,EAAe3nB,EAAMpB,QAAQ,GAAIgpB,ICnazC,MAAM9J,EAAe/lC,IACxB,MAAM,SACFqO,EACApJ,SACI8F,eACIoF,gBAAgB,YAAEC,IAEtBjK,SAAS,aAAEpB,GACX4qC,kBAAkB,eACdC,EADc,aAIdC,IAXN,aAcFnH,EAdE,oBAeFH,EAfE,sBAgBFI,EACAzjC,WAAW,wBAAE4qC,GAjBX,cAkBFhrC,GACA9E,EAEJ,OACIuD,IAAAA,cAAAA,IAAAA,SAAAA,KACIA,IAAAA,cAAAA,IAAAA,CAAGC,UAAU,gDAA+C,YAAW,aAClEmlC,KAEJ3oC,EAAMwoC,WACPjlC,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,0CACV6K,EAASG,KAAI,CAACpO,EAA8BuE,KAAiB,YAC1D,MAAM,MAAE4jB,EAAF,OAAS+L,EAAT,KAAiBhuB,EAAjB,gBAAuB6F,GAAoB/L,EAC3C6nB,EAAQ2nB,EAAernB,EAAM1B,QAAQ,GAAIgpB,GACzCE,EAAkB,WAAGC,EAAAA,EAAAA,kBAAiB7jC,MAAAA,EAAAA,EAAmB,GAAIiE,UAA3C,QAA2D,GAC7E6/B,EAAW,WAAGhQ,EAAAA,EAAAA,qBAAoB3L,EAAQlkB,EAAT,UAAsBpQ,EAAMiF,QAAQkB,QAAQ2H,WAA5C,iBAAsB,EAA2BC,cAAjD,aAAsB,EAAmCmyB,yBAA/E,QAAoG,GAErH,OACI38B,IAAAA,cAAAA,MAAAA,CAAKO,IAAK,WAAWa,IAASnB,UAAU,qCACpCD,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,8DACXD,IAAAA,cAACokB,EAAAA,GAAK,CACFL,QAAShhB,MAAAA,EAAAA,EAAQ,QACjB6J,eAAgBnQ,EAAMiF,QAAQ8F,cAAcoF,eAC5CqX,IAAKuoB,EACL/P,YAAaiQ,EACbzsC,UAAU,YACVuB,aAAcA,EACdD,cAAeA,EACf8iB,oBAAoB,UAExBrkB,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,gDAA+C,YAAW,UACrED,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,yCAAyC8wB,GACvDiU,EAAoBjiC,MAAAA,EAAAA,EAAQ,MAGrC/C,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,sDACXD,IAAAA,cAAAA,OAAAA,KAAO0kB,GACP1kB,IAAAA,cAAC2sC,EAAmB,CAAC9vC,QAASA,EAAS0tB,WAAYgiB,EAAyBpH,aAAcA,YAgBpHwH,EAAuBlwC,IACzB,MAAOwsC,EAAQ2D,IAAW1P,EAAAA,EAAAA,WAAS,IAC7B,QAAErgC,EAAF,WAAW0tB,EAAX,aAAuB4a,GAAiB1oC,EACxCowC,EAAkB7sC,IAAAA,aAAkBxC,UACtCovC,GAAS3D,SACH9D,EAAatoC,GACnB+vC,GAAS3D,KACV,CAAC9D,EAAc8D,EAAQpsC,IAE1B,OACImD,IAAAA,cAACsJ,EAAAA,OAAM,CACHrJ,UAAWkK,GAAAA,CAAW,mDAAoD,CAAE,UAAW8+B,IAAS,aACpF,GAAGpsC,EAAQkG,QAASwnB,IAChC/pB,QAASqsC,GAERtiB,kOC/EN,MAAMuiB,UAAiC9sC,EAAAA,cAA9CiN,cAAAA,SAAAA,WACW,KAAAiB,MAAwC,CAC3C6+B,eAAe,EACfC,kBAAkB,GAkHL,KAAAC,WAAcl/B,IAC3BL,KAAKM,SAAS,CACV++B,eAAe,IAGnBr/B,KAAKjR,MAAMywC,sBAEXx/B,KAAKM,SAAS,CACV++B,eAAe,KAIN,KAAAI,cAAiBp/B,IAC9BL,KAAKM,SAAS,CACVg/B,kBAAkB,IAGtBt/B,KAAKjR,MAAM2wC,qBAhIuB,gCAClC3wC,EACAyR,GAEA,MAAMm/B,EAAgB5wC,EAAM4wC,cAAcvuC,OAC1C,IAAIkS,uWAAS,IAAQ9C,GAKrB,OAJA8C,EAAY,CACR+7B,cAAiC,IAAlBM,EACfL,iBAAoC,IAAlBK,GAEfr8B,EAGJC,SAAM,MACT,MAAM,qBACFwzB,EADE,sBAEFjD,EAFE,qBAGF8L,EAHE,2BAIF7L,EAJE,uBAKFC,EALE,wBAMF6K,EANE,sBAOFhB,EAPE,8BAQFC,EARE,eASF+B,EATE,yBAUFnvB,EAVE,yBAWFC,EAXE,oBAYFotB,EAZE,kCAaFC,EAbE,0BAcFrG,EAdE,+BAeFC,EAfE,mBAgBFE,EAhBE,0BAiBF9nB,EAjBE,kCAkBFE,EAlBE,yBAmBFJ,EAnBE,0BAoBFM,EApBE,2BAqBF0vB,EArBE,8BAsBFC,EAtBE,0BAuBF9J,EAvBE,0BAwBFC,EAxBE,0BAyBFqI,EAzBE,gBA0BFN,EA1BE,yBA2BFxM,EA3BE,4BA4BFmK,EA5BE,0BA6BFC,EA7BE,sBA8BFR,GACAr7B,KAAKjR,MAAMkF,UAET+rC,EAAe,CACjBhsC,QAASgM,KAAKjR,MAAMiF,QACpB8E,iBAAkBkH,KAAKjR,MAAM+J,iBAC7B7E,UAAW,CACP8iC,qBAAAA,EACAjD,sBAAAA,EACA8L,qBAAAA,EACA7L,2BAAAA,EACAC,uBAAAA,EACA6K,wBAAAA,EACAhB,sBAAAA,EACAC,8BAAAA,EACA+B,eAAAA,EACAnvB,yBAAAA,EACAC,yBAAAA,EACAotB,oBAAAA,EACAC,kCAAAA,EACArG,0BAAAA,EACAC,+BAAAA,EACAE,mBAAAA,EACA9nB,0BAAAA,EACAE,kCAAAA,EACAJ,yBAAAA,EACAM,0BAAAA,EACA6lB,0BAAAA,EACAC,0BAAAA,EACAqI,0BAAAA,EACAN,gBAAAA,EACAxM,yBAAAA,EACAmK,4BAAAA,EACAC,0BAAAA,EACAR,sBAAAA,GAEJxnC,cAAemM,KAAKjR,MAAM+N,OAAOjJ,cACjCuiC,gBAAiBp2B,KAAKjR,MAAMqnC,gBAC5B7L,oCAAqCvqB,KAAKjR,MAAMw7B,oCAChD9a,SAAQ,UAAEzP,KAAKjR,MAAMyL,KAAKiV,gBAAlB,aAAE,EAA0Bnf,QAGxC,OACIgC,EAAAA,cAAAA,EAAAA,SAAAA,KACIA,EAAAA,cAAC8gC,EAAiBv3B,OAAAA,OAAAA,GAAKmkC,IACvB1tC,EAAAA,cAACsJ,EAAAA,OAAM,CACH9I,QAASkN,KAAKu/B,WACdj5B,SAAUtG,KAAKQ,MAAM6+B,cACrB9sC,UAAU,sBAAqB,aACnButC,GAEZxtC,EAAAA,cAAAA,OAAAA,OACE0N,KAAKjR,MAAMkxC,gBAAkBH,GAEnCxtC,EAAAA,cAACsJ,EAAAA,OAAM,CACH9I,QAASkN,KAAKy/B,cACdn5B,SAAUtG,KAAKQ,MAAM8+B,iBACrB/sC,UAAU,kBAAiB,aACfwtC,GAEZztC,EAAAA,cAAAA,OAAAA,OACE0N,KAAKjR,MAAMkxC,gBAAkBF,KCpFnD,MAAMG,EAA4BnxC,GAAsC,KACpEoxC,EAAqBpxC,IAmBnBoxC,EAAwBpxC,IAC1B,MACIyL,MAAM,cAAEwyB,GADN,SAEFL,GACA59B,GACE,iBAAEqxC,GAAqBzT,EAEzByT,GACAA,EAAiBpT,EAAc2D,YAAY5D,KAI7CsT,EAAoCtxC,IACtC,MACIyL,MAAM,cAAEwyB,GADN,SAEFj5B,EAFE,GAGFvE,EAHE,QAIFwE,EAJE,iBAKF8E,EALE,UAMF7E,EANE,oCAOFs2B,GACAx7B,GACE,2BACFuxC,EADE,sBAEFjO,EAFE,wBAGFC,EAHE,wBAIFC,EAJE,wBAKFC,EALE,0BAMFC,EANE,gCAOFC,GACAz+B,EAEEk6B,EAAgB,CAClBkE,sBAAAA,EACAC,wBAAAA,EACAC,wBAAAA,EACAC,wBAAAA,EACAC,0BAAAA,EACAC,gCAAAA,GAGJ,OACIpgC,EAAAA,cAACy7B,EAAAA,gCAA+B,CAC5B/5B,QAASA,EACTxE,GAAIA,EACJuE,SAAUA,EACVyG,KAAM,CAAEwyB,cAAAA,GACRz6B,UAAU,GACV07B,cAAeqS,EACfnS,cAAeA,EACfr1B,iBAAkBA,EAClByxB,oCAAqCA,KAK3CgW,EAAkCxxC,IACpC,MAAM,iCAAEyxC,EAAF,UAAoCvsC,EAApC,QAA+CD,EAA/C,SAAwD24B,GAAa59B,EAC3E,OACIuD,EAAAA,cAACmuC,EAAAA,6BAA4B,CACzBC,iBAAkB/T,EAAS+T,iBAC3BnuC,UAAU,iCACVyB,QAASA,EACTxE,GAAIT,EAAMS,GACVgL,KAAM,CAAEwyB,cAAej+B,EAAMyL,KAAKwyB,cAAc2D,aAChD58B,SAAUhF,EAAMgF,SAChBysC,iCAAkCA,EAClCG,8BAA+B1sC,EAAU2sC,yBACzCrW,qCAAmC,KAK/C,IAAIsW,EACG,MAAMC,EAA4D/xC,IACrE,MAAOgyC,EAAqCC,IAA0CxR,EAAAA,EAAAA,WAAS,IACxFyR,EAA+B1R,GAAkCj9B,EAAAA,UAAe,GAYjF4uC,EAAoB,KACtBF,GAAwCD,KAGxCvmC,MAAM,cAAEwyB,GADN,UAEF/4B,EAFE,iCAGFusC,EAHE,QAIFxsC,GACAjF,EAEEwD,EAAY,+BAEZ4uC,EAAmB7uC,EAAAA,YACnB8uC,EACF9uC,EAAAA,cAACq9B,EAAAA,wBAAuB,CACpB0R,sBAAuBrU,EAAc2D,YACrCd,gBAAc,EACdt9B,UAAU,iCACVq9B,UAAWqR,EACXnR,aAAcP,EACdv7B,QAASA,EACTxE,GAAIT,EAAMS,GACVgL,KAAMzL,EAAMyL,KACZkzB,kBAAmB3+B,EAAMyL,KAAKwyB,cAAc2D,YAAYt7B,KACxDtB,SAAUhF,EAAMgF,SAChBo6B,cAAeqS,EACfzQ,SApC0B,KAAK,MACnC/7B,EAAQ+J,UAAU6D,MAAM,oCACJ,QAApB,EAAAi/B,SAAA,SAAsBjK,SAmClBt6B,UAAWvN,EAAM49B,SAAS+T,mBAG5BY,EAAiC,iCAAiCC,EAAAA,OAAAA,KAAAA,iBAExE,OACIjvC,EAAAA,cAAAA,MAAAA,CAAKC,UAAW,GAAGA,eACd6uC,EACD9uC,EAAAA,cAACsJ,EAAAA,OAAM,CACHrJ,UACIwuC,EACM,GAAGxuC,wCACH,GAAGA,0CAEbO,QAASouC,EACTM,SAAUL,EAAgB,gBACZ,OAAM,gBACLJ,EACfvxC,GAAI8xC,GAEJhvC,EAAAA,cAAAA,OAAAA,CAAMC,UAAW,GAAGA,4CAAqD,YAE7ED,EAAAA,cAACmvC,EAAAA,QAAO,mBACaH,EACjB/uC,UAAW,GAAGA,+CACd0W,OAAQ83B,EACRW,UAAU,SACV/b,OAAQwb,EACRj4B,OAAQg4B,EACRp4B,KAAK,UAAS,eACAi4B,GAEdzuC,EAAAA,cAACsJ,EAAAA,OAAM,CAACrJ,UAAW,GAAGA,qDAA8DO,QAhEnEuN,IACzBwgC,EAAuBxgC,EAAMslB,OAC7B4J,GAA+B,GAC/BlvB,EAAMmgB,mBA8DOvsB,EAAU2sC,0BAGftuC,EAAAA,cAACsJ,EAAAA,OAAM,CACH9I,QAASotC,EAAyBnxC,GAClCwD,UAAW,GAAGA,qDACduW,KAAK,UAEJ,aC5If64B,EAA4B5yC,IAC9B,MAAM,kBAAE6yC,EAAF,gBAAqB9S,EAArB,SAAsCpyB,EAAtC,SAAgDiwB,GAAa59B,GAC7D,OAAEoB,EAAF,UAAUmK,GAAcw0B,GACxB,WAAE+S,EAAF,aAAcC,GAAiBnV,EAErC,MAAO,CACHoV,YAAa,IAAO1hC,IAChBlQ,GACIyxC,EAAkBjT,aAClBkT,EAAWD,EAAkBjT,YAAYE,eAAgBnyB,EAAUvM,EAAQmK,IAEnF0nC,cAAe,IAAO3hC,GAAyClQ,GAAU2xC,EAAa/yC,EAAM6yC,qBAS9FK,EAASlzC,IACX,MAAM,mBAAEojC,EAAF,iCAAsB+P,EAAtB,eAAwDC,EAAxD,uBAAwEC,GAA2BrzC,EAAMkF,WACxGouC,EAAYC,IAAiB9S,EAAAA,EAAAA,WAAS,GAOvCtmB,EAAS5W,IAAAA,aAAkB,KAC7BgwC,GAAeD,KAChB,CAACA,IAEJ,OACI/vC,IAAAA,cAAAA,MAAAA,CAAKC,UAAW,gCACZD,IAAAA,cAACsJ,EAAAA,OAAM,CACHrJ,UAAW,6BAAyC,aACxC4vC,EAAc,YACfpzC,EAAM2E,MACjBZ,QAASoW,IAEZm5B,GACG/vC,IAAAA,cAAAA,MAAAA,CAAKC,UAAW,uBACZD,IAAAA,cAACsJ,EAAAA,OAAM,CACHrJ,UAAU,2BACVO,QApBUuN,IAC1BtR,EAAMwzC,uBAAuBxzC,IAoBb+M,MAAOsmC,EAAsB,aACjBA,GAAsB,QAIrCI,EACGzzC,EAAM+zB,SACN/zB,EAAM0zC,sBACNP,EACAP,EAAyB5yC,GAAOizC,iBAEnCQ,EACGzzC,EAAM+zB,SACN/zB,EAAM2zC,mBACNvQ,EACAwP,EAAyB5yC,GAAOgzC,kBAQlDS,EAAkB,CACpB1f,EACAvwB,EACAsqB,EACA4a,IAEAnlC,IAAAA,cAACsJ,EAAAA,OAAM,cAAaihB,EAAYtqB,UAAWA,EAAWO,QAAS2kC,EAAc37B,MAAO+gB,GAC/EiG,EAAWjG,EAAa,IAI3B8lB,EAAyB,CAC3BpwC,EACAsqB,EACA4a,IAEAnlC,IAAAA,cAACsJ,EAAAA,OAAM,cAAaihB,EAAYtqB,UAAWA,EAAWO,QAAS2kC,EAAc37B,MAAO+gB,GAC/EA,GASH+lB,EAAsB,CAAChB,EAAgDrgC,IACzElB,IAEAuhC,EAAkBiB,WAAajB,EAAkBiB,UAEjDthC,EAAMorB,SAASmW,SAASlB,EAAmBvhC,EAAMslB,OAAO/yB,UAmGtDmwC,EAAqBh0C,IACvB,MAAOi0C,EAAaC,IAAkBzT,EAAAA,EAAAA,WAAS,GACzCtmB,EAAS5W,IAAAA,aAAkB,KAC7B2wC,GAAgBD,KACjB,CAACA,IAEEzwC,EAAY,mDACZ2wC,EAA4B,GAAG3wC,uBACrC,OACID,IAAAA,cAAAA,MAAAA,CAAKC,UAAWA,GACZD,IAAAA,cAACsJ,EAAAA,OAAM,CAACrJ,UAAW,GAAGA,YAAmB,aAAc,GAAIO,QAASoW,IACnE85B,GACG1wC,IAAAA,cAAAA,MAAAA,CAAKC,UAAW2wC,GACXP,EACG,qDACA,aACAhB,EAAyB5yC,GAAOgzC,eAEnCY,EACG,wDACA,cACAhB,EAAyB5yC,GAAOizC,oBAQ3CmB,EAA+B5hC,IAA2E,QACnH,MAAM,kBAAEqgC,EAAF,gBAAqB9S,EAArB,MAAsC9X,EAAtC,QAA6ChjB,EAA7C,cAAsDH,EAAtD,oCAAqE02B,GAAwChpB,EAC7GpS,EAAUyyC,EAAkBjT,aAC5B,OAAEx+B,EAAF,cAAUizC,GAAkBtU,EAClC,IAAK3/B,EACD,OAEJ,MAAM,OAAEk0B,EAAF,gBAAUnoB,GAAoB/L,EAAQ0/B,eACtCwU,GAAgBrU,EAAAA,EAAAA,qBAClB3L,EACArvB,EAAQ8F,cAAcoF,eAAeC,YAFA,UAGrCnL,EAAQkB,QAAQ2H,WAHqB,iBAGrC,EAAqBC,cAHgB,aAGrC,EAA6BmyB,kBAGjC,MAAO,CACHqU,mBAAoB/Y,GAAuCgZ,GAAqBhiC,GAChFiiC,aAAcC,EACV,YACAzvC,EACA7E,EAAQ0/B,eAAex5B,KACvB6F,EACAmoC,EACAxvC,GAEJ6vC,YAAaC,GAAkBpiC,GAC/B67B,aAAcpmB,GAAS4sB,GAAariC,GACpCsiC,cAAexgB,EACfygB,qBAAsBV,IAAiBpsB,MAAAA,OAAJ,EAAIA,EAAOosB,eAC9CW,oBAAqBC,EAAkBziC,EAAOpR,KAgBhD8zC,EAAkB,CACpBC,EACAtX,EACA79B,IACEgtC,IACEmI,GACAA,EAAiBtX,EAASmP,EAAUhtC,IAItCi1C,EAAoB,CAACj1C,EAAgC69B,KACvD,MAAM,SAAED,EAAF,UAAY14B,EAAZ,SAAuByI,GAAa3N,GACpC,iBAAEm1C,GAAqBvX,EAC7B,OACIr6B,IAAAA,cAACknC,EAAqB,CAClBO,aAAcr9B,EACdhK,SAAUuxC,EAAgBC,EAAkBtX,EAAS79B,GACrDurC,IAAK,UACL7pB,uBAAwBxc,EAAUwc,uBAClCE,yBAA0B1c,EAAU0c,yBACpCD,yBAA0Bzc,EAAUyc,yBACpCpK,SAAUvX,EAAMo1C,+BAKfV,EAAsB,CAC/BlxC,EACAyB,EACA6jB,EACAusB,EACAf,EACAxvC,KACoB,QAUpB,OACIvB,IAAAA,cAACokB,EAAAA,GAAK,CACFxX,eAAgBlL,MAAAA,GAAF,UAAEA,EAAS8F,qBAAX,aAAE,EAAwBoF,eACxC3M,UAAWA,EACX8jB,QAASwB,EACT/b,MAAO+b,EACPtB,IAAK6tB,EACLrV,YAAasU,EACbvvC,aAAcE,MAAAA,GAAF,UAAEA,EAASkB,eAAX,aAAE,EAAkBpB,aAChCD,cAAeA,GAlBsB,CACzC+M,UAAW,CACPC,GAAI,CAAEC,EAAG,gBAAiBC,EAAG,EAAGC,EAAG,GACnCE,GAAI,CAAEJ,EAAG,gBAAiBC,EAAG,EAAGC,EAAG,GACnCwkB,GAAI,CAAE1kB,EAAG,gBAAiBC,EAAG,EAAGC,EAAG,IAEvCG,UAAU,GAaNwV,oBAAoB,QACpB9N,SAAU,KAKT06B,GAAwBx0C,IACjC,MAAMy7B,EAAYz7B,EAAM+/B,gBAAgBx0B,UAGxC,IAFA4vB,EAAAA,EAAAA,mBAAkBM,IAEbz7B,EAAMiF,QAAQkB,QAAQC,KAAKkvC,QAAU7Z,IAAcxzB,EAAAA,gBAAAA,YAA4BjI,EAAM0gB,UACtF,OAAO,KAGX,MAAM60B,EAAUv1C,EAAM0gB,SAASne,MAAK6M,GAAQA,EAAKN,WAAa2sB,IAE9D,OAAK8Z,GAAYA,EAAQjvC,KAIlB/C,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,gCAAgC+xC,EAAQjvC,MAHnD,MAMTuuC,GAAgB70C,IAClB,MAAM,MAAEioB,EAAF,QAAShjB,EAAT,SAAkBo+B,EAAlB,eAA4BpE,EAA5B,UAA4C/5B,GAAclF,EAEhE,OAAIioB,EAEI1kB,IAAAA,cAAC8kB,EAAAA,eAAc,CACX5nB,GAAI4iC,EACJr+B,SAAUi6B,EACVxzB,KAAM,CAAEwc,MAAAA,GACRzkB,UAAU,8CACVob,cAAe1Z,EAAU0Z,cACzBC,kBAAmB3Z,EAAU2Z,kBAC7BC,iBAAkB5Z,EAAU4Z,iBAC5B7Z,QAASA,IAId,MAmBLuwC,GAAuBx1C,IACzB,MAAM,MAAE2B,EAAF,UAASuD,GAAclF,EAE7B,IAAK2B,EACD,MAAO,GASX,MANsB,CAClB8zC,IAAKvwC,EAAUwwC,8BACfC,WAAYzwC,EAAU0wC,+BACtBC,KAAM,IAGWl0C,IAGZizC,GAAqB50C,IAA+D,MAC7F,MAAM,kBAAE6yC,EAAF,WAAqBhoC,GAAe7K,EACpC0D,EAAI,UAAGmvC,EAAkBjT,mBAArB,aAAG,EAA+BE,eAAex5B,KAErDigC,EApCwBvmC,CAAAA,IAC9B,MAAM,kBAAE6yC,GAAsB7yC,EAE9B,OAAK6yC,EAAkBjT,aAAgBiT,EAAkBjT,YAAYE,eAAet1B,WAI7EqoC,EAAkBjT,YAAYE,eAAet1B,WAAWgE,KAAI/D,IAC/D,GAAKA,EAAUE,gBAAmBF,EAAUE,eAAeC,MAI3D,OAAOH,EAAUE,eAAeC,SARzB,IAgCQkrC,CAAyB91C,GAC5C,IAAK6yC,EAAkBjT,YACnB,MAAO,GAGX,MAAMmW,EAAclrC,EAChBtH,IAAAA,cAAAA,IAAAA,CAAGC,UAAU,kDAAkD4H,KAAMP,GAChEnH,GAGLH,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,mDAAmDE,GAGhEsyC,EAAyBzP,EAAWh9B,KAAK,MAE/C,OACIhG,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,8CACXD,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,mDAAmDuyC,GAClExyC,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,wDAAwDwyC,KCpftEC,GAAmF,IAAmC,IAAlC,UAAEzyC,EAAF,UAAa48B,EAAb,KAAwBnX,GAAU,EAC/H,OAAQmX,GACJ,IAAK,QACD,OAAO78B,EAAAA,cAAAA,IAAAA,CAAGC,UAAWkK,GAAAA,CAAW,yCAA0ClK,IAAaylB,GAC3F,IAAK,SACD,OAAO1lB,EAAAA,cAAAA,IAAAA,CAAGC,UAAWkK,GAAAA,CAAW,0CAA2ClK,IAAaylB,GAC5F,IAAK,UACL,QACI,OAAO1lB,EAAAA,cAAAA,IAAAA,CAAGC,UAAU,4CAA4CylB,oOCgBrE,MAAMitB,WAAkC3yC,EAAAA,cAA/CiN,cAAAA,SAAAA,WACW,KAAAiB,MAAyC,CAC5CqiC,WAAW,GAGE,KAAAqC,mBAA6B,WAYvC,KAAAC,YAAc,IAAO9kC,IACxBL,KAAKM,SACD,CACIuiC,UAAW7iC,KAAKQ,MAAMqiC,YAE1B,KACI7iC,KAAKjR,MAAM0oC,cAAcz3B,KAAKQ,MAAMqiC,eAhBV,gCAClC9zC,EACAyR,GAEA,MAAM4kC,EAAer2C,EAAMs2C,MAAMrtC,QAAOkS,IAASA,EAAK24B,YAAWzxC,OACjE,IAAIkS,yWAAS,IAAQ9C,GAErB,OADA8C,EAAY,CAAEu/B,UAA4B,IAAjBuC,GAClB9hC,EAcJC,SACH,OACIjR,EAAAA,cAAAA,QAAAA,KACIA,EAAAA,cAAAA,KAAAA,CAAIC,UAAW,GAAGyN,KAAKklC,mCACnB5yC,EAAAA,cAAAA,KAAAA,CAAIgzC,MAAM,MAAK,aAAatlC,KAAKjR,MAAMw2C,mBACnCjzC,EAAAA,cAAAA,QAAAA,CAAOC,UAAU,sBACbD,EAAAA,cAAAA,QAAAA,CAAAA,aACgB0N,KAAKjR,MAAMw2C,kBACvBhzC,UAAU,iBACVC,KAAK,WAAU,eACDwN,KAAKQ,MAAMqiC,UACzBjwC,QAASoN,KAAKQ,MAAMqiC,UACpBnwC,SAAUsN,KAAKmlC,gBAEnB7yC,EAAAA,cAAAA,OAAAA,CAAMC,UAAU,iBAGtByN,KAAKjR,MAAM+zB,UAAY9iB,KAAKjR,MAAMw7B,oCAChCj4B,EAAAA,cAAAA,KAAAA,CAAIgzC,MAAM,OAAOtlC,KAAKjR,MAAMy2C,wBAC5B,KACFxlC,KAAKjR,MAAM+zB,SAA4D,KAAjDxwB,EAAAA,cAAAA,KAAAA,CAAIgzC,MAAM,OAAOtlC,KAAKjR,MAAMy0C,cACpDlxC,EAAAA,cAAAA,KAAAA,CAAIgzC,MAAM,OAAOtlC,KAAKjR,MAAM80C,eAC1B7jC,KAAKjR,MAAM+zB,SAA2D,KAAhDxwB,EAAAA,cAAAA,KAAAA,CAAIgzC,MAAM,OAAOtlC,KAAKjR,MAAM+1C,aAClD9kC,KAAKjR,MAAM+zB,SAAgE,KAArDxwB,EAAAA,cAAAA,KAAAA,CAAIgzC,MAAM,OAAOtlC,KAAKjR,MAAM02C,kBAClDzlC,KAAKjR,MAAM+zB,SAA0D,KAA/CxwB,EAAAA,cAAAA,KAAAA,CAAIgzC,MAAM,OAAOtlC,KAAKjR,MAAM22C,YAClD1lC,KAAKjR,MAAM+zB,SAA+D,KAApDxwB,EAAAA,cAAAA,KAAAA,CAAIgzC,MAAM,OAAOtlC,KAAKjR,MAAM42C,iBAClD3lC,KAAKjR,MAAM+zB,SAA8DxwB,EAAAA,cAAAA,KAAAA,MAAnDA,EAAAA,cAAAA,KAAAA,CAAIgzC,MAAM,OAAOtlC,KAAKjR,MAAM62C,0pBCiCxE,IAAMC,GAAN,cAAiCvzC,EAAAA,UAY7BiN,YAAYxQ,EAAgDyR,GACxDhB,MAAMzQ,GAoRO,KAAAohC,yCAA2C,KACxD,IAAI5F,GAAsC,EACP,IAAD,IAA9BvqB,KAAKjR,MAAMyL,KAAKgK,eAChB+lB,GACI,UAAAvqB,KAAKjR,MAAMyL,KAAKgK,aAAalU,cAA7B,mBAAqCgB,MACjC8+B,GAA4B,2DAAjBA,EAAQ/6B,cADvB,eAEGsP,aAAa,GAExB,OAAO4lB,GAGM,KAAAub,mBAAqB,KAClC,MAAM,QAAE9xC,EAAF,UAAWC,GAAc+L,KAAKjR,OAC9B,UAAEgP,GAAc/J,GAChB,6BAAE+xC,EAAF,6BAAgCC,GAAiC/xC,EACjEoxC,EAAQrlC,KAAKQ,MAAMylC,iBACnBC,EAAmBb,GAASA,EAAMj0C,QAAUi0C,EAAMrtC,QAAOkS,GAAQA,EAAK24B,YAAWtlC,KAAI2M,GAAQA,EAAK4kB,kBAExG,GAAIoX,GAAoBA,EAAiB90C,OAAS,EAAG,CACjD,MAAMq/B,EAAgByV,EAAiB,GAAGvK,cAEpCwK,EAAoC,KAC1CC,EAAAA,EAAAA,6BAA4B,CAAE9c,cAAet1B,EAAQ8F,eAAiB22B,EAAgByV,GACjF71C,MAAKP,UACFkQ,KAAKM,SAAS,CACVguB,YAAa0X,EACbzX,gBAAiB,UACjBwC,aAAc,eACd9nB,QAAQ,UAGN,IAAItY,SAAQC,GAAWs2B,WAAWt2B,EAASu1C,KACjDjsC,OAAO9J,SAASmgC,YAEnB9/B,OAAMC,IACHqN,EAAU4D,QAAQ,4EAClB5D,EAAUrN,MAAMA,GAChBsP,KAAKM,SAAS,CACVguB,YAAayX,EACbxX,gBAAiB,UACjBwC,aAAc,eACd9nB,QAAQ,SAMX,KAAA2kB,yBAA2B,KAAa,QACrD,IAAI3Y,GAAMvR,EAAAA,EAAAA,IAAW,gBAAiB1D,KAAKjR,MAAMiF,QAAQ8F,gBAAkB,GAE3E,OADAmb,EAAMA,EAAInD,SAAS,KAAOmD,EAAIoxB,OAAO,EAAGpxB,EAAIqxB,QAAQ,MAAQrxB,EAC5D,UAAIjV,KAAKjR,MAAMyL,KAAKwyB,qBAApB,iBAAI,EAA+B18B,cAAnC,OAAI,EAAuCqgC,YAAY5D,GAC5C,GAAG9X,QAAUjV,KAAKjR,MAAMyL,KAAKwyB,cAAc18B,OAAOqgC,YAAY5D,KAElE,IAGM,KAAAwZ,qBAAuBz2C,UACpC,MACM6vC,EADQ3/B,KAAKQ,MAAMylC,iBACGjuC,QAAOkS,GAAQA,EAAK24B,YAChD,GAAIlD,EAAcvuC,OAAS,EACvB,IAAK,MAAMo1C,KAAe7G,EAAe,CAAC,IAAD,UACrC,MAAM/S,EAAO,oBAAG4Z,EAAY7X,mBAAf,aAAG,EAAyBE,eAAexL,cAA3C,QAAqD,GAC5Dl0B,EAAO,oBAAGq3C,EAAY7X,mBAAf,aAAG,EAAyBE,sBAA5B,QAA8C,CACvDhxB,SAAU,EACV4oC,iBAAkB,EAClBxvB,UAAW,EACXK,MAAO,EACPJ,cAAe,GAEbxa,EAAQ,UAAG8pC,EAAY1X,gBAAgBt2B,gBAA/B,QAA2C,EACzD,GAAIwH,KAAKmwB,2CAA4C,CACjD,MAAM3F,EAAYgc,EAAY1X,gBAAgBx0B,gBACxC0F,KAAK0mC,cAAcv3C,EAASuN,EAAUkwB,EAASpC,cAE/CxqB,KAAK0mC,cAAcv3C,EAASuN,EAAUkwB,GAIxD,OAAOj8B,QAAQC,aAAQ,IA2DV,KAAA+1C,eAAkBC,GAC3B7sC,EAAAA,GAAAA,UACO,IAAIE,IAAIC,OAAO9J,SAAS+J,MAE5B,IAAIF,IAAI2sC,EAAW3xB,IAAI4xB,WAAW1sC,MAM5B,KAAA2sC,eAAiB,KAC9B9mC,KAAKM,SAAS,CACVssB,QAAS5sB,KAAKQ,MAAMosB,QACpB0B,YAAatuB,KAAKQ,MAAM8tB,YACxBC,gBAAiBvuB,KAAKQ,MAAM+tB,gBAC5BwC,aAAc/wB,KAAKQ,MAAMuwB,aACzB9nB,OAAQjJ,KAAKQ,MAAMyI,OACnB89B,gCAAgC,KAIvB,KAAAC,6BAA+B,KAA6B,UACzE,IAAKhnC,KAAKQ,MAAMymC,0BACZ,OAAO,KAEX,MAAM1c,GACF,UAAAvqB,KAAKjR,MAAMyL,KAAKgK,oBAAhB,mBAA8BlU,cAA9B,mBAAsCgB,MAAK8+B,GAA4B,2DAAjBA,EAAQ/6B,cAA9D,eACMsP,aAAa,EAEvB,OACIrS,EAAAA,cAAC40C,EAAAA,sBAAqB,CAClB30C,UAAU,gCACV/C,GAAIwQ,KAAKjR,MAAMS,GACfuE,SAAUiM,KAAKjR,MAAMgF,SACrBC,QAASgM,KAAKjR,MAAMiF,QACpBm6B,cAAenuB,KAAKmnC,0CACpB3sC,KAAMwF,KAAKQ,MAAMymC,0BACjBrX,UAAW5vB,KAAKQ,MAAMumC,+BACtBK,QAASpnC,KAAK8mC,eACdvc,oCAAqCA,KAchC,KAAA8c,kBAAoB,KACjC,MAAM,OAAEvqC,EAAF,QAAU9I,EAAV,KAAmBwG,EAAnB,UAAyBvG,GAAc+L,KAAKjR,MAC5Ci+B,EAAgBxyB,GAAQA,EAAKwyB,eAAiBxyB,EAAKwyB,cAAc18B,OACvE,IAAK08B,EACD,OAAO,KAGX,MAAMhzB,EAAUgG,KAAK2mC,eAAe3yC,EAAQkB,SACtCoyC,EAAexqC,EAAOwqC,cAAgB,GAEtCC,EADoBvnC,KAAKwnC,wBACOF,EAChCG,EAAaza,GAAiBA,EAAca,WAC5C6Z,EAAezzC,EAAU0zC,gBACzBC,EAAW3zC,EAAU4zC,YAE3B,OAAIJ,GAAcH,EACP,KAIPh1C,EAAAA,cAACw1C,EAAAA,uBAAsB,CACnBv1C,UAAW,GAAGyN,KAAKzN,wBACnBuW,KAAK,aAAY,aACL7U,EAAU8zC,oBACtB9yB,IAAKjb,EAAQG,KACb6tC,IAAI,OACJ/pC,MAAOwpC,EACPH,aAAcA,EACdW,aAAcV,EACdG,aAAc1nC,KAAKkoC,YAAYR,GAC/BE,SAAU5nC,KAAKmoC,YAAYP,GAC3BQ,kBAAmBV,EACnBW,cAAeT,KAmFV,KAAAU,wBAA2Bv5C,IACxC,IAAIyR,EAAQ,CACR+nC,oBAAqBvoC,KAAKQ,MAAM+nC,oBAEhCx5C,IACAyR,EAAK,SACEA,GACA,CACCgoC,oBAAqBrF,EAA4Bp0C,MAI7DiR,KAAKM,SAASE,IAID,KAAAouB,yBAA2B,CACxCtxB,EACAtJ,EACAw2B,KAEA,MAAM5wB,GAAaC,EAAAA,EAAAA,mBAAkByD,EAAgBtJ,EAAQ8F,mBAAenD,GAC5E,IAAK+0B,EAAAA,iBAAAA,mBAAoC9xB,SAA6BjD,IAAd6zB,EAAyB,CAC7E,MAAMie,EAAc,IAAIxuC,IAAIL,EAAYM,OAAO9J,SAAS+J,MAExD,OADAsuC,EAAYruC,aAAaC,IAAI,YAAa,GAAGmwB,MAAAA,EAAAA,EAAa,KACnDie,EAAYtuC,KAGvB,OAAOP,GAIM,KAAAy2B,WAAa,KAC1BrwB,KAAKM,SAAS,CACV2I,QAAQ,KAIC,KAAAy/B,gBAAkB54C,MAAO88B,EAAiBlwB,EAAkB3N,KACzE,MAAM,QAAEiF,EAAF,KAAWwG,EAAX,UAAiBuD,EAAjB,OAA4BjB,EAA5B,UAAoC7I,GAAc+L,KAAKjR,OACvD,cAAEi+B,GAAkBxyB,EAE1B,GAAIxG,GACIg5B,MAAAA,GAAAA,EAAe18B,OAAQ,CACvB,MAAMq4C,EAAyB3b,EAAc18B,OAAOi9B,mBACpD,GAAIob,EAAwB,CACxB,MAAMC,EAAiBD,EAAuBE,WACzCxD,GAA6BA,EAAMvW,gBAAgB3+B,SAAWy8B,IAE7Dkc,EAAkB,MAAQH,EAAuBC,IACvD,GAAID,EAAuBC,GAAgB9Z,gBAAgBt2B,WAAakE,EACpE,OAEJ,MAAMqsC,EAAeD,EAAmBha,gBAAgBt2B,SACxDswC,EAAmBha,gBAAgBt2B,SAAWkE,EAC9C,MAAM,YAAEiyB,GAAyBma,EAAT5+B,GAAxB,OAAiC4+B,EAAjC,IAEI/5C,IACAA,EAAM2N,SAAWA,EACjBsD,KAAKM,SAAS,CACVkoC,oBAAqBrF,EAA4Bp0C,MAIzDiR,KAAKM,SAAS,CACV6jC,6BAA6B,KAGjC6E,EAAAA,EAAAA,6BAA4B,CAAE1f,cAAet1B,EAAQ8F,eAAiBkzB,EAAc18B,OAAOqgC,YAAY5D,GAAI,CACvG7iB,EAAK4kB,kBAEJz+B,MAAK44C,IASF,GARAjpC,KAAKM,SAAS,CACVssB,QAAAA,EACA0B,YAAa,GACbC,gBAAiB,UACjBwC,aAAc,eACdoT,6BAA6B,EAC7Bl7B,QAAQ,IAERggC,EAAM,CACN,MAAMC,EAAUD,EAAK33C,MAAK+zC,GAASA,EAAMl1C,SAAWy8B,IACpD+b,EAAuBC,GAAgB9Z,gBAAkBoa,EACzD,MAAMC,EAAe,IAAIR,GACzBQ,EAAaP,GAAkB,CAAEja,YAAAA,EAAaG,gBAAiBoa,GAC/D,MAAME,EAAoB,SAAQpc,EAAc18B,QAAtB,IAA8B+4C,iBAAkBF,IAC1En1C,EAAQ8F,cAAcwvC,OAClB,IAAIC,GAAAA,8BAA8Bv1C,EAAQ8F,cAAcoF,eAAgBpC,GACxEssC,OAIX34C,OAAMC,IACHqN,EAAU4D,QAAQ,6DAClB5D,EAAUrN,MAAMA,GAChB,MAAM49B,EAAcr6B,EAAUu1C,mCAC1Bz6C,GACAA,IAAUA,EAAM+/B,gBAAgBt2B,SAAWuwC,GAC3C/oC,KAAKM,SAAS,CACVssB,QAAAA,EACA0B,YAAAA,EACAC,gBAAiB,SACjBwC,aAAc,8BACdoT,6BAA6B,EAC7Bl7B,QAAQ,EACRu/B,oBAAqBrF,EAA4Bp0C,OAGrD+5C,EAAmBha,gBAAgBt2B,SAAWuwC,EAC9C/oC,KAAKM,SAAS,CACVssB,QAAAA,EACA0B,YAAAA,EACAC,gBAAiB,SACjBwC,aAAc,8BACdoT,6BAA6B,EAC7Bl7B,QAAQ,WASvB,KAAAy9B,cAAgB52C,MAC7BX,EACAuN,EACAkwB,EACApC,KAEA,MAAM,QAAEx2B,EAAF,KAAWwG,EAAX,UAAiBvG,EAAjB,UAA4B8J,GAAciC,KAAKjR,OAC/C,KAAEuS,GAAS9G,GACX,qBAAEivC,EAAF,0BAAwBC,GAA8Bz1C,EAE5D,GAAID,GACIsN,EAAKhR,OAAQ,CACb,MAAMq5C,EAAwB,CAC1Bx6C,QAAAA,EACAklB,MAAO3X,EACP8tB,UAAAA,SAGElpB,EAAKhR,OACNs5C,iBAAiBD,GACjBt5C,MAAMC,IACH,GAAsB,YAAlBA,EAAOC,OACP,OAAO8sC,EAAAA,EAAAA,4BACH,IAAIF,EAAAA,6BACAhuC,EAAQ0O,SACRmC,KAAKjR,MAAMiF,QAAQ8F,cAAcoF,eAAeC,YAAYW,UAC5D3Q,GAEJ6Q,KAAKjR,MAAMiF,QAAQ8F,eACrBzJ,MAAKw5C,IACH,IAAKA,EACD,OAAO73B,EAAAA,GAAAA,OAAmB,oCAG9B,MAAM83B,EAAsD,iBAAzC91C,EAAQ6I,IAAIC,OAAOitC,kBAetC,OAdA/pC,KAAKM,SAAS,CACVssB,QAAAA,EACA0B,YAAa,GACbC,gBAAiB,UACjBwC,aAAc,eACd9nB,QAAQ,EACR89B,gCAAiC+C,EACjC7C,0BAA2B,CACvB93C,QAAAA,EACAiuC,aAAcyM,EACdntC,SAAAA,GAEJ6rC,oBAAoB,IAEjBv2B,EAAAA,GAAAA,aAER,GAAyB,gBAArB1hB,EAAO05C,UAA6B,CAC3C,GAAIh2C,EAAQ6I,IAAIC,OAAO6S,2BAA4B,CAAC,IAAD,MAC/C,MAAMs6B,GACF,UAAA3oC,EAAKhR,cAAL,eAAagR,KAAK2B,aAAlB,UACA3B,EAAKhR,cADL,iBACA,EAAagR,KAAK2B,UAAU3R,MAAKhB,GAAUA,EAAO4G,YAAc/H,EAAQ0O,kBADxE,aACA,EAAmFrF,UACjF0xC,EAAiB,oBAAoBl2C,EAAQ6I,IAAIC,OAAO6S,+DAc9D,OAbA3P,KAAKM,SAAS,CACVssB,QAAAA,EACA0B,iBACyB33B,IAArBszC,GACMR,EACK/xC,QAAQ,gBAAiBuyC,EAAiBtyC,YAC1CD,QAAQ,gBAAiB1D,EAAQ6I,IAAIC,OAAO6S,2BAA2BhY,aAE5EuyC,EACV3b,gBAAiB,SACjBwC,aAAc,8BACd9nB,QAAQ,IAEL+I,EAAAA,GAAAA,UACJ,CACH,MAAMk4B,EAAiB,yFAQvB,OAPAlqC,KAAKM,SAAS,CACVssB,QAAAA,EACA0B,YAAa4b,EACb3b,gBAAiB,SACjBwC,aAAc,8BACd9nB,QAAQ,IAEL+I,EAAAA,GAAAA,WAWf,OARAjU,EAAU6D,MAAM,mFAChB5B,KAAKM,SAAS,CACVssB,QAAAA,EACA0B,YAAaob,EACbnb,gBAAiB,SACjBwC,aAAc,8BACd9nB,QAAQ,IAEL+I,EAAAA,GAAAA,aAEVvhB,OAAOC,IACJqN,EAAU4D,QAAQjR,EAAMuR,SACxBlE,EAAU6D,MAAM,yFAChB5B,KAAKM,SAAS,CACVssB,QAAAA,EACA0B,YAAaob,EACbnb,gBAAiB,SACjBwC,aAAc,8BACd9nB,QAAQ,SAOf,KAAAkhC,kCAAoCr6C,MAAAA,IACjD,MAAM,QAAEkE,EAAF,KAAWwG,EAAX,UAAiBuD,GAAciC,KAAKjR,OACpC,cAAEi+B,GAAkBxyB,EAE1B,GAAIxG,GAAWA,EAAQ8F,cAAe,CAClC,MAAMqsC,EAAoC,IAE1C,GADkBnyC,EAAQkB,QAAQC,KAAKF,iBAAmBjB,EAAQkB,QAAQC,KAAKu7B,OAC3E0Z,MAAapd,GAAAA,EAAe18B,QAAU4Z,EAAM,CAC5C,MAAMmgC,QAAsBC,EAAAA,EAAAA,kBAAgBC,EAAAA,EAAAA,4BAA2Bv2C,EAAQ8F,eAAgB9F,EAAQ8F,eACvG,IAAIywB,GAAsC,EACO,IAAD,EAAhD,GAAIvzB,EAAAA,gBAAAA,YAA4BqzC,GAC5B9f,GACI,UAAA8f,EAAc/4C,MACTkT,GAAqD,2DAAtBA,EAAanP,cADjD,eAEGsP,aAAa,EAExB,MAAM6lB,GAAYP,EAAAA,EAAAA,IAAaj2B,EAAQ8F,cAAcoF,gBACjDqrB,IACArgB,EAAK4kB,gBAAgBx0B,UAAYkwB,IAErC4b,EAAAA,EAAAA,6BAA4B,CAAE9c,cAAet1B,EAAQ8F,eAAiBoQ,EAAK4kB,gBAAgB6M,cAAgB,CACvGzxB,EAAK4kB,kBAEJz+B,MAAKP,gBAEI,IAAIa,SAAQC,GAAWs2B,WAAWt2B,EAASu1C,KACjDjsC,OAAO9J,SAASmgC,YAEnB9/B,OAAMC,IACHqN,EAAU4D,QAAQ,4EAClB5D,EAAUrN,MAAMA,WAGxBqN,EAAU4D,QACN,qHAMC,KAAA6oC,gBAAkB16C,MAAAA,IAC/BoK,OAAO9J,SAASmgC,SACT5/B,QAAQC,WAGF,KAAA65C,gBAAkB,KAC/B,MAAM,QAAEz2C,EAAF,KAAWwG,EAAX,UAAiBuD,EAAjB,UAA4B9J,GAAc+L,KAAKjR,OAC/C,cAAEi+B,GAAkBxyB,EAE1B,GAAIxG,GAAWA,EAAQ8F,cAAe,CAElC,GADkB9F,EAAQkB,QAAQC,KAAKF,iBAAmBjB,EAAQkB,QAAQC,KAAKu7B,OAC9D1D,GAAiBA,EAAc18B,OAAQ,EACpDsgC,EAAAA,EAAAA,aAAY,CAAEtH,cAAet1B,EAAQ8F,eAAiBkzB,EAAc18B,OAAOqgC,aACtEtgC,OACAI,OAAOC,IAAiB,MACrBqN,EAAU4D,QAAQ,qDAClB5D,EAAUrN,MAAMA,GAChBsP,KAAKM,SAAS,CACVssB,SAAS,UAAAI,EAAc18B,cAAd,eAAsBqgC,YAAY5D,KAAM,GACjDuB,YAAar6B,EAAU68B,8BACvBvC,gBAAiB,SACjBwC,aAAc,8BACd9nB,QAAQ,OAGpB,MAAMyhC,GAAUhnC,EAAAA,EAAAA,IAAW,oBAAqB1D,KAAKjR,MAAMiF,QAAQ8F,eAC/D4wC,GACAxwC,OAAO9J,SAASq+B,OAAOic,QAG3B3sC,EAAU4D,QAAQ,uFAGtB5D,EAAU4D,QAAQ,sDAQT,KAAAgpC,aAAe,KAC5B,MAAM,QAAE32C,GAAYgM,KAAKjR,MAGzB,GAAIiF,EAAQkB,SAAWlB,EAAQkB,QAAQ01C,QAA0C,WAAhC52C,EAAQkB,QAAQ01C,OAAOC,KACpE,MAAO,KAGX,GAAI9wC,EAAAA,GAAAA,WAAsBG,OAAO4wC,WAAY,CACzC,MAAMh3C,EAAeE,EAAQkB,QAAQpB,aACrC,GAAIA,EACA,OAAIA,EAAa+M,IAAM3G,OAAO4wC,YAAch3C,EAAa+M,GAAGE,EACjD,KACAjN,EAAamN,IAAM/G,OAAO4wC,YAAch3C,EAAamN,GAAGF,EACxD,KACAjN,EAAai3C,IAAM7wC,OAAO4wC,YAAch3C,EAAai3C,GAAGhqC,EACxD,KACAjN,EAAaoN,IAAMhH,OAAO4wC,YAAch3C,EAAaoN,GAAGH,EACxD,KAEJ,KAIf,MAAO,MAQM,KAAAmnC,YAAe8C,GAExB14C,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,wBACXD,EAAAA,cAAAA,OAAAA,CAAMC,UAAW,GAAGyN,KAAKjR,MAAM+N,OAAOvK,6BAA4B,cAAc,SAChFD,EAAAA,cAAAA,OAAAA,CAAMC,UAAU,aAAay4C,IAUxB,KAAA7C,YAAe8C,GAExB34C,EAAAA,cAAAA,MAAAA,CAAKC,UAAU,wBACXD,EAAAA,cAAAA,OAAAA,CAAMC,UAAU,aAAa04C,GAC7B34C,EAAAA,cAAAA,OAAAA,CAAMC,UAAW,GAAGyN,KAAKjR,MAAM+N,OAAOvK,8BAA6B,cAAc,UA/6BzFyN,KAAKzN,UAAY,oBACjByN,KAAKkrC,UACDn8C,EAAMiF,QAAQkB,SAAWnG,EAAMiF,QAAQkB,QAAQ01C,QAAgD,WAAtC77C,EAAMiF,QAAQkB,QAAQ01C,OAAOC,KAAoB,KAAO,KACrH7qC,KAAKmrC,gBAAkBnrC,KAAKmrC,gBAAgBtoC,KAAK7C,MAEjDA,KAAKQ,MAAQ,CACTosB,QAAS,GACT0B,YAAa,GACbC,gBAAiB,UACjBwC,aAAc,eACd9nB,QAAQ,EACR89B,gCAAgC,EAChCqE,qCAAqC,EACrCnF,iBAAkB,GAClBsC,oBAAoB,EACpBpE,6BAA6B,GAEjCnkC,KAAKlH,kBAAmB2J,EAAAA,EAAAA,oBACpBzC,KAAKjR,MAAMiF,QAAQkB,QAAQwN,kBAC3B1C,KAAKjR,MAAM4T,aACX3C,KAAKjR,MAAMgP,WAEfiC,KAAKmrC,mBAEDpxC,EAAAA,GAAAA,WAAuBiG,KAAKjR,MAAMiF,QAAQkB,QAAQC,KAAKF,iBAAoB+K,KAAKjR,MAAMiF,QAAQkB,QAAQm2C,OAAOC,UAC7GpxC,OAAO9J,SAASq+B,OAAOzuB,KAAKjR,MAAMiF,QAAQkB,QAAQC,KAAKqO,WAAa,KA/BtD,eAClB,MAA0B,OAAnBxD,KAAKkrC,WAAyC,OAAnBlrC,KAAKkrC,UAmCb,0BAC1BlrC,KAAKM,SAAS,IACd,MAAM0sB,QAAsBhtB,KAAKjR,MAAMyL,KAAKwyB,cAC5ChtB,KAAKjR,MAAM+N,OAAO+a,QAASG,MAAOgV,MAAAA,OAAA,EAAAA,EAAe2D,YAAYt7B,OAAQ,GACrE2K,KAAKM,SAAS,CACV2lC,iBAAkBjZ,MAAAA,OAAF,EAAEA,EAAeO,qBAGjCxzB,EAAAA,GAAAA,YACAG,OAAO+sB,iBAAiB,SAAUjnB,KAAKmrC,iBACvCnrC,KAAKmrC,mBAINhoC,uBACCpJ,EAAAA,GAAAA,WACAG,OAAOutB,oBAAoB,SAAUznB,KAAKmrC,iBAI3C/nC,sBACHC,EACAC,GAEA,OAAItD,KAAKQ,QAAU8C,GAAatD,KAAKjR,QAAUsU,EAM5CE,SACH,MAAM,QAAEsU,EAAF,UAAWtlB,GAAcyN,KAAKjR,MAAM+N,QACpC,4BAAEyuC,EAAF,+BAA+BC,GAAmCxrC,KAAKjR,MAAMkF,WAC7E,cAAE+4B,EAAF,KAAiB1rB,GAAStB,KAAKjR,MAAMyL,KAC3C,GAAoB,YAAhB8G,EAAK/Q,QAAwBmG,EAAAA,iBAAAA,kBAAmCs2B,IAA2C,YAAzBA,EAAcz8B,OAAsB,CACtH,MAAM8gC,EAAU,SACRrxB,KAAKjR,OADG,IAEZ82C,mBAAoB,CAChBle,YAAa3nB,KAAKjR,MAClBwD,UAAWkK,GAAAA,CAAWuD,KAAKzN,UAAWA,IAE1ChC,OAAQ,UACR+gC,cAAeh/B,EAAAA,cAACi/B,EAAAA,EAAO,CAACh/B,UAAWyN,KAAKzN,UAAWi/B,IAAKxxB,KAAKjR,MAAMkF,UAAUw9B,2BAC7E5Z,QAASA,GAAWvlB,EAAAA,cAACo/B,EAAAA,QAAO71B,OAAAA,OAAAA,CAACtJ,UAAW,GAAGyN,KAAKzN,sBAA0BslB,IAC1E5jB,UAAW+L,KAAKjR,MAAMkF,YAE1B,OAAO+L,KAAKjR,MAAMgZ,WAAWspB,GAGjC,GAAoB,WAAhB/vB,EAAK/Q,QAAgD,WAAzBy8B,EAAcz8B,OAAqB,CAC/D,MAAM8gC,EAAU,SACRrxB,KAAKjR,OADG,IAEZ82C,mBAAoB,CAChBle,YAAa3nB,KAAKjR,MAClBwD,UAAWkK,GAAAA,CAAW,GAAGuD,KAAKzN,YAAaA,IAE/ChC,OAAQ,SACR+gC,cAAeh/B,EAAAA,cAAC0yC,GAA+B,CAAC7V,UAAU,SAASnX,KAAMwzB,IACzE3zB,QAASA,GAAWvlB,EAAAA,cAACo/B,EAAAA,QAAO71B,OAAAA,OAAAA,CAACtJ,UAAW,GAAGyN,KAAKzN,sBAA0BslB,IAC1E5jB,UAAW+L,KAAKjR,MAAMkF,YAG1B,OAAO+L,KAAKjR,MAAMgZ,WAAWspB,GAGjC,MAAMoa,EAAsBze,GAAiBA,EAAc18B,OACrDi9B,EAAqBke,GAAuBA,EAAoBle,mBAEtE,IAAKke,IAAwBle,GAAoD,IAA9BA,EAAmBn8B,OAAc,CAChF,GAAIq6C,IAAwBzrC,KAAK0rC,gBAAkB3xC,EAAAA,GAAAA,UAE/C,OADAG,OAAO9J,SAAS+J,KAAO6F,KAAK4tB,2BACrB,KAGX,MAAM+D,EAAc,SACZ3xB,KAAKjR,OADO,IAEhB82C,mBAAoB,CAChBle,YAAa3nB,KAAKjR,MAClBwD,UAAWkK,GAAAA,CAAW,GAAGuD,KAAKzN,YAAaA,IAE/ChC,OAAQ,QACR+gC,cAAeh/B,EAAAA,cAAC0yC,GAA+B,CAAC7V,UAAU,QAAQnX,KAAMuzB,IACxE1zB,QAASA,GAAWvlB,EAAAA,cAACo/B,EAAAA,QAAO71B,OAAAA,OAAAA,CAACtJ,UAAW,GAAGyN,KAAKzN,sBAA0BslB,IAC1E5jB,UAAW+L,KAAKjR,MAAMkF,UACtB03C,aACIF,GACAzrC,KAAK4rC,4BAA4BH,EAAqBzrC,KAAKmwB,4CAC/D0b,qBAAsBJ,GAAuBzrC,KAAK8rC,6BAA6BL,EAAoB9a,YAAY5D,IAC/GN,qBAAsB,CAClBl6B,UAAW,GAAGyN,KAAKzN,uBACnB6X,IAAK,SAIb,OAAOpK,KAAKjR,MAAMgZ,WAAW4pB,GAGjC,MAAMtsB,EAAS,SACPrF,KAAKjR,OADE,IAEX82C,mBAAoB,CAChBle,YAAa3nB,KAAKjR,MAClBwD,UAAWkK,GAAAA,CAAW,GAAGuD,KAAKzN,YAAaA,IAE/ChC,OAAQ,UACRw7C,sBAAuB/rC,KAAKQ,MAAMyI,QAC9B3W,EAAAA,cAAAA,MAAAA,CAAKC,UAAW,GAAGyN,KAAKzN,6BACpBD,EAAAA,cAAC+X,EAAAA,MAAK,CAACC,MAAOtK,KAAKQ,MAAM+tB,gBAAiBtlB,OAAQjJ,KAAKQ,MAAMyI,OAAQC,OAAQlJ,KAAKqwB,YAC9E/9B,EAAAA,cAAAA,OAAAA,CAAAA,YAAgB,aAAa0N,KAAKQ,MAAM8tB,eAIpDzW,QAASA,GAAWvlB,EAAAA,cAACo/B,EAAAA,QAAO71B,OAAAA,OAAAA,CAACtJ,UAAW,GAAGyN,KAAKzN,sBAA0BslB,IAC1E4U,qBAAsB,CAClBl6B,UAAW,GAAGyN,KAAKzN,uBACnB6X,IAAK,OAET4hC,cAAe,CACXz5C,UAAW,GAAGyN,KAAKzN,mBACnB6X,IAAK,QACLtB,KAAM,QAEVmjC,iBAAkB,CACd15C,UAAW,GAAGyN,KAAKzN,uBACnB6X,IAAK,MAET8hC,qBAAsBlsC,KAAKmsC,yBAAyBnsC,KAAKjR,MAAMkF,WAC/D46B,eAAgB,CACZt8B,UAAW,GAAGyN,KAAKzN,6BACnB6X,IAAK,KAETgiC,WAAYpsC,KAAKqsC,qBACjBz6C,UAAW,CAAE06C,eAAgBC,GAAAA,CAASvsC,KAAK0oC,gBAAiB,MAC5DiD,aAAc3rC,KAAK4rC,4BAA4BH,EAAqBzrC,KAAKmwB,4CACzEqc,WAAYxsC,KAAKqnC,oBACjBoF,sBAAuBzsC,KAAKgnC,+BAC5B6E,qBAAsB7rC,KAAK8rC,6BAA6BL,EAAoB9a,YAAY5D,IACxFwb,mBAAoBvoC,KAAKQ,MAAM+nC,mBAC/BhG,uBAAwBviC,KAAKsoC,wBAC7BE,oBAAqBxoC,KAAKQ,MAAMgoC,oBAChC1lB,SAAU9iB,KAAK8iB,WAGnB,OAAO9iB,KAAKjR,MAAMgZ,WAAW1C,GAG1By9B,SAAS54B,EAAmC24B,GAC/C34B,EAAK24B,UAAYA,EAEjB,MAAM6J,EACF1sC,KAAKQ,MAAMylC,iBAAiB1oC,KAAIpO,IAAU,QAItC,OAHI,UAAAA,EAAQw/B,mBAAR,eAAqBE,eAAexL,WAApC,UAA+CnZ,EAAKykB,mBAApD,aAA+C,EAAkBE,eAAexL,UAChFnZ,EAAK24B,UAAYA,GAEd1zC,MACL,GAEV6Q,KAAKM,SAAS,CACV2lC,iBAAkByG,IAInBC,YAAY9J,GACf,MAAM6J,EACF1sC,KAAKQ,MAAMylC,iBAAiB1oC,KAAI2M,IAC5BA,EAAK24B,UAAYA,EACV34B,MACL,GAEVlK,KAAKM,SAAS,CACV2lC,iBAAkByG,IAIlBP,yBAAyBl4C,GAC7B,MAAM,aACFuvC,EADE,kBAEFoJ,EAFE,YAGFC,EAHE,qBAIFC,EAJE,eAKFC,EALE,oBAMFC,EANE,mBAOFC,EAPE,kBAQF1H,EARE,uBASFC,GACAvxC,EACEi5C,EAA2C,CAC7C1J,aAAcA,EACdK,cAAe+I,EACf9H,YAAa+H,EACbpH,iBAAkBqH,EAClBpH,WAAYqH,EACZpH,gBAAiBqH,EACjBpH,eAAgBqH,EAChB1H,kBAAAA,EACAF,MAAOrlC,KAAKQ,MAAMylC,iBAClBnjB,SAAU9iB,KAAK8iB,SACf2U,aAAeoL,IACX7iC,KAAK2sC,YAAY9J,IAErBtY,oCAAqCvqB,KAAKmwB,2CAC1CqV,uBAAwBA,GAG5B,OAAOlzC,EAAAA,cAAC2yC,GAAyBppC,OAAAA,OAAAA,GAAKqxC,IAGlCpB,6BAA6B1V,GACjC,OACI9jC,EAAAA,cAAC8sC,EAAwBvjC,OAAAA,OAAAA,GACjBmE,KAAKjR,MAAK,CACdqnC,gBAAiBA,EACjBuJ,cAAe3/B,KAAKQ,MAAMylC,kBAAoBjmC,KAAKQ,MAAMylC,iBAAiBjuC,QAAOkS,GAAQA,EAAK24B,YAC9FrD,oBAAqBx/B,KAAKumC,qBAC1B7G,kBAAmB1/B,KAAK8lC,mBACxB7F,eAAgBjgC,KAAK8iB,SACrByH,oCAAqCvqB,KAAKmwB,2CAC1Cr3B,iBAAkBkH,KAAKlH,oBAK3Bq0C,2CACJ,MAAO,CACHxa,mBAAoB3yB,KAAKjR,MAAMkF,UAAU0+B,mBACzCC,6BAA8B5yB,KAAKjR,MAAMkF,UAAU2+B,6BACnDC,mCAAoC7yB,KAAKjR,MAAMkF,UAAU4+B,mCACzDC,mCAAoC9yB,KAAKjR,MAAMkF,UAAU6+B,mCACzDC,sCAAuC/yB,KAAKjR,MAAMkF,UAAU8+B,sCAC5DC,kCAAmChzB,KAAKjR,MAAMkF,UAAU++B,mCAIxDmU,0CACJ,MAAO,CACHxU,mBAAoB3yB,KAAKjR,MAAMkF,UAAU0+B,mBACzCC,6BAA8B5yB,KAAKjR,MAAMkF,UAAU2+B,6BACnDwa,iCAAkCptC,KAAKjR,MAAMkF,UAAUm5C,iCACvDC,oCAAqCrtC,KAAKjR,MAAMkF,UAAUo5C,oCAC1DC,iCAAkCttC,KAAKjR,MAAMkF,UAAUq5C,iCACvD3/B,cAAe3N,KAAKjR,MAAMkF,UAAU0Z,cACpCC,kBAAmB5N,KAAKjR,MAAMkF,UAAU2Z,kBACxCC,iBAAkB7N,KAAKjR,MAAMkF,UAAU4Z,kBAqFvC+9B,4BACJ5e,EACAzC,GAEA,MAAM,GAAE/6B,EAAF,SAAMuE,EAAN,QAAgBC,EAAhB,UAAyBC,GAAc+L,KAAKjR,OAC5C,2BACFuxC,EADE,yBAEFM,EAFE,yBAGF2M,EAHE,sBAIFlb,EAJE,wBAKFC,EALE,wBAMFC,EANE,wBAOFC,EAPE,0BAQFC,GACAx+B,EA2BJ,MJ5diClF,CAAAA,IACrC,MAAM,UAAEkF,EAAF,oCAAas2B,GAAwCx7B,GACrD,yBAAEw+C,GAA6Bt5C,EAErC,MAAO,CACHu5C,iBAAkBnN,EAAiCtxC,GACnD0+C,gBAAiBljB,GAAuCgW,EAA+BxxC,GACvF2+C,gBAAiBnjB,GACbj4B,EAAAA,cAACsJ,EAAAA,OAAM,CAACrJ,UAAU,uDAAuDO,QAASotC,EAAyBnxC,IACtGw+C,GAGTI,mBAAoBpjB,GAAuCj4B,EAAAA,cAACwuC,EAAkBjlC,OAAAA,OAAAA,GAAK9M,MIgd5E6+C,CAzBkD,CACrDpzC,KAAM,CAAEwyB,cAAAA,GACRx9B,GAAAA,EACAuE,SAAAA,EACAC,QAAAA,EACA8E,iBAAkBkH,KAAKlH,iBACvB6zB,SAAU,CACN+T,iBAAkB1gC,KAAKwqC,gBACvBpK,iBAAkBpgC,KAAKyqC,iBAE3BlgB,oCAAAA,EACAiW,iCAAkCxgC,KAAKgH,0CAA0C/S,GACjFA,UAAW,CACPqsC,2BAAAA,EACAM,yBAAAA,EACA2M,yBAAAA,EACAjb,wBAAAA,EACAC,wBAAAA,EACAC,wBAAAA,EACAH,sBAAAA,EACAI,0BAAAA,EACAC,gCAAiC1yB,KAAKmtC,8CAO1CnmC,0CAA0C/S,GAC9C,MAAO,CACHwa,yBAA0Bxa,EAAU45C,6BACpCl/B,wBAAyB1a,EAAU2a,mBACnCC,2BAA4B5a,EAAU2a,mBACtCE,yBAA0B,GAC1BE,yBAA0B/a,EAAU+a,yBACpCC,yBAA0Bhb,EAAU0sC,8BACpCxxB,+BAAgClb,EAAU65C,gBAgD1CpC,eACJ,OAAwC,IAAjC1rC,KAAKwnC,wBAGRA,wBACJ,MAAMF,EAAetnC,KAAKjR,MAAM+N,OAAOwqC,cAAgB,GACvD,OAAQtnC,KAAKjR,MAAMiF,QAAQkB,QAAQm+B,QAAUrzB,KAAKjR,MAAMiF,QAAQkB,QAAQm+B,MAAM0a,KAAOzG,GAAiB,EAwClG+E,qBACJ,MAAM,iBACF2B,EADE,eAEF7L,EAFE,uBAGFC,EAHE,UAIFr2B,EAJE,kBAKF6B,EALE,iBAMFC,EANE,oCAOFogC,EAPE,sCAQFC,EARE,0BASFl+B,EATE,yBAUFF,EAVE,0BAWFM,EAXE,uBAYFK,EAZE,iBAaF09B,EAbE,yBAcFx9B,EAdE,yBAeFD,EAfE,+BAgBFi0B,EAhBE,8BAiBFF,GACAzkC,KAAKjR,MAAMkF,WAET,QAAED,EAAF,UAAW+J,EAAX,KAAsBvD,GAASwF,KAAKjR,OACpC,SAAE0gB,GAAajV,GACf,cAAE3G,GAAkBmM,KAAKjR,MAAM+N,OAErC,OAAOkD,KAAKQ,MAAMylC,iBAAiB1oC,KAAI,CAAC2M,EAAMxW,KAAS,MAiDnD,MHxgB0B6N,CAAAA,IAAsE,QACxG,MAAM,kBACFqgC,EADE,gBAEF9S,EAFE,MAGF9X,EAHE,QAIFhjB,EAJE,cAKFH,EALE,SAMF6I,EANE,UAOFzI,EAPE,SAQF6uB,EARE,oCASFyH,GACAhpB,EACEpS,EAAUyyC,EAAkBjT,aAC5B,OAAEx+B,EAAF,cAAUizC,GAAkBtU,GAC5B,iCAAEoT,EAAF,mBAAoC/P,EAApC,iBAAwD6b,GAAqB/5C,EACnF,IAAK9E,EACD,OAAO,KAGX,MAAM,OAAEk0B,EAAF,gBAAUnoB,GAAoB/L,EAAQ0/B,eACtCwU,GAAgBrU,EAAAA,EAAAA,qBAClB3L,EACArvB,EAAQ8F,cAAcoF,eAAeC,YAFA,UAGrCnL,EAAQkB,QAAQ2H,WAHqB,iBAGrC,EAAqBC,cAHgB,aAGrC,EAA6BmyB,kBAE3ByT,EAAqBnhC,EAAMuhB,SAAW,0BAA4B,mDAClE2f,EAAwBlhC,EAAMuhB,SAAW,6BAA+B,sDAE9E,MAAO,CACHA,SAAAA,EACAyH,oCAAqCA,EACrC6jB,WACI97C,IAAAA,cAAAA,QAAAA,CAAOC,UAAU,sBACbD,IAAAA,cAAAA,QAAAA,CAAAA,aACgB07C,EACZz7C,UAAU,iBACVC,KAAK,WACLI,QAASgvC,EAAkBiB,UAAS,eACtBjB,EAAkBiB,UAChCnwC,SAAUkwC,EAAoBhB,EAAmBrgC,KAErDjP,IAAAA,cAAAA,OAAAA,CAAMC,UAAU,eAGxBM,IAAK1C,EACLmzC,mBAAoB/Y,GAAuCgZ,GAAqBhiC,GAChFiiC,aAAcC,EACV,8CACAzvC,EACA7E,EAAQ0/B,eAAex5B,KACvB6F,EACAmoC,EACAxvC,GAEJ6vC,YAAaC,GAAkBpiC,GAC/B67B,aAAcpmB,GAAS4sB,GAAariC,GACpCsiC,cAAe10C,GACXmD,IAAAA,cAAAA,IAAAA,SAAAA,KACIA,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,gDAAgD8wB,GAC9C,SAAhB9hB,EAAM7Q,MACH4B,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,sDAAsDgyC,GAAoBhjC,SAEzF5K,GAIZmtC,qBAAsB9sB,EAClB1kB,IAAAA,cAAAA,MAAAA,CAAKC,UAAU,yDAAyD6wC,GAAiBpsB,EAAMosB,oBAE/FzsC,EAEJ85B,cAAetgC,EACfi+B,cACK7D,GACDiY,EACIjhC,EAAMuhB,SACN2f,EACAP,EACAP,EAAyBpgC,GAAOygC,iBAExC+B,oBAAqBzxC,IAAAA,cAAAA,MAAAA,KAAM0xC,EAAkBziC,EAAOpR,IACpDw1C,gBAAiBjpC,EACjB2xC,gBACK9jB,GACDiY,EAAgBjhC,EAAMuhB,SAAU4f,EAAoBvQ,EAAoBwP,EAAyBpgC,GAAOwgC,eAC5GuM,mBACKxrB,GAAYyH,EACTj4B,IAAAA,cAACywC,EAAiBlnC,OAAAA,OAAAA,GAAK0F,EAAK,CAAEmhC,mBAAoBA,EAAoBD,sBAAuBA,UAE7F9rC,EAER43C,MAAOj8C,IAAAA,cAAC2vC,EAAKpmC,OAAAA,OAAAA,GAAK0F,EAAK,CAAEmhC,mBAAoBA,EAAoBD,sBAAuBA,KACxFn8B,SAAU/E,EAAMitC,gBG4aLC,CAhD8C,CACjD7M,kBAAmB13B,EACnB4kB,gBAAiB5kB,EAAK4kB,gBACtB9X,MAAK,UAAE9M,EAAKykB,mBAAP,aAAE,EAAkB+f,aACzBh+C,MAAOwZ,EAAKxZ,MACZ89C,cAAetkC,EAAKskC,cACpBx6C,QAAAA,EACAmwC,4BAA6BnkC,KAAKQ,MAAM2jC,4BACxCvqC,WAAYsQ,EAAKykB,YACX3uB,KAAK4uB,yBAAyB1kB,EAAKykB,YAAYE,eAAgB76B,EAASkW,EAAK4kB,gBAAgBx0B,WAC7F,GACNzG,cAAAA,EACAkK,UAAAA,EACAq0B,SAAUpyB,KAAKjR,MAAMS,GACrBw+B,eAAgBhuB,KAAKjR,MAAMgF,SAC3B2I,SAAUwN,EAAK4kB,gBAAgBt2B,SAC/Bm0B,SAAU,CACNkV,WAAY7hC,KAAK0mC,cACjB5E,aAAc9hC,KAAKmqC,kCACnBjG,iBAAkBlkC,KAAK0oC,gBACvB5F,SAAU9iC,KAAK8iC,SAASjgC,KAAK7C,OAEjC/L,UAAW,CACP+5C,iBAAAA,EACA7L,eAAAA,EACAC,uBAAAA,EACApyB,0BAAAA,EACAF,yBAAAA,EACAM,0BAAAA,EACAzC,cAAe5B,EACf6B,kBAAAA,EACAC,iBAAAA,EACA4C,uBAAAA,EACAyxB,iCAAkCgM,EAClC/b,mBAAoB8b,EACpBE,iBAAAA,EACAx9B,yBAAAA,EACAD,yBAAAA,EACAi0B,+BAAAA,EACAF,8BAAAA,GAEJ/wC,MAAAA,EACAovB,SAAU9iB,KAAK8iB,SACfyf,uBAAwBviC,KAAKsoC,wBAC7B/d,oCAAqCvqB,KAAKmwB,2CAC1C1gB,SAAUA,GAAYA,EAASnf,YA4TnC66C,kBACJnrC,KAAKkrC,UAAYlrC,KAAK2qC,kBAl4B1B/R,EAAAA,EAAAA,IAAAA,CADC+V,EAAAA,IACD,kCAEU/V,EAAAA,EAAAA,IAAAA,CAATC,EAAAA,IAAS,+BAoCVD,EAAAA,EAAAA,IAAAA,CADClP,EAAAA,IACD,uCA5CEmc,IAAkB,SADvBvzB,EAAAA,IACKuzB,IAm8BN,gFCvjCA,MAgHM+I,EAAc,CAACz/C,EAAsC0/C,EAAuB5C,KAC9E,IAAK98C,EACD,OAAO,KAGX,MAAM,IACF0D,EADE,WAEFu7C,EAFE,mBAGF9K,EAHE,aAIFE,EAJE,aAKFpG,EALE,cAMFyG,EANE,eAOFwK,EAPE,aAQFjgB,EARE,YASFsV,EATE,qBAUFI,EAVE,oBAWFC,EAXE,gBAYF4B,EAZE,MAaF4I,EAbE,SAcFzrB,EAdE,kBAeFwrB,EAfE,oCAgBF/jB,EAhBE,SAiBFjkB,GACAnX,EAYE2/C,EAViBxoC,EACjB,CACIyoC,cAAe,OACfC,QAAS,IAEb,CACID,cAAe,OACfC,QAAS,GAKnB,OACI18C,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,CAAChJ,IAAKA,EAAKN,UAAW,GAAG05C,EAAkB15C,aAAiB05C,GAC7D35C,EAAAA,cAAAA,KAAAA,KAAK87C,IACHtrB,GAAYyH,GAAuCj4B,EAAAA,cAAAA,KAAAA,CAAIwvB,MAAOgtB,GAAiBxL,GACjFhxC,EAAAA,cAAAA,KAAAA,CAAIwvB,MAAOgtB,GAAiBtL,GAC3B1gB,EACGxwB,EAAAA,cAAAA,KAAAA,KACIA,EAAAA,cAAAA,MAAAA,KAAMuxC,GACNvxC,EAAAA,cAAAA,MAAAA,CAAKwvB,MAAOgtB,GACPD,EADL,IACqB,IAChBlJ,IAITrzC,EAAAA,cAAAA,KAAAA,KAAKuxC,IAEP/gB,GAAYxwB,EAAAA,cAAAA,KAAAA,CAAIwvB,MAAOgtB,GAAiBpL,IACxC5gB,GAAYxwB,EAAAA,cAAAA,KAAAA,CAAIwvB,MAAOgtB,GAAiB1R,IACxCta,GAAYxwB,EAAAA,cAAAA,KAAAA,CAAIwvB,MAAOgtB,GAAiBhL,IACxChhB,GAAYxwB,EAAAA,cAAAA,KAAAA,CAAIwvB,MAAOgtB,GAAiB/K,GACzCjhB,GAAYxwB,EAAAA,cAAAA,KAAAA,CAAIwvB,MAAOgtB,GAAiBP,IACvCzrB,IAAayH,GACXj4B,EAAAA,cAAAA,KAAAA,CAAIwvB,MAAOgtB,GACNT,EACAjgB,GAGT97B,EAAAA,cAAAA,KAAAA,CAAIwvB,MAAOgtB,GAAiBR,KAKxC,EArLmEv/C,IAC/D,MAAM,mBACF82C,EADE,OAEFt1C,EAFE,cAGF+gC,EAHE,QAIFzZ,EAJE,cAKFm0B,EALE,qBAMFE,EANE,WAOFE,EAPE,iBAQFH,EARE,sBASFF,EATE,qBAUFtf,EAVE,aAWFkf,EAXE,WAYFa,EAZE,sBAaFC,EAbE,qBAcFZ,EAdE,mBAeFtD,EAfE,oBAgBFC,EAhBE,uBAiBFjG,EACAtuC,WAAW,eACP65C,EADO,kBAEPlB,EAFO,YAGPC,EAHO,qBAIPC,EAJO,eAKPC,EALO,oBAMPC,EANO,uBAOPxH,IAEJz2C,EAEEkgD,EAAgB38C,EAAAA,aAAkB,KACpCiwC,GAA0BA,OAAuB5rC,KAClD,CAAC4rC,IAEJ,OACIjwC,EAAAA,cAACm2B,EAAAA,OAAM5sB,OAAAA,OAAAA,GAAKgqC,GACPhuB,EACA4U,GACGn6B,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAK4wB,GACLkf,MAAAA,OADL,EACKA,EAAc6B,iBACd7B,MAAAA,OAFL,EAEKA,EAAc8B,eACd9B,MAAAA,OAHL,EAGKA,EAAc+B,eACd/B,MAAAA,OAJL,EAIKA,EAAcgC,oBACbpF,GAAsBwD,GAG/BF,EACW,YAAXt7C,GAAwB+gC,EACxB0a,GAAiBI,GAAcA,EAAWh7C,OAAS,GAChDkB,EAAAA,cAACkgB,EAAAA,KAAI,CAACjgB,UAAU,8BACZD,EAAAA,cAACkgB,EAAAA,KAAI3W,OAAAA,OAAAA,GAAKmwC,GACLE,EACD55C,EAAAA,cAAAA,QAAAA,KACK85C,GACGA,EAAW7uC,KAAIpO,GACJy/C,EAAYz/C,EAAS69C,EAAqBf,OAIhEO,GAGRC,EACDn6C,EAAAA,cAAC0W,EAAAA,MAAK,CACFkmC,cAAc,sCACd3a,WAAS,EACT4a,MAAM,EACNC,gBAAgB,aAChBnmC,OAAQs/B,EACRr/B,OAAQ+lC,GAER38C,EAAAA,cAAC6W,EAAAA,YAAW,CAACD,OAAQ+lC,GAAa,mBAClC38C,EAAAA,cAAC8W,EAAAA,UAAS,KACN9W,EAAAA,cAAAA,KAAAA,KACIA,EAAAA,cAAAA,KAAAA,KAAKk2C,MAAAA,OAAL,EAAKA,EAAqBhF,cAC1BlxC,EAAAA,cAAAA,KAAAA,CAAIC,UAAU,gBACVD,EAAAA,cAAAA,OAAAA,KAAOu6C,EAAP,KACCrE,MAAAA,OAFL,EAEKA,EAAqB9E,aAE1BpxC,EAAAA,cAAAA,KAAAA,KACIA,EAAAA,cAAAA,OAAAA,KAAOkzC,EAAP,KACCgD,MAAAA,OAFL,EAEKA,EAAqBlF,oBAE1BhxC,EAAAA,cAAAA,KAAAA,KACIA,EAAAA,cAAAA,OAAAA,KAAOs6C,EAAP,KACCpE,MAAAA,OAFL,EAEKA,EAAqB3E,eAE1BvxC,EAAAA,cAAAA,KAAAA,KACIA,EAAAA,cAAAA,OAAAA,KAAOw6C,EAAP,KACC,IACAtE,MAAAA,OAHL,EAGKA,EAAqBpL,cAE1B9qC,EAAAA,cAAAA,KAAAA,KACIA,EAAAA,cAAAA,OAAAA,KAAOy6C,EAAP,KACC,IACAvE,MAAAA,OAHL,EAGKA,EAAqB1E,sBAE1BxxC,EAAAA,cAAAA,KAAAA,KACIA,EAAAA,cAAAA,OAAAA,KAAO06C,EAAP,KACCxE,MAAAA,OAFL,EAEKA,EAAqBzE,qBAEzBgI,GAAyBz5C,EAAAA,cAAAA,KAAAA,KAAKy5C,KAGvCz5C,EAAAA,cAACkX,EAAAA,YAAW,KACRlX,EAAAA,cAACsJ,EAAAA,OAAM,CAAC9I,QAASm8C,GAAgBnB","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/dyn-cart/components/dyn-cart-pick-up-in-store.tsx?3d58","webpack://Msdyn365.Commerce.Online/./src/modules/dyn-cart/components/dyn-cart-line-items.tsx?080c","webpack://Msdyn365.Commerce.Online/./src/modules/dyn-cart/components/dyn-cart-line-groups.tsx?3fd9","webpack://Msdyn365.Commerce.Online/./src/modules/dyn-cart/utils/get-promotion-in-dyn-cart.ts?4e49","webpack://Msdyn365.Commerce.Online/./src/modules/dyn-cart/dyn-cart.tsx?1f4a","webpack://Msdyn365.Commerce.Online/./src/modules/dyn-cart/components/dyn-cart-line-items-promotion.tsx?fe39","webpack://Msdyn365.Commerce.Online/./src/modules/dyn-cart/dyn-cart.view.tsx?1dc2","webpack://Msdyn365.Commerce.Online/./src/modules/active-image-utilities/active-product.tsx?69b2","webpack://Msdyn365.Commerce.Online/./src/modules/active-image-utilities/additional-content.tsx?6946","webpack://Msdyn365.Commerce.Online/./src/modules/active-image-utilities/image-mapper.tsx?dd86","webpack://Msdyn365.Commerce.Online/./src/modules/active-image/active-image.tsx?00d3","webpack://Msdyn365.Commerce.Online/./src/modules/active-image/active-image.view.tsx?a935","webpack://Msdyn365.Commerce.Online/./src/modules/cart/actions/get-pickup-options-for-cartlines.ts?acad","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-line-groups.tsx?f076","webpack://Msdyn365.Commerce.Online/./src/modules/cart/utils/get-promotion-in-cart.ts?4195","webpack://Msdyn365.Commerce.Online/./src/modules/cart/cart.tsx?d4e4","webpack://Msdyn365.Commerce.Online/./src/modules/cart/cart.view.tsx?d8c2","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-line-items-promotion.tsx?80d9","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-line-items.tsx?f6b2","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-pick-up-in-store.tsx?dca8","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/components/order-template-list.tsx?86c4","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/components/orderTemplateList-status-message.tsx?183c","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/components/create-order-template.tsx?ea38","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/order-template-list.tsx?18d0","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/order-template-list.view.tsx?103b","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/spinner.tsx?b423","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/add-line.tsx?5f8a","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/dropdown.tsx?1cba","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/not-found.tsx?392d","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/common/order-template-quantity.tsx?99a1","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/product-configuration.tsx?b256","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/product-list.tsx?4284","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/bulk-actions.tsx?dbe8","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/order-template-actions.tsx?8136","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/order-template-lines.tsx?3703","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/order-template-lines-status-message.tsx?2986","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/order-template-table-heading.tsx?665c","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/order-template.tsx?4ecb","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/order-template.view.tsx?a45e"],"sourcesContent":["/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport {\r\n CartLine,\r\n ChannelDeliveryOptionConfiguration,\r\n OrgUnitLocation,\r\n ProductDeliveryOptions,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\r\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport interface IPickUpInStoreViewProps {\r\n callbacks: {\r\n toggleBopis(isBopisSelected: boolean): void;\r\n };\r\n defaultComponent?: React.ReactNode;\r\n orgUnitName?: string;\r\n isBopisSelected: boolean;\r\n ContainerProps: INodeProps;\r\n deliveryOption?: string;\r\n}\r\n\r\nexport interface IPickUpInStoreProps {\r\n cartline: CartLine;\r\n product: SimpleProduct;\r\n shipitText: string;\r\n pickUpInStoreText: string;\r\n changeStoreText: string;\r\n cartState: ICartState | undefined;\r\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\r\n orgUnitLocations?: OrgUnitLocation[] | undefined;\r\n deliveryOptions?: ProductDeliveryOptions;\r\n pickupDeliveryModeCode?: string;\r\n storeSelectorModuleId?: string;\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n retailMulitplePickupFeatureState?: boolean;\r\n locationChangedHandler(): void;\r\n}\r\n\r\nexport const PickUpInStore = (props: IPickUpInStoreProps): IPickUpInStoreViewProps | undefined => {\r\n const _onLocationChangedCallback = async (\r\n orgUnitLocation: OrgUnitLocation,\r\n cartState: ICartState | undefined,\r\n cartline: CartLine,\r\n deliveryMode?: string\r\n ) => {\r\n if (!cartState) {\r\n return Promise.resolve();\r\n }\r\n return cartState\r\n .updateCartLinePickupLocation({ cartLineId: cartline.LineId!, location: orgUnitLocation, deliveryMode })\r\n .then(result => {\r\n if (result.status === 'SUCCESS') {\r\n props.locationChangedHandler();\r\n }\r\n })\r\n .catch(error => {});\r\n };\r\n\r\n const _toggleBOPIS = (isBopisSelected: boolean) => {\r\n const { storeSelectorStateManager, product, cartline, cartState, storeSelectorModuleId } = props;\r\n\r\n if (isBopisSelected) {\r\n if (!storeSelectorStateManager) {\r\n return;\r\n }\r\n storeSelectorStateManager\r\n .openDialog({\r\n id: storeSelectorModuleId,\r\n product,\r\n alreadySelectedLocation: {\r\n OrgUnitNumber: cartline.FulfillmentStoreId\r\n },\r\n deliveryOptions: props.deliveryOptions,\r\n onLocationSelected: async (orgUnitLocation, deliveryMode: string | undefined) => {\r\n return _onLocationChangedCallback(orgUnitLocation, cartState, cartline, deliveryMode);\r\n }\r\n })\r\n .catch(error => {});\r\n } else {\r\n if (!cartState) {\r\n return;\r\n }\r\n cartline.DeliveryMode = '';\r\n cartline.FulfillmentStoreId = '';\r\n cartline.ShippingAddress = {};\r\n cartState\r\n .clearCartLinePickupLocation({ cartLineId: cartline.LineId! })\r\n .then(result => {\r\n if (result.status === 'SUCCESS') {\r\n props.locationChangedHandler();\r\n }\r\n })\r\n .catch(error => {});\r\n }\r\n };\r\n\r\n const _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\r\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\r\n return '';\r\n }\r\n\r\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\r\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\r\n });\r\n\r\n if (foundLocation) {\r\n return foundLocation.OrgUnitName;\r\n }\r\n return fulfillmentStoreId;\r\n };\r\n\r\n const _renderShippingMethod = (\r\n cartLine: CartLine,\r\n shipItText: string,\r\n pickupInStoretext: string,\r\n changeStoreText: string,\r\n orgUnitLocations: OrgUnitLocation[] | undefined\r\n ): JSX.Element => {\r\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, orgUnitLocations);\r\n const bopisSelected = !!cartLine.FulfillmentStoreId;\r\n\r\n const toggleBOPIS = (isBopisSelected: boolean) => {\r\n return () => {\r\n _toggleBOPIS(isBopisSelected);\r\n };\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n {cartLine.FulfillmentStoreId ? (\r\n
\r\n {orgUnitName}\r\n \r\n
\r\n ) : null}\r\n \r\n );\r\n };\r\n\r\n const _getDeliveryOption = (pickupStore: IPickUpInStoreProps, deliveryOptions: ProductDeliveryOptions) => {\r\n const delivery = deliveryOptions?.DeliveryOptions?.find(option => option.Code === pickupStore.pickupDeliveryModeCode);\r\n return delivery?.Description;\r\n };\r\n\r\n // If no delivery options present on the product, or none of the delivery options\r\n // match the PickupDeliveryModeCode, that means the item cannot be used for BOPIS\r\n if (\r\n !props.deliveryOptions ||\r\n !props.deliveryOptions.DeliveryOptions ||\r\n !props.pickupDeliveryModeCode ||\r\n !props.deliveryOptions.DeliveryOptions.find(option => option.Code === props.pickupDeliveryModeCode)\r\n ) {\r\n return undefined;\r\n }\r\n\r\n return {\r\n callbacks: {\r\n toggleBopis: _toggleBOPIS\r\n },\r\n defaultComponent: _renderShippingMethod(\r\n props.cartline,\r\n props.shipitText,\r\n props.pickUpInStoreText,\r\n props.changeStoreText,\r\n props.orgUnitLocations\r\n ),\r\n orgUnitName: _getOrgUnitName(props.cartline.FulfillmentStoreId, props.orgUnitLocations),\r\n isBopisSelected: !!props.cartline.FulfillmentStoreId,\r\n deliveryOption: _getDeliveryOption(props, props.deliveryOptions),\r\n ContainerProps: {\r\n className: 'msc-cart-line__bopis-container'\r\n }\r\n };\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport {\r\n AddToOrderTemplateComponent,\r\n AddToWishlistComponent,\r\n IAddToOrderTemplateDialogResources,\r\n ICartlineResourceString,\r\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\r\n IItemAddedToOrderTemplateDialogResources,\r\n IOrderTemplateNameDialogResources,\r\n IWishlistActionSuccessResult\r\n} from '@msdyn365-commerce/components'; //CartLineItemComponent\r\nimport MsDyn365, { IAny, ICoreContext, IGeneric, IGridSettings, IImageSettings, ITelemetry, TelemetryEvent } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport {\r\n AsyncResult,\r\n CartLine,\r\n ChannelDeliveryOptionConfiguration,\r\n CommerceList,\r\n Customer,\r\n CartLineValidationResultsByLineId,\r\n OrgUnitLocation,\r\n ProductDeliveryOptions,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { ProductCatalog, ProductDimensionType, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\r\nimport {\r\n ArrayExtensions,\r\n getInvoiceDetailsPageUrlSync,\r\n getProductUrlSync,\r\n IProductInventoryInformation,\r\n ObjectExtensions,\r\n OrderTemplate\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '@msdyn365-commerce-modules/cart';\r\nimport { IPickUpInStoreViewProps, PickUpInStore } from './dyn-cart-pick-up-in-store';\r\nimport { AttributeValue } from '@msdyn365-commerce/retail-proxy';\r\n// import { IComponentProps } from '@msdyn365-commerce/core';\r\n// import { SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { TebuCartLineItemComponent } from '../../../themes/dyn-tebutheme/views/components/cartlineitem.component';\r\n\r\nexport interface ProductWithAttributes {\r\n productDetails: SimpleProduct | undefined;\r\n productSpecificationData: AttributeValue[] | null;\r\n}\r\n\r\nexport interface ICartLineItemsProps {\r\n cartlines: CartLine[];\r\n cartlinesErrors: CartLineValidationResultsByLineId;\r\n cartState: ICartState | undefined;\r\n orgUnitLocations: OrgUnitLocation[] | undefined;\r\n resources: ICartlineResourceString;\r\n productAvailabilites: IProductInventoryInformation[] | undefined;\r\n products: SimpleProduct[] | undefined;\r\n productsWithAttributes: ProductWithAttributes[] | undefined;\r\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\r\n pickupDeliveryModeCode?: string;\r\n catalogs?: ProductCatalog[];\r\n retailMulitplePickupFeatureState?: boolean;\r\n\r\n /* GridSettings for the product image in cartline */\r\n gridSettings: IGridSettings;\r\n\r\n /* ImageSettings for the product image in cartline */\r\n imageSettings: IImageSettings;\r\n id: string;\r\n typeName: string;\r\n context: ICoreContext>;\r\n telemetry: ITelemetry;\r\n removeButtonText: string;\r\n addToWishlistButtonText: string;\r\n removeFromWishlistButtonText: string;\r\n shipItText: string;\r\n pickitUpText: string;\r\n changeStoreText: string;\r\n outOfStockText: string;\r\n outOfRangeOneText: string;\r\n outOfRangeFormatText: string;\r\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\r\n isStockCheckEnabled: boolean;\r\n wishlists: CommerceList[] | undefined;\r\n defaultWishlistName: string;\r\n maxCartlineQuantity: number;\r\n includeErrors?: boolean;\r\n showShippingChargesForLineItems?: boolean;\r\n telemetryContent?: ITelemetryContent;\r\n isQuantityLimitsFeatureEnabled: boolean;\r\n storeSelectorModuleId?: string;\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n\r\n addToOrderTemplateDialogResources: IAddToOrderTemplateDialogResources;\r\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\r\n itemAddedToOrderTemplateDialogResources: IItemAddedToOrderTemplateDialogResources;\r\n duplicateItemsWhenAddingToOrderTemplateDialogResources: IDuplicateItemsWhenAddingToOrderTemplateDialogResources;\r\n\r\n addToOrderTemplateButtonText: string;\r\n addToOrderTemplateButtonTooltip: string;\r\n addToOrderTemplateMessage: string;\r\n addItemToOrderTemplateError: string;\r\n orderTemplates: OrderTemplate[] | undefined;\r\n customerInformation: Customer | undefined;\r\n shouldIgnoreWarehouse: boolean | undefined;\r\n productAvailability?: AsyncResult;\r\n\r\n removeItemClickHandler(cartlineToRemove: CartLine): void;\r\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\r\n updateCartLinesQuantitySuccessHandler(cartline: CartLine, quantity: number, lineIndex?: number): boolean;\r\n locationChangedHandler(): void;\r\n}\r\n\r\nexport interface ICartlinesViewProps {\r\n cartline: React.ReactNode;\r\n pickUpInStore?: IPickUpInStoreViewProps;\r\n remove: React.ReactNode;\r\n addToWishlist: React.ReactNode | undefined;\r\n addToOrderTemplate: React.ReactNode | undefined;\r\n\r\n error?: string;\r\n cartlineId?: string;\r\n hasError?: boolean;\r\n data?: {\r\n product?: SimpleProduct;\r\n productSpecificationData: AttributeValue[] | null;\r\n cartline: CartLine;\r\n };\r\n}\r\n\r\nconst _getCartItemAvailableQuantity = (\r\n isStockCheckEnabled: boolean,\r\n productAvailability: IProductInventoryInformation | undefined\r\n): number => {\r\n if (\r\n !isStockCheckEnabled ||\r\n !productAvailability ||\r\n !productAvailability.ProductAvailableQuantity ||\r\n !productAvailability.IsProductAvailable ||\r\n !productAvailability.ProductAvailableQuantity.AvailableQuantity\r\n ) {\r\n return 0;\r\n }\r\n\r\n return productAvailability.ProductAvailableQuantity.AvailableQuantity;\r\n};\r\n\r\nconst _getCartItemMaxQuantity = (\r\n maxQuantityByConfig: number,\r\n isStockCheckEnabled: boolean,\r\n availableQuantityInStock: number,\r\n isQuantityLimitsFeatureEnabled: boolean,\r\n maxByQuantityLimitsFeature: number\r\n) => {\r\n if (isQuantityLimitsFeatureEnabled) {\r\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\r\n\r\n // If max by feature in not defined when feature is on then we suggest that there no max by feature\r\n // and consider available qty if stock check enabled and max from config in site settings.\r\n if (!maxByQuantityLimitsFeature) {\r\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\r\n }\r\n\r\n return isStockCheckEnabled\r\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\r\n ? maxByQuantityLimitsFeatureResult\r\n : availableQuantityInStock\r\n : maxByQuantityLimitsFeatureResult;\r\n }\r\n if (isStockCheckEnabled) {\r\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\r\n }\r\n return maxQuantityByConfig;\r\n};\r\n\r\nconst _getErrorMessage = (\r\n availableQuantityInStock: number,\r\n currentQuantity: number,\r\n props: ICartLineItemsProps,\r\n shouldSkipStockCheck: boolean,\r\n cartLine: CartLine,\r\n lineId: string | undefined\r\n): string | undefined => {\r\n const finalErrorMessages: string[] = [];\r\n\r\n const isLoadingDeliveryOptions = props.productAvailability?.status === 'LOADING';\r\n if (isLoadingDeliveryOptions) {\r\n return undefined;\r\n }\r\n\r\n let foundProductAvailability;\r\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\r\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\r\n if (props.shouldIgnoreWarehouse) {\r\n return productAvailability.ProductAvailableQuantity.ProductId === cartLine.ProductId;\r\n }\r\n return (\r\n productAvailability.ProductAvailableQuantity.ProductId === cartLine.ProductId &&\r\n productAvailability.InventLocationId === cartLine.WarehouseId\r\n );\r\n });\r\n if (foundProductAvailability === undefined) {\r\n return undefined;\r\n }\r\n }\r\n\r\n if (props.includeErrors && props.isStockCheckEnabled && !shouldSkipStockCheck) {\r\n if (availableQuantityInStock <= 0) {\r\n finalErrorMessages.push(props.outOfStockText);\r\n } else if (availableQuantityInStock < currentQuantity) {\r\n if (availableQuantityInStock === 1) {\r\n finalErrorMessages.push(props.outOfRangeOneText);\r\n } else {\r\n finalErrorMessages.push(props.outOfRangeFormatText.replace('{numLeft}', availableQuantityInStock.toString()));\r\n }\r\n }\r\n }\r\n\r\n // Server-side validation\r\n const checkForErrors = props.cartlinesErrors.ValidationResultsPairs;\r\n const errorsFoundByLineId = checkForErrors?.filter(index => index.LineId === lineId);\r\n if (errorsFoundByLineId !== undefined) {\r\n for (const i of errorsFoundByLineId) {\r\n if (ArrayExtensions.hasElements(i.ValidationFailures)) {\r\n i.ValidationFailures.forEach(validation => {\r\n if (validation.ErrorContext !== undefined) {\r\n finalErrorMessages.push(validation.ErrorContext);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (ArrayExtensions.hasElements(finalErrorMessages)) {\r\n return finalErrorMessages.join(' ');\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\n/**\r\n * On Remove Click functionality.\r\n * @param removeItemClickHandler -Remove item click function.\r\n * @param cartline -CartLine.\r\n * @returns Remove change value.\r\n */\r\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\r\n removeItemClickHandler(cartline);\r\n};\r\n\r\n// eslint-disable-next-line complexity -- Auto-suppressed.\r\nconst _assembleNode = (\r\n cartline: CartLine,\r\n product: SimpleProduct | undefined,\r\n productSpecificationData: AttributeValue[] | null,\r\n props: ICartLineItemsProps,\r\n index: number,\r\n foundProductAvailability?: IProductInventoryInformation,\r\n foundProductDeliveryOptions?: ProductDeliveryOptions\r\n): ICartlinesViewProps => {\r\n const {\r\n imageSettings,\r\n gridSettings,\r\n id,\r\n typeName,\r\n context,\r\n resources,\r\n removeButtonText,\r\n removeItemClickHandler,\r\n moveToWishlistSuccessHandler,\r\n addToOrderTemplateButtonText,\r\n addToOrderTemplateButtonTooltip,\r\n addToOrderTemplateDialogResources,\r\n createOrderTemplateDialogResources,\r\n itemAddedToOrderTemplateDialogResources,\r\n duplicateItemsWhenAddingToOrderTemplateDialogResources,\r\n addToWishlistButtonText,\r\n removeFromWishlistButtonText,\r\n orderTemplates,\r\n customerInformation,\r\n wishlists,\r\n defaultWishlistName,\r\n storeSelectorModuleId\r\n } = props;\r\n\r\n const isAuthenticated = context.request.user.isAuthenticated;\r\n const nameOfWishlist = wishlists && wishlists.length > 0 && wishlists[0].Name ? wishlists[0].Name : defaultWishlistName;\r\n const availableQuantityInStock = _getCartItemAvailableQuantity(props.isStockCheckEnabled, foundProductAvailability);\r\n\r\n const maxQuantity =\r\n product &&\r\n _getCartItemMaxQuantity(\r\n props.maxCartlineQuantity,\r\n props.isStockCheckEnabled,\r\n availableQuantityInStock,\r\n props.isQuantityLimitsFeatureEnabled,\r\n product?.Behavior?.MaximumQuantity || 0\r\n );\r\n\r\n // Skip stock check if the cart line is a service item or an invoice line\r\n const shouldSkipStockCheck = product?.ItemTypeValue === ReleasedProductType.Service || !!cartline.IsInvoiceLine;\r\n\r\n const errorMessage = ObjectExtensions.isNullOrUndefined(maxQuantity)\r\n ? undefined\r\n : _getErrorMessage(availableQuantityInStock, cartline.Quantity!, props, shouldSkipStockCheck, cartline, cartline.LineId);\r\n\r\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\r\n\r\n const payload = getPayloadObject(TelemetryEvent.RemoveFromCart, props.telemetryContent!, removeButtonText, '');\r\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\r\n\r\n const inventoryLbl = foundProductAvailability?.StockLevelLabel;\r\n const inventoryCode = foundProductAvailability\r\n ? `ms-cart-line__inventory-code-${foundProductAvailability.StockLevelCode?.toLowerCase()}`\r\n : undefined;\r\n const productDimension = 4;\r\n const customPriceDimensionType = productDimension as ProductDimensionType.Style;\r\n const isCustomPriceSelected =\r\n product?.Dimensions?.find(dimension => dimension.DimensionTypeValue === customPriceDimensionType)?.DimensionValue?.Value ===\r\n 'Custom';\r\n\r\n let productUrl: string | undefined;\r\n if (product) {\r\n productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\r\n\r\n if (MsDyn365.isBrowser) {\r\n const fullUrl = new URL(productUrl, window.location.href);\r\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\r\n productUrl = fullUrl.href;\r\n }\r\n } else {\r\n productUrl = getInvoiceDetailsPageUrlSync(cartline.Description || '', props.context.actionContext);\r\n }\r\n return {\r\n data: {\r\n product,\r\n productSpecificationData,\r\n cartline\r\n },\r\n cartlineId: cartline.LineId,\r\n error: errorMessage,\r\n hasError: !shouldSkipStockCheck && props.isStockCheckEnabled ? cartline.Quantity! > (maxQuantity ?? 0) : false,\r\n cartline: (\r\n \r\n ),\r\n pickUpInStore: product\r\n ? PickUpInStore({\r\n storeSelectorModuleId,\r\n cartState: props.cartState,\r\n cartline,\r\n product,\r\n shipitText: props.shipItText,\r\n pickUpInStoreText: props.pickitUpText,\r\n changeStoreText: props.changeStoreText,\r\n storeSelectorStateManager: props.storeSelectorStateManager,\r\n orgUnitLocations: props.orgUnitLocations,\r\n deliveryOptions: foundProductDeliveryOptions,\r\n pickupDeliveryModeCode:\r\n cartline.DeliveryMode !== (undefined || '') ? cartline.DeliveryMode : props.pickupDeliveryModeCode,\r\n retailMulitplePickupFeatureState: props.retailMulitplePickupFeatureState,\r\n channelDeliveryOptionConfig: props.channelDeliveryOptionConfig,\r\n locationChangedHandler: props.locationChangedHandler\r\n })\r\n : undefined,\r\n remove: (\r\n \r\n ),\r\n addToWishlist:\r\n isAuthenticated && product && !isCustomPriceSelected ? (\r\n \r\n ) : (\r\n undefined\r\n ),\r\n addToOrderTemplate:\r\n isAuthenticated && orderTemplates && product ? (\r\n \r\n ) : (\r\n undefined\r\n )\r\n };\r\n};\r\n\r\nexport const assembleCartlines = (\r\n cartlines: CartLine[],\r\n //products: SimpleProduct[] | undefined,\r\n productsWithAttributes: ProductWithAttributes[] | undefined,\r\n props: ICartLineItemsProps\r\n): ICartlinesViewProps[] | null => {\r\n const reactNodes: ICartlinesViewProps[] = [];\r\n\r\n const products: SimpleProduct[] = [];\r\n productsWithAttributes?.forEach(p => {\r\n if (p.productDetails) {\r\n products.push(p.productDetails);\r\n }\r\n });\r\n\r\n cartlines.map((cartline, index) => {\r\n let product;\r\n if (props.isQuantityLimitsFeatureEnabled) {\r\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\r\n // to check productId and WarehouseId for identification.\r\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\r\n } else {\r\n product = getProductByProductId(cartline.ProductId, products);\r\n }\r\n let foundProductAvailability;\r\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\r\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\r\n if (props.shouldIgnoreWarehouse) {\r\n return productAvailability.ProductAvailableQuantity?.ProductId === cartline.ProductId;\r\n }\r\n return (\r\n productAvailability.ProductAvailableQuantity?.ProductId === cartline.ProductId &&\r\n productAvailability.InventLocationId === cartline.WarehouseId\r\n );\r\n });\r\n }\r\n let foundProductDeliveryOption;\r\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\r\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\r\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\r\n });\r\n }\r\n\r\n const simpleProduct = product as SimpleProduct;\r\n const productSpecificationData: AttributeValue[] | null =\r\n productsWithAttributes?.find(p => p.productDetails?.RecordId === simpleProduct?.RecordId)?.productSpecificationData ?? null;\r\n\r\n reactNodes.push(\r\n _assembleNode(cartline, product, productSpecificationData, props, index, foundProductAvailability, foundProductDeliveryOption)\r\n );\r\n });\r\n\r\n return reactNodes;\r\n};\r\n\r\n/**\r\n * CartLineItems component.\r\n * @param props\r\n */\r\nexport const CartLineItems = (props: ICartLineItemsProps) => {\r\n const { productsWithAttributes, cartlines } = props;\r\n return assembleCartlines(cartlines, productsWithAttributes, props);\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport groupBy from 'lodash/groupBy';\r\n\r\nimport { assembleCartlines, ICartLineItemsProps, ICartlinesViewProps, ProductWithAttributes } from './dyn-cart-line-items'; //ProductWithAttributes\r\n\r\nconst _assembleGroupCartlines = (\r\n cartlines: CartLine[],\r\n //products: SimpleProduct[] | undefined,\r\n productsWithAttributes: ProductWithAttributes[] | undefined,\r\n props: ICartLineItemsProps\r\n): ICartlinesViewProps[][] | null => {\r\n const reactNodes: ICartlinesViewProps[][] = [];\r\n if (!productsWithAttributes || productsWithAttributes.length === 0) {\r\n props.context.telemetry.error('Products content is empty, module wont render');\r\n return null;\r\n }\r\n\r\n const products: SimpleProduct[] = [];\r\n productsWithAttributes?.forEach(p => {\r\n if (p.productDetails) {\r\n products.push(p.productDetails);\r\n }\r\n });\r\n\r\n const getGroupByStorePickup = (items: CartLine[]) => groupBy(items, item => item.FulfillmentStoreId);\r\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.DeliveryMode);\r\n const groupDelivery = getGroupByDelivery(cartlines);\r\n const cartLinesGroup: CartLine[] = [];\r\n\r\n // 1) Group by store and pick up mode\r\n Object.entries(groupDelivery).forEach(([deliveryType, groupByDeliveryType]) => {\r\n // @ts-expect-error\r\n groupDelivery[deliveryType] = getGroupByStorePickup(groupByDeliveryType);\r\n cartLinesGroup.push(getGroupByStorePickup(groupByDeliveryType));\r\n });\r\n\r\n // 2) Create cartlines group\r\n Object.keys(cartLinesGroup).forEach(key => {\r\n const cartLines = cartLinesGroup[key];\r\n Object.keys(cartLines).forEach(index => {\r\n const cartLine = cartLines[index];\r\n const carLineViewProps = assembleCartlines(cartLine, productsWithAttributes, props);\r\n if (carLineViewProps !== null) {\r\n reactNodes.push(carLineViewProps);\r\n }\r\n });\r\n });\r\n\r\n return reactNodes;\r\n};\r\n\r\n/**\r\n * CartLine Group component.\r\n * @param props\r\n */\r\nexport const CartLineGroupItems = (props: ICartLineItemsProps) => {\r\n const { productsWithAttributes, cartlines } = props;\r\n return _assembleGroupCartlines(cartlines, productsWithAttributes, props);\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\r\nimport { getPromotionOptionsForCartLineItems, PromotionOptionsForCartLineItems } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * IPromotionData entity interface.\r\n */\r\nexport interface IPromotionData {\r\n promotionOptions?: CartPromotionLine[];\r\n}\r\n\r\n/**\r\n * Calls the Retail API and returns a promotion data.\r\n * @param ctx\r\n */\r\nexport async function getPromotionData(ctx: IActionContext): Promise {\r\n const promotionData: IPromotionData = {};\r\n\r\n await getPromotionOptionsForCartLineItems(new PromotionOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\r\n .then(promotionOptions => {\r\n if (promotionOptions) {\r\n promotionData.promotionOptions = promotionOptions;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n return {};\r\n });\r\n\r\n return promotionData;\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport {\r\n IAddToOrderTemplateDialogResources,\r\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\r\n IItemAddedToOrderTemplateDialogResources,\r\n ILinesAddedToOrderTemplateDialogResources,\r\n IOrderTemplateNameDialogResources,\r\n IWishlistActionSuccessResult,\r\n PromoCodeComponent,\r\n SaveCartToOrderTemplateComponent\r\n} from '@msdyn365-commerce/components';\r\nimport MsDyn365, { getUrlSync, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\r\nimport {\r\n AsyncResult,\r\n CartLine,\r\n CartLineValidationResultsByLineId,\r\n LineValidationResult,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { cartLineQuantityUpdatedAsync, validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\r\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\r\n//import { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport { IDynOrderSummaryLines, DynOrderSummary } from './utilities/dyn-order-summary-lineitem';\r\nimport {\r\n ActiveCartProductsInput,\r\n ArrayExtensions,\r\n getActiveCartProductsAction,\r\n ICartLineInventoryValidationResult,\r\n ObjectExtensions,\r\n validateCartLinesInventory\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Alert,\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n INodeProps,\r\n IPayLoad,\r\n ITelemetryContent,\r\n TelemetryConstant,\r\n Waiting\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { reaction } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport React from 'react';\r\n\r\nimport { IDynCartData } from './dyn-cart.data';\r\nimport { IDynCartProps, IDynCartResources } from './dyn-cart.props.autogenerated';\r\nimport { CartLineGroupItems } from './components/dyn-cart-line-groups';\r\nimport { CartLineItems, ICartlinesViewProps, ProductWithAttributes } from './components/dyn-cart-line-items';\r\nimport { cartPromotions, ICartLineItemViewProps } from './components/dyn-cart-line-items-promotion';\r\nimport { getPromotionData, IPromotionData } from './utils/get-promotion-in-dyn-cart';\r\nimport { AttributesForSelectedVariantInput, getAttributesForSelectedVariant } from '@msdyn365-commerce-modules/product-specification';\r\n\r\n/**\r\n * Cart view props interface.\r\n */\r\nexport interface ICartViewProps extends IDynCartProps {\r\n className: string;\r\n title?: React.ReactNode;\r\n CartlinesWrapper: INodeProps;\r\n cartlines?: ICartlinesViewProps[];\r\n cartLinesGroup?: ICartlinesViewProps[][];\r\n cart: ICartState | undefined;\r\n orderSummaryHeading: React.ReactNode;\r\n orderSummaryLineitems?: IDynOrderSummaryLines;\r\n invoiceSummaryLineitems?: IInvoiceSummaryLines;\r\n OrderSummaryWrapper: INodeProps;\r\n OrderSummaryItems: INodeProps;\r\n OrderSummaryErrors?: IOrderSummaryErrors;\r\n checkoutAsGuestButton: React.ReactNode;\r\n checkoutAsSignInUserButton: React.ReactNode;\r\n storeSelector?: React.ReactNode;\r\n backToShoppingButton: React.ReactNode;\r\n waitingComponent: React.ReactNode;\r\n promotionOptions?: ICartLineItemViewProps;\r\n promoCode: React.ReactNode;\r\n cartLoadingStatus: string;\r\n cartDataResult: boolean;\r\n multiplePickUpEnabled?: boolean;\r\n createTemplateFromCartButton: React.ReactNode;\r\n telemetryContent?: ITelemetryContent;\r\n removeItemClickHandler(cartlineToRemove: CartLine): void;\r\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\r\n}\r\n\r\n/**\r\n * Order summary errors interface.\r\n */\r\nexport interface IOrderSummaryErrors {\r\n Wrapper: INodeProps;\r\n header: React.ReactNode;\r\n errors: React.ReactNode[];\r\n}\r\n\r\n/**\r\n * Cart component state interface.\r\n */\r\ninterface ICartComponentState {\r\n showPromotionDialog: boolean;\r\n cartlinesErrors: CartLineValidationResultsByLineId;\r\n promotionData: IPromotionData;\r\n products: SimpleProduct[];\r\n isCartValid: boolean;\r\n productsWithAttributes: ProductWithAttributes[];\r\n}\r\n\r\n/**\r\n * Cart component.\r\n * @extends {React.PureComponent>}\r\n */\r\n@observer\r\nclass Cart extends React.Component> {\r\n public state: ICartComponentState;\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n private isQuantityLimitsFeatureEnabled: boolean = false;\r\n\r\n private _isMounted: boolean = false;\r\n\r\n private readonly promotionPopupId: string = 'cart-promotion-popup';\r\n\r\n public constructor(props: IDynCartProps) {\r\n super(props);\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '');\r\n this.promotionLinkClick = this.promotionLinkClick.bind(this);\r\n this.promotionCloseButtonclick = this.promotionCloseButtonclick.bind(this);\r\n\r\n this.state = {\r\n showPromotionDialog: false,\r\n promotionData: {},\r\n products: [],\r\n isCartValid: true,\r\n cartlinesErrors: {},\r\n productsWithAttributes: []\r\n };\r\n }\r\n\r\n private _getProductAttribute = async (product: SimpleProduct, actionContext: any) => {\r\n const actionInput = new AttributesForSelectedVariantInput(\r\n product.RecordId,\r\n +actionContext.requestContext.apiSettings.channelId,\r\n product\r\n );\r\n\r\n return getAttributesForSelectedVariant(actionInput, this.props.context.actionContext).catch((error: Error) => {\r\n console.log(error);\r\n });\r\n };\r\n\r\n public ProductsWithAttributes: ProductWithAttributes[] = [];\r\n\r\n /**\r\n * Component did mount function.\r\n */\r\n public async componentDidMount(): Promise {\r\n this._isMounted = true;\r\n const {\r\n config,\r\n context: { actionContext }\r\n } = this.props;\r\n //debugger;\r\n this.isQuantityLimitsFeatureEnabled = await this.getOrderQuantityLimitsFeatureFlag();\r\n if (this.isQuantityLimitsFeatureEnabled) {\r\n await this.validateCart();\r\n }\r\n try {\r\n const products = await this.props.data.products;\r\n for (let i = 0; i < products.length; i++) {\r\n if (products[i]) {\r\n let attributes = await this._getProductAttribute(products[i], actionContext);\r\n this.ProductsWithAttributes.push({\r\n productDetails: products[i],\r\n productSpecificationData: attributes ?? attributes !== undefined ? attributes : null\r\n });\r\n }\r\n }\r\n\r\n if (this._isMounted) {\r\n this.setState({ products });\r\n }\r\n } catch (error) {\r\n this.props.telemetry.warning(error as string);\r\n this.props.telemetry.debug('Unable to get cart');\r\n }\r\n\r\n if (config.showAvailablePromotions) {\r\n if (this._isMounted && this.props.data.cart.result?.cart.CartLines) {\r\n this.setState({ promotionData: await getPromotionData(actionContext) });\r\n }\r\n\r\n reaction(\r\n () => this.props.data.cart.result?.cart.CartLines,\r\n async () => {\r\n if (this._isMounted) {\r\n this.setState({ promotionData: await getPromotionData(actionContext) });\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Component will unmount function.\r\n */\r\n public componentWillUnmount(): void {\r\n this._isMounted = false;\r\n }\r\n\r\n /**\r\n * Should component update function.\r\n * @param nextProps - Next props.\r\n * @param nextState - Next state.\r\n * @returns True if component should update, false otherwise.\r\n */\r\n public shouldComponentUpdate(nextProps: IDynCartProps, nextState: ICartComponentState): boolean {\r\n if (this.state === nextState && this.props.data === nextProps.data) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /* eslint-disable complexity -- Disabling complexity for render method */\r\n public render(): JSX.Element | null {\r\n const {\r\n data: {\r\n cart: { result: cart },\r\n products: { result: products }\r\n },\r\n context: {\r\n request: {\r\n user: { isAuthenticated, signInUrl }\r\n }\r\n },\r\n resources\r\n } = this.props;\r\n\r\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\r\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) || '';\r\n const checkoutURL = this.getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\r\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\r\n const cartLines = this._getCartLines();\r\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\r\n const validInventoryAcrossCartLines = validateCartLinesInventory(\r\n cart?.cart.CartLines ?? [],\r\n this.props.data.productAvailabilites.result ?? [],\r\n this.props.context.actionContext,\r\n products ?? [],\r\n emailDeliveryModeCode\r\n );\r\n\r\n const hasError =\r\n !validInventoryAcrossCartLines?.isValid ||\r\n (!validInventoryAcrossCartLines && !this.state.isCartValid) ||\r\n (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\r\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\r\n );\r\n const multiplePickUpEnabled = !cart?.hasInvoiceLine && RetailMultiplePickupFeatureState?.IsEnabled;\r\n const cartLinesGroup = multiplePickUpEnabled ? this.getCartLinesGroup() : null;\r\n this.payLoad.contentAction.etext = TelemetryConstant.Checkout;\r\n const checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n this.payLoad.contentAction.etext = TelemetryConstant.GuestCheckout;\r\n const checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n this.payLoad.contentAction.etext = TelemetryConstant.BackToShopping;\r\n const backtoShoppingAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n\r\n // If there's inventory issues across multiple cart lines then update the error and display as part of the order summary\r\n if (validInventoryAcrossCartLines && !validInventoryAcrossCartLines.isValid) {\r\n if (multiplePickUpEnabled && cartLinesGroup !== null) {\r\n for (const cartLineGroup of cartLinesGroup) {\r\n this._updateCartLineErrorForInvalidInventory(cartLineGroup, validInventoryAcrossCartLines);\r\n }\r\n }\r\n\r\n this._updateCartLineErrorForInvalidInventory(cartLines, validInventoryAcrossCartLines);\r\n }\r\n\r\n const viewProps = {\r\n ...this.props,\r\n className: classnames('ms-cart'),\r\n title:

{resources.cartTitle}

,\r\n cart: this.props.data.cart.result,\r\n CartlinesWrapper: { className: 'msc-cartline-wraper' },\r\n OrderSummaryWrapper: { className: cart?.hasInvoiceLine ? 'msc-invoice-summary-wrapper' : 'msc-order-summary-wrapper' },\r\n OrderSummaryItems: { className: cart?.hasInvoiceLine ? 'msc-invoice-summary__items' : 'msc-order-summary__items' },\r\n cartlines: cartLines,\r\n cartLinesGroup,\r\n promoCode: this._getPromoCode(),\r\n promotionOptions: this._getPromotions(),\r\n context: this.props.context,\r\n typeName: this.props.typeName,\r\n telemetry: this.props.telemetry,\r\n id: this.props.id,\r\n multiplePickUpEnabled,\r\n removePromoAriaLabelFormat: resources.removePromoAriaLabelFormat,\r\n orderSummaryHeading: ArrayExtensions.hasElements(cart?.cart.CartLines) ? (\r\n cart?.hasInvoiceLine ? (\r\n

{resources.invoiceSummaryTitle}

\r\n ) : (\r\n

{resources.orderSummaryTitle}

\r\n )\r\n ) : null,\r\n orderSummaryLineitems: this._getOrderSummaryLineItems(),\r\n invoiceSummaryLineitems: this._getInvoiceSummaryLineItems(),\r\n checkoutAsSignInUserButton: !isCartEmpty ? (\r\n \r\n {resources.checkoutButtonTitle}\r\n \r\n ) : null,\r\n checkoutAsGuestButton:\r\n !isCartEmpty && !isAuthenticated ? (\r\n \r\n {resources.guestCheckoutButtonTitle}\r\n \r\n ) : null,\r\n backToShoppingButton: (\r\n \r\n {resources.backToShoppingButtonTitle}\r\n \r\n ),\r\n createTemplateFromCartButton:\r\n this._displayAddCartToTemplate() && products ? (\r\n \r\n ) : null,\r\n storeSelector:\r\n this.props.slots.storeSelector && this.props.slots.storeSelector.length > 0 ? this.props.slots.storeSelector[0] : null,\r\n removeItemClickHandler: this.removeItemFromCartHandler,\r\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\r\n waitingComponent: ,\r\n cartLoadingStatus: this.props.data.cart.status === 'FAILED' ? this.props.resources.cartLoadingErrorMessage : null,\r\n cartDataResult: this.props.data.cart.result && this.props.data.cart.result.isEmpty,\r\n OrderSummaryErrors: this._getOrderSummaryErrors(cartLines),\r\n telemetryContent: this.telemetryContent\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n /* eslint-enable complexity -- Disabling complexity for render method */\r\n\r\n /**\r\n * Promotion click event handler.\r\n * @param event - The mouse event.\r\n */\r\n private readonly promotionLinkClick = (event: React.MouseEvent) => {\r\n this.setState({\r\n showPromotionDialog: !this.state.showPromotionDialog\r\n });\r\n };\r\n\r\n /**\r\n * Promotion close button click.\r\n */\r\n private readonly promotionCloseButtonclick = () => {\r\n this._hidePromotionDialog();\r\n };\r\n\r\n /**\r\n * Hide promotion dialog.\r\n */\r\n private _hidePromotionDialog(): void {\r\n this.setState({\r\n showPromotionDialog: false\r\n });\r\n }\r\n\r\n /**\r\n * Display add to cart template.\r\n * @returns True if should display, false otherwise.\r\n */\r\n private _displayAddCartToTemplate(): boolean {\r\n const cart = this.props.data.cart?.result;\r\n if (ObjectExtensions.isNullOrUndefined(cart) || cart.hasInvoiceLine) {\r\n return false;\r\n }\r\n\r\n const RetailB2BEcommerceFeatureState = this.props.data.featureState.result?.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailB2BEcommerceFeature'\r\n );\r\n if (\r\n RetailB2BEcommerceFeatureState?.IsEnabled &&\r\n this.props.data.customerInformation.result?.IsB2b &&\r\n this.props.data.orderTemplates.result &&\r\n ArrayExtensions.hasElements(cart.cart?.CartLines) &&\r\n this.props.data.customerInformation.result\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Get promotions.\r\n * @returns React node with the promotions.\r\n */\r\n private _getPromotions(): React.ReactNode {\r\n return (\r\n this.props.config.showAvailablePromotions &&\r\n cartPromotions({\r\n id: this.promotionPopupId,\r\n showPromotionPopup: this.state.showPromotionDialog,\r\n onSeeAllClick: this.promotionLinkClick,\r\n onCloseButtonClick: this.promotionCloseButtonclick,\r\n promotions: this.state.promotionData.promotionOptions,\r\n resources: {\r\n promotionStringHeading: this.props.resources.promotionStringHeading,\r\n promotionLinkText: this.props.resources.promotionLinkText,\r\n promotionPopupHeading: this.props.resources.promotionPopupHeading,\r\n promotionCloseButtonAriaLabel: this.props.resources.promotionCloseButtonAriaLabel\r\n }\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Add error message in cart line in case the quantity exceeds the current inventory.\r\n * @param cartLines - The cart lines.\r\n * @param cartLineInventoryValidationResult - The cart line inventory result.\r\n */\r\n private _updateCartLineErrorForInvalidInventory(\r\n cartLines: ICartlinesViewProps[] | null,\r\n cartLineInventoryValidationResult: ICartLineInventoryValidationResult\r\n ) {\r\n const { resources } = this.props;\r\n\r\n if (\r\n ArrayExtensions.hasElements(cartLines) &&\r\n !cartLineInventoryValidationResult.isValid &&\r\n ArrayExtensions.hasElements(cartLineInventoryValidationResult.productIdWithErrors)\r\n ) {\r\n for (const productIdWithError of cartLineInventoryValidationResult.productIdWithErrors) {\r\n const cartLine = cartLines.find(element => element.data?.cartline.ProductId === productIdWithError);\r\n if (cartLine) {\r\n cartLine.error = resources.outOfStockErrorMessage;\r\n cartLine.hasError = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get order summary errors.\r\n * @param cartLines - The cart lines.\r\n * @returns Order summary errors.\r\n */\r\n private _getOrderSummaryErrors(cartLines: ICartlinesViewProps[] | null): IOrderSummaryErrors | undefined {\r\n const allErrors =\r\n (cartLines &&\r\n cartLines\r\n .map(cartline => {\r\n // Check if the product is service or not by product type\r\n const isServiceItem = cartline.data?.product?.ItemTypeValue === ReleasedProductType.Service;\r\n\r\n if (!isServiceItem && cartline.error) {\r\n const fullError =\r\n cartline.data && cartline.data.product?.Name\r\n ? `${cartline.data.product.Name}: ${cartline.error}`\r\n : cartline.error;\r\n\r\n return (\r\n
\r\n {fullError}\r\n
\r\n );\r\n }\r\n\r\n return null;\r\n })\r\n .filter((line): line is JSX.Element => !!line)) ||\r\n [];\r\n\r\n return {\r\n Wrapper: {\r\n tag: Alert,\r\n className: 'msc-alert',\r\n isOpen: allErrors.length > 0,\r\n color: 'danger',\r\n assertive: true,\r\n 'aria-label': this.props.resources.outOfStockErrorMessageHeader\r\n },\r\n header: (\r\n \r\n ),\r\n errors: allErrors\r\n };\r\n }\r\n\r\n /**\r\n * Gets invoice summary line items.\r\n * @returns Invoice summary lines.\r\n */\r\n private _getInvoiceSummaryLineItems(): IInvoiceSummaryLines | undefined {\r\n const {\r\n data: {\r\n cart: { result: cart }\r\n },\r\n telemetry,\r\n resources\r\n } = this.props;\r\n\r\n return cart?.hasInvoiceLine\r\n ? InvoiceSummary({\r\n orderTotalLabel: resources.totalAmountLabel,\r\n invoiceLabel: resources.invoiceLabel,\r\n cart: cart.cart,\r\n context: this.props.context,\r\n typeName: this.props.typeName,\r\n telemetry,\r\n id: this.props.id\r\n })\r\n : undefined;\r\n }\r\n\r\n /**\r\n * Gets order summary line items.\r\n * @returns Order summary lines.\r\n */\r\n private _getOrderSummaryLineItems(): IDynOrderSummaryLines | undefined {\r\n const {\r\n data: {\r\n cart: { result: cart },\r\n channelDeliveryOptionConfig\r\n },\r\n telemetry,\r\n resources\r\n } = this.props;\r\n\r\n const channelConfiguration = this.props.context && this.props.context.request && this.props.context.request.channel;\r\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n const featureState = this.props?.data?.featureState;\r\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(item => item.Name === multiplePickupStoreSwitchName)\r\n ?.IsEnabled;\r\n\r\n return channelConfiguration && ArrayExtensions.hasElements(cart?.cart.CartLines) && !cart?.hasInvoiceLine\r\n ? DynOrderSummary({\r\n cart: cart!.cart,\r\n subTotalLabel: resources.itemsWithCountLabel,\r\n shippingLabel: resources.estimatedShippingLabel,\r\n otherChargeLabel: resources.otherCharges,\r\n taxLabel: resources.estimatedTaxLabel,\r\n orderTotalLabel: resources.orderTotal,\r\n totalDiscountsLabel: resources.totalDiscountsLabel,\r\n context: this.props.context,\r\n typeName: this.props.typeName,\r\n id: this.props.id,\r\n toBeCalculatedText: resources.yetToBeCalculatedText,\r\n freeText: resources.priceFree,\r\n channelConfiguration,\r\n retailMultiplePickUpOptionEnabled,\r\n channelDeliveryOptionConfig: channelDeliveryOptionConfig?.result,\r\n telemetry\r\n })\r\n : undefined;\r\n }\r\n\r\n /**\r\n * Gets promo code.\r\n * @returns React node with the promo code.\r\n */\r\n private _getPromoCode(): React.ReactNode {\r\n const {\r\n data: {\r\n cart: { result: cart }\r\n },\r\n resources\r\n } = this.props;\r\n\r\n return (\r\n cart && (\r\n \r\n )\r\n );\r\n }\r\n\r\n /**\r\n * Generate add to order template dialog resources.\r\n * @param resources - The resources.\r\n * @returns IAddToOrderTemplateDialogResources.\r\n */\r\n private _generateAddToOrderTemplateDialogResources(resources: IDynCartResources): IAddToOrderTemplateDialogResources {\r\n return {\r\n addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\r\n\r\n noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\r\n noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\r\n\r\n createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\r\n createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\r\n cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\r\n\r\n selectTemplatesText: resources.selectTemplatesText,\r\n addToTemplateButtonText: resources.addToTemplateButtonText,\r\n lineItemsText: resources.lineItemsText\r\n };\r\n }\r\n\r\n /**\r\n * Generate item added to order template dialog resources.\r\n * @param resources - The resources.\r\n * @returns IItemAddedToOrderTemplateDialogResources.\r\n */\r\n private _generateItemAddedToOrderTemplateDialogResources(resources: IDynCartResources): IItemAddedToOrderTemplateDialogResources {\r\n return {\r\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\r\n continueShoppingButtonText: resources.continueShoppingButtonText,\r\n itemAddedToOrderTemplateHeaderItemOneText: resources.itemAddedToOrderTemplateHeaderItemOneText,\r\n itemAddedToOrderTemplateHeaderItemFormatText: resources.itemAddedToOrderTemplateHeaderItemFormatText,\r\n itemAddedToOrderTemplateHeaderMessageText: resources.itemAddedToOrderTemplateHeaderMessageText,\r\n freePriceText: resources.freePriceText,\r\n originalPriceText: resources.originalPriceText,\r\n currentPriceText: resources.currentPriceText\r\n };\r\n }\r\n\r\n /**\r\n * Generate lines added to order template dialog resources.\r\n * @param resources - The resources.\r\n * @returns ILinesAddedToOrderTemplateDialogResources.\r\n */\r\n private _generateLinesAddedToOrderTemplateDialogResources(resources: IDynCartResources): ILinesAddedToOrderTemplateDialogResources {\r\n return {\r\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\r\n continueShoppingButtonText: resources.continueShoppingButtonText,\r\n linesAddedToOrderTemplateHeaderItemsOneText: resources.linesAddedToOrderTemplateHeaderItemsOneText,\r\n linesAddedToOrderTemplateHeaderItemsFormatText: resources.linesAddedToOrderTemplateHeaderItemsFormatText,\r\n linesAddedToOrderTemplateHeaderLinesOneText: resources.linesAddedToOrderTemplateHeaderLinesOneText,\r\n linesAddedToOrderTemplateHeaderLinesFormatText: resources.linesAddedToOrderTemplateHeaderLinesFormatText,\r\n linesAddedToOrderTemplateHeaderMessageText: resources.linesAddedToOrderTemplateHeaderMessageText,\r\n linesAddedToOrderTemplateCustomPriceAlertMessageText: resources.linesAddedToOrderTemplateCustomPriceAlertMessageText\r\n };\r\n }\r\n\r\n /**\r\n * Generate duplicate items when adding to order template dialog resources.\r\n * @param resources - The resources.\r\n * @returns IDuplicateItemsWhenAddingToOrderTemplateDialogResources.\r\n */\r\n private _generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\r\n resources: IDynCartResources\r\n ): IDuplicateItemsWhenAddingToOrderTemplateDialogResources {\r\n return {\r\n duplicatedProductsHeader: resources.duplicatedProductsHeader,\r\n duplicatedProductsDescription: resources.duplicatedProductsDescription,\r\n updateQuantityButtonText: resources.updateQuantityButtonText,\r\n cancelDuplicateItemsButtonText: resources.cancelDuplicateItemsButtonText\r\n };\r\n }\r\n\r\n /**\r\n * Generate order template name dialog resources.\r\n * @param resources - The resources.\r\n * @returns IOrderTemplateNameDialogResources.\r\n */\r\n private _generateOrderTemplateNameDialogResources(resources: IDynCartResources): IOrderTemplateNameDialogResources {\r\n return {\r\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\r\n orderTemplateTitleLabel: resources.orderTemplateTitle,\r\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\r\n orderTemplateDescription: resources.createOrderTemplateDescription,\r\n\r\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\r\n\r\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\r\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\r\n };\r\n }\r\n\r\n /**\r\n * Gets the cart lines view props.\r\n * @returns ICartlinesViewProps [].\r\n */\r\n private _getCartLines(): ICartlinesViewProps[] | null {\r\n const {\r\n data: {\r\n cart: { result: cart },\r\n wishlists: { result: wishlists },\r\n orderTemplates: { result: orderTemplates },\r\n customerInformation: { result: customerInformation }\r\n },\r\n context: {\r\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\r\n },\r\n config,\r\n telemetry,\r\n resources,\r\n modules\r\n } = this.props;\r\n\r\n const imageSettings = this.getImageSettings(config.imageSettings);\r\n\r\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\r\n let storeSelectorId: string = '';\r\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\r\n storeSelectorId = modules.storeSelector[0].id;\r\n }\r\n return ArrayExtensions.hasElements(cart?.cart.CartLines)\r\n ? CartLineItems({\r\n cartlines: cart!.cart.CartLines,\r\n storeSelectorModuleId: storeSelectorId,\r\n cartlinesErrors,\r\n products: this.state.products,\r\n productsWithAttributes: this.ProductsWithAttributes,\r\n productAvailabilites: this.props.data.productAvailabilites.result,\r\n productDeliveryOptions: this.props.data.deliveryOptions.result,\r\n catalogs: this.props.data.catalogs?.result,\r\n imageSettings,\r\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\r\n maxCartlineQuantity: this.props.context.app.config.maxQuantityForCartLineItem,\r\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\r\n gridSettings: this.props.context.request.gridSettings!,\r\n context: this.props.context,\r\n typeName: this.props.typeName,\r\n id: this.props.id,\r\n resources: {\r\n sizeString: resources.productDimensionTypeSize,\r\n colorString: resources.productDimensionTypeColor,\r\n configString: resources.productDimensionTypeConfiguration,\r\n styleString: resources.productDimensionTypeStyle,\r\n amountString: resources.productDimensionTypeAmount,\r\n quantityDisplayString: resources.quantityDisplayText,\r\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\r\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\r\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\r\n discountStringText: resources.discountStringText,\r\n originalPriceText: resources.originalPriceText,\r\n currentPriceText: resources.currentPriceText,\r\n shippingChargesText: resources.shippingCharges,\r\n priceEditorResources: {\r\n ...resources\r\n }\r\n },\r\n telemetry,\r\n addToWishlistButtonText: resources.addToWishlistButtonText,\r\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\r\n removeButtonText: resources.removeCartButtonText,\r\n shipItText: resources.shipInsteadDisplayText,\r\n pickitUpText: resources.pickItUpDisplayText,\r\n changeStoreText: resources.changeStoreDisplayText,\r\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\r\n outOfStockText: resources.outOfStockErrorMessage,\r\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\r\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\r\n cartState: this.props.data.cart.result,\r\n orgUnitLocations: this.props.data.orgUnitLocations.result,\r\n removeItemClickHandler: this.removeItemFromCartHandler,\r\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\r\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\r\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\r\n wishlists,\r\n defaultWishlistName: resources.defaultWishlistName,\r\n pickupDeliveryModeCode: PickupDeliveryModeCode,\r\n includeErrors: config.showOutOfStockErrors,\r\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\r\n telemetryContent: this.telemetryContent,\r\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\r\n\r\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\r\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\r\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\r\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\r\n resources\r\n ),\r\n\r\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\r\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\r\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\r\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\r\n orderTemplates,\r\n customerInformation,\r\n productAvailability: this.props.data.productAvailabilites\r\n })\r\n : null;\r\n }\r\n\r\n /**\r\n * Gets the checkout URL.\r\n * @param isAuthenticated - Is authenticated flag.\r\n * @param guestCheckoutUrl - Guest checkout URL.\r\n * @param signInUrl -The sign in URL.\r\n * @returns The checkout URL.\r\n */\r\n private getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\r\n if (isAuthenticated) {\r\n return guestCheckoutUrl;\r\n }\r\n\r\n const absoluteUrlRegExp = new RegExp('^(?:[a-z]+:)?//', 'i');\r\n const isAbsoluteUrl = absoluteUrlRegExp.test(guestCheckoutUrl);\r\n let returnURL = guestCheckoutUrl;\r\n if (MsDyn365.isBrowser && !isAbsoluteUrl) {\r\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\r\n }\r\n\r\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\r\n }\r\n\r\n /**\r\n * Gets the image settings.\r\n * @param imageSettings - Image settings.\r\n * @returns IImageSettings.\r\n */\r\n private readonly getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\r\n return (\r\n imageSettings || {\r\n viewports: {\r\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\r\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\r\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n }\r\n );\r\n };\r\n\r\n /**\r\n * Remove item from dyn-cart handler.\r\n * @param cartlineToRemove - The cart line to remove.\r\n */\r\n private readonly removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\r\n if (this.props.data.cart.result) {\r\n const input = {\r\n cartLineIds: [cartlineToRemove.LineId!.toString()]\r\n };\r\n this.props.data.cart.result\r\n .removeCartLines(input)\r\n .then(() => {\r\n this.validateCart().catch(error => {\r\n this.props.telemetry.warning(error);\r\n this.props.telemetry.debug('Unable to validate Cart');\r\n });\r\n })\r\n .catch(error => {\r\n this.props.telemetry.warning(error);\r\n this.props.telemetry.debug('Unable to Remove Cart Line');\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Move to wish list handler.\r\n * @param result - The wish list action success result.\r\n * @param cartline - The cart line.\r\n */\r\n private readonly moveToWishlistSuccessHandler = (result: IWishlistActionSuccessResult, cartline?: CartLine) => {\r\n if (result.status === 'ADDED' && cartline) {\r\n this.removeItemFromCartHandler(cartline);\r\n }\r\n };\r\n\r\n /**\r\n * Updates the cart line quantity.\r\n * @param cartlineToUpdate - The cart line.\r\n * @param quantity - The quantity.\r\n * @param lineIndex - The line index.\r\n * @returns True if the cart line was updated, false otherwise.\r\n */\r\n private readonly updateCartlineQuantity = (cartlineToUpdate: CartLine, quantity: number, lineIndex?: number): boolean => {\r\n cartLineQuantityUpdatedAsync(\r\n this.isQuantityLimitsFeatureEnabled,\r\n this.props.data.cart.result,\r\n this.props.telemetry,\r\n this.state.products,\r\n cartlineToUpdate,\r\n quantity\r\n )\r\n .then((cartActionResult: ICartActionResult | undefined): boolean => {\r\n if (cartActionResult?.status === 'SUCCESS') {\r\n this.validateCart().catch(error => {\r\n this.props.telemetry.warning((error as Error).message);\r\n this.props.telemetry.debug('Unable to validate Cart');\r\n });\r\n\r\n return true;\r\n }\r\n\r\n if (!ObjectExtensions.isNullOrUndefined(cartActionResult)) {\r\n // Show update line error message.\r\n const lineUpdateFailure: LineValidationResult = {\r\n LineId: ObjectExtensions.isNullOrUndefined(cartlineToUpdate.LineId) ? '0' : cartlineToUpdate.LineId,\r\n ValidationFailures: [\r\n {\r\n ErrorContext: ArrayExtensions.hasElements(cartActionResult.validationResults)\r\n ? cartActionResult.validationResults[0].ErrorContext\r\n : '',\r\n LocalizedMessage: cartActionResult.errorDetails?.LocalizedMessage\r\n }\r\n ]\r\n };\r\n\r\n this.setState({\r\n cartlinesErrors: { ValidationResultsPairs: [lineUpdateFailure] }\r\n });\r\n }\r\n\r\n return false;\r\n })\r\n .catch(() => {\r\n return false;\r\n });\r\n\r\n return false;\r\n };\r\n\r\n /**\r\n * Fulfillment store id is updated.\r\n */\r\n private readonly fulfillmentStoreIdUpdated = () => {\r\n if (this.isQuantityLimitsFeatureEnabled) {\r\n getActiveCartProductsAction(new ActiveCartProductsInput(), this.props.context.actionContext)\r\n .then(products => {\r\n this.setState({ products });\r\n })\r\n .then(async () => this.validateCart())\r\n .catch((error: Error) => {\r\n this.props.telemetry.warning(error.message);\r\n this.props.telemetry.debug('Unable to validate Cart');\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Validates cart.\r\n * @returns Void promise.\r\n */\r\n private async validateCart(): Promise {\r\n const {\r\n data: { cart },\r\n telemetry,\r\n context\r\n } = this.props;\r\n\r\n const validationResults: CartLineValidationResultsByLineId | undefined = await validateCartAsync(\r\n //this.isQuantityLimitsFeatureEnabled,\r\n cart,\r\n telemetry,\r\n context,\r\n true\r\n );\r\n\r\n if (validationResults) {\r\n const isValid = !ArrayExtensions.hasElements(validationResults.ValidationResultsPairs);\r\n this.setState({\r\n cartlinesErrors: validationResults,\r\n isCartValid: isValid\r\n });\r\n } else {\r\n this.setState({ isCartValid: true });\r\n }\r\n\r\n return AsyncResult.resolve();\r\n }\r\n\r\n /**\r\n * Get order quantity limit feature flag.\r\n * @returns True if flag is enabled, false otherwise.\r\n */\r\n private async getOrderQuantityLimitsFeatureFlag(): Promise {\r\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\r\n return false;\r\n }\r\n\r\n try {\r\n const featureStatuses = await this.props.data.featureState;\r\n const isQuantityLimitsFeatureEnabledInHq =\r\n featureStatuses.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\r\n )?.IsEnabled || false;\r\n if (!isQuantityLimitsFeatureEnabledInHq) {\r\n return false;\r\n }\r\n } catch (error) {\r\n this.props.telemetry.warning(error as string);\r\n this.props.telemetry.debug('Unable to get feature states');\r\n return false;\r\n }\r\n\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\r\n return true;\r\n }\r\n try {\r\n const customerInfo = await this.props.data.customerInformation;\r\n return (\r\n !!customerInfo &&\r\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\r\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))\r\n );\r\n } catch (error) {\r\n this.props.telemetry.warning(error as string);\r\n this.props.telemetry.debug('Unable to get customer info');\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the cart lines group.\r\n * @returns ICartlinesViewProps [][].\r\n */\r\n private getCartLinesGroup(): ICartlinesViewProps[][] | null {\r\n const {\r\n data: {\r\n cart: { result: cart },\r\n wishlists: { result: wishlists },\r\n orderTemplates: { result: orderTemplates },\r\n customerInformation: { result: customerInformation }\r\n },\r\n context: {\r\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\r\n },\r\n config,\r\n telemetry,\r\n resources,\r\n modules\r\n } = this.props;\r\n\r\n const imageSettings = this.getImageSettings(config.imageSettings);\r\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\r\n let storeSelectorId: string = '';\r\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\r\n storeSelectorId = modules.storeSelector[0].id;\r\n }\r\n\r\n return this.props.data.products &&\r\n this.props.data.products.result &&\r\n cart &&\r\n cart.cart.CartLines &&\r\n cart.cart.CartLines.length > 0 &&\r\n this.props.data.channelDeliveryOptionConfig?.result\r\n ? CartLineGroupItems({\r\n cartlines: cart.cart.CartLines,\r\n storeSelectorModuleId: storeSelectorId,\r\n cartlinesErrors,\r\n products: this.props.data.products.result,\r\n productsWithAttributes: this.ProductsWithAttributes,\r\n productAvailabilites: this.props.data.productAvailabilites.result,\r\n productDeliveryOptions: this.props.data.deliveryOptions.result,\r\n catalogs: this.props.data.catalogs?.result,\r\n imageSettings,\r\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\r\n maxCartlineQuantity: this.props.context.app.config.maxQuantityForCartLineItem,\r\n gridSettings: this.props.context.request.gridSettings!,\r\n context: this.props.context,\r\n typeName: this.props.typeName,\r\n id: this.props.id,\r\n resources: {\r\n sizeString: resources.productDimensionTypeSize,\r\n colorString: resources.productDimensionTypeColor,\r\n configString: resources.productDimensionTypeConfiguration,\r\n styleString: resources.productDimensionTypeStyle,\r\n amountString: resources.productDimensionTypeAmount,\r\n quantityDisplayString: resources.quantityDisplayText,\r\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\r\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\r\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\r\n discountStringText: resources.discountStringText,\r\n originalPriceText: resources.originalPriceText,\r\n currentPriceText: resources.currentPriceText,\r\n shippingChargesText: resources.shippingCharges,\r\n priceEditorResources: {\r\n ...resources\r\n }\r\n },\r\n telemetry,\r\n addToWishlistButtonText: resources.addToWishlistButtonText,\r\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\r\n removeButtonText: resources.removeCartButtonText,\r\n shipItText: resources.shipInsteadDisplayText,\r\n pickitUpText: resources.pickItUpDisplayText,\r\n changeStoreText: resources.changeStoreDisplayText,\r\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\r\n outOfStockText: resources.outOfStockErrorMessage,\r\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\r\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\r\n cartState: this.props.data.cart.result,\r\n orgUnitLocations: this.props.data.orgUnitLocations.result,\r\n removeItemClickHandler: this.removeItemFromCartHandler,\r\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\r\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\r\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\r\n wishlists,\r\n defaultWishlistName: resources.defaultWishlistName,\r\n pickupDeliveryModeCode: PickupDeliveryModeCode,\r\n includeErrors: config.showOutOfStockErrors,\r\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\r\n telemetryContent: this.telemetryContent,\r\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\r\n\r\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\r\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\r\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\r\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\r\n resources\r\n ),\r\n\r\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\r\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\r\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\r\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\r\n orderTemplates,\r\n customerInformation,\r\n channelDeliveryOptionConfig: this.props.data.channelDeliveryOptionConfig?.result,\r\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\r\n productAvailability: this.props.data.productAvailabilites\r\n })\r\n : null;\r\n }\r\n}\r\n\r\nexport default Cart;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { INodeProps, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nexport interface ICartLineItemPromotion {\r\n id: string;\r\n showPromotionPopup: boolean;\r\n promotions: CartPromotionLine[] | undefined;\r\n resources: ICartLineItemPromotionResourceString;\r\n onSeeAllClick(event: React.MouseEvent): void;\r\n onCloseButtonClick(): void;\r\n}\r\n\r\nexport interface ICartLineItemViewProps {\r\n promotionMessageWrapper: INodeProps;\r\n promotionMessage: React.ReactNode;\r\n promotionSeeAllLink: React.ReactElement;\r\n promotionDialog: React.ReactNode;\r\n}\r\n\r\nexport interface ICartLineItemPromotionResourceString {\r\n promotionLinkText: string;\r\n promotionStringHeading: string;\r\n promotionPopupHeading: string;\r\n promotionCloseButtonAriaLabel: string;\r\n}\r\n\r\nexport const cartPromotions = (props: ICartLineItemPromotion): ICartLineItemViewProps | undefined => {\r\n const {\r\n id,\r\n showPromotionPopup,\r\n promotions,\r\n resources: { promotionLinkText, promotionPopupHeading },\r\n onCloseButtonClick,\r\n onSeeAllClick\r\n } = props;\r\n\r\n if (!ArrayExtensions.hasElements(promotions)) {\r\n return;\r\n }\r\n\r\n const titleId = `${id}_title`;\r\n const className = 'msc-cart__promotion';\r\n return {\r\n promotionMessageWrapper: {\r\n className: 'msc-cart__promotion'\r\n },\r\n promotionMessage: (\r\n <>\r\n \r\n {props.resources.promotionStringHeading}\r\n \r\n ),\r\n promotionSeeAllLink: (\r\n \r\n {' '}\r\n {promotionLinkText}{' '}\r\n \r\n ),\r\n promotionDialog: (\r\n \r\n \r\n
\r\n {promotionPopupHeading}\r\n
\r\n
\r\n \r\n
    \r\n {promotions.map(_promotion => {\r\n return (\r\n
  • \r\n {_promotion.Promotion?.OfferName}{' '}\r\n
  • \r\n );\r\n })}\r\n
\r\n
\r\n \r\n
\r\n )\r\n };\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IOrderSummaryErrors } from '@msdyn365-commerce-modules/cart'; //ICartResources, ICartViewProps, ICartlinesViewProps\r\nimport { ICartlinesViewProps } from './components/dyn-cart-line-items';\r\nimport { ICartLineItemViewProps } from '@msdyn365-commerce-modules/cart/dist/types/modules/cart/components/cart-line-items-promotion';\r\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\r\n//import { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport { IDynOrderSummaryLines } from './utilities/dyn-order-summary-lineitem';\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n INodeProps,\r\n ITelemetryContent,\r\n Node,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ICartViewProps } from './dyn-cart';\r\nimport { IDynCartResources } from './dyn-cart.props.autogenerated';\r\n\r\n//import MsDyn365, { getUrlSync, IImageSettings } from '@msdyn365-commerce/core';\r\nconst guestCheckoutUrl = '/checkout'; //getUrlSync('checkout', this.props.context.actionContext) || '';\r\n\r\nconst CartView: React.FC = (props: ICartViewProps) => (\r\n
\r\n {props.backToShoppingButton}\r\n {props.title}\r\n {props.promotionOptions && _renderPromotions(props.promotionOptions)}\r\n {props.multiplePickUpEnabled ? (\r\n _renderCartLinesGroup(props, props.resources)\r\n ) : (\r\n \r\n {_renderCartlines(\r\n props.cartlines,\r\n props.resources,\r\n props.storeSelector,\r\n props.backToShoppingButton,\r\n props.waitingComponent,\r\n props.cartLoadingStatus,\r\n props.cartDataResult,\r\n props.telemetryContent,\r\n props.multiplePickUpEnabled,\r\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\r\n )}\r\n \r\n )}\r\n {props.orderSummaryHeading && (\r\n \r\n {props.orderSummaryHeading}\r\n {props.cart?.hasInvoiceLine\r\n ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\r\n : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\r\n {_renderErrorBlock(props.OrderSummaryErrors)}\r\n {props.checkoutAsSignInUserButton}\r\n {props.checkoutAsGuestButton}\r\n {_renderQutotationButton(guestCheckoutUrl)}\r\n {props.createTemplateFromCartButton}\r\n \r\n )}\r\n {props.storeSelector}\r\n
\r\n);\r\n\r\nconst _renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\r\n return (\r\n <>\r\n \r\n {promotions.promotionMessage}\r\n {promotions.promotionSeeAllLink}\r\n {promotions.promotionDialog}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderCartlines = (\r\n cartLines: ICartlinesViewProps[] | undefined,\r\n resources: IDynCartResources,\r\n storeSelector: React.ReactNode | undefined,\r\n backToShoppingButton: React.ReactNode,\r\n waitingComponent: React.ReactNode,\r\n cartLoadingStatus: string,\r\n cartDataResult: boolean,\r\n telemetryContent?: ITelemetryContent,\r\n mulitplePickUp?: boolean,\r\n emailDeliveryModeCode?: string\r\n): JSX.Element[] | JSX.Element => {\r\n const { emptyCartText } = resources;\r\n\r\n if (cartLoadingStatus) {\r\n return <>{cartLoadingStatus};\r\n }\r\n if (cartLines) {\r\n return cartLines.map((cartLine, index) => {\r\n return (\r\n
\r\n
\r\n
\r\n {cartLine.cartline}\r\n {mulitplePickUp\r\n ? null\r\n : _renderBOPISBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\r\n
\r\n
{cartLine.remove}
\r\n
\r\n {mulitplePickUp ? (\r\n \r\n {_renderGroupBOPISBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\r\n {/* {cartLine.addToOrderTemplate} */}\r\n {cartLine.addToWishlist}\r\n \r\n ) : cartLine.addToOrderTemplate ? (\r\n \r\n
\r\n {/* {cartLine.addToOrderTemplate} */}\r\n {cartLine.addToWishlist}\r\n
\r\n
\r\n ) : (\r\n <>{cartLine.addToWishlist}\r\n )}\r\n
\r\n );\r\n });\r\n }\r\n return cartDataResult ? (\r\n
\r\n

{emptyCartText}

\r\n {backToShoppingButton}\r\n
\r\n ) : (\r\n <>{waitingComponent}\r\n );\r\n};\r\n\r\n/**\r\n * On Toggle function.\r\n * @param cartLine -Cartline.\r\n * @param isBopisSelected -Boolean.\r\n * @returns Set state of button.\r\n */\r\nconst onToggleBopisHandler = (cartLine: ICartlinesViewProps, isBopisSelected: boolean) => () => {\r\n cartLine.pickUpInStore && cartLine.pickUpInStore.callbacks.toggleBopis(!isBopisSelected);\r\n};\r\n\r\n/**\r\n * On change store function.\r\n * @param cartLine -CartLine items prop.\r\n * @returns Set state of button.\r\n */\r\nconst onChangeStoreHandler = (cartLine: ICartlinesViewProps) => () => {\r\n cartLine.pickUpInStore && cartLine.pickUpInStore.callbacks.toggleBopis(true);\r\n};\r\n\r\nconst _renderBOPISBlock = (\r\n cartLine: ICartlinesViewProps,\r\n resources: IDynCartResources,\r\n storeSelector: React.ReactNode | undefined,\r\n telemetryContent?: ITelemetryContent,\r\n emailDeliveryModeCode?: string\r\n): JSX.Element | null => {\r\n // If it is electronic item cart line, then return null for BOPISBlock.\r\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\r\n return null;\r\n }\r\n\r\n const {\r\n shipInsteadDisplayText,\r\n shipToAddressDisplayText,\r\n pickItUpDisplayText,\r\n pickUpAtStoreWithLocationText,\r\n changeStoreDisplayText\r\n } = resources;\r\n\r\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\r\n\r\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\r\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n \r\n
\r\n {isBopisSelected ? (\r\n {pickUpAtStoreWithLocationText}\r\n ) : (\r\n {shipToAddressDisplayText}\r\n )}\r\n
\r\n {isBopisSelected && (\r\n
\r\n {cartLine.pickUpInStore.orgUnitName}\r\n \r\n
\r\n )}\r\n \r\n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\r\n \r\n
\r\n );\r\n};\r\n\r\nconst _renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\r\n if (!errorData || errorData.errors.length === 0) {\r\n return null;\r\n }\r\n return (\r\n \r\n {errorData.header}\r\n {errorData.errors}\r\n \r\n );\r\n};\r\n\r\nconst _renderOrderSummarylines = (\r\n orderSummaryLines: IDynOrderSummaryLines | undefined,\r\n OrderSummaryItems: INodeProps,\r\n props: ICartViewProps\r\n): JSX.Element | null => {\r\n if (!orderSummaryLines) {\r\n return null;\r\n }\r\n return (\r\n \r\n {props.promoCode}\r\n {orderSummaryLines.netTotal}\r\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\r\n {orderSummaryLines.subtotal}\r\n {orderSummaryLines.shipping}\r\n {orderSummaryLines.otherCharge}\r\n {orderSummaryLines.tax}\r\n {orderSummaryLines.orderTotal}\r\n \r\n );\r\n};\r\n\r\nconst _renderInvoiceSummarylines = (\r\n invoiceSummaryLines: IInvoiceSummaryLines | undefined,\r\n OrderSummaryItems: INodeProps,\r\n props: ICartViewProps\r\n): JSX.Element | null => {\r\n if (!invoiceSummaryLines) {\r\n props.context.telemetry.error('InvoiceSummary content is empty, module wont render');\r\n return null;\r\n }\r\n return (\r\n \r\n {invoiceSummaryLines.invoices}\r\n {invoiceSummaryLines.giftCard}\r\n {invoiceSummaryLines.loyalty}\r\n {invoiceSummaryLines.orderTotal}\r\n \r\n );\r\n};\r\n\r\nconst _renderCartLinesGroup = (props: ICartViewProps, resources: IDynCartResources): JSX.Element | undefined => {\r\n if (props.cartLinesGroup && props.cartLinesGroup.length > 0) {\r\n return (\r\n
\r\n {props.cartLinesGroup?.map((cartlines, key) => {\r\n return (\r\n
\r\n {_renderCartLinesGroupHeader(\r\n cartlines[0],\r\n props.storeSelector,\r\n resources,\r\n _countItems(cartlines),\r\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\r\n )}\r\n {_renderCartlines(\r\n cartlines,\r\n props.resources,\r\n props.storeSelector,\r\n props.backToShoppingButton,\r\n props.waitingComponent,\r\n props.cartLoadingStatus,\r\n props.cartDataResult,\r\n props.telemetryContent,\r\n props.multiplePickUpEnabled,\r\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\r\n )}\r\n
\r\n );\r\n })}\r\n
\r\n );\r\n }\r\n return props.cartDataResult ? (\r\n
\r\n
\r\n

{props.resources.emptyCartText}

\r\n {props.backToShoppingButton}\r\n
\r\n
\r\n ) : (\r\n <>{props.waitingComponent}\r\n );\r\n};\r\nconst _renderCartLinesGroupHeader = (\r\n cartLine: ICartlinesViewProps,\r\n storeSelector: React.ReactNode | undefined,\r\n resources: IDynCartResources,\r\n count: number,\r\n emailDeliveryModeCode?: string\r\n) => {\r\n const isBopisSelected = cartLine?.pickUpInStore?.isBopisSelected;\r\n const { pickUpText, shippingText, emailshippingText } = resources;\r\n let groupTitle: string;\r\n\r\n groupTitle = isBopisSelected ? pickUpText : shippingText;\r\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailshippingText : groupTitle;\r\n\r\n return (\r\n <>\r\n
\r\n

\r\n

{groupTitle}

\r\n {_renderCartLinesGroupTitle(cartLine, resources, count)}\r\n
\r\n \r\n );\r\n};\r\n\r\nconst _renderGroupBOPISBlock = (\r\n cartLine: ICartlinesViewProps,\r\n resources: IDynCartResources,\r\n storeSelector: React.ReactNode | undefined,\r\n telemetryContent?: ITelemetryContent,\r\n emailDeliveryModeCode?: string\r\n): JSX.Element | null => {\r\n // If it is electronic item cart line, then return null for GroupBOPISBlock.\r\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\r\n return null;\r\n }\r\n\r\n const { changeStoreDisplayText, shipInsteadDisplayText, pickItUpDisplayText } = resources;\r\n\r\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\r\n\r\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\r\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n <>\r\n {isBopisSelected ? (\r\n \r\n ) : null}\r\n \r\n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _countItems = (cartLine: ICartlinesViewProps[]): number => {\r\n let countItem = 0;\r\n countItem = cartLine.reduce((count, item) => {\r\n return count + (item.data?.cartline.Quantity || 0);\r\n }, 0);\r\n return countItem;\r\n};\r\n\r\nconst _renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, resources: IDynCartResources, count: number) => {\r\n const isBopisSelected = cartLine?.pickUpInStore?.isBopisSelected;\r\n const { itemLabel, itemsLabel } = resources;\r\n const suffix = count > 1 ? itemsLabel : itemLabel;\r\n return (\r\n <>\r\n \r\n {isBopisSelected ? (\r\n

\r\n {cartLine?.pickUpInStore?.deliveryOption}\r\n {', '}\r\n {cartLine?.pickUpInStore?.orgUnitName}\r\n

\r\n ) : null}\r\n

\r\n ({count} {suffix})\r\n

\r\n
\r\n \r\n );\r\n};\r\n\r\nconst _renderQutotationButton = (url: string) => {\r\n return (\r\n \r\n \r\n Web quotation\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CartView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent, RatingComponent } from '@msdyn365-commerce/components';\nimport {\n IComponent,\n IComponentProps,\n ICoreContext,\n IGridSettings,\n IImageData,\n IImageSettings,\n Image,\n IRequestContext\n} from '@msdyn365-commerce/core';\nimport { ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { format } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\n/**\n * IActiveProductProps interface.\n */\nexport interface IActiveProductProps extends IComponentProps<{ product?: ProductSearchResult }> {\n className?: string;\n imageSettings?: IImageSettings;\n savingsText?: string;\n freePriceText?: string;\n originalPriceText?: string;\n currentPriceText?: string;\n ratingAriaLabel?: string;\n}\n\n/**\n * IActiveProduct interface.\n */\nexport interface IActiveProduct extends IComponent {}\n\n/**\n * RenderDescription function.\n * @param description - Product description string.\n * @returns - Returns JSX.Element | null.\n */\nfunction renderDescription(description?: string): JSX.Element | null {\n return

{description}

;\n}\n\n/**\n * GetRatingAriaLabel function.\n * @param rating - Product rating number.\n * @param ratingAriaLabel - Product rating aria label.\n * @returns - Returns string.\n */\nfunction getRatingAriaLabel(rating?: number, ratingAriaLabel?: string): string {\n const numberTwo: number = 2;\n if (rating && ratingAriaLabel) {\n const roundedRating = rating.toFixed(numberTwo);\n return format(ratingAriaLabel || '', roundedRating, '5');\n }\n return '';\n}\n\n/**\n * RenderRating function.\n * @param context - The core context.\n * @param typeName - The type name of the module.\n * @param ratingId - The rating id.\n * @param avgRating - The average rating.\n * @param totalRatings - The total ratings.\n * @param ariaLabel - The rating aria label.\n * @returns - Returns JSX.Element | null.\n */\nfunction renderRating(\n context: ICoreContext,\n typeName: string,\n ratingId: string,\n avgRating?: number,\n totalRatings?: number,\n ariaLabel?: string\n): JSX.Element | null {\n if (!avgRating) {\n return null;\n }\n\n const numberRatings = totalRatings?.toString() ?? undefined;\n const ratingAriaLabel = getRatingAriaLabel(avgRating, ariaLabel);\n\n return (\n \n );\n}\n\n/**\n * RenderPrice function.\n * @param context - The core context.\n * @param typeName - The type name of the module.\n * @param productId - The product id.\n * @param basePrice - The base price of the product.\n * @param adjustedPrice - The adjusted price of the product.\n * @param savingsText - The savings text of the product.\n * @param freePriceText - The free price text.\n * @param originalPriceText - The original price text.\n * @returns - Returns JSX.Element | null.\n */\nfunction renderPrice(\n context: ICoreContext,\n typeName: string,\n productId: string,\n basePrice?: number,\n adjustedPrice?: number,\n savingsText?: string,\n freePriceText?: string,\n originalPriceText?: string\n): JSX.Element | null {\n const price: ProductPrice = {\n BasePrice: basePrice,\n AdjustedPrice: adjustedPrice,\n CustomerContextualPrice: adjustedPrice\n };\n\n return (\n \n );\n}\n\n/**\n * RenderProductPlacementImage function.\n * @param requestContext - RequestContext.\n * @param imageSettings - The product image settings.\n * @param gridSettings - The viewport gird settings.\n * @param imageUrl - The product image url.\n * @param altText - The product image alt text.\n * @returns - Returns JSX.Element | null.\n */\nfunction renderProductPlacementImage(\n requestContext: IRequestContext,\n imageSettings?: IImageSettings,\n gridSettings?: IGridSettings,\n imageUrl?: string,\n altText?: string\n): JSX.Element | null {\n if (!imageUrl || !gridSettings || !imageSettings) {\n return null;\n }\n const imgData: IImageData = {\n src: imageUrl,\n altText: altText ? altText : ''\n };\n const imageProps = {\n gridSettings,\n imageSettings\n };\n imageProps.imageSettings.cropFocalRegion = true;\n return ;\n}\n\n/**\n * ActiveProduct constant.\n * @param props - The active product props.\n * @param props.data - The product search result data.\n * @param props.context - The core context.\n * @param props.imageSettings - The prodcut image settings.\n * @param props.savingsText - The product savings text.\n * @param props.freePriceText - The free price text.\n * @param props.originalPriceText - The original price text.\n * @param props.ratingAriaLabel - The product rating aria label.\n * @param props.typeName - The type name of the module.\n * @param props.id - The id of the product.\n * @returns - Returns JSX.Element | null.\n */\nexport const ActiveProductComponent: React.FC = ({\n data,\n context,\n imageSettings,\n savingsText,\n freePriceText,\n originalPriceText,\n ratingAriaLabel,\n typeName,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Do not need naming convention check for library prameters\n id\n}) => {\n const product = data.product;\n if (!product) {\n return null;\n }\n\n return (\n <>\n
\n
\n {renderProductPlacementImage(\n context.actionContext.requestContext,\n imageSettings,\n context.request.gridSettings,\n product.PrimaryImageUrl,\n product.Name\n )}\n
\n
\n

{product.Name}

\n {renderPrice(context, typeName, id, product.BasePrice, product.Price, savingsText, freePriceText, originalPriceText)}\n {renderDescription(product.Description)}\n {!context.app.config.hideRating &&\n renderRating(context, typeName, id, product.AverageRating, product.TotalRatings, ratingAriaLabel)}\n
\n
\n \n );\n};\n\nexport default ActiveProductComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\n/**\n * ILinksData: Interface for\n * Additional content.\n */\ninterface ILinksData {\n linkText?: string;\n linkUrl: Msdyn365.ILinkData;\n ariaLabel?: string;\n isOpenInNewTab?: boolean;\n}\n\n/**\n * IAdditionalContentData: Interface for\n * Active content.\n */\ninterface IAdditionalContentData {\n heading?: string;\n subtext?: string;\n links?: ILinksData[];\n}\n\n/**\n * IActiveImageAdditionalContentProps: Interface for\n * Active Image Additional Content Component props.\n */\nexport interface IActiveImageAdditionalContentProps {\n requestContext: Msdyn365.IRequestContext;\n additionalContent: IAdditionalContentData | undefined;\n handleAdditionalTextChange(event: Msdyn365.ContentEditableEvent): void;\n handleAdditionalParagraphChange(event: Msdyn365.ContentEditableEvent): void;\n handleAdditionalLinkTextChange(linkIndex: number, event: Msdyn365.ContentEditableEvent): void;\n}\n\n/**\n * IActiveImageAdditionalContentViewProps: Interface for\n * Active Image Additional Content view props.\n */\nexport interface IActiveImageAdditionalContentViewProps {\n additionalContentNode: INodeProps;\n heading: React.ReactNode;\n text: React.ReactNode;\n links: React.ReactNode;\n additionalContentContainer: INodeProps;\n additionalContentItemLinks: INodeProps;\n}\n\n/**\n * Renders additional content heading.\n * @param additionalContentHeading - Additional content heading.\n * @param props - Active Image Additional content component props.\n * @returns Heading Node.\n */\nconst renderHeading = (additionalContentHeading: string, props: IActiveImageAdditionalContentProps) => {\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalTextChange(event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Renders additional content heading.\n * @param additionalContentParagraphText - Additional content paragraph text.\n * @param props - Active Image Additional content component props.\n * @returns Paragraph Node.\n */\nconst renderParagraph = (additionalContentParagraphText: string, props: IActiveImageAdditionalContentProps) => {\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalTextChange(event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Renders additional content heading.\n * @param ctaLink - Additional content link.\n * @param props - Active Image Additional content component props.\n * @param linkIndex - Additional content link index.\n * @returns Link Node.\n */\nconst renderLinks = (ctaLink: ILinksData, props: IActiveImageAdditionalContentProps, linkIndex: number) => {\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: ctaLink.ariaLabel,\n className: 'msc-active-image__details__additional-content__cta__links',\n linkText: ctaLink.linkText,\n linkUrl: ctaLink.linkUrl.destinationUrl,\n openInNewTab: ctaLink.isOpenInNewTab,\n role: 'button'\n };\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalLinkTextChange(linkIndex, event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Create node for each additonal content item.\n * @param item - Active Image additonal content item props.\n * @param props - Active Image Additional content component props.\n * @returns IActiveImageAdditionalContentItemViewProps.\n */\nconst assembleNode = (item: IAdditionalContentData, props: IActiveImageAdditionalContentProps): IActiveImageAdditionalContentViewProps => {\n const headingNode = item.heading && renderHeading(item.heading, props);\n const paragraphNode = item.subtext && renderParagraph(item.subtext, props);\n const linksNode = item.links?.map((ctaLink: ILinksData, index: number) => {\n return renderLinks(ctaLink, props, index);\n });\n\n return {\n additionalContentNode: { className: 'msc-active-image__details__additional-content' },\n heading: headingNode,\n text: paragraphNode,\n links: linksNode,\n additionalContentContainer: { className: 'msc-active-image__details__additional-content__container' },\n additionalContentItemLinks: { className: 'msc-active-image__details__additional__content__cta' }\n };\n};\n\n/**\n * ActiveImageAdditionalContent component.\n * @param props - Active Image Additional content component props.\n * @returns Active Image Additional content view props.\n */\nexport const activeImageAdditionalContent = (\n props: IActiveImageAdditionalContentProps\n): IActiveImageAdditionalContentViewProps | undefined => {\n const { additionalContent } = props;\n if (!additionalContent) {\n return undefined;\n }\n\n return assembleNode(additionalContent, props);\n};\n\nexport default activeImageAdditionalContent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IImageData, Image, IRequestContext } from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport React from 'react';\n\n/**\n * @type AreaEvent for active points\n */\ntype AreaEvent = Event | React.MouseEvent | React.FocusEvent;\n\n/**\n * @interface IRgbColor\n * @description - The IRgbColor interface contract.\n */\nexport interface IRgbColor {\n rValue: number;\n gValue: number;\n bValue: number;\n}\n\n/**\n * @interface IArea\n * @description - The IArea interface contract.\n */\nexport interface IArea {\n areaId: string;\n coords: number[];\n href?: string;\n center?: number[];\n primaryImageUrl?: string;\n productUrl: string;\n productSearchResult?: ProductSearchResult;\n}\n\n/**\n * @interface IArea\n * @description - The IArea interface contract.\n */\nexport interface IAreaMap {\n name: string;\n areas: IArea[];\n}\n\n/**\n * @enum CanvasCalculations\n * @description - The canvas calculations enum.\n */\nexport enum CanvasCalculations {\n defaultWidth = 0,\n defaultHeight = 0,\n defaultPositionX = 0,\n defaultPositionY = 0,\n defaultScale = 1,\n halfDivisor = 2,\n doubleMultiplier = 2,\n buttonHeight = 30,\n buttonPadding = 30,\n paddingAdjustment = 3,\n expandAnimationStartWidth = 10,\n expandAnimationEndWidth = 40,\n collapseAnimationStartWidth = 40,\n collapseAnimationEndWidth = 8,\n expandRadius = 12,\n collapseRadius = 8,\n rotation = 1.57,\n startAngle = 0,\n endAngle = 7,\n clearMargin = 50,\n clearHeight = 100,\n clearWidth = 100,\n textFadeInStartValue = 0,\n textFadeOutStartValue = 0.5,\n textFadeInterval = 0.01\n}\n\n/**\n * @enum CanvasStyles\n * @description - The canvas styles enum.\n */\nexport enum CanvasStyles {\n color = '#FFFFFF',\n buttonTextClor = '#000000'\n}\n\n/**\n * @enum\n * @description - The canvas styles enum.\n */\nexport interface IImageMapperResources {\n buttonText?: string;\n altText?: string;\n}\n\n/**\n * @interface IImageMapperProps\n * @description - The IImageMapperProps interface contract.\n */\nexport interface IImageMapperProps {\n imageData: IImageData;\n areaMap: IAreaMap;\n viewPort: string;\n requestContext: IRequestContext;\n color?: string;\n buttonTextClor?: string;\n width?: number;\n imgWidth?: number;\n activeImageRefs: React.RefObject;\n imageMapperResources?: IImageMapperResources;\n onLoad?(): void;\n onClick?(area: IArea, index: number, event: AreaEvent): void;\n onFocus?(area: IArea, index: number, event: AreaEvent): void;\n onMouseEnter?(area: IArea, index: number, event: AreaEvent): void;\n onMouseLeave?(area: IArea, index: number, event: AreaEvent): void;\n}\n\n/**\n * ImageMapper.\n */\nexport class ImageMapper extends React.Component {\n private readonly _backgroundImage: React.RefObject;\n\n private readonly _container: React.RefObject;\n\n private readonly _canvas: React.RefObject;\n\n private _isDesktopViewPort: boolean = false;\n\n private _context: CanvasRenderingContext2D | null | undefined = null;\n\n public constructor(props: IImageMapperProps) {\n super(props);\n this._backgroundImage = React.createRef();\n this._container = React.createRef();\n this._canvas = React.createRef();\n }\n\n /**\n * ComponentDidMount method.\n */\n public componentDidMount(): void {\n const { viewPort } = this.props;\n this.initCanvas();\n this._isDesktopViewPort = viewPort === 'lg' || viewPort === 'xl';\n this.renderAreas();\n this._context = null;\n }\n\n /**\n * ComponentDidUpdate method.\n */\n public componentDidUpdate(): void {\n const { viewPort } = this.props;\n this.initCanvas();\n this._isDesktopViewPort = viewPort === 'lg' || viewPort === 'xl';\n }\n\n /**\n * ShouldComponentUpdate method.\n * @param nextProps - Next props.\n * @returns Returns boolean.\n */\n public shouldComponentUpdate(nextProps: IImageMapperProps): boolean {\n let shouldRender = false;\n if (nextProps !== this.props) {\n shouldRender = true;\n }\n return shouldRender;\n }\n\n /**\n * GetActiveImageWidth method - Gets the active image width.\n * @returns Returns number | undefined.\n */\n public getActiveImageWidth = (): number | undefined => {\n if (MsDyn365.isBrowser) {\n const activeImageReferenceValue = this.props.activeImageRefs;\n if (activeImageReferenceValue.current !== null) {\n return activeImageReferenceValue.current.clientWidth;\n }\n }\n return undefined;\n };\n\n /**\n * GetActiveImageHeight method - Gets the active image height.\n * @returns Returns number | undefined.\n */\n public getActiveImageHeight = (): number | undefined => {\n if (MsDyn365.isBrowser) {\n const activeImageReferenceValue = this.props.activeImageRefs;\n if (activeImageReferenceValue.current !== null) {\n return activeImageReferenceValue.current.clientHeight;\n }\n }\n return undefined;\n };\n\n /**\n * ConvertHexToRgb method - This method takes color in HEX format and returns IRgbColor color object.\n * @param hexColor -The color hex value.\n * @returns -Returns IRgbColor object.\n */\n public convertHexToRgb = (hexColor: string): IRgbColor => {\n // RegEx used to execute the conversion of the hex color to rgb value.\n const regEx = new RegExp('^#?([a-f\\\\d]{2})([a-f\\\\d]{2})([a-f\\\\d]{2})$', 'u');\n\n // RegEx.exec method executes a search for a match in a specified string. Returns a result array, or null.\n const result = regEx.exec(hexColor);\n const defaultValue = 0;\n return result\n ? {\n rValue: Number.parseInt(result[1], 16),\n gValue: Number.parseInt(result[2], 16),\n bValue: Number.parseInt(result[3], 16)\n }\n : {\n rValue: defaultValue,\n gValue: defaultValue,\n bValue: defaultValue\n };\n };\n\n /**\n * ApplyFadingTransition method - Applys fading transition to button text.\n * @param text -The button text.\n * @param coords -The coordinates.\n * @param rgbColor -The RGB color object.\n * @param alpha -The alpha value of the button text.\n */\n public applyFadingTransition = (text: string, coords: number[], rgbColor: IRgbColor, alpha: number): void => {\n const halfDivisor: number = CanvasCalculations.halfDivisor;\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n if (context && this._isDesktopViewPort) {\n const buttonPadding = CanvasCalculations.buttonPadding;\n const paddingAdjustment = CanvasCalculations.paddingAdjustment;\n const buttonWidth = context.measureText(text).width + buttonPadding;\n context.fillStyle = `rgba(${rgbColor.rValue}, ${rgbColor.gValue}, ${rgbColor.bValue}, ${alpha} )`;\n if (MsDyn365.isBrowser && document.body.parentElement && document.body.parentElement.getAttribute('dir') === 'rtl') {\n context.fillText(text, coords[0] + buttonWidth / halfDivisor - buttonPadding / halfDivisor, coords[1] + paddingAdjustment);\n } else {\n context.fillText(text, coords[0] - buttonWidth / halfDivisor + buttonPadding / halfDivisor, coords[1] + paddingAdjustment);\n }\n }\n };\n\n /**\n * Draw button method - Draws button and contains fixed hight, padding values.\n * @param text -The button text.\n * @param coords -The coordinates.\n */\n public drawButton = (text: string, coords: number[]): void => {\n const { color = CanvasStyles.color, buttonTextClor = CanvasStyles.buttonTextClor } = this.props;\n const halfDivisor: number = CanvasCalculations.halfDivisor;\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n if (context && this._isDesktopViewPort) {\n const buttonHeight = CanvasCalculations.buttonHeight;\n const buttonPadding = CanvasCalculations.buttonPadding;\n const paddingAdjustment = CanvasCalculations.paddingAdjustment;\n const buttonWidth = context.measureText(text).width + buttonPadding;\n const buttonPositionX = coords[0] - buttonWidth / halfDivisor;\n const buttonPositionY = coords[1] - buttonHeight / halfDivisor;\n const arcsize = buttonHeight / halfDivisor;\n\n context.beginPath();\n context.moveTo(buttonPositionX + arcsize, buttonPositionY);\n context.lineTo(buttonPositionX + buttonWidth - arcsize, buttonPositionY);\n context.arcTo(\n buttonPositionX + buttonWidth,\n buttonPositionY,\n buttonPositionX + buttonWidth,\n buttonPositionY + arcsize,\n arcsize\n );\n context.lineTo(buttonPositionX + buttonWidth, buttonPositionY + buttonHeight - arcsize);\n context.arcTo(\n buttonPositionX + buttonWidth,\n buttonPositionY + buttonHeight,\n buttonPositionX + buttonWidth - arcsize,\n buttonPositionY + buttonHeight,\n arcsize\n );\n context.lineTo(buttonPositionX + arcsize, buttonPositionY + buttonHeight);\n context.arcTo(buttonPositionX, buttonPositionY + buttonHeight, buttonPositionX, buttonPositionY - arcsize, arcsize);\n context.lineTo(buttonPositionX, buttonPositionY + arcsize);\n context.arcTo(buttonPositionX, buttonPositionY, buttonPositionX + arcsize, buttonPositionY, arcsize);\n context.lineTo(buttonPositionX + arcsize, buttonPositionY);\n context.stroke();\n context.closePath();\n context.fillStyle = color;\n context.fill();\n context.fillStyle = buttonTextClor;\n if (MsDyn365.isBrowser && document.body.parentElement && document.body.parentElement.getAttribute('dir') === 'rtl') {\n context.fillText(text, coords[0] + buttonWidth / halfDivisor - buttonPadding / halfDivisor, coords[1] + paddingAdjustment);\n } else {\n context.fillText(text, coords[0] - buttonWidth / halfDivisor + buttonPadding / halfDivisor, coords[1] + paddingAdjustment);\n }\n }\n };\n\n /**\n * ExpandAnimation method - Shows expand animation and contains fixed values to draw the circle and ellipse shapes.\n * @param coords -Coordinates.\n */\n public expandAnimation = (coords: number[]): void => {\n const { color = CanvasStyles.color, buttonTextClor = CanvasStyles.buttonTextClor } = this.props;\n const buttonText = this.props.imageMapperResources?.buttonText;\n let animationStartWidth = CanvasCalculations.expandAnimationStartWidth;\n const pointPositionX = coords[0];\n const pointPositionY = coords[1];\n const animationEndWidth = CanvasCalculations.expandAnimationEndWidth;\n const radius = CanvasCalculations.expandRadius;\n const rotation = CanvasCalculations.rotation;\n const startAngle = CanvasCalculations.startAngle;\n const endAngle = CanvasCalculations.endAngle;\n let textFadeInValue = CanvasCalculations.textFadeInStartValue;\n const buttonTextClorInRgb = this.convertHexToRgb(buttonTextClor.toLocaleLowerCase());\n\n /**\n * Animate method - Reders expand animation.\n */\n const animate = () => {\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n if (!context) {\n return;\n }\n context.beginPath();\n context.ellipse(pointPositionX, pointPositionY, radius, animationStartWidth, rotation, startAngle, endAngle);\n context.fillStyle = color;\n context.fill();\n context.fillStyle = color;\n if (buttonText) {\n if (animationStartWidth < animationEndWidth) {\n requestAnimationFrame(animate);\n this.applyFadingTransition(buttonText, coords, buttonTextClorInRgb, textFadeInValue);\n textFadeInValue += CanvasCalculations.textFadeInterval;\n animationStartWidth++;\n } else {\n this.drawButton(buttonText, [pointPositionX, pointPositionY]);\n }\n }\n };\n\n if (this._isDesktopViewPort) {\n animate();\n }\n };\n\n /**\n * CollapseAnimation method - Shows collapse animation and contains fixed values to draw the circle and ellipse shapes.\n * @param coords -Coordinates.\n */\n public collapseAnimation = (coords: number[]): void => {\n const { color = CanvasStyles.color, buttonTextClor = CanvasStyles.buttonTextClor } = this.props;\n const buttonText = this.props.imageMapperResources?.buttonText;\n let animationStartWidth = CanvasCalculations.collapseAnimationStartWidth;\n const pointPositionX = coords[0];\n const pointPositionY = coords[1];\n const animationEndWidth = CanvasCalculations.collapseAnimationEndWidth;\n const rotation = CanvasCalculations.rotation;\n const clearMargin = CanvasCalculations.clearMargin;\n const clearHeight = CanvasCalculations.clearHeight;\n const clearWidth = CanvasCalculations.clearWidth;\n const radius = CanvasCalculations.collapseRadius;\n const startAngle = CanvasCalculations.startAngle;\n const endAngle = CanvasCalculations.endAngle;\n let textFadeOutValue = CanvasCalculations.textFadeOutStartValue;\n const buttonTextClorInRgb = this.convertHexToRgb(buttonTextClor.toLocaleLowerCase());\n\n /**\n * Animate method - Renders collapse animation.\n */\n const animate = () => {\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n if (!context) {\n return;\n }\n context.beginPath();\n context.clearRect(pointPositionX - clearMargin, pointPositionY - clearMargin, clearWidth, clearHeight);\n context.ellipse(pointPositionX, pointPositionY, radius, animationStartWidth, rotation, startAngle, endAngle);\n context.fillStyle = color;\n context.fill();\n if (animationEndWidth < animationStartWidth && buttonText) {\n requestAnimationFrame(animate);\n this.applyFadingTransition(buttonText, coords, buttonTextClorInRgb, textFadeOutValue);\n textFadeOutValue -= CanvasCalculations.textFadeInterval;\n animationStartWidth--;\n }\n };\n\n if (this._isDesktopViewPort) {\n animate();\n }\n };\n\n /**\n * DrawCircle method - Renders active points.\n * @param coords -Coordinates.\n */\n public drawCircle = (coords: number[]): void => {\n const { color = CanvasStyles.color, viewPort } = this.props;\n const doubleMultiplier: number = CanvasCalculations.doubleMultiplier;\n const startAngle: number = CanvasCalculations.startAngle;\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n const radius = viewPort === 'xs' || viewPort === 'sm' ? coords[2] * doubleMultiplier : coords[2];\n if (!context) {\n return;\n }\n context.fillStyle = color;\n context.beginPath();\n context.strokeStyle = color;\n context.arc(coords[0], coords[1], radius, startAngle, Math.PI * doubleMultiplier);\n context.closePath();\n context.stroke();\n context.fill();\n };\n\n /**\n * ScaleCoords method - To scale the active point coordinates based on the window size.\n * @param coords -Coordinates.\n * @returns -Returns number[].\n */\n public scaleCoords = (coords: number[]): number[] => {\n const { imgWidth } = this.props;\n const defaultWidth: number = CanvasCalculations.defaultWidth;\n const defaultScale: number = CanvasCalculations.defaultScale;\n\n // Calculate scale based on current 'width' and the original 'imgWidth'\n const width = this.getActiveImageWidth();\n const scale = width && imgWidth && imgWidth > defaultWidth ? width / imgWidth : defaultScale;\n return coords.map(coord => coord * scale);\n };\n\n /**\n * RenderPrefilledAreas method - To render active points in case of events.\n */\n public renderPrefilledAreas = (): void => {\n const { areaMap } = this.props;\n areaMap.areas.map(area => {\n this.drawCircle(this.scaleCoords(area.coords));\n return null;\n });\n };\n\n /**\n * ComputeCenter method - To re-calculate the center of active point based on window size.\n * @param area -IArea.\n * @returns -Returns number[].\n */\n public computeCenter = (area: IArea): number[] => {\n const scaledCoords = this.scaleCoords(area.coords);\n return [scaledCoords[0], scaledCoords[1]];\n };\n\n /**\n * HandleHoverOn method - To handle mouse hover on event.\n * @param area -IArea.\n */\n public handleHoverOn = (area: IArea): void => {\n if (area.center && this._canvas.current) {\n this.drawCircle(this.scaleCoords(area.coords));\n this.expandAnimation(area.center);\n }\n };\n\n /**\n * HandleHoverOff method - To handle mouse hover off event.\n * @param area -IArea.\n */\n public handleHoverOff = (area: IArea): void => {\n if (this._canvas.current) {\n const context = this._canvas.current.getContext('2d') ?? this._context;\n const canvasPositionX: number = CanvasCalculations.defaultPositionX;\n const canvasPositionY: number = CanvasCalculations.defaultPositionY;\n\n if (!context) {\n return;\n }\n context.clearRect(canvasPositionX, canvasPositionY, this._canvas.current.width, this._canvas.current.height);\n this.renderPrefilledAreas();\n if (area.center) {\n this.collapseAnimation(area.center);\n }\n }\n };\n\n /**\n * Click method - Mouse click event.\n * @param area -IArea.\n * @param index - Number.\n * @returns - Void.\n */\n public click = (area: IArea, index: number) => (event: AreaEvent): void => {\n const { onClick } = this.props;\n if (onClick) {\n event.preventDefault();\n onClick(area, index, event);\n }\n };\n\n /**\n * HoverOn method - Mouse hover on event.\n * @param area -IArea.\n * @param index - Number.\n * @returns - Void.\n */\n public hoverOn = (area: IArea, index: number) => (event: AreaEvent): void => {\n const { onMouseEnter } = this.props;\n this.handleHoverOn(area);\n if (onMouseEnter) {\n onMouseEnter(area, index, event);\n }\n };\n\n /**\n * HoverOff method - Mouse hover off event.\n * @param area - IArea.\n * @param index - Number.\n * @returns - Void.\n */\n public hoverOff = (area: IArea, index: number) => (event: AreaEvent): void => {\n const { onMouseLeave } = this.props;\n\n this.handleHoverOff(area);\n\n if (onMouseLeave) {\n onMouseLeave(area, index, event);\n }\n };\n\n /**\n * RenderAreas method - Renders active points at given coordinates.\n * @returns -Returns JSX.Element[].\n */\n public renderAreas = (): JSX.Element[] => {\n const { areaMap, viewPort } = this.props;\n const buttonText = this.props.imageMapperResources?.buttonText ? this.props.imageMapperResources.buttonText : '';\n const altText = this.props.imageMapperResources?.altText ? this.props.imageMapperResources.altText : '';\n const doubleMultiplier: number = CanvasCalculations.doubleMultiplier;\n\n return areaMap.areas.map((area, index) => {\n const scaledCoords = this.scaleCoords(area.coords);\n const xsRadius = area.coords[2] * doubleMultiplier;\n if (viewPort === 'xs') {\n scaledCoords[2] = xsRadius;\n }\n const center = this.computeCenter(area);\n const extendedArea = { ...area, scaledCoords, center };\n const areaKey = `area-${index}`;\n const altTextWithProductName = altText\n .replace('{buttonText}', buttonText ? buttonText : '')\n .replace('{productName}', area.productSearchResult?.Name ? area.productSearchResult.Name : '');\n return (\n \n );\n });\n };\n\n /**\n * InitCanvas method - To render the canvas.\n */\n public initCanvas = (): void => {\n if (!this._canvas.current || !this._backgroundImage.current || !this._container.current) {\n return;\n }\n\n const { color, onLoad } = this.props;\n const defaultWidth: number = CanvasCalculations.defaultWidth;\n const defaultHeight: number = CanvasCalculations.defaultHeight;\n\n const canvasWidth = this.getActiveImageWidth() ?? defaultWidth;\n const canvasHeight = this.getActiveImageHeight() ?? defaultHeight;\n\n this._canvas.current.width = canvasWidth;\n this._canvas.current.height = canvasHeight;\n this._container.current.style.width = `${canvasWidth}px`;\n\n const context = this._canvas.current.getContext('2d') ?? this._context;\n if (!context) {\n return;\n }\n context.fillStyle = color ?? '';\n\n if (onLoad) {\n onLoad();\n }\n\n this.renderPrefilledAreas();\n };\n\n /**\n * Render method - To render the image mapper component with active image, canvas and active points.\n * @returns -Returns JSX.Element | null.\n */\n public render(): JSX.Element | null {\n const { imageData, areaMap, requestContext } = this.props;\n\n return (\n
\n \n \n \n {this.renderAreas()}\n \n
\n );\n }\n}\n\nexport default ImageMapper;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport {\n activeImageAdditionalContent,\n ActiveProductComponent,\n IActiveImageAdditionalContentViewProps,\n IArea,\n IAreaMap,\n IImageMapperProps,\n ImageMapper\n} from '../active-image-utilities';\nimport { IActiveImageData } from './active-image.data';\nimport { IActiveImageProps } from './active-image.props.autogenerated';\n\n/**\n * @type AreaEvent for active points\n */\ntype AreaEvent = Event | React.MouseEvent | React.FocusEvent;\n\n/**\n * @interface IActiveImageViewProps\n * @classdesc - The IActiveImageViewProps interface contract.\n */\nexport interface IActiveImageViewProps extends IActiveImageProps<{}>, IImageMapperProps {\n activePointContainer: IModuleProps;\n activePointDetailsContainer: INodeProps;\n imageMapper: React.ReactNode;\n overlay: React.ReactNode;\n productCard: React.ReactNode;\n title?: React.ReactNode;\n text?: React.ReactNode;\n links?: React.ReactNode;\n detailsContainer?: INodeProps;\n detailsContainerCta?: INodeProps;\n additionalContent?: IActiveImageAdditionalContentViewProps;\n productCardleftPosition: number;\n productCardtopPosition: number;\n handleAdditionalText?(event: MsDyn365.ContentEditableEvent): void;\n handleAdditionalParagraph?(event: MsDyn365.ContentEditableEvent): void;\n handleAdditionalLinkText?(event: MsDyn365.ContentEditableEvent): void;\n}\n\n/**\n * @interface IActiveImageLinksData\n * @classdesc - The IActiveImageLinksData interface contract.\n */\nexport interface IActiveImageLinksData {\n linkText?: string;\n linkUrl: MsDyn365.ILinkData;\n ariaLabel?: string;\n willOpenInNewTab?: boolean;\n}\n\n/**\n * @interface IActiveImageState\n * @classdesc - The IActiveImageState interface contract.\n */\ninterface IActiveImageState {\n clientWidth: number;\n area: IArea | null;\n viewport: string;\n overlayClass: string;\n}\n\n/**\n * @enum ActiveImageConstants\n * @description - The active image constants enum.\n */\nexport enum ActiveImageConstants {\n timeoutInterval = 200,\n enterKey = 'Enter',\n escKey = 'Escape'\n}\n\n/**\n *\n * ActiveImage class.\n * @extends {React.PureComponent & IImageMapperProps, IActiveImageState>}\n */\nexport class ActiveImage extends React.PureComponent & IImageMapperProps, IActiveImageState> {\n private readonly _telemetryContent: ITelemetryContent;\n\n private _isDesktopViewPort: boolean;\n\n private readonly _defaultProductCardWidth: number = 315;\n\n private readonly _defaultProdutCardHight: number = 490;\n\n private readonly _activePoints: IArea[] = [];\n\n private readonly _activeImageRefs: React.RefObject;\n\n private readonly _activeImageClass: string;\n\n private readonly _productCardDivRef: React.RefObject;\n\n public constructor(props: IActiveImageProps & IImageMapperProps) {\n super(props);\n this._telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const viewport = isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n this._activeImageClass = `msc-active-image-${this.getActiveImageId()}`;\n this.state = {\n clientWidth: 0,\n area: null,\n viewport,\n overlayClass: ''\n };\n this._isDesktopViewPort = viewport === 'lg' || viewport === 'xl';\n this._activeImageRefs = React.createRef();\n this._productCardDivRef = React.createRef();\n }\n\n public componentDidMount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.addEventListener('resize', this.updateClientWidth);\n document.addEventListener('keydown', this.keyDown, false);\n document.addEventListener('mousedown', this._handleOutsideClick);\n }\n setTimeout(() => {\n this.updateClientWidth();\n }, ActiveImageConstants.timeoutInterval);\n\n if (MsDyn365.msdyn365Commerce.isBrowser && this._activeImageRefs.current) {\n const images: HTMLCollectionOf = this._activeImageRefs.current.getElementsByClassName(\n 'msc-thumbnail_image msc-active-image-img'\n );\n if (ArrayExtensions.hasElements(Array.from(images))) {\n images[0].removeAttribute('usemap');\n }\n }\n }\n\n /**\n * AddActivePoints method - To handle add Active Points.\n * @param area - IArea.\n * @param product - ProductSearchResult.\n * @param coords - Coords.\n * @param productUrl - String.\n */\n public addActivePoints = (area: IArea | undefined, product: ProductSearchResult, coords: number[], productUrl: string): void => {\n if (!area) {\n this._activePoints.push({\n areaId: product.RecordId.toString(),\n coords,\n primaryImageUrl: product.PrimaryImageUrl ?? '',\n productUrl,\n productSearchResult: product\n });\n }\n };\n\n /**\n * ComponentWillUnmount method.\n */\n public componentWillUnmount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.removeEventListener('resize', this.updateClientWidth);\n document.removeEventListener('keydown', (this.keyDown as unknown) as EventListener, false);\n document.removeEventListener('mousedown', this._handleOutsideClick, false);\n }\n }\n\n /**\n * UpdateClientWidth method to update client width in state.\n */\n public updateClientWidth = (): void => {\n const viewport = isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n this.setState({ clientWidth: this.getActiveImageWidth(), viewport });\n this._isDesktopViewPort = viewport === 'lg' || viewport === 'xl';\n };\n\n /**\n * Render method.\n * @returns - Returns JSX.Element | null.\n */\n public render(): JSX.Element | null {\n const viewProps: IActiveImageViewProps = {\n ...(this.props as IImageMapperProps & IActiveImageProps<{}>),\n activePointContainer: {\n moduleProps: this.props,\n className: classnames('msc-active-image', this._activeImageClass, this.props.config.className)\n },\n activePointDetailsContainer: {\n tag: 'div',\n className: classnames('msc-active-image-wrapper', this._activeImageClass, this.props.config.className),\n ref: this._activeImageRefs\n },\n imgWidth: this.props.config.canvasWidth,\n imageMapper: this.renderImageMapper(),\n overlay: this.renderOverlay(),\n productCard: this.renderProductCard(),\n productCardleftPosition: this.getProductCardPositionX(),\n productCardtopPosition: this.getProductCardPositionY(),\n title: this.renderActiveImageDetailsHeading(),\n text: this.renderActiveImageDetailsParagraph(),\n links: this.renderActiveImageDetailsLinks(),\n detailsContainer: { className: 'msc-active-image__details' },\n detailsContainerCta: { className: 'msc-active-image__details__cta' },\n additionalContent: activeImageAdditionalContent({\n requestContext: this.props.context.request,\n additionalContent: this.props.config.additionalContent,\n handleAdditionalTextChange: this.handleAdditionalTextChange,\n handleAdditionalParagraphChange: this.handleAdditionalParagraphChange,\n handleAdditionalLinkTextChange: this.handleAdditionalLinkTextChange\n }),\n handleAdditionalText: this.handleAdditionalTextChange,\n handleAdditionalParagraph: this.handleAdditionalParagraphChange,\n handleAdditionalLinkText: this.handleAdditionalTextChange\n };\n\n return this.props.renderView(viewProps);\n }\n\n /**\n * RenderImageMapper method - To render image mapper.\n * @returns - Returns React.ReactNode | null.\n */\n public renderImageMapper = (): React.ReactNode | null => {\n const { config, context } = this.props;\n const defaultPosition: number = 0;\n const defaultLength: number = 0;\n const productResults = this.props.data.products.result;\n if (config.activePoints && productResults) {\n for (const product of productResults) {\n for (const configProduct of config.activePoints) {\n if (product.ItemId === configProduct.itemId) {\n const productUrl = getProductPageUrlSync(product.Name ?? '', product.RecordId, context.actionContext, undefined);\n const coords = [\n configProduct.xPosition ?? defaultPosition,\n configProduct.yPosition ?? defaultPosition,\n configProduct.radius ?? defaultPosition\n ];\n const area = this._activePoints.find(activePoint => JSON.stringify(activePoint.coords) === JSON.stringify(coords));\n this.addActivePoints(area, product, coords, productUrl);\n }\n }\n }\n }\n const mappedArea: IAreaMap = {\n name: `map-${this._activeImageClass}`,\n areas: this._activePoints.length > defaultLength ? this._activePoints : []\n };\n\n // If image is null, we want to render the placeholder SVG - by passing image data with empty src\n return (\n \n );\n };\n\n /**\n * EnterArea method - To handle mouse enter event.\n * @param area - Active point area.\n * @param index - Active point index.\n * @param event - Active point AreaEvent.\n */\n public enterArea = (area: IArea, index: number, event: AreaEvent): void => {\n this.setState({ area, overlayClass: 'msc-active-image-overlay' });\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(area, index, event);\n }\n if (event.type.toLocaleLowerCase() === 'click' && this._isDesktopViewPort) {\n window.open(area.productUrl, '_self');\n }\n };\n\n /**\n * LeaveArea method - To handle mouse leave event.\n */\n public leaveArea = (): void => {\n if (this._isDesktopViewPort) {\n this.resetState();\n }\n };\n\n /**\n * ResetState method - To reset the state for area and overlayclass.\n */\n public resetState = (): void => {\n this.setState({ area: null, overlayClass: '' });\n };\n\n /**\n * RenderProductComponent method - To render the product card with product information.\n * @returns - Returns React.ReactNode.\n */\n public renderProductComponent = (): React.ReactNode => {\n if (this.state.area?.productSearchResult) {\n const baseImageUrl: string = this.props.context.request.apiSettings.baseImageUrl;\n const imageUrl: string = this.state.area.primaryImageUrl ?? '';\n const primaryImageUrl: string = `${baseImageUrl}${imageUrl}`;\n const product: ProductSearchResult = this.state.area.productSearchResult;\n product.PrimaryImageUrl = primaryImageUrl;\n\n return (\n \n );\n }\n return React.Fragment;\n };\n\n /**\n * RenderProductCard method - To render product cards.\n * @returns - Returns React.ReactNode.\n */\n public renderProductCard = (): React.ReactNode => {\n const { area } = this.state;\n\n return (\n <>\n {area?.center && (\n
\n
\n {!this._isDesktopViewPort &&
\n
\n )}\n \n );\n };\n\n /**\n * RenderOverlay method - To render overlay for non desktop viewports.\n * @returns - Returns React.ReactNode.\n */\n public renderOverlay = (): React.ReactNode => {\n return <>{!this._isDesktopViewPort &&
};\n };\n\n /**\n * GetProductCardPositionX method - Provides product card x position to the left or right of active point based on available space.\n * For xs, sm and md viewports it provides x position for the center alignment.\n * @returns - Returns number.\n */\n public getProductCardPositionX = (): number => {\n const defaultImageSettings = this.getDefaultImageSettings();\n const productImageSettingsWidth = this.props.config.productImageSettings?.viewports\n ? this.props.config.productImageSettings.viewports.lg?.w\n : defaultImageSettings.viewports.lg?.w;\n const defaultPositionX: number = 0;\n const halfDivisor: number = 2;\n const productCardWidth: number = productImageSettingsWidth ? productImageSettingsWidth : this._defaultProductCardWidth;\n const { area, clientWidth, viewport } = this.state;\n const pointPositionX = area?.center?.[0] ?? clientWidth / halfDivisor;\n const leftAllignPosition = pointPositionX - productCardWidth - productCardWidth / halfDivisor;\n const rightAllignPosition = pointPositionX + productCardWidth / halfDivisor;\n let position: number = (clientWidth - productCardWidth) / halfDivisor;\n if (viewport !== 'xs' && viewport !== 'sm' && viewport !== 'md') {\n if (leftAllignPosition < defaultPositionX) {\n position = rightAllignPosition;\n } else {\n position = leftAllignPosition;\n }\n }\n return position;\n };\n\n /**\n * GetProductCardPositionY method - Provides product card y position in center with respect to active point.\n * For xs, sm and md viewports it provides y position for the center alignment.\n * @returns - Returns number.\n */\n public getProductCardPositionY = (): number => {\n const defaultImageSettings = this.getDefaultImageSettings();\n const productImageSettingsHeight = this.props.config.productImageSettings?.viewports\n ? this.props.config.productImageSettings.viewports.lg?.h\n : defaultImageSettings.viewports.lg?.h;\n const halfDivisor: number = 2;\n const { area, viewport } = this.state;\n const produtCardHight: number = productImageSettingsHeight ? productImageSettingsHeight : this._defaultProdutCardHight;\n const pointPositionY = (this.getActiveImageHeight() - produtCardHight) / halfDivisor;\n let position: number = pointPositionY;\n if (viewport !== 'xs' && viewport !== 'sm' && viewport !== 'md') {\n position = (area?.center?.[1] ?? this.getActiveImageHeight() / halfDivisor) - produtCardHight / halfDivisor;\n }\n return position;\n };\n\n /**\n * GetDefaultImageSettings method.\n * @returns MsDyn365.IImageSettings.\n */\n public getDefaultImageSettings = (): MsDyn365.IImageSettings => {\n const defaultImageSettings: MsDyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=275&h=275&m=6', w: 275, h: 275 },\n lg: { q: 'w=275&h=275&m=6', w: 275, h: 275 },\n xl: { q: 'w=275&h=275&m=6', w: 275, h: 275 }\n },\n lazyload: true\n };\n\n return defaultImageSettings;\n };\n\n /**\n * KeyDown method - To handle keydown event.\n * @param event - KeyboardEvent.\n */\n public keyDown = (event: KeyboardEvent): void => {\n if (event.key === ActiveImageConstants.enterKey) {\n const target: HTMLElement = event.target as HTMLElement;\n if (target.nodeName === 'AREA') {\n const area: HTMLAreaElement = target as HTMLAreaElement;\n if (area.href) {\n window.open(area.href, '_self');\n }\n }\n }\n if (event.key === ActiveImageConstants.escKey) {\n this.resetState();\n }\n };\n\n /**\n * GetActiveImageWidth method - To get active image width.\n * @returns Returns number.\n */\n public getActiveImageWidth = (): number => {\n const defaultWidth: number = 0;\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n const activeImageReferenceValue = this._activeImageRefs;\n if (activeImageReferenceValue.current !== null) {\n return activeImageReferenceValue.current.clientWidth;\n }\n }\n return defaultWidth;\n };\n\n /**\n * GetActiveImageHeight method - To get active image height.\n * @returns Returns number.\n */\n public getActiveImageHeight = (): number => {\n const defaultHeight: number = 0;\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n const activeImageReferenceValue = this._activeImageRefs;\n if (activeImageReferenceValue.current !== null) {\n return activeImageReferenceValue.current.clientHeight;\n }\n }\n return defaultHeight;\n };\n\n /**\n * HandleLinkTextChange method - To handle link text change event.\n * @param linkIndex - The link index.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleLinkTextChange(linkIndex: number, event: MsDyn365.ContentEditableEvent): void {\n if (this.props.config.links && this.props.config.links[Number(linkIndex)]) {\n this.props.config.links[Number(linkIndex)].linkText = event.target.value;\n }\n }\n\n /**\n * HandleTextChange method - To handle text change event.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleTextChange = (event: MsDyn365.ContentEditableEvent): void => {\n this.props.config.heading!.text = event.target.value;\n };\n\n /**\n * HandleParagraphChange method - To handle paragraph change event.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleParagraphChange = (event: MsDyn365.ContentEditableEvent): void => {\n this.props.config.paragraph = event.target.value;\n };\n\n /**\n * HandleAdditionalTextChange method - To handle additional text change event.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleAdditionalTextChange(event: MsDyn365.ContentEditableEvent): void {\n if (this.props.config.additionalContent) {\n this.props.config.additionalContent.heading = event.target.value;\n }\n }\n\n /**\n * HandleAdditionalLinkTextChange method - To handle additional link text change event.\n * @param linkIndex - The link index.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleAdditionalLinkTextChange(linkIndex: number, event: MsDyn365.ContentEditableEvent): void {\n const additionalContent = this.props.config.additionalContent ?? {};\n if (additionalContent.links) {\n additionalContent.links[Number(linkIndex)].linkText = event.target.value;\n }\n }\n\n /**\n * HandleAdditionalParagraphChange method - To handle additional paragraph change event.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleAdditionalParagraphChange(event: MsDyn365.ContentEditableEvent): void {\n if (this.props.config.additionalContent) {\n this.props.config.additionalContent.subtext = event.target.value;\n }\n }\n\n /**\n * RenderActiveImageDetailsLinks method - To render active image details links.\n * @returns - React node.\n */\n public renderActiveImageDetailsLinks = (): React.ReactNode[] | undefined => {\n const { links } = this.props.config;\n const payLoad = getPayloadObject('click', this._telemetryContent, '');\n\n return links?.map((linkData: IActiveImageLinksData, index: number) => {\n payLoad.contentAction.etext = linkData.linkText;\n const attributes = getTelemetryAttributes(this._telemetryContent, payLoad);\n const linkId = index;\n const editableLink: MsDyn365.ILinksData = {\n ariaLabel: linkData.ariaLabel,\n className: 'msc-active-image__details__cta__link',\n linkText: linkData.linkText,\n linkUrl: linkData.linkUrl.destinationUrl,\n openInNewTab: linkData.willOpenInNewTab,\n role: 'button',\n additionalProperties: attributes\n };\n\n return (\n {\n this.handleLinkTextChange(index, event);\n },\n requestContext: this.props.context.request\n }}\n />\n );\n });\n };\n\n /**\n * RenderActiveImageDetailsHeading method - To render active image details heading.\n * @returns - React.ReactNode | undefined.\n */\n public renderActiveImageDetailsHeading = (): React.ReactNode | undefined => {\n const { heading } = this.props.config;\n\n return (\n heading && (\n \n )\n );\n };\n\n /**\n * RenderActiveImageDetailsParagraph method - To render active image details paragraph.\n * @returns - React.ReactNode | undefined.\n */\n public renderActiveImageDetailsParagraph = (): React.ReactNode | undefined => {\n const { paragraph } = this.props.config;\n\n return (\n paragraph && (\n \n )\n );\n };\n\n /**\n * GetActiveImageId - To get active image id from src.\n * @returns - String.\n */\n public getActiveImageId = (): string => {\n const { activeImage } = this.props.config;\n let activeImageId: string = '';\n if (activeImage?.src) {\n const activeImageSource = activeImage.src.split('/');\n const decrementOne: number = 1;\n const activeImageIdPart = activeImageSource[activeImageSource.length - decrementOne].split('?');\n activeImageId = activeImageIdPart[0] ?? '';\n }\n return activeImageId;\n };\n\n /**\n * Handle outside click method - To handle outside click of the active image product.\n * @param event - Mouse event.\n */\n private readonly _handleOutsideClick = (event: MouseEvent) => {\n if (this._productCardDivRef.current?.contains(event.target as Node)) {\n return;\n }\n this.resetState();\n };\n}\nexport default ActiveImage;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IActiveImageAdditionalContentViewProps } from '../active-image-utilities';\nimport { IActiveImageViewProps } from './active-image';\n\n/**\n * Render Additional Content.\n * @param additionalContent - Additional content view props.\n * @returns JSX Element.\n */\nconst renderAdditionalContent = (additionalContent: IActiveImageAdditionalContentViewProps) => {\n return (\n \n {additionalContent.heading}\n \n {additionalContent.text}\n {additionalContent.links}\n \n \n );\n};\n\n/**\n * Render View.\n * @param props - The view props.\n * @returns -The JSX Element.\n */\nexport const activeImageView: React.FC = props => {\n return (\n \n \n {props.imageMapper}\n \n {props.title}\n {props.text}\n {props.additionalContent && renderAdditionalContent(props.additionalContent)}\n \n {props.links}\n \n \n \n \n {props.overlay}\n {props.productCard}\n \n \n );\n};\n\nexport default activeImageView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { getCartState } from '@msdyn365-commerce/global-state';\nimport { ProductDeliveryOptions, ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n ActiveCartProductsInput,\n QueryResultSettingsProxy,\n buildCacheKey,\n getActiveCartProductsAction\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Input class for pickup delivery options for items in cart.\n */\nexport class ProductPickUpOptionsForCartLineItems implements IActionInput {\n public readonly apiSettings: ICommerceApiSettings;\n\n public constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n /**\n * Get Cache Key.\n * @returns - Cache key string.\n */\n public getCacheKey = (): string => buildCacheKey('ActiveCartLineItemsPickUpOptions', this.apiSettings);\n\n /**\n * Get Cachetype Name.\n * @returns - Cache name string.\n */\n public getCacheObjectType = (): string => 'ActiveCartLineItemsPickUpOptions';\n\n /**\n * Get Cachetype.\n * @returns - CacheType enum.\n */\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the GetPickUpOptionCartLineItems method.\n * @param inputData - The input data passed to the createInput method.\n * @returns - Input for data action.\n */\nconst createInput = (inputData: ICreateActionContext>) => {\n return new ProductPickUpOptionsForCartLineItems(inputData.requestContext.apiSettings);\n};\n\n/**\n * The action method for the GetPickUpOptionCartLineItems data action.\n * @param input - The action input.\n * @param context - The action context.\n * @returns - Order Template object.\n */\nexport async function getPickUpOptionsForCartLineItems(\n input: ProductPickUpOptionsForCartLineItems,\n context: IActionContext\n): Promise {\n // If no input is provided fail out\n if (!input.apiSettings.channelId) {\n throw new Error('[getPickUpOptionsForCartLineItems]No valid Input was provided, failing');\n }\n const cartState = await getCartState(context);\n const cart = cartState.cart;\n const products = await getActiveCartProductsAction(new ActiveCartProductsInput(), context);\n const filterOption = 4;\n const response: ProductDeliveryOptions[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- existing code.\n if (cart === undefined || !ArrayExtensions.hasElements(products)) {\n return Promise.resolve(response);\n }\n\n const pickupoptions = await ProductsDataActions.getDeliveryOptionsAsync(\n {\n callerContext: context,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\n },\n products.map(product => product.RecordId),\n {},\n filterOption\n );\n\n return pickupoptions;\n}\n\n/**\n * The GetPickupOptionCartLineItems Data Action\n * Returns pickup options.\n */\nexport const getPickUpOptionsForCartLineItemsDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-pickup-options-for-cartlines',\n action: getPickUpOptionsForCartLineItems as IAction,\n input: createInput\n});\n\nexport default getPickUpOptionsForCartLineItemsDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport groupBy from 'lodash/groupBy';\n\nimport { assembleCartlines, ICartLineItemsProps, ICartlinesViewProps } from './cart-line-items';\n\nconst _assembleGroupCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[][] | null => {\n const reactNodes: ICartlinesViewProps[][] = [];\n if (!products || products.length === 0) {\n props.context.telemetry.error('Products content is empty, module wont render');\n return null;\n }\n\n const getGroupByStorePickup = (items: CartLine[]) => groupBy(items, item => item.FulfillmentStoreId);\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.DeliveryMode);\n const groupDelivery = getGroupByDelivery(cartlines);\n const cartLinesGroup: CartLine[] = [];\n\n // 1) Group by store and pick up mode\n Object.entries(groupDelivery).forEach(([deliveryType, groupByDeliveryType]) => {\n // @ts-expect-error\n groupDelivery[deliveryType] = getGroupByStorePickup(groupByDeliveryType);\n cartLinesGroup.push(getGroupByStorePickup(groupByDeliveryType));\n });\n\n // 2) Create cartlines group\n Object.keys(cartLinesGroup).forEach(key => {\n const cartLines = cartLinesGroup[key];\n Object.keys(cartLines).forEach(index => {\n const cartLine = cartLines[index];\n const carLineViewProps = assembleCartlines(cartLine, products, props);\n if (carLineViewProps !== null) {\n reactNodes.push(carLineViewProps);\n }\n });\n });\n\n return reactNodes;\n};\n\nconst _assembleGroupInvoiceCartlines = (\n cartLines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[][] | null => {\n const reactNodes: ICartlinesViewProps[][] = [];\n if (cartLines && cartLines.length > 0) {\n // Create invoice cartLines group\n const carLineViewProps = assembleCartlines(cartLines, products, props);\n if (carLineViewProps !== null) {\n reactNodes.push(carLineViewProps);\n }\n }\n return reactNodes;\n};\n\n/**\n * CartLine Group component.\n * @param props\n */\nexport const CartLineGroupItems = (props: ICartLineItemsProps) => {\n const { products, cartlines, hasInvoiceLine } = props;\n return hasInvoiceLine\n ? _assembleGroupInvoiceCartlines(cartlines, products, props)\n : _assembleGroupCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { getPromotionOptionsForCartLineItems, PromotionOptionsForCartLineItems } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * IPromotionData entity interface.\n */\nexport interface IPromotionData {\n promotionOptions?: CartPromotionLine[];\n}\n\n/**\n * Calls the Retail API and returns a promotion data.\n * @param ctx\n */\nexport async function getPromotionData(ctx: IActionContext): Promise {\n const promotionData: IPromotionData = {};\n\n await getPromotionOptionsForCartLineItems(new PromotionOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(promotionOptions => {\n if (promotionOptions) {\n promotionData.promotionOptions = promotionOptions;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n return {};\n });\n\n return promotionData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IAddToOrderTemplateDialogResources,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n ILinesAddedToOrderTemplateDialogResources,\n IOrderTemplateNameDialogResources,\n IWishlistActionSuccessResult,\n PromoCodeComponent,\n SaveCartToOrderTemplateComponent\n} from '@msdyn365-commerce/components';\nimport MsDyn365, { getCatalogId, getUrlSync, IImageSettings, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport { AsyncResult, CartLine, CartLineValidationResultsByLineId, LineValidationResult } from '@msdyn365-commerce/retail-proxy';\nimport { FeatureState, ProductDeliveryOptions, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { cartLineQuantityUpdatedAsync, validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport {\n ActiveCartProductsInput,\n ArrayExtensions,\n getActiveCartProductsAction,\n ICartLineInventoryValidationResult,\n ObjectExtensions,\n validateCartLinesInventory,\n ProductPickUpOptionsForCartLineItems,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant,\n Waiting,\n updateMaxQuantityForCartLineItem,\n urlCheck\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport React from 'react';\nimport { getPickUpOptionsForCartLineItems } from './actions/get-pickup-options-for-cartlines';\n\nimport { ICartData } from './cart.data';\nimport { ICartProps, ICartResources } from './cart.props.autogenerated';\nimport { CartLineGroupItems } from './components/cart-line-groups';\nimport { CartLineItems, ICartlinesViewProps } from './components/cart-line-items';\nimport { cartPromotions, ICartLineItemViewProps } from './components/cart-line-items-promotion';\nimport { getPromotionData, IPromotionData } from './utils/get-promotion-in-cart';\n\n/**\n * Cart view props interface.\n */\nexport interface ICartViewProps extends ICartProps {\n className: string;\n title?: React.ReactNode;\n CartlinesWrapper: INodeProps;\n cartlines?: ICartlinesViewProps[];\n cartLinesGroup?: ICartlinesViewProps[][];\n cart: ICartState | undefined;\n orderSummaryHeading: React.ReactNode;\n orderSummaryLineitems?: IOrderSummaryLines;\n invoiceSummaryLineitems?: IInvoiceSummaryLines;\n OrderSummaryWrapper: INodeProps;\n OrderSummaryItems: INodeProps;\n OrderSummaryErrors?: IOrderSummaryErrors;\n checkoutAsGuestButton: React.ReactNode;\n checkoutAsSignInUserButton: React.ReactNode;\n storeSelector?: React.ReactNode;\n expressCheckoutButton?: React.ReactNode[];\n ExpressCheckoutSectionWrapper: INodeProps;\n backToShoppingButton: React.ReactNode;\n waitingComponent: React.ReactNode;\n promotionOptions?: ICartLineItemViewProps;\n promoCode: React.ReactNode;\n cartLoadingStatus: string;\n cartDataResult: boolean;\n multiplePickUpEnabled?: boolean;\n createTemplateFromCartButton: React.ReactNode;\n telemetryContent?: ITelemetryContent;\n checkoutBlockedDueToUnavailableFunds?: React.ReactNode;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\n}\n\n/**\n * Order summary errors interface.\n */\nexport interface IOrderSummaryErrors {\n Wrapper: INodeProps;\n header: React.ReactNode;\n errors: React.ReactNode[];\n}\n\n/**\n * Cart component state interface.\n */\ninterface ICartComponentState {\n showPromotionDialog: boolean;\n cartlinesErrors: CartLineValidationResultsByLineId;\n promotionData: IPromotionData;\n isCartValid: boolean;\n productPickUpOptions?: ProductDeliveryOptions[];\n}\n\n/**\n * Cart component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass Cart extends React.Component> {\n public state: ICartComponentState;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n private isQuantityLimitsFeatureEnabled: boolean = false;\n\n private _isMounted: boolean = false;\n\n private readonly promotionPopupId: string = 'cart-promotion-popup';\n\n public constructor(props: ICartProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '');\n this.promotionLinkClick = this.promotionLinkClick.bind(this);\n this.promotionCloseButtonclick = this.promotionCloseButtonclick.bind(this);\n\n this.state = {\n showPromotionDialog: false,\n promotionData: {},\n isCartValid: true,\n productPickUpOptions: undefined,\n cartlinesErrors: {}\n };\n }\n\n /**\n * Component did mount function.\n */\n public async componentDidMount(): Promise {\n this._isMounted = true;\n const {\n config,\n context: { actionContext }\n } = this.props;\n\n this.isQuantityLimitsFeatureEnabled =\n (await this.getOrderQuantityLimitsFeatureFlag()) || (await this._isChannelLimitsFeatureEnabled());\n if (this.isQuantityLimitsFeatureEnabled) {\n await this.validateCart();\n }\n\n if (config.showAvailablePromotions) {\n if (this._isMounted && this.props.data.cart.result?.cart.CartLines) {\n this.setState({ promotionData: await getPromotionData(actionContext) });\n }\n\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n if (this._isMounted) {\n this.setState({ promotionData: await getPromotionData(actionContext) });\n }\n }\n );\n }\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n if (this._isMounted) {\n const input = new ProductPickUpOptionsForCartLineItems(actionContext.requestContext.apiSettings);\n this.setState({ productPickUpOptions: await getPickUpOptionsForCartLineItems(input, actionContext) });\n }\n }\n );\n }\n\n /**\n * Component will unmount function.\n */\n public componentWillUnmount(): void {\n this._isMounted = false;\n }\n\n /**\n * Should component update function.\n * @param nextProps - Next props.\n * @param nextState - Next state.\n * @returns True if component should update, false otherwise.\n */\n public shouldComponentUpdate(nextProps: ICartProps, nextState: ICartComponentState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n /* eslint-disable complexity -- Disabling complexity for render method */\n public render(): JSX.Element | null {\n const {\n data: {\n cart: { result: cart },\n products: { result: products }\n },\n context: {\n request: {\n user: { isAuthenticated, signInUrl }\n }\n },\n resources\n } = this.props;\n\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) || '';\n const checkoutURL = this.getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\n const cartLines = this._getCartLines();\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n const validInventoryAcrossCartLines = validateCartLinesInventory(\n cart?.cart.CartLines ?? [],\n this.props.data.productAvailabilites.result ?? [],\n this.props.context.actionContext,\n products ?? [],\n emailDeliveryModeCode\n );\n\n const hasError =\n !validInventoryAcrossCartLines?.isValid ||\n (!validInventoryAcrossCartLines && !this.state.isCartValid) ||\n (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const { featureState } = this.props.data;\n const isMultipleCatalogsFeatureEnabled =\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n const currentCatalogId = getCatalogId(this.props.context.request);\n validateCatalogId(currentCatalogId);\n const cartLinesGroup = cart?.hasInvoiceLine || multiplePickUpEnabled ? this.getCartLinesGroup() : null;\n this.payLoad.contentAction.etext = TelemetryConstant.Checkout;\n const checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.GuestCheckout;\n const checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.BackToShopping;\n const backtoShoppingAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n\n // If there's inventory issues across multiple cart lines then update the error and display as part of the order summary\n if (validInventoryAcrossCartLines && !validInventoryAcrossCartLines.isValid) {\n if (multiplePickUpEnabled && cartLinesGroup !== null) {\n for (const cartLineGroup of cartLinesGroup) {\n this._updateCartLineErrorForInvalidInventory(cartLineGroup, validInventoryAcrossCartLines);\n }\n }\n\n this._updateCartLineErrorForInvalidInventory(cartLines, validInventoryAcrossCartLines);\n }\n\n const viewProps = {\n ...this.props,\n className: classnames('ms-cart'),\n title:

{resources.cartTitle}

,\n cart: this.props.data.cart.result,\n CartlinesWrapper: { className: 'msc-cartline-wraper' },\n OrderSummaryWrapper: { className: cart?.hasInvoiceLine ? 'msc-invoice-summary-wrapper' : 'msc-order-summary-wrapper' },\n OrderSummaryItems: { className: cart?.hasInvoiceLine ? 'msc-invoice-summary__items' : 'msc-order-summary__items' },\n cartlines: cartLines,\n cartLinesGroup,\n promoCode: this._getPromoCode(),\n promotionOptions: this._getPromotions(),\n context: this.props.context,\n typeName: this.props.typeName,\n telemetry: this.props.telemetry,\n id: this.props.id,\n multiplePickUpEnabled,\n removePromoAriaLabelFormat: resources.removePromoAriaLabelFormat,\n orderSummaryHeading: ArrayExtensions.hasElements(cart?.cart.CartLines) ? (\n cart?.hasInvoiceLine ? (\n

{resources.invoiceSummaryTitle}

\n ) : (\n

{resources.orderSummaryTitle}

\n )\n ) : null,\n orderSummaryLineitems: this._getOrderSummaryLineItems(),\n invoiceSummaryLineitems: this._getInvoiceSummaryLineItems(),\n checkoutAsSignInUserButton: !isCartEmpty ? (\n \n {resources.checkoutButtonTitle}\n \n ) : null,\n checkoutAsGuestButton:\n !isCartEmpty && !isAuthenticated && this.props.config.showGuestCheckoutButton ? (\n \n {resources.guestCheckoutButtonTitle}\n \n ) : null,\n expressCheckoutButton: !isCartEmpty ? this.props.slots.paymentExpress : null,\n ExpressCheckoutSectionWrapper: { className: 'msc-express-payment-container-in-cart-page' },\n backToShoppingButton: (\n \n {resources.backToShoppingButtonTitle}\n \n ),\n createTemplateFromCartButton:\n this._displayAddCartToTemplate() && products ? (\n \n ) : null,\n checkoutBlockedDueToUnavailableFunds: null,\n storeSelector:\n this.props.slots.storeSelector && this.props.slots.storeSelector.length > 0 ? this.props.slots.storeSelector[0] : null,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n waitingComponent: ,\n cartLoadingStatus: this.props.data.cart.status === 'FAILED' ? this.props.resources.cartLoadingErrorMessage : null,\n cartDataResult: this.props.data.cart.result && this.props.data.cart.result.isEmpty,\n OrderSummaryErrors: this._getOrderSummaryErrors(cartLines),\n telemetryContent: this.telemetryContent\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n /* eslint-enable complexity -- Disabling complexity for render method */\n\n /**\n * Promotion click event handler.\n * @param event - The mouse event.\n */\n private readonly promotionLinkClick = (event: React.MouseEvent) => {\n this.setState({\n showPromotionDialog: !this.state.showPromotionDialog\n });\n };\n\n /**\n * Promotion close button click.\n */\n private readonly promotionCloseButtonclick = () => {\n this._hidePromotionDialog();\n };\n\n /**\n * Hide promotion dialog.\n */\n private _hidePromotionDialog(): void {\n this.setState({\n showPromotionDialog: false\n });\n }\n\n /**\n * Display add to cart template.\n * @returns True if should display, false otherwise.\n */\n private _displayAddCartToTemplate(): boolean {\n const cart = this.props.data.cart?.result;\n if (ObjectExtensions.isNullOrUndefined(cart) || cart.hasInvoiceLine) {\n return false;\n }\n\n if (\n isChannelTypeB2B(this.props.context.actionContext.requestContext) &&\n this.props.data.orderTemplates.result &&\n ArrayExtensions.hasElements(cart.cart?.CartLines) &&\n this.props.data.customerInformation.result\n ) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Get promotions.\n * @returns React node with the promotions.\n */\n private _getPromotions(): React.ReactNode {\n return (\n this.props.config.showAvailablePromotions &&\n cartPromotions({\n id: this.promotionPopupId,\n showPromotionPopup: this.state.showPromotionDialog,\n onSeeAllClick: this.promotionLinkClick,\n onCloseButtonClick: this.promotionCloseButtonclick,\n promotions: this.state.promotionData.promotionOptions,\n resources: {\n promotionStringHeading: this.props.resources.promotionStringHeading,\n promotionLinkText: this.props.resources.promotionLinkText,\n promotionPopupHeading: this.props.resources.promotionPopupHeading,\n promotionCloseButtonAriaLabel: this.props.resources.promotionCloseButtonAriaLabel\n }\n })\n );\n }\n\n /**\n * Add error message in cart line in case the quantity exceeds the current inventory.\n * @param cartLines - The cart lines.\n * @param cartLineInventoryValidationResult - The cart line inventory result.\n */\n private _updateCartLineErrorForInvalidInventory(\n cartLines: ICartlinesViewProps[] | null,\n cartLineInventoryValidationResult: ICartLineInventoryValidationResult\n ) {\n const { resources } = this.props;\n\n if (\n ArrayExtensions.hasElements(cartLines) &&\n !cartLineInventoryValidationResult.isValid &&\n ArrayExtensions.hasElements(cartLineInventoryValidationResult.productIdWithErrors)\n ) {\n for (const productIdWithError of cartLineInventoryValidationResult.productIdWithErrors) {\n const cartLine = cartLines?.find(element => element.data?.cartline.ProductId === productIdWithError);\n if (cartLine) {\n cartLine.error = resources.outOfStockErrorMessage;\n cartLine.hasError = true;\n }\n }\n }\n }\n\n /**\n * Get order summary errors.\n * @param cartLines - The cart lines.\n * @returns Order summary errors.\n */\n private _getOrderSummaryErrors(cartLines: ICartlinesViewProps[] | null): IOrderSummaryErrors | undefined {\n const allErrors =\n (cartLines &&\n cartLines\n .map(cartline => {\n // Check if the product is service or not by product type\n const isServiceItem = cartline.data?.product?.ItemTypeValue === ReleasedProductType.Service;\n\n if (!isServiceItem && cartline.error) {\n const fullError =\n cartline.data && cartline.data.product?.Name\n ? `${cartline.data.product.Name}: ${cartline.error}`\n : cartline.error;\n\n return (\n
\n {fullError}\n
\n );\n }\n\n return null;\n })\n .filter((line): line is JSX.Element => !!line)) ||\n [];\n\n return {\n Wrapper: {\n tag: Alert,\n className: 'msc-alert',\n isOpen: allErrors.length > 0,\n color: 'danger',\n assertive: true,\n 'aria-label': this.props.resources.outOfStockErrorMessageHeader\n },\n header: (\n \n ),\n errors: allErrors\n };\n }\n\n /**\n * Gets invoice summary line items.\n * @returns Invoice summary lines.\n */\n private _getInvoiceSummaryLineItems(): IInvoiceSummaryLines | undefined {\n const {\n data: {\n cart: { result: cart }\n },\n telemetry,\n resources\n } = this.props;\n\n return cart?.hasInvoiceLine\n ? InvoiceSummary({\n orderTotalLabel: resources.totalAmountLabel,\n invoiceLabel: resources.invoiceLabel,\n cart: cart.cart,\n context: this.props.context,\n typeName: this.props.typeName,\n telemetry,\n id: this.props.id\n })\n : undefined;\n }\n\n /**\n * Gets order summary line items.\n * @returns Order summary lines.\n */\n private _getOrderSummaryLineItems(): IOrderSummaryLines | undefined {\n const {\n data: {\n cart: { result: cart },\n channelDeliveryOptionConfig\n },\n telemetry,\n resources\n } = this.props;\n\n const channelConfiguration = this.props.context && this.props.context.request && this.props.context.request.channel;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const featureState = this.props?.data?.featureState;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(item => item.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const isShowOrHideTaxEnabled = this.props.context.request.app.config?.isEnableShowOrHideSalesTaxECommerceEnabled === true;\n\n return channelConfiguration && ArrayExtensions.hasElements(cart?.cart.CartLines) && !cart?.hasInvoiceLine\n ? OrderSummary({\n cart: cart!.cart,\n subTotalLabel: resources.itemsWithCountLabel,\n shippingLabel: resources.estimatedShippingLabel,\n otherChargeLabel: resources.otherCharges,\n taxLabel: resources.estimatedTaxLabel,\n orderTotalLabel: resources.orderTotal,\n totalDiscountsLabel: resources.totalDiscountsLabel,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n toBeCalculatedText: resources.yetToBeCalculatedText,\n freeText: resources.priceFree,\n channelConfiguration,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig: channelDeliveryOptionConfig?.result,\n telemetry,\n isTaxIncludedInPrice: cart!.cart.IsTaxIncludedInPrice,\n isShowTaxBreakup: isShowOrHideTaxEnabled\n })\n : undefined;\n }\n\n /**\n * Gets promo code.\n * @returns React node with the promo code.\n */\n private _getPromoCode(): React.ReactNode {\n const {\n data: {\n cart: { result: cart }\n },\n resources\n } = this.props;\n\n return (\n cart && (\n \n )\n );\n }\n\n /**\n * Generate add to order template dialog resources.\n * @param resources - The resources.\n * @returns IAddToOrderTemplateDialogResources.\n */\n private _generateAddToOrderTemplateDialogResources(resources: ICartResources): IAddToOrderTemplateDialogResources {\n return {\n addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\n\n noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\n noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\n\n createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\n createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\n cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\n\n selectTemplatesText: resources.selectTemplatesText,\n addToTemplateButtonText: resources.addToTemplateButtonText,\n lineItemsText: resources.lineItemsText\n };\n }\n\n /**\n * Generate item added to order template dialog resources.\n * @param resources - The resources.\n * @returns IItemAddedToOrderTemplateDialogResources.\n */\n private _generateItemAddedToOrderTemplateDialogResources(resources: ICartResources): IItemAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n itemAddedToOrderTemplateHeaderItemOneText: resources.itemAddedToOrderTemplateHeaderItemOneText,\n itemAddedToOrderTemplateHeaderItemFormatText: resources.itemAddedToOrderTemplateHeaderItemFormatText,\n itemAddedToOrderTemplateHeaderMessageText: resources.itemAddedToOrderTemplateHeaderMessageText,\n freePriceText: resources.freePriceText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText\n };\n }\n\n /**\n * Generate lines added to order template dialog resources.\n * @param resources - The resources.\n * @returns ILinesAddedToOrderTemplateDialogResources.\n */\n private _generateLinesAddedToOrderTemplateDialogResources(resources: ICartResources): ILinesAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n linesAddedToOrderTemplateHeaderItemsOneText: resources.linesAddedToOrderTemplateHeaderItemsOneText,\n linesAddedToOrderTemplateHeaderItemsFormatText: resources.linesAddedToOrderTemplateHeaderItemsFormatText,\n linesAddedToOrderTemplateHeaderLinesOneText: resources.linesAddedToOrderTemplateHeaderLinesOneText,\n linesAddedToOrderTemplateHeaderLinesFormatText: resources.linesAddedToOrderTemplateHeaderLinesFormatText,\n linesAddedToOrderTemplateHeaderMessageText: resources.linesAddedToOrderTemplateHeaderMessageText,\n linesAddedToOrderTemplateCustomPriceAlertMessageText: resources.linesAddedToOrderTemplateCustomPriceAlertMessageText\n };\n }\n\n /**\n * Generate duplicate items when adding to order template dialog resources.\n * @param resources - The resources.\n * @returns IDuplicateItemsWhenAddingToOrderTemplateDialogResources.\n */\n private _generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources: ICartResources\n ): IDuplicateItemsWhenAddingToOrderTemplateDialogResources {\n return {\n duplicatedProductsHeader: resources.duplicatedProductsHeader,\n duplicatedProductsDescription: resources.duplicatedProductsDescription,\n updateQuantityButtonText: resources.updateQuantityButtonText,\n cancelDuplicateItemsButtonText: resources.cancelDuplicateItemsButtonText\n };\n }\n\n /**\n * Generate order template name dialog resources.\n * @param resources - The resources.\n * @returns IOrderTemplateNameDialogResources.\n */\n private _generateOrderTemplateNameDialogResources(resources: ICartResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\n orderTemplateDescription: resources.createOrderTemplateDescription,\n\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\n };\n }\n\n /**\n * Gets the cart lines view props.\n * @returns ICartlinesViewProps [].\n */\n private _getCartLines(): ICartlinesViewProps[] | null {\n const {\n data: {\n cart: { result: cart },\n wishlists: { result: wishlists },\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources,\n modules\n } = this.props;\n\n const imageSettings = this.getImageSettings(config.imageSettings);\n\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultipleCatalogsFeatureEnabled =\n this.props.data.featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled ||\n false;\n return ArrayExtensions.hasElements(cart?.cart.CartLines)\n ? CartLineItems({\n cartlines: cart!.cart.CartLines,\n storeSelectorModuleId: storeSelectorId,\n cartlinesErrors,\n products: this.props.data.products.result,\n productAvailabilites: this.props.data.productAvailabilites.result,\n productDeliveryOptions: this.props.data.deliveryOptions.result,\n catalogs: this.props.data.catalogs?.result,\n imageSettings,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n amountString: resources.productDimensionTypeAmount,\n quantityDisplayString: resources.quantityDisplayText,\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\n discountStringText: resources.discountStringText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n shippingChargesText: resources.shippingCharges,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n priceEditorResources: {\n ...resources\n }\n },\n telemetry,\n addToWishlistButtonText: resources.addToWishlistButtonText,\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\n removeButtonText: resources.removeCartButtonText,\n shipItText: resources.shipInsteadDisplayText,\n pickitUpText: resources.pickItUpDisplayText,\n changeStoreText: resources.changeStoreDisplayText,\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\n outOfStockText: resources.outOfStockErrorMessage,\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\n cartState: this.props.data.cart.result,\n orgUnitLocations: this.props.data.orgUnitLocations.result,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\n wishlists,\n defaultWishlistName: resources.defaultWishlistName,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n includeErrors: config.showOutOfStockErrors,\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\n telemetryContent: this.telemetryContent,\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\n\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources\n ),\n\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\n orderTemplates,\n customerInformation,\n productAvailability: this.props.data.productAvailabilites,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\n })\n : null;\n }\n\n /**\n * Gets the checkout URL.\n * @param isAuthenticated - Is authenticated flag.\n * @param guestCheckoutUrl - Guest checkout URL.\n * @param signInUrl -The sign in URL.\n * @returns The checkout URL.\n */\n private getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\n if (isAuthenticated) {\n return guestCheckoutUrl;\n }\n\n const isAbsoluteUrl = urlCheck(guestCheckoutUrl);\n let returnURL = guestCheckoutUrl;\n if (MsDyn365.isBrowser && !isAbsoluteUrl) {\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\n }\n\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\n }\n\n /**\n * Gets the image settings.\n * @param imageSettings - Image settings.\n * @returns IImageSettings.\n */\n private readonly getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n\n /**\n * Remove item from cart handler.\n * @param cartlineToRemove - The cart line to remove.\n */\n private readonly removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\n if (this.props.data.cart.result) {\n const input = {\n cartLineIds: [cartlineToRemove.LineId!.toString()]\n };\n this.props.data.cart.result\n .removeCartLines(input)\n .then(() => {\n this.validateCart().catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to Remove Cart Line');\n });\n }\n };\n\n /**\n * Move to wish list handler.\n * @param result - The wish list action success result.\n * @param cartline - The cart line.\n */\n private readonly moveToWishlistSuccessHandler = (result: IWishlistActionSuccessResult, cartline?: CartLine) => {\n if (result.status === 'ADDED' && cartline) {\n this.removeItemFromCartHandler(cartline);\n }\n };\n\n /**\n * Updates the cart line quantity.\n * @param cartlineToUpdate - The cart line.\n * @param quantity - The quantity.\n * @param lineIndex - The line index.\n * @returns True if the cart line was updated, false otherwise.\n */\n private readonly updateCartlineQuantity = (cartlineToUpdate: CartLine, quantity: number, lineIndex?: number): boolean => {\n cartLineQuantityUpdatedAsync(\n this.isQuantityLimitsFeatureEnabled,\n this.props.data.cart.result,\n this.props.telemetry,\n this.props.data.products.result,\n cartlineToUpdate,\n quantity\n )\n .then((cartActionResult: ICartActionResult | undefined): boolean => {\n if (cartActionResult?.status === 'SUCCESS') {\n this.validateCart().catch(error => {\n this.props.telemetry.warning((error as Error).message);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n\n return true;\n }\n\n if (!ObjectExtensions.isNullOrUndefined(cartActionResult)) {\n // Show update line error message.\n const lineUpdateFailure: LineValidationResult = {\n LineId: ObjectExtensions.isNullOrUndefined(cartlineToUpdate.LineId) ? '0' : cartlineToUpdate.LineId,\n ValidationFailures: [\n {\n ErrorContext: ArrayExtensions.hasElements(cartActionResult.validationResults)\n ? cartActionResult.validationResults[0].ErrorContext\n : '',\n LocalizedMessage: cartActionResult.errorDetails?.LocalizedMessage\n }\n ]\n };\n\n this.setState({\n cartlinesErrors: { ValidationResultsPairs: [lineUpdateFailure] }\n });\n }\n\n return false;\n })\n .catch(() => {\n return false;\n });\n\n return false;\n };\n\n /**\n * Fulfillment store id is updated.\n */\n private readonly fulfillmentStoreIdUpdated = () => {\n if (this.isQuantityLimitsFeatureEnabled) {\n // Refresh products (in props.data) based on latest cart.\n getActiveCartProductsAction(new ActiveCartProductsInput(), this.props.context.actionContext)\n .then(async () => this.validateCart())\n .catch((error: Error) => {\n this.props.telemetry.warning(error.message);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n }\n };\n\n /**\n * Validates cart.\n * @returns Void promise.\n */\n private async validateCart(): Promise {\n if (!this.isQuantityLimitsFeatureEnabled) {\n this.setState({ isCartValid: true });\n return AsyncResult.resolve();\n }\n\n const {\n data: { cart },\n telemetry,\n context\n } = this.props;\n\n const validationResults: CartLineValidationResultsByLineId | undefined = await validateCartAsync(cart, telemetry, context, true);\n\n if (validationResults) {\n const isValid = !ArrayExtensions.hasElements(validationResults.ValidationResultsPairs);\n this.setState({\n cartlinesErrors: validationResults,\n isCartValid: isValid\n });\n } else {\n this.setState({ isCartValid: true });\n }\n\n return AsyncResult.resolve();\n }\n\n /**\n * Get order quantity limit feature flag.\n * @returns True if flag is enabled, false otherwise.\n */\n private async getOrderQuantityLimitsFeatureFlag(): Promise {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\n return false;\n }\n\n try {\n const featureStatuses = await this.props.data.featureState;\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n return false;\n }\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get feature states');\n return false;\n }\n\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n return true;\n }\n try {\n const customerInfo = await this.props.data.customerInformation;\n return (\n !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))\n );\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get customer info');\n return false;\n }\n }\n\n private async _isChannelLimitsFeatureEnabled(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isChannelLimitsFeatureEnabledInHq = featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled;\n\n return isChannelLimitsFeatureEnabledInHq ?? false;\n }\n\n /**\n * Gets the cart lines group.\n * @returns ICartlinesViewProps [][].\n */\n private getCartLinesGroup(): ICartlinesViewProps[][] | null {\n const {\n data: {\n cart: { result: cart },\n wishlists: { result: wishlists },\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources,\n modules\n } = this.props;\n\n const imageSettings = this.getImageSettings(config.imageSettings);\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n const { featureState } = this.props.data;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultipleCatalogsFeatureEnabled =\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n return this.props.data.products &&\n (cart?.hasInvoiceLine || this.props.data.products.result) &&\n cart &&\n cart.cart.CartLines &&\n cart.cart.CartLines.length > 0 &&\n this.props.data.channelDeliveryOptionConfig?.result\n ? CartLineGroupItems({\n cartlines: cart.cart.CartLines,\n storeSelectorModuleId: storeSelectorId,\n cartlinesErrors,\n products: this.props.data.products.result,\n productAvailabilites: this.props.data.productAvailabilites.result,\n productDeliveryOptions: this.props.data.deliveryOptions.result,\n catalogs: this.props.data.catalogs?.result,\n imageSettings,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n hasInvoiceLine: cart?.hasInvoiceLine || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\n typeName: this.props.typeName,\n id: this.props.id,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n amountString: resources.productDimensionTypeAmount,\n quantityDisplayString: resources.quantityDisplayText,\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\n discountStringText: resources.discountStringText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n shippingChargesText: resources.shippingCharges,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n priceEditorResources: {\n ...resources\n }\n },\n telemetry,\n addToWishlistButtonText: resources.addToWishlistButtonText,\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\n removeButtonText: resources.removeCartButtonText,\n shipItText: resources.shipInsteadDisplayText,\n pickitUpText: resources.pickItUpDisplayText,\n changeStoreText: resources.changeStoreDisplayText,\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\n outOfStockText: resources.outOfStockErrorMessage,\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\n cartState: this.props.data.cart.result,\n orgUnitLocations: this.props.data.orgUnitLocations.result,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\n wishlists,\n defaultWishlistName: resources.defaultWishlistName,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n includeErrors: config.showOutOfStockErrors,\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\n telemetryContent: this.telemetryContent,\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\n\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources\n ),\n\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\n orderTemplates,\n customerInformation,\n channelDeliveryOptionConfig: this.props.data.channelDeliveryOptionConfig?.result,\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\n productAvailability: this.props.data.productAvailabilites,\n productPickUpOptions: this.state.productPickUpOptions || this.props.data.cartLinesPickUpOptions?.result,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\n })\n : null;\n }\n}\n\nexport default Cart;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartViewProps, IOrderSummaryErrors } from './cart';\nimport { ICartlinesViewProps } from './components/cart-line-items';\nimport { ICartLineItemViewProps } from './components/cart-line-items-promotion';\n\nconst _renderCartlines = (\n cartLines: ICartlinesViewProps[] | undefined,\n cartEmptyText: string,\n CartlinesWrapper: INodeProps,\n storeSelector: React.ReactNode | undefined,\n backToShoppingButton: React.ReactNode,\n waitingComponent: React.ReactNode,\n cartLoadingStatus: string,\n cartDataResult: boolean\n): JSX.Element[] | JSX.Element => {\n if (cartLoadingStatus) {\n return <>{cartLoadingStatus};\n }\n if (cartLines) {\n return cartLines.map(cartLine => {\n return (\n
\n {cartLine.cartline}\n {storeSelector && cartLine.pickUpInStore ? (\n {cartLine.pickUpInStore.defaultComponent}\n ) : null}\n {cartLine.addToOrderTemplate ? (\n \n {cartLine.remove}\n {cartLine.addToWishlist}\n {cartLine.addToOrderTemplate}\n \n ) : (\n <>\n {cartLine.remove}\n {cartLine.addToWishlist}\n \n )}\n
\n );\n });\n }\n return cartDataResult ? (\n
\n

{cartEmptyText}

\n {backToShoppingButton}\n
\n ) : (\n <>{waitingComponent}\n );\n};\n\n/**\n * Method will render error block.\n * @param errorData -The order summary errors interface.\n * @returns Jsx element.\n */\nconst _renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\n if (!errorData || !ArrayExtensions.hasElements(errorData.errors)) {\n return null;\n }\n return (\n \n {errorData.header}\n {errorData.errors}\n \n );\n};\n\n/**\n * Method will render invoice summary lines.\n * @param invoiceSummaryLines -The invoicesummary lines interface.\n * @param OrderSummaryItems -The order summary items props.\n * @param props -The cartview props.\n * @returns Jsx element.\n */\nconst _renderInvoiceSummarylines = (\n invoiceSummaryLines: IInvoiceSummaryLines | undefined,\n OrderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!invoiceSummaryLines) {\n props.context.telemetry.error('InvoiceSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {invoiceSummaryLines.invoices}\n {invoiceSummaryLines.giftCard}\n {invoiceSummaryLines.loyalty}\n {invoiceSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Method will render order summary lines.\n * @param orderSummaryLines -The ordersummary lines interface.\n * @param OrderSummaryItems -The order summary items props.\n * @param props -The cartview props.\n * @returns Jsx element.\n */\nconst _renderOrderSummarylines = (\n orderSummaryLines: IOrderSummaryLines | undefined,\n OrderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!orderSummaryLines) {\n props.context.telemetry.error('OrderSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {props.promoCode}\n {orderSummaryLines.subtotal}\n {orderSummaryLines.shipping}\n {orderSummaryLines.otherCharge}\n {orderSummaryLines.tax}\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\n {orderSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Method will render cart promotions.\n * @param promotions -The cartline item view props.\n * @returns Jsx element.\n */\nconst _renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\n return (\n <>\n \n {promotions.promotionMessage}\n {promotions.promotionSeeAllLink}\n {promotions.promotionDialog}\n \n \n );\n};\n\n/**\n * Method will render cartlines group title.\n * @param cartLine -The cartline view props.\n * @param titleSeparate -The title separate.\n * @returns Jsx element.\n */\nconst renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, titleSeparate: string) => {\n const isBopisSelected: boolean | undefined = cartLine.pickUpInStore?.isBopisSelected;\n return (\n <>\n \n {isBopisSelected ? (\n

\n {cartLine.pickUpInStore?.deliveryOption}\n {titleSeparate}\n {cartLine.pickUpInStore?.orgUnitName}\n

\n ) : null}\n
\n \n );\n};\n\n/**\n * Method will render cartlines groups header title.\n * @param pickUpText -The pickup text for group.\n * @param shippingText -The shipping text for group.\n * @param emailShippingText -The email shipping text for group.\n * @param titleSeparate -The title separator.\n * @param cartLine -The cartline view props.\n * @param emailDeliveryModeCode -The email delivery code from channel.\n * @returns Jsx element.\n */\nconst renderCartLinesGroupHeader = (\n pickUpText: string,\n shippingText: string,\n emailShippingText: string,\n titleSeparate: string,\n cartLine: ICartlinesViewProps,\n emailDeliveryModeCode?: string\n) => {\n const isBopisSelected: boolean | undefined = cartLine.pickUpInStore?.isBopisSelected;\n let groupTitle: string;\n\n groupTitle = isBopisSelected ? pickUpText : shippingText;\n if (!StringExtensions.isNullOrEmpty(emailDeliveryModeCode)) {\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailShippingText : groupTitle;\n }\n\n return (\n <>\n
\n

\n

{groupTitle}

\n {renderCartLinesGroupTitle(cartLine, titleSeparate)}\n
\n \n );\n};\n\n/**\n * Method will render cartlines in groups.\n * @param props -The cartline.\n * @returns Jsx element.\n */\nconst renderCartLinesGroup = (props: ICartViewProps): JSX.Element | undefined => {\n if (props.cartLinesGroup && ArrayExtensions.hasElements(props.cartLinesGroup)) {\n return (\n
\n {props.cartLinesGroup.map(cartlines => {\n return (\n
\n {renderCartLinesGroupHeader(\n props.resources.pickUpText,\n props.resources.shippingText,\n props.resources.emailshippingText,\n props.resources.titleSeparate,\n cartlines[0],\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n {_renderCartlines(\n cartlines,\n props.resources.emptyCartText,\n props.CartlinesWrapper,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n
\n );\n })}\n
\n );\n }\n return props.cartDataResult ? (\n
\n
\n

{props.resources.emptyCartText}

\n {props.backToShoppingButton}\n
\n
\n ) : (\n <>{props.waitingComponent}\n );\n};\n\nconst CartView: React.FC = (props: ICartViewProps) => (\n
\n {props.title}\n {!props.cart?.hasInvoiceLine && props.promotionOptions && _renderPromotions(props.promotionOptions)}\n {props.multiplePickUpEnabled ? (\n renderCartLinesGroup(props)\n ) : (\n \n {_renderCartlines(\n props.cartlines,\n props.resources.emptyCartText,\n props.CartlinesWrapper,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n \n )}\n {props.orderSummaryHeading && (\n \n {props.orderSummaryHeading}\n {props.cart?.hasInvoiceLine\n ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\n : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\n {_renderErrorBlock(props.OrderSummaryErrors)}\n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\n {props.expressCheckoutButton}\n ) : null}\n {props.backToShoppingButton}\n {props.createTemplateFromCartButton}\n \n )}\n {props.storeSelector}\n
\n);\n\nexport default CartView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ICartLineItemPromotion {\n id: string;\n showPromotionPopup: boolean;\n promotions: CartPromotionLine[] | undefined;\n resources: ICartLineItemPromotionResourceString;\n onSeeAllClick(event: React.MouseEvent): void;\n onCloseButtonClick(): void;\n}\n\nexport interface ICartLineItemViewProps {\n promotionMessageWrapper: INodeProps;\n promotionMessage: React.ReactNode;\n promotionSeeAllLink: React.ReactElement;\n promotionDialog: React.ReactNode;\n}\n\nexport interface ICartLineItemPromotionResourceString {\n promotionLinkText: string;\n promotionStringHeading: string;\n promotionPopupHeading: string;\n promotionCloseButtonAriaLabel: string;\n}\n\nexport const cartPromotions = (props: ICartLineItemPromotion): ICartLineItemViewProps | undefined => {\n const {\n id,\n showPromotionPopup,\n promotions,\n resources: { promotionLinkText, promotionPopupHeading },\n onCloseButtonClick,\n onSeeAllClick\n } = props;\n\n if (!ArrayExtensions.hasElements(promotions)) {\n return;\n }\n\n const titleId = `${id}_title`;\n const className = 'msc-cart__promotion';\n return {\n promotionMessageWrapper: {\n className: 'msc-cart__promotion'\n },\n promotionMessage: (\n <>\n \n {props.resources.promotionStringHeading}\n \n ),\n promotionSeeAllLink: (\n \n {` `}\n {promotionLinkText} {` `}\n \n ),\n promotionDialog: (\n \n \n
\n {promotionPopupHeading}\n
\n
\n \n
    \n {promotions.map(_promotion => {\n return (\n
  • \n {_promotion.Promotion?.OfferName} {` `}\n
  • \n );\n })}\n
\n
\n \n
\n )\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n AddToOrderTemplateComponent,\n AddToWishlistComponent,\n CartLineItemComponent,\n IAddToOrderTemplateDialogResources,\n ICartlineResourceString,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n IOrderTemplateNameDialogResources,\n IWishlistActionSuccessResult\n} from '@msdyn365-commerce/components';\nimport MsDyn365, {\n IAny,\n ICoreContext,\n IGeneric,\n IGridSettings,\n IImageSettings,\n ITelemetry,\n TelemetryEvent,\n isChannelTypeB2B\n} from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResultsByLineId,\n ChannelDeliveryOptionConfiguration,\n CommerceList,\n Customer,\n OrgUnitLocation,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ProductDimensionType, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\nimport {\n ArrayExtensions,\n getInvoiceDetailsPageUrlSync,\n getProductUrlSync,\n IProductInventoryInformation,\n isCartLineItemPickUpType,\n ObjectExtensions,\n OrderTemplate,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '../../../Common/get-product';\nimport { IPickUpInStoreViewProps, PickUpInStore } from './cart-pick-up-in-store';\n\nexport interface ICartLineItemsProps {\n cartlines: CartLine[];\n cartlinesErrors: CartLineValidationResultsByLineId;\n cartState: ICartState | undefined;\n orgUnitLocations: OrgUnitLocation[] | undefined;\n resources: ICartlineResourceString;\n productAvailabilites: IProductInventoryInformation[] | undefined;\n products: SimpleProduct[] | undefined;\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\n pickupDeliveryModeCode?: string;\n catalogs?: ProductCatalog[];\n retailMulitplePickupFeatureState?: boolean;\n\n /* GridSettings for the product image in cartline */\n gridSettings: IGridSettings;\n\n /* ImageSettings for the product image in cartline */\n imageSettings: IImageSettings;\n id: string;\n typeName: string;\n context: ICoreContext>;\n telemetry: ITelemetry;\n removeButtonText: string;\n addToWishlistButtonText: string;\n removeFromWishlistButtonText: string;\n shipItText: string;\n pickitUpText: string;\n changeStoreText: string;\n outOfStockText: string;\n outOfRangeOneText: string;\n outOfRangeFormatText: string;\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\n isStockCheckEnabled: boolean;\n wishlists: CommerceList[] | undefined;\n defaultWishlistName: string;\n maxCartlineQuantity: number;\n includeErrors?: boolean;\n showShippingChargesForLineItems?: boolean;\n telemetryContent?: ITelemetryContent;\n isQuantityLimitsFeatureEnabled: boolean;\n hasInvoiceLine?: boolean;\n storeSelectorModuleId?: string;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n addToOrderTemplateDialogResources: IAddToOrderTemplateDialogResources;\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\n itemAddedToOrderTemplateDialogResources: IItemAddedToOrderTemplateDialogResources;\n duplicateItemsWhenAddingToOrderTemplateDialogResources: IDuplicateItemsWhenAddingToOrderTemplateDialogResources;\n\n addToOrderTemplateButtonText: string;\n addToOrderTemplateButtonTooltip: string;\n addToOrderTemplateMessage: string;\n addItemToOrderTemplateError: string;\n orderTemplates: OrderTemplate[] | undefined;\n customerInformation: Customer | undefined;\n shouldIgnoreWarehouse: boolean | undefined;\n productAvailability?: AsyncResult;\n productPickUpOptions?: ProductDeliveryOptions[] | undefined;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n catalogId?: number;\n\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\n updateCartLinesQuantitySuccessHandler(cartline: CartLine, quantity: number, lineIndex?: number): boolean;\n locationChangedHandler(): void;\n}\n\nexport interface ICartlinesViewProps {\n cartline: React.ReactNode;\n pickUpInStore?: IPickUpInStoreViewProps;\n remove: React.ReactNode;\n addToWishlist: React.ReactNode | undefined;\n addToOrderTemplate: React.ReactNode | undefined;\n\n error?: string;\n cartlineId?: string;\n hasError?: boolean;\n data?: {\n product?: SimpleProduct;\n cartline: CartLine;\n };\n}\n\nconst _getCartItemAvailableQuantity = (\n isStockCheckEnabled: boolean,\n productAvailability: IProductInventoryInformation | undefined\n): number => {\n if (\n !isStockCheckEnabled ||\n !productAvailability ||\n !productAvailability.ProductAvailableQuantity ||\n !productAvailability.IsProductAvailable ||\n !productAvailability.ProductAvailableQuantity.AvailableQuantity\n ) {\n return 0;\n }\n\n return productAvailability.ProductAvailableQuantity.AvailableQuantity;\n};\n\nconst _getCartItemMaxQuantity = (\n maxQuantityByConfig: number,\n isStockCheckEnabled: boolean,\n availableQuantityInStock: number,\n isQuantityLimitsFeatureEnabled: boolean,\n maxByQuantityLimitsFeature: number\n) => {\n if (isQuantityLimitsFeatureEnabled) {\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\n\n // If max by feature in not defined when feature is on then we suggest that there no max by feature\n // and consider available qty if stock check enabled and max from config in site settings.\n if (!maxByQuantityLimitsFeature) {\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\n }\n\n return isStockCheckEnabled\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\n ? maxByQuantityLimitsFeatureResult\n : availableQuantityInStock\n : maxByQuantityLimitsFeatureResult;\n }\n if (isStockCheckEnabled) {\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\n }\n return maxQuantityByConfig;\n};\n\nconst _getErrorMessage = (\n availableQuantityInStock: number,\n currentQuantity: number,\n props: ICartLineItemsProps,\n shouldSkipStockCheck: boolean,\n cartLine: CartLine,\n lineId: string | undefined,\n foundProductAvailability?: IProductInventoryInformation\n): string | undefined => {\n const finalErrorMessages: string[] = [];\n\n const isLoadingDeliveryOptions = props.productAvailability?.status === 'LOADING';\n if (isLoadingDeliveryOptions) {\n return undefined;\n }\n // check availability passed as prop for each cartline\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\n if (foundProductAvailability === undefined) {\n finalErrorMessages.push(props.outOfStockText);\n return finalErrorMessages.toString();\n }\n }\n if (props.includeErrors && props.isStockCheckEnabled && !shouldSkipStockCheck) {\n if (availableQuantityInStock <= 0) {\n finalErrorMessages.push(props.outOfStockText);\n } else if (availableQuantityInStock < currentQuantity) {\n if (availableQuantityInStock === 1) {\n finalErrorMessages.push(props.outOfRangeOneText);\n } else {\n finalErrorMessages.push(props.outOfRangeFormatText.replace('{numLeft}', availableQuantityInStock.toString()));\n }\n }\n }\n\n // Server-side validation\n const checkForErrors = props.cartlinesErrors.ValidationResultsPairs;\n const errorsFoundByLineId = checkForErrors?.filter(index => index.LineId === lineId);\n if (errorsFoundByLineId !== undefined) {\n for (const i of errorsFoundByLineId) {\n if (ArrayExtensions.hasElements(i.ValidationFailures)) {\n i.ValidationFailures.forEach(validation => {\n if (validation.ErrorContext !== undefined) {\n finalErrorMessages.push(validation.ErrorContext);\n }\n });\n }\n }\n }\n\n if (ArrayExtensions.hasElements(finalErrorMessages)) {\n return finalErrorMessages.join(' ');\n }\n\n return undefined;\n};\n\n/**\n * On Remove Click functionality.\n * @param removeItemClickHandler -Remove item click function.\n * @param cartline -CartLine.\n * @returns Remove change value.\n */\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\n removeItemClickHandler(cartline);\n};\n\n// eslint-disable-next-line complexity -- Auto-suppressed.\nconst _assembleNode = (\n cartline: CartLine,\n product: SimpleProduct | undefined,\n props: ICartLineItemsProps,\n index: number,\n foundProductAvailability?: IProductInventoryInformation,\n productPickUpOptions?: ProductDeliveryOptions\n): ICartlinesViewProps => {\n const {\n imageSettings,\n gridSettings,\n id,\n typeName,\n context,\n resources,\n removeButtonText,\n removeItemClickHandler,\n moveToWishlistSuccessHandler,\n addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip,\n addToOrderTemplateDialogResources,\n createOrderTemplateDialogResources,\n itemAddedToOrderTemplateDialogResources,\n duplicateItemsWhenAddingToOrderTemplateDialogResources,\n addToWishlistButtonText,\n removeFromWishlistButtonText,\n orderTemplates,\n customerInformation,\n wishlists,\n defaultWishlistName,\n storeSelectorModuleId,\n isMultipleCatalogFeatureEnabledInHq\n } = props;\n\n const isAuthenticated = context.request.user.isAuthenticated;\n const nameOfWishlist = wishlists && wishlists.length > 0 && wishlists[0].Name ? wishlists[0].Name : defaultWishlistName;\n const availableQuantityInStock = _getCartItemAvailableQuantity(props.isStockCheckEnabled, foundProductAvailability);\n\n const maxQuantity =\n product &&\n _getCartItemMaxQuantity(\n props.maxCartlineQuantity,\n props.isStockCheckEnabled,\n availableQuantityInStock,\n props.isQuantityLimitsFeatureEnabled,\n product?.Behavior?.MaximumQuantity || 0\n );\n\n // Skip stock check if the cart line is a service item or an invoice line\n const shouldSkipStockCheck = product?.ItemTypeValue === ReleasedProductType.Service || !!cartline.IsInvoiceLine;\n\n const errorMessage = ObjectExtensions.isNullOrUndefined(maxQuantity)\n ? undefined\n : _getErrorMessage(\n availableQuantityInStock,\n cartline.Quantity!,\n props,\n shouldSkipStockCheck,\n cartline,\n cartline.LineId,\n foundProductAvailability\n );\n\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\n\n const payload = getPayloadObject(TelemetryEvent.RemoveFromCart, props.telemetryContent!, removeButtonText, '');\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\n\n const inventoryLbl = foundProductAvailability?.StockLevelLabel;\n const inventoryCode = foundProductAvailability\n ? `ms-cart-line__inventory-code-${foundProductAvailability.StockLevelCode?.toLowerCase()}`\n : undefined;\n const productDimension = 4;\n const customPriceDimensionType = productDimension as ProductDimensionType.Style;\n const isCustomPriceSelected =\n product?.Dimensions?.find(dimension => dimension.DimensionTypeValue === customPriceDimensionType)?.DimensionValue?.Value ===\n 'Custom';\n\n let productUrl: string | undefined;\n if (product) {\n productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\n\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n } else {\n productUrl = getInvoiceDetailsPageUrlSync(cartline.Description || '', props.context.actionContext);\n }\n\n return {\n data: {\n product,\n cartline\n },\n cartlineId: cartline.LineId,\n error: errorMessage,\n hasError:\n (!shouldSkipStockCheck && props.isStockCheckEnabled ? cartline.Quantity! > (maxQuantity ?? 0) : false) ||\n (!ObjectExtensions.isNullOrUndefined(errorMessage) && !StringExtensions.isNullOrEmpty(errorMessage)),\n cartline: (\n \n ),\n pickUpInStore: product\n ? PickUpInStore({\n storeSelectorModuleId,\n cartState: props.cartState,\n cartline,\n product,\n shipitText: props.shipItText,\n pickUpInStoreText: props.pickitUpText,\n changeStoreText: props.changeStoreText,\n storeSelectorStateManager: props.storeSelectorStateManager,\n orgUnitLocations: props.orgUnitLocations,\n deliveryOptions: productPickUpOptions,\n pickupDeliveryModeCode:\n cartline.DeliveryMode !== (undefined || '') ? cartline.DeliveryMode : props.pickupDeliveryModeCode,\n retailMulitplePickupFeatureState: props.retailMulitplePickupFeatureState,\n channelDeliveryOptionConfig: props.channelDeliveryOptionConfig,\n locationChangedHandler: props.locationChangedHandler\n })\n : undefined,\n remove: (\n \n ),\n addToWishlist:\n isAuthenticated && product && !isCustomPriceSelected ? (\n \n ) : (\n undefined\n ),\n addToOrderTemplate:\n isAuthenticated && orderTemplates && product ? (\n \n ) : (\n undefined\n )\n };\n};\n\nexport const assembleCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[] | null => {\n const reactNodes: ICartlinesViewProps[] = [];\n\n cartlines.map((cartline, index) => {\n let product;\n if (props.isQuantityLimitsFeatureEnabled) {\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\n // to check productId and WarehouseId for identification.\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\n } else {\n product = getProductByProductId(cartline.ProductId, products);\n }\n let foundProductAvailability;\n\n // check if cartlineitem is pickup item\n const isPickUpItem = isCartLineItemPickUpType(\n cartline,\n props.retailMulitplePickupFeatureState,\n props.channelDeliveryOptionConfig,\n props.pickupDeliveryModeCode\n );\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n if (!props.shouldIgnoreWarehouse && isPickUpItem) {\n // check warehouse only if siteBuilder setting is not \"Based on aggregate for shipping and pickup warehouses\" and cartlineitem is pickupitem\n return (\n productAvailability.ProductAvailableQuantity?.ProductId === cartline.ProductId &&\n productAvailability.InventLocationId?.toUpperCase() === cartline.WarehouseId?.toUpperCase()\n );\n }\n return productAvailability.ProductAvailableQuantity.ProductId === cartline.ProductId;\n });\n }\n\n let productPickUpOptions;\n if (props.productPickUpOptions !== undefined && ArrayExtensions.hasElements(props.productPickUpOptions)) {\n productPickUpOptions = props.productPickUpOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\n });\n }\n reactNodes.push(_assembleNode(cartline, product, props, index, foundProductAvailability, productPickUpOptions));\n });\n\n return reactNodes;\n};\n\n/**\n * CartLineItems component.\n * @param props\n */\nexport const CartLineItems = (props: ICartLineItemsProps) => {\n const { products, cartlines } = props;\n return assembleCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n DeliveryOption,\n OrgUnitLocation,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IPickUpInStoreViewProps {\n callbacks: {\n toggleBopis(isBopisSelected: boolean): void;\n };\n defaultComponent?: React.ReactNode;\n orgUnitName?: string;\n isBopisSelected: boolean;\n ContainerProps: INodeProps;\n deliveryOption?: string;\n}\n\nexport interface IPickUpInStoreProps {\n cartline: CartLine;\n product: SimpleProduct;\n shipitText: string;\n pickUpInStoreText: string;\n changeStoreText: string;\n cartState: ICartState | undefined;\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\n orgUnitLocations?: OrgUnitLocation[] | undefined;\n deliveryOptions?: ProductDeliveryOptions;\n pickupDeliveryModeCode?: string;\n storeSelectorModuleId?: string;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n retailMulitplePickupFeatureState?: boolean;\n locationChangedHandler(): void;\n}\n\nexport const PickUpInStore = (props: IPickUpInStoreProps): IPickUpInStoreViewProps | undefined => {\n const _onLocationChangedCallback = async (\n orgUnitLocation: OrgUnitLocation,\n cartState: ICartState | undefined,\n cartline: CartLine,\n deliveryMode?: string\n ) => {\n if (!cartState) {\n return Promise.resolve();\n }\n return cartState\n .updateCartLinePickupLocation({ cartLineId: cartline.LineId!, location: orgUnitLocation, deliveryMode })\n .then(result => {\n if (result.status === 'SUCCESS') {\n props.locationChangedHandler();\n }\n })\n .catch(error => {});\n };\n\n const _toggleBOPIS = (isBopisSelected: boolean) => {\n const { storeSelectorStateManager, product, cartline, cartState, storeSelectorModuleId } = props;\n\n if (isBopisSelected) {\n if (!storeSelectorStateManager) {\n return;\n }\n storeSelectorStateManager\n .openDialog({\n id: storeSelectorModuleId,\n product,\n alreadySelectedLocation: {\n OrgUnitNumber: cartline.FulfillmentStoreId\n },\n deliveryOptions: props.deliveryOptions,\n onLocationSelected: async (orgUnitLocation, deliveryMode: string | undefined) => {\n return _onLocationChangedCallback(orgUnitLocation, cartState, cartline, deliveryMode);\n }\n })\n .catch(error => {});\n } else {\n if (!cartState) {\n return;\n }\n cartline.DeliveryMode = '';\n cartline.FulfillmentStoreId = '';\n cartline.ShippingAddress = {};\n cartState\n .clearCartLinePickupLocation({ cartLineId: cartline.LineId! })\n .then(result => {\n if (result.status === 'SUCCESS') {\n props.locationChangedHandler();\n }\n })\n .catch(error => {});\n }\n };\n\n const _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\n return '';\n }\n\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\n });\n\n if (foundLocation) {\n return foundLocation.OrgUnitName;\n }\n return fulfillmentStoreId;\n };\n\n const _renderShippingMethod = (\n cartLine: CartLine,\n shipItText: string,\n pickupInStoretext: string,\n changeStoreText: string,\n orgUnitLocations: OrgUnitLocation[] | undefined\n ): JSX.Element => {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, orgUnitLocations);\n const bopisSelected = !!cartLine.FulfillmentStoreId;\n\n const toggleBOPIS = (isBopisSelected: boolean) => {\n return () => {\n _toggleBOPIS(isBopisSelected);\n };\n };\n\n return (\n <>\n \n \n {cartLine.FulfillmentStoreId ? (\n
\n {orgUnitName}\n \n
\n ) : null}\n \n );\n };\n\n const _getDeliveryOption = (pickupStore: IPickUpInStoreProps, deliveryOptions: ProductDeliveryOptions) => {\n const delivery = deliveryOptions?.DeliveryOptions?.find(option => option.Code === pickupStore.pickupDeliveryModeCode);\n return delivery?.Description;\n };\n\n /**\n * Method to check if we have atleast one common delivery code between product and channel.\n * @param productdeliveryOptions - Product DeliveryOption List.\n * @param storePickUpOptionList - Channel DeliveryOption List.\n * @returns Boolean flag.\n */\n const matchDeliveryOptions = (\n productdeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: string[] | undefined\n ): boolean => {\n const deliveryOption: string[] = [];\n productdeliveryOptions?.map(delivery => {\n const pickup = storePickUpOptionList?.find(deliveryCode => deliveryCode === delivery.Code);\n if (pickup) {\n deliveryOption.push(pickup);\n }\n return deliveryOption;\n });\n\n return ArrayExtensions.hasElements(deliveryOption);\n };\n\n // If no delivery options present on the product, or none of the delivery options\n // match the PickupDeliveryModeCode, that means the item cannot be used for BOPIS\n if (!props.deliveryOptions || !props.deliveryOptions.DeliveryOptions) {\n return undefined;\n }\n\n if (props.retailMulitplePickupFeatureState && props.channelDeliveryOptionConfig) {\n if (!matchDeliveryOptions(props.deliveryOptions.DeliveryOptions, props.channelDeliveryOptionConfig?.PickupDeliveryModeCodes)) {\n return undefined;\n }\n } else if (\n !props.pickupDeliveryModeCode ||\n !props.deliveryOptions.DeliveryOptions.find(option => option.Code === props.pickupDeliveryModeCode)\n ) {\n return undefined;\n }\n\n return {\n callbacks: {\n toggleBopis: _toggleBOPIS\n },\n defaultComponent: _renderShippingMethod(\n props.cartline,\n props.shipitText,\n props.pickUpInStoreText,\n props.changeStoreText,\n props.orgUnitLocations\n ),\n orgUnitName: _getOrgUnitName(props.cartline.FulfillmentStoreId, props.orgUnitLocations),\n isBopisSelected: !!props.cartline.FulfillmentStoreId,\n deliveryOption: _getDeliveryOption(props, props.deliveryOptions),\n ContainerProps: {\n className: 'msc-cart-line__bopis-container'\n }\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddOrderTemplateToCartComponent, ILinesAddedToCartDialogResources } from '@msdyn365-commerce/components';\nimport { getUrlSync, ICoreContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { ProductList, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n getFallbackImageUrl,\n getProductUrlSync,\n OrderTemplate,\n OrderTemplateLine,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateActionMessageState } from '../order-template-list';\n\nexport interface ISingleOrderTemplateProps extends ProductList {\n orderTemplateState: IOrderTemplateActionMessageState;\n name?: string;\n orderTemplate: OrderTemplate;\n context: ICoreContext;\n imageSettings?: IImageSettings;\n enableImageProductLink?: boolean;\n removeFromOrderTemplateListText: string;\n addToBagText: string;\n index: number;\n itemKey: string;\n telemetry: ITelemetry;\n moduleId: string;\n moduleTypeName: string;\n handlers: {\n onRemoveOrderTemplate(id: string): void | undefined;\n onDismiss(): void;\n };\n resources: {\n closeWindowButtonText: string;\n addToCartFailureMessage: string;\n addToCartSuccessMessage: string;\n addToCartProcessMessage: string;\n orderTemplateErrorMessage: string;\n linesAddedToCartDialogResources: ILinesAddedToCartDialogResources;\n };\n telemetryContent?: ITelemetryContent;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n}\n\nexport interface ISingleOrderTemplateViewProps {\n key: string;\n orderTemplateImage: React.ReactNode;\n addToCartButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n orderTemplateStatusMessage?: React.ReactNode;\n orderTemplateName?: React.ReactNode;\n orderTemplateAriaLabel?: string;\n orderTemplateHeaderDivider?: React.ReactNode;\n}\n\nconst _removeItemFromOrderTemplateList = (props: ISingleOrderTemplateProps): void => {\n const { onRemoveOrderTemplate } = props.handlers;\n const { itemKey } = props;\n\n onRemoveOrderTemplate && itemKey && onRemoveOrderTemplate(itemKey);\n};\n\nconst OrderTemplateActions = {\n removeOrderTemplate: _removeItemFromOrderTemplateList\n};\n\n/**\n * Remove order template action.\n * @param input -Single order template props.\n * @returns Set remove order template.\n */\nconst removeOrderTemplateActionHandler = (input: ISingleOrderTemplateProps) => () => {\n OrderTemplateActions.removeOrderTemplate(input);\n};\n\nexport const OrderTemplateRender = (input: ISingleOrderTemplateProps): ISingleOrderTemplateViewProps | null => {\n const {\n Id,\n orderTemplate,\n removeFromOrderTemplateListText,\n orderTemplateState,\n handlers,\n name,\n imageSettings,\n context,\n telemetryContent,\n enableImageProductLink\n } = input;\n\n if (!Id) {\n return null;\n }\n\n const _getOrderTemplatePageUrl = (): string => {\n const url = getUrlSync('ordertemplate', context.actionContext) ?? '';\n const separator = url.includes('?') ? '&' : '?';\n if (Id) {\n return `${url}${separator}id=${Id}`;\n }\n return '';\n };\n\n const { onDismiss } = handlers;\n\n return {\n key: `${Id}-template`,\n orderTemplateImage: _renderOrderTemplateImages(context, orderTemplate.orderTemplateLines, imageSettings, enableImageProductLink),\n orderTemplateAriaLabel: _renderAriaLabel(input),\n orderTemplateName: (\n
\n \n
\n {orderTemplate.totalLines}\n {` `}\n line items\n
\n
\n
\n ),\n addToCartButton: (\n
\n \n
\n ),\n removeButton: (\n \n ),\n orderTemplateStatusMessage: orderTemplateState && orderTemplateState.isOpen && orderTemplateState.userMessage && (\n
\n \n {orderTemplateState.userMessage}\n \n
\n )\n };\n};\n\n/**\n * On image click handler.\n * @param productUrl -Product url value.\n * @returns Assign window location.\n */\nconst onClickHandler = (productUrl: string) => () => {\n window.location.assign(productUrl);\n};\n\nconst _renderOrderTemplateImages = (\n context: ICoreContext,\n orderTemplateLines?: OrderTemplateLine[],\n imageSettings?: IImageSettings,\n enableImageProductLink?: boolean\n): JSX.Element | null => {\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=140&h=140&m=6', w: 0, h: 0 },\n lg: { q: 'w=140&h=140&m=6', w: 0, h: 0 },\n xl: { q: 'w=140&h=140&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n if (orderTemplateLines) {\n const count = orderTemplateLines.length < 4 ? orderTemplateLines.length : 4;\n\n return (\n
\n {orderTemplateLines?.slice(0, count).map(line => {\n const productUrl = line.fullProduct\n ? _updateProductUrlCatalog(line.fullProduct.ProductDetails, context, line?.productListLine?.CatalogId)\n : '';\n\n return (\n \n );\n })}\n
\n );\n }\n return
;\n};\n\n// This method is used to update the product url with the catalogId\nconst _updateProductUrlCatalog = (productDetails: SimpleProduct, context: ICoreContext, catalogId: number | undefined): string => {\n const productUrl = getProductUrlSync(productDetails, context.actionContext, undefined);\n if (!StringExtensions.isNullOrWhitespace(productUrl) && catalogId !== undefined) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${catalogId ?? 0}`);\n return fullUrl.href;\n }\n return productUrl;\n};\n\nconst _renderAriaLabel = (props: ISingleOrderTemplateProps): string => {\n const { name } = props;\n return `${name}`;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { orderTemplateListStatus } from '../order-template-list';\n\nexport interface IOrderTemplateListStatusMessageProps {\n className?: string;\n errorType: orderTemplateListStatus;\n text?: string;\n}\n\nexport const OrderTemplateListStatusMessage: React.FC = ({ className, errorType, text }) => {\n switch (errorType) {\n case 'EMPTY':\n return

{text}

;\n case 'FAILED':\n return

{text}

;\n case 'LOADING':\n default:\n return

{text}

;\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IOrderTemplateNameDialogResources, OrderTemplateNameDialog } from '@msdyn365-commerce/components';\nimport { IComponentProps } from '@msdyn365-commerce/core';\nimport React, { useState } from 'react';\n\nconst modalCloseButtonReference: React.RefObject = React.createRef();\n\n/**\n * The Create Order Template Button Props.\n */\nexport interface ICreateOrderTemplateButtonProps extends IComponentProps {\n /**\n * The label for create order template.\n */\n createOrderTemplateText: string;\n\n /**\n * The create order template dialog resources.\n */\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\n\n /**\n * The delegate to fire when dialog captured any user entry.\n */\n onOrderTemplateCreated(): Promise;\n}\n\nconst CreateOrderTemplateButton: React.FC = props => {\n const onCancelHandler = React.useCallback(() => {\n return;\n }, []);\n const [isCreateOrderTemplateDialogOpen, setOrderTemplateNameDialogOpen] = useState(false);\n const onCreateButtonClick = React.useCallback(() => {\n setOrderTemplateNameDialogOpen(true);\n }, []);\n\n return (\n <>\n \n {props.createOrderTemplateText}\n \n \n \n );\n};\n\nexport default CreateOrderTemplateButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IOrderTemplateNameDialogResources } from '@msdyn365-commerce/components';\nimport { deleteAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport { OrderTemplate } from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Heading, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport Spinner from '../order-template/components/add-line/spinner';\nimport {\n ISingleOrderTemplateProps,\n ISingleOrderTemplateViewProps,\n OrderTemplateListStatusMessage,\n OrderTemplateRender\n} from './components';\nimport CreateNewTemplateButtonComponent from './components/create-order-template';\nimport { IOrderTemplateListData } from './order-template-list.data';\nimport { HeadingTag, IOrderTemplateListProps, IOrderTemplateListResources } from './order-template-list.props.autogenerated';\n\nexport interface IOrderTemplateActionMessageState {\n itemKey: string;\n userMessage: string;\n statusCssString: string;\n messageGlyph: string;\n isOpen: boolean;\n headerStatusMessage: string;\n}\n\nexport type orderTemplateListStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\n\nexport interface IOrderTemplateListViewProps extends IOrderTemplateListProps {\n OrderTemplateList: IModuleProps;\n status?: orderTemplateListStatus;\n statusMessage?: React.ReactNode;\n heading?: React.ReactNode;\n OrderTemplates?: INodeProps;\n OrderTemplate?: INodeProps;\n orderTemplates?: ISingleOrderTemplateViewProps[];\n createOrderTemplateButton?: React.ReactNode;\n templateHeaderStatusMessage?: React.ReactNode;\n}\n\n/**\n *\n * OrderTemplateList component.\n * @extends {React.PureComponent, IOrderTemplateListActionMessageState>}\n */\n@observer\nclass OrderTemplateList extends React.Component, IOrderTemplateActionMessageState> {\n constructor(props: IOrderTemplateListProps) {\n super(props);\n this.state = {\n itemKey: '',\n userMessage: '',\n headerStatusMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false\n };\n }\n\n public async componentDidMount(): Promise {\n this.setState({});\n }\n\n public shouldComponentUpdate(\n nextProps: IOrderTemplateListProps,\n nextState: IOrderTemplateActionMessageState\n ): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { className, heading } = this.props.config;\n const { emptyOrderTemplateText, createNewTemplateButtonText } = this.props.resources;\n const { orderTemplates } = this.props.data;\n const orderTemplatesData = orderTemplates && orderTemplates.result;\n const orderTemplateListHeading = heading?.text ?? this.props.resources.orderTemplateListTitle;\n\n if (orderTemplates.status === 'LOADING') {\n const errorProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'LOADING',\n statusMessage: ,\n heading: (\n \n )\n };\n return this.props.renderView(errorProps);\n }\n\n if (orderTemplatesData && orderTemplatesData.length === 0) {\n // When no order templates are found for customer\n const emptyViewProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'EMPTY',\n statusMessage: ,\n createOrderTemplateButton: (\n \n ),\n heading: (\n \n )\n };\n\n return this.props.renderView(emptyViewProps);\n }\n\n const viewProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'SUCCESS',\n heading: ,\n createOrderTemplateButton: (\n \n ),\n templateHeaderStatusMessage: this.state.isOpen && this.state.headerStatusMessage && (\n
\n \n {this.state.headerStatusMessage}\n \n
\n ),\n OrderTemplates: {\n className: 'ms-order-template__list-item',\n tag: 'ul'\n },\n OrderTemplate: {\n className: 'ms-order-template__tile',\n tag: 'li'\n },\n orderTemplates: orderTemplatesData && this._renderOrderTemplateList(orderTemplatesData)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _generateOrderTemplateNameDialogResources(resources: IOrderTemplateListResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\n orderTemplateDescription: resources.createOrderTemplateDescription,\n\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\n };\n }\n\n private readonly _isChannelMultipleCatalogsFeatureEnabled = (): boolean => {\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (this.props.data.featureState) {\n isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState.result?.find(\n feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n return isMultipleCatalogFeatureEnabledInHq;\n };\n\n private _renderOrderTemplateList(orderTemplates: OrderTemplate[]): ISingleOrderTemplateViewProps[] {\n const { context, telemetry } = this.props;\n const { imageSettings, enableImageProductLink } = this.props.config;\n return orderTemplates.map((orderTemplate: OrderTemplate, index) => {\n const currentTemplateProps: ISingleOrderTemplateProps = {\n orderTemplateState: this.state,\n Id: orderTemplate.productList.Id,\n name: orderTemplate.productList.Name,\n orderTemplate,\n context,\n imageSettings,\n enableImageProductLink,\n removeFromOrderTemplateListText: 'remove',\n addToBagText: this.props.resources.addToBagButtonText,\n index,\n itemKey: orderTemplate.productList.Id,\n telemetry,\n moduleId: this.props.id,\n moduleTypeName: this.props.typeName,\n handlers: {\n onRemoveOrderTemplate: this._onRemoveFromOrderTemplateList,\n onDismiss: this._onDismiss\n },\n resources: {\n closeWindowButtonText: this.props.resources.closeWindowButtonText,\n addToCartFailureMessage: this.props.resources.addToCartFailureMessage,\n addToCartSuccessMessage: this.props.resources.addToCartSuccessMessage,\n addToCartProcessMessage: this.props.resources.addToCartProcessMessage,\n orderTemplateErrorMessage: this.props.resources.orderTemplateErrorMessage,\n linesAddedToCartDialogResources: {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n linesAddedToCartHeaderItemsOneText: this.props.resources.linesAddedToCartHeaderItemsOneText,\n linesAddedToCartHeaderLinesOneText: this.props.resources.linesAddedToCartHeaderLinesOneText,\n linesAddedToCartHeaderLinesFormatText: this.props.resources.linesAddedToCartHeaderLinesFormatText,\n linesAddedToCartHeaderMessageText: this.props.resources.linesAddedToCartHeaderMessageText\n }\n },\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled()\n };\n\n return OrderTemplateRender(currentTemplateProps)!;\n });\n }\n\n private readonly _onDismiss = () => {\n this.setState({\n isOpen: false\n });\n };\n\n private readonly _reloadPage = async () => {\n window.location.reload();\n };\n\n private readonly _onRemoveFromOrderTemplateList = (productListId: string): void | undefined => {\n const { context, data, telemetry, resources } = this.props;\n const { orderTemplates } = data;\n\n if (context && context.actionContext) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplates.result && orderTemplates.result[0] && productListId) {\n const orderTemplate = orderTemplates.result.find(p => p.productList.Id === productListId);\n if (orderTemplate) {\n deleteAsync({ callerContext: context.actionContext }, orderTemplate.productList)\n .then()\n .catch((error: string) => {\n telemetry.warning('[order-template-list] Unable to delete order template.');\n telemetry.error(error);\n this.setState({\n itemKey: productListId,\n headerStatusMessage: resources.deleteOrderTemplateFailedText,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n })\n .then(this._reloadPage)\n .catch((error: string) => {\n telemetry.warning('[order-template-list] Unable to delete order template.');\n telemetry.error(error);\n });\n } else {\n telemetry.warning('[order-template-list] Failed to delete order template. Order template was not found');\n }\n } else {\n telemetry.warning('[order-template-list] Failed to delete order template.');\n }\n }\n };\n}\n\nexport default OrderTemplateList;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISingleOrderTemplateViewProps } from './components';\nimport { IOrderTemplateListViewProps } from './order-template-list';\n\nexport const OrderTemplateListView: React.FC = props => {\n const {\n OrderTemplateList,\n status,\n statusMessage,\n heading,\n OrderTemplates,\n orderTemplates,\n OrderTemplate,\n createOrderTemplateButton,\n templateHeaderStatusMessage\n } = props;\n\n return (\n \n {heading}\n {status !== 'SUCCESS' && statusMessage}\n \n {createOrderTemplateButton}\n {templateHeaderStatusMessage}\n \n {OrderTemplates && orderTemplates && orderTemplates.length > 0 && (\n \n {orderTemplates &&\n orderTemplates.map(orderTemplate => {\n return _renderOrderTemplate(orderTemplate, OrderTemplate);\n })}\n \n )}\n \n );\n};\n\nconst _renderOrderTemplate = (orderTemplate: ISingleOrderTemplateViewProps, OrderTemplate?: INodeProps): JSX.Element | null => {\n const { key, addToCartButton, orderTemplateImage, orderTemplateStatusMessage, removeButton, orderTemplateName } = orderTemplate;\n return (\n \n {orderTemplateName}\n {orderTemplateImage}\n {addToCartButton}\n {removeButton}\n {orderTemplateStatusMessage}\n \n );\n};\n\nexport default OrderTemplateListView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport default (props: { className: string; msg?: string }) => (\n <>\n
\n {props?.msg &&
{props?.msg}
}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { getCatalogId, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport { ProductListLine, ProductSearchCriteria, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { searchByCriteriaAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { ProductCatalog, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n addItemToOrderTemplate,\n AddItemToOrderTemplateInput,\n ArrayExtensions,\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getSelectedVariant,\n SelectedVariantInput,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Modal, ModalBody, ModalHeader, getPayloadObject, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport { get } from 'lodash';\nimport { computed } from 'mobx';\nimport React from 'react';\n\nimport { IProductConfigurationState, NotFoundComponent, ProductConfiguration, ProductList } from '.';\nimport Spinner from './spinner';\n\nexport interface IAddLineToTemplateProps {\n context: ICoreContext;\n resources: IAddLineToTemplateResources;\n orderTemplateId: string;\n imageSettings?: IImageSettings;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n catalogs?: ProductCatalog[] | undefined;\n telemetryContent?: ITelemetryContent;\n}\n\nexport interface IAddLineToTemplateResources {\n addLineModalLinkText: string;\n searchButtonAriaLabel: string;\n searchInputAriaLabel: string;\n searchModalPlaceholderText: string;\n selectCatalogTitleText: string;\n selectProductButtonText: string;\n addItemToTemplateText: string;\n addLineProductUnitPricePrefix: string;\n backButtonText: string;\n decrementButtonAriaLabel: string;\n incrementButtonAriaLabel: string;\n quantitySelectLabel: string;\n addLineProductUnitOfMeasurePrefix: string;\n notFoundSearchErrorNotice: string;\n notFoundSearchErrorRedediation: string;\n searchErrorMessage: string;\n productDimensionTypeColor: string;\n productDimensionTypeConfiguration: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n searchResultsCountVerbage: string;\n searchResultsCountSubject: string;\n addToTemplateConfirmation: string;\n totalPriceLabel: string;\n progressNotificationText: string;\n addToTemplateDuplicateError: string;\n addToTemplateGenericError: string;\n dimensionMissingError: string;\n backToResultsText?: string;\n}\n\nenum CONTENT {\n Search,\n ProductList,\n ProductConfiguration,\n NotFound,\n Error,\n Loading\n}\n\ninterface IAddLineToTemplateState {\n isOpen: boolean;\n query: string;\n products: ProductSearchResult[];\n productCatalogs: ProductCatalog[] | null;\n content: number;\n selectedProduct: SimpleProduct | null;\n selectedCatalogId: number | undefined;\n selectedProductDimensions?: ProductDimensionFull[];\n selectedQuantity?: number;\n reloadPage?: boolean;\n}\n\n/**\n * Add Lines to order template.\n */\nexport class AddLineToTemplate extends React.Component {\n public state: IAddLineToTemplateState = {\n isOpen: false,\n query: '',\n products: [],\n productCatalogs: [],\n content: CONTENT.Search,\n selectedProduct: null,\n selectedCatalogId: 0\n };\n\n public defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n lg: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n xl: { q: 'w=64&h=64&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n public searchTextInput: React.RefObject = React.createRef(); // @TODO public/private\n\n private readonly addLineButtonRef: React.RefObject = React.createRef();\n\n constructor(props: IAddLineToTemplateProps) {\n super(props);\n }\n\n public onComponentDidMount(): void {\n this.searchTextInput.current?.focus();\n }\n\n public componentDidMount(): void {\n this._getCatalogs();\n }\n\n public onComponentDidUpdate(): void {\n this.searchTextInput.current?.focus();\n }\n\n @computed get showBackArrow(): boolean {\n return this.state.content === CONTENT.ProductConfiguration;\n }\n\n public shouldComponentUpdate(nextProps: IAddLineToTemplateProps, nextState: IAddLineToTemplateState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const {\n resources: { addLineModalLinkText, backToResultsText }\n } = this.props;\n\n const modalProps = {\n ...this.props,\n className: 'msc-add-line-to-template',\n toggle: this._toggleModalHandler,\n isOpen: this.state.isOpen,\n ariaLabel: addLineModalLinkText\n };\n\n return (\n <>\n \n \n {this.showBackArrow && (\n \n )}\n {addLineModalLinkText}\n \n {this._renderContent()}\n \n \n \n {addLineModalLinkText}\n \n \n );\n }\n\n private readonly _renderSearchForm = () => {\n const {\n resources: { searchButtonAriaLabel, searchModalPlaceholderText, selectCatalogTitleText }\n } = this.props;\n\n return (\n \n {this.state.productCatalogs && ArrayExtensions.hasElements(this.state.productCatalogs) && (\n <>\n \n \n {this._getCatalogNodes()}\n \n \n )}\n
\n \n
\n \n );\n };\n\n private readonly _onSearchSubmit = (event: React.FormEvent): void => {\n event.preventDefault();\n\n const query = get(this, 'searchTextInput.current.value', null);\n\n if (!query) {\n return;\n }\n\n this.setState({\n content: CONTENT.Loading\n });\n\n this._getSearchResults(query)\n .then(result => {\n if (result.length === 0) {\n this.setState({\n products: result,\n content: CONTENT.NotFound\n });\n } else {\n this.setState({\n products: result,\n content: CONTENT.ProductList\n });\n }\n })\n .catch(error => {\n this.setState({\n content: CONTENT.Error\n });\n });\n };\n\n private readonly _onQuantityChangeHandler = (event: React.ChangeEvent) => {\n this.setState({\n selectedQuantity: +event.target.value\n });\n };\n\n private readonly _onSelectItem = async (product: ProductSearchResult): Promise => {\n const {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n } = this.props.context;\n const varianteInput = new SelectedVariantInput(product.RecordId, channelId, [], undefined, this.props.context.request);\n const productVariant = await getSelectedVariant(varianteInput, actionContext);\n\n if (!productVariant) {\n this.props.context.telemetry.error('Error retrieving product variant');\n return Promise.resolve([]);\n }\n\n const dimensions = await this._getProductDimensions(product as SimpleProduct);\n\n this.setState({\n selectedProductDimensions: dimensions,\n content: CONTENT.ProductConfiguration,\n selectedProduct: productVariant\n });\n\n return dimensions;\n };\n\n private readonly _onInputChange = (event: React.ChangeEvent): void => {\n this.setState({\n query: event.target.value\n });\n };\n\n private readonly _onBackButtonClickHandler = (): void => {\n this.setState({\n content: CONTENT.ProductList\n });\n };\n\n private readonly _highlightSearchTerm = (name: string) => {\n const parsedName = name && unescape(name.replace(new RegExp(this.state.query, 'i'), '$&'));\n\n return (\n \n );\n };\n\n private readonly _resultCountText = (): string => {\n return this.props.resources.searchResultsCountVerbage\n .replace('{count}', this.state.products.length.toString())\n .replace('{subject}', `${this.props.resources.searchResultsCountSubject}${this.state.products.length > 1 ? 's' : ''}`);\n };\n\n private _renderContent(): React.ReactNode | null {\n switch (this.state.content) {\n case CONTENT.ProductConfiguration:\n const { selectedProduct, selectedProductDimensions } = this.state;\n const viewProps = {\n ...this.props,\n imageSettings: this.props.imageSettings || this.defaultImageSettings,\n product: selectedProduct!,\n dimensions: selectedProductDimensions!,\n addToTemplateHandler: this._addItemToTemplateHandler,\n onQuantityChangeHandler: this._onQuantityChangeHandler,\n highlightSearchTerm: this._highlightSearchTerm,\n searchForm: this._renderSearchForm()\n };\n\n return ;\n\n case CONTENT.ProductList:\n const productProps = {\n ...this.props,\n imageSettings: this.props.imageSettings || this.defaultImageSettings,\n clickHandler: this._onSelectItem,\n products: this.state.products,\n highlightSearchTerm: this._highlightSearchTerm,\n searchForm: this._renderSearchForm(),\n renderResultCountText: this._resultCountText\n };\n\n return (\n \n \n \n );\n\n case CONTENT.Loading:\n return (\n \n {this._renderSearchForm()}\n \n \n );\n\n case CONTENT.NotFound:\n const { notFoundSearchErrorNotice, notFoundSearchErrorRedediation } = this.props.resources;\n\n return (\n \n

{this._resultCountText()}

\n {this._renderSearchForm()}\n \n
\n );\n\n case CONTENT.Error:\n return (\n \n {this._renderSearchForm()}\n
\n {this.props.resources.searchErrorMessage}\n
\n
\n );\n\n default:\n return {this._renderSearchForm()};\n }\n }\n\n private readonly _addItemToTemplateHandler = async (config: IProductConfigurationState): Promise => {\n const {\n orderTemplateId,\n context: { actionContext },\n isMultipleCatalogFeatureEnabledInHq\n } = this.props;\n const catalogId = this.state.selectedCatalogId;\n const input = isMultipleCatalogFeatureEnabledInHq\n ? new AddItemToOrderTemplateInput(\n orderTemplateId,\n config.product.RecordId,\n config.quantity,\n config.product.DefaultUnitOfMeasure || 'ea',\n isMultipleCatalogFeatureEnabledInHq,\n catalogId\n )\n : new AddItemToOrderTemplateInput(\n orderTemplateId,\n config.product.RecordId,\n config.quantity,\n config.product.DefaultUnitOfMeasure || 'ea'\n );\n const result = await addItemToOrderTemplate(input, actionContext);\n this.setState({\n isOpen: false,\n reloadPage: true\n });\n // reload when closing\n window.location.reload();\n return result;\n };\n\n /**\n *\n * Get all active product catalogs.\n */\n private _getCatalogs(): void {\n const { isMultipleCatalogFeatureEnabledInHq, catalogs } = this.props;\n\n // if Channel Multiple Catalogs Feature is enabled then show all catalogs.\n const productCatalogs = isMultipleCatalogFeatureEnabledInHq && catalogs ? catalogs : [];\n\n // get the current catalog id.\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n // set the current catalog id as a default selected catalog id from the url\n this.setState({\n productCatalogs: productCatalogs,\n selectedCatalogId: catalogId\n });\n }\n\n private _getCatalogNodes(): JSX.Element[] | null {\n const { productCatalogs, selectedCatalogId } = this.state;\n if (productCatalogs && ArrayExtensions.hasElements(productCatalogs)) {\n return productCatalogs.map((productCatalog: ProductCatalog) => {\n // initially select default catalog in dropdown\n const isSelected = productCatalog.RecordId === selectedCatalogId;\n return (\n \n );\n });\n }\n return [];\n }\n\n private readonly _onCatalogSelectionChange = (event: React.ChangeEvent) => {\n this.setState({\n selectedCatalogId: Number.parseInt(event.target.value, 10)\n });\n };\n\n private _getSearchResults(searchText: string): Promise {\n const {\n context: {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n }\n } = this.props;\n const { selectedCatalogId } = this.state;\n const searchCriteriaInput: ProductSearchCriteria = {};\n\n searchCriteriaInput.Context = {\n ChannelId: channelId,\n CatalogId: selectedCatalogId\n };\n searchCriteriaInput.IncludeAttributes = true;\n searchCriteriaInput.SearchCondition = searchText;\n\n return searchByCriteriaAsync({ callerContext: actionContext }, searchCriteriaInput);\n }\n\n private async _getProductDimensions(product: SimpleProduct): Promise {\n const {\n context: {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n }\n } = this.props;\n const id = product.MasterProductId ? product.MasterProductId : product.RecordId;\n\n return getDimensionsForSelectedVariant(\n new GetDimensionsForSelectedVariantInput(id, channelId, [], this.props.context.request),\n actionContext\n );\n }\n\n private readonly _toggleModalHandler = () => {\n if (this.state.isOpen) {\n const payLoad = getPayloadObject('click', this.props.telemetryContent!, 'add-item-to-template', '');\n onTelemetryClick(this.props.telemetryContent!, payLoad, 'add-item-to-template');\n this._getCatalogs();\n this.addLineButtonRef.current!.focus();\n }\n\n this.setState({\n isOpen: !this.state.isOpen,\n content: CONTENT.Search\n });\n\n if (this.state.reloadPage) {\n window.location.reload();\n this.setState({\n reloadPage: false\n });\n }\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\ninterface IDropdownState {\n /**\n * @friendlyName selectedIndex\n * @description Selected index.\n */\n selectedIndex: string;\n}\n\nexport interface IDropdownProps {\n dropdownId: number;\n dropdownName: string;\n dropdownList: IDropdownItemProps[];\n telemetryContent?: ITelemetryContent;\n onChange?(selection: IDropdownOnSelection): void;\n}\n\nexport interface IDropdownItemProps {\n value: string;\n id: number;\n}\n\nexport interface IDropdownOnSelection {\n dropdownId: number;\n selectId: string;\n selectedValue: string;\n}\n\n/**\n *\n * DropDown component.\n * @extends {React.PureComponent}\n */\nexport class Dropdown extends React.PureComponent {\n private readonly selectMenu: React.RefObject = React.createRef();\n\n constructor(props: IDropdownProps, state: IDropdownState) {\n super(props);\n this.state = {\n selectedIndex: ''\n };\n }\n\n public componentDidMount(): void {\n if (this.selectMenu.current) {\n this.selectMenu.current.selectedIndex = 0;\n }\n }\n\n public render(): JSX.Element {\n const { dropdownId, dropdownList, dropdownName } = this.props;\n\n return (\n \n {dropdownList.map(\n (item: IDropdownItemProps) =>\n item && (\n \n {item.value}\n \n )\n )}\n \n );\n }\n\n private readonly _onChanged = (event: React.ChangeEvent): void => {\n this.setState({ selectedIndex: event.target.value });\n\n if (this.props.onChange) {\n this.props.onChange({\n dropdownId: this.props.dropdownId,\n selectId: event.target.value,\n selectedValue: event.target.innerText\n });\n }\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport const NotFoundComponent = (props: { error: string; msg: string }) => (\n <>\n
\n
{props.error}
\n
{props.msg}
\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { debounce } from 'lodash';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\ninterface IQuantityProps {\n min?: number;\n max: number;\n currentCount?: number;\n disabled?: boolean;\n incrementGlyphClass?: string;\n decrementGlyphClass?: string;\n decrementButtonAriaLabel?: string;\n incrementButtonAriaLabel?: string;\n inputQuantityAriaLabel?: string;\n id?: string;\n onChange?(newValue: number): void;\n}\n\ninterface IQuantityState {\n currentInput: number;\n}\n\n/**\n * Quantity Component - This component is used to add or remove quantity.\n */\n@observer\nexport default class OrderTemplateQuantity extends React.PureComponent {\n public static defaultProps: Partial = {\n min: 1,\n decrementGlyphClass: 'fas fa-minus',\n incrementGlyphClass: 'fas fa-plus'\n };\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n constructor(props: IQuantityProps) {\n super(props);\n this.state = { currentInput: props.currentCount || 1 };\n this._handleChange = this._handleChange.bind(this);\n\n reaction(\n () => this.props.currentCount,\n () => {\n this.setState({ currentInput: this.props.currentCount || 1 });\n }\n );\n }\n\n public render(): JSX.Element {\n const glyphMinusClassName: string = `${this.props.decrementGlyphClass!} quantity__controls-glyph`;\n const glyphPlusClassName: string = `${this.props.incrementGlyphClass!} quantity__controls-glyph`;\n const disabled = this.props.currentCount === this.props.min;\n const incDisabled = this.props.currentCount === this.props.max;\n const currentValue = this.state.currentInput;\n let extraClass = '';\n if (disabled) {\n // The quantity has reached its boundaries (max or min)\n extraClass = 'disabled';\n } else if (this.props.disabled) {\n // This.props.disabled shows if the state is not succeded yet\n extraClass = 'transition';\n }\n const getChangeHandler = (amount: number) => () => {\n this._onIncrementalChange(amount);\n };\n\n return (\n
\n \n \n \n \n \n \n \n
\n );\n }\n\n private _onIncrementalChange(amount: number): void {\n const updatedQuantity = this.state.currentInput + amount;\n\n if (updatedQuantity >= 1 && updatedQuantity <= this.props.max) {\n this.props.onChange && this.props.onChange(updatedQuantity);\n }\n }\n\n private _handleChange(e: React.ChangeEvent): void {\n const currentValue = Number.parseInt(e.target.value, 10);\n const minValue = this.props.min === undefined ? 1 : this.props.min;\n const inputElement =\n this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\n\n if (currentValue > this.props.max) {\n this.setState({ currentInput: this.props.max });\n } else {\n this.setState({ currentInput: currentValue }, () => {\n debounce(() => {\n if (!isNaN(this.state.currentInput) && !(this.state.currentInput < minValue) && inputElement) {\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\n inputElement.setAttribute('value', currentValue.toString());\n }\n }, 200)();\n });\n }\n }\n\n private readonly _validateMin = (): void => {\n const minValue = this.props.min === undefined ? 1 : this.props.min;\n\n if (isNaN(this.state.currentInput) || this.state.currentInput < minValue) {\n this.props.onChange && this.props.onChange(minValue);\n } else {\n this.props.onChange && this.props.onChange(this.state.currentInput);\n }\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ProductDimensionValue, ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getFallbackImageUrl,\n getPriceForSelectedVariant,\n getProductAvailabilitiesForSelectedVariant,\n getSelectedVariant,\n IProductInventoryInformation,\n PriceForSelectedVariantInput,\n ProductAvailabilitiesForSelectedVariantInput,\n SelectedVariantInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, ITelemetryContent, ModalBody, ModalFooter } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport OrderTemplateQuantity from '../common/order-template-quantity';\nimport { Dropdown, IAddLineToTemplateProps, IAddLineToTemplateResources, IDropdownItemProps, IDropdownOnSelection } from '.';\n\nexport interface IProductCnnfigurationProps extends IAddLineToTemplateProps {\n product: SimpleProduct;\n dimensions: ProductDimensionFull[];\n imageSettings: IImageSettings;\n telemetryContent?: ITelemetryContent;\n searchForm: React.ReactNode;\n addToTemplateHandler(params: IProductConfigurationState): Promise;\n highlightSearchTerm(name: string): React.ReactNode;\n}\n\nexport interface IProductConfigurationState {\n quantity: number;\n unitPrice: number;\n totalPrice: number;\n product: SimpleProduct;\n dimensions: ProductDimensionFull[];\n selectedDimensions: {};\n productAvailableQuantity?: IProductInventoryInformation;\n buttonDisabled: boolean;\n showAddConfirmation: boolean;\n errorMessage?: string;\n isBusy: boolean;\n errors: { dimension?: string[]; add?: string };\n}\n\n/**\n * Configure selected product for addition to order template.\n */\nexport class ProductConfiguration extends React.Component {\n private selectedDimensions: {} = {};\n\n constructor(props: IProductCnnfigurationProps) {\n super(props);\n\n this.state = {\n quantity: 1,\n unitPrice: props.product.Price,\n totalPrice: props.product.Price,\n product: props.product,\n dimensions: props.dimensions.sort((a, b) => a.DimensionTypeValue - b.DimensionTypeValue),\n selectedDimensions: {},\n buttonDisabled: false,\n showAddConfirmation: false\n } as IProductConfigurationState;\n }\n\n public shouldComponentUpdate(nextProps: IProductCnnfigurationProps, nextState: IProductConfigurationState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const {\n context: {\n actionContext: {\n requestContext: { apiSettings }\n },\n request: { gridSettings }\n },\n resources: {\n addItemToTemplateText,\n addLineProductUnitPricePrefix,\n decrementButtonAriaLabel,\n incrementButtonAriaLabel,\n quantitySelectLabel,\n addLineProductUnitOfMeasurePrefix,\n totalPriceLabel\n },\n imageSettings,\n highlightSearchTerm\n } = this.props;\n const { buttonDisabled, product, quantity, unitPrice, totalPrice, showAddConfirmation, errors } = this.state;\n const isMultipleCatalogSelect = this.props.isMultipleCatalogFeatureEnabledInHq ? 'isMultipleCatalogSelect' : '';\n return (\n <>\n \n {this.props.searchForm}\n
\n
\n
\n \n
\n
{product?.ItemId}
\n {highlightSearchTerm(product?.Name ?? '')}\n
\n {addLineProductUnitPricePrefix}\n {` `}\n {this._formatPrice(unitPrice)}\n
\n
\n {addLineProductUnitOfMeasurePrefix}\n {` `}\n {product?.DefaultUnitOfMeasure}\n
\n
\n
\n
{this._getDimensionsNodes()}
\n
\n
\n
{quantitySelectLabel}
\n \n
\n
\n
\n {totalPriceLabel}\n {` `}\n {this._formatPrice(totalPrice)}\n
\n
\n \n {showAddConfirmation && (\n \n
\n )}\n {errors?.add && (\n
\n
\n )}\n \n {addItemToTemplateText}\n \n \n \n );\n }\n\n private _getConfirmationMessage(): string {\n const selectedDimensionNames = this.state.dimensions\n .map(dimension => {\n let variant = dimension.DimensionValues?.find(\n value => value.RecordId === this.selectedDimensions[dimension.DimensionTypeValue]\n )?.Value;\n if (dimension.DimensionTypeValue === 3) {\n variant = `size ${variant}`;\n }\n return variant;\n })\n .filter(value => value);\n\n return this.props.resources.addToTemplateConfirmation\n .replace('{count}', this.state.quantity.toString())\n .replace('{productAndDimensions}', `${this.state.product.Name}, ${Object.values(selectedDimensionNames).join(', ')}`);\n }\n\n private _getDimensionsNodes(): React.ReactElement[] {\n const { dimensions } = this.state;\n const { resources } = this.props;\n\n return dimensions?.map((dimension: ProductDimensionFull) => {\n const { DimensionValues, DimensionTypeValue } = dimension;\n const mapDimensions = (value: ProductDimensionValue): IDropdownItemProps => ({\n id: value.RecordId,\n value: value.Value || ''\n });\n const dimensionName = this._getDropdownName(DimensionTypeValue, resources);\n const dropdownList: IDropdownItemProps[] = DimensionValues ? DimensionValues.map(mapDimensions) : [];\n dropdownList.unshift({ id: 0, value: `Choose a ${dimensionName}` });\n\n return (\n
\n
{dimensionName}
\n {this.state.errors?.dimension?.includes(DimensionTypeValue.toString()) && (\n \n \n \n )}\n \n
\n );\n });\n }\n\n private readonly _getDimensionsError = (dimensionName: string) =>\n this.props.resources.dimensionMissingError.replace(/{dimensionName}/g, dimensionName);\n\n private readonly _addToTemplateHandler = async (event: React.MouseEvent) => {\n // Hide confirmation of previous addition when adding multiple items\n this.setState({\n isBusy: true,\n showAddConfirmation: false,\n errors: { ...this.state.errors, add: undefined }\n });\n\n const missingDimensions = this.state.dimensions\n .map(dimension => dimension.DimensionTypeValue.toString())\n .filter(type => !this.selectedDimensions[type]);\n\n this.setState({\n errors: { dimension: missingDimensions }\n });\n if (missingDimensions.length > 0) {\n this.setState({\n isBusy: false\n });\n return;\n }\n\n this.props\n .addToTemplateHandler({ ...this.state })\n .then(status => {\n // Validate against the existance of a ProductListId\n if (status.ProductListId) {\n this.setState({\n isBusy: false,\n showAddConfirmation: true\n });\n }\n })\n .catch(error => {\n const { addToTemplateDuplicateError, addToTemplateGenericError } = this.props.resources;\n let errorMessage;\n\n if (error.error.name === 'Microsoft_Dynamics_Commerce_Runtime_DuplicateObject') {\n errorMessage = addToTemplateDuplicateError;\n } else {\n errorMessage = addToTemplateGenericError;\n }\n\n this.setState({\n isBusy: false,\n errors: { ...this.state.errors, add: errorMessage }\n });\n this.props.context.telemetry.error('Error adding item to order template');\n });\n };\n\n private readonly _onQuantityChange = (newValue: number) => {\n this.setState({\n quantity: newValue,\n totalPrice: newValue * this.props.product.Price\n });\n };\n\n private readonly _updateDimensionValue = (\n productDimensionFull: ProductDimensionFull,\n newValueId: string | undefined\n ): ProductDimensionValue | undefined => {\n if (newValueId && productDimensionFull.DimensionValues) {\n return productDimensionFull.DimensionValues.find(dimension => dimension.RecordId === +newValueId);\n }\n\n return undefined;\n };\n\n // Rehydrate the selected variants price, available dimensions & sizes\n private readonly _onDimensionChanged = async (selection: IDropdownOnSelection): Promise => {\n const { product, dimensions, context } = this.props;\n const {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n } = context;\n\n // Remaining error notifications for missing dimensions\n const remainingDimensionsErrors = this.state.errors?.dimension?.filter(id => id !== selection.dropdownId.toString());\n\n this.setState({\n isBusy: false,\n showAddConfirmation: false,\n buttonDisabled: true,\n errors: { add: undefined, dimension: remainingDimensionsErrors }\n });\n\n // Update currently selected dimensions\n this.selectedDimensions[selection.dropdownId] = +selection.selectId;\n\n const mappedDimensions = dimensions\n ?.map(dimension => {\n return {\n DimensionTypeValue: dimension.DimensionTypeValue,\n DimensionValue:\n this._updateDimensionValue(dimension, this.selectedDimensions[dimension.DimensionTypeValue]) ||\n dimension.DimensionValue,\n ExtensionProperties: dimension.ExtensionProperties\n };\n })\n .filter(dimension => {\n return dimension && dimension.DimensionValue;\n });\n\n const variantProduct = await getSelectedVariant(\n new SelectedVariantInput(\n product.MasterProductId ? product.MasterProductId : product.RecordId,\n channelId,\n mappedDimensions,\n undefined,\n this.props.context.request\n ),\n actionContext\n );\n\n if (!variantProduct) {\n this.props.context.telemetry.error(\n `Error retrieving variant product for product ${product.MasterProductId ? product.MasterProductId : product.RecordId}`\n );\n return;\n }\n\n const dimensionInput = new GetDimensionsForSelectedVariantInput(\n variantProduct.RecordId,\n channelId,\n mappedDimensions,\n this.props.context.request\n );\n const variantDimensions = await getDimensionsForSelectedVariant(dimensionInput, actionContext);\n\n if (!variantDimensions) {\n this.props.context.telemetry.error('Error retrieving dimensions for reconfigured product variant');\n this.setState({\n buttonDisabled: false\n });\n return;\n }\n\n const availabilityInput = new ProductAvailabilitiesForSelectedVariantInput(\n product.MasterProductId ? product.MasterProductId : product.RecordId,\n channelId\n );\n\n // @TODO sync UX quantity w/ actual availability\n const newAvailableQuantity = await getProductAvailabilitiesForSelectedVariant(availabilityInput, actionContext);\n const priceInput = new PriceForSelectedVariantInput(product.RecordId, channelId);\n const productPrice = await getPriceForSelectedVariant(priceInput, actionContext);\n\n if (!productPrice) {\n this.props.context.telemetry.error('Error retrieving price for reconfigured product variant');\n this.setState({\n buttonDisabled: false\n });\n return;\n }\n\n this.setState({\n buttonDisabled: false,\n productAvailableQuantity: (newAvailableQuantity && newAvailableQuantity[0]) || undefined,\n unitPrice: +(productPrice.BasePrice || product.Price),\n dimensions: variantDimensions.sort((a, b) => a.DimensionTypeValue - b.DimensionTypeValue),\n product: variantProduct\n });\n };\n\n private readonly _getDropdownName = (dimensionType: number, resources: IAddLineToTemplateResources): string => {\n switch (dimensionType) {\n case 1: // Color\n return resources.productDimensionTypeColor;\n case 2: // Configuration\n return resources.productDimensionTypeConfiguration;\n case 3: // Size\n return resources.productDimensionTypeSize;\n case 4: // Style\n return resources.productDimensionTypeStyle;\n default:\n return '';\n }\n };\n\n private _formatPrice(price: number): string {\n const {\n context: {\n cultureFormatter: {\n formatCurrency,\n\n // @ts-expect-error\n currencyCode\n }\n }\n } = this.props;\n\n return formatCurrency(price.toFixed(2), currencyCode);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React, { useState } from 'react';\n\nimport { IAddLineToTemplateProps } from '.';\n\nexport interface IProductListProps extends IAddLineToTemplateProps {\n products: ProductSearchResult[];\n imageSettings: IImageSettings;\n searchForm: React.ReactNode;\n clickHandler(product: ProductSearchResult): Promise;\n highlightSearchTerm(name: string): React.ReactNode;\n renderResultCountText(): string;\n}\n\nexport const ProductList = (props: IProductListProps) => {\n const {\n products,\n context: {\n actionContext: {\n requestContext: { apiSettings }\n },\n request: { gridSettings },\n cultureFormatter: {\n formatCurrency,\n\n // @ts-expect-error\n currencyCode\n }\n },\n clickHandler,\n highlightSearchTerm,\n renderResultCountText,\n resources: { selectProductButtonText },\n imageSettings\n } = props;\n\n return (\n <>\n

\n {renderResultCountText()}\n

\n {props.searchForm}\n
\n {products.map((product: ProductSearchResult, index: number) => {\n const { Price, ItemId, Name, PrimaryImageUrl } = product;\n const price = formatCurrency(Price.toFixed(2), currencyCode);\n const primaryImageSource = generateImageUrl(PrimaryImageUrl ?? '', apiSettings) ?? '';\n const fallBackImg = getFallbackImageUrl(ItemId, apiSettings, props.context.request.app?.config?.OmniChannelMedia) ?? '';\n\n return (\n
\n
\n \n
\n
{ItemId}
\n {highlightSearchTerm(Name ?? '')}\n
\n
\n
\n {price}\n \n
\n
\n );\n })}\n
\n \n );\n};\n\ninterface IProductSelectButton {\n product: ProductSearchResult;\n buttonText: string;\n clickHandler(product: ProductSearchResult): Promise;\n}\n\nconst ProductSelectButton = (props: IProductSelectButton) => {\n const [isBusy, setBusy] = useState(false);\n const { product, buttonText, clickHandler } = props;\n const getClickHandler = React.useCallback(async () => {\n setBusy(!isBusy);\n await clickHandler(product);\n setBusy(!isBusy);\n }, [clickHandler, isBusy, product]);\n\n return (\n \n {buttonText}\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewModel } from '../order-template';\nimport { IOrderTemplateData } from '../order-template.data';\nimport { IOrderTemplateProps } from '../order-template.props.autogenerated';\nimport { AddLineToTemplate } from '.';\n\ninterface IOrderTemplateBulkActionsProps extends IOrderTemplateProps {\n orderTemplateId: string;\n selectedLines: IOrderTemplateLineViewModel[];\n isMinifiedView: boolean;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n telemetryContent?: ITelemetryContent;\n onAddSelectionToBag(): void;\n onRemoveSelection(): void;\n}\n\ninterface IOrderTemplateBulkActionsState {\n isAddDisabled: boolean;\n isRemoveDisabled: boolean;\n}\n\n/**\n * Bulk Order Template line actions.\n */\nexport class OrderTemplateBulkActions extends React.PureComponent {\n public state: IOrderTemplateBulkActionsState = {\n isAddDisabled: true,\n isRemoveDisabled: true\n };\n\n public static getDerivedStateFromProps(\n props: IOrderTemplateBulkActionsProps,\n state: IOrderTemplateBulkActionsState\n ): IOrderTemplateBulkActionsState {\n const selectedLines = props.selectedLines.length;\n let nextState = { ...state };\n nextState = {\n isAddDisabled: selectedLines === 0,\n isRemoveDisabled: selectedLines === 0\n };\n return nextState;\n }\n\n public render(): JSX.Element {\n const {\n addLineModalLinkText,\n searchButtonAriaLabel,\n searchInputAriaLabel,\n searchModalPlaceholderText,\n selectCatalogTitleText,\n selectProductButtonText,\n addItemToTemplateText,\n addLineProductUnitPricePrefix,\n backButtonText,\n decrementButtonAriaLabel,\n incrementButtonAriaLabel,\n quantitySelectLabel,\n addLineProductUnitOfMeasurePrefix,\n notFoundSearchErrorNotice,\n notFoundSearchErrorRedediation,\n searchErrorMessage,\n productDimensionTypeColor,\n productDimensionTypeConfiguration,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n addSelectedToBagButtonText,\n removeSelectedToBagButtonText,\n searchResultsCountVerbage,\n searchResultsCountSubject,\n addToTemplateConfirmation,\n totalPriceLabel,\n progressNotificationText,\n addToTemplateDuplicateError,\n addToTemplateGenericError,\n dimensionMissingError\n } = this.props.resources;\n\n const addLineProps = {\n context: this.props.context,\n telemetryContent: this.props.telemetryContent,\n resources: {\n addLineModalLinkText,\n searchButtonAriaLabel,\n searchInputAriaLabel,\n searchModalPlaceholderText,\n selectCatalogTitleText,\n selectProductButtonText,\n addItemToTemplateText,\n addLineProductUnitPricePrefix,\n backButtonText,\n decrementButtonAriaLabel,\n incrementButtonAriaLabel,\n quantitySelectLabel,\n addLineProductUnitOfMeasurePrefix,\n notFoundSearchErrorNotice,\n notFoundSearchErrorRedediation,\n searchErrorMessage,\n productDimensionTypeColor,\n productDimensionTypeConfiguration,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n searchResultsCountVerbage,\n searchResultsCountSubject,\n addToTemplateConfirmation,\n totalPriceLabel,\n progressNotificationText,\n addToTemplateDuplicateError,\n addToTemplateGenericError,\n dimensionMissingError\n },\n imageSettings: this.props.config.imageSettings,\n orderTemplateId: this.props.orderTemplateId,\n isMultipleCatalogFeatureEnabledInHq: this.props.isMultipleCatalogFeatureEnabledInHq,\n catalogs: this.props.data.catalogs?.result\n };\n\n return (\n <>\n \n \n \n {!this.props.isMinifiedView && addSelectedToBagButtonText}\n \n \n \n {!this.props.isMinifiedView && removeSelectedToBagButtonText}\n \n \n );\n }\n\n private readonly addHandler = (event: React.MouseEvent) => {\n this.setState({\n isAddDisabled: true\n });\n\n this.props.onAddSelectionToBag();\n\n this.setState({\n isAddDisabled: false\n });\n };\n\n private readonly removeHandler = (event: React.MouseEvent) => {\n this.setState({\n isRemoveDisabled: true\n });\n\n this.props.onRemoveSelection();\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n AddOrderTemplateToCartComponent,\n ILinesAddedToCartDialogResources,\n IOrderTemplateNameDialogResources,\n RenameOrderTemplateComponent,\n OrderTemplateNameDialog\n} from '@msdyn365-commerce/components';\nimport { IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport { ProductList } from '@msdyn365-commerce/retail-proxy';\nimport { OrderTemplate, Random } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, ITelemetryContent, Popover } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nexport interface IOrderTemplateActionsData {\n orderTemplate: OrderTemplate;\n}\n\nexport interface IOrderTemplateActionsProps extends IComponentProps {\n context: ICoreContext;\n telemetryContent?: ITelemetryContent;\n handlers: {\n onRemoveTemplate(orderTemplateId: string): void;\n onRenameTemplate(orderTemplate: ProductList): Promise;\n };\n renameOrderTemplateDialogStrings: IOrderTemplateNameDialogResources;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n resources: {\n addTemplateToBagButtonText: string;\n renameTemplateButtonText: string;\n deleteTemplateButtonText: string;\n closeWindowButtonText: string;\n addToCartFailureMessage: string;\n addToCartSuccessMessage: string;\n addToCartProcessMessage: string;\n orderTemplateErrorMessage: string;\n linesAddedToCartDialogResources: ILinesAddedToCartDialogResources;\n };\n}\n\nexport interface IOrderTemplateActionsViewProps {\n addTemplateToBag: React.ReactNode;\n renameTemplate?: React.ReactNode;\n removeTemplate?: React.ReactNode;\n isMultipleCatalogsFeatureEnabled?: boolean;\n actionsSplitButton?: React.ReactNode;\n}\n\n/**\n * Remove Order Action.\n * @param props -Order template action props.\n * @returns Remove order template.\n */\nconst removeOrderActionHandler = (props: IOrderTemplateActionsProps) => () => {\n _removeOrderTemplate(props);\n};\n\nexport const OrderTemplateActionsView = (props: IOrderTemplateActionsProps): IOrderTemplateActionsViewProps => {\n const { resources, isMultipleCatalogFeatureEnabledInHq } = props;\n const { deleteTemplateButtonText } = resources;\n\n return {\n addTemplateToBag: _getOrderTemplateAddToCartDialog(props),\n renameTemplate: !isMultipleCatalogFeatureEnabledInHq && _getOrderTemplateRenameControl(props),\n removeTemplate: !isMultipleCatalogFeatureEnabledInHq && (\n \n ),\n actionsSplitButton: isMultipleCatalogFeatureEnabledInHq && \n };\n};\n\nconst _removeOrderTemplate = (props: IOrderTemplateActionsProps): void => {\n const {\n data: { orderTemplate },\n handlers\n } = props;\n const { onRemoveTemplate } = handlers;\n\n if (onRemoveTemplate) {\n onRemoveTemplate(orderTemplate.productList.Id);\n }\n};\n\nconst _getOrderTemplateAddToCartDialog = (props: IOrderTemplateActionsProps): React.ReactNode => {\n const {\n data: { orderTemplate },\n typeName,\n id,\n context,\n telemetryContent,\n resources,\n isMultipleCatalogFeatureEnabledInHq\n } = props;\n const {\n addTemplateToBagButtonText,\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n orderTemplateErrorMessage,\n linesAddedToCartDialogResources\n } = resources;\n\n const dialogStrings = {\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n orderTemplateErrorMessage,\n linesAddedToCartDialogResources\n };\n\n return (\n \n );\n};\n\nconst _getOrderTemplateRenameControl = (props: IOrderTemplateActionsProps): React.ReactNode => {\n const { renameOrderTemplateDialogStrings, resources, context, handlers } = props;\n return (\n \n );\n};\n\nlet buttonEventReference: HTMLButtonElement | undefined;\nexport const ActionsSplitButton: React.FC = (props: IOrderTemplateActionsProps) => {\n const [isStatementRequestAdminDropdownOpen, setIsStatementRequestAdminDropdownOpen] = useState(false);\n const [renameOrderTemplateDialogOpen, setOrderTemplateNameDialogOpen] = React.useState(false);\n\n const onOrderTemplateNameCancel = () => {\n context.telemetry.debug('Rename of template was canceled.');\n buttonEventReference?.focus();\n };\n\n const onRenameButtonClick = (event: React.MouseEvent) => {\n buttonEventReference = event.target as HTMLButtonElement;\n setOrderTemplateNameDialogOpen(true);\n event.preventDefault();\n };\n const onToggleDropdown1 = () => {\n setIsStatementRequestAdminDropdownOpen(!isStatementRequestAdminDropdownOpen);\n };\n const {\n data: { orderTemplate },\n resources,\n renameOrderTemplateDialogStrings,\n context\n } = props;\n\n const className = 'ms-order-template-action-bar';\n\n const popoverReference = React.createRef();\n const renderModalPopup = (\n \n );\n const requestStatementDropdownString = `request-statement-dropdown-id-${Random.Guid.generateGuid()}`;\n\n return (\n
\n {renderModalPopup}\n \n {'Options'}\n \n \n \n\n \n {'Delete'}\n \n \n
\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ProductPrice, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ArrayExtensions, getFallbackImageUrl, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport React, { useState } from 'react';\n\nimport { IOrderTemplateLineViewModel } from '../order-template';\nimport OrderTemplateQuantity from './common/order-template-quantity';\n\nexport interface IOrderTemplateLineProps extends ProductListLine {\n orderTemplateLine: IOrderTemplateLineViewModel;\n productListLine: ProductListLine;\n price?: ProductPrice;\n context: ICoreContext;\n productUrl: string;\n imageSettings?: IImageSettings;\n telemetry: ITelemetry;\n moduleId: string;\n moduleTypeName: string;\n quantity: number;\n isQuantityDisabledForUpdate?: boolean;\n handlers: {\n onAddToBag(product: SimpleProduct, quantity: number, itemKey: string, catalogId?: number | undefined): void;\n onRemoveItem(line: IOrderTemplateLineViewModel): void;\n onChangeQuantity(orderTemplateLineId: string, quantity: number, props?: IOrderTemplateLineProps): void;\n onSelect(line: IOrderTemplateLineViewModel, isChecked: boolean): void;\n };\n resources: {\n selectOneRowText?: string;\n moreButtonText?: string;\n viewProductDetailsText?: string;\n productDimensionTypeColor: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n originalPriceText: string;\n currentPriceText: string;\n freePriceText: string;\n inputQuantityAriaLabel: string;\n removeFromOrderTemplateLinesText: string;\n addToBagButtonText: string;\n deleteButtonText: string;\n incrementButtonAriaLabel?: string;\n decrementButtonAriaLabel?: string;\n editOrderTemplateLineQuantityError?: string;\n unavailableProductErrorMessage?: string;\n outOfStockProductErrorMessage?: string;\n };\n index: number;\n isMobile: boolean;\n productQuantityView?: React.ReactNode;\n addToBagButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n toggleDetailsDisplayed(props: IOrderTemplateLineProps): void;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n catalogs?: ProductCatalog[];\n error?: string;\n shouldDisable?: boolean;\n}\n\nexport interface IOrderTemplateLineViewProps {\n key?: string;\n productImage: React.ReactNode;\n productPrice?: React.ReactNode;\n addToBagButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n productName?: string;\n productNumber?: React.ReactNode;\n productInfo?: React.ReactNode;\n productLabel?: React.ReactNode;\n productUnitOfMeasure?: React.ReactNode;\n productQuantity?: number;\n productQuantityView?: React.ReactNode;\n productListId?: string;\n selectLine?: React.ReactNode;\n popUp?: JSX.Element;\n extraActionsPopup?: JSX.Element | null | undefined;\n isMobile?: boolean;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n productLineCatalog?: React.ReactNode;\n disabled?: boolean;\n}\n\ninterface IEventHandlerFactory {\n getAddToBag(): (event: React.MouseEvent) => void;\n getRemoveItem(): (event: React.MouseEvent) => void;\n}\n\nconst OrderTemplateLineActions = (props: IOrderTemplateLineProps): IEventHandlerFactory => {\n const { orderTemplateLine, productListLine, quantity, handlers } = props;\n const { LineId, CatalogId } = productListLine;\n const { onAddToBag, onRemoveItem } = handlers;\n\n return {\n getAddToBag: () => (event: React.MouseEvent) => {\n LineId &&\n orderTemplateLine.fullProduct &&\n onAddToBag(orderTemplateLine.fullProduct.ProductDetails, quantity, LineId, CatalogId);\n },\n getRemoveItem: () => (event: React.MouseEvent) => LineId && onRemoveItem(props.orderTemplateLine)\n };\n};\n\ninterface IPopupProps extends IOrderTemplateLineProps {\n addButtonClassName: string;\n removeButtonClassName: string;\n}\n\nconst PopUp = (props: IPopupProps): JSX.Element | null => {\n const { addToBagButtonText, removeFromOrderTemplateLinesText, moreButtonText, viewProductDetailsText } = props.resources;\n const [showMobile, setShowMobile] = useState(false);\n const componentClassName = 'ms-table';\n\n const getViewHandler = () => (event: React.MouseEvent) => {\n props.toggleDetailsDisplayed(props);\n };\n\n const toggle = React.useCallback(() => {\n setShowMobile(!showMobile);\n }, [showMobile]);\n\n return (\n
\n \n {showMobile && (\n
\n \n View\n \n {getActionButton(\n props.isMobile,\n props.removeButtonClassName,\n removeFromOrderTemplateLinesText,\n OrderTemplateLineActions(props).getRemoveItem()\n )}\n {getActionButton(\n props.isMobile,\n props.addButtonClassName,\n addToBagButtonText,\n OrderTemplateLineActions(props).getAddToBag()\n )}\n
\n )}\n
\n );\n};\n\nconst getActionButton = (\n isMobile: boolean,\n className: string,\n buttonText: string,\n clickHandler: (event: React.MouseEvent) => void\n): React.ReactNode => (\n \n);\n\nconst getDesktopActionButton = (\n className: string,\n buttonText: string,\n clickHandler: (event: React.MouseEvent) => void\n): React.ReactNode => (\n \n);\n/**\n * On Select line function.\n * @param orderTemplateLine -Order template line.\n * @param input -Order template line props.\n * @returns Set on select order template.\n */\nconst onSelectLineHandler = (orderTemplateLine: IOrderTemplateLineViewModel, input: IOrderTemplateLineProps) => (\n event: React.ChangeEvent\n) => {\n orderTemplateLine.isChecked = !orderTemplateLine.isChecked;\n\n input.handlers.onSelect(orderTemplateLine, event.target.checked);\n};\n\nexport const OrderTemplateLineView = (input: IOrderTemplateLineProps): IOrderTemplateLineViewProps | null => {\n const {\n orderTemplateLine,\n productListLine,\n price,\n context,\n imageSettings,\n quantity,\n resources,\n isMobile,\n isMultipleCatalogFeatureEnabledInHq\n } = input;\n const product = orderTemplateLine.fullProduct;\n const { LineId, UnitOfMeasure } = productListLine;\n const { removeFromOrderTemplateLinesText, addToBagButtonText, selectOneRowText } = resources;\n if (!product) {\n return null;\n }\n\n const { ItemId, PrimaryImageUrl } = product.ProductDetails;\n const fallbackImage = getFallbackImageUrl(\n ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n );\n const addButtonClassName = input.isMobile ? 'ms-table__row-links-add' : 'ms-order-template-table-line__product-add-button';\n const removeButtonClassName = input.isMobile ? 'ms-table__row-links-delete' : 'ms-order-template-table-line__product-remove-button';\n\n return {\n isMobile,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogFeatureEnabledInHq,\n selectLine: (\n \n ),\n key: LineId!,\n productLineCatalog: isMultipleCatalogFeatureEnabledInHq && renderProductCatalog(input),\n productImage: _renderProductImage(\n 'ms-order-template-table-line__product-image',\n context,\n product.ProductDetails.Name!,\n PrimaryImageUrl,\n fallbackImage,\n imageSettings\n ),\n productInfo: renderProductInfo(input),\n productPrice: price && _renderPrice(input),\n productNumber: product && (\n <>\n
{ItemId}
\n {input.error !== 'NONE' ? (\n
{_renderProductError(input)}
\n ) : (\n undefined\n )}\n \n ),\n productUnitOfMeasure: price ? (\n
{UnitOfMeasure || price.UnitOfMeasure}
\n ) : (\n undefined\n ),\n productListId: LineId!,\n removeButton:\n !isMultipleCatalogFeatureEnabledInHq &&\n getActionButton(\n input.isMobile,\n removeButtonClassName,\n removeFromOrderTemplateLinesText,\n OrderTemplateLineActions(input).getRemoveItem()\n ),\n productQuantityView:
{_generateQuantity(input, LineId!)}
,\n productQuantity: quantity,\n addToBagButton:\n !isMultipleCatalogFeatureEnabledInHq &&\n getActionButton(input.isMobile, addButtonClassName, addToBagButtonText, OrderTemplateLineActions(input).getAddToBag()),\n extraActionsPopup:\n !isMobile && isMultipleCatalogFeatureEnabledInHq ? (\n \n ) : (\n undefined\n ),\n popUp: ,\n disabled: input.shouldDisable\n };\n};\n\nconst ExtraActionsPopup = (props: IPopupProps): JSX.Element | null => {\n const [showActions, setShowActions] = useState(false);\n const toggle = React.useCallback(() => {\n setShowActions(!showActions);\n }, [showActions]);\n\n const className = 'ms-order-template-table-line__extra-actions-cell';\n const actionsContainerClassName = `${className}__actions-container`;\n return (\n
\n
\n );\n};\n\nexport const OrderTemplateMobileLineView = (input: IOrderTemplateLineProps): IOrderTemplateLineViewProps | undefined => {\n const { orderTemplateLine, productListLine, price, context, imageSettings, isMultipleCatalogFeatureEnabledInHq } = input;\n const product = orderTemplateLine.fullProduct;\n const { LineId, UnitOfMeasure } = productListLine;\n if (!product) {\n return;\n }\n const { ItemId, PrimaryImageUrl } = product.ProductDetails;\n const fallbackImage = getFallbackImageUrl(\n ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n );\n\n return {\n productLineCatalog: isMultipleCatalogFeatureEnabledInHq && renderProductCatalog(input),\n productImage: _renderProductImage(\n 'thumbnail',\n context,\n product.ProductDetails.Name!,\n PrimaryImageUrl,\n fallbackImage,\n imageSettings\n ),\n productInfo: renderProductInfo(input),\n productPrice: price && _renderPrice(input),\n productNumber: ItemId,\n productUnitOfMeasure: UnitOfMeasure || price?.UnitOfMeasure,\n productQuantityView: _generateQuantity(input, LineId!)\n };\n};\n\nexport interface IOrderTemplateProductQuantityViewProps {\n ContainerProps: INodeProps;\n input: React.ReactNode;\n}\n\n/**\n * On Change function.\n * @param onChangeQuantity -On change quantity function.\n * @param itemKey -String.\n * @param props -Order template line props.\n * @returns Set change quantity.\n */\nconst onChangeHandler = (\n onChangeQuantity: (orderTemplateLineId: string, quantity: number, props?: IOrderTemplateLineProps | undefined) => void,\n itemKey: string,\n props: IOrderTemplateLineProps\n) => (newValue: number) => {\n if (onChangeQuantity) {\n onChangeQuantity(itemKey, newValue, props);\n }\n};\n\nconst _generateQuantity = (props: IOrderTemplateLineProps, itemKey: string): React.ReactNode => {\n const { handlers, resources, quantity } = props;\n const { onChangeQuantity } = handlers;\n return (\n \n );\n};\n\nexport const _renderProductImage = (\n className: string,\n context: ICoreContext,\n heading: string,\n image?: string,\n fallbackImage?: string,\n imageSettings?: IImageSettings\n): JSX.Element | null => {\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n lg: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n xl: { q: 'w=64&h=64&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n return (\n \n );\n};\n\nexport const renderProductCatalog = (props: IOrderTemplateLineProps) => {\n const catalogId = props.productListLine.CatalogId;\n validateCatalogId(catalogId);\n\n if (!props.context.request.user.isB2b || !catalogId || !ArrayExtensions.hasElements(props.catalogs)) {\n return null;\n }\n\n const catalog = props.catalogs.find(item => item.RecordId === catalogId);\n\n if (!catalog || !catalog.Name) {\n return null;\n }\n\n return
{catalog.Name}
;\n};\n\nconst _renderPrice = (props: IOrderTemplateLineProps): JSX.Element | null => {\n const { price, context, moduleId, moduleTypeName, resources } = props;\n\n if (price) {\n return (\n \n );\n }\n return null;\n};\n\nconst _renderProductDimensions = (props: IOrderTemplateLineProps): (string | undefined)[] => {\n const { orderTemplateLine } = props;\n\n if (!orderTemplateLine.fullProduct || !orderTemplateLine.fullProduct.ProductDetails.Dimensions) {\n return [];\n }\n\n return orderTemplateLine.fullProduct.ProductDetails.Dimensions.map(dimension => {\n if (!dimension.DimensionValue || !dimension.DimensionValue.Value) {\n return undefined;\n }\n\n return dimension.DimensionValue.Value;\n });\n};\n\nconst _renderProductError = (props: IOrderTemplateLineProps) => {\n const { error, resources } = props;\n\n if (!error) {\n return '';\n }\n\n const errorMessages = {\n OOS: resources.outOfStockProductErrorMessage,\n UNASSORTED: resources.unavailableProductErrorMessage,\n NONE: ''\n };\n\n return errorMessages[error];\n};\n\nexport const renderProductInfo = (props: IOrderTemplateLineProps): React.ReactNode | undefined => {\n const { orderTemplateLine, productUrl } = props;\n const name = orderTemplateLine.fullProduct?.ProductDetails.Name;\n\n const dimensions = _renderProductDimensions(props);\n if (!orderTemplateLine.fullProduct) {\n return [];\n }\n\n const productName = productUrl ? (\n \n {name}\n \n ) : (\n
{name}
\n );\n\n const dimensionsLine: string = dimensions.join(', ');\n\n return (\n
\n
{productName}
\n
{dimensionsLine}
\n
\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { orderTemplateLinesStatus } from '../order-template';\n\nexport interface IOrderTemplateLinesStatusMessageProps {\n className?: string;\n errorType: orderTemplateLinesStatus;\n text?: string;\n}\n\nexport const OrderTemplateLinesStatusMessage: React.FC = ({ className, errorType, text }) => {\n switch (errorType) {\n case 'EMPTY':\n return

{text}

;\n case 'FAILED':\n return

{text}

;\n case 'LOADING':\n default:\n return

{text}

;\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewModel } from '../order-template';\n\nexport interface IOrderTemplateTableHeadingProps {\n selectAllRowsText?: string;\n productNumber: string;\n productName: string;\n productUnitPrice: string;\n productUOM: string;\n productQuantity: string;\n productActions: string;\n lines: IOrderTemplateLineViewModel[];\n isMobile: boolean;\n clickHandler(isChecked: boolean): void;\n productImage?: string;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n productLineCatalogName?: string;\n}\n\n/**\n * Order Template's table state.\n */\nexport interface IOrderTemplateTableHeadingState {\n isChecked: boolean;\n}\n\nexport interface IOrderTemplateTableShortHeading {\n productNumber: string;\n productActions: string;\n}\n\n/**\n * Order Template's table heading.\n */\nexport class OrderTemplateTableHeading extends React.PureComponent {\n public state: IOrderTemplateTableHeadingState = {\n isChecked: false\n };\n\n private readonly componentClassName: string = 'ms-table';\n\n public static getDerivedStateFromProps(\n props: IOrderTemplateTableHeadingProps,\n state: IOrderTemplateTableHeadingState\n ): IOrderTemplateTableHeadingState {\n const checkedLines = props.lines.filter(line => !line.isChecked).length;\n let nextState = { ...state };\n nextState = { isChecked: checkedLines === 0 };\n return nextState;\n }\n\n public getOnChange = () => (event: React.ChangeEvent) => {\n this.setState(\n {\n isChecked: this.state.isChecked\n },\n () => {\n this.props.clickHandler(!this.state.isChecked);\n }\n );\n };\n\n public render(): JSX.Element {\n return (\n \n \n \n \n \n {!this.props.isMobile && this.props.isMultipleCatalogFeatureEnabledInHq ? (\n {this.props.productLineCatalogName}\n ) : null}\n {!this.props.isMobile ? {this.props.productImage} : null}\n {this.props.productNumber}\n {!this.props.isMobile ? {this.props.productName} : null}\n {!this.props.isMobile ? {this.props.productUnitPrice} : null}\n {!this.props.isMobile ? {this.props.productUOM} : null}\n {!this.props.isMobile ? {this.props.productQuantity} : null}\n {!this.props.isMobile ? {this.props.productActions} : }\n \n \n );\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IItemAddedToCartDialogData,\n IItemAddedToCartDialogResources,\n ILinesAddedToCartDialogResources,\n IOrderTemplateNameDialogResources,\n ItemAddedToCartDialog\n} from '@msdyn365-commerce/components';\nimport MsDyn365, { AsyncResult, getCatalogId, getUrlSync, ICoreContext, IRequestContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult } from '@msdyn365-commerce/global-state';\nimport { ProductList, ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport {\n deleteAsync,\n removeProductListLinesAsync,\n updateProductListLinesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport { FeatureState, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n ArrayExtensions,\n createGetFeatureStateInput,\n getFeatureState,\n getPriceForSelectedVariant,\n getProductUrlSync,\n ObjectExtensions,\n OrderTemplate,\n OrderTemplateLine,\n PriceForSelectedVariantInput,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n getTelemetryObject,\n Heading,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n UncontrolledPagination\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport debounce from 'lodash/debounce';\nimport { action, computed, observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n IOrderTemplateActionsProps,\n IOrderTemplateActionsViewProps,\n IOrderTemplateLineProps,\n IOrderTemplateLineViewProps,\n IOrderTemplateTableHeadingProps,\n OrderTemplateActionsView,\n OrderTemplateLinesStatusMessage,\n OrderTemplateLineView,\n OrderTemplateMobileLineView,\n OrderTemplateTableHeading\n} from '../..';\nimport { ActiveOrderTemplateLinesInput } from './actions/get-order-template';\nimport { OrderTemplateBulkActions } from './components/bulk-actions';\nimport { IOrderTemplateData } from './order-template.data';\nimport { IOrderTemplateProps, IOrderTemplateResources } from './order-template.props.autogenerated';\nimport Spinner from './components/add-line/spinner';\n\nexport interface IOrderTemplateLineActionMessageState {\n itemKey: string;\n userMessage: string;\n statusCssString: string;\n messageGlyph: string;\n isOpen: boolean;\n isItemAddedToOrderTemplateOpen: boolean;\n isConfirmAddSelectionToBagModalOpen: boolean;\n itemAddedToCartDialogData?: IItemAddedToCartDialogData;\n productSelection: IOrderTemplateLineViewModel[];\n isDetailsDisplayed: boolean;\n detailedProductView?: IOrderTemplateLineViewProps;\n isQuantityDisabledForUpdate?: boolean;\n}\n\nexport type orderTemplateLinesStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\ntype GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface IOrderTemplateViewProps extends IOrderTemplateProps {\n OrderTemplateLines: IModuleProps;\n callbacks?: IOrderTemplateLinesCallbacks;\n status?: orderTemplateLinesStatus;\n statusMessage?: React.ReactNode;\n heading?: React.ReactNode;\n OrderTemplateActions?: INodeProps;\n ProductsTable?: INodeProps;\n ProductsTableRow?: INodeProps;\n ProductsTableHeading?: React.ReactNode;\n ProductDetails?: INodeProps;\n orderLines?: IOrderTemplateLineViewProps[];\n productListLines?: ProductListLine[];\n productsStatusMessage?: React.ReactNode;\n orderActions?: IOrderTemplateActionsViewProps | null;\n resources: IOrderTemplateResources;\n pagination?: React.ReactNode;\n itemAddedToCartDialog?: React.ReactNode;\n bulkOrderLineActions?: React.ReactNode;\n isDetailsDisplayed?: boolean;\n detailedProduct?: IOrderTemplateLineProps;\n detailedProductView?: IOrderTemplateLineViewProps;\n productQuantityView?: React.ReactNode;\n addButton?: React.ReactNode;\n isMobile?: boolean;\n toggleDetailsDisplayed?(props: IOrderTemplateLineProps | undefined): void;\n}\n\nexport interface IOrderTemplateLinesCallbacks {\n updateQuantity(itemKey: string, quantity: number): void;\n}\n\nexport interface IOrderTemplateLineViewModel extends OrderTemplateLine {\n isChecked: boolean;\n productQuantityView: React.ReactNode;\n}\n\n/**\n *\n * OrderTemplateLines component.\n * @extends {React.PureComponent, IOrderTemplateLineActionMessageState>}\n */\n@observer\nclass OrderTemplateLines extends React.Component, IOrderTemplateLineActionMessageState> {\n private readonly className: string;\n\n private readonly telemetryContent?: ITelemetryContent;\n\n @observable\n private _viewport: GridSize;\n\n @computed get isMobile(): boolean {\n return this._viewport === 'xs' || this._viewport === 'sm';\n }\n\n constructor(props: IOrderTemplateProps, state: IOrderTemplateLineActionMessageState) {\n super(props);\n this.className = 'ms-order-template';\n this._viewport =\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\n this._updateViewport = this._updateViewport.bind(this);\n\n this.state = {\n itemKey: '',\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false,\n isItemAddedToOrderTemplateOpen: false,\n isConfirmAddSelectionToBagModalOpen: false,\n productSelection: [],\n isDetailsDisplayed: false,\n isQuantityDisabledForUpdate: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this._updateViewport();\n\n if (MsDyn365.isBrowser && !this.props.context.request.user.isAuthenticated && !this.props.context.request.params.isEditor) {\n window.location.assign(this.props.context.request.user.signInUrl || '/');\n }\n }\n\n @action\n public async componentDidMount(): Promise {\n this.setState({});\n const orderTemplate = await this.props.data.orderTemplate;\n this.props.config.heading!.text = orderTemplate?.productList.Name || '';\n this.setState({\n productSelection: orderTemplate?.orderTemplateLines as IOrderTemplateLineViewModel[]\n });\n\n if (MsDyn365.isBrowser) {\n window.addEventListener('resize', this._updateViewport);\n this._updateViewport();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('resize', this._updateViewport);\n }\n }\n\n public shouldComponentUpdate(\n nextProps: IOrderTemplateProps,\n nextState: IOrderTemplateLineActionMessageState\n ): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { heading, className } = this.props.config;\n const { emptyOrderTemplateLinesText, errorGettingOrderTemplateLines } = this.props.resources;\n const { orderTemplate, cart } = this.props.data;\n if (cart.status === 'LOADING' || ObjectExtensions.isNullOrUndefined(orderTemplate) || orderTemplate.status === 'LOADING') {\n const errorProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(this.className, className)\n },\n status: 'LOADING',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources\n };\n return this.props.renderView(errorProps);\n }\n\n if (cart.status === 'FAILED' || orderTemplate.status === 'FAILED') {\n const errorProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'FAILED',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources\n };\n\n return this.props.renderView(errorProps);\n }\n\n const orderTemplateResult = orderTemplate && orderTemplate.result;\n const orderTemplateLines = orderTemplateResult && orderTemplateResult.orderTemplateLines;\n\n if (!orderTemplateResult || !orderTemplateLines || orderTemplateLines.length === 0) {\n if (orderTemplateResult && !this._isFirstPage() && MsDyn365.isBrowser) {\n window.location.href = this._getOrderTemplatePageUrl();\n return null;\n }\n\n const emptyViewProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'EMPTY',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources,\n orderActions:\n orderTemplateResult &&\n this._renderOrderTemplateActions(orderTemplateResult, this._isChannelMultipleCatalogsFeatureEnabled()),\n bulkOrderLineActions: orderTemplateResult && this._getOrderTemplateLineActions(orderTemplateResult.productList.Id),\n OrderTemplateActions: {\n className: `${this.className}-action-bar`,\n tag: 'div'\n }\n };\n\n return this.props.renderView(emptyViewProps);\n }\n\n const viewProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'SUCCESS',\n productsStatusMessage: this.state.isOpen && (\n
\n \n {this.state.userMessage}\n \n
\n ),\n heading: heading && ,\n OrderTemplateActions: {\n className: `${this.className}-action-bar`,\n tag: 'div'\n },\n ProductsTable: {\n className: `${this.className}__table`,\n tag: 'table',\n role: 'grid'\n },\n ProductsTableRow: {\n className: `${this.className}-table-line`,\n tag: 'tr'\n },\n ProductsTableHeading: this._renderProductListHeader(this.props.resources),\n ProductDetails: {\n className: `${this.className}-table-line__link`,\n tag: 'a'\n },\n orderLines: this._renderProductList(),\n callbacks: { updateQuantity: debounce(this._changeQuantity, 2000) },\n orderActions: this._renderOrderTemplateActions(orderTemplateResult, this._isChannelMultipleCatalogsFeatureEnabled()),\n pagination: this._renderPagination(),\n itemAddedToCartDialog: this._renderItemAddedToCartDialog(),\n bulkOrderLineActions: this._getOrderTemplateLineActions(orderTemplateResult.productList.Id),\n isDetailsDisplayed: this.state.isDetailsDisplayed,\n toggleDetailsDisplayed: this._toggleDetailsDisplayed,\n detailedProductView: this.state.detailedProductView,\n isMobile: this.isMobile\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public onSelect(line: IOrderTemplateLineViewModel, isChecked: boolean): void {\n line.isChecked = isChecked;\n\n const updated =\n this.state.productSelection.map(product => {\n if (product.fullProduct?.ProductDetails.ItemId === line.fullProduct?.ProductDetails.ItemId) {\n line.isChecked = isChecked;\n }\n return product;\n }) || [];\n\n this.setState({\n productSelection: updated\n });\n }\n\n public onSelectAll(isChecked: boolean): void {\n const updated =\n this.state.productSelection.map(line => {\n line.isChecked = isChecked;\n return line;\n }) || [];\n\n this.setState({\n productSelection: updated\n });\n }\n\n private _renderProductListHeader(resources: IOrderTemplateResources): React.ReactNode {\n const {\n productImage,\n productNumberText,\n productText,\n productUnitPriceText,\n productUOMText,\n productQuantityText,\n productActionsText,\n selectAllRowsText,\n productLineCatalogName\n } = resources;\n const headers: IOrderTemplateTableHeadingProps = {\n productImage: productImage,\n productNumber: productNumberText,\n productName: productText,\n productUnitPrice: productUnitPriceText,\n productUOM: productUOMText,\n productQuantity: productQuantityText,\n productActions: productActionsText,\n selectAllRowsText,\n lines: this.state.productSelection,\n isMobile: this.isMobile,\n clickHandler: (isChecked: boolean) => {\n this.onSelectAll(isChecked);\n },\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled(),\n productLineCatalogName: productLineCatalogName\n };\n\n return ;\n }\n\n private _getOrderTemplateLineActions(orderTemplateId: string): React.ReactNode {\n return (\n line.isChecked)}\n onAddSelectionToBag={this._onAddSelectionToBag}\n onRemoveSelection={this._onRemoveSelection}\n isMinifiedView={this.isMobile}\n isMultipleCatalogFeatureEnabledInHq={this._isChannelMultipleCatalogsFeatureEnabled()}\n telemetryContent={this.telemetryContent}\n />\n );\n }\n\n private _generateLinesAddedToCartDialogResources(): ILinesAddedToCartDialogResources {\n return {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n linesAddedToCartHeaderItemsOneText: this.props.resources.linesAddedToCartHeaderItemsOneText,\n linesAddedToCartHeaderLinesOneText: this.props.resources.linesAddedToCartHeaderLinesOneText,\n linesAddedToCartHeaderLinesFormatText: this.props.resources.linesAddedToCartHeaderLinesFormatText,\n linesAddedToCartHeaderMessageText: this.props.resources.linesAddedToCartHeaderMessageText\n };\n }\n\n private _generateItemAddedToCartDialogResources(): IItemAddedToCartDialogResources {\n return {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n itemAddedToCartHeaderItemOneText: this.props.resources.itemAddedToCartHeaderItemOneText,\n itemAddedToCartHeaderItemFormatText: this.props.resources.itemAddedToCartHeaderItemFormatText,\n itemAddedToCartHeaderMessageText: this.props.resources.itemAddedToCartHeaderMessageText,\n freePriceText: this.props.resources.freePriceText,\n originalPriceText: this.props.resources.originalPriceText,\n currentPriceText: this.props.resources.currentPriceText\n };\n }\n\n private readonly _isChannelMultipleCatalogsFeatureEnabled = (): boolean => {\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (this.props.data.featureState) {\n isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState.result?.find(\n feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n return isMultipleCatalogFeatureEnabledInHq;\n };\n\n private readonly _onRemoveSelection = (): void => {\n const { context, resources } = this.props;\n const { telemetry } = context;\n const { removeSelectedFailureMessage, removeSelectedSuccessMessage } = resources;\n const lines = this.state.productSelection;\n const productListLines = lines && lines.length && lines.filter(line => line.isChecked).map(line => line.productListLine);\n\n if (productListLines && productListLines.length > 0) {\n const productListId = productListLines[0].ProductListId;\n\n const maxWaitTimeInMilliSeconds: number = 1000;\n removeProductListLinesAsync({ callerContext: context.actionContext }, productListId!, productListLines)\n .then(async () => {\n this.setState({\n userMessage: removeSelectedSuccessMessage,\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: true\n });\n // eslint-disable-next-line no-promise-executor-return -- fix\n await new Promise(resolve => setTimeout(resolve, maxWaitTimeInMilliSeconds));\n window.location.reload();\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable remove items from the order template lines');\n telemetry.error(error);\n this.setState({\n userMessage: removeSelectedFailureMessage,\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: true\n });\n });\n }\n };\n\n private readonly _getOrderTemplatePageUrl = (): string => {\n let url = getUrlSync('ordertemplate', this.props.context.actionContext) || '';\n url = url.includes('?') ? url.substr(0, url.indexOf('?')) : url;\n if (this.props.data.orderTemplate?.result?.productList.Id) {\n return `${url}?id=${this.props.data.orderTemplate.result.productList.Id}`;\n }\n return '';\n };\n\n private readonly _onAddSelectionToBag = async (): Promise => {\n const lines = this.state.productSelection;\n const selectedLines = lines.filter(line => line.isChecked);\n if (selectedLines.length > 0) {\n for (const productLine of selectedLines) {\n const itemKey = productLine.fullProduct?.ProductDetails.ItemId ?? '';\n const product = productLine.fullProduct?.ProductDetails ?? {\n RecordId: 0,\n ProductTypeValue: 0,\n BasePrice: 0,\n Price: 0,\n AdjustedPrice: 0\n };\n const quantity = productLine.productListLine.Quantity ?? 0;\n if (this._isChannelMultipleCatalogsFeatureEnabled()) {\n const catalogId = productLine.productListLine.CatalogId;\n await this._addItemToBag(product, quantity, itemKey, catalogId);\n } else {\n await this._addItemToBag(product, quantity, itemKey);\n }\n }\n }\n return Promise.resolve(void 0);\n };\n\n private _renderOrderTemplateActions(\n orderTemplate: OrderTemplate,\n isMultipleCatalogFeatureEnabledInHq: boolean\n ): IOrderTemplateActionsViewProps {\n const { id, typeName, context, resources } = this.props;\n const {\n addTemplateToBagButtonText,\n renameTemplateButtonText,\n deleteTemplateButtonText,\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n orderTemplateErrorMessage\n } = resources;\n\n const orderTemplateActions: IOrderTemplateActionsProps = {\n data: { orderTemplate },\n id,\n typeName,\n context,\n telemetryContent: this.telemetryContent,\n handlers: {\n onRenameTemplate: this._renameTemplate,\n onRemoveTemplate: this._removeTemplate\n },\n isMultipleCatalogFeatureEnabledInHq,\n renameOrderTemplateDialogStrings: this._generateOrderTemplateNameDialogResources(resources),\n resources: {\n addTemplateToBagButtonText,\n renameTemplateButtonText,\n deleteTemplateButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n closeWindowButtonText,\n orderTemplateErrorMessage,\n linesAddedToCartDialogResources: this._generateLinesAddedToCartDialogResources()\n }\n };\n\n return OrderTemplateActionsView(orderTemplateActions);\n }\n\n private _generateOrderTemplateNameDialogResources(resources: IOrderTemplateResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.renameOrderTemplateTitleText,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateTitle,\n orderTemplateDescription: '',\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n orderTemplateButtonLabel: resources.renameOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelBtnLabel\n };\n }\n\n private readonly _getCurrentUrl = (reqContext: IRequestContext): URL => {\n if (MsDyn365.isBrowser) {\n return new URL(window.location.href);\n }\n return new URL(reqContext.url.requestUrl.href);\n };\n\n /**\n * On close handler.\n */\n private readonly onCloseHandler = () => {\n this.setState({\n itemKey: this.state.itemKey,\n userMessage: this.state.userMessage,\n statusCssString: this.state.statusCssString,\n messageGlyph: this.state.messageGlyph,\n isOpen: this.state.isOpen,\n isItemAddedToOrderTemplateOpen: false\n });\n };\n\n private readonly _renderItemAddedToCartDialog = (): React.ReactNode | null => {\n if (!this.state.itemAddedToCartDialogData) {\n return null;\n }\n const isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState?.result?.find(feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature')\n ?.IsEnabled || false;\n\n return (\n \n );\n };\n\n private _isFirstPage(): boolean {\n return this._getCurrentPageNumber() === 0;\n }\n\n private _getCurrentPageNumber(): number {\n const itemsPerPage = this.props.config.itemsPerPage || 50;\n return (this.props.context.request.query && +this.props.context.request.query.skip / itemsPerPage) || 0;\n }\n\n private readonly _renderPagination = (): React.ReactNode | null => {\n const { config, context, data, resources } = this.props;\n const orderTemplate = data && data.orderTemplate && data.orderTemplate.result;\n if (!orderTemplate) {\n return null;\n }\n\n const fullUrl = this._getCurrentUrl(context.request);\n const itemsPerPage = config.itemsPerPage || 50;\n const currentPageNumber = this._getCurrentPageNumber();\n const skipCount = currentPageNumber * itemsPerPage;\n const totalItems = orderTemplate && orderTemplate.totalLines;\n const previousText = resources.flipperPrevious;\n const nextText = resources.flipperNext;\n\n if (totalItems <= itemsPerPage) {\n return null;\n }\n\n return (\n \n );\n };\n\n private _renderProductList(): IOrderTemplateLineViewProps[] {\n const {\n selectOneRowText,\n moreButtonText,\n viewProductDetailsText,\n priceFree,\n originalPriceText,\n currentPriceText,\n addOrderTemplateItemToBagButtonText,\n removeItemFromOrderTemplateButtonText,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n inputQuantityAriaLabel,\n deleteButtonText,\n incrementButtonAriaLabel,\n decrementButtonAriaLabel,\n unavailableProductErrorMessage,\n outOfStockProductErrorMessage\n } = this.props.resources;\n\n const { context, telemetry, data } = this.props;\n const { catalogs } = data;\n const { imageSettings } = this.props.config;\n\n return this.state.productSelection.map((line, index) => {\n const currentProductProps: IOrderTemplateLineProps = {\n orderTemplateLine: line,\n productListLine: line.productListLine,\n price: line.fullProduct?.ProductPrice,\n error: line.error,\n shouldDisable: line.shouldDisable,\n context,\n isQuantityDisabledForUpdate: this.state.isQuantityDisabledForUpdate,\n productUrl: line.fullProduct\n ? this._updateProductUrlCatalog(line.fullProduct.ProductDetails, context, line.productListLine.CatalogId)\n : '',\n imageSettings,\n telemetry,\n moduleId: this.props.id,\n moduleTypeName: this.props.typeName,\n quantity: line.productListLine.Quantity!,\n handlers: {\n onAddToBag: this._addItemToBag,\n onRemoveItem: this._removeItemFromOrderTemplateLines,\n onChangeQuantity: this._changeQuantity,\n onSelect: this.onSelect.bind(this)\n },\n resources: {\n selectOneRowText,\n moreButtonText,\n viewProductDetailsText,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n freePriceText: priceFree,\n originalPriceText,\n currentPriceText,\n inputQuantityAriaLabel,\n removeFromOrderTemplateLinesText: removeItemFromOrderTemplateButtonText,\n addToBagButtonText: addOrderTemplateItemToBagButtonText,\n deleteButtonText,\n incrementButtonAriaLabel,\n decrementButtonAriaLabel,\n unavailableProductErrorMessage,\n outOfStockProductErrorMessage\n },\n index,\n isMobile: this.isMobile,\n toggleDetailsDisplayed: this._toggleDetailsDisplayed,\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled(),\n catalogs: catalogs && catalogs.result\n };\n\n return OrderTemplateLineView(currentProductProps)!;\n });\n }\n\n private readonly _toggleDetailsDisplayed = (props: IOrderTemplateLineProps): void => {\n let state = {\n isDetailsDisplayed: !this.state.isDetailsDisplayed\n };\n if (props) {\n state = {\n ...state,\n ...{\n detailedProductView: OrderTemplateMobileLineView(props)\n }\n };\n }\n this.setState(state);\n };\n\n // This method is used to update the product url with the catalogId\n private readonly _updateProductUrlCatalog = (\n productDetails: SimpleProduct,\n context: ICoreContext,\n catalogId: number | undefined\n ): string => {\n const productUrl = getProductUrlSync(productDetails, context.actionContext, undefined);\n if (!StringExtensions.isNullOrWhitespace(productUrl) && catalogId !== undefined) {\n const absoluteUrl = new URL(productUrl, window.location.href);\n absoluteUrl.searchParams.set('catalogid', `${catalogId ?? 0}`);\n return absoluteUrl.href;\n }\n\n return productUrl;\n };\n\n // Dismiss alert when addingToCart/removeItem\n private readonly _onDismiss = () => {\n this.setState({\n isOpen: false\n });\n };\n\n private readonly _changeQuantity = async (itemKey: string, quantity: number, props?: IOrderTemplateLineProps) => {\n const { context, data, telemetry, config, resources } = this.props;\n const { orderTemplate } = data;\n\n if (context) {\n if (orderTemplate?.result) {\n const orderTemplateLinesData = orderTemplate.result.orderTemplateLines;\n if (orderTemplateLinesData) {\n const orderLineIndex = orderTemplateLinesData.findIndex(\n (lines: OrderTemplateLine) => lines.productListLine.LineId === itemKey\n );\n const newProductListLine = { ...orderTemplateLinesData[orderLineIndex] };\n if (orderTemplateLinesData[orderLineIndex].productListLine.Quantity === quantity) {\n return;\n }\n const prevQuantity = newProductListLine.productListLine.Quantity;\n newProductListLine.productListLine.Quantity = quantity;\n const { fullProduct, ...line } = newProductListLine;\n // Update mobile modal\n if (props) {\n props.quantity = quantity;\n this.setState({\n detailedProductView: OrderTemplateMobileLineView(props)\n });\n }\n\n this.setState({\n isQuantityDisabledForUpdate: true\n });\n\n updateProductListLinesAsync({ callerContext: context.actionContext }, orderTemplate.result.productList.Id, [\n line.productListLine\n ])\n .then(list => {\n this.setState({\n itemKey,\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isQuantityDisabledForUpdate: false,\n isOpen: false\n });\n if (list) {\n const newLine = list.find(lines => lines.LineId === itemKey);\n orderTemplateLinesData[orderLineIndex].productListLine = newLine!;\n const updatedLines = [...orderTemplateLinesData];\n updatedLines[orderLineIndex] = { fullProduct, productListLine: newLine! };\n const updatedOrderTemplate = { ...orderTemplate.result, ProductListLines: updatedLines };\n context.actionContext.update(\n new ActiveOrderTemplateLinesInput(context.actionContext.requestContext, config),\n updatedOrderTemplate\n );\n }\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable to update product quantity.');\n telemetry.error(error);\n const userMessage = resources.editOrderTemplateLineQuantityError;\n if (props) {\n props && (props.productListLine.Quantity = prevQuantity);\n this.setState({\n itemKey,\n userMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isQuantityDisabledForUpdate: false,\n isOpen: true,\n detailedProductView: OrderTemplateMobileLineView(props)\n });\n } else {\n newProductListLine.productListLine.Quantity = prevQuantity;\n this.setState({\n itemKey,\n userMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isQuantityDisabledForUpdate: false,\n isOpen: true\n });\n }\n });\n }\n }\n }\n };\n\n private readonly _addItemToBag = async (\n product: SimpleProduct,\n quantity: number,\n itemKey: string,\n catalogId?: number | undefined\n ): Promise => {\n const { context, data, resources, telemetry } = this.props;\n const { cart } = data;\n const { maxQuantityLimitText, addedToCartFailureMessage } = resources;\n\n if (context) {\n if (cart.result) {\n const addProductToCartInput = {\n product,\n count: quantity,\n catalogId\n };\n\n await cart.result\n .addProductToCart(addProductToCartInput)\n .then((result: ICartActionResult) => {\n if (result.status === 'SUCCESS') {\n return getPriceForSelectedVariant(\n new PriceForSelectedVariantInput(\n product.RecordId,\n this.props.context.actionContext.requestContext.apiSettings.channelId,\n product\n ),\n this.props.context.actionContext\n ).then(priceResult => {\n if (!priceResult) {\n return AsyncResult.reject('Failed to retrieve product price');\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- read config file.\n const isMiniCart = context.app.config.addToCartBehavior === 'showMiniCart';\n this.setState({\n itemKey,\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false,\n isItemAddedToOrderTemplateOpen: !isMiniCart,\n itemAddedToCartDialogData: {\n product,\n productPrice: priceResult,\n quantity\n },\n isDetailsDisplayed: false\n });\n return AsyncResult.resolve();\n });\n } else if (result.substatus === 'MAXQUANTITY') {\n if (context.app.config.maxQuantityForCartLineItem) {\n const cartLineQuantity: number | undefined =\n cart.result?.cart.CartLines &&\n cart.result?.cart.CartLines.find(result => result.ProductId === product.RecordId)?.Quantity;\n const defaultMessage = `You can only add ${context.app.config.maxQuantityForCartLineItem} of this item to your shopping bag`;\n this.setState({\n itemKey,\n userMessage:\n cartLineQuantity !== undefined\n ? maxQuantityLimitText\n .replace('{curQuantity}', cartLineQuantity.toString())\n .replace('{maxQuantity}', context.app.config.maxQuantityForCartLineItem.toString()) ||\n defaultMessage\n : defaultMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n } else {\n const defaultMessage = `Max quantity for cart line item is undefined. Please define in configuration settings.`;\n this.setState({\n itemKey,\n userMessage: defaultMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n }\n }\n telemetry.debug('[order-template-lines] Unable to Update Cart Line from the order template lines');\n this.setState({\n itemKey,\n userMessage: addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n })\n .catch((error: Error) => {\n telemetry.warning(error.message);\n telemetry.debug('[order-template-lines] Error trying to Update Cart Line from the order template lines');\n this.setState({\n itemKey,\n userMessage: addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n });\n }\n }\n };\n\n private readonly _removeItemFromOrderTemplateLines = async (line: IOrderTemplateLineViewModel) => {\n const { context, data, telemetry } = this.props;\n const { orderTemplate } = data;\n\n if (context && context.actionContext) {\n const maxWaitTimeInMilliSeconds: number = 1000;\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplate?.result && line) {\n const featureStates = await getFeatureState(createGetFeatureStateInput(context.actionContext), context.actionContext);\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (ArrayExtensions.hasElements(featureStates)) {\n isMultipleCatalogFeatureEnabledInHq =\n featureStates.find(\n (featureState: FeatureState) => featureState.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n const catalogId = getCatalogId(context.actionContext.requestContext);\n if (isMultipleCatalogFeatureEnabledInHq) {\n line.productListLine.CatalogId = catalogId;\n }\n removeProductListLinesAsync({ callerContext: context.actionContext }, line.productListLine.ProductListId!, [\n line.productListLine\n ])\n .then(async () => {\n // eslint-disable-next-line no-promise-executor-return -- fix\n await new Promise(resolve => setTimeout(resolve, maxWaitTimeInMilliSeconds));\n window.location.reload();\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable remove items from the order template lines');\n telemetry.error(error);\n });\n } else {\n telemetry.warning(\n '[order-template-lines] Unable remove items from the order template lines user token or lineItemID was not found'\n );\n }\n }\n };\n\n private readonly _renameTemplate = async (_template: ProductList): Promise => {\n window.location.reload();\n return Promise.resolve();\n };\n\n private readonly _removeTemplate = () => {\n const { context, data, telemetry, resources } = this.props;\n const { orderTemplate } = data;\n\n if (context && context.actionContext) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplate && orderTemplate.result) {\n deleteAsync({ callerContext: context.actionContext }, orderTemplate.result.productList)\n .then()\n .catch((error: string) => {\n telemetry.warning('[order-template] Unable to delete order template.');\n telemetry.error(error);\n this.setState({\n itemKey: orderTemplate.result?.productList.Id || '',\n userMessage: resources.deleteOrderTemplateFailedText,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n });\n const newLink = getUrlSync('ordertemplatelist', this.props.context.actionContext);\n if (newLink) {\n window.location.assign(newLink);\n }\n } else {\n telemetry.warning('[order-template] Failed to delete order template. Order template was not found');\n }\n } else {\n telemetry.warning('[order-template] Failed to delete order template.');\n }\n };\n\n private _updateViewport(): void {\n this._viewport = this._getViewport();\n }\n\n private readonly _getViewport = (): GridSize => {\n const { context } = this.props;\n\n // Always render in mobile viewport on a mobile device\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\n return 'xs';\n }\n\n if (MsDyn365.isBrowser && window.innerWidth) {\n const gridSettings = context.request.gridSettings;\n if (gridSettings) {\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\n return 'xs';\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\n return 'sm';\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\n return 'md';\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\n return 'lg';\n }\n return 'xl';\n }\n }\n\n return 'xs';\n };\n\n /**\n * Renders a Pagination previous text.\n * @param paginationPreviousText - Pagination previous text from resources.\n * @returns Previous text and flipper icon.\n */\n private readonly _renderPrev = (paginationPreviousText: string) => {\n return (\n
\n
\n );\n };\n\n /**\n * Renders a Pagination next text.\n * @param paginationNextText - Pagination next text from resources.\n * @returns Next text and flipper icon.\n */\n private readonly _renderNext = (paginationNextText: string) => {\n return (\n
\n {paginationNextText}\n
\n );\n };\n}\n\nexport default OrderTemplateLines;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, INodeProps, Modal, ModalBody, ModalFooter, ModalHeader, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewProps } from './components';\nimport { IOrderTemplateViewProps } from './order-template';\n\nconst OrderTemplateLinesView: React.FC = (props: IOrderTemplateViewProps) => {\n const {\n OrderTemplateLines,\n status,\n statusMessage,\n heading,\n ProductsTable,\n ProductsTableHeading,\n orderLines,\n ProductsTableRow,\n productsStatusMessage,\n OrderTemplateActions,\n orderActions,\n pagination,\n itemAddedToCartDialog,\n bulkOrderLineActions,\n isDetailsDisplayed,\n detailedProductView,\n toggleDetailsDisplayed,\n resources: {\n cancelBtnLabel,\n productNumberText,\n productText,\n productUnitPriceText,\n productUOMText,\n productQuantityText,\n productLineCatalogName\n }\n } = props;\n\n const toggleDetails = React.useCallback(() => {\n toggleDetailsDisplayed && toggleDetailsDisplayed(undefined);\n }, [toggleDetailsDisplayed]);\n\n return (\n \n {heading}\n {OrderTemplateActions && (\n \n {orderActions?.addTemplateToBag}\n {orderActions?.renameTemplate}\n {orderActions?.removeTemplate}\n {orderActions?.actionsSplitButton}\n {!isDetailsDisplayed && productsStatusMessage}\n \n )}\n {bulkOrderLineActions}\n {status !== 'SUCCESS' && statusMessage}\n {ProductsTable && orderLines && orderLines.length > 0 && (\n \n \n {ProductsTableHeading}\n \n {orderLines &&\n orderLines.map(product => {\n return _renderItem(product, productQuantityText, ProductsTableRow);\n })}\n \n \n {pagination}\n \n )}\n {itemAddedToCartDialog}\n \n Product Details\n \n
    \n
  • {detailedProductView?.productImage}
  • \n
  • \n {productText}:\n {detailedProductView?.productInfo}\n
  • \n
  • \n {productLineCatalogName}:\n {detailedProductView?.productLineCatalog}\n
  • \n
  • \n {productNumberText}:\n {detailedProductView?.productNumber}\n
  • \n
  • \n {productUnitPriceText}:\n {` `}\n {detailedProductView?.productPrice}\n
  • \n
  • \n {productUOMText}:\n {` `}\n {detailedProductView?.productUnitOfMeasure}\n
  • \n
  • \n {productQuantityText}:\n {detailedProductView?.productQuantityView}\n
  • \n {productsStatusMessage &&
  • {productsStatusMessage}
  • }\n
\n
\n \n \n \n \n
\n );\n};\n\nconst _renderItem = (product: IOrderTemplateLineViewProps, quantityLabel: string, ProductsTableRow?: INodeProps): JSX.Element | null => {\n if (!product) {\n return null;\n }\n\n const {\n key,\n selectLine,\n productLineCatalog,\n productImage,\n productPrice,\n productNumber,\n addToBagButton,\n removeButton,\n productInfo,\n productUnitOfMeasure,\n productQuantityView,\n productQuantity,\n popUp,\n isMobile,\n extraActionsPopup,\n isMultipleCatalogFeatureEnabledInHq,\n disabled\n } = product;\n\n const lineVisibility = disabled\n ? {\n pointerEvents: 'none',\n opacity: 0.5\n }\n : {\n pointerEvents: 'auto',\n opacity: 1\n };\n\n const disableElement: React.CSSProperties = lineVisibility as React.CSSProperties;\n\n return (\n \n {selectLine}\n {!isMobile && isMultipleCatalogFeatureEnabledInHq && {productLineCatalog}}\n {productImage}\n {isMobile ? (\n \n
{productNumber}
\n
\n {quantityLabel}:{` `}\n {productQuantity}\n
\n \n ) : (\n {productNumber}\n )}\n {!isMobile && {productInfo}}\n {!isMobile && {productPrice}}\n {!isMobile && {productUnitOfMeasure}}\n {!isMobile && {productQuantityView}}\n {isMobile && {popUp}}\n {!isMobile && !isMultipleCatalogFeatureEnabledInHq && (\n \n {addToBagButton}\n {removeButton}\n \n )}\n {extraActionsPopup}\n
\n );\n};\n\nexport default OrderTemplateLinesView;\n"],"names":["PickUpInStore","props","_toggleBOPIS","isBopisSelected","storeSelectorStateManager","product","cartline","cartState","storeSelectorModuleId","openDialog","id","alreadySelectedLocation","OrgUnitNumber","FulfillmentStoreId","deliveryOptions","onLocationSelected","async","orgUnitLocation","deliveryMode","updateCartLinePickupLocation","cartLineId","LineId","location","then","result","status","locationChangedHandler","catch","error","Promise","resolve","_onLocationChangedCallback","DeliveryMode","ShippingAddress","clearCartLinePickupLocation","_getOrgUnitName","fulfillmentStoreId","orgUnitLocations","length","foundLocation","find","OrgUnitName","DeliveryOptions","pickupDeliveryModeCode","option","Code","callbacks","toggleBopis","defaultComponent","cartLine","shipItText","pickupInStoretext","changeStoreText","orgUnitName","bopisSelected","toggleBOPIS","React","className","type","name","onChange","value","checked","key","onClick","_renderShippingMethod","shipitText","pickUpInStoreText","deliveryOption","pickupStore","delivery","Description","_getDeliveryOption","ContainerProps","_assembleNode","productSpecificationData","index","foundProductAvailability","foundProductDeliveryOptions","imageSettings","gridSettings","typeName","context","resources","removeButtonText","removeItemClickHandler","moveToWishlistSuccessHandler","addToOrderTemplateButtonText","addToOrderTemplateButtonTooltip","addToOrderTemplateDialogResources","createOrderTemplateDialogResources","itemAddedToOrderTemplateDialogResources","duplicateItemsWhenAddingToOrderTemplateDialogResources","addToWishlistButtonText","removeFromWishlistButtonText","orderTemplates","customerInformation","wishlists","defaultWishlistName","isAuthenticated","request","user","nameOfWishlist","Name","availableQuantityInStock","isStockCheckEnabled","productAvailability","ProductAvailableQuantity","IsProductAvailable","AvailableQuantity","maxQuantity","maxQuantityByConfig","isQuantityLimitsFeatureEnabled","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","_getCartItemMaxQuantity","maxCartlineQuantity","Behavior","MaximumQuantity","shouldSkipStockCheck","ItemTypeValue","ReleasedProductType","IsInvoiceLine","errorMessage","ObjectExtensions","undefined","currentQuantity","lineId","finalErrorMessages","productAvailabilites","ArrayExtensions","shouldIgnoreWarehouse","ProductId","InventLocationId","WarehouseId","includeErrors","push","outOfStockText","outOfRangeOneText","outOfRangeFormatText","replace","toString","checkForErrors","cartlinesErrors","ValidationResultsPairs","errorsFoundByLineId","filter","i","ValidationFailures","forEach","validation","ErrorContext","join","_getErrorMessage","Quantity","onRemoveClickHandler","onRemoveClickFunction","payload","getPayloadObject","TelemetryEvent","telemetryContent","attributes","getTelemetryAttributes","inventoryLbl","StockLevelLabel","inventoryCode","StockLevelCode","toLowerCase","isCustomPriceSelected","Dimensions","dimension","DimensionTypeValue","DimensionValue","Value","productUrl","getProductUrlSync","actionContext","MsDyn365","fullUrl","URL","window","href","searchParams","set","CatalogId","getInvoiceDetailsPageUrlSync","data","cartlineId","hasError","TebuCartLineItemComponent","isOutOfStock","lineIndex","isQuantityEditable","quantityOnChange","updateCartLinesQuantitySuccessHandler","primaryImageUrl","PrimaryImageUrl","inventoryInformationLabel","inventoryLabelClassName","isCartStateReady","showShippingChargesForLineItems","channelDeliveryOptionConfig","pickUpInStore","pickitUpText","retailMulitplePickupFeatureState","remove","Button","Object","title","addToWishlist","AddToWishlistComponent","showButtonText","showStatusMessage","showRemoveButton","showButtonTooltip","ariaRole","onSuccess","addToOrderTemplate","AddToOrderTemplateComponent","classnames","quantity","shouldShowButtonFailedTooltip","disableButton","app","config","disableTooltip","assembleCartlines","cartlines","productsWithAttributes","reactNodes","products","p","productDetails","map","foundProductDeliveryOption","getProductByProductIdAndWarehouse","getProductByProductId","productDeliveryOptions","simpleProduct","RecordId","CartLineGroupItems","telemetry","getGroupByStorePickup","items","groupBy","item","groupDelivery","cartLinesGroup","entries","deliveryType","groupByDeliveryType","keys","cartLines","carLineViewProps","_assembleGroupCartlines","getPromotionData","ctx","promotionData","getPromotionOptionsForCartLineItems","PromotionOptionsForCartLineItems","requestContext","apiSettings","promotionOptions","exception","Cart","constructor","super","_isMounted","promotionPopupId","_getProductAttribute","actionInput","AttributesForSelectedVariantInput","channelId","getAttributesForSelectedVariant","this","console","log","ProductsWithAttributes","promotionLinkClick","event","setState","showPromotionDialog","state","promotionCloseButtonclick","_hidePromotionDialog","getImageSettings","viewports","xs","q","w","h","sm","lg","lazyload","removeItemFromCartHandler","cartlineToRemove","cart","input","cartLineIds","removeCartLines","validateCart","warning","debug","updateCartlineQuantity","cartlineToUpdate","cartLineQuantityUpdatedAsync","cartActionResult","message","lineUpdateFailure","validationResults","LocalizedMessage","errorDetails","fulfillmentStoreIdUpdated","getActiveCartProductsAction","ActiveCartProductsInput","getTelemetryObject","telemetryPageName","friendlyName","payLoad","bind","isCartValid","getOrderQuantityLimitsFeatureFlag","showAvailablePromotions","CartLines","reaction","componentWillUnmount","shouldComponentUpdate","nextProps","nextState","render","signInUrl","guestCheckoutUrl","getUrlSync","backToShoppingUrl","checkoutURL","getCheckoutURL","isCartEmpty","_getCartLines","emailDeliveryModeCode","channel","EmailDeliveryModeCode","validInventoryAcrossCartLines","validateCartLinesInventory","isValid","some","RetailMultiplePickupFeatureState","featureState","multiplePickUpEnabled","hasInvoiceLine","IsEnabled","getCartLinesGroup","contentAction","etext","TelemetryConstant","checkoutBySignInAttributes","checkoutByGuestAttributes","backtoShoppingAttributes","cartLineGroup","_updateCartLineErrorForInvalidInventory","viewProps","cartTitle","CartlinesWrapper","OrderSummaryWrapper","OrderSummaryItems","promoCode","_getPromoCode","_getPromotions","removePromoAriaLabelFormat","orderSummaryHeading","invoiceSummaryTitle","orderSummaryTitle","orderSummaryLineitems","_getOrderSummaryLineItems","invoiceSummaryLineitems","_getInvoiceSummaryLineItems","checkoutAsSignInUserButton","disabled","checkoutButtonTitle","checkoutAsGuestButton","guestCheckoutButtonTitle","backToShoppingButton","backToShoppingButtonTitle","createTemplateFromCartButton","_displayAddCartToTemplate","SaveCartToOrderTemplateComponent","_generateAddToOrderTemplateDialogResources","_generateOrderTemplateNameDialogResources","linesAddedToOrderTemplateDialogResources","_generateLinesAddedToOrderTemplateDialogResources","createOrderTemplateFromCartButton","createOrderTemplateFromCartButtonTooltip","storeSelector","slots","waitingComponent","Waiting","cartLoadingStatus","cartLoadingErrorMessage","cartDataResult","isEmpty","OrderSummaryErrors","_getOrderSummaryErrors","renderView","RetailB2BEcommerceFeatureState","IsB2b","showPromotionPopup","promotions","promotionLinkText","promotionPopupHeading","onCloseButtonClick","onSeeAllClick","titleId","promotionMessageWrapper","promotionMessage","promotionStringHeading","promotionSeeAllLink","tabIndex","role","promotionDialog","Modal","isOpen","toggle","ModalHeader","ModalBody","_promotion","Promotion","OfferName","ModalFooter","cartPromotions","promotionCloseButtonAriaLabel","cartLineInventoryValidationResult","productIdWithErrors","productIdWithError","element","outOfStockErrorMessage","allErrors","fullError","line","Wrapper","tag","Alert","color","assertive","outOfStockErrorMessageHeader","header","errors","InvoiceSummary","orderTotalLabel","totalAmountLabel","invoiceLabel","channelConfiguration","retailMultiplePickUpOptionEnabled","DynOrderSummary","subTotalLabel","itemsWithCountLabel","shippingLabel","estimatedShippingLabel","otherChargeLabel","otherCharges","taxLabel","estimatedTaxLabel","orderTotal","totalDiscountsLabel","toBeCalculatedText","yetToBeCalculatedText","freeText","priceFree","PromoCodeComponent","promoCodeHeadingText","promoPlaceholderText","promoCodeApplyButtonText","appliedPromoCodeHeadingText","collapseTimeOut","removePromoText","invalidPromoCodeErrorText","failedToAddPromoCodeErrorText","failedToRemovePromoCodeErrorText","duplicatePromoCodeErrorText","duplicatePromotionErrorText","addToOrderTemplateHeader","noOrderTemplatesMessage","noOrderTemplatesDescription","createAnOrderTemplateButtonText","createNewOrderTemplateButtonText","cancelOrderTemplateCreationButtonText","selectTemplatesText","addToTemplateButtonText","lineItemsText","_generateItemAddedToOrderTemplateDialogResources","viewOrderTemplateButtonText","continueShoppingButtonText","itemAddedToOrderTemplateHeaderItemOneText","itemAddedToOrderTemplateHeaderItemFormatText","itemAddedToOrderTemplateHeaderMessageText","freePriceText","originalPriceText","currentPriceText","linesAddedToOrderTemplateHeaderItemsOneText","linesAddedToOrderTemplateHeaderItemsFormatText","linesAddedToOrderTemplateHeaderLinesOneText","linesAddedToOrderTemplateHeaderLinesFormatText","linesAddedToOrderTemplateHeaderMessageText","linesAddedToOrderTemplateCustomPriceAlertMessageText","_generateDuplicateItemsWhenAddingToOrderTemplateDialogResources","duplicatedProductsHeader","duplicatedProductsDescription","updateQuantityButtonText","cancelDuplicateItemsButtonText","orderTemplateHeaderLabel","createOrderTemplateHeader","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","createOrderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","createOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelNewOrderTemplateCreationButtonText","PickupDeliveryModeCode","modules","storeSelectorId","CartLineItems","catalogs","enableStockCheck","maxQuantityForCartLineItem","warehouseAggregation","sizeString","productDimensionTypeSize","colorString","productDimensionTypeColor","configString","productDimensionTypeConfiguration","styleString","productDimensionTypeStyle","amountString","productDimensionTypeAmount","quantityDisplayString","quantityDisplayText","inputQuantityAriaLabel","decrementButtonAriaLabel","incrementButtonAriaLabel","discountStringText","shippingChargesText","shippingCharges","priceEditorResources","removeCartButtonText","shipInsteadDisplayText","pickItUpDisplayText","changeStoreDisplayText","errorMessageOutOfRangeOneLeft","errorMessageOutOfRangeFormat","showOutOfStockErrors","addToOrderTemplateMessage","addItemToOrderTemplateError","isAbsoluteUrl","RegExp","test","returnURL","origin","includes","validateCartAsync","AsyncResult","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","featureStatuses","customerInfo","observer","_renderPromotions","Node","_renderCartlines","mulitplePickUp","emptyCartText","_renderBOPISBlock","_renderGroupBOPISBlock","onToggleBopisHandler","onChangeStoreHandler","shipToAddressDisplayText","pickUpAtStoreWithLocationText","puckUpinStoreAttribute","_renderErrorBlock","errorData","_renderOrderSummarylines","orderSummaryLines","netTotal","totalDiscounts","subtotal","shipping","otherCharge","tax","_renderInvoiceSummarylines","invoiceSummaryLines","invoices","giftCard","loyalty","_renderCartLinesGroup","_renderCartLinesGroupHeader","_countItems","count","pickUpText","shippingText","emailshippingText","groupTitle","_renderCartLinesGroupTitle","countItem","reduce","itemLabel","itemsLabel","suffix","_renderQutotationButton","url","renderModuleAttributes","renderRating","ratingId","avgRating","totalRatings","ariaLabel","numberRatings","ratingAriaLabel","rating","roundedRating","toFixed","format","getRatingAriaLabel","RatingComponent","ratingCount","readOnly","ActiveProductComponent","savingsText","imageUrl","altText","imgData","src","imageProps","cropFocalRegion","Image","loadFailureBehavior","renderProductPlacementImage","productId","basePrice","adjustedPrice","price","BasePrice","AdjustedPrice","CustomerContextualPrice","PriceComponent","renderPrice","Price","description","hideRating","AverageRating","TotalRatings","assembleNode","additionalContentNode","heading","additionalContentHeading","Msdyn365","text","editProps","onEdit","handleAdditionalTextChange","renderHeading","subtext","additionalContentParagraphText","renderParagraph","links","ctaLink","linkIndex","editableLink","linkText","linkUrl","destinationUrl","openInNewTab","isOpenInNewTab","link","onTextChange","handleAdditionalLinkTextChange","renderLinks","additionalContentContainer","additionalContentItemLinks","activeImageAdditionalContent","additionalContent","CanvasCalculations","CanvasStyles","ImageMapper","_isDesktopViewPort","_context","getActiveImageWidth","activeImageReferenceValue","activeImageRefs","current","clientWidth","getActiveImageHeight","clientHeight","convertHexToRgb","hexColor","exec","rValue","Number","parseInt","gValue","bValue","applyFadingTransition","coords","rgbColor","alpha","halfDivisor","_canvas","getContext","buttonPadding","paddingAdjustment","buttonWidth","measureText","width","fillStyle","document","body","parentElement","getAttribute","fillText","drawButton","buttonTextClor","buttonHeight","buttonPositionX","buttonPositionY","arcsize","beginPath","moveTo","lineTo","arcTo","stroke","closePath","fill","expandAnimation","buttonText","imageMapperResources","animationStartWidth","expandAnimationStartWidth","pointPositionX","pointPositionY","animationEndWidth","expandAnimationEndWidth","radius","expandRadius","rotation","startAngle","endAngle","textFadeInValue","textFadeInStartValue","buttonTextClorInRgb","toLocaleLowerCase","animate","ellipse","requestAnimationFrame","textFadeInterval","collapseAnimation","collapseAnimationStartWidth","collapseAnimationEndWidth","clearMargin","clearHeight","clearWidth","collapseRadius","textFadeOutValue","textFadeOutStartValue","clearRect","drawCircle","viewPort","doubleMultiplier","strokeStyle","arc","Math","PI","scaleCoords","imgWidth","defaultWidth","defaultScale","scale","coord","renderPrefilledAreas","areaMap","areas","area","computeCenter","scaledCoords","handleHoverOn","center","handleHoverOff","canvasPositionX","defaultPositionX","canvasPositionY","defaultPositionY","height","click","preventDefault","hoverOn","onMouseEnter","hoverOff","onMouseLeave","renderAreas","xsRadius","extendedArea","areaKey","altTextWithProductName","productSearchResult","shape","onFocus","onBlur","alt","initCanvas","_backgroundImage","_container","onLoad","defaultHeight","canvasWidth","canvasHeight","style","componentDidMount","componentDidUpdate","shouldRender","imageData","ref","useMap","ActiveImageConstants","ActiveImage","_defaultProductCardWidth","_defaultProdutCardHight","_activePoints","addActivePoints","areaId","updateClientWidth","viewport","isMobile","variant","VariantType","renderImageMapper","productResults","activePoints","configProduct","ItemId","itemId","getProductPageUrlSync","xPosition","yPosition","activePoint","JSON","stringify","mappedArea","_activeImageClass","enterArea","leaveArea","activeImage","_activeImageRefs","altTextForSeeMoreButtonWithProductName","seeMoreButtonText","overlayClass","open","resetState","renderProductComponent","baseImageUrl","productImageSettings","renderProductCard","_productCardDivRef","renderOverlay","getProductCardPositionX","defaultImageSettings","getDefaultImageSettings","productImageSettingsWidth","productCardWidth","leftAllignPosition","position","getProductCardPositionY","productImageSettingsHeight","produtCardHight","xl","keyDown","enterKey","target","nodeName","escKey","handleTextChange","handleParagraphChange","paragraph","renderActiveImageDetailsLinks","_telemetryContent","linkData","linkId","willOpenInNewTab","additionalProperties","handleLinkTextChange","renderActiveImageDetailsHeading","renderActiveImageDetailsParagraph","getActiveImageId","activeImageId","activeImageSource","split","decrementOne","_handleOutsideClick","contains","addEventListener","setTimeout","timeoutInterval","images","getElementsByClassName","Array","from","removeAttribute","removeEventListener","activePointContainer","moduleProps","activePointDetailsContainer","imageMapper","overlay","productCard","productCardleftPosition","productCardtopPosition","detailsContainer","detailsContainerCta","handleAdditionalParagraphChange","handleAdditionalText","handleAdditionalParagraph","handleAdditionalLinkText","activeImageView","Module","top","left","ProductPickUpOptionsForCartLineItems","getCacheKey","buildCacheKey","getCacheObjectType","dataCacheType","getPickUpOptionsForCartLineItems","Error","getCartState","response","ProductsDataActions","callerContext","queryResultSettings","QueryResultSettingsProxy","createObservableDataAction","action","inputData","_assembleGroupInvoiceCartlines","productPickUpOptions","_isChannelLimitsFeatureEnabled","isMultipleCatalogsFeatureEnabled","currentCatalogId","getCatalogId","validateCatalogId","showGuestCheckoutButton","expressCheckoutButton","paymentExpress","ExpressCheckoutSectionWrapper","isMultipleCatalogFeatureEnabledInHq","catalogId","checkoutBlockedDueToUnavailableFunds","isChannelTypeB2B","isShowOrHideTaxEnabled","isEnableShowOrHideSalesTaxECommerceEnabled","OrderSummary","isTaxIncludedInPrice","IsTaxIncludedInPrice","isShowTaxBreakup","updateMaxQuantityForCartLineItem","salesAgreementPricePrompt","urlCheck","isChannelLimitsFeatureEnabledInHq","cartLinesPickUpOptions","cartEmptyText","renderCartLinesGroupHeader","emailShippingText","titleSeparate","StringExtensions","renderCartLinesGroupTitle","renderCartLinesGroup","CartLineItemComponent","priceCurrency","Currency","isPickUpItem","isCartLineItemPickUpType","toUpperCase","productdeliveryOptions","storePickUpOptionList","pickup","deliveryCode","matchDeliveryOptions","PickupDeliveryModeCodes","OrderTemplateActions","onRemoveOrderTemplate","handlers","itemKey","removeOrderTemplateActionHandler","OrderTemplateRender","Id","orderTemplate","removeFromOrderTemplateListText","orderTemplateState","enableImageProductLink","onDismiss","orderTemplateImage","_renderOrderTemplateImages","orderTemplateLines","orderTemplateAriaLabel","_renderAriaLabel","orderTemplateName","separator","_getOrderTemplatePageUrl","totalLines","addToCartButton","AddOrderTemplateToCartComponent","moduleTypeName","addToCartText","addToBagText","dialogStrings","removeButton","orderTemplateStatusMessage","userMessage","statusCssString","onClickHandler","assign","slice","fullProduct","_updateProductUrlCatalog","ProductDetails","productListLine","fallBackSrc","getFallbackImageUrl","OmniChannelMedia","OrderTemplateListStatusMessage","errorType","modalCloseButtonReference","onCancelHandler","isCreateOrderTemplateDialogOpen","setOrderTemplateNameDialogOpen","useState","onCreateButtonClick","createOrderTemplateText","OrderTemplateNameDialog","modalOpen","isUpdateDialog","setModalOpen","onCancel","onOrderTemplateCreated","parentElementRef","OrderTemplateList","_isChannelMultipleCatalogsFeatureEnabled","feature","_onDismiss","_reloadPage","reload","_onRemoveFromOrderTemplateList","productListId","token","productList","deleteAsync","headerStatusMessage","deleteOrderTemplateFailedText","messageGlyph","emptyOrderTemplateText","createNewTemplateButtonText","orderTemplatesData","orderTemplateListHeading","orderTemplateListTitle","errorProps","statusMessage","Spinner","msg","progressNotificationText","Heading","emptyViewProps","createOrderTemplateButton","CreateNewTemplateButtonComponent","templateHeaderStatusMessage","OrderTemplates","OrderTemplate","_renderOrderTemplateList","currentTemplateProps","addToBagButtonText","moduleId","closeWindowButtonText","addToCartFailureMessage","addToCartSuccessMessage","addToCartProcessMessage","orderTemplateErrorMessage","linesAddedToCartDialogResources","viewCartButtonText","orderTemplateCloseButtonText","linesAddedToCartHeaderItemsOneText","linesAddedToCartHeaderLinesOneText","linesAddedToCartHeaderLinesFormatText","linesAddedToCartHeaderMessageText","OrderTemplateListView","_renderOrderTemplate","CONTENT","AddLineToTemplate","query","productCatalogs","content","Search","selectedProduct","selectedCatalogId","searchTextInput","addLineButtonRef","_renderSearchForm","searchButtonAriaLabel","searchModalPlaceholderText","selectCatalogTitleText","autoComplete","onSubmit","_onSearchSubmit","htmlFor","_onCatalogSelectionChange","_getCatalogNodes","autoFocus","placeholder","_onInputChange","maxLength","Loading","_getSearchResults","NotFound","ProductList","_onQuantityChangeHandler","selectedQuantity","_onSelectItem","varianteInput","SelectedVariantInput","productVariant","getSelectedVariant","dimensions","_getProductDimensions","selectedProductDimensions","ProductConfiguration","_onBackButtonClickHandler","_highlightSearchTerm","parsedName","unescape","dangerouslySetInnerHTML","__html","_resultCountText","searchResultsCountVerbage","searchResultsCountSubject","_addItemToTemplateHandler","orderTemplateId","AddItemToOrderTemplateInput","DefaultUnitOfMeasure","addItemToOrderTemplate","reloadPage","_toggleModalHandler","onTelemetryClick","_getCatalogs","focus","onComponentDidMount","onComponentDidUpdate","addLineModalLinkText","backToResultsText","modalProps","showBackArrow","_renderContent","addToTemplateHandler","onQuantityChangeHandler","highlightSearchTerm","searchForm","productProps","clickHandler","renderResultCountText","notFoundSearchErrorNotice","notFoundSearchErrorRedediation","NotFoundComponent","searchErrorMessage","productCatalog","isSelected","selected","searchText","searchCriteriaInput","Context","ChannelId","IncludeAttributes","SearchCondition","searchByCriteriaAsync","MasterProductId","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","__decorate","computed","Dropdown","selectMenu","_onChanged","selectedIndex","dropdownId","selectId","selectedValue","innerText","dropdownList","dropdownName","OrderTemplateQuantity","inputRef","_validateMin","minValue","min","isNaN","currentInput","currentCount","_handleChange","glyphMinusClassName","decrementGlyphClass","glyphPlusClassName","incrementGlyphClass","incDisabled","max","currentValue","extraClass","getChangeHandler","amount","_onIncrementalChange","pattern","updatedQuantity","e","inputElement","HTMLInputElement","setAttribute","selectedDimensions","_getDimensionsError","dimensionName","dimensionMissingError","_addToTemplateHandler","isBusy","showAddConfirmation","add","missingDimensions","ProductListId","addToTemplateDuplicateError","addToTemplateGenericError","_onQuantityChange","newValue","totalPrice","_updateDimensionValue","productDimensionFull","newValueId","DimensionValues","_onDimensionChanged","remainingDimensionsErrors","selection","buttonDisabled","mappedDimensions","ExtensionProperties","variantProduct","dimensionInput","variantDimensions","availabilityInput","ProductAvailabilitiesForSelectedVariantInput","newAvailableQuantity","getProductAvailabilitiesForSelectedVariant","priceInput","PriceForSelectedVariantInput","productPrice","getPriceForSelectedVariant","productAvailableQuantity","unitPrice","sort","a","b","_getDropdownName","dimensionType","addItemToTemplateText","addLineProductUnitPricePrefix","quantitySelectLabel","addLineProductUnitOfMeasurePrefix","totalPriceLabel","isMultipleCatalogSelect","_formatPrice","_getDimensionsNodes","_getConfirmationMessage","selectedDimensionNames","addToTemplateConfirmation","values","unshift","cultureFormatter","formatCurrency","currencyCode","selectProductButtonText","primaryImageSource","generateImageUrl","fallBackImg","ProductSelectButton","setBusy","getClickHandler","OrderTemplateBulkActions","isAddDisabled","isRemoveDisabled","addHandler","onAddSelectionToBag","removeHandler","onRemoveSelection","selectedLines","searchInputAriaLabel","backButtonText","addSelectedToBagButtonText","removeSelectedToBagButtonText","addLineProps","isMinifiedView","removeOrderActionHandler","_removeOrderTemplate","onRemoveTemplate","_getOrderTemplateAddToCartDialog","addTemplateToBagButtonText","_getOrderTemplateRenameControl","renameOrderTemplateDialogStrings","RenameOrderTemplateComponent","onRenameTemplate","renameOrderTemplateButtonText","renameTemplateButtonText","buttonEventReference","ActionsSplitButton","isStatementRequestAdminDropdownOpen","setIsStatementRequestAdminDropdownOpen","renameOrderTemplateDialogOpen","onToggleDropdown1","popoverReference","renderModalPopup","existingOrderTemplate","requestStatementDropdownString","Random","innerRef","Popover","placement","OrderTemplateLineActions","orderTemplateLine","onAddToBag","onRemoveItem","getAddToBag","getRemoveItem","PopUp","removeFromOrderTemplateLinesText","moreButtonText","viewProductDetailsText","showMobile","setShowMobile","toggleDetailsDisplayed","getActionButton","removeButtonClassName","addButtonClassName","getDesktopActionButton","onSelectLineHandler","isChecked","onSelect","ExtraActionsPopup","showActions","setShowActions","actionsContainerClassName","OrderTemplateMobileLineView","UnitOfMeasure","fallbackImage","productLineCatalog","renderProductCatalog","productImage","_renderProductImage","productInfo","renderProductInfo","_renderPrice","productNumber","productUnitOfMeasure","productQuantityView","_generateQuantity","onChangeHandler","onChangeQuantity","isQuantityDisabledForUpdate","image","isB2b","catalog","_renderProductError","OOS","outOfStockProductErrorMessage","UNASSORTED","unavailableProductErrorMessage","NONE","_renderProductDimensions","productName","dimensionsLine","OrderTemplateLinesStatusMessage","OrderTemplateTableHeading","componentClassName","getOnChange","checkedLines","lines","scope","selectAllRowsText","productLineCatalogName","productUnitPrice","productUOM","productQuantity","productActions","OrderTemplateLines","_onRemoveSelection","removeSelectedFailureMessage","removeSelectedSuccessMessage","productSelection","productListLines","maxWaitTimeInMilliSeconds","removeProductListLinesAsync","substr","indexOf","_onAddSelectionToBag","productLine","ProductTypeValue","_addItemToBag","_getCurrentUrl","reqContext","requestUrl","onCloseHandler","isItemAddedToOrderTemplateOpen","_renderItemAddedToCartDialog","itemAddedToCartDialogData","ItemAddedToCartDialog","_generateItemAddedToCartDialogResources","onClose","_renderPagination","itemsPerPage","skipCount","_getCurrentPageNumber","totalItems","previousText","flipperPrevious","nextText","flipperNext","UncontrolledPagination","paginationAriaLabel","qsp","startingItem","_renderPrev","_renderNext","previousAriaLabel","nextAriaLabel","_toggleDetailsDisplayed","isDetailsDisplayed","detailedProductView","absoluteUrl","_changeQuantity","orderTemplateLinesData","orderLineIndex","findIndex","newProductListLine","prevQuantity","updateProductListLinesAsync","list","newLine","updatedLines","updatedOrderTemplate","ProductListLines","update","ActiveOrderTemplateLinesInput","editOrderTemplateLineQuantityError","maxQuantityLimitText","addedToCartFailureMessage","addProductToCartInput","addProductToCart","priceResult","isMiniCart","addToCartBehavior","substatus","cartLineQuantity","defaultMessage","_removeItemFromOrderTemplateLines","userToken","featureStates","getFeatureState","createGetFeatureStateInput","_renameTemplate","_removeTemplate","newLink","_getViewport","device","Type","innerWidth","md","paginationPreviousText","paginationNextText","_viewport","_updateViewport","isConfirmAddSelectionToBagModalOpen","params","isEditor","emptyOrderTemplateLinesText","errorGettingOrderTemplateLines","orderTemplateResult","_isFirstPage","orderActions","_renderOrderTemplateActions","bulkOrderLineActions","_getOrderTemplateLineActions","productsStatusMessage","ProductsTable","ProductsTableRow","ProductsTableHeading","_renderProductListHeader","orderLines","_renderProductList","updateQuantity","debounce","pagination","itemAddedToCartDialog","updated","onSelectAll","productNumberText","productText","productUnitPriceText","productUOMText","productQuantityText","productActionsText","headers","_generateLinesAddedToCartDialogResources","itemAddedToCartHeaderItemOneText","itemAddedToCartHeaderItemFormatText","itemAddedToCartHeaderMessageText","deleteTemplateButtonText","addTemplateToBag","renameTemplate","removeTemplate","actionsSplitButton","OrderTemplateActionsView","renameOrderTemplateTitleText","cancelBtnLabel","skip","selectOneRowText","addOrderTemplateItemToBagButtonText","removeItemFromOrderTemplateButtonText","deleteButtonText","selectLine","addToBagButton","extraActionsPopup","popUp","shouldDisable","OrderTemplateLineView","ProductPrice","observable","_renderItem","quantityLabel","disableElement","pointerEvents","opacity","toggleDetails","wrapClassName","fade","applicationNode"],"sourceRoot":""}