{"version":3,"file":"static/js/6ae116f0ad90546b4682.bundle.js","mappings":";8LAmCYA,6FAAZ,SAAYA,GACRA,EAAAA,EAAA,eACAA,EAAAA,EAAA,aACAA,EAAAA,EAAA,aACAA,EAAAA,EAAA,iBACAA,EAAAA,EAAA,eACAA,EAAAA,EAAA,0BACAA,EAAAA,EAAA,uBAPJ,CAAYA,IAAAA,EAAgB,0kBCUtB,MAAOC,UAA2BC,EAAAA,cAmBpCC,YAAYC,GACRC,MAAMD,GAnBF,KAAAE,aAAuB,EAId,KAAAC,qBAA+B,EAE/B,KAAAC,UAAoB,GAgGpB,KAAAC,cAAgB,IAAM,KACnCR,EAAmBS,aAAc,EACjCC,KAAKC,UAASC,IAAiB,CAAGC,WAAYD,EAAcE,gBAgD/C,KAAAC,uBAAyB,CAACC,EAAeC,EAA8BC,OAE/ElB,EAAmBS,aADG,IACYO,QAGlCE,IAAmBD,IAGjBA,IAAwBC,GAoXlB,KAAAC,qBAAuB,CAACC,EAA0BC,IAA0B,KACzF,MAAMC,EAAWD,GAAUA,EAAOC,SAAWD,EAAOC,SAAW,GACzDC,EAAiC,CAAC,CAAEC,IAAKJ,EAAkBK,QAASH,IAGtEI,EAAAA,gBAAgBC,YAAYN,EAAOO,qBACnCP,EAAOO,mBAAmBC,KAAIC,IAC1B,GAAIA,GAAQA,EAAKC,MAAO,CACpB,MAAMC,EAAWF,EAAKC,MAAMP,IACtBS,EAA+BH,EAAKC,MAAMG,cAChDX,EAAiBY,KAAK,CAClBX,IAAKQ,EACLP,QAASK,EAAKM,KACdF,cAAeD,EACfI,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,sBAK9D7B,KAAKC,SAAS,CACV6B,cAAejB,EAAiBkB,OAAS,EAAIlB,EAAmB,CAAC,CAAEC,IAAK,UACxEkB,qBAAsBpB,KAUb,KAAAqB,sBAAwB,CAACC,EAAqBC,IAAsB,KAC5EnC,KAAKP,MAAM2C,cAShB9C,EAAmBS,aAAc,EACjCC,KAAKC,SAAS,CACVE,WAAY+B,EAAKG,GACjBjC,WAAY+B,MAXZnC,KAAKC,SAAS,CACVE,WAAYH,KAAKsC,MAAMnC,YAAcH,KAAKsC,MAAMnC,aAAe+B,EAAKG,QAAME,EAAYL,EAAKG,GAC3FjC,WAAY+B,IAEZnC,KAAKP,MAAM+C,mBACXxC,KAAKS,qBAAqByB,EAAKO,YAAcP,EAA7ClC,IAURA,KAAK0C,eAMQ,KAAAA,YAAc,KACvB1C,KAAKP,MAAM2C,cACXO,YAAW,KACP3C,KAAK4C,UAAY5C,KAAK4C,SAASC,SAAW7C,KAAK4C,SAASC,QAAQC,UACjE,IAQM,KAAAC,oBAAuBC,IAChChD,KAAK4C,SAASC,UAAY7C,KAAK4C,SAASC,QAAQI,SAASD,EAAME,UAC1DlD,KAAKsC,MAAMa,aAGZnD,KAAKC,SAAS,CAAEE,gBAAYoC,EAAWhC,oBAAqB,KAF5DP,KAAKC,SAAS,CAAEE,WAAY,EAAGI,oBAAqB,OAW/C,KAAA6C,oBAAuBJ,IAChChD,KAAK4C,SAASC,UAAY7C,KAAK4C,SAASC,QAAQI,SAASD,EAAMK,gBAC/DrD,KAAKsD,iBAeI,KAAAC,aAAgBP,IACzBA,EAAMQ,UAAYxD,KAAKH,WACvBG,KAAKsD,iBAII,KAAAG,kBAAqB3B,IAClC,IAAKA,IAAkBA,EAAchB,IACjC,OAAO,KAGX,MAAM4C,GAAmBC,EAAAA,EAAAA,kBAAiB7B,EAAchB,IAAKd,KAAKP,MAAMmE,QAAQC,cAAcC,eAAeC,aACvGC,EAAuC,CACzCC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCG,GAAI,CAAEL,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCI,UAAU,GAEd,QAAyBlC,IAArBmB,EAAgC,KAAAgB,EAAAC,EAChC,MAAMC,EAAwB,CAAE9D,IAAK4C,GACrC,OACInE,EAAAA,cAACsF,EAAAA,GAAKC,OAAAC,OAAA,CACFjB,eAAgB9D,KAAKP,MAAMmE,QAAQC,cAAcC,eACjDkB,UAAU,sBACNJ,EAAS,CACbK,aAAcjF,KAAKP,MAAMmE,QAAQsB,QAAQD,aACzCzD,cAAqF,QAAxEkD,EAA6B,QAA7BC,EAAE7C,EAAcN,qBAAa,IAAAmD,EAAAA,EAAI3E,KAAKP,MAAM0F,OAAOC,6BAAqB,IAAAV,EAAAA,EAAIV,EACzFqB,oBAAoB,OACpBC,KAAK,WACLjD,GAAI,GAAGP,EAAchB,qBACrBC,QAASe,EAAcf,WAInC,OAAO,MAOM,KAAAwE,gBAAmBC,IAChC,MAAM,eAAEC,GAAmBzF,KAAKsC,MAE1BoD,EAAU,CAAE,MADoCnD,IAA3BiD,EAAYG,WAA2BH,EAAYG,WAAa,IAC3DH,EAAYI,QAC5C5F,KAAKC,SAAS,CAAEwF,eAAcI,EAAAA,EAAA,GAAOJ,GAAmBC,MAM3C,KAAAI,sBAAwB,KACrC9F,KAAKC,SAAS,CAAEkD,aAAcnD,KAAKmD,gBAxpBnCnD,KAAK4C,SAAWrD,EAAAA,YAChBS,KAAK+F,YAAcxG,EAAAA,YACnBS,KAAKsC,MAAQ,CAAEnC,gBAAYoC,EAAWhC,oBAAqB,GAAIH,gBAAYmC,EAAWP,qBAAsB,GAAIyD,eAAgB,GAAItC,aAAcnD,KAAKmD,cACvJnD,KAAKsD,cAAgBtD,KAAKsD,cAAc0C,KAAKhG,MAC7CA,KAAKuD,aAAevD,KAAKuD,aAAayC,KAAKhG,MAC3CA,KAAKiG,kBAAmBC,EAAAA,EAAAA,oBACpBlG,KAAKP,MAAMmE,QAAQsB,QAAQiB,kBAC3BnG,KAAKP,MAAM2G,aACXpG,KAAKP,MAAM4G,WAEfrG,KAAKsG,SAAUC,EAAAA,EAAAA,kBAAiB,QAASvG,KAAKiG,iBAAkB,GAAI,IAG9D,mBACN,MAAMO,EAAuG,QAApFC,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAYC,QAAShD,QAAS5D,KAAKP,MAAMmE,QAAQsB,UACxF2B,EAAuG,QAApFJ,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAYC,QAAShD,QAAS5D,KAAKP,MAAMmE,QAAQsB,UAC9F,OAAOsB,GAAoBK,EAGxBC,oBACCC,EAAAA,GAASC,YACThH,KAAKiH,mCAAoCC,EAAAA,EAAAA,mBAAkBC,OAAQ,SAAUnH,KAAK8F,uBAClFsB,SAASC,KAAKC,iBAAiB,UAAYtH,KAAKuD,cAA2C,GAC3FvD,KAAK8F,wBACLsB,SAASC,KAAKC,iBAAiB,YAAatH,KAAK+C,qBACjDqE,SAASC,KAAKC,iBAAiB,WAAYtH,KAAKoD,sBAIjDmE,qBAAkB,IAAAC,EACO,QAAxBA,EAAAxH,KAAK+F,YAAYlD,eAAO,IAAA2E,GAAxBA,EAA0BC,SAAS,IAAMzH,KAAKP,MAAM2C,cACnDpC,KAAK+F,YAAYlD,QAAQ4E,SAAS,GAAmB3E,QAIvD4E,uBACHP,OAAOQ,oBAAoB,SAAU3H,KAAKiH,mCAAoC,GAC1EF,EAAAA,GAASC,YACTI,SAASO,oBAAoB,UAAY3H,KAAKuD,cAA2C,GACzF6D,SAASC,KAAKM,oBAAoB,YAAa3H,KAAK+C,qBAAqB,GACzEqE,SAASC,KAAKM,oBAAoB,WAAY3H,KAAKoD,qBAAqB,IAIzEwE,SAEH,OADA5H,KAAKL,aAAe,EACbJ,EAAAA,cAAAA,EAAAA,SAAA,KAAGS,KAAKsC,MAAMa,aAAenD,KAAK6H,oBAAsB7H,KAAK8H,sBAOhED,oBACJ,MAAM,SAAEE,EAAQ,iBAAEC,EAAgB,2BAAEC,EAA0B,uBAAEC,EAAsB,WAAEC,GAAenI,KAAKP,MAG5G,OADAO,KAAKL,aAAe,EAEhBJ,EAAAA,cAAC6I,EAAAA,OAAMtD,OAAAC,OAAA,GACCoD,EAAU,CACdnD,UAAWqD,GAAAA,CACPF,EAAWnD,UACXhF,KAAKsC,MAAMa,mBAA0CZ,IAA1BvC,KAAKsC,MAAMnC,WAA2B,QAAU,YAG/EZ,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAKgD,EAAQ,CAAEQ,SAAS,OACxBvI,KAAKsC,MAAMa,mBAA0CZ,IAA1BvC,KAAKsC,MAAMnC,YACnCZ,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAKkD,GACN1I,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAKiD,EAAgB,CAAEQ,QAASxI,KAAKF,mBAC1CP,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAKmD,GAAyBlI,KAAKsC,MAAM/B,sBAGrDP,KAAKyI,yBAedA,uBACJ,MAAM,SAAEC,GAAa1I,KAAKP,MACpBkJ,EAAgC3I,KAAKP,MAAMkJ,cAC3C,WAAExI,GAAeH,KAAKsC,MACtBsG,EAA8B,GAMpC,GAJI5H,EAAAA,gBAAgBC,YAAY0H,KAC5BA,EAAa,GAAGtG,GAAK,GAGrBrC,KAAKsC,MAAMa,mBAA+BZ,IAAfpC,GAA4Ba,EAAAA,gBAAgBC,YAAY0H,GAAe,CAClG,MAAME,EAAW7I,KAAK8I,2BAAsBvG,EAAWoG,GAEnDE,GACAD,EAAanH,KACTlC,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CAACgE,IAAKF,EAASxG,IAAQqG,GACvB,IACA1I,KAAKgJ,0BAA0BH,GAAS,IAAG,WAKxD,IAAK,MAAOvI,EAAOc,KAASuH,EAAaM,UACrCL,EAAanH,KACTlC,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CACDgE,IAAK3H,EAAKiB,IACNqG,EAAQ,CACZQ,IAAKlJ,KAAKK,uBAAuBC,EAAON,KAAKsC,MAAM/B,oBAAqBa,EAAKR,UAAYZ,KAAK+F,YAAc,OAE3G/F,KAAKgJ,0BAA0B5H,KAMhD,OAAOwH,EAqBHE,sBAAsBK,EAAuBC,GACjD,IAAKA,EACD,OAAO,KAGX,IAAK,IAAI9I,EAAQ,EAAGA,GAAS8I,EAAKrH,OAAS1C,EAAiBgK,IAAK/I,IAAS,CACtE,MAAMc,EAAsBgI,EAAKE,OAAOhJ,IAExC,GAAIc,EAAKiB,KAAOrC,KAAKsC,MAAMnC,WAMvB,OALKb,EAAmBS,YAGpBC,KAAKC,SAAS,CAAEG,WAAY+I,EAAc5I,oBAAqBa,EAAKR,WAFpEZ,KAAKC,SAAS,CAAEG,WAAY+I,IAIzB/H,EAEX,MAAMmI,EAAQvJ,KAAK8I,sBAAsB1H,EAAKiB,GAAIjB,EAAKoI,SACvD,GAAID,EACA,OAAOA,EAGf,OAAO,KAGHP,0BAA0BL,GAC9B,OAAI3H,EAAAA,gBAAgBC,YAAY0H,EAAaa,SACrCxJ,KAAKsC,MAAMa,mBAA0CZ,IAA1BvC,KAAKsC,MAAMnC,WAC/BH,KAAKyJ,eAAed,EAAaa,QAASb,EAAatG,IAAI,GAIlE9C,EAAAA,cAAAA,EAAAA,SAAA,KACKS,KAAK0J,sBAAsBf,GAC3B3I,KAAKyJ,eAAed,EAAaa,QAASb,EAAatG,KAGzDsG,EAAagB,UAAYC,EAAAA,iBAAiBC,mBAAmBlB,EAAagB,SAC1E3J,KAAK8J,oBAAoBnB,EAAcA,EAAatG,IACnDsG,EAAagB,SAAa3J,KAAKsC,MAAMa,mBAA0CZ,IAA1BvC,KAAKsC,MAAMnC,WAIrE,KAHIH,KAAK+J,oBAAoBpB,GAUhCb,qBACJ,MAAM,SAAEC,EAAQ,WAAEI,GAAenI,KAAKP,MACtC,OACIF,EAAAA,cAAC6I,EAAAA,OAAMtD,OAAAC,OAAA,GAAKoD,EAAU,CAAEnD,UAAWqD,GAAAA,CAAWF,EAAWnD,aACrDzF,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAKgD,EAAQ,CAAEmB,IAAKlJ,KAAK4C,SAAU2F,SAAS,OAC5CvI,KAAKgK,mBAadC,cAAcpB,EAAyBqB,EAAkBC,GAC7D,MAAMC,EAAmBvB,EAASjI,SAC5ByJ,EAAWrK,KAAKsC,MAAMmD,eAI5B,IAAI6E,GAAe,QAFO/H,IAAb8H,EAAyBA,EAAW,SADT9H,IAArB6H,EAAiCA,EAAmB,MAKnEE,GAAe,GAEnB,MAAMC,EAA2B,CAAE3E,OAAQ0E,GAC3C,OACI/K,EAAAA,cAACiL,EAAAA,OAAM,CACHlF,KAAK,UACLmF,kBAAmB,CACf,eAAgBP,EAChB,gBAAiBC,EACjB7E,KAAM,UAEVyD,IAAKF,EAASxG,GACd2C,UAAU,iBACV0F,UAAU,sBACVC,SAAU3K,KAAKuF,gBACfqF,cAAeL,EACfM,WAAW,uBACXC,eAAe,MACfV,iBAAkBpK,KAAK+K,gBAAgBX,EAAkBF,EAASC,IAElE5K,EAAAA,cAAA,OAAK+F,KAAK,WACLuD,EAASW,QAASrI,KAAI,CAAC6J,EAA4BC,KAAsB,IAAAC,EAChBC,EAAtD,OAAInK,EAAAA,gBAAgBC,YAAY+J,EAAYxB,SACjCxJ,KAAKiK,cAAce,EAA6B,QAAlBG,EAAEtC,EAASW,eAAO,IAAA2B,OAAA,EAAhBA,EAAkBpJ,OAAQkJ,EAAajL,KAAKJ,sBAEhFI,KAAKoL,kBAAkBJ,EAA6B,QAAlBE,EAAErC,EAASW,eAAO,IAAA0B,OAAA,EAAhBA,EAAkBnJ,OAAQkJ,EAAajL,KAAKJ,2BAcnGmL,gBAAgBnK,EAA8BsJ,EAA6BC,GAC/E,OACI5K,EAAAA,cAAA,uBAAoB2K,EAAO,gBAAiBC,GACvCvJ,GAYLwK,kBAAkBhK,EAAqB8I,EAA6BC,GACxE,OAAI/I,GAAQA,EAAKR,UAAYQ,EAAKuI,SAAWvI,EAAKuI,QAAQ5H,OAAS,EACxD/B,KAAK8J,oBAAoB1I,OAAMmB,GAAW,GAAM,EAAO2H,EAASC,GAChE/I,GAAQA,EAAKR,WAAaQ,EAAKuI,QAC/B3J,KAAK+J,oBAAoB3I,GAE7B,KAOH4I,iBACJ,MAAM,SAAEtB,EAAQ,aAAEC,GAAiB3I,KAAKP,MAClCmJ,EAA8B,GASpC,OARAD,EAAa0C,SAAQ,CAACjK,EAAqBd,KACvCsI,EAAanH,KACTlC,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CAACgE,IAAKzI,GAAWoI,GACjB1I,KAAKsL,oBAAoBlK,QAK/BwH,EAQH0C,oBAAoB3C,GACxB,OAAIA,GAAgBA,EAAaa,SAAWb,EAAaa,QAAQzH,OAAS,EAElExC,EAAAA,cAAAA,EAAAA,SAAA,KACKS,KAAK0J,sBAAsBf,GAC3B3I,KAAKyJ,eAAed,EAAaa,QAASb,EAAatG,KAGzDsG,GAAgBA,EAAa/H,UAAY+H,EAAagB,SAAWhB,EAAagB,QAAQ5H,OAAS,EAC/F/B,KAAK8J,oBAAoBnB,EAAcA,EAAatG,IAAI,GAAO,GAC/DsG,GAAgBA,EAAa/H,WAAa+H,EAAagB,QACvD3J,KAAK+J,oBAAoBpB,EAAcA,EAAatG,IAAI,GAG5D,KAGHoH,eAAe8B,EAA4BpL,EAAqBqL,GACpE,MAAM,aAAEpJ,EAAY,SAAEsG,GAAa1I,KAAKP,MAClCgM,EAAyBzL,KAAKP,MAAM0F,OAAOuG,uBAAwB,EAEnEC,EAA0B3L,KAAKP,MAAM0F,OAAOyG,kBAD7B,EAGrB,GAAIzL,GAAcH,KAAKsC,MAAMnC,aAAeA,EAExC,OADAH,KAAKP,MAAMmE,QAAQyC,UAAUwF,MAAM,gEAC5B,KAGX,IAAKN,GAAgC,IAApBA,EAASxJ,OAEtB,OADA/B,KAAKP,MAAMmE,QAAQyC,UAAUwF,MAAM,4DAC5B,KAGX,IAAIC,EAAyB,GAC7B,MAAMC,EACFR,GACAA,EAASpK,KAAI,CAACR,EAAuBqL,KACjC,MAAMC,EAAatL,EAAO6I,SAAW7I,EAAO6I,QAAQzH,OAAS,EAC7D,IAAI8G,EAMAW,EAJAX,EAAWlI,EAAOgJ,QAAU3J,KAAK8J,oBAAoBnJ,EAAQqL,GAAOhM,KAAK+J,oBAAoBpJ,GAKjG,MAAMuL,EAAcD,GAAcR,GAA0BzL,KAAKL,cAAgBwM,KAAKC,MAAMT,GAA2B,EAMvH,OALIO,IACAlM,KAAKL,eACLmM,EAAiBL,EAAyB,SAASzL,KAAKL,aAAa0M,aAAe,GACpF7C,EAAUxJ,KAAKyJ,eAAe9I,EAAO6I,aAASjH,GAAW,IAGzDhD,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAK2D,EAAQ,CAAEK,IAAKpI,EAAO0B,GAAI2C,UAAWqD,GAAAA,CAAWK,EAAS1D,UAAWkH,GAAe,iBACxFrD,EACAW,MAIjB,OAAOxJ,KAAKsM,YAAYR,EAAgBC,EAAa5L,EAAYqL,GAU7D9B,sBAAsB/I,EAAuBR,EAAqBG,GACtE,MAAM,OAAEiM,GAAWvM,KAAKP,MACxB,OACIF,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CACDgE,IAAKzI,GACDiM,EAAM,CACV/D,QAASxI,KAAKiC,sBAAsBtB,EAAQR,GAE5CqM,QAASxM,KAAKsD,cACdmJ,WAAYzM,KAAKsD,cAAa,kBACbtD,KAAKsC,MAAMnC,YAAcH,KAAKsC,MAAMnC,aAAeQ,EAAO0B,IAAG,mBAC5DrC,KAAKsC,MAAMnC,YAAcH,KAAKsC,MAAMnC,aAAeQ,EAAO0B,IAAG,cAClElC,IAEZQ,EAAOC,UAeZkJ,oBACJnJ,EACAL,GAIiB,IAHjBoM,IAAAC,UAAA5K,OAAA,QAAAQ,IAAAoK,UAAA,KAAAA,UAAA,GACAC,EAAAD,UAAA5K,OAAA,QAAAQ,IAAAoK,UAAA,IAAAA,UAAA,GAIA,MAAM,KAAEE,GAAS7M,KAAKP,MAChBmB,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GAC/CkM,EAAcnM,EAAO8B,YAAc9B,EAAO8B,YAAc,GAC9DzC,KAAKsG,QAAQyG,cAAcC,MAAQpM,EACnC,MAAMqM,GAAaC,EAAAA,EAAAA,wBAAuBlN,KAAKiG,iBAAkBjG,KAAKsG,SACtE,OACI/G,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GACG8H,EAAI,CACR9D,IAAKzI,EACLkM,QAASI,GAAY5M,KAAKsD,cAC1BJ,OAAQvC,EAAOwM,iBAAmB,cAAW5K,EAC7C6K,YAAaV,GAAe1M,KAAKS,qBAAqBqM,EAAanM,GACnE0M,KAAM1M,EAAOgJ,SACTsD,EAAU,CACdzE,SAAS8E,EAAAA,EAAAA,kBAAiBtN,KAAKiG,iBAAkBjG,KAAKsG,QAAS1F,KAE9DD,EAAOC,UAWZ2M,uBAAuB3M,EAAmBgB,GAC9C,MAAM,KAAEiL,GAAS7M,KAAKP,MACtBO,KAAKsG,QAAQyG,cAAcC,MAAQpM,EACnC,MAAMqM,GAAaC,EAAAA,EAAAA,wBAAuBlN,KAAKiG,iBAAkBjG,KAAKsG,SACtE,OAAI1F,GAAYgB,EAERrC,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAK8H,EAAI,CAAEQ,KAAMzL,GAAaqL,EAAU,CAAEzE,SAAS8E,EAAAA,EAAAA,kBAAiBtN,KAAKiG,iBAAkBjG,KAAKsG,QAAS1F,KACzGA,GAIN,KAUHmJ,oBAAoBpJ,EAAuBL,GAAyC,IAAzBsM,EAAAD,UAAA5K,OAAA,QAAAQ,IAAAoK,UAAA,IAAAA,UAAA,GAC/D,MAAM,KAAEa,GAASxN,KAAKP,MACtB,OACIF,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CAACgE,IAAKzI,GAAWkN,EAAI,CAAEhB,QAASI,GAAY5M,KAAKsD,gBACjD3C,EAAOC,UAaZ0L,YAAYmB,EAAe1B,EAA4B2B,EAAsBC,GACjF,MAAM,aAAEC,EAAY,SAAE7F,EAAQ,kBAAE8F,EAAiB,kBAAErL,EAAiB,uBAAEsL,GAA2B9N,KAAKP,MAChGsO,EACFvL,GAAkD,OAA7BxC,KAAKsC,MAAMR,oBAAuDS,IAA7BvC,KAAKsC,MAAMR,gBAAgC6L,EACnGK,EACFF,GAA0B9M,EAAAA,gBAAgBC,YAAYjB,KAAKsC,MAAMR,iBAAmB6L,EAClFM,EAAoBjO,KAAKL,aAAe,GAAKoO,EAAuBH,EAAc5I,UAAY,kBAEpG,OADAhF,KAAKL,aAAe,EAEhBJ,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAK6I,EAAY,CAAE5I,UAAWiJ,IAC/B1O,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GACGgD,EAAQ,CACZ/C,UAAWqD,GAAAA,CACPN,EAAS/C,UACTyI,EACAM,GAAwB,gBACxBA,GACI/N,KAAKP,MAAM0F,OAAOyG,kBAClB5L,KAAKP,MAAM0F,OAAOyG,iBAAmB,GACrC,yBAGPG,GAELxM,EAAAA,cAAA,OAAKyF,UAAU,4BACV+I,GACG/N,KAAKsC,MAAMR,eACX9B,KAAKsC,MAAMR,cAAcX,KAAIC,IAAI,IAAA8M,EAAA,OAC7B3O,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CAACgE,IAAK3H,EAAKN,KAAS+M,EAAiB,CAAE7I,UAAW6I,EAAmB7I,YACrEhF,KAAKsC,MAAMR,eAAiB9B,KAAKyD,kBAAkBrC,GACnD4M,GAA6BhO,KAAKuN,uBAAuBnM,EAAKL,QAAkC,QAA3BmN,EAAE9M,EAAKO,4BAAoB,IAAAuM,OAAA,EAAzBA,EAA2BtM,eAiGvH0B,gBACJtD,KAAKC,SAAS,CAAEE,gBAAYoC,KA5mBjBjD,EAAAS,aAAuB,GA+B5BoO,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,iCA+oBb,+mBC9tBA,MAAMC,EAAU,CAAEC,QAAS,GAAIC,YAAa,IAwCvCF,EAAQC,QAAQ,mBAAqB,CAClCE,EAAGA,IAAMC,EAAQ,KACjBC,MAAO,gBACPC,GAAI,CAAC,CAACC,KAAK,aAAeC,KAAK,8EAA+EC,MAAO,IAErHC,KAAK,EACLC,GAAI,6BACJC,EAAG,kBACHC,EAAG,kBAEHC,IAAK,GAGL5K,GAAI,4FAlC4B6K,EAACC,EAAqBC,KAUlD,GADAjB,EAAQE,YAAYc,GAAuBC,GACtCjB,EAAQE,YAAYc,GAAqBE,QAC1C,MAAM,IAAIC,MAAM,oBAAsBH,EAAsB,mCAEhEhB,EAAQE,YAAYc,GAAqBE,QAAQE,UAAUC,eAAiBL,EACxEhB,EAAQE,YAAYc,GAAqBE,QAAQE,UAAUpN,KAC3DgM,EAAQE,YAAYF,EAAQE,YAAYc,GAAqBE,QAAQE,UAAUpN,IAAMgN,IA0BzFD,CAF4B,8EACXX,EAAQ,MAMjCtH,OAAOwI,aAAexI,OAAOwI,cAAgB,GAC7CxI,OAAOwI,aAAarB,QAAOzI,EAAAA,EAAA,GACpBsB,OAAOwI,aAAarB,SAAW,IAC/BD,EAAQC,SAGXnH,OAAOwI,aAAapB,YAAW1I,EAAAA,EAAA,GAC5BsB,OAAOwI,aAAapB,aAAe,IACnCF,EAAQE,aAEY,MAAMqB,EAAiB,GAC9BA,EAAe,6DAA+D,CACtFpB,EAAGA,IAAMC,EAAQ,MACjBoB,GAAI,uCAEpBD,EAAe,yFAA2F,CAC1FpB,EAAGA,IAAMC,EAAQ,MACjBoB,GAAI,kEAEpBD,EAAe,sFAAwF,CACvFpB,EAAGA,IAAMC,EAAQ,KACjBoB,GAAI,8DAEpBD,EAAe,kGAAoG,CACnGpB,EAAGA,IAAMC,EAAQ,MACjBoB,GAAI,qEAEpB1I,OAAOwI,aAAexI,OAAOwI,cAAgB,GAC7CxI,OAAOwI,aAAaC,eAAc/J,EAAAA,EAAA,GACPsB,OAAOwI,aAAaC,gBAAkB,IACtCA,6tBC1DpB,MAAMtQ,UAA2BC,EAAAA,cAapCC,YAAYC,GACRC,MAAMD,GAbF,KAAAE,aAAuB,EAEd,KAAAC,qBAA+B,EAE/B,KAAAC,UAAoB,GAqcpB,KAAAY,qBAAuB,CAACC,EAA0BC,IAA0B,KACzF,MAAMC,EAAWD,GAAUA,EAAOC,SAAWD,EAAOC,SAAW,GACzDC,EAAiC,CAAC,CAAEC,IAAKJ,EAAkBK,QAASH,IAGtEI,EAAAA,gBAAgBC,YAAYN,EAAOO,qBACnCP,EAAOO,mBAAmBC,KAAIC,IAC1B,GAAIA,GAAQA,EAAKC,MAAO,CACpB,MAAMC,EAAWF,EAAKC,MAAMP,IACtBS,EAA+BH,EAAKC,MAAMG,cAChDX,EAAiBY,KAAK,CAClBX,IAAKQ,EACLP,QAASK,EAAKM,KACdF,cAAeD,EACfI,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,sBAK9D7B,KAAKC,SAAS,CACV6B,cAAejB,EAAiBkB,OAAS,EAAIlB,EAAmB,CAAC,CAAEC,IAAK,UACxEkB,qBAAsBpB,KAUb,KAAAqB,sBAAwB,CAACC,EAAqBC,IAAsB,KAC5EnC,KAAKP,MAAM2C,aASZpC,KAAKC,SAAS,CACVE,WAAY+B,EAAKG,GACjBjC,WAAY+B,KAVhBnC,KAAKC,SAAS,CACVE,WAAYH,KAAKsC,MAAMnC,YAAcH,KAAKsC,MAAMnC,aAAe+B,EAAKG,QAAME,EAAYL,EAAKG,GAC3FjC,WAAY+B,IAEZnC,KAAKP,MAAM+C,mBACXxC,KAAKS,qBAAqByB,EAAKO,YAAcP,EAA7ClC,IASRA,KAAK0C,eAMQ,KAAAA,YAAc,KACvB1C,KAAKP,MAAM2C,cACXO,YAAW,KACP3C,KAAK4C,UAAY5C,KAAK4C,SAASC,SAAW7C,KAAK4C,SAASC,QAAQC,UACjE,IAQM,KAAAC,oBAAuBC,IAChChD,KAAK4C,SAASC,UAAY7C,KAAK4C,SAASC,QAAQI,SAASD,EAAME,SAC/DlD,KAAKC,SAAS,CACVE,gBAAYoC,EACZT,cAAe,QASV,KAAAsB,oBAAuBJ,IAChChD,KAAK4C,SAASC,UAAY7C,KAAK4C,SAASC,QAAQI,SAASD,EAAMK,gBAC/DrD,KAAKsD,iBAiBI,KAAAC,aAAgBP,IAC7B,GAAIA,EAAMQ,UAAYxD,KAAKH,UAAW,CAClC,IAAKG,KAAKP,MAAM2C,aAAc,CAC1B,MAAM0N,EAAgBC,MAAMC,KAAKhQ,KAAK4C,SAASC,QAASoN,YACxD,IAAK,MAAM7O,KAAQ0O,EAAe,CAC9B,MAAMI,EAAkB9O,EAAK+O,WACyB,SAAlDD,EAAgBE,aAAa,kBAC7BF,EAAgBpN,SAI5B9C,KAAKsD,kBAII,KAAAG,kBAAqB3B,IAClC,IAAKA,IAAkBA,EAAchB,IACjC,OAAO,KAGX,MAAM4C,GAAmBC,EAAAA,EAAAA,kBAAiB7B,EAAchB,IAAKd,KAAKP,MAAMmE,QAAQC,cAAcC,eAAeC,aACvGC,EAAuC,CACzCC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCG,GAAI,CAAEL,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCI,UAAU,GAEd,QAAyBlC,IAArBmB,EAAgC,CAAC,IAADgB,EAAAC,EAChC,MAAMC,EAAwB,CAAE9D,IAAK4C,GACrC,OACInE,EAAAA,cAACsF,EAAAA,GAAKC,OAAAC,OAAA,CACFjB,eAAgB9D,KAAKP,MAAMmE,QAAQC,cAAcC,eACjDkB,UAAU,sBACNJ,EAAS,CACbK,aAAcjF,KAAKP,MAAMmE,QAAQsB,QAAQD,aACzCzD,cAAqF,QAAxEkD,EAA6B,QAA7BC,EAAE7C,EAAcN,qBAAa,IAAAmD,EAAAA,EAAI3E,KAAKP,MAAM0F,OAAOC,6BAAqB,IAAAV,EAAAA,EAAIV,EACzFqB,oBAAoB,OACpBC,KAAK,WACLjD,GAAI,GAAGP,EAAchB,qBACrBC,QAASe,EAAcf,WAInC,OAAO,MAOM,KAAAwE,gBAAmBC,IAChC,MAAM,eAAEC,GAAmBzF,KAAKsC,MAE1BoD,EAAU,CAAE,MADoCnD,IAA3BiD,EAAYG,WAA2BH,EAAYG,WAAa,IAC3DH,EAAYI,QAC5C5F,KAAKC,SAAS,CAAEwF,eAAcI,EAAAA,EAAA,GAAOJ,GAAmBC,MArlBxD1F,KAAK4C,SAAWrD,EAAAA,YAChBS,KAAKsC,MAAQ,CAAEnC,gBAAYoC,EAAWnC,gBAAYmC,EAAWP,qBAAsB,GAAIyD,eAAgB,IACvGzF,KAAKsD,cAAgBtD,KAAKsD,cAAc0C,KAAKhG,MAC7CA,KAAKuD,aAAevD,KAAKuD,aAAayC,KAAKhG,MAC3CA,KAAKiG,kBAAmBC,EAAAA,EAAAA,oBACpBlG,KAAKP,MAAMmE,QAAQsB,QAAQiB,kBAC3BnG,KAAKP,MAAM2G,aACXpG,KAAKP,MAAM4G,WAEfrG,KAAKsG,SAAUC,EAAAA,EAAAA,kBAAiB,QAASvG,KAAKiG,iBAAkB,GAAI,IAGjEa,oBACCC,EAAAA,GAASC,YACTI,SAASC,KAAKC,iBAAiB,UAAYtH,KAAKuD,cAA2C,GAC3F6D,SAASC,KAAKC,iBAAiB,YAAatH,KAAK+C,qBACjDqE,SAASC,KAAKC,iBAAiB,WAAYtH,KAAKoD,sBAIjDsE,uBACCX,EAAAA,GAASC,YACTI,SAASO,oBAAoB,UAAY3H,KAAKuD,cAA2C,GACzF6D,SAASC,KAAKM,oBAAoB,YAAa3H,KAAK+C,qBAAqB,GACzEqE,SAASC,KAAKM,oBAAoB,WAAY3H,KAAKoD,qBAAqB,IAIzEwE,SACH,MAAM,aAAExF,GAAiBpC,KAAKP,MAG9B,OADAO,KAAKL,aAAe,EACbJ,EAAAA,cAAAA,EAAAA,SAAA,KAAG6C,EAAepC,KAAK6H,oBAAsB7H,KAAK8H,sBAOrDD,oBACJ,MAAM,aAAEzF,EAAY,aAAEuG,EAAY,WAAER,GAAenI,KAAKP,MACxD,OACIF,EAAAA,cAAC6I,EAAAA,OAAMtD,OAAAC,OAAA,GAAKoD,EAAU,CAAEnD,UAAWqD,GAAAA,CAAWF,EAAWnD,UAAW5C,EAAe,cAAgB,kBAC9FuG,EAAaxH,KAAI,CAAC0H,EAAyBsB,IACjCnK,KAAKqQ,kBAAkBxH,EAAUF,EAAa5G,OAAQoI,EAAWnK,KAAKJ,yBAUrFkI,qBACJ,MAAM,SAAEC,EAAQ,WAAEI,GAAenI,KAAKP,MACtC,OACIF,EAAAA,cAAC6I,EAAAA,OAAMtD,OAAAC,OAAA,GAAKoD,EAAU,CAAEnD,UAAWqD,GAAAA,CAAWF,EAAWnD,aACrDzF,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAKgD,EAAQ,CAAEmB,IAAKlJ,KAAK4C,SAAU2F,SAAS,OAC5CvI,KAAKgK,mBAadqG,kBAAkBxH,EAAyBqB,EAAiBC,GAChE,OAAItB,GAAYA,EAASW,SAAWxI,EAAAA,gBAAgBC,YAAY4H,EAASW,SAC9DxJ,KAAKiK,cAAcpB,EAAUqB,EAASC,GAE1CnK,KAAK8J,oBAAoBjB,OAAUtG,GAAW,GAAM,EAAO2H,EAASC,GAUvEF,cAAcpB,EAAyBqB,EAAkBC,GAC7D,MAAMC,EAAmBvB,EAASjI,SAC5ByJ,EAAWrK,KAAKsC,MAAMmD,eACtBE,OAAkCpD,IAArB6H,EAAiCA,EAAmB,GACjEkG,OAAoB/N,IAAb8H,EAAyBA,EAAW,IAC3C,aAAEjI,GAAiBpC,KAAKP,MAE9B,IAAI6K,GAAe,EACfgG,EAAK3K,KACL2E,GAAe,GAEnB,MAAMC,EAA2B,CAAE3E,OAAQ0E,GAC3C,OACI/K,EAAAA,cAACiL,EAAAA,OAAM,CACHlF,KAAK,UACLmF,kBAAmB,CACf,eAAgBP,EAChB,gBAAiBC,EACjB7E,KAAM,YAEViL,UAAWnO,EAAeyG,EAAS0H,eAAYhO,EAC/CwG,IAAKF,EAASxG,GACd2C,UAAU,iBACV0F,UAAU,sBACVC,SAAU3K,KAAKuF,gBACfqF,cAAeL,EACfM,WAAW,uBACXC,eAAe,MACfV,iBAAkBpK,KAAK+K,gBAAgBX,EAAkBF,EAASC,IAElE5K,EAAAA,cAAA,OAAK+F,KAAK,WACLuD,EAASW,QAASrI,KAAI,CAAC6J,EAA4BC,KAAsB,IAAAC,EAChBC,EAAtD,OAAInK,EAAAA,gBAAgBC,YAAY+J,EAAYxB,SACjCxJ,KAAKiK,cAAce,EAA6B,QAAlBG,EAAEtC,EAASW,eAAO,IAAA2B,OAAA,EAAhBA,EAAkBpJ,OAAQkJ,EAAajL,KAAKJ,sBAEhFI,KAAKoL,kBAAkBJ,EAA6B,QAAlBE,EAAErC,EAASW,eAAO,IAAA0B,OAAA,EAAhBA,EAAkBnJ,OAAQkJ,EAAajL,KAAKJ,2BAcnGmL,gBAAgBnK,EAA8BsJ,EAA6BC,GAC/E,OACI5K,EAAAA,cAAA,uBAAoB2K,EAAO,gBAAiBC,GACvCvJ,GAYLwK,kBAAkBhK,EAAqB8I,EAA6BC,GACxE,OAAI/I,GAAQA,EAAKR,UAAYQ,EAAKuI,SAAWvI,EAAKuI,QAAQ5H,OAAS,EACxD/B,KAAK8J,oBAAoB1I,OAAMmB,GAAW,GAAM,EAAO2H,EAASC,GAChE/I,GAAQA,EAAKR,WAAaQ,EAAKuI,QAC/B3J,KAAK+J,oBAAoB3I,GAE7B,KAOH4I,iBACJ,MAAM,SAAEtB,EAAQ,aAAEC,EAAY,aAAEvG,GAAiBpC,KAAKP,OAChD,WAAEU,GAAeH,KAAKsC,MACtBsG,EAA8B,GAEpC,GAAIxG,QAA+BG,IAAfpC,GAA4BwI,EAAa5G,OAAS,EAAG,CACrE,IAAI8G,EAA0B,GAC9B,IAAK,MAAM2H,KAAiB7H,EAAc,CACtC,GAAI6H,GAAiBA,EAAcnO,KAAOlC,EAAY,CAClD0I,EAAW2H,EACXxQ,KAAKC,SAAS,CAAEG,gBAAYmC,IAC5B,MAGJ,GADAsG,EAAW7I,KAAKyQ,gBAAgBD,GAC5B3H,GAAYA,EAASxG,KAAOlC,EAC5B,MAIR0I,GACID,EAAanH,KACTlC,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CAACgE,IAAKF,EAASxG,IAAQqG,GACvB,IACA1I,KAAKsL,oBAAoBzC,GACzB,WAIbF,EAAa0C,SAAQ,CAACjK,EAAqBd,KACvCsI,EAAanH,KACTlC,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CAACgE,IAAKzI,GAAWoI,GACjB1I,KAAKsL,oBAAoBlK,QAM1C,OAAOwH,EAQH6H,gBAAgBrP,GACpB,MAAMmK,EAAWnK,GAAQA,EAAKoI,QAC9B,GAAI+B,GAAYA,EAASxJ,OAAS,EAC9B,IAAK,IAAI2O,EAAI,EAAGA,GAAKnF,EAASxJ,OAAS,EAAG2O,IAAK,CAC3C,GAAInF,EAASmF,GAAGrO,KAAOrC,KAAKsC,MAAMnC,WAE9B,OADAH,KAAKC,SAAS,CAAEG,WAAYgB,MAAAA,OAAI,EAAJA,EAAMiB,KAC3BkJ,EAASmF,GAEpB,MAAMnH,EAAQvJ,KAAKyQ,gBAAgBlF,EAASmF,IAC5C,GAAInH,EACA,OAAOA,EAInB,OAAO,KAQH+B,oBAAoB3C,GACxB,OAAIA,GAAgBA,EAAaa,SAAWb,EAAaa,QAAQzH,OAAS,EAClE/B,KAAKP,MAAM2C,mBAA0CG,IAA1BvC,KAAKsC,MAAMnC,WAC/BH,KAAKyJ,eAAed,EAAaa,QAASb,EAAatG,IAG9D9C,EAAAA,cAAAA,EAAAA,SAAA,KACKS,KAAK0J,sBAAsBf,GAC3B3I,KAAKyJ,eAAed,EAAaa,QAASb,EAAatG,KAGzDsG,GAAgBA,EAAa/H,UAAY+H,EAAagB,SAAWhB,EAAagB,QAAQ5H,OAAS,EAC/F/B,KAAK8J,oBAAoBnB,EAAcA,EAAatG,IAAI,GAAO,GAC/DsG,GAAgBA,EAAa/H,WAAa+H,EAAagB,QACvD3J,KAAK+J,oBAAoBpB,EAAcA,EAAatG,IAAI,GAG5D,KAGHoH,eAAe8B,EAA4BpL,EAAqBqL,GACpE,MAAM,aAAEpJ,EAAY,SAAEsG,GAAa1I,KAAKP,MAClCgM,EAAyBzL,KAAKP,MAAM0F,OAAOuG,uBAAwB,EAEnEC,EAA0B3L,KAAKP,MAAM0F,OAAOyG,kBAD7B,EAIrB,GAAIzL,GAAcH,KAAKsC,MAAMnC,aAAeA,EAExC,OADAH,KAAKP,MAAMmE,QAAQyC,UAAUwF,MAAM,gEAC5B,KAGX,IAAKN,GAAgC,IAApBA,EAASxJ,OAEtB,OADA/B,KAAKP,MAAMmE,QAAQyC,UAAUwF,MAAM,4DAC5B,KAGX,IAAIC,EAAyB,GAC7B,MAAMC,EACFR,GACAA,EAASpK,KAAI,CAACR,EAAuBqL,KACjC,MAAMC,EAAatL,EAAO6I,SAAW7I,EAAO6I,QAAQzH,OAAS,EAC7D,IAAI8G,EAMAW,EAJAX,EADAoD,GAAc7J,EACHpC,KAAK0J,sBAAsB/I,EAAQR,EAAY6L,GAE/CrL,EAAOgJ,QAAU3J,KAAK8J,oBAAoBnJ,EAAQqL,GAAOhM,KAAK+J,oBAAoBpJ,GAGjG,MAAMuL,EAAcD,GAAcR,GAA0BzL,KAAKL,cAAgBwM,KAAKC,MAAMT,GAA2B,EAMvH,OALIO,IACAlM,KAAKL,eACLmM,EAAiBL,EAAyB,SAASzL,KAAKL,aAAa0M,aAAe,GACpF7C,EAAUxJ,KAAKyJ,eAAe9I,EAAO6I,QAASpH,EAAezB,EAAO0B,QAAKE,GAAW,IAGpFhD,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAK2D,EAAQ,CAAEK,IAAKpI,EAAO0B,GAAI2C,UAAWqD,GAAAA,CAAWK,EAAS1D,UAAWkH,GAAe,iBACxFrD,EACAW,MAIjB,OAAOxJ,KAAKsM,YAAYR,EAAgBC,EAAa5L,EAAYqL,GAU7D9B,sBAAsB/I,EAAuBR,EAAqBG,GACtE,MAAM,OAAEiM,GAAWvM,KAAKP,MACxB,OACIF,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CACDgE,IAAKzI,GACDiM,EAAM,CACV/D,QAASxI,KAAKiC,sBAAsBtB,EAAQR,GAC5CqM,QAASxM,KAAKsD,cAAa,kBACVtD,KAAKsC,MAAMnC,YAAcH,KAAKsC,MAAMnC,aAAeQ,EAAO0B,IAAG,mBAC5DrC,KAAKsC,MAAMnC,YAAcH,KAAKsC,MAAMnC,aAAeQ,EAAO0B,IAAG,cAClElC,IAEZQ,EAAOC,UAeZkJ,oBACJnJ,EACAL,GAIiB,IAHjBoM,IAAAC,UAAA5K,OAAA,QAAAQ,IAAAoK,UAAA,KAAAA,UAAA,GACAC,EAAAD,UAAA5K,OAAA,QAAAQ,IAAAoK,UAAA,IAAAA,UAAA,GACAzC,EAAgByC,UAAA5K,OAAA,EAAA4K,UAAA,QAAApK,EAChB4H,EAAiBwC,UAAA5K,OAAA,EAAA4K,UAAA,QAAApK,EAEjB,MAAM,KAAEsK,EAAI,aAAEzK,GAAiBpC,KAAKP,MAC9BmB,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GAC/CkM,EAAcnM,EAAO8B,YAAc9B,EAAO8B,YAAc,GAC9DzC,KAAKsG,QAAQyG,cAAcC,MAAQpM,EACnC,MAAMqM,GAAaC,EAAAA,EAAAA,wBAAuBlN,KAAKiG,iBAAkBjG,KAAKsG,SACtE,OACI/G,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,gBACa3C,EAAe8H,OAAU3H,EAAS,gBACjCH,EAAe+H,OAAW5H,EAAS,aACtCH,EAAezB,EAAO4P,eAAYhO,GAC1CsK,EAAI,CACR9D,IAAKzI,EACLkM,QAASI,GAAY5M,KAAKsD,cAC1BJ,OAAQvC,EAAOwM,iBAAmB,cAAW5K,EAC7C6K,YAAaV,GAAe1M,KAAKS,qBAAqBqM,EAAanM,GACnE0M,KAAM1M,EAAOgJ,SACTsD,EAAU,CACdzE,SAAS8E,EAAAA,EAAAA,kBAAiBtN,KAAKiG,iBAAkBjG,KAAKsG,QAAS1F,KAE9DD,EAAOC,UAWZ2M,uBAAuB3M,EAAmBgB,GAC9C,MAAM,KAAEiL,GAAS7M,KAAKP,MACtBO,KAAKsG,QAAQyG,cAAcC,MAAQpM,EACnC,MAAMqM,GAAaC,EAAAA,EAAAA,wBAAuBlN,KAAKiG,iBAAkBjG,KAAKsG,SACtE,OAAI1F,GAAYgB,EAERrC,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAK8H,EAAI,CAAEQ,KAAMzL,GAAaqL,EAAU,CAAEzE,SAAS8E,EAAAA,EAAAA,kBAAiBtN,KAAKiG,iBAAkBjG,KAAKsG,QAAS1F,KACzGA,GAIN,KAUHmJ,oBAAoBpJ,EAAuBL,GAAyC,IAAzBsM,EAAAD,UAAA5K,OAAA,QAAAQ,IAAAoK,UAAA,IAAAA,UAAA,GAC/D,MAAM,KAAEa,GAASxN,KAAKP,MACtB,OACIF,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CAACgE,IAAKzI,GAAWkN,EAAI,CAAEhB,QAASI,GAAY5M,KAAKsD,gBACjD3C,EAAOC,UAaZ0L,YAAYmB,EAAe1B,EAA4B2B,EAAsBC,GACjF,MAAM,aAAEC,EAAY,SAAE7F,EAAQ,kBAAE8F,EAAiB,kBAAErL,EAAiB,aAAEJ,EAAY,uBAAE0L,GAA2B9N,KAAKP,MAC9GsO,GACD3L,GAAgBI,GAAkD,OAA7BxC,KAAKsC,MAAMR,oBAAuDS,IAA7BvC,KAAKsC,MAAMR,gBAAgC6L,EACpHK,GACD5L,GAAgB0L,GAA0B9M,EAAAA,gBAAgBC,YAAYjB,KAAKsC,MAAMR,iBAAmB6L,EACnGM,EAAoBjO,KAAKL,aAAe,GAAKoO,EAAuBH,EAAc5I,UAAY,kBAEpG,OADAhF,KAAKL,aAAe,EAEhBJ,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAK6I,EAAY,CAAE5I,UAAWiJ,IAC/B1O,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GACGgD,EAAQ,CACZ/C,UAAWqD,GAAAA,CACPN,EAAS/C,UACTyI,EACAM,GAAwB,gBACxBA,GACI/N,KAAKP,MAAM0F,OAAOyG,kBAClB5L,KAAKP,MAAM0F,OAAOyG,iBAAmB,GACrC,yBAGPG,GAELxM,EAAAA,cAAA,OAAKyF,UAAU,4BACV+I,GACG/N,KAAKsC,MAAMR,eACX9B,KAAKsC,MAAMR,cAAcX,KAAIC,IAAI,IAAA8M,EAAA,OAC7B3O,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CAACgE,IAAK3H,EAAKN,KAAS+M,EAAiB,CAAE7I,UAAW6I,EAAmB7I,YACrEhF,KAAKsC,MAAMR,eAAiB9B,KAAKyD,kBAAkBrC,GACnD4M,GAA6BhO,KAAKuN,uBAAuBnM,EAAKL,QAAkC,QAA3BmN,EAAE9M,EAAKO,4BAAoB,IAAAuM,OAAA,EAAzBA,EAA2BtM,eA+FvH0B,gBACCtD,KAAKP,MAAM2C,cACZpC,KAAKC,SAAS,CAAEE,gBAAYoC,KAqExC,yBC9mBO,IAAKoO,EASAC,2BATZ,SAAYD,GACRA,EAAAA,EAAA,eACAA,EAAAA,EAAA,qBAFJ,CAAYA,IAAAA,EAAe,KAS3B,SAAYC,GACRA,EAAA,UACAA,EAAA,gBAFJ,CAAYA,IAAAA,EAAU,4sBCUtB,MAAMC,UAAuBtR,EAAAA,cAyBzBC,YAAYC,GACRC,MAAMD,GAjBF,KAAAqR,UAAoB,EAEpB,KAAAC,OAAiB,EAmPR,KAAAC,qBAAwBC,IACrC,OAAQA,GACJ,IAAI,mBACAjR,KAAK8Q,UAAW,EAChB9Q,KAAK+Q,OAAQ,EACb,MACJ,IAAI,UACA/Q,KAAK8Q,UAAW,EAChB9Q,KAAK+Q,OAAQ,EACb,MACJ,IAAI,MACA/Q,KAAK8Q,UAAW,EAChB9Q,KAAK+Q,OAAQ,IA/OrB/Q,KAAKkR,gBAAkBlR,KAAKkR,gBAAgBlL,KAAKhG,MACjDA,KAAKmR,SACD1R,EAAMmE,QAAQsB,SAAWzF,EAAMmE,QAAQsB,QAAQkM,QAAgD,WAAtC3R,EAAMmE,QAAQsB,QAAQkM,OAAOC,KAAoB,KAAO,KACrHrR,KAAKgR,qBAAqBhR,KAAKP,MAAM0F,QAAUnF,KAAKP,MAAM0F,OAAOmM,sBACjEtR,KAAKsC,MAAQ,CAAEmE,SAAUzG,KAAKyG,UAC9BzG,KAAK4I,aAAe,GAhBjB,uBAAuB2I,EAAgBC,GAC1C,IAAIC,EAKJ,OAJIF,GAAUC,GAAoBA,EAAiBzP,OAAS,IACxD0P,EAAkBD,EAAiBE,MAAKtQ,GAAQA,EAAKuQ,SAAUC,gBAAkBL,EAAOK,iBAGrFH,GAAmBA,EAAgBI,KAapC,eACN,MAAyB,OAAlB7R,KAAKmR,UAAuC,OAAlBnR,KAAKmR,SAGnCrK,oBACCC,EAAAA,GAASC,YACThH,KAAK8R,6BAA8B5K,EAAAA,EAAAA,mBAAkBC,OAAQ,SAAUnH,KAAKkR,kBAEhFlR,KAAKkR,kBAGFxJ,uBACCX,EAAAA,GAASC,WACTG,OAAOQ,oBAAoB,SAAU3H,KAAK8R,6BAA8B,GAIzElK,SAAM,IAAAmK,EAAAC,EAET,GADAhS,KAAK4I,aAAe5I,KAAKiS,YACrBC,EAAAA,EAAAA,IAAoBlS,KAAKP,MAAMyC,MAE/B,OADAlC,KAAKP,MAAM4G,UAAUwF,MAAM,+BACpB,KAGX,MAQMsG,EAAStM,EAAAA,EAAAA,EAAA,GACR7F,KAAKP,OACLO,KAAKsC,OAAK,IACbd,cAXyC,CACzCyC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrC+N,GAAI,CAAEjO,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCI,UAAU,GAOVQ,aAAcjF,KAAKP,MAAMmE,QAAQsB,QAAQD,aACzCkD,WAAY,CACRkK,YAAarS,KAAKP,MAClBuF,UAAWqD,GAAAA,CAAW,SAAUrI,KAAKP,MAAM0F,OAAOH,UAAWhF,KAAKsC,MAAMmE,SAAW,YAAc,cACjG6L,IAAK,MACLhN,KAAMtF,KAAKyG,SAAW,UAAY,cAEtCsB,SAAU,CACN/C,UAAW,eACXsN,IAAK,KACLhN,KAAMtF,KAAKyG,SAAW,UAAY,QAEtCiC,SAAU,CACN1D,UAAW,qBACXM,KAAM,eACNgN,IAAK,MAET9P,kBAAyD,QAAxCuP,EAAE/R,KAAKP,MAAM0F,OAAOoN,4BAAoB,IAAAR,GAAAA,EACzDjE,uBAAiE,QAA3CkE,EAAEhS,KAAKP,MAAM0F,OAAOqN,+BAAuB,IAAAR,GAAAA,EACjEnF,KAAM,CACFyF,IAAK,IACLtN,UAAW,2BACXM,KAAMtF,KAAKyG,SAAW,SAAW,YAErCmH,aAAc,CACV0E,IAAK,MACLtN,UAAW,mBAEf6I,kBAAmB,CACfyE,IAAK,MACLtN,UAAW,iBACXM,KAAM,YAEViH,OAAQ,CACJvH,UAAW,6BACXsN,IAAK,SACLhN,KAAMtF,KAAKyG,SAAW,SAAW,WACjC+B,QAASxI,KAAKP,OAElBgT,eAAgB,CACZzN,UAAW,6BAEfwI,KAAM,CACFxI,UAAW,2BACXsN,IAAK,QAETrK,2BAA4B,CACxBjD,UAAW,mCAEfgD,iBAAkB,CACdhD,UAAW,0CACXsN,IAAK,SACL,aAActS,KAAKP,MAAMiT,UAAUC,oBACnCnK,QAASxI,KAAKP,OAElByI,uBAAwB,CACpBlD,UAAW,wCACXsN,IAAK,QAETlQ,aAAcpC,KAAKsC,MAAMmE,SACzBkC,aAAc3I,KAAK4I,aACnB5D,UAAWqD,GAAAA,CAAW,SAAUrI,KAAKP,MAAM0F,OAAOH,aAGtD,OAAOhF,KAAKP,MAAMmT,WAAWT,GAGzBF,WACJ,MAAM,KAAE/P,EAAI,OAAEiD,GAAWnF,KAAKP,MACxBoT,EAA8B,GAYpC,OAXI7S,KAAK8Q,UAAY5O,GAAQA,EAAK4Q,YAAc5Q,EAAK4Q,WAAWC,QAAU7Q,EAAK4Q,WAAWC,OAAOhR,OAAS,GACtGG,EAAK4Q,WAAWC,OAAO5R,KAAI,CAACC,EAAyBd,IACjDuS,EAAWpR,KAAKzB,KAAKgT,uBAAuB5R,OAAMmB,GAAW,EAAMjC,GAAO,MAI9EN,KAAK+Q,OAAS5L,EAAO8N,aAAe9N,EAAO8N,YAAYlR,OAAS,GAChEoD,EAAO8N,YAAY9R,KAAI,CAACC,EAAwB4K,IAC5C6G,EAAWpR,KAAKzB,KAAKgT,4BAAuBzQ,EAAWnB,GAAM,EAAO4K,EAAM,MAG3EhM,KAAKkT,0BAA0BL,GAGlCK,0BAA0BL,GAA2B,IAAAM,EAAAC,EAEzD,KAD0D,QAAlCD,EAAGnT,KAAKP,MAAM0F,OAAOkO,qBAAa,IAAAF,GAAAA,GAEtD,OAAON,EAEX,MAAMS,EAAsC,GACtCC,EAAU,CACZlR,GAAI,EACJzB,SAA8C,QAAtCwS,EAAEpT,KAAKP,MAAM0F,OAAOqO,0BAAkB,IAAAJ,EAAAA,EAAI,MAClDzJ,QAAS,IACTlH,iBAAaF,EACbiH,QAASqJ,GAIb,OAFAS,EAAmB7R,KAAK8R,GAEjBD,EAGHN,uBACJS,EACAC,EACA5C,EACA9E,EACA2H,GAEA,MAAMpC,EACFvR,KAAKP,MAAMmE,SAAW5D,KAAKP,MAAMmE,QAAQsB,SAAWlF,KAAKP,MAAMmE,QAAQsB,QAAQqM,OACzEvR,KAAKP,MAAMmE,QAAQsB,QAAQqM,OAC3B,SACJ,2BAAEqC,GAA+B5T,KAAKP,MAAM0F,OAC5C0O,EAAeH,GAAWA,EAAQ9S,UAAa,IAC/C,cAAEkT,GAAkB9T,KAAKP,MAAMiT,UAG/BqB,EACFN,IACAG,MAAAA,OAA0B,EAA1BA,EAA4BI,QAAOC,IAAS,IAAAC,EAAAC,EAAA,OAA0B,QAAtBD,EAAAD,EAAUG,oBAAY,IAAAF,OAAA,EAAtBA,EAAwBtC,kBAAkB6B,MAAAA,GAAgB,QAANU,EAAVV,EAAYY,YAAI,IAAAF,OAAA,EAAhBA,EAAkBvC,mBAGhH,IAAInP,EAAsB,QAIX,IAAD6R,EAAAC,EAAd,OAHIvT,EAAAA,gBAAgBC,YAAYwS,MAAAA,OAAU,EAAVA,EAAYe,SAAWf,EAAYe,OAAO,GAAGC,MACzEhS,EAAcgR,EAAYe,OAAO,GAAGC,KAEpC3D,EACO,CACHzO,GAAIwO,EAAe6D,eACnB9T,SAA8E,QAAtE0T,EAAEzD,EAAe8D,gBAAgBpD,EAAQkC,MAAAA,OAAU,EAAVA,EAAYmB,yBAAiB,IAAAN,EAAAA,EAAI,GAClF3K,QAAS8J,MAAAA,OAAU,EAAVA,EAAYoB,IACrBpS,YAAAA,EACA+G,QAASxJ,KAAK8U,mBAAmBrB,EAAYhR,EAAakR,GAC1DzS,mBAAoBlB,KAAKP,MAAM0F,OAAOqN,yBAA2BuB,EACjEgB,WAAYnE,EAAAA,EAAWoE,OACvBzE,UAAW,GAAuE,QAAvEgE,EAAG1D,EAAe8D,gBAAgBpD,EAAQkC,MAAAA,OAAU,EAAVA,EAAYmB,yBAAiB,IAAAL,EAAAA,EAAI,MAAMT,KAG7F,CACHzR,GAAIwO,EAAeoE,gBACnBrU,SAAUiT,EACVlK,QAAU+J,GAAWA,EAAQ9R,SAAW8R,EAAQ9R,QAAQC,gBAAmB,GAC3EqT,oBAAsBxB,GAAWA,EAAQyB,WAAazB,EAAQyB,UAAUtT,gBAAmB,GAC3FY,YAAciR,GAAWA,EAAQrS,OAASqS,EAAQrS,MAAMP,KAAQ,GAChE0I,QAASxJ,KAAKoV,sBAAsB1B,GACpCqB,WAAYnE,EAAAA,EAAWyE,IACvBlI,iBAAkBuG,MAAAA,OAAO,EAAPA,EAAS4B,aAC3B/E,UAAW,GAAGsD,KAAeC,KAI7BgB,mBAAmBS,EAA8BC,GAAsD,IAA7B7B,EAAAhH,UAAA5K,OAAA,QAAAQ,IAAAoK,UAAA,IAAAA,UAAA,GAC9E,MAAM8I,EAAkC,GACxC,OAAKF,GAAaA,EAASG,UAAyC,IAA7BH,EAASG,SAAS3T,SAGpD/B,KAAKP,MAAM0F,OAAOkO,eAAiBM,GACpC8B,EAAehU,KAAK,CAChBb,SAAUZ,KAAKP,MAAMiT,UAAUiD,oBAC/BlT,YAAa+S,EACb7L,SAASiM,EAAAA,EAAAA,gBAAeL,EAAWvV,KAAKP,MAAMmE,QAAuC,MAG7F2R,EAASG,SAASvU,KAAI,CAACC,EAAyBd,KAC5CmV,EAAehU,KAAKzB,KAAKgT,uBAAuB5R,OAAMmB,GAAW,EAAMjC,GAAO,OAE3EmV,GAZI,GAePL,sBAAsBG,GAC1B,MAAME,EAAkC,GAExC,OAAKF,GAAaA,EAAShK,UAAyC,IAA7BgK,EAAShK,SAASxJ,QAIzDwT,EAAShK,SAASpK,KAAI,CAACC,EAAqB4K,KACxCyJ,EAAehU,KAAKzB,KAAKgT,4BAAuBzQ,EAAWnB,GAAM,EAAO4K,OAErEyJ,GANI,GA2BPvE,kBACJlR,KAAKmR,SAAWnR,KAAK6V,eACrB7V,KAAKC,SAAS,CAAEwG,SAAUzG,KAAKyG,WAG3BoP,eACJ,MAAM,QAAEjS,GAAY5D,KAAKP,MAGzB,GAAImE,EAAQsB,SAAWtB,EAAQsB,QAAQkM,QAA0C,WAAhCxN,EAAQsB,QAAQkM,OAAOC,KACpE,MAAO,KAGX,GAAItK,EAAAA,GAASC,WAAaG,OAAO2O,WAAY,CACzC,MAAM7Q,EAAerB,EAAQsB,QAAQD,aACrC,GAAIA,EACA,OAAIA,EAAaf,IAAMiD,OAAO2O,YAAc7Q,EAAaf,GAAGE,EACjD,KACAa,EAAaX,IAAM6C,OAAO2O,YAAc7Q,EAAaX,GAAGF,EACxD,KACAa,EAAaV,IAAM4C,OAAO2O,YAAc7Q,EAAaV,GAAGH,EACxD,KACAa,EAAaT,IAAM2C,OAAO2O,YAAc7Q,EAAaT,GAAGJ,EACxD,KAEJ,KAIf,MAAO,MA5SIyM,EAAAoE,cAAwBtE,EAAAA,EAAgB0E,IAExCxE,EAAA6D,aAAuB/D,EAAAA,EAAgBqE,QAWtD7G,EAAAA,EAAAA,IAAA,CADC4H,EAAAA,IAAU,gCAsBD5H,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,6BA8Qb,qJC/TO,MAAM9O,UAA2BC,EAAAA,cAapCC,YAAYC,GACRC,MAAMD,GAXF,KAAAE,aAAuB,EAmTd,KAAAc,qBAAuB,CAACC,EAA0BC,IAA0B,KACzF,MAAMC,EAAWD,GAAUA,EAAOC,SAAWD,EAAOC,SAAW,GACzDC,EAAiC,CAAC,CAAEC,IAAKJ,EAAkBK,QAASH,IAGtEI,EAAAA,gBAAgBC,YAAYN,EAAOO,qBACnCP,EAAOO,mBAAmBC,KAAIC,IAC1B,GAAIA,GAAQA,EAAKC,MAAO,CACpB,MAAMC,EAAWF,EAAKC,MAAMP,IACtBS,EAA+BH,EAAKC,MAAMG,cAChDX,EAAiBY,KAAK,CAClBX,IAAKQ,EACLP,QAASK,EAAKM,KACdF,cAAeD,EACfI,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,sBAK9D7B,KAAKC,SAAS,CACV6B,cAAejB,EAAiBkB,OAAS,EAAIlB,EAAmB,CAAC,CAAEC,IAAK,UACxEkB,qBAAsBpB,KAIb,KAAAqB,sBAAwB,CAACC,EAAqBC,IAAsB,KAC5EnC,KAAKP,MAAM2C,cASZ9C,EAAmBS,aAAc,EACjCC,KAAKC,SAAS,CACVE,WAAY+B,EAAKG,GACjB9B,oBAAqB2B,EAAKtB,SAC1BR,WAAY+B,MAZhBnC,KAAKC,SAAS,CACVE,WAAYH,KAAKsC,MAAMnC,YAAcH,KAAKsC,MAAMnC,aAAe+B,EAAKG,QAAME,EAAYL,EAAKG,GAC3FjC,WAAY+B,IAEZnC,KAAKP,MAAM+C,mBACXxC,KAAKS,qBAAqByB,EAAKO,YAAcP,EAA7ClC,KAYK,KAAAF,cAAgB,IAAM,KACnCR,EAAmBS,aAAc,EACjCC,KAAKC,SAAS,CAAEE,WAAYH,KAAKsC,MAAMlC,cAO1B,KAAA2C,oBAAuBC,IAChChD,KAAK4C,SAASC,UAAY7C,KAAK4C,SAASC,QAAQI,SAASD,EAAME,SAC/DlD,KAAKC,SAAS,CACVE,gBAAYoC,EACZhC,oBAAqB,GACrBuB,cAAe,QASV,KAAAsB,oBAAuBJ,IAChChD,KAAK4C,SAASC,UAAY7C,KAAK4C,SAASC,QAAQI,SAASD,EAAMK,gBAC/DrD,KAAKsD,iBAWI,KAAAjD,uBAAyB,CAACC,EAAeC,EAA8BC,KAC/ElB,EAAmBS,aAAyB,IAAVO,MAGlCE,IAAmBD,IAGjBA,IAAwBC,EASlB,KAAAiD,kBAAqB3B,IAClC,IAAKA,IAAkBA,EAAchB,IACjC,OAAO,KAGX,MACMkD,EAAuC,CACzCC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCG,GAAI,CAAEL,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCI,UAAU,GAEuB,IAADC,EAAAC,EAApC,YAAyBpC,KAVAoB,EAAAA,EAAAA,kBAAiB,GAAG7B,EAAchB,MAAOd,KAAKP,MAAMmE,QAAQC,cAAcC,eAAeC,aAY1GxE,EAAAA,cAACsF,EAAAA,GAAKC,OAAAC,OAAA,CACFjB,eAAgB9D,KAAKP,MAAMmE,QAAQC,cAAcC,eACjDkB,UAAU,sBACNlD,EAAa,CACjBmD,aAAcjF,KAAKP,MAAMmE,QAAQsB,QAAQD,aACzCzD,cAAqF,QAAxEkD,EAA6B,QAA7BC,EAAE7C,EAAcN,qBAAa,IAAAmD,EAAAA,EAAI3E,KAAKP,MAAM0F,OAAOC,6BAAqB,IAAAV,EAAAA,EAAIV,EACzFqB,oBAAoB,OACpBC,KAAK,WACLjD,GAAG,kCACHtB,QAASe,EAAcf,WAI5B,MAraPf,KAAK4C,SAAWrD,EAAAA,YAChBS,KAAK+F,YAAcxG,EAAAA,YACnBS,KAAKsC,MAAQ,CAAEnC,gBAAYoC,EAAWhC,oBAAqB,GAAIH,gBAAYmC,EAAWP,qBAAsB,IAC5GhC,KAAKsD,cAAgBtD,KAAKsD,cAAc0C,KAAKhG,MAC7CA,KAAKiG,kBAAmBC,EAAAA,EAAAA,oBACpBlG,KAAKP,MAAMmE,QAAQsB,QAAQiB,kBAC3BnG,KAAKP,MAAM2G,aACXpG,KAAKP,MAAM4G,WAEfrG,KAAKsG,SAAUC,EAAAA,EAAAA,kBAAiB,QAASvG,KAAKiG,iBAAkB,GAAI,IAGjEa,oBACCC,EAAAA,GAASC,YACTI,SAASC,KAAKC,iBAAiB,YAAatH,KAAK+C,qBACjDqE,SAASC,KAAKC,iBAAiB,WAAYtH,KAAKoD,sBAIjDmE,qBAAkB,IAAAC,EACO,QAAxBA,EAAAxH,KAAK+F,YAAYlD,eAAO,IAAA2E,GAAxBA,EAA0BC,SAAS,IAAMzH,KAAKP,MAAM2C,cACnDpC,KAAK+F,YAAYlD,QAAQ4E,SAAS,GAAmB3E,QAIvD4E,uBACCX,EAAAA,GAASC,YACTI,SAASC,KAAKM,oBAAoB,YAAa3H,KAAK+C,qBAAqB,GACzEqE,SAASC,KAAKM,oBAAoB,WAAY3H,KAAKoD,qBAAqB,IAIzEwE,SACH,MAAM,aAAExF,EAAY,SAAE2F,EAAQ,iBAAEC,EAAgB,2BAAEC,EAA0B,uBAAEC,EAAsB,WAAEC,GAAenI,KAAKP,MAG1H,OADAO,KAAKL,aAAe,EAEhBJ,EAAAA,cAAC6I,EAAAA,OAAMtD,OAAAC,OAAA,GACCoD,EAAU,CACdnD,UAAWqD,GAAAA,CAAWF,EAAWnD,UAAW5C,QAA0CG,IAA1BvC,KAAKsC,MAAMnC,WAA2B,QAAU,YAE5GZ,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAKgD,EAAQ,CAAEmB,IAAKlJ,KAAK4C,SAAU2F,SAAS,OAC5CnG,QAA0CG,IAA1BvC,KAAKsC,MAAMnC,YACxBZ,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAKkD,GACN1I,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAKiD,EAAgB,CAAEQ,QAASxI,KAAKF,mBAC1CP,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAKmD,GAAyBlI,KAAKsC,MAAM/B,sBAGrDP,KAAKgK,mBAMdA,iBACJ,MAAM,SAAEtB,EAAQ,aAAEC,EAAY,aAAEvG,GAAiBpC,KAAKP,OAChD,WAAEU,GAAeH,KAAKsC,MACtBsG,EAA8B,GAEpC,GAAIxG,QAA+BG,IAAfpC,GAA4BwI,EAAa5G,OAAS,EAAG,CACrE,IAAI8G,EAA0B,GAC9B,IAAK,MAAM2H,KAAiB7H,EAAc,CACtC,GAAI6H,GAAiBA,EAAcnO,KAAOlC,EAAY,CAClD0I,EAAW2H,EACVlR,EAAmBS,YAEdC,KAAKC,SAAS,CAAEG,gBAAYmC,EAAWhC,oBAAqBiQ,EAAc5P,WAD1EZ,KAAKC,SAAS,CAAEG,gBAAYmC,IAElC,MAGJ,GADAsG,EAAW7I,KAAKyQ,gBAAgBD,GAC5B3H,GAAYA,EAASxG,KAAOlC,EAC5B,MAIR0I,GACID,EAAanH,KACTlC,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CAACgE,IAAKF,EAASxG,IAAQqG,GACvB,IACA1I,KAAKsL,oBAAoBzC,GAAW,WAIjDF,EAAa0C,SAAQ,CAACjK,EAAqBd,KACvCsI,EAAanH,KACTlC,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CACDgE,IAAKzI,GACDoI,EAAQ,CACZQ,IAAKlJ,KAAKK,uBAAuBC,EAAON,KAAKsC,MAAM/B,oBAAqBa,EAAKR,UAAYZ,KAAK+F,YAAc,OAE3G/F,KAAKsL,oBAAoBlK,QAM1C,OAAOwH,EAGH6H,gBAAgBrP,GACpB,MAAMmK,EAAWnK,GAAQA,EAAKoI,QAC9B,GAAI+B,GAAYA,EAASxJ,OAAS,EAC9B,IAAK,IAAI2O,EAAI,EAAGA,GAAKnF,EAASxJ,OAAS,EAAG2O,IAAK,CAC3C,GAAInF,EAASmF,GAAGrO,KAAOrC,KAAKsC,MAAMnC,WAI9B,OAHCb,EAAmBS,YAEdC,KAAKC,SAAS,CAAEG,WAAYgB,GAAQA,EAAKiB,GAAI9B,oBAAqBgL,EAASmF,GAAG9P,WAD9EZ,KAAKC,SAAS,CAAEG,WAAYgB,MAAAA,OAAI,EAAJA,EAAMiB,KAEjCkJ,EAASmF,GAEpB,MAAMnH,EAAQvJ,KAAKyQ,gBAAgBlF,EAASmF,IAC5C,GAAInH,EACA,OAAOA,EAKnB,OADAvJ,KAAKP,MAAMmE,QAAQyC,UAAUwF,MAAM,iDAC5B,KAGHP,oBAAoB3C,GACxB,OAAIA,GAAgBA,EAAaa,SAAWb,EAAaa,QAAQzH,OAAS,EAClE/B,KAAKP,MAAM2C,mBAA0CG,IAA1BvC,KAAKsC,MAAMnC,WAC/BH,KAAKyJ,eAAed,EAAaa,QAASb,EAAatG,IAAI,GAGlE9C,EAAAA,cAAAA,EAAAA,SAAA,KACKS,KAAK0J,sBAAsBf,GAC3B3I,KAAKyJ,eAAed,EAAaa,QAASb,EAAatG,IAAI,IAG7DsG,GAAgBA,EAAa/H,UAAY+H,EAAagB,SAAWhB,EAAagB,QAAQ5H,OAAS,EAC/F/B,KAAK8J,oBAAoBnB,EAAcA,EAAatG,IAAI,GAAO,GAC/DsG,GAAgBA,EAAa/H,WAAa+H,EAAagB,QACvD3J,KAAK+J,oBAAoBpB,EAAcA,EAAatG,IAAI,IAEnErC,KAAKP,MAAMmE,QAAQyC,UAAUwF,MAAM,yDAC5B,MAGHpC,eAAe8B,EAA4BpL,EAAqBqL,GACpE,MAAM,aAAEpJ,EAAY,SAAEsG,GAAa1I,KAAKP,MAClCgM,EAAyBzL,KAAKP,MAAM0F,OAAOuG,uBAAwB,EACnEC,EAA0B3L,KAAKP,MAAM0F,OAAOyG,kBAAoB,EAGtE,GAAIzL,GAAcH,KAAKsC,MAAMnC,aAAeA,EAExC,OADAH,KAAKP,MAAMmE,QAAQyC,UAAUwF,MAAM,gEAC5B,KAGX,IAAKN,GAAgC,IAApBA,EAASxJ,OAEtB,OADA/B,KAAKP,MAAMmE,QAAQyC,UAAUwF,MAAM,4DAC5B,KAGX,IAAIC,EAAyB,GAC7B,MAAMC,EACFR,GACAA,EAASpK,KAAI,CAACR,EAAuBqL,KACjC,MAAMC,EAAatL,EAAO6I,SAAW7I,EAAO6I,QAAQzH,OAAS,EAC7D,IAAI8G,EAOAW,EALAX,EADAoD,GAAc7J,EACHpC,KAAK0J,sBAAsB/I,EAAQR,EAAY6L,GAE/CrL,EAAOgJ,QAAU3J,KAAK8J,oBAAoBnJ,EAAQqL,GAAOhM,KAAK+J,oBAAoBpJ,GAIjG,MAAMuL,EAAcD,GAAcR,GAA0BzL,KAAKL,cAAgBwM,KAAKC,MAAMT,GAA2B,EAMvH,OALIO,IACAlM,KAAKL,eACLmM,EAAiBL,EAAyB,SAASzL,KAAKL,aAAa0M,aAAe,GACpF7C,EAAUxJ,KAAKyJ,eAAe9I,EAAO6I,QAASpH,EAAezB,EAAO0B,QAAKE,GAAW,IAGpFhD,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GACG2D,EAAQ,CACZK,IAAKpI,EAAO0B,GACZ2C,UAAWqD,GAAAA,CAAWK,EAAS1D,UAAWkH,GAAe,eACzDhD,IAAKlJ,KAAKK,uBAAuB2L,EAAKhM,KAAKsC,MAAM/B,oBAAqBI,EAAOC,UAAYZ,KAAK+F,YAAc,OAE3G8C,EACAW,MAIjB,OAAOxJ,KAAKsM,YAAYR,EAAgBC,EAAa5L,EAAYqL,GAG7D9B,sBAAsB/I,EAAuBR,EAAqBG,GACtE,MAAM,OAAEiM,GAAWvM,KAAKP,MACxB,OACIF,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CACDgE,IAAKzI,GACDiM,EAAM,CACV/D,QAASxI,KAAKiC,sBAAsBtB,EAAQR,GAC5CqM,QAASxM,KAAKsD,cAAa,kBACVtD,KAAKsC,MAAMnC,YAAcH,KAAKsC,MAAMnC,aAAeQ,EAAO0B,IAAG,mBAC5DrC,KAAKsC,MAAMnC,YAAcH,KAAKsC,MAAMnC,aAAeQ,EAAO0B,IAAG,cAClElC,IAEZQ,EAAOC,UAKZkJ,oBACJnJ,EACAL,GAEyB,IADzBoM,IAAAC,UAAA5K,OAAA,QAAAQ,IAAAoK,UAAA,KAAAA,UAAA,GACAC,EAAAD,UAAA5K,OAAA,QAAAQ,IAAAoK,UAAA,IAAAA,UAAA,GAEA,MAAM,KAAEE,GAAS7M,KAAKP,MAChBmB,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GAC/CkM,EAAcnM,EAAO8B,YAAc9B,EAAO8B,YAAc,GAC9DzC,KAAKsG,QAAQyG,cAAcC,MAAQpM,EACnC,MAAMqM,GAAaC,EAAAA,EAAAA,wBAAuBlN,KAAKiG,iBAAkBjG,KAAKsG,SACtE,OACI/G,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GACG8H,EAAI,CACR9D,IAAKzI,EACLkM,QAASI,GAAY5M,KAAKsD,cAC1BJ,OAAQvC,EAAOwM,iBAAmB,cAAW5K,EAC7C6K,YAAaV,GAAe1M,KAAKS,qBAAqBqM,EAAanM,GACnE0M,KAAM1M,EAAOgJ,SACTsD,EAAU,CACdzE,SAAS8E,EAAAA,EAAAA,kBAAiBtN,KAAKiG,iBAAkBjG,KAAKsG,QAAS1F,KAE9DD,EAAOC,UAKZ2M,uBAAuB3M,EAAmBgB,GAC9C,MAAM,KAAEiL,GAAS7M,KAAKP,MACtBO,KAAKsG,QAAQyG,cAAcC,MAAQpM,EACnC,MAAMqM,GAAaC,EAAAA,EAAAA,wBAAuBlN,KAAKiG,iBAAkBjG,KAAKsG,SACtE,OAAI1F,GAAYgB,EAERrC,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAK8H,EAAI,CAAEQ,KAAMzL,GAAaqL,EAAU,CAAEzE,SAAS8E,EAAAA,EAAAA,kBAAiBtN,KAAKiG,iBAAkBjG,KAAKsG,QAAS1F,KACzGA,GAIN,KAGHmJ,oBAAoBpJ,EAAuBL,GAAyC,IAAzBsM,EAAAD,UAAA5K,OAAA,QAAAQ,IAAAoK,UAAA,IAAAA,UAAA,GAC/D,MAAM,KAAEa,GAASxN,KAAKP,MACtB,OACIF,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CAACgE,IAAKzI,GAAWkN,EAAI,CAAEhB,QAASI,GAAY5M,KAAKsD,gBACjD3C,EAAOC,UAKZ0L,YAAYmB,EAAe1B,EAA4B2B,EAAsBC,GACjF,MAAM,aAAEC,EAAY,SAAE7F,EAAQ,kBAAE8F,EAAiB,kBAAErL,EAAiB,uBAAEsL,EAAsB,aAAE1L,GAAiBpC,KAAKP,MAC9GsO,GACD3L,IACAI,GAAqBsL,KACrB9M,EAAAA,gBAAgBC,YAAYjB,KAAKsC,MAAMR,iBACvC6L,EACCK,GACD5L,GAAgB0L,GAA0B9M,EAAAA,gBAAgBC,YAAYjB,KAAKsC,MAAMR,iBAAmB6L,EACnGM,EAAoBjO,KAAKL,aAAe,GAAKoO,EAAuBH,EAAc5I,UAAY,kBAEpG,OADAhF,KAAKL,aAAe,EAEhBJ,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAK6I,EAAY,CAAE5I,UAAWiJ,IAC/B1O,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GACGgD,EAAQ,CACZ/C,UAAWqD,GAAAA,CACPN,EAAS/C,UACTyI,EACAM,GAAwB,gBACxBA,GACI/N,KAAKP,MAAM0F,OAAOyG,kBAClB5L,KAAKP,MAAM0F,OAAOyG,iBAAmB,GACrC,yBAGPG,GAEJgC,GACG/N,KAAKsC,MAAMR,eACX9B,KAAKsC,MAAMR,cAAcX,KAAIC,IAAI,IAAA8M,EAAA,OAC7B3O,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAK8I,EAAiB,CAAE9E,IAAK3H,EAAKN,IAAKkE,UAAW6I,EAAmB7I,YACrEhF,KAAKsC,MAAMR,eAAiB9B,KAAKyD,kBAAkBrC,GACnD4M,GAA6BhO,KAAKuN,uBAAuBnM,EAAKL,QAAkC,QAA3BmN,EAAE9M,EAAKO,4BAAoB,IAAAuM,OAAA,EAAzBA,EAA2BtM,cAiGnH0B,gBACCtD,KAAKP,MAAM2C,cACZpC,KAAKC,SAAS,CAAEE,gBAAYoC,EAAWT,cAAe,KAAMvB,oBAAqB,MAjZ1EjB,EAAAS,aAAuB,EAub1C,4DCzbYV,wHAAZ,SAAYA,GACRA,EAAAA,EAAA,eACAA,EAAAA,EAAA,aACAA,EAAAA,EAAA,aACAA,EAAAA,EAAA,iBACAA,EAAAA,EAAA,eACAA,EAAAA,EAAA,0BACAA,EAAAA,EAAA,uBAPJ,CAAYA,IAAAA,EAAgB,KAsBrB,MAAM2W,EAAmBA,CAACvW,EAAqCqC,EAAuBmU,KACzF,MAAMvS,GAAmBC,EAAAA,EAAAA,kBAAiB,GAAG7B,IAAiBrC,EAAMyW,SAAStS,QAAQC,cAAcC,eAAeC,aAC5GC,EAAgD,CAClDC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCG,GAAI,CAAEL,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCI,UAAU,GAEd,QAAyBlC,IAArBmB,EAAgC,CAAC,IAADyS,EAChC,MAAMC,EAAiC,CAAEtV,IAAK4C,GAC9C,OACInE,EAAAA,cAAC8W,EAAAA,GAAcvR,OAAAC,OAAA,CACXjB,eAAgBrE,EAAMyW,SAAStS,QAAQC,cAAcC,eACrDkB,UAAU,sBACNoR,EAAS,CACbnR,aAAcxF,EAAMyW,SAAStS,QAAQsB,QAAQD,aAC7CzD,cAA0D,QAA7C2U,EAAE1W,EAAMyW,SAAS/Q,OAAOC,6BAAqB,IAAA+Q,EAAAA,EAAInS,EAC9DqB,oBAAoB,OACpBC,KAAK,WACLvE,QAASkV,KAIrB,OAAO,2kBC/CJ,MAAMK,UAAmC/W,EAAAA,cAuB5CC,YAAmBC,GACfC,MAAMD,GArBO,KAAA8W,eAAyBlX,EAAiBmX,KAEnD,KAAA7W,aAAuBN,EAAiBoX,KAM/B,KAAA5W,UAAoBR,EAAiBQ,UAIrC,KAAAgB,iBAA0C,GAmG1C,KAAA6V,cAAgB,KAC7B1W,KAAKC,UAASC,IAAa,CACvBC,WAAY,EACZwW,WAAYzW,EAAcyW,eA2QjB,KAAAC,0BAA4B,CAACC,EAA4BvM,IAA0B,KAChG,MAAM,eAAE7E,GAAmBzF,KAAKsC,MAC1BoD,EAAU,CAAE,CAACmR,IAAWvM,GAC9BtK,KAAKC,SAAS,CAAEwF,eAAcI,EAAAA,EAAA,GAAOJ,GAAmBC,MAmI3C,KAAAjF,qBAAuB,CAACqW,EAA6BnW,IAA0B,KAC5F,MAAMC,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GAC/CC,EAA0C,CAAC,CAAEC,IAAKgW,EAAqB/V,QAASH,IAGtF,GAAII,EAAAA,gBAAgBC,YAAYN,EAAOO,oBACnC,IAAK,MAAME,KAAQT,EAAOO,mBAAoB,CAC1C,MAAMuB,EAAcrB,EAAKC,MAAMP,IAC/BD,EAAiBY,KAAK,CAClBX,IAAK2B,EACL1B,QAASK,EAAKM,KACdC,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,kBAI1D7B,KAAKC,SAAS,CACV6B,cAAed,EAAAA,gBAAgBC,YAAYJ,GAAoBA,EAAmB,CAAC,CAAEC,IAAK,aAUjF,KAAAmB,sBAAwB,CAACC,EAAqBC,IAAsB,KAC5EnC,KAAKsC,MAAMa,cASZmT,EAA2BvW,aAAc,EACzCC,KAAKC,SAAS,CACVE,WAAY+B,EAAKG,GACjB9B,oBAAqB2B,EAAKtB,SAC1BR,WAAY+B,MAZhBnC,KAAKC,SAAS,CACVE,WAAY+B,EAAKG,GACjBjC,WAAY+B,IAEZnC,KAAKP,MAAMyW,SAAS1T,mBACpBxC,KAAKS,qBAAqByB,EAAKO,YAAcP,EAA7ClC,KAgBK,KAAAF,cAAgB,IAAM,KACnCwW,EAA2BvW,aAAc,EACzCC,KAAKC,UAASC,IAAa,CAAOC,WAAYD,EAAcE,gBAO/C,KAAA2C,oBAAuBC,IAChChD,KAAK4C,SAASC,UAAY7C,KAAK4C,SAASC,QAAQI,SAASD,EAAME,UAC1DlD,KAAKsC,MAAMa,aAGZnD,KAAKC,SAAS,CAAEE,gBAAYoC,EAAWhC,oBAAqB,GAAIoW,WAAW,IAF3E3W,KAAKC,SAAS,CAAEE,WAAY,EAAGI,oBAAqB,GAAIoW,WAAW,MAc9D,KAAAtW,uBAAyB,CAACC,EAAeC,EAA8BC,KAE/E8V,EAA2BvW,aADL,IACoBO,MAG1CE,IAAmBD,IAGjBA,IAAwBC,EAMlB,KAAAuW,cAAgB,KAAW,IAAAC,EACnChX,KAAKsC,MAAMa,aAGZnD,KAAKC,SAAS,CAAEE,gBAAYoC,EAAWhC,oBAAqB,GAAIoW,WAAW,IAF3E3W,KAAKC,SAAS,CAAEE,WAAY,EAAGI,oBAAqB,GAAIoW,WAAW,IAIjD,QAArBK,EAAAhX,KAAK4C,SAASC,eAAO,IAAAmU,GAArBA,EAAuBvP,SAAS,GAAmB3E,SAOvC,KAAAS,aAAgBP,IAC8D,IAADiU,EAAtFjU,EAAMQ,UAAYxD,KAAKH,YAAcG,KAAKsC,MAAMa,cAAgBnD,KAAKsC,MAAMqU,YAC3E3W,KAAKC,SAAS,CAAEE,WAAY,EAAGI,oBAAqB,GAAIoW,WAAW,IAC7C,QAArBM,EAAAjX,KAAK4C,SAASC,eAAO,IAAAoU,GAArBA,EAAuBxP,SAAS,GAAmB3E,UAO3C,KAAAgD,sBAAwB,KACrC9F,KAAKC,SAAS,CAAEkD,aAAcnD,KAAKmD,gBA9lBnCnD,KAAK4C,SAAWrD,EAAAA,YAChBS,KAAK+F,YAAcxG,EAAAA,YACnB,MAAM,aAAEoJ,GAAiB3I,KAAKP,MAAMyW,SACpC,GAAIlV,EAAAA,gBAAgBC,YAAY0H,IAAiB3H,EAAAA,gBAAgBC,YAAY0H,EAAa,GAAGa,SAAU,CACnG,MAAMsD,EAAcnE,EAAa,GAAGa,QAAQ,GAAG/G,YAAckG,EAAa,GAAGa,QAAQ,GAAG/G,YAAc,GAChG7B,EAAW+H,EAAa,GAAGa,QAAQ,GAAG5I,SAAW+H,EAAa,GAAGa,QAAQ,GAAG5I,SAAW,GAC7FZ,KAAKa,iBAAmB,CAAC,CAAEC,IAAKgM,EAAa/L,QAASH,IAGlDI,EAAAA,gBAAgBC,YAAY0H,EAAa,GAAGa,QAAQ,GAAGtI,qBACvDyH,EAAa,GAAGa,QAAQ,GAAGtI,mBAAmBC,KAAIC,IAC9C,MAAMqB,EAAcrB,EAAKC,MAAMP,IAM/B,OALAd,KAAKa,iBAAiBY,KAAK,CACvBX,IAAK2B,EACL1B,QAASK,EAAKM,KACdC,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,kBAE3C,QAKnB7B,KAAKsC,MAAQ,CACTnC,WAAY,EACZI,oBAAqB,GACrBH,gBAAYmC,EACZkD,eAAgB,GAChBtC,aAAcnD,KAAKmD,aACnBrB,cAAe9B,KAAKa,iBACpB8V,WAAW,GAEf3W,KAAKiG,kBAAmBC,EAAAA,EAAAA,oBACpBlG,KAAKP,MAAMyW,SAAStS,QAAQsB,QAAQiB,kBACpCnG,KAAKP,MAAMyW,SAAS9P,aACpBpG,KAAKP,MAAMyW,SAAS7P,WAExBrG,KAAKsG,SAAUC,EAAAA,EAAAA,kBAAiB,QAASvG,KAAKiG,iBAAkB,GAAI,IACpEjG,KAAKiN,YAAaC,EAAAA,EAAAA,wBAAuBlN,KAAKiG,iBAAkBjG,KAAKsG,SAG/D,mBACN,MAAoG,QAA7FG,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAYC,QAAShD,QAAS5D,KAAKP,MAAMyW,SAAStS,QAAQsB,UAGlF4B,oBACH9G,KAAKiH,mCAAoCC,EAAAA,EAAAA,mBAAkBC,OAAQ,SAAUnH,KAAK8F,uBAClFsB,SAASE,iBAAiB,UAAYtH,KAAKuD,cAA2C,GACtFvD,KAAK8F,wBACLsB,SAASC,KAAKC,iBAAiB,YAAatH,KAAK+C,qBAG9CwE,qBAAkB,IAAAC,EACO,QAAxBA,EAAAxH,KAAK+F,YAAYlD,eAAO,IAAA2E,GAAxBA,EAA0BC,SAAS,IAAMzH,KAAKP,MAAMyW,SAAS9T,cAC5DpC,KAAK+F,YAAYlD,QAAQ4E,SAAS,GAAmB3E,QAIvD4E,uBACHP,OAAOQ,oBAAoB,SAAU3H,KAAKiH,mCAAoC,GAC9EG,SAASC,KAAKM,oBAAoB,YAAa3H,KAAK+C,qBAAqB,GAGtE6E,SACH5H,KAAKL,aAAe,EAEpB,OACIJ,EAAAA,cAAC+I,EAAAA,KAAI,CAACtD,UAAU,qBAAqBkE,IAAKlJ,KAAK4C,UAC1C5C,KAAKsC,MAAMa,aACRnD,KAAK6H,oBAELtI,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACgN,EAAAA,OAAMzH,OAAAC,OAAA,CACHC,UAAU,sBACVwD,QAASxI,KAAK0W,cAAa,gBAT7B,oBAWEQ,MAAOlX,KAAKP,MAAMyW,SAASxD,UAAUyE,mBAAkB,aAC3CnX,KAAKP,MAAMyW,SAASxD,UAAUyE,oBACtCnX,KAAKiN,aAEZjN,KAAKoX,wBAiBlBA,sBACJ,OACI7X,EAAAA,cAAC8X,EAAAA,SAAQ,CAACrS,UAAU,mCAAmCY,OAAQ5F,KAAKsC,MAAMqU,WACrE3W,KAAKsC,MAAMa,aAAenD,KAAK6H,oBAAsB7H,KAAK8H,sBAK/DD,oBACJ,MAAM,SAAEE,EAAQ,iBAAEC,EAAgB,2BAAEC,EAA0B,uBAAEC,EAAsB,WAAEC,GAAenI,KAAKP,MAAMyW,SAGlH,OADAlW,KAAKL,aAAe,EAEhBJ,EAAAA,cAAC6I,EAAAA,OAAMtD,OAAAC,OAAA,GACCoD,EAAU,CACdnD,UAAWqD,GAAAA,CACPF,EAAWnD,UACXhF,KAAKsC,MAAMa,mBAA0CZ,IAA1BvC,KAAKsC,MAAMnC,WAA2B,QAAU,YAG/EZ,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAKgD,EAAQ,CAAEQ,SAAS,OACxBvI,KAAKsC,MAAMa,mBAA0CZ,IAA1BvC,KAAKsC,MAAMnC,YACnCZ,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAKkD,GACN1I,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAKiD,EAAgB,CAAEQ,QAASxI,KAAKF,mBAC1CP,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAKmD,GAAyBlI,KAAKsC,MAAM/B,sBAGrDP,KAAKgK,mBAMdlC,qBACJ,MAAM,SAAEC,EAAQ,WAAEI,GAAenI,KAAKP,MAAMyW,SAE5C,OACI3W,EAAAA,cAAC6I,EAAAA,OAAMtD,OAAAC,OAAA,GAAKoD,EAAU,CAAEnD,UAAWqD,GAAAA,CAAWF,EAAWnD,UAAW,8BAChEzF,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAKgD,EAAQ,CAAEQ,SAAS,OACxBvI,KAAKgK,iBACNzK,EAAAA,cAAA,OAAKyF,UAAU,uBACXzF,EAAAA,cAAA,UAAQyF,UAAU,qBAAoB,aAAY,QAAQwD,QAASxI,KAAK+W,mBAOpF3L,kBAAkBhK,GACtB,OAAIA,EAAKuI,UAAYC,EAAAA,iBAAiBC,mBAAmBzI,EAAKuI,SACnD3J,KAAK8J,oBAAoB1I,GACxBA,EAAKuI,QAGV,KAFI3J,KAAK+J,oBAAoB3I,GAKhC4I,iBACJ,MAAM,SAAEtB,GAAa1I,KAAKP,MAAMyW,SAC1BvN,EAAgC3I,KAAKP,MAAMyW,SAASvN,cACpD,WAAExI,GAAeH,KAAKsC,MACtBsG,EAA8B,GAMpC,GAJI5H,EAAAA,gBAAgBC,YAAY0H,KAC5BA,EAAa,GAAGtG,GAAK,GAGrBrC,KAAKsC,MAAMa,mBAA+BZ,IAAfpC,GAA4Ba,EAAAA,gBAAgBC,YAAY0H,GAAe,CAClG,MAAME,EAAW7I,KAAKyQ,qBAAgBlO,EAAWoG,GAE7CE,GACAD,EAAanH,KACTlC,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CAACgE,IAAKF,EAASxG,IAAQqG,GACvB,IACA1I,KAAKsL,oBAAoBzC,GAAS,IAAG,WAKlD,IAAK,MAAOvI,EAAOc,KAASuH,EAAaM,UACrCL,EAAanH,KACTlC,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CACDgE,IAAK3H,EAAKiB,IACNqG,EAAQ,CACZQ,IAAKlJ,KAAKK,uBAAuBC,EAAON,KAAKsC,MAAM/B,oBAAqBa,EAAKR,UAAYZ,KAAK+F,YAAc,OAE3G/F,KAAKsL,oBAAoBlK,KAM1C,OAAOwH,EAGH6H,gBAAgBtH,EAAuBC,GAC3C,IAAKA,EACD,OAAO,KAGX,IAAK,IAAI9I,EAAQ,EAAGA,GAAS8I,EAAKrH,OAAS1C,EAAiBgK,IAAK/I,IAAS,CACtE,MAAMc,EAAsBgI,EAAKE,OAAOhJ,IAExC,GAAIc,EAAKiB,KAAOrC,KAAKsC,MAAMnC,WAMvB,OALKmW,EAA2BvW,YAG5BC,KAAKC,SAAS,CAAEG,WAAY+I,EAAc5I,oBAAqBa,EAAKR,WAFpEZ,KAAKC,SAAS,CAAEG,WAAY+I,IAIzB/H,EAEX,MAAMmI,EAAQvJ,KAAKyQ,gBAAgBrP,EAAKiB,GAAIjB,EAAKoI,SACjD,GAAID,EACA,OAAOA,EAGf,OAAO,KAGH+B,oBAAoB3C,GACxB,OAAI3H,EAAAA,gBAAgBC,YAAY0H,EAAaa,SACrCxJ,KAAKsC,MAAMa,mBAA0CZ,IAA1BvC,KAAKsC,MAAMnC,WAC/BH,KAAKyJ,eAAed,EAAaa,QAASb,EAAatG,IAAI,GAIlE9C,EAAAA,cAAAA,EAAAA,SAAA,KACKS,KAAK0J,sBAAsBf,GAC3B3I,KAAKyJ,eAAed,EAAaa,QAASb,EAAatG,KAGzDsG,EAAagB,UAAYC,EAAAA,iBAAiBC,mBAAmBlB,EAAagB,SAC1E3J,KAAK8J,oBAAoBnB,EAAcA,EAAatG,IACnDsG,EAAagB,SAAa3J,KAAKsC,MAAMa,mBAA0CZ,IAA1BvC,KAAKsC,MAAMnC,WAIrE,KAHIH,KAAK+J,oBAAoBpB,GAMhCc,eAAe6N,EAAgCnX,EAAqBoX,GAAmB,IAAAC,EAAAC,EAC3F,IAAIlM,EAAwC+L,EACxCnX,IAAed,EAAiBqY,WAChCnM,EAAW+L,EAActD,QAAO2D,GAAeA,EAAYtV,IAAMsV,EAAYtV,IAAMsO,EAAAA,EAAgBqE,UAGvG,MAAM,SAAEtM,GAAa1I,KAAKP,MAAMyW,SAC1B0B,EAA0E,QAAlDJ,EAAGxX,KAAKP,MAAMyW,SAAS/Q,OAAOuG,4BAAoB,IAAA8L,GAAAA,EAC1E7L,EAAqE,QAA9C8L,EAAGzX,KAAKP,MAAMyW,SAAS/Q,OAAOyG,wBAAgB,IAAA6L,EAAAA,EAAIpY,EAAiBwY,MAEhG,GAAI1X,GAAcH,KAAKsC,MAAMnC,aAAeA,EAExC,OADAH,KAAKP,MAAMyW,SAAStS,QAAQyC,UAAUwF,MAAM,gEACrC,KAGX,IAAKN,IAAavK,EAAAA,gBAAgBC,YAAYsK,GAE1C,OADAvL,KAAKP,MAAMyW,SAAStS,QAAQyC,UAAUwF,MAAM,4DACrC,KAGX,IAAIC,EAAyB,GAC7B,MAAMC,EAAcR,EAASpK,KAAI,CAACR,EAAuBL,KACrD,MAAM2L,EAAatL,EAAO6I,SAAWxI,EAAAA,gBAAgBC,YAAYN,EAAO6I,SACxE,IAAIX,EAQAW,EANAX,EADAoD,GAAcjM,KAAKsC,MAAMa,aACdnD,KAAK0J,sBAAsB/I,EAAQR,EAAYG,GACnDN,KAAKL,eAAiBN,EAAiBgK,KAAQ4C,EAG3C,KAFAjM,KAAK8X,YAAYnX,EAAQL,GAKxC,MAAMyX,EACF9L,GAAc2L,GAA4B5X,KAAKL,cAAgBwM,KAAKC,MAAMT,GAA2BtM,EAAiBgK,IAEtH4C,IAAejM,KAAKsC,MAAMa,eACtBnD,KAAKL,cAAgBN,EAAiB2Y,IACtCxO,EAAUxJ,KAAKiY,qBAAqBtX,GAC7BX,KAAKL,cAAgBK,KAAKuW,iBACjCvW,KAAKL,eACLmM,EAAiB,SAAS9L,KAAKL,aAAa0M,aAC5C7C,EAAUxJ,KAAKyJ,eAAe9I,EAAO6I,aAASjH,GAAW,KAI7DwV,GAAmB/X,KAAKsC,MAAMa,eAC9BnD,KAAKL,eACLmM,EAAiB8L,EAA2B,SAAS5X,KAAKL,aAAa0M,aAAe,GACtF7C,EAAUxJ,KAAKyJ,eAAe9I,EAAO6I,QAAS7I,EAAO0B,IAAI,IAE7D,MAAMyK,EAAcnM,EAAO8B,YAAc9B,EAAO8B,YAAc,GAC9D,OACIlD,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GACG2D,EAAQ,CACZK,IAAKpI,EAAO0B,GACZ+K,YAAapN,KAAKL,eAAiBN,EAAiBgK,KAAOrJ,KAAKS,qBAAqBqM,EAAanM,GAClGqE,UAAWqD,GAAAA,CAAWK,EAAS1D,UAAW+S,GAAmB,eAC7D7O,IAAKlJ,KAAKK,uBAAuBC,EAAON,KAAKsC,MAAM/B,oBAAqBI,EAAOC,UAAYZ,KAAK+F,YAAc,OAE7G8C,EACAW,MAIb,OAAOxJ,KAAKsM,YAAYR,EAAgBC,EAAawL,GAGjDO,YAAYnX,EAAuBL,GACvC,IAAIuI,EAMJ,OAJIA,EADA7I,KAAKL,eAAiBN,EAAiBgK,IAC5B1I,EAAOgJ,QAAU3J,KAAKkY,4BAA4BvX,EAAQL,GAASN,KAAK+J,oBAAoBpJ,GAE5FA,EAAOgJ,QAAU3J,KAAK8J,oBAAoBnJ,EAAQL,GAASN,KAAK+J,oBAAoBpJ,GAE5FkI,EAGHoP,qBAAqBpP,GAAuB,IAAAsP,EAChD,MAAMrM,EAAiB,SAAS9L,KAAKL,aAAa0M,aAC5CjC,EAAmBvB,EAASjI,SAE5B+E,OAAkCpD,IAArB6H,EAAiCA,EAAmB,GACjEkG,EAFWtQ,KAAKsC,MAAMmD,eAGtBkG,EAAqE,QAA9CwM,EAAGnY,KAAKP,MAAMyW,SAAS/Q,OAAOyG,wBAAgB,IAAAuM,EAAAA,EAAI9Y,EAAiBwY,MAEhG,IAAIvN,GAAe,EACfgG,EAAKzH,EAASxG,MACdiI,GAAe,GAEnB,MAAMC,EAA2B,CAAE6N,QAAS,EAAGxS,OAAQ0E,GAEvD,OACI/K,EAAAA,cAACiL,EAAAA,OAAM,CACHI,cAAeL,EACfxB,IAAKF,EAASxG,GACd2C,UAAWqD,GAAAA,CAAW,yBAA0ByD,GAChDpB,UAAU,sBACVG,WAAW,uBACXC,eAAe,QACfV,iBAAkBzE,EAClBgF,SAAU3K,KAAK4W,0BAA0B/N,EAASxG,GAAIiI,IAEtD/K,EAAAA,cAAA,WACKsJ,EAASW,QAASrI,KAAK6J,GAChBhK,EAAAA,gBAAgBC,YAAY+J,EAAYxB,WACxCxJ,KAAKL,eACDK,KAAKL,aAAegM,GACb3L,KAAKiY,qBAAqBjN,GAGlChL,KAAKoL,kBAAkBJ,OAmB1CtB,sBAAsB/I,EAAuBR,EAAqBG,GACtE,OACIf,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CACDgE,IAAKzI,GACDN,KAAKP,MAAMyW,SAAS3J,OAAM,CAC9B/D,QAASxI,KAAKiC,sBAAsBtB,EAAQR,GAAW,kBACtCH,KAAKsC,MAAMnC,YAAcH,KAAKsC,MAAMnC,aAAeQ,EAAO0B,IAAG,mBAC5DrC,KAAKsC,MAAMnC,YAAcH,KAAKsC,MAAMnC,aAAeQ,EAAO0B,IAAG,cAClElC,EAAU,aACXH,KAAKsC,MAAMa,aAAexC,EAAO4P,eAAYhO,IAExD5B,EAAOC,UAKZkJ,oBAAoBnJ,EAAuBL,GAC/C,MAAM,KAAEuM,GAAS7M,KAAKP,MAAMyW,SACtBtV,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GACrDZ,KAAKsG,QAAQyG,cAAcC,MAAQpM,EACnC,MAAMqM,GAAaC,EAAAA,EAAAA,wBAAuBlN,KAAKiG,iBAAkBjG,KAAKsG,SACtE,OACI/G,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GACG8H,EAAI,CACR9D,IAAKzI,EACL+M,KAAM1M,EAAOgJ,SACTsD,EAAU,CACd/J,OAAQvC,EAAOwM,iBAAmB,cAAW5K,EAC7CiG,SAAS8E,EAAAA,EAAAA,kBAAiBtN,KAAKiG,iBAAkBjG,KAAKsG,QAAS1F,KAE9DD,EAAOC,UAKZsX,4BAA4BvX,EAAuBL,GAA6C,IAA7B+X,IAAA1L,UAAA5K,OAAA,QAAAQ,IAAAoK,UAAA,KAAAA,UAAA,GACvE,MAAM,KAAEE,GAAS7M,KAAKP,MAAMyW,SACtBtV,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GAC/CkM,EAAcnM,EAAO8B,YAAc9B,EAAO8B,YAAc,GAC9DzC,KAAKsG,QAAQyG,cAAcC,MAAQpM,EACnC,MAAMqM,GAAaC,EAAAA,EAAAA,wBAAuBlN,KAAKiG,iBAAkBjG,KAAKsG,SACtE,OACI/G,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GACG8H,EAAI,CACR9D,IAAKzI,EACL8M,YAAaiL,GAAiBrY,KAAKS,qBAAqBqM,EAAanM,GACrE0M,KAAM1M,EAAOgJ,SACTsD,EAAU,CACdzE,SAAS8E,EAAAA,EAAAA,kBAAiBtN,KAAKiG,iBAAkBjG,KAAKsG,QAAS1F,KAE9DD,EAAOC,UAKZ2M,uBAAuB3M,EAAmBgB,GAC9C,MAAM,KAAEiL,GAAS7M,KAAKP,MAAMyW,SAC5BlW,KAAKsG,QAAQyG,cAAcC,MAAQpM,EACnC,MAAMqM,GAAaC,EAAAA,EAAAA,wBAAuBlN,KAAKiG,iBAAkBjG,KAAKsG,SACtE,OAAI1F,GAAYgB,EAERrC,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAK8H,EAAI,CAAEQ,KAAMzL,GAAaqL,EAAU,CAAEzE,SAAS8E,EAAAA,EAAAA,kBAAiBtN,KAAKiG,iBAAkBjG,KAAKsG,QAAS1F,KACzGA,GAIN,KAGHmJ,oBAAoBpJ,EAAuBL,GAC/C,MAAM,KAAEkN,GAASxN,KAAKP,MAAMyW,SAC5B,OACI3W,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CAACgE,IAAKzI,GAAWkN,GACjB7M,EAAOC,UAKZ0L,YAAYmB,EAAe1B,EAA4BuM,GAAmB,IAAAC,EAC9E,MAAM,aAAE3K,EAAY,SAAE7F,EAAQ,kBAAE8F,EAAiB,kBAAErL,EAAiB,uBAAEsL,GAA2B9N,KAAKP,MAAMyW,SACtGsC,GACDxY,KAAKsC,MAAMa,cACZX,GAC6B,OAA7BxC,KAAKsC,MAAMR,oBACkBS,IAA7BvC,KAAKsC,MAAMR,gBACVwW,EACCG,GACDzY,KAAKsC,MAAMa,cAAgB2K,GAA0B9M,EAAAA,gBAAgBC,YAAYjB,KAAKsC,MAAMR,iBAAmBwW,EAC9GI,EACF1Y,KAAKL,aAAeN,EAAiB2Y,KAAOQ,EAAyB5K,EAAc5I,UAAY,kBACnGhF,KAAKL,aAAeN,EAAiBgK,IACrC,MAAMsP,EACFH,GACAxY,KAAKP,MAAMyW,SAAS/Q,OAAOyG,kBAC3B5L,KAAKP,MAAMyW,SAAS/Q,OAAOyG,iBAAmBvM,EAAiB2Y,KAC/D,sBAEEY,EAAyC,QAA3BL,EAAGvY,KAAKsC,MAAMR,qBAAa,IAAAyW,OAAA,EAAxBA,EAA0BvE,QAAO3S,IAAUuI,EAAAA,iBAAiBC,mBAAmBxI,EAAMP,OACtG+X,EAAqBD,MAAAA,OAAc,EAAdA,EAAgBzX,KAAIC,GAAQA,EAAKN,MAAKgY,KAAK,KACtE,OACIvZ,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAK6I,EAAY,CAAE5I,UAAW0T,IAC/BnZ,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GACGgD,EAAQ,CACZ/C,UAAWqD,GAAAA,CAAWN,EAAS/C,UAAWyI,EAAO+K,GAA0B,gBAAiBG,KAE3F5M,GAELxM,EAAAA,cAAA,OAAKyF,UAAU,2BAA2B+D,IAAK8P,GAC1CL,GACGxX,EAAAA,gBAAgBC,YAAY2X,IAC5BA,EAAezX,KAAIC,IAAI,IAAA2X,EAAA7K,EAAA,OACnB3O,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAK8I,EAAiB,CAAE7I,UAAW6I,EAAmB7I,UAAW+D,IAAK3H,EAAKN,MAC3EkV,EAAiBhW,KAAKP,MAAe,QAAVsZ,EAAE3X,EAAKN,WAAG,IAAAiY,EAAAA,EAAI,GAAI3X,EAAKL,QAASsL,YAC3DoM,GACGzY,KAAKuN,uBAAuBnM,EAAKL,QAAkC,QAA3BmN,EAAE9M,EAAKO,4BAAoB,IAAAuM,OAAA,EAAzBA,EAA2BtM,gBAvftF0U,EAAAvW,aAAuB,GAgE5BoO,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,iCA0jBb,+kBC3nBO,MAAM4K,UAAkCzZ,EAAAA,cAyB3CC,YAAmBC,GACfC,MAAMD,GAvBO,KAAA8W,eAAyBlX,EAAiBmX,KAEnD,KAAA7W,aAAuBN,EAAiBoX,KAM/B,KAAA5W,UAAoBR,EAAiBQ,UAIrC,KAAAgB,iBAA0C,GAEnD,KAAA8H,aAAgC,GAoGvB,KAAA+N,cAAgB,KAC7B1W,KAAKC,UAASC,IAAa,CACvBC,WAAYd,EAAiBqY,SAC7Bf,WAAYzW,EAAcyW,eAwTjB,KAAAC,0BAA4B,CAACC,EAA4BvM,IAA0B,KAChG,MAAM,eAAE7E,GAAmBzF,KAAKsC,MAC1BoD,EAAU,CAAE,CAACmR,IAAWvM,GAC9BtK,KAAKC,SAAS,CAAEwF,eAAcI,EAAAA,EAAA,GAAOJ,GAAmBC,MAwI3C,KAAAjF,qBAAuB,CAACqW,EAA6BnW,IAA0B,KAC5F,MAAMC,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GAC/CC,EAA0C,CAAC,CAAEC,IAAKgW,EAAqB/V,QAASH,IAGtF,GAAII,EAAAA,gBAAgBC,YAAYN,EAAOO,oBACnC,IAAK,MAAME,KAAQT,EAAOO,mBAAoB,CAC1C,MAAMuB,EAAcrB,EAAKC,MAAMP,IAC/BD,EAAiBY,KAAK,CAClBX,IAAK2B,EACL1B,QAASK,EAAKM,KACdC,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,kBAI1D7B,KAAKC,SAAS,CACV6B,cAAed,EAAAA,gBAAgBC,YAAYJ,GAAoBA,EAAmB,CAAC,CAAEC,IAAK,aAUjF,KAAAmB,sBAAwB,CAACC,EAAqBC,IAAsB,KAC5EnC,KAAKsC,MAAMa,cASZ6V,EAA0BjZ,aAAc,EACxCC,KAAKC,SAAS,CACVE,WAAY+B,EAAKG,GACjB9B,oBAAqB2B,EAAKtB,SAC1BR,WAAY+B,MAZhBnC,KAAKC,SAAS,CACVE,WAAY+B,EAAKG,GACjBjC,WAAY+B,IAEZnC,KAAKP,MAAMyW,SAAS1T,mBACpBxC,KAAKS,qBAAqByB,EAAKO,YAAcP,EAA7ClC,KAgBK,KAAAF,cAAgB,IAAM,KACnCkZ,EAA0BjZ,aAAc,EACxCC,KAAKC,UAASC,IAAa,CAAOC,WAAYD,EAAcE,gBAO/C,KAAA2C,oBAAuBC,IAChChD,KAAK4C,SAASC,UAAY7C,KAAK4C,SAASC,QAAQI,SAASD,EAAME,UAC1DlD,KAAKsC,MAAMa,aAGZnD,KAAKC,SAAS,CAAEE,gBAAYoC,EAAWhC,oBAAqB,GAAIoW,WAAW,IAF3E3W,KAAKC,SAAS,CAAEE,WAAYd,EAAiBqY,SAAUnX,oBAAqB,GAAIoW,WAAW,MAUtF,KAAAsC,gBAAkB,KAC/B,MAAM,aAAEtQ,GAAiB3I,KAAKP,MAAMyW,SAEoE,IAADgD,GADvGlZ,KAAK2I,aAAeA,EAChB3H,EAAAA,gBAAgBC,YAAY0H,IAAiB3H,EAAAA,gBAAgBC,YAAY0H,EAAa,GAAGa,YAC7D,QAA5B0P,EAAAlZ,KAAK2I,aAAa,GAAGa,eAAO,IAAA0P,GAA5BA,EAA8B/X,KAAIC,IAC9B,MAAM+X,EAAgB,GAOtB,OANArU,OAAOC,OAAOoU,EAAe,CAAE1W,YAAarB,EAAKqB,cACjDqC,OAAOC,OAAOoU,EAAe,CAAEvY,SAAUZ,KAAKP,MAAMyW,SAASxD,UAAUiD,sBACvE7Q,OAAOC,OAAOoU,EAAe,CAAExP,QAASvI,EAAKuI,UACzC3I,EAAAA,gBAAgBC,YAAYG,EAAKoI,UAAYpI,EAAK2T,aAAenE,EAAAA,EAAWoE,QAC5E5T,EAAKoI,QAAQ4P,QAAQD,GAElB/X,OAYF,KAAAf,uBAAyB,CAACC,EAAeC,EAA8BC,KAE/EwY,EAA0BjZ,aADJ,IACmBO,MAGzCE,IAAmBD,IAGjBA,IAAwBC,EAMlB,KAAAuW,cAAgB,KACxB/W,KAAKsC,MAAMa,aAGZnD,KAAKC,SAAS,CAAEE,gBAAYoC,EAAWhC,oBAAqB,GAAIoW,WAAW,IAF3E3W,KAAKC,SAAS,CAAEE,WAAYd,EAAiBqY,SAAUnX,oBAAqB,GAAIoW,WAAW,KAUlF,KAAApT,aAAgBP,IACzBA,EAAMQ,UAAYxD,KAAKH,YAAcG,KAAKsC,MAAMa,cAAgBnD,KAAKsC,MAAMqU,WAC3E3W,KAAKC,SAAS,CAAEE,WAAYd,EAAiBqY,SAAUnX,oBAAqB,GAAIoW,WAAW,KAOlF,KAAA7Q,sBAAwB,KACrC9F,KAAKC,SAAS,CAAEkD,aAAcnD,KAAKmD,gBAnqBnCnD,KAAK4C,SAAWrD,EAAAA,YAChBS,KAAK+F,YAAcxG,EAAAA,YACnB,MAAM,aAAEoJ,GAAiB3I,KAAKP,MAAMyW,SACpC,GAAIlV,EAAAA,gBAAgBC,YAAY0H,IAAiB3H,EAAAA,gBAAgBC,YAAY0H,EAAa,GAAGa,SAAU,CACnG,MAAMsD,EAAcnE,EAAa,GAAGa,QAAQ,GAAG/G,YAAckG,EAAa,GAAGa,QAAQ,GAAG/G,YAAc,GAChG7B,EAAW+H,EAAa,GAAGa,QAAQ,GAAG5I,SAAW+H,EAAa,GAAGa,QAAQ,GAAG5I,SAAW,GAC7FZ,KAAKa,iBAAmB,CAAC,CAAEC,IAAKgM,EAAa/L,QAASH,IAGlDI,EAAAA,gBAAgBC,YAAY0H,EAAa,GAAGa,QAAQ,GAAGtI,qBACvDyH,EAAa,GAAGa,QAAQ,GAAGtI,mBAAmBC,KAAIC,IAC9C,MAAMqB,EAAcrB,EAAKC,MAAMP,IAM/B,OALAd,KAAKa,iBAAiBY,KAAK,CACvBX,IAAK2B,EACL1B,QAASK,EAAKM,KACdC,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,kBAE3C,QAInB7B,KAAKsC,MAAQ,CACTnC,WAAYd,EAAiBqY,SAC7BnX,oBAAqB,GACrBH,gBAAYmC,EACZkD,eAAgB,GAChBtC,aAAcnD,KAAKmD,aACnBrB,cAAe9B,KAAKa,iBACpB8V,WAAW,GAGf3W,KAAKiG,kBAAmBC,EAAAA,EAAAA,oBACpBlG,KAAKP,MAAMyW,SAAStS,QAAQsB,QAAQiB,kBACpCnG,KAAKP,MAAMyW,SAAS9P,aACpBpG,KAAKP,MAAMyW,SAAS7P,WAExBrG,KAAKsG,SAAUC,EAAAA,EAAAA,kBAAiB,QAASvG,KAAKiG,iBAAkB,GAAI,IACpEjG,KAAKiN,YAAaC,EAAAA,EAAAA,wBAAuBlN,KAAKiG,iBAAkBjG,KAAKsG,SAG/D,mBACN,MAAoG,QAA7FG,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAYC,QAAShD,QAAS5D,KAAKP,MAAMyW,SAAStS,QAAQsB,UAGlF4B,oBACH9G,KAAKiH,mCAAoCC,EAAAA,EAAAA,mBAAkBC,OAAQ,SAAUnH,KAAK8F,uBAClFsB,SAASE,iBAAiB,UAAYtH,KAAKuD,cAA2C,GACtFvD,KAAK8F,wBACLsB,SAASC,KAAKC,iBAAiB,YAAatH,KAAK+C,qBACjD/C,KAAKiZ,kBAGF1R,qBAAkB,IAAAC,EACO,QAAxBA,EAAAxH,KAAK+F,YAAYlD,eAAO,IAAA2E,GAAxBA,EAA0BC,SAAS,IAAMzH,KAAKP,MAAMyW,SAAS9T,cAC5DpC,KAAK+F,YAAYlD,QAAQ4E,SAAS,GAAmB3E,QAIvD4E,uBACHP,OAAOQ,oBAAoB,SAAU3H,KAAKiH,mCAAoC,GAC9EG,SAASC,KAAKM,oBAAoB,YAAa3H,KAAK+C,qBAAqB,GAGtE6E,SACH5H,KAAKL,aAAeN,EAAiBgK,IAErC,OACI9J,EAAAA,cAAC+I,EAAAA,KAAI,CAACtD,UAAU,qBAAqBkE,IAAKlJ,KAAK4C,UAC1C5C,KAAKsC,MAAMa,aACRnD,KAAK6H,oBAELtI,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACgN,EAAAA,OAAMzH,OAAAC,OAAA,CACHC,UAAU,sBACVwD,QAASxI,KAAK0W,cAAa,gBAT7B,oBAWEQ,MAAOlX,KAAKP,MAAMyW,SAASxD,UAAUyE,mBAAkB,aAC3CnX,KAAKP,MAAMyW,SAASxD,UAAUyE,oBACtCnX,KAAKiN,aAEZjN,KAAKoX,wBAiBlBA,sBACJ,OACI7X,EAAAA,cAAC8X,EAAAA,SAAQ,CAACrS,UAAU,mCAAmCY,OAAQ5F,KAAKsC,MAAMqU,WACrE3W,KAAKsC,MAAMa,aAAenD,KAAK6H,oBAAsB7H,KAAK8H,sBAK/DD,oBACJ,MAAM,iBAAEG,EAAgB,2BAAEC,EAA0B,uBAAEC,EAAsB,WAAEC,GAAenI,KAAKP,MAAMyW,SAGxG,OADAlW,KAAKL,aAAeN,EAAiBgK,IAEjC9J,EAAAA,cAAC6I,EAAAA,OAAMtD,OAAAC,OAAA,GACCoD,EAAU,CACdnD,UAAWqD,GAAAA,CACPF,EAAWnD,UACXhF,KAAKsC,MAAMa,mBAA0CZ,IAA1BvC,KAAKsC,MAAMnC,WAA2B,QAAU,YAG/EZ,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAK/E,KAAKP,MAAMyW,SAASnO,SAAQ,CAAEQ,SAAS,OAC5CvI,KAAKsC,MAAMa,mBAA0CZ,IAA1BvC,KAAKsC,MAAMnC,YACnCZ,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAKkD,GACN1I,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAKiD,EAAgB,CAAEQ,QAASxI,KAAKF,mBAC1CP,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAKmD,GAAyBlI,KAAKsC,MAAM/B,sBAGrDP,KAAKgK,mBAMdlC,qBACJ,MAAM,WAAEK,GAAenI,KAAKP,MAAMyW,SAClC,OACI3W,EAAAA,cAAC6I,EAAAA,OAAMtD,OAAAC,OAAA,GAAKoD,EAAU,CAAEnD,UAAWqD,GAAAA,CAAWF,EAAWnD,aACrDzF,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAK/E,KAAKP,MAAMyW,SAASnO,SAAQ,CAAEQ,SAAS,OAC5CvI,KAAKgK,iBACNzK,EAAAA,cAAA,OAAKyF,UAAU,uBACXzF,EAAAA,cAAA,UAAQyF,UAAU,qBAAoB,aAAY,QAAQwD,QAASxI,KAAK+W,mBAOpF3L,kBAAkBhK,GACtB,OAAIA,EAAKuI,UAAYC,EAAAA,iBAAiBC,mBAAmBzI,EAAKuI,SACnD3J,KAAK8J,oBAAoB1I,GACxBA,EAAKuI,QAGV,KAFI3J,KAAK+J,oBAAoB3I,GAKhC4I,iBACJ,MAAM,SAAEtB,GAAa1I,KAAKP,MAAMyW,SAChC,IAAIvN,EAAgC,GAEhCA,EADA3I,KAAKsC,MAAMa,aACInD,KAAK2I,aAEL3I,KAAKP,MAAMyW,SAASvN,aAEvC,MAAM,WAAExI,GAAeH,KAAKsC,MACtBsG,EAA8B,GACpC,IAAIyQ,EAA2C,GAC3CC,EAAkD,GACtD,MAAMC,EAAiBC,KAAKC,MAAMD,KAAKE,UAAU/Q,IAEjD,IAAK,MAAMvH,KAAQmY,EACfD,EAAqBlY,EAAKoI,QAASwK,QAAO2D,GAAeA,EAAYtV,IAAMsV,EAAYtV,IAAMsO,EAAAA,EAAgBqE,SAC7G5T,EAAKoI,QAAU8P,EAGnB,IAAK,MAAMlY,KAAQuH,EACf0Q,EAAcjY,EAAKoI,QAASwK,QAAO2D,GAAeA,EAAYtV,IAAMsV,EAAYtV,GAAKsO,EAAAA,EAAgBqE,SAGzG,GAAIhV,KAAKsC,MAAMa,mBAA+BZ,IAAfpC,GAA4Ba,EAAAA,gBAAgBC,YAAY0H,GAAe,CAClG,IAAIE,EAAiC,GACrC,IAAK,MAAM2H,KAAiB7H,EAAc,CACtC,GAAI6H,EAAcnO,KAAOlC,EAAY,CACjC0I,EAAW2H,EACNwI,EAA0BjZ,YAK3BC,KAAKC,SAAS,CACVG,gBAAYmC,EACZhC,oBAAqBiQ,EAAc5P,WANvCZ,KAAKC,SAAS,CACVG,gBAAYmC,IAQpB,MAGJ,GADAsG,EAAW7I,KAAKyQ,gBAAgBD,GAC5B3H,GAAYA,EAASxG,KAAOlC,EAC5B,MAIJ0I,GACAD,EAAanH,KACTlC,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CAACgE,IAAKF,EAASxG,IAAQqG,GACvB,IACA1I,KAAKsL,oBAAoBzC,GAAS,IAAG,UAI/C,CACH,IAAK,MAAOvI,EAAOc,KAASmY,EAAetQ,UACvCL,EAAanH,KACTlC,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CACDgE,IAAK3H,EAAKiB,IACNqG,EAAQ,CACZQ,IAAKlJ,KAAKK,uBAAuBC,EAAON,KAAKsC,MAAM/B,oBAAqBa,EAAKR,UAAYZ,KAAK+F,YAAc,OAE3G/F,KAAKsL,oBAAoBlK,KAKtC,IAAK,MAAOd,EAAOc,KAASiY,EAAYpQ,UACpCL,EAAanH,KACTlC,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CACDgE,IAAK3H,EAAKiB,IACNqG,EAAQ,CACZQ,IAAKlJ,KAAKK,uBAAuBC,EAAON,KAAKsC,MAAM/B,oBAAqBa,EAAKR,UAAYZ,KAAK+F,YAAc,OAE3G/F,KAAKsL,oBAAoBlK,KAM1C,OAAOwH,EAGH6H,gBAAgBrP,GACpB,MAAMmK,EAAWnK,MAAAA,OAAI,EAAJA,EAAMoI,QACvB,GAAI+B,GAAYvK,EAAAA,gBAAgBC,YAAYsK,GACxC,IAAK,IAAIjL,EAAQ,EAAGA,GAASiL,EAASxJ,OAAS1C,EAAiBgK,IAAK/I,IAAS,CAC1E,MAAMkJ,EAAyB+B,EAASjC,OAAOhJ,IAC/C,IAAI6I,EAAe/H,MAAAA,OAAI,EAAJA,EAAMiB,GAEzB,GAAImH,EAAQnH,KAAOrC,KAAKsC,MAAMnC,WAU1B,OATIgJ,IAAiB9J,EAAiBqY,UAAYlO,EAAQnH,GAAMsO,EAAAA,EAAgBqE,SAC5E7L,OAAe5G,GAGdyW,EAA0BjZ,YAG3BC,KAAKC,SAAS,CAAEG,WAAY+I,EAAc5I,oBAAqBiJ,EAAQ5I,WAFvEZ,KAAKC,SAAS,CAAEG,WAAY+I,IAIzBK,EAEX,MAAMD,EAAQvJ,KAAKyQ,gBAAgBjH,GACnC,GAAID,EACA,OAAOA,EAInB,OAAO,KAGH+B,oBAAoB3C,GACxB,OAAI3H,EAAAA,gBAAgBC,YAAY0H,EAAaa,SACrCxJ,KAAKsC,MAAMa,mBAA0CZ,IAA1BvC,KAAKsC,MAAMnC,WAC/BH,KAAKyJ,eAAed,EAAaa,QAASb,EAAatG,IAAI,GAGlE9C,EAAAA,cAAAA,EAAAA,SAAA,KACKS,KAAK0J,sBAAsBf,GAC3B3I,KAAKyJ,eAAed,EAAaa,QAASb,EAAatG,KAGzDsG,EAAagB,UAAYC,EAAAA,iBAAiBC,mBAAmBlB,EAAagB,SAC1E3J,KAAK8J,oBAAoBnB,EAAcA,EAAatG,IACnDsG,EAAagB,QAIlB,KAHI3J,KAAK+J,oBAAoBpB,GAMhCc,eAAe6N,EAAgCnX,EAAqBoX,GAAmB,IAAAC,EAAAC,EAC3F,IAAIlM,EAAwC+L,EACxCnX,IAAed,EAAiBqY,WAChCnM,EAAW+L,EAActD,QAAO2D,GAAeA,EAAYtV,IAAMsV,EAAYtV,IAAMsO,EAAAA,EAAgBqE,UAGvG,MAAM,SAAEtM,GAAa1I,KAAKP,MAAMyW,SAC1B0B,EAA0E,QAAlDJ,EAAGxX,KAAKP,MAAMyW,SAAS/Q,OAAOuG,4BAAoB,IAAA8L,GAAAA,EAC1E7L,EAAqE,QAA9C8L,EAAGzX,KAAKP,MAAMyW,SAAS/Q,OAAOyG,wBAAgB,IAAA6L,EAAAA,EAAIpY,EAAiBwY,MAEhG,GAAI1X,GAAcH,KAAKsC,MAAMnC,aAAeA,EAExC,OADAH,KAAKP,MAAMyW,SAAStS,QAAQyC,UAAUwF,MAAM,gEACrC,KAGX,IAAKN,IAAavK,EAAAA,gBAAgBC,YAAYsK,GAE1C,OADAvL,KAAKP,MAAMyW,SAAStS,QAAQyC,UAAUwF,MAAM,4DACrC,KAGX,IAAIC,EAAyB,GAC7B,MAAMC,EAAcR,EAASpK,KAAI,CAACR,EAAuBL,KACrD,MAAM2L,EAAatL,EAAO6I,SAAWxI,EAAAA,gBAAgBC,YAAYN,EAAO6I,SACxE,IAAIX,EAQAW,EANAX,EADAoD,GAAcjM,KAAKsC,MAAMa,aACdnD,KAAK0J,sBAAsB/I,EAAQR,EAAYG,GACnDN,KAAKL,eAAiBN,EAAiBgK,KAAQ4C,EAG3C,KAFAjM,KAAK8X,YAAYnX,EAAQL,GAKxC,MAAMyX,EACF9L,GAAc2L,GAA4B5X,KAAKL,cAAgBwM,KAAKC,MAAMT,GAA2BtM,EAAiBgK,IAEtH4C,IAAejM,KAAKsC,MAAMa,eACtBnD,KAAKL,cAAgBN,EAAiB2Y,IACtCxO,EAAUxJ,KAAKiY,qBAAqBtX,GAC7BX,KAAKL,cAAgBK,KAAKuW,eAAiBlX,EAAiBgK,MACnErJ,KAAKL,eACLmM,EAAiB,SAAS9L,KAAKL,aAAa0M,aAC5C7C,EAAUxJ,KAAKyJ,eAAe9I,EAAO6I,aAASjH,GAAW,KAG7DwV,GAAmB/X,KAAKsC,MAAMa,eAC9BnD,KAAKL,eACLmM,EAAiB8L,EAA2B,SAAS5X,KAAKL,aAAa0M,aAAe,GACtF7C,EAAUxJ,KAAKyJ,eAAe9I,EAAO6I,QAAS7I,EAAO0B,IAAI,IAE7D,MAAMyK,EAAcnM,EAAO8B,YAAc9B,EAAO8B,YAAc,GAC9D,OACIlD,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GACG2D,EAAQ,CACZK,IAAKpI,EAAO0B,GACZ+K,YAAapN,KAAKL,eAAiBN,EAAiBgK,KAAOrJ,KAAKS,qBAAqBqM,EAAanM,GAClGqE,UAAWqD,GAAAA,CAAWK,EAAS1D,UAAW+S,GAAmB,eAC7D7O,IAAKlJ,KAAKK,uBAAuBC,EAAON,KAAKsC,MAAM/B,oBAAqBI,EAAOC,UAAYZ,KAAK+F,YAAc,OAE7G8C,EACAW,MAIb,OAAOxJ,KAAKsM,YAAYR,EAAgBC,EAAawL,GAGjDO,YAAYnX,EAAuBL,GACvC,IAAIuI,EAMJ,OAJIA,EADA7I,KAAKL,eAAiBN,EAAiBgK,IAC5B1I,EAAOgJ,QAAU3J,KAAKkY,4BAA4BvX,EAAQL,GAASN,KAAK+J,oBAAoBpJ,GAE5FA,EAAOgJ,QAAU3J,KAAK8J,oBAAoBnJ,EAAQL,GAASN,KAAK+J,oBAAoBpJ,GAE5FkI,EAGHoP,qBAAqBpP,GAAuB,IAAAsP,EAChD,MAAMrM,EAAiB,SAAS9L,KAAKL,aAAa0M,aAC5CjC,EAAmBvB,EAASjI,SAE5B+E,OAAkCpD,IAArB6H,EAAiCA,EAAmB,GACjEkG,EAFWtQ,KAAKsC,MAAMmD,eAGtBkG,EAAqE,QAA9CwM,EAAGnY,KAAKP,MAAMyW,SAAS/Q,OAAOyG,wBAAgB,IAAAuM,EAAAA,EAAI9Y,EAAiBwY,MAEhG,IAAIvN,GAAe,EACfgG,EAAKzH,EAASxG,MACdiI,GAAe,GAEnB,MAAMC,EAA2B,CAAE6N,QAAS,EAAGxS,OAAQ0E,GACvD,OACI/K,EAAAA,cAACiL,EAAAA,OAAM,CACHI,cAAeL,EACfxB,IAAKF,EAASxG,GACd2C,UAAWqD,GAAAA,CAAW,yBAA0ByD,GAChDpB,UAAU,sBACVG,WAAW,uBACXC,eAAe,QACfV,iBAAkBzE,EAClBgF,SAAU3K,KAAK4W,0BAA0B/N,EAASxG,GAAIiI,IAEtD/K,EAAAA,cAAA,WACKsJ,EAASW,QAASrI,KAAK6J,GAChBhK,EAAAA,gBAAgBC,YAAY+J,EAAYxB,WACxCxJ,KAAKL,eACDK,KAAKL,aAAegM,GACb3L,KAAKiY,qBAAqBjN,GAGlChL,KAAKoL,kBAAkBJ,OAmB1CtB,sBAAsB/I,EAAuBR,EAAqBG,GACtE,OACIf,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CACDgE,IAAKzI,GACDN,KAAKP,MAAMyW,SAAS3J,OAAM,CAC9B/D,QAASxI,KAAKiC,sBAAsBtB,EAAQR,GAAW,kBACtCH,KAAKsC,MAAMnC,YAAcH,KAAKsC,MAAMnC,aAAeQ,EAAO0B,IAAG,mBAC5DrC,KAAKsC,MAAMnC,YAAcH,KAAKsC,MAAMnC,aAAeQ,EAAO0B,IAAG,cAClElC,EAAU,aACXH,KAAKsC,MAAMa,aAAexC,EAAO4P,eAAYhO,IAExD5B,EAAOC,UAKZkJ,oBAAoBnJ,EAAuBL,GAC/C,MAAM,KAAEuM,GAAS7M,KAAKP,MAAMyW,SACtBtV,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GACrDZ,KAAKsG,QAAQyG,cAAcC,MAAQpM,EACnC,MAAMqM,GAAaC,EAAAA,EAAAA,wBAAuBlN,KAAKiG,iBAAkBjG,KAAKsG,SACtE,OACI/G,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GACG8H,EAAI,CACR9D,IAAKzI,EACL+M,KAAM1M,EAAOgJ,SACTsD,EAAU,CACd/J,OAAQvC,EAAOwM,iBAAmB,cAAW5K,EAC7CiG,SAAS8E,EAAAA,EAAAA,kBAAiBtN,KAAKiG,iBAAkBjG,KAAKsG,QAAS1F,KAE9DD,EAAOC,UAKZsX,4BAA4BvX,EAAuBL,GAA6C,IAA7B+X,IAAA1L,UAAA5K,OAAA,QAAAQ,IAAAoK,UAAA,KAAAA,UAAA,GACvE,MAAM,KAAEE,GAAS7M,KAAKP,MAAMyW,SACtBtV,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GAC/CkM,EAAcnM,EAAO8B,YAAc9B,EAAO8B,YAAc,GAC9DzC,KAAKsG,QAAQyG,cAAcC,MAAQpM,EACnC,MAAMqM,GAAaC,EAAAA,EAAAA,wBAAuBlN,KAAKiG,iBAAkBjG,KAAKsG,SACtE,OACI/G,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GACG8H,EAAI,CACR9D,IAAKzI,EACL8M,YAAaiL,GAAiBrY,KAAKS,qBAAqBqM,EAAanM,GACrE0M,KAAM1M,EAAOgJ,SACTsD,EAAU,CACdzE,SAAS8E,EAAAA,EAAAA,kBAAiBtN,KAAKiG,iBAAkBjG,KAAKsG,QAAS1F,KAE9DD,EAAOC,UAKZ2M,uBAAuB3M,EAAmBgB,GAC9C,MAAM,KAAEiL,GAAS7M,KAAKP,MAAMyW,SAC5BlW,KAAKsG,QAAQyG,cAAcC,MAAQpM,EACnC,MAAMqM,GAAaC,EAAAA,EAAAA,wBAAuBlN,KAAKiG,iBAAkBjG,KAAKsG,SACtE,OAAI1F,GAAYgB,EAERrC,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAK8H,EAAI,CAAEQ,KAAMzL,GAAaqL,EAAU,CAAEzE,SAAS8E,EAAAA,EAAAA,kBAAiBtN,KAAKiG,iBAAkBjG,KAAKsG,QAAS1F,KACzGA,GAIN,KAGHmJ,oBAAoBpJ,EAAuBL,GAC/C,MAAM,KAAEkN,GAASxN,KAAKP,MAAMyW,SAC5B,OACI3W,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,CAACgE,IAAKzI,GAAWkN,GACjB7M,EAAOC,UAKZ0L,YAAYmB,EAAe1B,EAA4BuM,GAAmB,IAAAC,EAC9E,MAAM,aAAE3K,EAAY,kBAAEC,EAAiB,kBAAErL,EAAiB,uBAAEsL,GAA2B9N,KAAKP,MAAMyW,SAC5FsC,GACDxY,KAAKsC,MAAMa,cACZX,GAC6B,OAA7BxC,KAAKsC,MAAMR,oBACkBS,IAA7BvC,KAAKsC,MAAMR,gBACVwW,EACCG,GACDzY,KAAKsC,MAAMa,cAAgB2K,GAA0B9M,EAAAA,gBAAgBC,YAAYjB,KAAKsC,MAAMR,iBAAmBwW,EAC9GI,EACF1Y,KAAKL,aAAeN,EAAiB2Y,KAAOQ,EAAyB5K,EAAc5I,UAAY,kBACnGhF,KAAKL,aAAeN,EAAiBgK,IACrC,MAAMsP,EACFH,GACAxY,KAAKP,MAAMyW,SAAS/Q,OAAOyG,kBAC3B5L,KAAKP,MAAMyW,SAAS/Q,OAAOyG,iBAAmBvM,EAAiB2Y,KAC/D,sBAEEY,EAAyC,QAA3BL,EAAGvY,KAAKsC,MAAMR,qBAAa,IAAAyW,OAAA,EAAxBA,EAA0BvE,QAAO3S,IAAUuI,EAAAA,iBAAiBC,mBAAmBxI,EAAMP,OACtG+X,EAAqBD,MAAAA,OAAc,EAAdA,EAAgBzX,KAAIC,GAAQA,EAAKN,MAAKgY,KAAK,KACtE,OACIvZ,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAK6I,EAAY,CAAE5I,UAAW0T,IAC/BnZ,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GACG/E,KAAKP,MAAMyW,SAASnO,SAAQ,CAChC/C,UAAWqD,GAAAA,CACPrI,KAAKP,MAAMyW,SAASnO,SAAS/C,UAC7ByI,EACA+K,GAA0B,gBAC1BG,KAGH5M,GAELxM,EAAAA,cAAA,OAAKyF,UAAU,2BAA2B+D,IAAK8P,GAC1CL,GACGxX,EAAAA,gBAAgBC,YAAY2X,IAC5BA,EAAezX,KAAIC,IAAI,IAAA2X,EAAA7K,EAAA,OACnB3O,EAAAA,cAAC+I,EAAAA,KAAIxD,OAAAC,OAAA,GAAK8I,EAAiB,CAAE7I,UAAW6I,EAAmB7I,UAAW+D,IAAK3H,EAAKN,MAC3EkV,EAAiBhW,KAAKP,MAAe,QAAVsZ,EAAE3X,EAAKN,WAAG,IAAAiY,EAAAA,EAAI,GAAI3X,EAAKL,QAASsL,YAC3DoM,GACGzY,KAAKuN,uBAAuBnM,EAAKL,QAAkC,QAA3BmN,EAAE9M,EAAKO,4BAAoB,IAAAuM,OAAA,EAAzBA,EAA2BtM,gBA5iBtFoX,EAAAjZ,aAAuB,GAkE5BoO,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,iCA+nBb,UC7sBA,EAR4B3O,GACpBA,EAAM0F,OAAOkO,cACN9T,EAAAA,cAACyZ,EAAyB,CAAC9C,SAAUzW,IAGzCF,EAAAA,cAAC+W,EAA0B,CAACJ,SAAUzW,WCtBjDka,EAAOC,QAAUra,cCAjBoa,EAAOC,QAAUC","sources":["webpack://Msdyn365.Commerce.Online/./src/themes/wldtheme/views/components/navigation-menu-utilities.tsx?6a03","webpack://Msdyn365.Commerce.Online/./src/themes/wldtheme/views/navigation-menu.view.tsx?5140","webpack://Msdyn365.Commerce.Online/./lib/navigation-menu/module-registration.js?7039","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/navigation-menu.view.tsx?bc23","webpack://Msdyn365.Commerce.Online/./src/modules/navigation-menu/navigation-menu.data.ts?9815","webpack://Msdyn365.Commerce.Online/./src/modules/navigation-menu/navigation-menu.tsx?2bef","webpack://Msdyn365.Commerce.Online/./src/modules/navigation-menu/navigation-menu.view.tsx?c594","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/navigation-menu-utilities.tsx?d092","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/navigation-menu-root-disabled.tsx?1d68","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/navigation-menu-root-enabled.tsx?d5b3","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/navigation-menu.view.tsx?5304","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport * as React from 'react';\r\n\r\nimport { INavigationMenuProps } from '../../definition-extensions/navigation-menu.ext.props.autogenerated';\r\n\r\n/**\r\n * INavigationMenuViewRootProps.\r\n */\r\nexport interface INavigationMenuViewRootProps {\r\n navProps: INavigationMenuViewProps & INavigationMenuProps<{}>;\r\n}\r\n\r\n/**\r\n * Represent navigation menu state interface.\r\n */\r\nexport interface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n categoryImage?: Msdyn365.IImageData[] | null;\r\n mobileViewLabelText?: string;\r\n drawerKeyValue: Msdyn365.IDictionary;\r\n isOnlyMobile: boolean;\r\n isNavOpen: boolean;\r\n}\r\n\r\n/**\r\n * NavMenuConstants enum.\r\n */\r\nexport enum NavMenuConstants {\r\n zero = 0,\r\n one = 1,\r\n two = 2,\r\n three = 3,\r\n four = 4,\r\n escapeKey = 27,\r\n rootMenu = 1\r\n}\r\n\r\n/**\r\n * GridSizes.\r\n */\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\n/**\r\n * Get category image.\r\n * @param props - Navigation menu props.\r\n * @param categoryImage - Category Image.\r\n * @param alttext - AltText String.\r\n * @returns Returns Node.\r\n */\r\nexport const getCategoryImage = (props: INavigationMenuViewRootProps, categoryImage: string, alttext: string): React.ReactNode | null => {\r\n const categoryImageUrl = generateImageUrl(`${categoryImage}`, props.navProps.context.actionContext.requestContext.apiSettings);\r\n const defaultImageSettings: Msdyn365.IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\r\n sm: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\r\n md: { q: 'w=203&h=203&m=8', w: 0, h: 0 },\r\n lg: { q: 'w=203&h=203&m=8', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n if (categoryImageUrl !== undefined) {\r\n const imageData: Msdyn365.IImageData = { src: categoryImageUrl };\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport MsDyn365, { IDictionary, IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport { ArrayExtensions, generateImageUrl, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n addThrottledEvent,\r\n Drawer,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n ICollapseProps,\r\n IDrawerState,\r\n IPayLoad,\r\n isMobile,\r\n ITelemetryContent,\r\n Module,\r\n Node,\r\n onTelemetryClick,\r\n VariantType\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { computed } from 'mobx';\r\nimport * as React from 'react';\r\n\r\nimport { NavMenuConstants } from './components/navigation-menu-utilities';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n categoryImage?: IImageData[] | null;\r\n categoryImageAltText: string;\r\n drawerKeyValue: IDictionary;\r\n mobileViewLabelText?: string;\r\n isOnlyMobile: boolean,\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent {\r\n private currentLevel: number = 0;\r\n\r\n private static isBackTrack: boolean = false;\r\n \r\n private readonly _positionInSetOffset: number = 1;\r\n\r\n private readonly escapeKey: number = 27;\r\n\r\n private readonly menuNode: React.RefObject;\r\n\r\n private readonly menuItemRef: React.RefObject;\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n private customResizeThrottledEventHandler?: (event: Event) => void;\r\n\r\n constructor(props: INavigationMenuViewProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.menuItemRef = React.createRef();\r\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined, categoryImageAltText: '', drawerKeyValue: {}, isOnlyMobile: this.isOnlyMobile };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n this._escFunction = this._escFunction.bind(this);\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 }\r\n\r\n @computed public get isOnlyMobile(): boolean {\r\n const isGridSettingsSM = isMobile({ variant: VariantType.Browser, context: this.props.context.request }) === 'sm';\r\n const isGridSettingsXS = isMobile({ variant: VariantType.Browser, context: this.props.context.request }) === 'xs';\r\n return isGridSettingsSM || isGridSettingsXS;\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (MsDyn365.isBrowser) {\r\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\r\n document.body.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\r\n this._customUpdateViewport();\r\n document.body.addEventListener('mousedown', this._handleClickOutside);\r\n document.body.addEventListener('focusout', this._handleFocusOutside);\r\n }\r\n }\r\n\r\n public componentDidUpdate(): void {\r\n if (this.menuItemRef.current?.children[0] && this.props.isMobileView) {\r\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\r\n if (MsDyn365.isBrowser) {\r\n document.removeEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\r\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\r\n }\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n this.currentLevel = 1;\r\n return <>{this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()};\r\n }\r\n\r\n /**\r\n * Method to render mobile menu.\r\n * @returns Jsx element.\r\n */\r\n private _renderMobileMenu(): JSX.Element {\r\n const { MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\r\n \r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\r\n \r\n \r\n {this.state.mobileViewLabelText}\r\n \r\n )}\r\n {this._renderMobileDisplay()}\r\n \r\n \r\n );\r\n }\r\n\r\n /**\r\n * Handle back navigation for menu items for mobile view.\r\n * @returns Returns empty.\r\n */\r\n private readonly _handleGoBack = () => () => {\r\n NavigationMenuView.isBackTrack = true;\r\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\r\n };\r\n\r\n private _renderMobileDisplay(): JSX.Element[] {\r\n const { ListItem } = this.props;\r\n const menuItemData: IMenuItemData[] = this.props.menuItemData;\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n\r\n if (ArrayExtensions.hasElements(menuItemData)) {\r\n menuItemData[0].id = 1;\r\n }\r\n\r\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\r\n const menuItem = this._getFromMobileSubMenu(undefined, menuItemData);\r\n\r\n if (menuItem) {\r\n menuItemList.push(\r\n \r\n {` `}\r\n {this._createMobileMenuItemList(menuItem)} {` `}\r\n \r\n );\r\n }\r\n } else {\r\n for (const [index, item] of menuItemData.entries()) {\r\n menuItemList.push(\r\n \r\n {this._createMobileMenuItemList(item)}\r\n \r\n );\r\n }\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n /**\r\n * Checks to assign a ref for focus.\r\n * @param index -Sub menu list index.\r\n * @param mobileViewLabelText -Mobile view label text.\r\n * @param optionLinkText -Sub menu item link text.\r\n * @returns Boolean.\r\n */\r\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\r\n const firstIndex: number = 0;\r\n if (!NavigationMenuView.isBackTrack && index === firstIndex) {\r\n return false;\r\n }\r\n if (!optionLinkText || !mobileViewLabelText) {\r\n return false;\r\n }\r\n return mobileViewLabelText === optionLinkText;\r\n };\r\n\r\n private _getFromMobileSubMenu(parentMenuId?: number, menu?: IMenuItemData[]): IMenuItemData | null {\r\n if (!menu) {\r\n return null;\r\n }\r\n\r\n for (let index = 0; index <= menu.length - NavMenuConstants.one; index++) {\r\n const item: IMenuItemData = menu[Number(index)];\r\n\r\n if (item.id === this.state.activeMenu) {\r\n if (!NavigationMenuView.isBackTrack) {\r\n this.setState({ parentMenu: parentMenuId });\r\n } else {\r\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: item.linkText });\r\n }\r\n return item;\r\n }\r\n const found = this._getFromMobileSubMenu(item.id, item.subMenu);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMobileMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\r\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\r\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\r\n }\r\n\r\n return (\r\n <>\r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\r\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\r\n } else if (!menuItemData.linkURL && !(this.state.isOnlyMobile && this.state.activeMenu !== undefined)) {\r\n return this._renderSpanMenuItem(menuItemData);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Method to render desktop menu.\r\n * @returns Jsx element.\r\n */\r\n private _renderDesktopMenu(): JSX.Element {\r\n const { MenuList, Navigation } = this.props;\r\n return (\r\n \r\n \r\n {this._renderDisplay()}\r\n \r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to render drawer component.\r\n * @param menuItem -Menuitem data.\r\n * @param setSize -Setsize data.\r\n * @param posinset -Current position.\r\n * @returns Jsx element.\r\n */\r\n private _renderDrawer(menuItem: IMenuItemData, setSize?: number, posinset?: number): JSX.Element | null {\r\n const toggleButtonText = menuItem.linkText;\r\n const keyValue = this.state.drawerKeyValue;\r\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\r\n const keys = keyValue !== undefined ? keyValue : {};\r\n\r\n let isDrawerOpen = false;\r\n if (keys[buttonText]) {\r\n isDrawerOpen = true;\r\n }\r\n const colProps: ICollapseProps = { isOpen: isDrawerOpen };\r\n return (\r\n \r\n
\r\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData, currentPos: number) => {\r\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\r\n return this._renderDrawer(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\r\n }\r\n return this._renderDrawerLink(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\r\n })}\r\n
\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to render link.\r\n * @param linkText -Text on Menu link.\r\n * @param setSize -Setsize data.\r\n * @param posinset -Current position.\r\n * @returns Jsx element.\r\n */\r\n private _renderLinkText(linkText: string | undefined, setSize: number | undefined, posinset: number | undefined): JSX.Element {\r\n return (\r\n \r\n {linkText}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to render drawer link.\r\n * @param item -Single Menuitem.\r\n * @param setSize -Setsize data.\r\n * @param posinset -Current position.\r\n * @returns Jsx element.\r\n */\r\n private _renderDrawerLink(item: IMenuItemData, setSize: number | undefined, posinset: number): JSX.Element | null {\r\n if (item && item.linkText && item.linkURL && item.linkURL.length > 0) {\r\n return this._renderLinkMenuItem(item, undefined, true, false, setSize, posinset);\r\n } else if (item && item.linkText && !item.linkURL) {\r\n return this._renderSpanMenuItem(item);\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Method to generate menu.\r\n * @returns Jsx element.\r\n */\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem, menuItemData } = this.props;\r\n const menuItemList: JSX.Element[] = [];\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n\r\n return menuItemList;\r\n }\r\n\r\n /**\r\n * Method to create item list.\r\n * @param menuItemData -Single Menuitem.\r\n * @returns Jsx element.\r\n */\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n return (\r\n <>\r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\r\n const subMenuLevel = 3;\r\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || subMenuLevel;\r\n\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions =\r\n subMenus &&\r\n subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = option.subMenu && option.subMenu.length > 0;\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\r\n } else {\r\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\r\n }\r\n let subMenu;\r\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\r\n if (haveSubmenu) {\r\n this.currentLevel++;\r\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\r\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\r\n }\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\r\n }\r\n\r\n /**\r\n * Method to render button menu item.\r\n * @param option -Single Menuitem.\r\n * @param activeMenu -Active menu number.\r\n * @param index -Active menu index.\r\n * @returns Jsx element.\r\n */\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to render link menu item.\r\n * @param option -Single Menuitem.\r\n * @param index -Active menu index.\r\n * @param hoverEffect -Active menu effect.\r\n * @param isParent -Is parent menu.\r\n * @param setSize -Setsize data.\r\n * @param posinset -Current position.\r\n * @returns Jsx element.\r\n */\r\n private _renderLinkMenuItem(\r\n option: IMenuItemData,\r\n index?: number,\r\n hoverEffect: boolean = true,\r\n isParent: boolean = false,\r\n setSize?: number,\r\n posinset?: number\r\n ): JSX.Element | null {\r\n const { Link } = this.props;\r\n const linkText = option.linkText ? option.linkText : '';\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to render promotional link.\r\n * @param linkText -Link text.\r\n * @param linkUrl -Link url.\r\n * @returns Jsx element.\r\n */\r\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\r\n const { Link } = this.props;\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n if (linkText && linkUrl) {\r\n return (\r\n \r\n {linkText}\r\n \r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Method to render span menu item.\r\n * @param option -Single Menu Item.\r\n * @param index -Index.\r\n * @param isParent -Is parent menu.\r\n * @returns Jsx element.\r\n */\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Method to render menu.\r\n * @param level -Menu level.\r\n * @param menuOptions -Menu lists.\r\n * @param currentItem -Menu current.\r\n * @param submenu -Mneu has submenu or not.\r\n * @returns Jsx element.\r\n */\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\r\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props;\r\n const categoryImageDisplay =\r\n showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !submenu;\r\n const promotionalContentDisplay =\r\n showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\r\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\r\n this.currentLevel = 1;\r\n return (\r\n \r\n 2 &&\r\n 'navmenu-multi-level'\r\n )}\r\n >\r\n {menuOptions}\r\n \r\n
\r\n {categoryImageDisplay &&\r\n this.state.categoryImage &&\r\n this.state.categoryImage.map(item => (\r\n \r\n {this.state.categoryImage && this._getCategoryImage(item)}\r\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\r\n \r\n ))}\r\n
\r\n \r\n );\r\n }\r\n\r\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\r\n const linkText = option && option.linkText ? option.linkText : '';\r\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\r\n\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\r\n option.promotionalContent.map(item => {\r\n if (item && item.image) {\r\n const imageSrc = item.image.src;\r\n const promotionalItemImageSettings = item.image.imageSettings;\r\n promotionalImage.push({\r\n src: imageSrc,\r\n altText: item.text,\r\n imageSettings: promotionalItemImageSettings,\r\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\r\n });\r\n }\r\n });\r\n }\r\n this.setState({\r\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\r\n categoryImageAltText: linkText\r\n });\r\n };\r\n\r\n /**\r\n * Method to handle dropdwon change.\r\n * @param data -Menuitem data.\r\n * @param parentId -Menu parent.\r\n * @returns Jsx element.\r\n */\r\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.props.isMobileView) {\r\n this.setState({\r\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\r\n parentMenu: parentId\r\n });\r\n if (this.props.showCategoryImage) {\r\n this._updateCategoryImage(data.imageSource!, data)();\r\n }\r\n } else {\r\n NavigationMenuView.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n parentMenu: parentId\r\n });\r\n }\r\n\r\n this._resetFocus();\r\n };\r\n\r\n /**\r\n * Method to call when focus lost from menu.\r\n */\r\n private readonly _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n };\r\n\r\n /**\r\n * Method to handle click outside of menu.\r\n * @param event -HTML event.\r\n */\r\n private readonly _handleClickOutside = (event: MouseEvent) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({ activeMenu: 1, mobileViewLabelText: '' });\r\n } else {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Method to handle click outside of menu.\r\n * @param event -HTML event.\r\n */\r\n private readonly _handleFocusOutside = (event: FocusEvent) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\r\n this._closeSubmenu();\r\n }\r\n };\r\n\r\n /**\r\n * Method to handle close submenu event.\r\n */\r\n private _closeSubmenu(): void {\r\n this.setState({ activeMenu: undefined });\r\n }\r\n\r\n /**\r\n * Method to handle escape key event.\r\n * @param event -HTML event.\r\n */\r\n private readonly _escFunction = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === this.escapeKey) {\r\n this._closeSubmenu();\r\n }\r\n };\r\n\r\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\r\n if (!categoryImage || !categoryImage.src) {\r\n return null;\r\n }\r\n\r\n const categoryImageUrl = generateImageUrl(categoryImage.src, this.props.context.actionContext.requestContext.apiSettings);\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\r\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\r\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\r\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n if (categoryImageUrl !== undefined) {\r\n const ImageData: IImageData = { src: categoryImageUrl };\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Method to handle escape key event.\r\n * @param drawerState -HTML event.\r\n */\r\n private readonly _onDrawerChange = (drawerState: IDrawerState) => {\r\n const { drawerKeyValue } = this.state;\r\n const drawerText: string = drawerState.buttonText !== undefined ? drawerState.buttonText : '';\r\n const newPair = { [drawerText]: drawerState.isOpen };\r\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\r\n };\r\n\r\n /**\r\n * Custom update viewport.\r\n */\r\n private readonly _customUpdateViewport = (): void => {\r\n this.setState({ isOnlyMobile: this.isOnlyMobile });\r\n };\r\n}\r\n\r\nexport default NavigationMenuView;\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['navigation-menu'] = {\n c: () => require('@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu/navigation-menu'),\n $type: 'contentModule',\n da: [{name:'categories', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'navigation-menu',\n p: 'navigation-menu',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|themes|wldtheme|views|navigation-menu'] = {\n c: () => require('partner/themes/wldtheme/views/navigation-menu.view.tsx'),\n cn: '__local__-__local__-navigation-menu'\n };\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|navigation-menu'] = {\n c: () => require('@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-navigation-menu'\n };\nviewDictionary['@msdyn365-commerce-modules|navigation-menu|modules|navigation-menu|navigation-menu'] = {\n c: () => require('@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-modules-navigation-menu-navigation-menu'\n };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|navigation-menu'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-navigation-menu'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IDictionary, IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IDrawerState,\n IPayLoad,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n categoryImageAltText: string;\n drawerKeyValue: IDictionary;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private currentLevel: number = 0;\n\n private readonly _positionInSetOffset: number = 1;\n\n private readonly escapeKey: number = 27;\n\n private readonly menuNode: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.state = { activeMenu: undefined, parentMenu: undefined, categoryImageAltText: '', drawerKeyValue: {} };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this._escFunction = this._escFunction.bind(this);\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 }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.removeEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n }\n\n public render(): JSX.Element | null {\n const { isMobileView } = this.props;\n\n this.currentLevel = 1;\n return <>{isMobileView ? this._renderMobileMenu() : this._renderDesktopMenu()};\n }\n\n /**\n * Method to render mobile menu.\n * @returns Jsx element.\n */\n private _renderMobileMenu(): JSX.Element {\n const { isMobileView, menuItemData, Navigation } = this.props;\n return (\n \n {menuItemData.map((menuItem: IMenuItemData, posinset: number) => {\n return this._renderDrawerMenu(menuItem, menuItemData.length, posinset + this._positionInSetOffset);\n })}\n \n );\n }\n\n /**\n * Method to render desktop menu.\n * @returns Jsx element.\n */\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props;\n return (\n \n \n {this._renderDisplay()}\n \n \n );\n }\n\n /**\n * Method to render drawer menu.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerMenu(menuItem: IMenuItemData, setSize: number, posinset: number): JSX.Element | null {\n if (menuItem && menuItem.subMenu && ArrayExtensions.hasElements(menuItem.subMenu)) {\n return this._renderDrawer(menuItem, setSize, posinset);\n }\n return this._renderLinkMenuItem(menuItem, undefined, true, false, setSize, posinset);\n }\n\n /**\n * Method to render drawer component.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawer(menuItem: IMenuItemData, setSize?: number, posinset?: number): JSX.Element | null {\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue !== undefined ? keyValue : {};\n const { isMobileView } = this.props;\n\n let isDrawerOpen = false;\n if (keys[buttonText]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData, currentPos: number) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n return this._renderDrawer(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n }\n return this._renderDrawerLink(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n })}\n
\n \n );\n }\n\n /**\n * Method to render link.\n * @param linkText -Text on Menu link.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkText(linkText: string | undefined, setSize: number | undefined, posinset: number | undefined): JSX.Element {\n return (\n \n {linkText}\n \n );\n }\n\n /**\n * Method to render drawer link.\n * @param item -Single Menuitem.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerLink(item: IMenuItemData, setSize: number | undefined, posinset: number): JSX.Element | null {\n if (item && item.linkText && item.linkURL && item.linkURL.length > 0) {\n return this._renderLinkMenuItem(item, undefined, true, false, setSize, posinset);\n } else if (item && item.linkText && !item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n /**\n * Method to generate menu.\n * @returns Jsx element.\n */\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n this.setState({ parentMenu: undefined });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem &&\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)}\n {` `}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n /**\n * Method to get data for submenu.\n * @param item -Single Menuitem.\n * @returns IMenuItemData.\n */\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n this.setState({ parentMenu: item?.id });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n /**\n * Method to create item list.\n * @param menuItemData -Single Menuitem.\n * @returns Jsx element.\n */\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const subMenuLevel = 3;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || subMenuLevel;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions =\n subMenus &&\n subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = option.subMenu && option.subMenu.length > 0;\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\n }\n\n /**\n * Method to render button menu item.\n * @param option -Single Menuitem.\n * @param activeMenu -Active menu number.\n * @param index -Active menu index.\n * @returns Jsx element.\n */\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render link menu item.\n * @param option -Single Menuitem.\n * @param index -Active menu index.\n * @param hoverEffect -Active menu effect.\n * @param isParent -Is parent menu.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false,\n setSize?: number,\n posinset?: number\n ): JSX.Element | null {\n const { Link, isMobileView } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render promotional link.\n * @param linkText -Link text.\n * @param linkUrl -Link url.\n * @returns Jsx element.\n */\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n /**\n * Method to render span menu item.\n * @param option -Single Menu Item.\n * @param index -Index.\n * @param isParent -Is parent menu.\n * @returns Jsx element.\n */\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render menu.\n * @param level -Menu level.\n * @param menuOptions -Menu lists.\n * @param currentItem -Menu current.\n * @param submenu -Mneu has submenu or not.\n * @returns Jsx element.\n */\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, isMobileView, showPromotionalContent } = this.props;\n const categoryImageDisplay =\n !isMobileView && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !submenu;\n const promotionalContentDisplay =\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 &&\n 'navmenu-multi-level'\n )}\n >\n {menuOptions}\n \n
\n {categoryImageDisplay &&\n this.state.categoryImage &&\n this.state.categoryImage.map(item => (\n \n {this.state.categoryImage && this._getCategoryImage(item)}\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({\n src: imageSrc,\n altText: item.text,\n imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n /**\n * Method to handle dropdwon change.\n * @param data -Menuitem data.\n * @param parentId -Menu parent.\n * @returns Jsx element.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n }\n\n this._resetFocus();\n };\n\n /**\n * Method to call when focus lost from menu.\n */\n private readonly _resetFocus = () => {\n if (this.props.isMobileView) {\n setTimeout(() => {\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\n }, 0);\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState({\n activeMenu: undefined,\n categoryImage: null\n });\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Method to handle close submenu event.\n */\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined });\n }\n }\n\n /**\n * Method to handle escape key event.\n * @param event -HTML event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey) {\n if (!this.props.isMobileView) {\n const navDrawerList = Array.from(this.menuNode.current!.childNodes);\n for (const item of navDrawerList) {\n const navDrawerButton = item.firstChild as HTMLButtonElement;\n if (navDrawerButton.getAttribute('aria-expanded') === 'true') {\n navDrawerButton.focus();\n }\n }\n }\n this._closeSubmenu();\n }\n };\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(categoryImage.src, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n const ImageData: IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n };\n\n /**\n * Method to handle escape key event.\n * @param drawerState -HTML event.\n */\n private readonly _onDrawerChange = (drawerState: IDrawerState) => {\n const { drawerKeyValue } = this.state;\n const drawerText: string = drawerState.buttonText !== undefined ? drawerState.buttonText : '';\n const newPair = { [drawerText]: drawerState.isOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n}\n\nexport default NavigationMenuView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { AsyncResult } from '@msdyn365-commerce/retail-proxy';\n\nimport { ICategoryPromotionalContentData } from './navigation-menu.props.autogenerated';\n\nexport interface INavigationMenuData {\n categories: AsyncResult;\n}\n\nexport interface IMenuItemData {\n id?: number;\n linkText?: string;\n linkURL?: string;\n imageSource?: string;\n imageDestinationURL?: string;\n subMenu?: IMenuItemData[];\n promotionalContent?: ICategoryPromotionalContentData[];\n menuSource?: string;\n shouldOpenNewTab?: boolean;\n ariaLabel?: string;\n}\n\n/**\n *\n * Menu type index id.\n */\nexport enum MenuTypeIndexId {\n Cms = 1000,\n Retail = 5000\n}\n\n/**\n *\n * Menu type source.\n */\nexport enum MenuSource {\n Cms = 'Cms',\n Retail = 'Retail'\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { IActionContext, IGridSettings, IImageSettings, isEmptyOrNullObject } from '@msdyn365-commerce/core';\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, observable } from 'mobx';\nimport * as React from 'react';\n\nimport { IMenuItemData, INavigationMenuData, MenuSource, MenuTypeIndexId } from './navigation-menu.data';\nimport { ICmsNavItemsData, INavigationMenuProps, ISubMenusData, navigationMenuSource } from './navigation-menu.props.autogenerated';\n\nexport interface INavigationMenuViewProps extends INavigationMenuProps {\n className: string;\n menuItemData: IMenuItemData[];\n Navigation: IModuleProps;\n MenuList: INodeProps;\n ListItem: INodeProps;\n Link: INodeProps;\n Button: INodeProps;\n Span: INodeProps;\n ImageContainer: INodeProps;\n MobileDescriptionContainer: INodeProps;\n MobileBackButton: INodeProps;\n MobileDescriptionLabel: INodeProps;\n imageSettings: IImageSettings;\n gridSettings: IGridSettings;\n isMobileView: boolean;\n DivContainer?: INodeProps;\n ImageDivContainer?: INodeProps;\n showCategoryImage?: boolean;\n showPromotionalContent?: boolean;\n}\n\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface INavigationMenuState {\n isMobile: boolean;\n}\n\n/**\n *\n * NavigationMenu component.\n * @extends {React.PureComponent>}\n */\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\n private static CMSItemIdInit: number = MenuTypeIndexId.Cms;\n\n private static RSItemIdInit: number = MenuTypeIndexId.Retail;\n\n private resizeThrottledEventHandler?: (event: Event) => void;\n\n private menuItemList: IMenuItemData[];\n\n private isRetail: boolean = true;\n\n private isCMS: boolean = true;\n\n @observable\n private viewport: GridSize;\n\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\n let nameTranslation: TextValueTranslation | undefined;\n if (locale && nameTranslations && nameTranslations.length > 0) {\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\n }\n\n return nameTranslation && nameTranslation.Text;\n }\n\n constructor(props: INavigationMenuProps) {\n super(props);\n this._updateViewport = this._updateViewport.bind(this);\n this.viewport =\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\n this.state = { isMobile: this.isMobile };\n this.menuItemList = [];\n }\n\n @computed get isMobile(): boolean {\n return this.viewport === 'xs' || this.viewport === 'sm';\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n this.resizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\n }\n this._updateViewport();\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\n }\n }\n\n public render(): JSX.Element | null {\n this.menuItemList = this._mapData();\n if (isEmptyOrNullObject(this.props.data)) {\n this.props.telemetry.error('Navigatiomenu returned null');\n return null;\n }\n\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=224&h=300&m=6', w: 0, h: 0 },\n xl: { q: 'w=224&h=300&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n const viewProps = {\n ...this.props,\n ...this.state,\n imageSettings: defaultImageSettings,\n gridSettings: this.props.context.request.gridSettings,\n Navigation: {\n moduleProps: this.props,\n className: classnames('ms-nav', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\n tag: 'nav',\n role: this.isMobile ? 'listbox' : 'navigation'\n },\n MenuList: {\n className: 'ms-nav__list',\n tag: 'ul',\n role: this.isMobile ? 'listbox' : 'menu'\n },\n ListItem: {\n className: 'ms-nav__list__item',\n role: 'presentation',\n tag: 'li'\n },\n showCategoryImage: this.props.config.displayCategoryImage ?? false,\n showPromotionalContent: this.props.config.displayPromotionalImage ?? false,\n Link: {\n tag: 'a',\n className: 'ms-nav__list__item__link',\n role: this.isMobile ? 'option' : 'menuitem'\n },\n DivContainer: {\n tag: 'div',\n className: 'ms-nav__feature'\n },\n ImageDivContainer: {\n tag: 'div',\n className: 'category-image',\n role: 'tabpanel'\n },\n Button: {\n className: 'ms-nav__list__item__button',\n tag: 'button',\n role: this.isMobile ? 'option' : 'menuitem',\n onClick: this.props\n },\n ImageContainer: {\n className: 'ms-nav__list__item__image'\n },\n Span: {\n className: 'ms-nav__list__item__span',\n tag: 'span'\n },\n MobileDescriptionContainer: {\n className: 'ms-nav__list__mobile__container'\n },\n MobileBackButton: {\n className: 'ms-nav__list__mobile__container__button',\n tag: 'button',\n 'aria-label': this.props.resources.backButtonAriaLabel,\n onClick: this.props\n },\n MobileDescriptionLabel: {\n className: 'ms-nav__list__mobile__container__span',\n tag: 'span'\n },\n isMobileView: this.state.isMobile,\n menuItemData: this.menuItemList,\n className: classnames('ms-nav', this.props.config.className)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _mapData(): IMenuItemData[] {\n const { data, config } = this.props;\n const mergedData: IMenuItemData[] = [];\n if (this.isRetail && data && data.categories && data.categories.result && data.categories.result.length > 0) {\n data.categories.result.map((item: CategoryHierarchy, index) =>\n mergedData.push(this._constructMenuItemData(item, undefined, true, index, true))\n );\n }\n\n if (this.isCMS && config.cmsNavItems && config.cmsNavItems.length > 0) {\n config.cmsNavItems.map((item: ICmsNavItemsData, idx: number) =>\n mergedData.push(this._constructMenuItemData(undefined, item, false, idx + 1))\n );\n }\n return this._constructTopMenuItemData(mergedData);\n }\n\n private _constructTopMenuItemData(mergedData: IMenuItemData[]): IMenuItemData[] {\n const enableTopLevelMenu = this.props.config.enabletopMenu ?? false;\n if (!enableTopLevelMenu) {\n return mergedData;\n }\n const mergedRootMenuData: IMenuItemData[] = [];\n const topMenu = {\n id: 1,\n linkText: this.props.config.rootMenuNavigation ?? '...',\n linkURL: '#',\n imageSource: undefined,\n subMenu: mergedData\n } as IMenuItemData;\n mergedRootMenuData.push(topMenu);\n\n return mergedRootMenuData;\n }\n\n private _constructMenuItemData(\n retailItem?: CategoryHierarchy,\n cmsItem?: ICmsNavItemsData,\n isRetail?: boolean,\n idx?: number,\n addedAllMenu?: boolean\n ): IMenuItemData {\n const locale =\n this.props.context && this.props.context.request && this.props.context.request.locale\n ? this.props.context.request.locale\n : 'en-us';\n const { categoryPromotionalContent } = this.props.config;\n const cmsItemText = (cmsItem && cmsItem.linkText) || '';\n const { menuAriaLabel } = this.props.resources;\n\n // Filter category promotional data based on category name\n const promotionalData =\n retailItem &&\n categoryPromotionalContent?.filter(promoItem => promoItem.categoryName?.toLowerCase() === retailItem?.Name?.toLowerCase());\n\n // First check if image is available from promotional data else read from retail server\n let imageSource: string = 'empty';\n if (ArrayExtensions.hasElements(retailItem?.Images) && retailItem!.Images[0].Uri) {\n imageSource = retailItem!.Images[0].Uri;\n }\n if (isRetail) {\n return {\n id: NavigationMenu.RSItemIdInit++,\n linkText: NavigationMenu.getFriendlyName(locale, retailItem?.NameTranslations) ?? '',\n linkURL: retailItem?.Url,\n imageSource,\n subMenu: this._getNestedChildren(retailItem, imageSource, addedAllMenu),\n promotionalContent: this.props.config.displayPromotionalImage && promotionalData,\n menuSource: MenuSource.Retail,\n ariaLabel: `${NavigationMenu.getFriendlyName(locale, retailItem?.NameTranslations) ?? ''} ${menuAriaLabel}`\n } as IMenuItemData;\n }\n return {\n id: NavigationMenu.CMSItemIdInit++,\n linkText: cmsItemText,\n linkURL: (cmsItem && cmsItem.linkUrl && cmsItem.linkUrl.destinationUrl) || '',\n imageDestinationURL: (cmsItem && cmsItem.imageLink && cmsItem.imageLink.destinationUrl) || '',\n imageSource: (cmsItem && cmsItem.image && cmsItem.image.src) || '',\n subMenu: this._getCMSNestedChildren(cmsItem),\n menuSource: MenuSource.Cms,\n shouldOpenNewTab: cmsItem?.openInNewTab,\n ariaLabel: `${cmsItemText} ${menuAriaLabel}`\n } as IMenuItemData;\n }\n\n private _getNestedChildren(category?: CategoryHierarchy, imageSourceUrl?: string, addedAllMenu: boolean = false): IMenuItemData[] {\n const nestedChildren: IMenuItemData[] = [];\n if (!category || !category.Children || category.Children.length === 0) {\n return [];\n }\n if (!this.props.config.enabletopMenu && addedAllMenu) {\n nestedChildren.push({\n linkText: this.props.resources.allCategoryMenuText,\n imageSource: imageSourceUrl,\n linkURL: getCategoryUrl(category, (this.props.context as unknown) as IActionContext, {})\n });\n }\n category.Children.map((item: CategoryHierarchy, index) => {\n nestedChildren.push(this._constructMenuItemData(item, undefined, true, index, false));\n });\n return nestedChildren;\n }\n\n private _getCMSNestedChildren(category?: ICmsNavItemsData): IMenuItemData[] {\n const nestedChildren: IMenuItemData[] = [];\n\n if (!category || !category.subMenus || category.subMenus.length === 0) {\n return [];\n }\n\n category.subMenus.map((item: ISubMenusData, idx: number) => {\n nestedChildren.push(this._constructMenuItemData(undefined, item, false, idx));\n });\n return nestedChildren;\n }\n\n private readonly _setNavigationSource = (sourceType?: navigationMenuSource): void => {\n switch (sourceType) {\n case navigationMenuSource.retailServerOnly:\n this.isRetail = true;\n this.isCMS = false;\n break;\n case navigationMenuSource.cmsOnly:\n this.isRetail = false;\n this.isCMS = true;\n break;\n case navigationMenuSource.all:\n this.isRetail = true;\n this.isCMS = true;\n break;\n default:\n }\n };\n\n private _updateViewport(): void {\n this.viewport = this._getViewport();\n this.setState({ isMobile: this.isMobile });\n }\n\n private _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\nexport default NavigationMenu;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IPayLoad,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { INavigationMenuViewProps } from './navigation-menu';\nimport { IMenuItemData } from './navigation-menu.data';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n mobileViewLabelText?: string;\n categoryImageAltText: string;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private currentLevel: number = 0;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined, categoryImageAltText: '' };\n this._closeSubmenu = this._closeSubmenu.bind(this);\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 }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n }\n\n public render(): JSX.Element | null {\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\n\n this.currentLevel = 1;\n return (\n \n \n {isMobileView && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n !NavigationMenuView.isBackTrack\n ? this.setState({ parentMenu: undefined })\n : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemDatum.linkText });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem &&\n menuItemList.push(\n \n {' '}\n {this._createMenuItemList(menuItem)}{' '}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n !NavigationMenuView.isBackTrack\n ? this.setState({ parentMenu: item?.id })\n : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n this.props.context.telemetry.error('Submenu content is empty, module wont render.');\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false)}\n \n );\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\n }\n this.props.context.telemetry.error('Navigation menu content is empty, module wont render.');\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || 3;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions =\n subMenus &&\n subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = option.subMenu && option.subMenu.length > 0;\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\n }\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false\n ): JSX.Element | null {\n const { Link } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent, isMobileView } = this.props;\n const categoryImageDisplay =\n !isMobileView &&\n (showCategoryImage || showPromotionalContent) &&\n !ArrayExtensions.hasElements(this.state.categoryImage) &&\n !submenu;\n const promotionalContentDisplay =\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 &&\n 'navmenu-multi-level'\n )}\n >\n {menuOptions}\n \n {categoryImageDisplay &&\n this.state.categoryImage &&\n this.state.categoryImage.map(item => (\n \n {this.state.categoryImage && this._getCategoryImage(item)}\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({\n src: imageSrc,\n altText: item.text,\n imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuView.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n private readonly _handleGoBack = () => () => {\n NavigationMenuView.isBackTrack = true;\n this.setState({ activeMenu: this.state.parentMenu });\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState({\n activeMenu: undefined,\n mobileViewLabelText: '',\n categoryImage: null\n });\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Parent user clicked Sub menu list.\n * @param optionLinkText -Sub menu list.\n * @returns Ref.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n if (!NavigationMenuView.isBackTrack && index === 0) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined, categoryImage: null, mobileViewLabelText: '' });\n }\n }\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(`${categoryImage.src}`, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n return (\n \n );\n }\n return null;\n };\n}\n\nexport default NavigationMenuView;\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 { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nimport { INavigationMenuProps } from '../../definition-extensions/navigation-menu.ext.props.autogenerated';\n\n/**\n * INavigationMenuViewRootProps.\n */\nexport interface INavigationMenuViewRootProps {\n navProps: INavigationMenuViewProps & INavigationMenuProps<{}>;\n}\n\n/**\n * Represent navigation menu state interface.\n */\nexport interface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: Msdyn365.IImageData[] | null;\n mobileViewLabelText?: string;\n drawerKeyValue: Msdyn365.IDictionary;\n isOnlyMobile: boolean;\n isNavOpen: boolean;\n}\n\n/**\n * NavMenuConstants enum.\n */\nexport enum NavMenuConstants {\n zero = 0,\n one = 1,\n two = 2,\n three = 3,\n four = 4,\n escapeKey = 27,\n rootMenu = 1\n}\n\n/**\n * GridSizes.\n */\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Get category image.\n * @param props - Navigation menu props.\n * @param categoryImage - Category Image.\n * @param alttext - AltText String.\n * @returns Returns Node.\n */\nexport const getCategoryImage = (props: INavigationMenuViewRootProps, categoryImage: string, alttext: string): React.ReactNode | null => {\n const categoryImageUrl = generateImageUrl(`${categoryImage}`, props.navProps.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\n sm: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\n md: { q: 'w=203&h=203&m=8', w: 0, h: 0 },\n lg: { q: 'w=203&h=203&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n const imageData: Msdyn365.IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n};\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 { IMenuItemData, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n addThrottledEvent,\n Button,\n Collapse,\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IPayLoad,\n isMobile,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\n\n/**\n *\n * NavigationMenuRootDisabled component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuRootDisabled extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private readonly supportedLevel: number = NavMenuConstants.four;\n\n private currentLevel: number = NavMenuConstants.zero;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\n\n private readonly payLoad: IPayLoad;\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n private customResizeThrottledEventHandler?: (event: Event) => void;\n\n public constructor(props: INavigationMenuViewRootProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n const { menuItemData } = this.props.navProps;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\n const imageSource = item.image.src;\n this.promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n return null;\n });\n }\n }\n\n this.state = {\n activeMenu: 1,\n mobileViewLabelText: '',\n parentMenu: undefined,\n drawerKeyValue: {},\n isOnlyMobile: this.isOnlyMobile,\n categoryImage: this.promotionalImage,\n isNavOpen: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.navProps.context.request.telemetryPageName!,\n this.props.navProps.friendlyName,\n this.props.navProps.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n }\n\n @computed public get isOnlyMobile(): boolean {\n return isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs';\n }\n\n public componentDidMount(): void {\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n this._customUpdateViewport();\n document.body.addEventListener('mousedown', this._handleClickOutside);\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n }\n\n public render(): JSX.Element | null {\n this.currentLevel = 1;\n const navbarKey = 'header-nav-mobile';\n return (\n \n {this.state.isOnlyMobile ? (\n this._renderMobileMenu()\n ) : (\n <>\n \n {this._renderCollapseMenu()}\n \n )}\n \n );\n }\n\n /**\n * Function to handle nav bar toggle.\n */\n private readonly _toggleNavBar = (): void => {\n this.setState(previousState => ({\n activeMenu: 1,\n isNavOpen: !previousState.isNavOpen\n }));\n };\n\n private _renderCollapseMenu(): JSX.Element | null {\n return (\n \n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\n \n );\n }\n\n private _renderMobileMenu(): JSX.Element {\n const { MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\n\n this.currentLevel = 1;\n return (\n \n \n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props.navProps;\n\n return (\n \n \n {this._renderDisplay()}\n
\n
\n
\n
\n );\n }\n\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\n return this._renderLinkMenuItem(item);\n } else if (!item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem } = this.props.navProps;\n const menuItemData: IMenuItemData[] = this.props.navProps.menuItemData;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (ArrayExtensions.hasElements(menuItemData)) {\n menuItemData[0].id = 1;\n }\n\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\n const menuItem = this._getFromSubMenu(undefined, menuItemData);\n\n if (menuItem) {\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)} {` `}\n \n );\n }\n } else {\n for (const [index, item] of menuItemData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n
\n );\n }\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(parentMenuId?: number, menu?: IMenuItemData[]): IMenuItemData | null {\n if (!menu) {\n return null;\n }\n\n for (let index = 0; index <= menu.length - NavMenuConstants.one; index++) {\n const item: IMenuItemData = menu[Number(index)];\n\n if (item.id === this.state.activeMenu) {\n if (!NavigationMenuRootDisabled.isBackTrack) {\n this.setState({ parentMenu: parentMenuId });\n } else {\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: item.linkText });\n }\n return item;\n }\n const found = this._getFromSubMenu(item.id, item.subMenu);\n if (found) {\n return found;\n }\n }\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\n } else if (!menuItemData.linkURL && !(this.state.isOnlyMobile && this.state.activeMenu !== undefined)) {\n return this._renderSpanMenuItem(menuItemData);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\n if (activeMenu === NavMenuConstants.rootMenu) {\n subMenus = subMenuArray!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n }\n\n const { ListItem } = this.props.navProps;\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\n let menuItem: JSX.Element | null;\n if (hasOptions && this.state.isOnlyMobile) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\n menuItem = this.getMenuItem(option, index);\n } else {\n menuItem = null;\n }\n let subMenu;\n const isHavingSubmenu =\n hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\n\n if (hasOptions && !this.state.isOnlyMobile) {\n if (this.currentLevel >= NavMenuConstants.two) {\n subMenu = this._renderSubMenuDrawer(option);\n } else if (this.currentLevel <= this.supportedLevel) {\n this.currentLevel++;\n levelClassName = `level-${this.currentLevel.toString()}`;\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\n }\n }\n\n if (isHavingSubmenu && this.state.isOnlyMobile) {\n this.currentLevel++;\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\n }\n const imagesource = option.imageSource ? option.imageSource : '';\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, isSubMenu);\n }\n\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\n let menuItem: JSX.Element | null;\n if (this.currentLevel === NavMenuConstants.one) {\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\n }\n return menuItem;\n }\n\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\n const levelClassName = `level-${this.currentLevel.toString()}`;\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n let isDrawerOpen = false;\n if (keys[menuItem.id!]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\n\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n this.currentLevel++;\n if (this.currentLevel < multiLevelSupportedMenu) {\n return this._renderSubMenuDrawer(menuSubItem);\n }\n }\n return this._renderDrawerLink(menuSubItem);\n })}\n
\n \n );\n }\n\n /**\n * Method to handle escape key event.\n * @param menuId -Number.\n * @param isDrawerOpen -Boolean.\n * @returns Void.\n */\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\n const { drawerKeyValue } = this.state;\n const newPair = { [menuId!]: !isDrawerOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props.navProps;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Span } = this.props.navProps;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\n const isCategoryImageDisplay =\n !this.state.isOnlyMobile &&\n showCategoryImage &&\n this.state.categoryImage !== null &&\n this.state.categoryImage !== undefined &&\n !isSubmenu;\n const isPromotionalContentDisplay =\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\n const divContainerClass =\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = NavMenuConstants.one;\n const menuLevelSupportClassName =\n isCategoryImageDisplay &&\n this.props.navProps.config.menuLevelSupport &&\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\n 'navmenu-multi-level';\n\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\n return (\n \n \n {menuOptions}\n \n
\n {isCategoryImageDisplay &&\n ArrayExtensions.hasElements(categoryImages) &&\n categoryImages.map(item => (\n \n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\n {isPromotionalContentDisplay &&\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n /**\n * Handle Category image update.\n * @param categoryImageSource - Image source.\n * @param option - Menu Item data.\n * @returns Returns empty.\n */\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\n const linkText = option.linkText ? option.linkText : '';\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n for (const item of option.promotionalContent) {\n const imageSource = item.image.src;\n promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n }\n this.setState({\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\n });\n };\n\n /**\n * Handle dropdown toggle.\n * @param data - Menu Item data.\n * @param parentId - Number.\n * @returns Returns empty.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.state.isOnlyMobile) {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n if (this.props.navProps.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuRootDisabled.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n /**\n * Handle back navigation for menu items for mobile view.\n * @returns Returns empty.\n */\n private readonly _handleGoBack = () => () => {\n NavigationMenuRootDisabled.isBackTrack = true;\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\n };\n\n /**\n * Function to close the nav menu on click on body.\n * @param event - MouseEvent.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Mobile view label text.\n * @param optionLinkText -Sub menu item link text.\n * @returns Boolean.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n const firstIndex: number = 0;\n if (!NavigationMenuRootDisabled.isBackTrack && index === firstIndex) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n /**\n * Function to handle nav menu close.\n */\n private readonly _closeNavMenu = (): void => {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n (this.menuNode.current?.children[0] as HTMLElement).focus();\n };\n\n /**\n * Function to close the nav menu on esc key.\n * @param event - Event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n (this.menuNode.current?.children[0] as HTMLElement).focus();\n }\n };\n\n /**\n * Custom update viewport.\n */\n private readonly _customUpdateViewport = (): void => {\n this.setState({ isOnlyMobile: this.isOnlyMobile });\n };\n}\n\nexport default NavigationMenuRootDisabled;\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 { IMenuItemData, MenuSource, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n addThrottledEvent,\n Button,\n Collapse,\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IPayLoad,\n isMobile,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\n\n/**\n *\n * NavigationMenuRootEnabled component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuRootEnabled extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private readonly supportedLevel: number = NavMenuConstants.four;\n\n private currentLevel: number = NavMenuConstants.zero;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\n\n private menuItemData: IMenuItemData[] = [];\n\n private readonly payLoad: IPayLoad;\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n private customResizeThrottledEventHandler?: (event: Event) => void;\n\n public constructor(props: INavigationMenuViewRootProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n const { menuItemData } = this.props.navProps;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\n const imageSource = item.image.src;\n this.promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n return null;\n });\n }\n }\n this.state = {\n activeMenu: NavMenuConstants.rootMenu,\n mobileViewLabelText: '',\n parentMenu: undefined,\n drawerKeyValue: {},\n isOnlyMobile: this.isOnlyMobile,\n categoryImage: this.promotionalImage,\n isNavOpen: false\n };\n\n this.telemetryContent = getTelemetryObject(\n this.props.navProps.context.request.telemetryPageName!,\n this.props.navProps.friendlyName,\n this.props.navProps.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n }\n\n @computed public get isOnlyMobile(): boolean {\n return isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs';\n }\n\n public componentDidMount(): void {\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n this._customUpdateViewport();\n document.body.addEventListener('mousedown', this._handleClickOutside);\n this._addShopAllLink();\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n }\n\n public render(): JSX.Element | null {\n this.currentLevel = NavMenuConstants.one;\n const navbarKey = 'header-nav-mobile';\n return (\n \n {this.state.isOnlyMobile ? (\n this._renderMobileMenu()\n ) : (\n <>\n \n {this._renderCollapseMenu()}\n \n )}\n \n );\n }\n\n /**\n * Function to handle nav bar toggle.\n */\n private readonly _toggleNavBar = (): void => {\n this.setState(previousState => ({\n activeMenu: NavMenuConstants.rootMenu,\n isNavOpen: !previousState.isNavOpen\n }));\n };\n\n private _renderCollapseMenu(): JSX.Element | null {\n return (\n \n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\n \n );\n }\n\n private _renderMobileMenu(): JSX.Element {\n const { MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\n\n this.currentLevel = NavMenuConstants.one;\n return (\n \n \n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDesktopMenu(): JSX.Element {\n const { Navigation } = this.props.navProps;\n return (\n \n \n {this._renderDisplay()}\n
\n
\n
\n
\n );\n }\n\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\n return this._renderLinkMenuItem(item);\n } else if (!item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem } = this.props.navProps;\n let menuItemData: IMenuItemData[] = [];\n if (this.state.isOnlyMobile) {\n menuItemData = this.menuItemData;\n } else {\n menuItemData = this.props.navProps.menuItemData;\n }\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n let cmsMenuData: IMenuItemData[] | undefined = [];\n let retailMenuItemData: IMenuItemData[] | undefined = [];\n const retailMenuData = JSON.parse(JSON.stringify(menuItemData)) as IMenuItemData[];\n\n for (const item of retailMenuData) {\n retailMenuItemData = item.subMenu!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n item.subMenu = retailMenuItemData;\n }\n\n for (const item of menuItemData) {\n cmsMenuData = item.subMenu!.filter(subMenuItem => subMenuItem.id && subMenuItem.id < MenuTypeIndexId.Retail);\n }\n\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\n let menuItem: IMenuItemData | null = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n if (!NavigationMenuRootEnabled.isBackTrack) {\n this.setState({\n parentMenu: undefined\n });\n } else {\n this.setState({\n parentMenu: undefined,\n mobileViewLabelText: menuItemDatum.linkText\n });\n }\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum);\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n if (menuItem) {\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)} {` `}\n \n );\n }\n } else {\n for (const [index, item] of retailMenuData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n
\n );\n }\n\n for (const [index, item] of cmsMenuData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n }\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item?.subMenu;\n if (subMenus && ArrayExtensions.hasElements(subMenus)) {\n for (let index = 0; index <= subMenus.length - NavMenuConstants.one; index++) {\n const subMenu: IMenuItemData = subMenus[Number(index)];\n let parentMenuId = item?.id;\n\n if (subMenu.id === this.state.activeMenu) {\n if (parentMenuId === NavMenuConstants.rootMenu && subMenu.id! < MenuTypeIndexId.Retail) {\n parentMenuId = undefined;\n }\n\n if (!NavigationMenuRootEnabled.isBackTrack) {\n this.setState({ parentMenu: parentMenuId });\n } else {\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: subMenu.linkText });\n }\n return subMenu;\n }\n const found = this._getFromSubMenu(subMenu);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\n } else if (!menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\n if (activeMenu === NavMenuConstants.rootMenu) {\n subMenus = subMenuArray!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n }\n\n const { ListItem } = this.props.navProps;\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\n let menuItem: JSX.Element | null;\n if (hasOptions && this.state.isOnlyMobile) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\n menuItem = this.getMenuItem(option, index);\n } else {\n menuItem = null;\n }\n let subMenu;\n const isHavingSubmenu =\n hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\n\n if (hasOptions && !this.state.isOnlyMobile) {\n if (this.currentLevel >= NavMenuConstants.two) {\n subMenu = this._renderSubMenuDrawer(option);\n } else if (this.currentLevel <= this.supportedLevel - NavMenuConstants.one) {\n this.currentLevel++;\n levelClassName = `level-${this.currentLevel.toString()}`;\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\n }\n }\n if (isHavingSubmenu && this.state.isOnlyMobile) {\n this.currentLevel++;\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\n }\n const imagesource = option.imageSource ? option.imageSource : '';\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, isSubMenu);\n }\n\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\n let menuItem: JSX.Element | null;\n if (this.currentLevel === NavMenuConstants.one) {\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\n }\n return menuItem;\n }\n\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\n const levelClassName = `level-${this.currentLevel.toString()}`;\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n let isDrawerOpen = false;\n if (keys[menuItem.id!]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n this.currentLevel++;\n if (this.currentLevel < multiLevelSupportedMenu) {\n return this._renderSubMenuDrawer(menuSubItem);\n }\n }\n return this._renderDrawerLink(menuSubItem);\n })}\n
\n \n );\n }\n\n /**\n * Method to handle escape key event.\n * @param menuId -Number.\n * @param isDrawerOpen -Boolean.\n * @returns Void.\n */\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\n const { drawerKeyValue } = this.state;\n const newPair = { [menuId!]: !isDrawerOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props.navProps;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Span } = this.props.navProps;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\n const { DivContainer, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\n const isCategoryImageDisplay =\n !this.state.isOnlyMobile &&\n showCategoryImage &&\n this.state.categoryImage !== null &&\n this.state.categoryImage !== undefined &&\n !isSubmenu;\n const isPromotionalContentDisplay =\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\n const divContainerClass =\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = NavMenuConstants.one;\n const menuLevelSupportClassName =\n isCategoryImageDisplay &&\n this.props.navProps.config.menuLevelSupport &&\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\n 'navmenu-multi-level';\n\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\n return (\n \n \n {menuOptions}\n \n
\n {isCategoryImageDisplay &&\n ArrayExtensions.hasElements(categoryImages) &&\n categoryImages.map(item => (\n \n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\n {isPromotionalContentDisplay &&\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n /**\n * Handle Category image update.\n * @param categoryImageSource - Image source.\n * @param option - Menu Item data.\n * @returns Returns empty.\n */\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\n const linkText = option.linkText ? option.linkText : '';\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n for (const item of option.promotionalContent) {\n const imageSource = item.image.src;\n promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n }\n this.setState({\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\n });\n };\n\n /**\n * Handle dropdown toggle.\n * @param data - Menu Item data.\n * @param parentId - Number.\n * @returns Returns empty.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.state.isOnlyMobile) {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n if (this.props.navProps.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuRootEnabled.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n /**\n * Handle back navigation for menu items for mobile view.\n * @returns Returns empty.\n */\n private readonly _handleGoBack = () => () => {\n NavigationMenuRootEnabled.isBackTrack = true;\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\n };\n\n /**\n * Function to close the nav menu on click on body.\n * @param event - MouseEvent.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n }\n };\n\n /**\n * Add shop all link for Mobile submenu.\n */\n private readonly _addShopAllLink = (): void => {\n const { menuItemData } = this.props.navProps;\n this.menuItemData = menuItemData;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n this.menuItemData[0].subMenu?.map(item => {\n const shopAllObject = {};\n Object.assign(shopAllObject, { imageSource: item.imageSource });\n Object.assign(shopAllObject, { linkText: this.props.navProps.resources.allCategoryMenuText });\n Object.assign(shopAllObject, { linkURL: item.linkURL });\n if (ArrayExtensions.hasElements(item.subMenu) && item.menuSource === MenuSource.Retail) {\n item.subMenu.unshift(shopAllObject);\n }\n return item;\n });\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Mobile view label text.\n * @param optionLinkText -Sub menu item link text.\n * @returns Boolean.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n const firstIndex: number = 0;\n if (!NavigationMenuRootEnabled.isBackTrack && index === firstIndex) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n /**\n * Function to handle nav menu close.\n */\n private readonly _closeNavMenu = (): void => {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n };\n\n /**\n * Function to close the nav menu on esc key.\n * @param event - Event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n }\n };\n\n /**\n * Custom update viewport.\n */\n private readonly _customUpdateViewport = (): void => {\n this.setState({ isOnlyMobile: this.isOnlyMobile });\n };\n}\n\nexport default NavigationMenuRootEnabled;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport * as React from 'react';\n\nimport { INavigationMenuProps } from '../definition-extensions/navigation-menu.ext.props.autogenerated';\nimport NavigationMenuRootDisabled from './components/navigation-menu-root-disabled';\nimport NavigationMenuRootEnabled from './components/navigation-menu-root-enabled';\n\n/**\n * Render the Navigation menu.\n * @param props - The navigation menu view props.\n * @returns Return HTML having INavigationMenuViewProps props with navigation menu.\n */\nconst navigationMenuView = (props: INavigationMenuViewProps & INavigationMenuProps<{}>): JSX.Element => {\n if (props.config.enabletopMenu) {\n return ;\n }\n\n return ;\n};\n\nexport default navigationMenuView;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["NavMenuConstants","NavigationMenuView","React","constructor","props","super","currentLevel","_positionInSetOffset","escapeKey","_handleGoBack","isBackTrack","this","setState","previousState","activeMenu","parentMenu","_shouldAddFocusMenuRef","index","mobileViewLabelText","optionLinkText","_updateCategoryImage","categoryImageSrc","option","linkText","promotionalImage","src","altText","ArrayExtensions","hasElements","promotionalContent","map","item","image","imageSrc","promotionalItemImageSettings","imageSettings","push","text","additionalProperties","linkUrl","destinationUrl","categoryImage","length","categoryImageAltText","_handleDropdownToggle","data","parentId","isMobileView","id","state","undefined","showCategoryImage","imageSource","_resetFocus","setTimeout","menuNode","current","focus","_handleClickOutside","event","contains","target","isOnlyMobile","_handleFocusOutside","relatedTarget","_closeSubmenu","_escFunction","keyCode","_getCategoryImage","categoryImageUrl","generateImageUrl","context","actionContext","requestContext","apiSettings","defaultImageSettings","viewports","xs","q","w","h","sm","md","lg","lazyload","_ref","_categoryImage$imageS","ImageData","Image","Object","assign","className","gridSettings","request","config","categoryImageSettings","loadFailureBehavior","role","_onDrawerChange","drawerState","drawerKeyValue","newPair","buttonText","isOpen","_objectSpread","_customUpdateViewport","menuItemRef","bind","telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","telemetry","payLoad","getPayloadObject","isGridSettingsSM","isMobile","variant","VariantType","Browser","isGridSettingsXS","componentDidMount","MsDyn365","isBrowser","customResizeThrottledEventHandler","addThrottledEvent","window","document","body","addEventListener","componentDidUpdate","_this$menuItemRef$cur","children","componentWillUnmount","removeEventListener","render","_renderMobileMenu","_renderDesktopMenu","MenuList","MobileBackButton","MobileDescriptionContainer","MobileDescriptionLabel","Navigation","Module","classnames","Node","tabIndex","onClick","_renderMobileDisplay","ListItem","menuItemData","menuItemList","menuItem","_getFromMobileSubMenu","key","_createMobileMenuItemList","entries","ref","parentMenuId","menu","one","Number","found","subMenu","_renderSubMenu","_renderButtonMenuItem","linkURL","StringExtensions","isNullOrWhitespace","_renderLinkMenuItem","_renderSpanMenuItem","_renderDisplay","_renderDrawer","setSize","posinset","toggleButtonText","keyValue","isDrawerOpen","colProps","Drawer","toggleButtonProps","openGlyph","onToggle","collapseProps","closeGlyph","glyphPlacement","_renderLinkText","menuSubItem","currentPos","_menuItem$subMenu2","_menuItem$subMenu","_renderDrawerLink","forEach","_createMenuItemList","subMenus","IsSubMenu","enableMultiSupportMenu","enableMultilevelMenu","multiLevelSupportedMenu","menuLevelSupport","error","levelClassName","menuOptions","idx","hasOptions","haveSubmenu","Math","round","toString","_renderMenu","Button","onFocus","onFocusOut","hoverEffect","arguments","isParent","Link","imagesource","contentAction","etext","attributes","getTelemetryAttributes","shouldOpenNewTab","onMouseOver","href","onTelemetryClick","_renderPromotionalLink","Span","level","currentItem","submenu","DivContainer","ImageDivContainer","showPromotionalContent","categoryImageDisplay","promotionalContentDisplay","DivContainerClass","_item$additionalPrope","__decorate","computed","binding","modules","dataActions","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","__bindings__","viewDictionary","cn","navDrawerList","Array","from","childNodes","navDrawerButton","firstChild","getAttribute","_renderDrawerMenu","keys","ariaLabel","menuItemDatum","_getFromSubMenu","i","MenuTypeIndexId","MenuSource","NavigationMenu","isRetail","isCMS","_setNavigationSource","sourceType","_updateViewport","viewport","device","Type","navigationMenuSource","locale","nameTranslations","nameTranslation","find","Language","toLowerCase","Text","resizeThrottledEventHandler","_this$props$config$di","_this$props$config$di2","_mapData","isEmptyOrNullObject","viewProps","xl","moduleProps","tag","displayCategoryImage","displayPromotionalImage","ImageContainer","resources","backButtonAriaLabel","renderView","mergedData","categories","result","_constructMenuItemData","cmsNavItems","_constructTopMenuItemData","_this$props$config$en","_this$props$config$ro","enabletopMenu","mergedRootMenuData","topMenu","rootMenuNavigation","retailItem","cmsItem","addedAllMenu","categoryPromotionalContent","cmsItemText","menuAriaLabel","promotionalData","filter","promoItem","_promoItem$categoryNa","_retailItem$Name","categoryName","Name","_NavigationMenu$getFr","_NavigationMenu$getFr2","Images","Uri","RSItemIdInit","getFriendlyName","NameTranslations","Url","_getNestedChildren","menuSource","Retail","CMSItemIdInit","imageDestinationURL","imageLink","_getCMSNestedChildren","Cms","openInNewTab","category","imageSourceUrl","nestedChildren","Children","allCategoryMenuText","getCategoryUrl","_getViewport","innerWidth","observable","getCategoryImage","alttext","navProps","_props$navProps$confi","imageData","Msdyn365","NavigationMenuRootDisabled","supportedLevel","four","zero","_toggleNavBar","isNavOpen","_bindDesktopCategoryClick","menuId","categoryImageSource","_closeNavMenu","_this$menuNode$curren","_this$menuNode$curren2","title","hamburgerAriaLabel","_renderCollapseMenu","Collapse","subMenuArray","isSubMenu","_this$props$navProps$","_this$props$navProps$2","rootMenu","subMenuItem","isEnableMultiSupportMenu","three","getMenuItem","isHavingSubmenu","two","_renderSubMenuDrawer","_renderLinkMenuItemLevelOne","_this$props$navProps$3","timeout","isHoverEffect","isSubmenu","_this$state$categoryI","isCategoryImageDisplay","isPromotionalContentDisplay","divContainerClass","menuLevelSupportClassName","categoryImages","imagesContainerKey","join","_item$src","NavigationMenuRootEnabled","_addShopAllLink","_this$menuItemData$0$","shopAllObject","unshift","cmsMenuData","retailMenuItemData","retailMenuData","JSON","parse","stringify","module","exports","ReactDOM"],"sourceRoot":""}