{"version":3,"file":"static/js/36e828cd574cf18b8af2.bundle.js","mappings":";4LAYA,SAAeA,EAAAA,EAAAA,IAA2B,CACtCC,OAA6BC,EAAAA,aAC7BC,MAAQC,IACGC,EAAAA,EAAAA,0BAAyB,CAAEC,OAAQ,CAAEC,IAAK,IAAOH,EAAQI,eAAeC,YAAYC,8rBCkC7F,MAAOC,EAyBTC,YACIC,EACAJ,EACAK,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GAgBG,KAAAC,YAAc,KACjB,MAAMV,EAAmBW,EAAAA,EAAA,GAClBC,KAAKZ,oBAAoBR,SACzBqB,EAAAA,EAAAA,IAAKD,KAAKZ,oBAAoBc,UAoBrC,OAjBiBC,EAAAA,EAAAA,kBACbH,KAAKjB,YACL,CAAEqB,IAAK,WAAYC,MAAOL,KAAKb,UAC/B,CAAEiB,IAAK,WAAYC,MAAOL,KAAKV,UAC/B,CAAEc,IAAK,aAAcC,MAAOL,KAAKT,YACjC,CAAEa,IAAK,YAAaC,MAAOL,KAAKL,WAChC,CACIS,IAAK,WACLC,MAAOL,KAAKX,SAASiB,KACjBC,GACI,mBAAmBA,EAAQC,wCAAwCD,EAAQE,sBACvE,4BAA4BF,EAAQG,uBAAyB,QAG7E,CAAEN,IAAK,sBAAuBC,OAAOM,EAAAA,EAAAA,iBAAgBvB,IACrD,CAAEgB,IAAK,SAAUC,MAAOL,KAAKN,UAK9B,KAAAkB,mBAAqB,IAAM,yBAE3B,KAAAC,cAAgB,IAAiB,UA1CpCb,KAAKb,SAAWA,EAChBa,KAAKjB,YAAcA,EACnBiB,KAAKV,SAAWA,EAChBU,KAAKT,WAAaA,EAClBS,KAAKZ,oBAAsBA,EAC3BY,KAAKX,SAAWA,EAChBW,KAAKR,kBAAoBA,EACzBQ,KAAKP,qBAAuBA,EAC5BO,KAAKN,OAASA,EACdM,KAAKL,UAAYA,MAAAA,EAAAA,EAAa,EAC9BK,KAAKJ,8BAAgCA,EACrCI,KAAKH,iBAAmBA,GA2DzB,MAAMiB,EAA4BA,CACrCC,EACAC,KAEA,MAAM7B,EACyC,aAA3C4B,EAAKjC,eAAemC,UAAU9B,UAA4B4B,EAAKjC,eAAeoC,OAASH,EAAKjC,eAAeoC,MAAMC,WAC3G,WACA,SAEJ/B,EAAsBgC,EAAAA,yBAAyBC,cAAcN,GAAMO,oBACnEC,GAAgBC,EAAAA,EAAAA,IAAuBT,EAAKjC,gBAC5CU,MA3IoBiC,EA2IqBV,KA1I9BU,EAAUC,aAAiDC,IAAvCF,EAAUC,OAAOlC,oBAA0E,IAAvCiC,EAAUC,OAAOlC,mBAD9G,IAA8BiC,EA4I1B,MAAMhC,EAhIV,SAA+BgC,GAA+D,IAAAG,EAC1F,QAAyB,QAAjBA,EAACH,EAAUC,cAAM,IAAAE,IAAhBA,EAAkBC,oBA+HEC,CAAsBf,GAC7CpB,GAAYoC,EAAAA,EAAAA,IAAahB,EAAKjC,gBAYpC,GAVIiC,EAAKjC,eAAeoC,OAASH,EAAKjC,eAAeoC,MAAMc,UACvD5C,EAAoBc,QAAU,CAAE+B,QAAuBC,KAAKC,MAAMC,mBAAmBrB,EAAKjC,eAAeoC,MAAMc,YASlG,aAAb7C,EACA,OAAO,IAAI6B,EACP7B,EACA4B,EAAKjC,eAAeC,YACpBK,EACAmC,IACER,EAAKjC,eAAemC,UAAUoB,QAAWtB,EAAKjC,eAAeoC,OAASH,EAAKjC,eAAeoC,MAAMC,YAAe,QACjHQ,EACAnC,EACAC,EACAsB,EAAKjC,eAAeY,OACpBC,GAED,GAAiB,WAAbR,GAAyB4B,EAAKjC,eAAeoC,OAASH,EAAKjC,eAAeoC,MAAMoB,EACvF,OAAO,IAAItB,EACP7B,EACA4B,EAAKjC,eAAeC,YACpBK,EACAmC,OACAI,EACAZ,EAAKjC,eAAeoC,MAAMoB,EAC1B9C,EACAC,EACAsB,EAAKjC,eAAeY,OACpBC,GAED,GAAiB,WAAbR,GAAyB4B,EAAKjC,eAAeoC,OAASH,EAAKjC,eAAeoC,MAAMqB,eAAgB,CACvG,IAAIhD,EAAa,GASjB,OAPIA,EADAwB,EAAKjC,eAAeoC,MAAMsB,UACbN,KAAKO,UAAU,CACxBC,UAAW3B,EAAKjC,eAAeoC,MAAMsB,UACrCG,eAAgB5B,EAAKjC,eAAeoC,MAAMqB,iBAGjCL,KAAKO,UAAU,CAAEE,eAAgB5B,EAAKjC,eAAeoC,MAAMqB,iBAErE,IAAIvB,EACP7B,EACA4B,EAAKjC,eAAeC,YACpBK,EACAmC,OACAI,EACApC,EACAC,EACAC,EACAsB,EAAKjC,eAAeY,OACpBC,GA2BR,MAAM,IAAIiD,MAAM,+PCpMRC,0DA7BN,MAAOC,UAAyC7D,EAAAA,EAAtDC,kCAKW,KAAA0B,mBAAqB,IAAc,0BAMnC,KAAAC,cAAgB,IAEG,aAAlBb,KAAKb,UACJa,KAAKX,UAAYW,KAAKX,SAAS0D,OAAS,GACxC/C,KAAKZ,qBACFY,KAAKZ,oBAAoBc,SACzBF,KAAKZ,oBAAoBc,QAAQ+B,SACjCjC,KAAKZ,oBAAoBc,QAAQ+B,QAAQc,OAAS,EAE/C,UAEJ,gBAOf,SAAYF,GAIRA,EAAA,kBAKAA,EAAA,kBAKAA,EAAA,kBAdJ,CAAYA,IAAAA,EAAoC,KAwFzCG,eAAeC,EAClBC,EACAxE,EACAyE,EACAvD,GAEA,MAEMwD,EAAiCF,EAAqB5C,KAAI+C,IAC5D,MAAMC,GAAcC,EAAAA,EAAAA,yBAAwBF,EAAqB3E,EAAQI,eAAeC,aAMxF,OAJIuE,IACAD,EAAoBG,gBAAkBF,GAGnCD,KAKX,GACI3E,EAAQI,eAAe2E,IAAI/B,OAAOgC,iBAAmBC,EAAAA,gBAAgBC,YACd,IAAvDlF,EAAQI,eAAe2E,IAAI/B,OAAOmC,iBAElC,MAAO,CACHC,SAAUV,EACVW,MAAOZ,MAAAA,EAAAA,EApBqB,GA+CpC,MAAO,CACHW,SAxBmBV,EAA+B9C,KAAI+C,IACtD,GAAIW,EAAAA,gBAAgBC,YAAYZ,EAAoBa,iBAChD,IAAK,MAAMC,KAAWd,EAAoBa,gBAElCtE,QACqB+B,IAArBwC,EAAQC,UACRD,EAAQC,WAAaxE,EAA8ByE,mCAEG,QAAtD3F,EAAQI,eAAe2E,IAAI/B,OAAO4C,iBAClCH,EAAQI,YAAc3E,EAA8B4E,wCAMpDL,EAAQI,UAAY,IAKhC,OAAOlB,KAKPU,MAAOZ,MAAAA,EAAAA,EAjDyB,EAmDhCsB,gCAAiC7E,EAC3BA,EAA8ByE,uCAC9B1C,EACN+C,kCAAmC9E,EAC7BA,EAA8B+E,kDAC9BhD,GAkHP,MAAMiD,GAAmBtG,EAAAA,EAAAA,IAA2B,CACvDuG,GAAI,qFACJtG,OAzGJyE,eAAsBvE,EAAyCC,GAAuB,IAAAoG,EAAAC,EAAAC,EAAAC,EAClF,IAAIC,EACAC,EACAC,EACJ,MAAMC,EAA6C,GACnDA,EAAoBC,QAAU,CAAEC,UAAW7G,EAAQI,eAAeC,YAAYC,UAAWwG,UAAW/G,EAAMkB,WAC1G0F,EAAoBI,WAAahH,EAAMY,SACvCgG,EAAoBK,kBAAoBjH,EAAMe,kBAC9C6F,EAAoBM,sBAAuB,EAE3CC,QAAQC,IAAI,qBAAsBpH,EAAMY,UAGpC8F,EADA1G,EAAMmB,8BACiCkG,EAAAA,YAAYC,QAAQtH,EAAMmB,gCAE1BoG,EAAAA,EAAAA,gCAA+B,CAAEC,cAAevH,IAE3F,MAAMkB,QAAsCuF,EAE5C,IAAqC,QAAjCL,EAAApG,EAAQI,eAAe2E,IAAI/B,cAAM,IAAAoD,OAAA,EAAjCA,EAAmCoB,+BAAgCrD,EAAqCsD,QAAS,CACjH,MAAMC,QA5HdpD,eACIvE,EACAC,EACAkB,GAA4D,IAAAyG,EAAAC,EAE5D,IAAIzG,EAAmBpB,EAAMoB,iBAG7B,IAAKA,EAAkB,CACnB,MAAM0G,EAAe,IAAIC,EAAAA,GAAkC/H,EAAOmB,EAA8ByE,mCAChGxE,QAAyB4G,EAAAA,EAAAA,IAA0BF,EAAc7H,GAIrE,OAKK,QALL2H,EACoB,QADpBC,EACIzG,SAAgB,IAAAyG,OAAA,EAAhBA,EAAkBI,OAAOC,MACrBtG,GACIA,EAAMI,uBAAyBb,EAA8B4E,uCAC7DnE,EAAMK,wBAA0Bd,EAA8B4E,+CACrE,IAAA6B,EAAAA,EAAI,KAyGsCO,CAAqCnI,EAAOC,EAASkB,IAEpDyF,EAAoBI,WAAWoB,MACvEtG,GAAWA,EAAQC,mBAAoB4F,MAAAA,OAA4B,EAA5BA,EAA8B5F,oBAE7B4F,GACxCf,EAAoBI,WAAWqB,KAAKV,GAK5C,IACqC,QAAjCrB,EAAArG,EAAQI,eAAe2E,IAAI/B,cAAM,IAAAqD,OAAA,EAAjCA,EAAmCmB,+BAAgCrD,EAAqCkE,SACxGnH,EAA8B+E,6CAChC,KAAAqC,EAAAC,EACExI,EAAMW,oBAAoBc,QAA2C,QAApC8G,EAAGvI,EAAMW,oBAAoBc,eAAO,IAAA8G,EAAAA,EAAI,GACzEvI,EAAMW,oBAAoBc,QAAQ+B,QAAmD,QAA5CgF,EAAGxI,EAAMW,oBAAoBc,QAAQ+B,eAAO,IAAAgF,EAAAA,EAAI,GACzF,MAAMC,EAAiB,QAAQtH,EAA8B+E,+CAChClG,EAAMW,oBAAoBc,QAAQ+B,QAAQ4E,MAAKM,GAAUA,EAAOC,aAAeF,KAExGzI,EAAMW,oBAAoBc,QAAQ+B,QAAQ6E,KAAK,CAC3CM,WAAYF,EACZG,cAAc,IAK1B,GAAuB,aAAnB5I,EAAMU,UAAuD,QAAhC6F,EAAItG,EAAQI,eAAeoC,aAAK,IAAA8D,GAA5BA,EAA8B7D,WAAY,CAC3E,IAAI1C,EAAMa,SAUN,MAAM,IAAIsD,MAAM,wFAThByC,EAAoBiC,YAAc,CAAC7I,EAAMa,UAxCnB,GAyCtB4F,GAAUqC,EAAAA,EAAAA,uBACN,CACItB,cAAevH,EACfU,oBAAqBX,EAAMW,qBAE/BiG,QAKL,GAAI5G,EAAMc,YAA0C,QAAhC0F,EAAIvG,EAAQI,eAAeoC,aAAK,IAAA+D,GAA5BA,EAA8B3C,EACzD+C,EAAoBmC,gBAAkB/I,EAAMc,WAC5C2F,GAAUqC,EAAAA,EAAAA,uBACN,CACItB,cAAevH,EACfU,oBAAqBX,EAAMW,qBAE/BiG,OAED,MAAI5G,EAAMc,YAAcb,EAAQI,eAAeoC,OAASxC,EAAQI,eAAeoC,MAAMqB,gBA2BxF,MAAM,IAAIK,MAAM,qGA3BwF,CACxG,MAAM6E,EAAevF,KAAKC,MAAM1D,EAAMc,YAItC,GAHIb,EAAQI,eAAeoC,MAAMsB,YAC7B4C,EAAkBsC,OAAOD,EAAa/E,YAEtCgF,OAAOC,MAAMvC,GACb,MAAM,IAAIxC,MAAM,mDACb,IAEF6E,EAAa9E,eAEd,MAAM,IAAIC,MAAM,0CAGhByC,EAAoBuC,qBAAuBH,EAAa9E,eACpDyC,IACAC,EAAoBwC,IAAM,CAACzC,GA5ET,IA8EtBF,GAAUqC,EAAAA,EAAAA,uBACN,CACItB,cAAevH,EACfU,oBAAqBX,EAAMW,qBAE/BiG,IAQZ,OAAOpC,QAD4BiC,EACSxG,EAASwG,EAAQ4C,SAAS/D,MAAOnE,IAM7EnB,MA3OiBsC,IACjB,MAAMtC,GAAQqC,EAAAA,EAAAA,GAA0BC,EAAM+B,GAc9C,OAXIrE,EAAMW,oBAAoBR,QAAUmC,EAAKW,SACzCjD,EAAMW,oBAAoBR,OAAOC,IAAMkC,EAAKW,OAAOqG,cAAgB,GAInEtJ,EAAMW,oBAAoBR,QAAUmC,EAAKjC,eAAeoC,OAASH,EAAKjC,eAAeoC,MAAM8G,OAC3FvJ,EAAMW,oBAAoBR,OAAOqJ,MAAQlH,EAAKjC,eAAeoC,MAAM8G,MAGvEvJ,EAAMW,oBAAoB2E,OAAQ,EAE3BtF,KA+NX,oGC1TM,MAAO+H,UAA0CvH,EAAAA,EAGnDC,YAAmBT,GAAyE,IAAAyJ,EAAA,IAA7CC,EAAAC,UAAArF,OAAA,QAAApB,IAAAyG,UAAA,GAAAA,UAAA,GAA4C,EACvFC,MACI5J,EAAMU,SACNV,EAAMM,YACN,CACIgF,OAAO,GAIX,QAGApC,EAGA,IAGA,GAGA,OAGAA,EACAlD,EAAMkB,UACNlB,EAAMmB,8BACNnB,EAAMoB,kBAWP,KAAAC,YAAc,KAAcwI,EAAAA,EAAAA,eAAc,cAAetI,KAAKjB,aAM9D,KAAA6B,mBAAqB,IAAc,cAMnC,KAAAC,cAAgB,IAAiB,cApBpCb,KAAKmI,kCACDA,IAAwE,QAAvCD,EAAIzJ,EAAMmB,qCAA6B,IAAAsI,OAAA,EAAnCA,EAAqC7D,oCAAqC,GA0DpH,MAKP,GALgC/F,EAAAA,EAAAA,IAA2B,CACvDuG,GAAI,4EACJtG,OAhCJyE,eAAsBvE,EAA0CC,GAAuB,IAAA6J,EACnF,MAAMlJ,QAAiBmJ,EAAAA,EAAAA,GACnB,CACIlD,QAAS,CACLC,UAAW9G,EAAMM,YAAYC,UAC7BwG,UAAW/G,EAAMkB,YAGzBlB,EAAMW,oBACNV,GAKJ,OACgF,KAAxC,QAAnC6J,EAAA9J,EAAMmB,qCAA6B,IAAA2I,OAAA,EAAnCA,EAAqClE,oCAClChF,EAASsH,MAAKpG,IAAO,IAAAkI,EAAA,OAAIlI,EAAQ6D,YAAgD,QAAxCqE,EAAKhK,EAAMmB,qCAA6B,IAAA6I,OAAA,EAAnCA,EAAqCpE,uCAE1C,IAA5C5F,EAAM0J,mCACH9I,EAASsH,MAAKpG,GAAWA,EAAQ6D,WAAa3F,EAAM0J,qCACxD,6OCjED,MAAMO,EAAc,CACvBC,0BAA2B,eAC3BC,sBAAuB,oBACvBC,uBAAwB,qBACxBC,oBAAqB,WACrBC,qBAAsB,YACtBC,qBAAsB,YACtBC,sBAAuB,aACvBC,wBAAyB,cACzBC,qBAAsB,WACtBC,0BAA2B,iBAMzB,MAAOC,EAGTnK,YAAYH,GAIL,KAAAe,YAAc,KAAMwI,EAAAA,EAAAA,eAAc,oBAAqBtI,KAAKjB,aAE5D,KAAA6B,mBAAqB,IAAM,oBAE3B,KAAAC,cAAgB,IAAiB,UAPpCb,KAAKjB,YAAcA,GAepBiE,eAAesG,EAA6B7K,EAA0B8K,GACzE,OAAOC,EAAAA,EAAAA,6BAA4B,CAAEvD,cAAesD,IAAOE,MAAMC,IACxBA,EAAoBC,oBAAsB,IAC1ErJ,KAA4CsJ,IACzC,IAAIxJ,EAAM,GACV,GAAIwJ,EAAWxC,WACX,OAAQwC,EAAWxC,WAAWyC,eAC1B,IAAK,OACDzJ,EAAMwJ,EAAWvC,aAAeqB,EAAYK,qBAAuBL,EAAYI,oBAC/E,MACJ,IAAK,QACD1I,EAAMwJ,EAAWvC,aAAeqB,EAAYO,sBAAwBP,EAAYM,qBAChF,MACJ,IAAK,gBACD5I,EAAMwJ,EAAWvC,aAAeqB,EAAYG,uBAAyBH,EAAYE,sBACjF,MACJ,IAAK,UACDxI,EAAMsI,EAAYC,0BAClB,MACJ,IAAK,mBACDvI,EAAMsI,EAAYQ,wBAClB,MACJ,IAAK,WACD9I,EAAMsI,EAAYS,qBAClB,MACJ,IAAK,gBACD/I,EAAMsI,EAAYU,+BAK1BG,EAAIO,UAAUC,QAAQ,2DAE1B,GAAI3J,EACA,MAAO,CACHA,IAAAA,EACAwJ,WAAAA,MAKXI,OAAOC,WAIb,MAAMC,EAAezI,GACjB,IAAI4H,EAAkB5H,EAAU3C,eAAeC,aAG7CoL,GAAyC7L,EAAAA,EAAAA,IAA2B,CAC7EuG,GAAI,qFACJtG,OAA8C+K,EAC9C7K,MAAOyL,IAGX,kECzGOlH,eAAewF,EAClB4B,EACAhL,EACAmK,GAEA,OAAOc,EAAAA,EAAAA,+BAA8B,CAAEpE,cAAesD,EAAKnK,oBAAAA,GAAuBgL,GAAgBX,MAC7Fa,IACG,IAAKA,EAED,OADAf,EAAIgB,MAAM,sDACyB,GAGvC,MAAMC,GAAUF,GAAmB,IAAIhK,KAAKmK,GAA6DA,IAEzG,OAAsB,IAAlBD,EAAOzH,QACPwG,EAAIgB,MAAM,8EACyB,IAGhCC,qICnBdE,qDAAL,SAAKA,GACDA,EAAAA,EAAA,mDACAA,EAAAA,EAAA,iDAFJ,CAAKA,IAAAA,EAAa,KAQZ,MAAOC,UAAkC1L,EAAAA,EAA/CC,kCACW,KAAA0B,mBAAqB,IAAM,iBAE3B,KAAAC,cAAgB,IAEG,aAAlBb,KAAKb,UACJa,KAAKX,UAAYW,KAAKX,SAAS0D,OAAS,GACxC/C,KAAKZ,qBACFY,KAAKZ,oBAAoBc,SACzBF,KAAKZ,oBAAoBc,QAAQ+B,SACjCjC,KAAKZ,oBAAoBc,QAAQ+B,QAAQc,OAAS,EAE/C,UAEJ,eAgIR,MAAM6B,GAAmBtG,EAAAA,EAAAA,IAA2B,CACvDuG,GAAI,iFACJtG,OAnFJyE,eAAsBvE,EAAkCC,GAAuB,IAAAoG,EAC3E,IAAIM,EACJ,MAAM/F,EAAkCZ,EAAMY,UAAY,GAE1D,IAAqC,QAAjCyF,EAAApG,EAAQI,eAAe2E,IAAI/B,cAAM,IAAAoD,OAAA,EAAjCA,EAAmCoB,+BAAgCrD,EAAAA,GAAqCsD,QAAS,CACjH,IAAIhB,EAEAA,EADA1G,EAAMmB,8BACiCkG,EAAAA,YAAYC,QAAQtH,EAAMmB,gCAE1BoG,EAAAA,EAAAA,gCAA+B,CAAEC,cAAevH,IAE3F,MAAMkB,QAAsCuF,EACtCiB,QAxCdpD,eACIvE,EACAC,EACAkB,GAA4D,IAAAyG,EAAAC,EAE5D,IAAIzG,EAAmBpB,EAAMoB,iBAG7B,IAAKA,EAAkB,CACnB,MAAM0G,EAAe,IAAIC,EAAAA,GAAkC/H,EAAOmB,EAA8ByE,mCAChGxE,QAAyB4G,EAAAA,EAAAA,IAA0BF,EAAc7H,GAIrE,OAKK,QALL2H,EACoB,QADpBC,EACIzG,SAAgB,IAAAyG,OAAA,EAAhBA,EAAkBI,OAAOC,MACrBtG,GACIA,EAAMI,uBAAyBb,EAA8B4E,uCAC7DnE,EAAMK,wBAA0Bd,EAA8B4E,+CACrE,IAAA6B,EAAAA,EAAI,KAqBsCO,CAAqCnI,EAAOC,EAASkB,IAEpDP,EAASwH,MACjDtG,GAAWA,EAAQC,mBAAoB4F,MAAAA,OAA4B,EAA5BA,EAA8B5F,oBAE7B4F,GACxC/G,EAASyH,KAAKV,GAItB,GAAuB,aAAnB3H,EAAMU,SAAyB,CAC/B,GAAIV,EAAMa,SACN,OAAOkJ,EAAAA,EAAAA,GACH,CACIlB,YAAa,CAAC7I,EAAMa,UAAYoL,EAAcE,wBAC9CtF,QAAS,CACLC,UAAW9G,EAAMM,YAAYC,UAC7BwG,UAAW/G,EAAMkB,WAErB8F,WAAYhH,EAAMgB,qBAAuBJ,EAAW,IAExDZ,EAAMW,oBACNV,GAGR,MAAM,IAAIkE,MAAM,oFAEhB,GAAInE,EAAMc,YAAcb,EAAQI,eAAeoC,OAASxC,EAAQI,eAAeoC,MAAMoB,EACjF,OAAOkG,EAAAA,EAAAA,GACH,CACIhB,gBAAiB/I,EAAMc,WACvB+F,QAAS,CACLC,UAAW9G,EAAMM,YAAYC,UAC7BwG,UAAW/G,EAAMkB,WAErB8F,WAAYhH,EAAMgB,qBAAuBJ,EAAW,IAExDZ,EAAMW,oBACNV,GAGR,GAAID,EAAMc,YAAcb,EAAQI,eAAeoC,OAASxC,EAAQI,eAAeoC,MAAMqB,eAAgB,CACjG,MAAMkF,EAAevF,KAAKC,MAAM1D,EAAMc,YAItC,GAHIb,EAAQI,eAAeoC,MAAMsB,YAC7B4C,EAAkBsC,OAAOD,EAAa/E,YAEtCgF,OAAOC,MAAMvC,GACb,MAAM,IAAIxC,MAAM,mDACb,GAAK6E,EAAa9E,eAElB,CACH,MAAM0C,EAA6C,GAUnD,OATAA,EAAoBC,QAAU,CAC1BC,UAAW9G,EAAMM,YAAYC,UAC7BwG,UAAW/G,EAAMkB,WAErB0F,EAAoBI,WAAahH,EAAMgB,qBAAuBJ,EAAW,GACzEgG,EAAoBuC,qBAAuBH,EAAa9E,eACpDyC,IACAC,EAAoBwC,IAAM,CAACzC,GAAmBsF,EAAcG,yBAEzDrC,EAAAA,EAAAA,GAA2BnD,EAAqB5G,EAAMW,oBAAqBV,GAZlF,MAAM,IAAIkE,MAAM,0CAepB,MAAM,IAAIA,MAAM,sGAQxBnE,MA3HiBsC,IACVD,EAAAA,EAAAA,GAA0BC,EAAM4J,KA6H3C,kdC7JA,MAAMG,EAAwB,CAC1B,gBACA,uBACA,kBACA,qBACA,wBACA,YAQStJ,EAA0B1C,IACnC,MAAMiM,EAAyBC,EAAuC,WAAYlM,GAClF,OAAKiM,GAA4D,IAAlCA,EAAuBhI,OAIxBgI,EACzBzK,KAAI2K,IACD,IACI,MAAMC,EAAqC,GAI3C,OAHAJ,EAAsBK,SAAQ,CAACC,EAAYC,KACvCH,EAAcE,GAAcH,EAAkBI,MAE3CH,EACT,MAAAI,GACE,WAGPtB,OAAOC,SAfD,IA2CFsB,EAAmBA,CAACC,EAAcnM,EAAkCoM,EAA+BC,KAE5G,QAAiB/J,IAAbtC,EAAwB,CACxB,GAAwB,IAApBA,EAAS0D,OACTyI,EAAQG,aAAaC,OAAO,gBACzB,CACH,MAAMC,EAAiBxM,EAASyM,MAAK,CAACC,EAAOC,IACzCD,EAAMvL,iBAAmBwL,EAAOxL,iBAAmBuL,EAAMvL,gBAAkBwL,EAAOxL,gBAAkB,GAAK,IAE7GgL,EAAQG,aAAaM,IAAI,WAAY/J,KAAKO,UA9BrBpD,CAAAA,IAC7B,MAAM6M,EAA4C,GAUlD,OARA7M,EAAS8L,SAAQ5K,IACb,MAAM0K,EAAyC,GAC/CH,EAAsBK,SAAQC,IAC1BH,EAAkBnE,KAAKvG,EAAQ6K,OAEnCc,EAAmBpF,KAAKmE,MAGrBiB,GAmBqDC,CAAiBN,KAKzE,OADAL,EAAQG,aAAaC,OAAO,QACrBJ,EAAQY,KAGnB,YAAuBzK,IAAnB8J,GAC8B,IAA1BA,EAAe1I,OACfyI,EAAQG,aAAaC,OAAO,WAE5BJ,EAAQG,aAAaM,IAAI,UAAW/J,KAAKO,UAAUgJ,IAIvDD,EAAQG,aAAaC,OAAO,QACrBJ,EAAQY,OAGfV,GACAF,EAAQG,aAAaM,IAAI,OAAQP,EAAUW,YAGxCb,EAAQY,OAQNpB,EAAkBA,CAAI5K,EAAatB,IACxCA,EAAeoC,OAASpC,EAAeoC,MAAMd,GACnC8B,KAAKC,MAAMC,mBAAmBtD,EAAeoC,MAAMd,KAE1D,KAOEkM,EAAiBxN,GACtByN,EAAAA,GAASC,UACF,IAAIC,IAAIC,OAAOC,SAASP,MAI/BtN,EAAe8N,IAAIC,WAAWT,KACvB,IAAIK,IAAI3N,EAAe8N,IAAIC,WAAWT,MAE1C,IAAIK,IAAsB3N,EAAe8N,IAAIC,4OCjHlD,MAAOC,EAAb5N,cACuB,KAAA6N,cAA8C,KAE9C,KAAAC,eAAwC,GAExC,KAAAC,eAAqC,KAErC,KAAAC,kBAAmC,KAEnC,KAAA7N,SAA8C,KAI9C,KAAA8N,SAAmB,GAEnB,KAAAhO,SAAyB,UAEzB,KAAAiO,eAAuC,KAEvC,KAAAC,cAA4C,KAlBnDC,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,qCAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,sCAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,sCAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,yCAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,gCAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,yCAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,gCAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,gCAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,sCAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,oCAMT,MAAOC,EAAbtO,cACW,KAAAY,YAAc,IAAM,gBAEpB,KAAAc,mBAAqB,IAAM,gBAE3B,KAAAC,cAAgB,IAAiB,WAGrCmC,eAAeyK,EAAoBhP,EAA2B8K,GACjE,OAAO,IAAIuD,EAOR,MAAMY,EAAuBjM,GACzB,IAAI+L,EAMf,GAAelP,EAAAA,EAAAA,IAA0C,CACrDC,OAAgCkP,EAChChP,MAAOiP,oECxDCC,EAmDAC,EA8BAC,muBAwDN,SAAUC,EAAYC,GACxB,OACIA,IAAkBC,EAAAA,kBAAkBC,UACpCF,IAAkBC,EAAAA,kBAAkBE,SACpCH,IAAkBC,EAAAA,kBAAkBG,QAStC,SAAUC,EACZC,EACAC,GAGA,OAAOA,EAAmB3H,MAAM4H,GAC5BC,EAA8BH,EAAqBE,KAUrD,SAAUC,EAA8BH,EAA0CE,GAEpF,OACIA,EAAoB/N,kBAAoB6N,EAAoB7N,iBAC5D+N,EAAoBE,qBAAuBJ,EAAoBI,oBAC/DF,EAAoBG,gBAAkBL,EAAoBK,gBACzDZ,EAAYS,EAAoBG,gBAC7BH,EAAoB9N,uBAAyB4N,EAAoB5N,sBAIvE,SAAUkO,EACZC,EACAC,GAEA,MAAMC,EAAmD,GACzD,IAAIC,GAAmB,EAsBvB,GArBAF,EAA0B1D,SAAS6D,IAC/B,GAAIR,EAA8BI,EAAuBP,oBAAqBW,IAE1E,GADAD,GAAmB,EACfH,EAAuBK,YAAa,CACpC,MAAMC,EAAInP,EAAAA,EAAA,GACHiP,GAAiB,IACpBvO,0BAC2CkB,IAAtCiN,EAAuBO,YAA4B,GAAGP,EAAuBO,cAC9EH,EAAkBvO,qBACtBC,2BACyCiB,IAApCiN,EAAuBQ,UAA0B,GAAGR,EAAuBQ,YAC5EJ,EAAkBtO,wBAE1BoO,EAA0BhI,KAAKoI,SAInCJ,EAA0BhI,KAAKkI,OAIlCD,EAAkB,CACnB,MAAMG,EAAInP,EAAAA,EAAA,GACH6O,EAAuBP,qBAAmB,IAC7C5N,0BAC2CkB,IAAtCiN,EAAuBO,YAA4B,GAAGP,EAAuBO,cAC9EP,EAAuBP,oBAAoB5N,qBAC/CC,2BACyCiB,IAApCiN,EAAuBQ,UAA0B,GAAGR,EAAuBQ,YAC5ER,EAAuBP,oBAAoB3N,wBAEnDoO,EAA0BhI,KAAKoI,GAI1BN,EAAuBP,oBAAoBK,gBAAkBV,EAAAA,kBAAkBqB,MAC5ET,EAAuBP,oBAAoBK,gBAAkBV,EAAAA,kBAAkBsB,WACnFV,EAAuBW,8BAA8BC,mBAAqBC,EAAAA,YAAYC,cAEtFd,EAAuBW,8BAA8B7I,OAAOyE,SAASwE,IACjE,GAAIA,EAAMnP,kBAAoB0O,EAAK1O,iBAAmBmP,EAAMlP,uBAAyByO,EAAKzO,0BAEnF,CACH,MAAMmP,EAAgBd,EAA0Be,WAAWC,GACvDtB,EAA8BmB,EAAOG,KAErCF,GAAiB,GACjBd,EAA0BiB,OAAOH,EAAe,OAOpE,OAAOd,GA7OX,SAAYnB,GASRA,EAAAA,EAAA,iBAWAA,EAAAA,EAAA,2BAUAA,EAAAA,EAAA,eAUAA,EAAAA,EAAA,qBAxCJ,CAAYA,IAAAA,EAAgC,KAmD5C,SAAYC,GASRA,EAAAA,EAAA,mBAUAA,EAAAA,EAAA,iBAnBJ,CAAYA,IAAAA,EAAuB,KA8BnC,SAAYC,GASRA,EAAAA,EAAA,eAUAA,EAAAA,EAAA,yBAUAA,EAAAA,EAAA,uBAUAA,EAAAA,EAAA,iBAUAA,EAAAA,EAAA,mBAjDJ,CAAYA,IAAAA,EAAoB,KCzEhC,IAAqBmC,EAArB,cAA2CC,EAAAA,cA0BvC/Q,YAAYgR,GACR7H,MAAM6H,GA1BO,KAAAC,iBAA2B,gBA8I3B,KAAAC,SAAYC,IACzBA,EAAEC,iBACFD,EAAEE,kBAEF,MAAMC,EAASH,EAAEI,cACXC,EAAWF,EAAOG,aAAa,SAAUC,SAAS,6BAClDC,EAAkBH,OAAW/O,EAAY3B,KAAK8Q,0BAA0BN,GAE1ExQ,KAAKkQ,MAAMa,iBACX/Q,KAAKkQ,MAAMa,gBAAgB,CACvBL,SAAAA,EACAM,YAAaR,EACbS,cAAeJ,EACfK,gBAAiBV,EAAOW,eAhIhCnR,KAAKoR,SAAUC,EAAAA,EAAAA,kBAAiB,QAASrR,KAAKkQ,MAAMoB,iBAAmB,IAvBjE,0BAAuB,IAAAC,EAC7B,IAAI,gBAAEC,GAAoBxR,KAAKkQ,MAC/B,MAAM,gCAAEzL,EAA+B,iBAAEgN,GAAqBzR,KAAKkQ,MAWnE,OATsB,QAAlBqB,EAAAvR,KAAKkQ,MAAMxR,eAAO,IAAA6S,OAAA,EAAlBA,EAAoB9N,IAAI/B,OAAOwE,+BAAgCrD,EAAAA,GAAqCsD,UACpGqL,EAAkBA,EAAgBxH,QAAO0H,IACrC,MAAMC,EAASF,EAAiB9K,MAC3BiL,KACKA,EAAUlL,OAAOC,MAAMtG,GAA+BmO,EAA8BnO,EAAOqR,OAErG,OAAOC,GAAUA,EAAOvN,WAAaK,MAGtC+M,EAAgBlR,KAAI,CAACuQ,EAAsCxF,KACvD,CACHjL,IAAKJ,KAAK6R,uBAAuBhB,EAAiBxF,EAAMgB,YACxDhM,MAAOwQ,MAUZiB,SACH,MAAM,aAAEC,EAAY,MAAEC,EAAK,WAAEC,EAAU,gBAAEC,EAAe,eAAEC,GAAmBnS,KAAKkQ,MAC5EkC,EAAQpS,KAAKqS,oBACnBrS,KAAKoR,QAAQkB,cAAcC,MAAQR,EACnC,MAAMS,GAAqBC,EAAAA,EAAAA,wBAAuBzS,KAAKkQ,MAAMoB,iBAAmBtR,KAAKoR,SACrF,OACInB,EAAAA,cAAA,OAAKyC,UAAU,sBACVN,EAAMrP,OAAS,GAAKiP,GAAS/B,EAAAA,cAAA,QAAMyC,UAAU,6BAA6BV,GAC3E/B,EAAAA,cAAA,MAAIyC,UAAWC,GAAAA,CAAWV,EAAY,2BAA4B,kBAC7DG,EAAM9R,KAAKsS,IACR5S,KAAKoR,QAAQkB,cAAcC,MAAQK,EAAKxS,IACxC,MAAMyS,GAAYJ,EAAAA,EAAAA,wBAAuBzS,KAAKkQ,MAAMoB,iBAAmBtR,KAAKoR,SAE5E,OACInB,EAAAA,cAAA,MAAIyC,UAAU,gCAAgCtS,IAAKwS,EAAKxS,KACpD6P,EAAAA,cAAA,IAAA6C,OAAAC,OAAA,CACIL,UAAU,2BACVtG,KAAMpM,KAAKkQ,MAAM8C,WAAWJ,EAAKvS,OAAO,GAAM,aAClC,GAAGuS,EAAKvS,MAAMI,wBAAwByR,IAClDe,QAASjT,KAAKoQ,SACd8C,KAAK,SACLrO,GAAI+N,EAAKxS,KACLyS,GAEHD,EAAKvS,MAAMI,sBAAqE,KAA7CmS,EAAKvS,MAAM8S,gCAExCP,EAAKvS,MAAM8S,oCACqCxR,IAA7CiR,EAAKvS,MAAM8S,+BACgB,IAA/BP,EAAKvS,MAAMG,gBAHXoS,EAAKvS,MAAMI,qBAIXmS,EAAKxS,IAEX6P,EAAAA,cAAA,QACIyC,UAAW,GAAG1S,KAAKmQ,6CACnB+C,KAAK,SAAQ,aACDf,UAOnCC,EAAMrP,OAAS,GAAKgP,GACjB9B,EAAAA,cAAA,IAAA6C,OAAAC,OAAA,CACI3G,KAAMpM,KAAKkQ,MAAM8C,WAAW,IAAI,GAChCN,UAAU,iCACNF,EAAkB,CACtBS,QAASjT,KAAKoQ,WAEb2B,IAObF,uBAAuBxD,EAA0ChD,GACrE,MAAM,aAAE+H,EAAY,uBAAEC,EAAsB,iBAAE5B,EAAgB,UAAE3H,EAAS,cAAEwJ,GAAkBtT,KAAKkQ,MAC5FqD,EAAgBH,GAAgB,MAChCI,EAAcH,EACpB,IAcII,EAdAC,EAAc,GAClB,GAAIjC,GAAoBA,EAAiB9K,KAAM,CAC3C,MAAMgL,EAASF,EAAiB9K,MAC3BiL,KACKA,EAAUlL,OAAOC,MAAMtG,GAA+BmO,EAA8BnO,EAAOgO,OAGhGsD,EAGD+B,EAAc/B,EAAOgC,SAAW,GAFhC7J,EAAUC,QAAQ,oEAO1B,GAAI+D,EAAYO,EAAoBK,eAChC+E,EAAmBD,EACdI,QAAQ,MAAO5T,KAAK6T,aAAaxF,EAAoB5N,qBAAsB4N,EAAoByF,WAC/FF,QAAQ,MAAO5T,KAAK6T,aAAaxF,EAAoB3N,sBAAuB2N,EAAoByF,gBAClG,GAA4C,IAAxCzF,EAAoB7N,gBAAuB,CAClD,MAAMuT,EAAcT,MAAAA,OAAa,EAAbA,EAAe5M,OAAOC,MACtCpG,GAAWA,EAAQE,uBAAyB4N,EAAoB5N,uBAEpEgT,GAAoBM,EAAcA,EAAYZ,8BAAgC9E,EAAoB5N,uBAAyB,QAE3HgT,EAAmBpF,EAAoB8E,+BAAiC9E,EAAoB5N,sBAAwB,GAGxH,MAAoB,WAAhBiT,GAA4C,UAAhBA,EACrBH,EAAcK,QAAQ,MAAOF,GAAaE,QAAQ,MAAO,GAAGH,KAKhEF,EAAcK,QAAQ,MAAOF,GAAaE,QAAQ,MAAO,GAAGH,KAAoBC,KAAerI,KAGlGwI,aAAaG,EAA4BC,GAC7C,IAAKD,IAAWC,EAEZ,OADAjU,KAAKkQ,MAAMpG,UAAUS,MAAM,2CACpByJ,GAAU,GAErB,IAAIxJ,EAASwJ,EAEb,IACIxJ,EAASxK,KAAKkQ,MAAMxR,QAASwV,iBAAiBC,eAAezM,OAAOsM,GAASC,GAC/E,MAAOG,GACLpU,KAAKkQ,MAAMpG,UAAUC,QAAQ,8BAA8BS,MAAW4J,KAG1E,OAAO5J,EAqBHsG,0BAA0BE,GAC9B,MAAMxG,EAASxK,KAAKqS,oBAAoB1L,MAAK0N,GAAYrD,EAAYnM,KAAOwP,EAASjU,MACrF,OAAQoK,GAAUA,EAAOnK,YAAUsB,KA9J7B2L,EAAAA,EAAAA,IAAA,CAATgH,EAAAA,IAAQ,wCALQtE,GAAa1C,EAAAA,EAAAA,IAAA,CADjCiH,EAAAA,IACoBvE,qBCfd,MAAMwE,EAAwCC,IAAa,IAAZ,KAAEC,GAAMD,EAC1D,OACIxE,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,OAAKyC,UAAU,mBACXzC,EAAAA,cAAA,OAAK0E,MAAM,6BAA6BC,MAAM,MAAMC,OAAO,MAAMC,QAAQ,cAAcC,KAAK,QACxF9E,EAAAA,cAAA,KAAG+E,SAAS,yBACR/E,EAAAA,cAAA,UAAQgF,GAAG,UAAUC,GAAG,UAAUC,EAAE,UAAUJ,KAAK,YACnD9E,EAAAA,cAAA,UAAQgF,GAAG,UAAUC,GAAG,QAAQC,EAAE,UAAUJ,KAAK,YACjD9E,EAAAA,cAAA,UAAQgF,GAAG,UAAUC,GAAG,UAAUC,EAAE,UAAUJ,KAAK,YAEnD9E,EAAAA,cAAA,UAAQgF,GAAG,UAAUC,GAAG,UAAUC,EAAE,UAAUJ,KAAK,YAEnD9E,EAAAA,cAAA,UAAQgF,GAAG,UAAUC,GAAG,UAAUC,EAAE,UAAUJ,KAAK,YAEnD9E,EAAAA,cAAA,QACImF,EAAE,8gBACFL,KAAK,YAGT9E,EAAAA,cAAA,QACImF,EAAE,qhBACFL,KAAK,YAGT9E,EAAAA,cAAA,QACImF,EAAE,0gBACFL,KAAK,YAGT9E,EAAAA,cAAA,QACImF,EAAE,oJACFL,KAAK,YAGT9E,EAAAA,cAAA,QACImF,EAAE,kPACFL,KAAK,kCAGT9E,EAAAA,cAAA,QACImF,EAAE,mHACFL,KAAK,YAGT9E,EAAAA,cAAA,QACImF,EAAE,sZACFC,OAAO,UACPC,YAAY,MAGhBrF,EAAAA,cAAA,QAAMmF,EAAE,kCAAkCC,OAAO,UAAUC,YAAY,MAEvErF,EAAAA,cAAA,QAAMmF,EAAE,iCAAiCC,OAAO,UAAUC,YAAY,MAEtErF,EAAAA,cAAA,QAAMmF,EAAE,mCAAmCC,OAAO,UAAUC,YAAY,MAExErF,EAAAA,cAAA,QACImF,EAAE,iHACFC,OAAO,UACPC,YAAY,MAGhBrF,EAAAA,cAAA,QACImF,EAAE,kGACFC,OAAO,UACPC,YAAY,MAGhBrF,EAAAA,cAAA,QAAMmF,EAAE,mCAAmCC,OAAO,UAAUC,YAAY,MAExErF,EAAAA,cAAA,QAAMmF,EAAE,mCAAmCC,OAAO,UAAUC,YAAY,MAExErF,EAAAA,cAAA,QAAMmF,EAAE,mCAAmCC,OAAO,UAAUC,YAAY,MAExErF,EAAAA,cAAA,QAAMmF,EAAE,iCAAiCC,OAAO,UAAUC,YAAY,MAEtErF,EAAAA,cAAA,UAAQgF,GAAG,UAAUC,GAAG,UAAUC,EAAE,SAASJ,KAAK,YAElD9E,EAAAA,cAAA,UAAQgF,GAAG,UAAUC,GAAG,UAAUC,EAAE,UAAUJ,KAAK,YAEnD9E,EAAAA,cAAA,UAAQgF,GAAG,UAAUC,GAAG,UAAUC,EAAE,SAASJ,KAAK,YAElD9E,EAAAA,cAAA,UAAQgF,GAAG,UAAUC,GAAG,UAAUC,EAAE,UAAUJ,KAAK,aAGvD9E,EAAAA,cAAA,YACIA,EAAAA,cAAA,kBACIpL,GAAG,0BACH0Q,GAAG,UACHC,GAAG,UACHC,GAAG,SACHC,GAAG,UACHC,cAAc,kBAEd1F,EAAAA,cAAA,QAAM2F,UAAU,YAEhB3F,EAAAA,cAAA,QAAM4F,OAAO,IAAID,UAAU,WAG/B3F,EAAAA,cAAA,YAAUpL,GAAG,mBACToL,EAAAA,cAAA,QAAM2E,MAAM,MAAMC,OAAO,MAAME,KAAK,aAMhD9E,EAAAA,cAAA,OAAKyC,UAAU,sBAAoB,wBC3FtCoD,EAA8DrB,IAOtE,IAAAsB,EAAA,IAPuE,QACxEC,EAAO,QACPtX,EAAO,cACPuX,EAAa,UACbC,EAAS,iBACT5E,EAAgB,eAChB/O,GACHkS,EACG,GAAgB,OAAZuB,EACA,OAAO,KAGX,MAAMG,EAAcH,EAAQI,KACtBC,EAAkBL,GAAWA,EAAQ5R,SAAW4R,EAAQ5R,SAAW,EACnEkS,GAAaC,EAAAA,EAAAA,uBAAsBP,EAAQI,MAAQ,GAAIC,EAAiB3X,GAAWA,EAAQ8X,mBAAe7U,GAC1G8U,GAAgBC,EAAAA,EAAAA,qBAClBV,EAAQW,OACRjY,EAAQ8X,cAAc1X,eAAeC,YAClB,QAD6BgX,EAChDrX,EAAQkY,QAAQnT,WAAG,IAAAsS,GAAQ,QAARA,EAAnBA,EAAqBrU,cAAM,IAAAqU,OAAA,EAA3BA,EAA6Bc,kBAE3BC,EACFvU,GAAqC,iBAAnBA,EAAoC2T,EAAUa,+BAAiCb,EAAUc,yBAGzG5F,GAAUC,EAAAA,EAAAA,kBAAiB,QAASC,EAAmB6E,EAAcE,EAAgBhK,YAErFwG,GAAYJ,EAAAA,EAAAA,wBAAuBnB,EAAmBF,GAC5D,OACInB,EAAAA,cAAA,OAAKyC,UAAU,kCACXzC,EAAAA,cAAA,IAAA6C,OAAAC,OAAA,CACI3G,KAAMkK,EACNrD,SAASgE,EAAAA,EAAAA,kBAAiB3F,EAAmBF,EAAS4E,EAAQI,OAC1DvD,EAAS,cACDmD,EAAQI,OAEpBnG,EAAAA,cAAA,OAAKyC,UAAU,0CAmB/B,SACIuD,EACAiB,EACAC,EACAC,EACAX,EACA/X,GAEA,IAAKyY,IAAaD,IAAiBjB,EAC/B,OAAO,KAEX,MAAMoB,EAAkB,CACpBC,IAAKH,EACLC,QAASA,GAAoB,IAE3BG,EAAa,CACfL,aAAAA,EACAjB,cAAAA,EACAuB,YAAaf,GAEjB,OAAOxG,EAAAA,cAACwH,EAAAA,GAAK3E,OAAAC,OAAA,GAAKsE,EAASE,EAAU,CAAEG,oBAAoB,QAAQ5Y,eAAgBJ,KAtClEiZ,CACG1B,EACAvX,EAAQkY,QAAQM,aAChBlB,EAAQxS,gBACRwS,EAAQI,KACRK,EACA/X,EAAQ8X,cAAc1X,kBAIlCmR,EAAAA,cAAA,OAAKyC,UAAU,2CACXzC,EAAAA,cAAA,KAAGyC,UAAU,4CAA4CoE,IA8B7Cc,EA7BQ5B,MAAAA,OAAO,EAAPA,EAASI,KA8BlCnG,EAAAA,cAAA,MAAIyC,UAAU,kDAAkDkF,MAD3E,IAA4BA,GCzFrB,MAAMC,EAAwBpD,IAAA,IAAC,KAAEC,EAAI,UAAEhC,EAAS,KAAEtG,EAAI,UAAE0L,GAAWrD,EAAA,OACtExE,EAAAA,cAAA,KAAGyC,UAAWA,EAAWtG,KAAMA,EAAI,aAAc0L,GAC5C,IACApD,EAAM,MCkBFqD,EAA4C7H,IACrD,MAAM,QAAY+C,GAA0C/C,EAC5D,OACID,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAA,OAAKyC,UAAU,iBACXzC,IAAAA,cAAA,OAAKyC,UAAU,SACXzC,IAAAA,cAAA,OAAKyC,UAAU,SAASO,QAASA,GAC7BhD,IAAAA,cAAA,OAAK0E,MAAM,6BAA6BC,MAAM,KAAKC,OAAO,KAAKC,QAAQ,YAAYC,KAAK,QACpF9E,IAAAA,cAAA,QACImF,EAAE,i1CACFL,KAAK,aAGb9E,IAAAA,cAAA,OAAKyC,UAAU,eAAa,eAqC9CsF,EAAa9H,GAEXD,IAAAA,cAACgI,EAAAA,MAAK,CACFC,WAAS,EACTC,gBAAgB,aAChBC,eAAgBlI,EAAMmI,UACtBC,OAAQpI,EAAMoI,OACdC,OAAQrI,EAAMsI,cACd9F,UAAU,2CACV+F,OAAQ,OAKdC,EAAmBxI,GACdD,IAAAA,cAAC0I,EAAAA,YAAW,CAACJ,OAAQrI,EAAMsI,eAAgBtI,EAAMgG,UAAU0C,YAGhEC,EAAmB3I,GAEjBD,IAAAA,cAAC6I,EAAAA,YAAW,KACR7I,IAAAA,cAAC8I,EAAAA,OAAM,CAAC9F,QAAS/C,EAAMsI,cAAe9F,UAAU,kCAAgC,qBChFhFsG,iCA4GN,SAAUvG,EAAuBnB,EAAqCF,GACxE,MAAM6H,EAAc7H,EAAQkB,cAAc4G,MAAQ9H,EAAQkB,cAAc4G,MAAQ9H,EAAQkB,cAAcC,MAMtG,OAJIjB,GACAA,EAAiBxH,WACjBwH,EAAiBxH,UAAUqP,uBAC3B7H,EAAiBxH,UAAUqP,sBAAsBF,EAAc7H,EAAQkB,gBAlH/E,SAAY0G,GACRA,EAAA,sCACAA,EAAA,kDACAA,EAAA,iCACAA,EAAA,wCACAA,EAAA,8CACAA,EAAA,uCACAA,EAAA,uCACAA,EAAA,oBACAA,EAAA,+BACAA,EAAA,kCACAA,EAAA,kCACAA,EAAA,qBACAA,EAAA,6BACAA,EAAA,mCACAA,EAAA,iCACAA,EAAA,mBACAA,EAAA,0BACAA,EAAA,8BACAA,EAAA,wBACAA,EAAA,YACAA,EAAA,iCACAA,EAAA,gBACAA,EAAA,mCACAA,EAAA,2DACAA,EAAA,uBACAA,EAAA,2BACAA,EAAA,gBACAA,EAAA,oBACAA,EAAA,iBACAA,EAAA,iBACAA,EAAA,mBACAA,EAAA,iCACAA,EAAA,uCACAA,EAAA,sCACAA,EAAA,0CACAA,EAAA,0CACAA,EAAA,wCACAA,EAAA,kCACAA,EAAA,qBACAA,EAAA,wBACAA,EAAA,YACAA,EAAA,0BACAA,EAAA,2CACAA,EAAA,qCACAA,EAAA,oDACAA,EAAA,sCACAA,EAAA,2BACAA,EAAA,YACAA,EAAA,oBACAA,EAAA,6BACAA,EAAA,wBACAA,EAAA,2BACAA,EAAA,8BACAA,EAAA,gCACAA,EAAA,+BACAA,EAAA,oCACAA,EAAA,uBACAA,EAAA,yBA1DJ,CAAYA,IAAAA,EAAiB,yOCF7B,IAAqBI,EAAmBC,EAAxC,cAAiDpJ,EAAAA,cA4B7C/Q,YAAYgR,GAAgC,IAAAoJ,EAAAC,ED4DfC,EAAmBlI,EAAqCiB,EAAe2G,EC3DhG7Q,MAAM6H,GArBO,KAAAuJ,SAA8CxJ,EAAAA,YAkK9C,KAAAyJ,aAAe,KAE5B,MAUMC,GAAgBC,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAYC,QAASrb,QAV/C,CACZwY,aAAc,CACV8C,GAAI,CAAEC,EAAG,KACTC,GAAI,CAAED,EAAG,KACTE,GAAI,CAAEF,EAAG,MACTG,GAAI,CAAEH,EAAG,MACTI,GAAI,CAAEJ,EAAG,UAKjB,MAAyB,OAAlBN,GAA4C,OAAlBA,GAwEpB,KAAAW,aAAe,KAC5B,GAAI5S,OAAOC,MAAM3H,KAAKua,MAAMC,cACxBxa,KAAKya,SAAS,CAAED,aAAcxa,KAAK0a,gBAChC,CACH,MAAMC,EAAeC,KAAKC,IAAI7a,KAAKkQ,MAAM4K,IAAKF,KAAKE,IAAI9a,KAAK0a,UAAW1a,KAAKua,MAAMC,eAC9EG,IAAiB3a,KAAKua,MAAMC,cAC5Bxa,KAAKya,SAAS,CAAED,aAAcG,MAvOtC3a,KAAKua,MAAQ,CAAEC,aAAgC,QAApBlB,EAAEpJ,EAAM6K,oBAAY,IAAAzB,EAAAA,EAAI,EAAG0B,YAAY,GAClEhb,KAAKib,aAAejb,KAAKib,aAAaC,KAAKlb,MAC3CA,KAAKmb,aAAenb,KAAKmb,aAAaD,KAAKlb,MAC3CA,KAAKob,YAAcpb,KAAKob,YAAYF,KAAKlb,MACzCA,KAAKqb,cAAgBrb,KAAKqb,cAAcH,KAAKlb,MAC7CA,KAAKoR,SDqDoBoI,ECrDO,QDqDYlI,ECrDHtR,KAAKkQ,MAAMoB,iBDqD6BiB,ECrDV,GDwDjD,CACtB+I,gBAAiB9B,EACjBlH,cAAe,CACXiJ,OALSjK,GAAoBA,EAAiBkK,SAAWlK,EAAiBkK,SAAW,GAMrFC,MALWnK,GAAoBA,EAAiBoK,WAAapK,EAAiBoK,WAAa,GAM3FnJ,MAAAA,EACA2G,MAAAA,EACAyC,MAAOnC,KC9DXxZ,KAAK0a,UAA0B,QAAjBnB,EAAGvZ,KAAKkQ,MAAM2K,WAAG,IAAAtB,EAAAA,EAAIF,EAAoBuC,aAAaf,IAxBjE,gCACH3K,EACAqK,GAEA,MAAMsB,uWAAS9b,CAAA,GAAQwa,GAMkB,IAAAuB,GAJrC5L,EAAM6L,WAAaxB,EAAMS,aACzBa,EAAUb,YAAa,IAGtB9K,EAAM6L,UAAYxB,EAAMS,cACzBa,EAAUrB,aAAiC,QAArBsB,EAAG5L,EAAM6K,oBAAY,IAAAe,EAAAA,EAAI,EAC/CD,EAAUb,YAAa,GAE3B,OAAOa,EAYJ/J,SAAM,IAAAkK,EAAAC,EACT,MAAM,IAAEpB,EAAG,IAAEC,GAAQ9a,KAAKkQ,MACpBgM,EAA8B,GAAGlc,KAAKkQ,MAAMiM,+CAE5CC,EAA0B,wCAC1BC,EAAoBrc,KAAKua,MAAMC,eAAiBK,MAAAA,EAAAA,EAAO,IAAM7a,KAAKkQ,MAAMoM,WACxEC,EAAoBvc,KAAKua,MAAMC,cAAgBM,GAAO9a,KAAKkQ,MAAMoM,WACjE3B,EAAe3a,KAAKua,MAAMC,aAChCxa,KAAKoR,QAAQkB,cAAcC,MAAQyG,EAAkBwD,kBACrD,MAAMC,EAAsBhK,EAAuBzS,KAAKkQ,MAAMoB,iBAAmBtR,KAAKoR,SACtFpR,KAAKoR,QAAQkB,cAAcC,MAAQyG,EAAkB0D,kBACrD,MAAMC,EAAsBlK,EAAuBzS,KAAKkQ,MAAMoB,iBAAmBtR,KAAKoR,SAChFwL,EAAiB,GAAoC,QAApCZ,EAAGhc,KAAKkQ,MAAM2M,8BAAsB,IAAAb,EAAAA,EAAI,MAAMhc,KAAKua,MAAMC,eAChF,IAAIsC,EAAsB,GAEtBC,EAAgBb,EAChBG,GAEAS,EAAsB,WACtBC,EAAgBX,GACTpc,KAAKkQ,MAAM6L,WAElBe,EAAsB,aACtBC,EAAgBX,GAEpB,IAAIY,EAAsB,GACtBT,EAEAS,EAAsB,WACfhd,KAAKkQ,MAAM6L,WAElBiB,EAAsB,cAE1BpX,QAAQC,IAAI7F,KAAKua,MAAMC,cACvB,IAAIyC,EAAS,GAmCb,OAlCgC,IAA5Bjd,KAAKua,MAAMC,eAIXyC,EACIhN,EAAAA,cAAA,SAAA6C,OAAAC,OAAA,CACIgJ,SAAU/b,KAAKkQ,MAAM6L,UAAYM,EACjCzE,MAAOyE,EAAoB,GAAKrc,KAAKkQ,MAAMgN,yBAC3CxK,UAAW,gCAAgCoK,IAC3C7J,QAASjT,KAAKmb,aAAY,gBACXkB,EAAiB,aACpB,GAAGrc,KAAKkQ,MAAMgN,2BAC1BC,MAAM,aACFV,GAEJxM,EAAAA,cAAA,OAAK2E,MAAM,KAAKC,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOJ,MAAM,8BAC9D1E,EAAAA,cAAA,iBAAa,wBACTA,EAAAA,cAAA,QACImF,EAAE,sBACFC,OAAO,QAAO,eACD,UAAS,iBACP,QAAO,kBACN,WAGxBpF,EAAAA,cAAA,YACIA,EAAAA,cAAA,YAAUpL,GAAG,kBACToL,EAAAA,cAAA,QAAM2E,MAAM,KAAKC,OAAO,KAAKE,KAAK,QAAQqI,UAAU,6BAQxEnN,EAAAA,cAAAA,EAAAA,SAAA,KACKgN,EACDhN,EAAAA,cAAA,SACIoN,KAAK,SACL3K,UAAU,iBACV4K,QAAQ,SACRjd,MAAOL,KAAKua,MAAMC,aAClB+C,SAAUvd,KAAKqb,cACfmC,OAAQxd,KAAKsa,aAAY,YACf,SAAQ,aACNta,KAAK0Z,eAAiBkD,EAAiB,GAAoC,QAApCX,EAAGjc,KAAKkQ,MAAM2M,8BAAsB,IAAAZ,EAAAA,EAAI,KAC3F/I,KAAK,aAAY,gBACFlT,KAAK0a,UAAS,gBACdI,EAAG,gBACHH,EACf8C,IAAKzd,KAAKyZ,SACVsC,SAAU/b,KAAKkQ,MAAM6L,SACrBlB,IAAK7a,KAAK0a,UACVI,IAAK9a,KAAKkQ,MAAM4K,MAEpB7K,EAAAA,cAAA,SAAA6C,OAAAC,OAAA,CACIgJ,SAAU/b,KAAKkQ,MAAM6L,UAAYQ,EACjC3E,MAAO2E,EAAoB,GAAKvc,KAAKkQ,MAAMwN,yBAC3ChL,UAAW,gCAAgCsK,IAC3C/J,QAASjT,KAAKib,aAAY,gBACXsB,EAAiB,aACpB,GAAGvc,KAAKkQ,MAAMwN,2BAC1BP,MAAM,aACFR,GAEJ1M,EAAAA,cAAA,OAAK2E,MAAM,KAAKC,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOJ,MAAM,8BAC9D1E,EAAAA,cAAA,iBAAa,wBACTA,EAAAA,cAAA,QACImF,EAAE,4BACFC,OAAO,QAAO,eACD,UAAS,iBACP,QAAO,kBACN,UAEpBpF,EAAAA,cAAA,QACImF,EAAE,uBACFC,OAAO,QAAO,eACD,UAAS,iBACP,QAAO,kBACN,WAGxBpF,EAAAA,cAAA,YACIA,EAAAA,cAAA,YAAUpL,GAAG,kBACToL,EAAAA,cAAA,QAAM2E,MAAM,KAAKC,OAAO,KAAKE,KAAK,QAAQqI,UAAU,6BA6BxE,qBACJ,IAAIO,GAAiB,EACrB,MAAMC,EAAe5d,KAAKua,MAAMC,aAChC,IAAIqD,EAEAD,EAAe5d,KAAKkQ,MAAM4K,KAC1B6C,GAAiB,EACjBE,EAAkBD,EAAe,IAEjCD,GAAiB,EACjBE,EAAkB7d,KAAKkQ,MAAM4K,KAG7B6C,GAAkB3d,KAAKkQ,MAAMqN,gBACnBvd,KAAKkQ,MAAMqN,SAASM,IAC1B7d,KAAKya,SAAS,CAAED,aAAcqD,IAKlCzC,cACJpb,KAAKya,SAAS,CAAED,cAAe,IAG3B,qBACJ,IAAImD,GAAiB,EACrB,MAAMC,EAAe5d,KAAKua,MAAMC,aAChC,IAAIqD,EACJjY,QAAQC,IAAI+X,GAERA,GAAgB5d,KAAK0a,WACrBiD,GAAiB,EACjBE,EAAkBD,EAAe,IAEjCD,GAAiB,EACjBE,EAAkB7d,KAAK0a,WAGvBiD,GAAkB3d,KAAKkQ,MAAMqN,gBACnBvd,KAAKkQ,MAAMqN,SAASM,IAC1B7d,KAAKya,SAAS,CAAED,aAAcqD,IAKlCxC,cAAchL,GAClB,IAAIsK,EAAejT,OAAOoW,SAASzN,EAAEG,OAAOnQ,MAAO,IAC/CqH,OAAOC,MAAMgT,GACb3a,KAAKya,SAAS,CAAED,aAAcG,KAGlCA,EAAeC,KAAKC,IAAI7a,KAAKkQ,MAAM4K,IAAKF,KAAKE,IAAI9a,KAAK0a,UAAWC,IACjE3a,KAAKya,SAAS,CAAED,aAAcG,IAC9BoD,GAAAA,EAAS,KAEL/d,KAAKkQ,MAAMqN,UAAYvd,KAAKkQ,MAAMqN,SAASvd,KAAKua,MAAMC,cAEtD,MAAMwD,EACFhe,KAAKyZ,UAAYzZ,KAAKyZ,SAASwE,SAAWje,KAAKyZ,SAASwE,mBAAmBC,kBAAoBle,KAAKyZ,SAASwE,QAC7GD,IACAA,EAAaG,aAAa,gBAAiBne,KAAKua,MAAMC,aAAanO,YACnE2R,EAAaG,aAAa,QAASne,KAAKua,MAAMC,aAAanO,eAEhE,IAVH0R,MA9OU3E,EAAAwC,aAAmD,CAC7Df,IAAK,EACLsB,oBAAqB,eACrBiC,oBAAqB,eAJRhF,EAAmBC,GAAA/L,EAAAA,EAAAA,IAAA,CADvCiH,EAAAA,IACoB6E,8lBC0FrB,MAAMiF,UAA6BpO,EAAAA,cAC/B/Q,YAAYgR,GACR7H,MAAM6H,GAKH,KAAAoO,WAAa,MACXC,EAAAA,EAAAA,cAAave,KAAKkQ,MAAMxR,QAAQ8X,eAAe/M,MAAMe,IACtD,MAAMgU,EAAWxe,KAAKkQ,MAAM8F,QAAQW,OAGpC,OAFK3W,KAAKye,mBAAmBze,KAAKkQ,MAAOsO,GACzCxe,KAAKya,SAAS,CAAEiE,oBAAqB,KAC9B,MAGR,KAAAD,mBAAqBzb,MAAOkN,EAAiCyO,KAChE,MAAMC,QAAkBL,EAAAA,EAAAA,cAAarO,EAAMxR,QAAQ8X,eAC7CqI,QAAqB7e,KAAK8e,2BAA2B5O,GACrD6O,EAAgBH,EAAUI,KAAKC,UAC/BC,EAAWH,MAAAA,OAAa,EAAbA,EAAepY,MAAKoY,GAAiBA,EAAcpI,SAAWkI,EAAa,GAAG7I,QAAQW,SACjGlY,EAAQ,CACV0gB,YAAa,CAACD,MAAAA,OAAQ,EAARA,EAAUE,eAEtBR,EAAUS,gBAAgB5gB,IAE7B,KAAAqgB,2BAA6B9b,MAAAA,IAA0C,IAAAsc,EAAAC,EAC1E,MACMzb,EAAqC,QAA7Bwb,EAAGpP,EAAMsP,4BAAoB,IAAAF,OAAA,EAA1BA,EAA4BtV,QAAOgM,IAAYyJ,EAAAA,iBAAiBC,kBAAkB1J,EAAQ2J,iBACrGlhB,EAAQqF,MAAAA,OAAQ,EAARA,EAAUxD,KAAI0V,IACjB,CACHA,QAASA,EAAQ2J,cACjB5b,MAAO0b,EAAAA,iBAAiBC,kBAAkB1J,EAAQ4J,UAAUC,UAL5C,EAK0E7J,EAAQ4J,UAAUC,SAC5GlgB,UAAWqW,EAAQ4J,UAAUpa,cAIrC,GAAIxB,EAAAA,gBAAgBC,YAAYxF,GAC5B,OAAOA,EAGX,GAAIuF,EAAAA,gBAAgBC,YAAYiM,EAAMpM,UAAW,CAC7C,MAAM0S,EAAgBtG,EAAMxR,QAAQ8X,cAC9BzX,EAAcyX,EAAc1X,eAAeC,YAE3CY,EAAYuQ,EAAMvQ,UAClB0F,EAA6C,CAC/CC,QAAS,CACLC,UAAWxG,EAAYC,UACvBwG,UAAW7F,GAEf+F,mBAAmB,EACnBmC,IAAKqI,EAAMpM,SAASxD,KAAI0V,GAAWA,EAAQxT,aAIzCY,SADqB0c,EAAAA,oBAAAA,sBAA0C,CAAE7Z,cAAeuQ,GAAiBnR,IACnD/E,KAAI+C,IACpD,MAAM0c,EAAsBhgB,EAAA,GAAQsD,GAC9BC,EAAc,iEAMpB,OAHIyc,EAAuBvc,gBAAkBF,EAGtCyc,KAGX,OAAO7P,EAAMpM,SAASxD,KAAIsS,IACtB,MAAMoN,EAAc5c,EAA+BuD,MAAKqP,GAAWA,EAAQ5R,WAAawO,EAAKpQ,YAC7F,IAAImd,EACa,IAAAM,EAAbD,EACAL,EAAa5f,EAAAA,EAAA,GACNigB,GAAW,IACdE,iBAAkBC,EAAAA,YAAYC,QAC9BC,cAAeL,EAAYM,MAC3BC,UAAgC,QAAvBN,EAAED,EAAYO,iBAAS,IAAAN,EAAAA,EAAID,EAAYM,QAIpDX,EAAgB,CACZvb,SAAUwO,EAAKpQ,WAIvB,MAAO,CACHwT,QAAS2J,EACT5b,MAAO6O,EAAK4N,SACZ7gB,UAAWiT,EAAKjT,cAKH,IAAA8gB,EAAzB,OAAc,QAAdlB,EAAIrP,EAAMwQ,YAAI,IAAAnB,GAAVA,EAAYvJ,QACL,CACH,CACIA,QAAS9F,EAAMwQ,KAAK1K,QACpBjS,MAAqB,QAAhB0c,EAAEvQ,EAAMsQ,gBAAQ,IAAAC,EAAAA,EArET,EAsEZ9gB,UAAWuQ,EAAMvQ,YAKtB,IAEJ,KAAAghB,gBAAkB3d,MAAAA,IAA6C,IAAA4d,GAChD,IAAdC,GACA7gB,KAAKse,aAET,MAAMwC,EAA2B,QAAlBF,EAAG5gB,KAAKkQ,MAAMwQ,YAAI,IAAAE,OAAA,EAAfA,EAAiB5K,QAAQ5R,SAC3C,IAAI2c,EAAyB,EAC7B,GAAID,EAAW,CAEX,MAAME,EAAQC,EAAQ,IAShBvf,EAAS,CACXwf,OAAQ,OACRC,cAAeC,EAAAA,EAEfxU,IAAK,mHACLyU,QAAS,CACLC,OAAQ,mBACR,kBAAmB,QACnB,gBAAiB,WACjB,eAAgB,mBAChBC,IAAK,YAETb,KApBSxe,KAAKO,UAAU,CACxB2H,eAAgB,CACZoX,WAAY,CAACV,GACbW,sBAAuB,EACvBC,sBAAsB,YAmBxBV,EACDpK,QAAQlV,GACR+H,MAAMkY,IAA2B,IAAAC,EAAAC,EAC9B,GACiB,QAAbD,EAAAD,EAASjB,YAAI,IAAAkB,GAAbA,EAAeE,0CACF,QAAbD,EAAAF,EAASjB,YAAI,IAAAmB,OAAA,EAAbA,EAAeC,wCAAwC/e,QAAS,EAClE,KAAAgf,EACE,MAAMC,EAA0B,QAAhBD,EAAGJ,EAASjB,YAAI,IAAAqB,OAAA,EAAbA,EAAeD,wCAAwC9X,QAAQ4I,GACvEA,EAAKlQ,YAAcoe,IAEW,IAAAmB,EAAzC,GAAID,GAAcA,EAAWjf,OAAS,EAClCge,EAAyBnG,KAAKsH,MAAkD,IAA3Cxa,OAAoB,QAAdua,EAACD,EAAW,UAAE,IAAAC,OAAA,EAAbA,EAAeE,mBAA4B,SAIlGC,OAAOhO,IACJxO,QAAQC,IAAIuO,MAKxB,GAFAxO,QAAQC,IAAI,4BAA6Bgb,EAAU,MAAOE,GAEtDF,EAAWE,EACX,OAAO,EAEX,MAAMnC,GAAYL,EAAAA,EAAAA,cAAave,KAAKkQ,MAAMxR,QAAQ8X,eAAe/M,MAAMe,IACnE,MAAMgU,EAAWxe,KAAKkQ,MAAM8F,QAAQW,OAE9BuI,EADgB1U,EAAO6X,MAAMpD,UACJtY,MAAMoY,GAAmCA,EAAcpI,SAAW6H,IAEjG,OADAxe,KAAKya,SAAS,CAAEiE,mBAAoBmC,SACnBlf,IAAbud,GAEKlf,KAAKsiB,iBAAiBtiB,KAAKkQ,QACzB,GAEN1F,EAAO+X,SAIHviB,KAAKsiB,iBAAiBtiB,KAAKkQ,QAG7B,IANElQ,KAAKwiB,aAAaxiB,KAAKkQ,MAAOgP,EAASW,SAAUgB,IAC/C,MASf,OAFAjb,QAAQC,IAAI+Y,IAEL,GAEJ,KAAA4D,aAAexf,MAAOkN,EAAiCuS,EAAaC,KACvE,MAAM9D,QAAkBL,EAAAA,EAAAA,cAAarO,EAAMxR,QAAQ8X,eAC7CqI,QAAqB7e,KAAK8e,2BAA2B5O,GACrD6O,EAAgBH,EAAUI,KAAKC,UAC/BC,EAAWH,MAAAA,OAAa,EAAbA,EAAepY,MAAKoY,GAAiBA,EAAcpI,SAAWkI,EAAa,GAAG7I,QAAQW,SACjGgM,QAAwB/D,EAAUgE,uBAAuB,CAC3DC,YAAY3D,MAAAA,OAAQ,EAARA,EAAUE,SAAU,GAChC0D,YAAaJ,IAEjB9c,QAAQC,IAAI8c,IAQT,KAAAL,iBAAmBtf,MAAAA,IAAyD,IAAA+f,EAE/E,MAAMC,QAAuBhjB,KAAK8e,2BAA2B5O,GACvD8F,EAAUgN,EAAe,GAAGhN,QAC5BwK,EAAWwC,EAAe,GAAGjf,MAE7B6a,QAAkBL,EAAAA,EAAAA,cAAarO,EAAMxR,QAAQ8X,eAepB,mBAdDoI,EAAUqE,iBAAiB,CACrDjN,QAAAA,EACAjS,MAAOyc,EACP0C,kBAA4C,QAA3BH,EAAE7S,EAAMiT,2BAAmB,IAAAJ,OAAA,EAAzBA,EAA2BK,kBAC9CC,qBAAsB,CAAEC,oCAAqCpT,EAAMqT,qCAEnE1f,iBAAkBqM,EAAMxR,QAAQ+E,IAAI/B,OAAOmC,iBAC3C2f,eAAgBtT,EAAMsT,eACtBC,YAAavT,EAAMsT,eAAiBtT,EAAMwT,uBAAoB/hB,EAC9DgiB,6BAA8BzT,EAAMyT,6BACpCC,uBAAwB1T,EAAM0T,uBAC9BjkB,UAAWqjB,EAAe,GAAGrjB,aAGbkkB,QAChBje,QAAQC,IAAI,gBAGb,KAAAie,qBAAuB,CAAC5T,EAAiCsO,KAC5D,MAAMO,EAAgB7O,EAAM6T,SAC5B,GAAIhF,GAA2C,KAA1BA,MAAAA,OAAa,EAAbA,EAAehc,QAAc,CAC9C,MAAMmc,EAAWH,EAAcpY,MAAMoY,GAAmCA,EAAcpI,SAAW6H,IACjG,GAAIU,EACA,OAAOA,EAASW,SAIxB,OAAO,GAGJ,KAAAmE,iBAAmB,KACjBhkB,KAAKsiB,iBAAiBtiB,KAAKkQ,OAChClQ,KAAKya,SAAS,CAAEiE,mBAAoB,KAC7B,GA5OP1e,KAAKua,MAAQ,CACTmE,mBAAoB,IA8OrB5M,SACH,IAAImS,EAASjkB,KAAK8jB,qBAAqB9jB,KAAKkQ,MAAOlQ,KAAKkQ,MAAM8F,QAAQW,QAElEsG,EAAS,KACTiH,EAAkB,KAKtB,OAJuC,IAAnClkB,KAAKua,MAAMmE,qBACXuF,EAAS,GAIE,IAAXA,GACmC,IAAlCjkB,KAAKua,MAAMmE,oBAA8D,KAAlC1e,KAAKua,MAAMmE,qBAAgE,IAAnC1e,KAAKua,MAAMmE,oBAiChF,IAAXuF,GAAkD,KAAlCjkB,KAAKua,MAAMmE,qBAC3BzB,EACIhN,EAAAA,cAAA,UAAQyC,UAAU,+BAA+BO,QAASjT,KAAKse,YAC3DrO,EAAAA,cAAA,OAAK2E,MAAM,KAAKC,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOJ,MAAM,8BAC9D1E,EAAAA,cAAA,KAAG+E,SAAS,wBACR/E,EAAAA,cAAA,QAAMmF,EAAE,YAAYC,OAAO,QAAQ8O,cAAc,QAAQC,eAAe,UACxEnU,EAAAA,cAAA,QACImF,EAAE,oMACFC,OAAO,QACP8O,cAAc,QACdC,eAAe,UAEnBnU,EAAAA,cAAA,QACImF,EAAE,+KACFC,OAAO,QACP8O,cAAc,QACdC,eAAe,WAGvBnU,EAAAA,cAAA,YACIA,EAAAA,cAAA,YAAUpL,GAAG,kBACToL,EAAAA,cAAA,QAAM2E,MAAM,KAAKC,OAAO,KAAKE,KAAK,eAOpB,IAAlC/U,KAAKua,MAAMmE,qBACXzB,EACIhN,EAAAA,cAAA,UAAQyC,UAAU,+BAA+BO,QAASjT,KAAKse,YAC3DrO,EAAAA,cAAA,OAAK2E,MAAM,KAAKC,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOJ,MAAM,8BAC9D1E,EAAAA,cAAA,KAAG+E,SAAS,wBACR/E,EAAAA,cAAA,QAAMmF,EAAE,YAAYC,OAAO,QAAQ8O,cAAc,QAAQC,eAAe,UACxEnU,EAAAA,cAAA,QACImF,EAAE,oMACFC,OAAO,QACP8O,cAAc,QACdC,eAAe,UAEnBnU,EAAAA,cAAA,QACImF,EAAE,+KACFC,OAAO,QACP8O,cAAc,QACdC,eAAe,WAGvBnU,EAAAA,cAAA,YACIA,EAAAA,cAAA,YAAUpL,GAAG,kBACToL,EAAAA,cAAA,QAAM2E,MAAM,KAAKC,OAAO,KAAKE,KAAK,eAQtD9E,EAAAA,cAACoU,EAAAA,KAAI,CAAC3R,UAAU,wBACZzC,EAAAA,cAAA,OACIyC,UAAU,WACV7N,GAAI,2BAA2B7E,KAAKkQ,MAAM8F,QAAQ5R,YAAYpE,KAAKkQ,MAAM8F,QAAQ5R,YAAYpE,KAAKkQ,MAAM8F,QAAQW,UAE/GsG,EACDhN,EAAAA,cAACmJ,EAAmB,CAChBvU,GAAI,2BAA2B7E,KAAKkQ,MAAM8F,QAAQ5R,YAAYpE,KAAKkQ,MAAM8F,QAAQ5R,YAAYpE,KAAKkQ,MAAM8F,QAAQW,SAEhHmE,IAAK,GACLC,aAAc/a,KAAKua,MAAMmE,oBAAsBuF,EAC/C1G,SAAUvd,KAAK2gB,gBACf9D,uBAAwB,mCACxBK,yBAA0B,8CAC1BQ,yBAA0B,8CAC1B4G,gBAAiB,qCACjBC,gBAAiB,qCACjBliB,OAAQrC,KAAKkQ,MAAM8F,QAAQW,aAzGvCsN,EAAS,EAETC,EACIjU,EAAAA,cAAA,UAAQyC,UAAU,kBAAkBO,QAASjT,KAAKgkB,kBAC9C/T,EAAAA,cAAA,OAAK2E,MAAM,KAAKC,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOJ,MAAM,8BAC9D1E,EAAAA,cAAA,KAAG+E,SAAS,wBACR/E,EAAAA,cAAA,QACImF,EAAE,uBACFC,OAAO,UACPC,YAAY,UACZ6O,cAAc,QACdC,eAAe,UAEnBnU,EAAAA,cAAA,QACImF,EAAE,uBACFC,OAAO,UACPC,YAAY,UACZ6O,cAAc,QACdC,eAAe,WAGvBnU,EAAAA,cAAA,YACIA,EAAAA,cAAA,YAAUpL,GAAG,kBACToL,EAAAA,cAAA,QAAM2E,MAAM,KAAKC,OAAO,KAAKE,KAAK,cAM/C9E,EAAAA,cAACoU,EAAAA,KAAI,CAAC3R,UAAU,QAAQwR,KAoF3C,UC3bM,SAAUM,EAAkB/f,EAAqDuR,GACnF,IAAKvR,IAAoCT,EAAAA,gBAAgBC,YAAY+R,EAAQ9R,iBACzE,OAEJ,MAAMugB,EAAqBzO,EAAQ9R,gBAAgByC,MAAKkM,GAAaA,EAAUzO,WAAaK,IAC5F,OAAIggB,EACOA,EAAmBlgB,eAD9B,EAKG,MAAMmgB,EAAgEjQ,IAexE,IAfyE,SAC1E3Q,EAAQ,QACRpF,EAAO,cACPuX,EAAa,UACbC,EAAS,WACTyO,EAAU,SACVC,EAAQ,oBACRC,EAAmB,iBACnBvT,EAAgB,cAChBwT,EAAa,wBACbC,EAAuB,gCACvBtgB,EAA+B,qBAC/BugB,EAAoB,gCACpBC,EAA+B,SAC/BlB,GACHtP,EACG,MAAMyQ,EAA2C,CAC7CC,oBAAqBjP,EAAUiP,qBAEnC,OACIlV,EAAAA,cAAA,MAAIyC,UAAU,iBACT5O,EAASxD,KAAI,CAAC0V,EAA8B3K,KAAiB,IAAA+Z,EAS1D,OACInV,EAAAA,cAAA,MAAIyC,UAAU,iCAAiCtS,IAAKiL,GAEhD4E,EAAAA,cAACoV,EAAAA,iBAAgB,CACb3mB,QAASA,EACT4S,iBAAkBA,EAClB2E,cAAeA,EACfqP,cAAepP,EAAUqP,UACzBC,kBAAmBtP,EAAUsP,kBAC7BC,iBAAkBvP,EAAUuP,iBAC5BC,gBAAiBxP,EAAUwP,gBAC3BC,UAAWd,EACXhgB,GAAI+f,EACJxkB,IAAK4V,EAAQ5R,SACbwhB,SAAUjB,EACVjE,KAAM,CAAE1K,QAAAA,GACR6P,gBAAiBf,EACjBC,wBAAyBA,EACzBe,eAAgBtB,EAAkB/f,EAAiCuR,GACnEgP,qBAAsBA,EACtBE,eAAgBA,EAChBa,oBAAqB7P,EAAU6P,oBAC/BC,wBAAyBf,MAAAA,OAA+B,EAA/BA,EAAiCte,MACtDsf,GACIjiB,EAAAA,gBAAgBC,YAAYgiB,IAC5BA,EAAsB,GAAGC,kBAAoBlQ,EAAQmQ,oBAGjElW,EAAAA,cAACoO,EAAoB,CACjBrI,QAASA,EACTtX,QAASA,EACTgiB,KAAM,CACF1K,QAAS,CACL5R,SAAU4R,MAAAA,OAAO,EAAPA,EAAS5R,SACnBuS,OAAQX,MAAAA,OAAO,EAAPA,EAASW,OACjBP,KAAMJ,MAAAA,OAAO,EAAPA,EAASI,KACfgQ,YAAapQ,MAAAA,OAAO,EAAPA,EAASoQ,YACtBlG,iBAAkBlK,MAAAA,OAAO,EAAPA,EAAS5R,SAC3BiiB,qBAAsBrQ,MAAAA,OAAO,EAAPA,EAASqQ,qBAC/B9F,UAAWvK,MAAAA,OAAO,EAAPA,EAASuK,UACpBD,MAAOtK,MAAAA,OAAO,EAAPA,EAASsK,MAChBD,cAAerK,MAAAA,OAAO,EAAPA,EAASsK,MACxB6F,gBAAiBnQ,MAAAA,OAAO,EAAPA,EAASmQ,gBAC1B3iB,gBAAiBwS,MAAAA,OAAO,EAAPA,EAASxS,gBAC1B8iB,oBAAqBtQ,MAAAA,OAAO,EAAPA,EAASsQ,sBAGtCzhB,GAAI+f,EACJb,SAAUA,MAAAA,GAAc,QAANqB,EAARrB,EAAU/E,YAAI,IAAAoG,OAAA,EAAdA,EAAgBnG,UAC1B2G,SAAS,gBChFrC,IAAqBW,EAArB,cAA6CtW,EAAAA,UAWzC/Q,YAAmBgR,GAA4B,IAAAsW,EAAA/R,EAAAgS,EAAAC,EAAAC,EAAAC,EAAAC,EAC3Cxe,MAAM6H,GAXO,KAAA4W,6BAAoD,IAAIC,IA0IxD,KAAAC,UAAY,CAACC,EAAkBC,EAAkBC,IACvD,CACH,CACIC,QAAS,GAAGH,UACZI,YAAa,GAAGH,IAChBI,iBAAkB,SAEtB,CACIF,QAAS,GAAGH,QACZI,YAAa,GAAGF,IAChBG,iBAAkB,QAgBb,KAAAC,gBAAkB,CAC/BN,EACAO,EACAC,EACAC,EACAC,EACAC,EACAT,KACqB,IAAAU,EAAAC,EAErB,MAAO,CACH,CACIjjB,GAAI,GAAGoiB,IAAWO,uBAClBnnB,MAAQonB,GAAe/f,OAAO+f,IAJN,EAKxB3P,UAAW,GAA0C,QAA1C+P,EAAG7nB,KAAKkQ,MAAM6X,oCAA4B,IAAAF,EAAAA,EAAI,MAAM7nB,KAAKgoB,eACpEC,cAAe,GAAGP,KAEtB,CACI7iB,GAAI,GAAGoiB,IAAWO,qBAClBnnB,MAAOqH,OAAOigB,IAAgBjgB,OAAOyf,GACrCrP,UAAW,GAA0C,QAA1CgQ,EAAG9nB,KAAKkQ,MAAMgY,oCAA4B,IAAAJ,EAAAA,EAAI,MAAM9nB,KAAKgoB,eACpEC,cAAe,GAAGL,OA7K1B5nB,KAAKmoB,eAAiBnoB,KAAKmoB,eAAejN,KAAKlb,MAC/CA,KAAKooB,kBAAoBpoB,KAAKooB,kBAAkBlN,KAAKlb,MACrDA,KAAKqoB,wBAA0BroB,KAAKqoB,wBAAwBnN,KAAKlb,MACjEA,KAAKsoB,WAAatoB,KAAKsoB,WAAWpN,KAAKlb,MACvCA,KAAKuoB,WAAavoB,KAAKuoB,WAAWrN,KAAKlb,MACvCA,KAAKwoB,iBAAmBxoB,KAAKwoB,iBAAiBtN,KAAKlb,MACnDA,KAAKyoB,iBAAmBzoB,KAAKyoB,iBAAiBvN,KAAKlb,MAEnDA,KAAK0oB,SAAWzY,EAAAA,YAChBjQ,KAAK2oB,SAAW1Y,EAAAA,YAEhB,MAAM,4BAAE2Y,GAAgC5oB,KAAKkQ,MACvC2Y,EAA8D,QAApDrC,EAAGoC,MAAAA,OAA2B,EAA3BA,EAA6BnoB,4BAAoB,IAAA+lB,EAAAA,EAAI,IAClEsC,EAAaF,MAAAA,OAA2B,EAA3BA,EAA6BloB,sBAC1CumB,EAAW,UAAU8B,OAAO/oB,KAAKkQ,MAAMX,8BAA8BnL,aAAa2kB,OACpF/oB,KAAKkQ,MAAM7B,oBAAoB7N,mBAE7BwoB,EAAWhpB,KAAKkQ,MAAM7B,oBAAoB5N,qBAC1CwoB,EAAWjpB,KAAKkQ,MAAM7B,oBAAoB3N,sBAC1CwmB,EAAWlnB,KAAK6T,aAAamV,GAC7B7B,EAAWnnB,KAAK6T,aAAaoV,GAC7BC,EAAyBlpB,KAAKgnB,UAAUC,EAAUC,EAAUC,GAC5DM,EACiH,QADtGhT,EAC+C,QAD/CgS,EACyB,QADzBC,EACb1mB,KAAKkQ,MAAM0Y,mCAA2B,IAAAlC,OAAA,EAAtCA,EAAwCjmB,4BAAoB,IAAAgmB,EAAAA,EAAIzmB,KAAKkQ,MAAM7B,oBAAoB5N,4BAAoB,IAAAgU,EAAAA,EAAI,IACrHkT,EAEkD,QAFvChB,EACgD,QADhDC,EACyB,QADzBC,EACb7mB,KAAKkQ,MAAM0Y,mCAA2B,IAAA/B,OAAA,EAAtCA,EAAwCnmB,6BAAqB,IAAAkmB,EAAAA,EAC7D5mB,KAAKkQ,MAAM7B,oBAAoB3N,6BAAqB,IAAAimB,EAAAA,EACpDsC,EACEvB,EAAmB1nB,KAAK6T,aAAa4T,GACrCG,EAAmB5nB,KAAK6T,aAAa8T,GACrCwB,EAAkBnpB,KAAKkQ,MAAMsX,UAAY,IAAIuB,OAAO/oB,KAAKkQ,MAAMsX,aAAe,GAC9E4B,EAAoCppB,KAAKunB,gBAC3CN,EACAkC,EACA1B,EACAC,EACAC,EACAC,EACAT,GAEJnnB,KAAKua,MAAQ,CACT8O,WAAW,EACXC,wBAAoB3nB,EACpB4nB,wBAAoB5nB,EACpB8lB,YAAaoB,EACblB,YAAamB,EACbU,YAAY,EACZC,YAAY,EACZxC,SAAAA,EACA+B,SAAAA,EACAC,SAAAA,EACAC,OAAAA,EACAE,aAAAA,GA1DE,mBACN,OAAOppB,KAAKkQ,MAAM7B,oBAAoByF,UAAY,GA6D/C4V,sBAAsBC,EAAkC9N,GAC3D,OAAI7b,KAAKua,QAAUsB,GAAa7b,KAAKkQ,QAAUyZ,EAM5CC,mBAAmBC,GAClBA,IAAkB7pB,KAAKkQ,OACvBlQ,KAAK8pB,oBAINhY,SACH,MAAM,oBAAEzD,EAAmB,8BAAEkB,EAA6B,sBAAEwa,GAA0B/pB,KAAKkQ,MAE3F,GAAK7B,GAAwBkB,EAO7B,MAA6B,UAAzBvP,KAAKkQ,MAAM8Z,UACJhqB,KAAKiqB,qBAGTjqB,KAAKkqB,gBAVRH,EAAsBjgB,UAAUsK,MAC5B,kGAeJ0V,oBAAiB,IAAAK,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACrB,MAAMvD,EAAW,UAAU8B,OAAO/oB,KAAKkQ,MAAMX,8BAA8BnL,aAAa2kB,OACpF/oB,KAAKkQ,MAAM7B,oBAAoB7N,mBAE7BwoB,EAAWhpB,KAAKkQ,MAAM7B,oBAAoB5N,qBAC1CwoB,EAAWjpB,KAAKkQ,MAAM7B,oBAAoB3N,sBAC1CwmB,EAAWlnB,KAAK6T,aAAamV,GAC7B7B,EAAWnnB,KAAK6T,aAAaoV,GAC7BC,EAAyBlpB,KAAKgnB,UAAUC,EAAUC,EAAUC,GAC5DM,EACiH,QADtG0C,EAC+C,QAD/CC,EACyB,QADzBC,EACbrqB,KAAKkQ,MAAM0Y,mCAA2B,IAAAyB,OAAA,EAAtCA,EAAwC5pB,4BAAoB,IAAA2pB,EAAAA,EAAIpqB,KAAKkQ,MAAM7B,oBAAoB5N,4BAAoB,IAAA0pB,EAAAA,EAAI,IACrHxC,EAEkD,QAFvC2C,EACgD,QADhDC,EACyB,QADzBC,EACbxqB,KAAKkQ,MAAM0Y,mCAA2B,IAAA4B,OAAA,EAAtCA,EAAwC9pB,6BAAqB,IAAA6pB,EAAAA,EAC7DvqB,KAAKkQ,MAAM7B,oBAAoB3N,6BAAqB,IAAA4pB,EAAAA,EACpDrB,EACEvB,EAAmB1nB,KAAK6T,aAAa4T,GACrCG,EAAmB5nB,KAAK6T,aAAa8T,GACrCwB,EAAkBnpB,KAAKkQ,MAAMsX,UAAY,IAAIuB,OAAO/oB,KAAKkQ,MAAMsX,aAAe,GAC9E4B,EAAoCppB,KAAKunB,gBAC3CN,EACAkC,EACA1B,EACAC,EACAC,EACAC,EACAT,GAEJnnB,KAAKya,SAAS,CAAEwM,SAAAA,EAAU+B,SAAAA,EAAUC,SAAAA,EAAUC,OAAAA,EAAQE,aAAAA,IA8DlDa,qBACJ,MAAM,WAAEQ,EAAU,8BAAElb,EAA6B,sBAAEwa,GAA0B/pB,KAAKkQ,OAC5E,YAAEuX,EAAW,YAAEE,EAAW,WAAE6B,EAAU,WAAEC,EAAU,mBAAEH,EAAkB,mBAAEC,GAAuBvpB,KAAKua,MAGpGmQ,EAAY,CACd,cAFoBX,EAAsBY,iBAAmB,OAAO/W,QAAQ,MAAOrE,EAA8BoE,SAAW,IAG5H,gBAAiB8W,GAOfG,EAAoB,mEACtBtB,EAAqB,qCAAuC,IAE1DuB,EAAoB,mEACtBtB,EAAqB,qCAAuC,IAI1DuB,EAAuB9qB,KAAK+qB,2BAA2BtD,EAAa+B,EAAYF,GAChF0B,EAAuBhrB,KAAK+qB,2BAA2BpD,EAAa8B,EAAYF,GACtF,OACItZ,EAAAA,cAAA,OAAA6C,OAAAC,OAAA,CAAML,UAAU,0CAA6CgY,GACzDza,EAAAA,cAAA,SAAOyC,UANW,8EAObqX,EAAsBkB,SACvBhb,EAAAA,cAAA,SACIyC,UAAWkY,EACXrN,SAAUvd,KAAKsoB,WACf4C,QAASlrB,KAAKsoB,WACd9K,OAAQxd,KAAKwoB,iBACbnoB,MAAOyqB,EACPrN,IAAKzd,KAAK0oB,YAGlBzY,EAAAA,cAAA,SAAOyC,UAhBW,8EAiBbqX,EAAsBoB,SACvBlb,EAAAA,cAAA,SACIyC,UAAWmY,EACXO,YAAaJ,OAAuBrpB,EAAYooB,EAAsBsB,mBACtE9N,SAAUvd,KAAKuoB,WACf2C,QAASlrB,KAAKuoB,WACd/K,OAAQxd,KAAKyoB,iBACbpoB,MAAO2qB,EACPvN,IAAKzd,KAAK2oB,YAGjBW,GACGrZ,EAAAA,cAAA,QAAMyC,UAAU,wFACX4W,GAGRC,GAAsBD,IAAuBC,GAC1CtZ,EAAAA,cAAA,QAAMyC,UAAU,wFACX6W,IAObW,gBACJ,MAAM,WAAEO,EAAU,UAAEjD,GAAcxnB,KAAKkQ,MACjCob,EAAiB,CACnB,gBAAiBb,GAGrB,OACIxa,EAAAA,cAACsb,EAAAA,OAAMzY,OAAAC,OAAA,CACHL,UAAU,mCACVtS,IAAKJ,KAAKua,MAAM0M,SAChBO,UAAWA,EACX3iB,GAAI7E,KAAKua,MAAM0M,SACfuE,QAAQ,EACR3Q,IAAM7a,KAAKua,MAAMyO,UAAYthB,OAAO1H,KAAKua,MAAMyO,gBAAcrnB,EAC7DmZ,IAAM9a,KAAKua,MAAM0O,UAAYvhB,OAAO1H,KAAKua,MAAM0O,gBAActnB,EAC7D8pB,KAAM,EACNC,YAAY,aACZxC,OAAQlpB,KAAKua,MAAM2O,OACnByC,YAAU,EACVC,aAAW,EACXxC,aAAcppB,KAAKua,MAAM6O,aACzByC,YAAa7rB,KAAKooB,kBAClB7K,SAAUuO,GAAAA,CAAS9rB,KAAKmoB,eAAgB,KACxC4D,kBAAmB/rB,KAAKqoB,yBACpBiD,IAKRhD,WAAW0D,GACfhsB,KAAKisB,aAAaD,EAAO,OAGrBzD,WAAWyD,GACfhsB,KAAKisB,aAAaD,EAAO,OAGrBC,aAAaD,EAA2CE,GAC5D,MAAMC,EAAc,WAAWD,IACzBE,EAAa,UAAUF,IAC7BlsB,KAAKya,SAAS,CACV,CAAC0R,GAAcnsB,KAAKqsB,2BAA2BL,EAAMvb,cAAcpQ,OACnE,CAAC+rB,IAAa,IAId5D,iBAAiBwD,GACrB,MAAMM,EAAmBtsB,KAAKqsB,2BAA2BL,EAAMvb,cAAcpQ,OAC7EL,KAAKya,SAAS,CACVgN,YAAa6E,EACbC,YAAY,IAEhB,MAAM7D,EAAWhhB,OAAO4kB,IAClB,SACFE,EAAQ,8BACRjd,EAA6B,oBAC7BlB,EAAmB,sBACnB0b,EAAqB,4BACrBnB,GACA5oB,KAAKkQ,MACH4K,EAAO8N,GAA+BA,EAA4BloB,4BAA0BiB,EAE5F8qB,EAAS3R,EAAMpT,OAAOoT,QAAOnZ,EAEnC,OAAIgG,MAAM+gB,IACN1oB,KAAKya,SAAS,CAAE6O,mBAAoBS,EAAsB2C,qBAC1D1sB,KAAK2sB,OAAO,QACL,GAGP3sB,KAAK4sB,eAAelE,EAAU+D,IAC9BD,EAAS,CACLjd,8BAAAA,EACAlB,oBAAAA,EACAY,aAAa,EACbE,WAAYuZ,EACZtZ,SAAUqd,KAEP,IAEXzsB,KAAK2sB,OAAO,QAEL,GAGHlE,iBAAiBuD,GACrB,MAAMa,EAAmB7sB,KAAKqsB,2BAA2BL,EAAMvb,cAAcpQ,OAC7EL,KAAKya,SAAS,CACVkN,YAAakF,EACbC,YAAY,IAEhB,MAAMnE,EAAWjhB,OAAOmlB,IAClB,SACFL,EAAQ,8BACRjd,EAA6B,oBAC7BlB,EAAmB,sBACnB0b,EAAqB,4BACrBnB,GACA5oB,KAAKkQ,MACH2K,EAAO+N,GAA+BA,EAA4BnoB,sBAAyB,IAE3FssB,EAASrlB,OAAOmT,GAEtB,OAAIlT,MAAMghB,IACN3oB,KAAKya,SAAS,CAAE8O,mBAAoBQ,EAAsB2C,qBAC1D1sB,KAAK2sB,OAAO,QACL,KAGP3sB,KAAK4sB,eAAeG,EAAQpE,KACxBta,EACAme,EAAS,CACLjd,8BAAAA,EACAlB,oBAAAA,EACAY,aAAa,EACbE,WAAY4d,EACZ3d,SAAUuZ,IAGd3oB,KAAK2sB,OAAO,QAET,GAMPA,OAAOT,GACX,MAAMzO,EAAoB,QAAdyO,EAAsBlsB,KAAK2oB,SAAW3oB,KAAK0oB,SAEvDsE,YAAW,KACHvP,GAAOA,EAAIQ,SACXR,EAAIQ,QAAQgP,UAEjB,IAGClC,2BACJ1W,EACA6Y,EACAC,GAEA,OAAID,GAAWC,QAAgCxrB,IAAb0S,EACvBA,EAEJrU,KAAK6T,aAAaQ,GAGrBuY,eAAe/R,EAAaC,GAChC,MAAM,sBAAEiP,GAA0B/pB,KAAKkQ,MACvC,YAAYvO,IAARmZ,MAIAD,EAAMC,KACN9a,KAAKya,SAAS,CACV6O,mBAAoBS,EAAsBqD,qBAC1C7D,mBAAoBQ,EAAsBqD,wBAEvC,IAMPvZ,aAAaG,GACjB,GAAuD,IAAnDhU,KAAKkQ,MAAM7B,oBAAoB7N,gBAAuB,CAEtD,OADeR,KAAKkQ,MAAMxR,QAAQwV,iBAAiBC,eAAezM,OAAOsM,GAAShU,KAAKgoB,cAG3F,OAAOhU,GAAU,GAGbqY,2BAA2B5tB,GAE/B,MAAM4uB,EAAa3lB,OAAOjJ,GAC1B,IAAKkJ,MAAM0lB,GACP,OAAO5uB,EAKX,OAD4BuB,KAAK8mB,6BAA6BwG,IAAI7uB,IACpCA,EAK1B0pB,eAAeoF,GAEnB,GAA2C,cAAvCA,EAAyB/T,UAA2B,CACpD,MAAM,SAAEgT,EAAQ,8BAAEjd,EAA6B,oBAAElB,GAAwBrO,KAAKkQ,MAC1E7B,GAAuBkf,IACvBf,EAAS,CACLjd,8BAAAA,EACAlB,oBAAAA,EACAY,aAAa,EACbE,WAAYoe,EAAyBC,gBACrCpe,SAAUme,EAAyBE,mBAGvCztB,KAAK0tB,oBAAoBH,KAM7BnF,kBAAkBmF,GACtB,MAAM,SAAEf,EAAQ,8BAAEjd,EAA6B,oBAAElB,GAAwBrO,KAAKkQ,MAC1E7B,GAAuBkf,IACvBf,EAAS,CACLjd,8BAAAA,EACAlB,oBAAAA,EACAY,aAAa,EACbE,WAAYoe,EAAyBC,gBACrCpe,SAAUme,EAAyBE,mBAGvCztB,KAAK0tB,oBAAoBH,IAKzBG,oBAAoBH,GACxB,GAAIA,EAAyB1oB,GAAI,CAC7B,MAAMV,EAAUwpB,SAASC,eAAe,GAAGL,EAAyB1oB,WAChEV,GACA6oB,YAAW,KACP7oB,EAAQ8oB,UACT,IAKP5E,wBAAwBwF,GAC5B,OAAO7tB,KAAK6T,aAAa,GAAGga,QAjetBvgB,EAAAA,EAAAA,IAAA,CAATgH,EAAAA,IAAQ,iCAPQiS,GAAejZ,EAAAA,EAAAA,IAAA,CADnCiH,EAAAA,IACoBgS,2TCQP,MAAOuH,WAAmB7d,EAAAA,UAKpC/Q,YAAmBgR,GACf7H,MAAM6H,GAmKO,KAAAE,SAAYC,IACzBA,EAAEC,iBAEF,MAAM,8BAAEf,EAA6B,oBAAElB,EAAmB,4BAAEua,GAAgC5oB,KAAKkQ,MAC7F7B,IACArO,KAAKkQ,MAAMsc,SAAS,CAChBjd,8BAAAA,EACAlB,oBAAAA,EACAY,aAAc2Z,IAGlBoE,YAAW,KACPhtB,KAAK+tB,WAAW9P,SAAWje,KAAK+tB,WAAW9P,QAAQgP,UACpD,KA/KPjtB,KAAKoQ,SAAWpQ,KAAKoQ,SAAS8K,KAAKlb,MACnCA,KAAKua,MAAQ,CACT8O,YAAarpB,KAAKkQ,MAAM0Y,6BAE5B5oB,KAAK+tB,WAAa9d,EAAAA,YAClBjQ,KAAKoR,SAAUC,EAAAA,EAAAA,kBAAiB,QAASrR,KAAKkQ,MAAMoB,iBAAmB,IAGpEoY,sBAAsBC,EAA6B9N,GACtD,OAAI7b,KAAKua,QAAUsB,GAAa7b,KAAKkQ,QAAUyZ,EAM5C7X,SAAM,IAAAkc,EAAAC,EAAAC,EACT,MAAAC,EAgBInuB,KAAKkQ,OAhBH,WACFua,EAAU,sBACVV,EAAqB,8BACrBxa,EAA6B,oBAC7BlB,EAAmB,4BACnBua,EAA2B,sBAC3BwF,EAAqB,4BACrBC,EAA2B,MAC3BhjB,EAAK,SACLijB,EAAQ,SACR9B,EAAQ,QACR9tB,EAAO,iBACP4S,EAAgB,oBAChBid,EAAmB,qBACnBC,GAEHL,EADMM,GAAKC,EAAAA,EAAAA,GAAAP,EAAAQ,IAEZ,IAAKtgB,EAED,YADA0b,EAAsBjgB,UAAUsK,MAAM,sEAGrC/F,EAAoB5N,sBACrBspB,EAAsBjgB,UAAUC,QAC5B,2DAA2D7H,KAAKO,UAAU4L,MAGlF,MAAMugB,EAAiBrf,EAA8BC,mBAAqBC,EAAAA,YAAYC,aACtF,IAAImf,EAAoBD,EAAiB,gBAAkB,eAC3DC,EAAoB,0BAA0BA,IAC9C,MAAM3C,EAAY0C,EAAiB,QAAU,WACvCvF,IAAcT,EAEpB,GADAiG,EAAoBxF,EAAY,GAAGwF,YAA8BA,EAC7Dtf,EAA8Buf,cAAgBjhB,EAAAA,qBAAqBkhB,OACnE,OAAO/uB,KAAKgvB,cACR3gB,EACAkB,EACA8Z,EACA3qB,EACA2M,EACAiG,EACA8c,EACAC,GAGRruB,KAAKoR,QAAQkB,cAAcC,MAAyD,QAApDyb,EAAG3f,EAAoB8E,qCAA6B,IAAA6a,EAAAA,EAAI3f,EAAoB5N,qBAC5G,MAAMoS,GAAYJ,EAAAA,EAAAA,wBAAuBnB,EAAmBtR,KAAKoR,SAE3D6d,EAAc5gB,EAAoB8E,+BAAiC9E,EAAoB5N,sBAAwB,GAE/GyuB,EAAe7gB,EAAoB8gB,OAAS,EAClD,IAAIC,EAEAA,EADiB,IAAjBF,EAC0BX,GACpBc,EAAAA,EAAAA,QAAOd,EAAqBhf,EAA8BoE,QAASsb,GACnE,GAEoBT,GACpBa,EAAAA,EAAAA,QAAOb,EAAsBjf,EAA8BoE,QAASsb,EAAaC,GACjF,GAGV,MAAMI,EAAsF,QAAzErB,EAAoD,QAApDC,EAAIluB,KAAKkQ,MAAMX,8BAA8BoE,eAAO,IAAAua,OAAA,EAAhDA,EAAkDqB,2BAAmB,IAAAtB,EAAAA,EAAI,GAC1FuB,EAAwBxvB,KAAKyvB,0BAA0BH,GAE7D,IAAI5c,EAAY,yBACZ8c,IACA9c,EAAYC,GAAAA,CAAWD,EAAW,sCAAsC4c,MAK5E,MAAMI,GAAYC,EAAAA,iBAAiBC,mBAAmBvhB,EAAoBwhB,oBACpEC,GAAYH,EAAAA,iBAAiBC,mBAAmBvhB,EAAoB0hB,gBACpEC,EAAmBN,GAAYI,EAErC,OACI7f,EAAAA,cAAA,MAAIyC,UAAWA,EAAW7N,GAAI,GAAG0K,EAA8BoE,WAAYtI,KACvE4E,EAAAA,cAAA,IAAA6C,OAAAC,OAAA,CACI3S,IAAKwoB,EAA8B,OAAS,QAC5CnL,IAAKzd,KAAK+tB,WACV3hB,KAAMpM,KAAKiwB,iBACXC,SAAUR,GAAY,EAAI,EAC1Bzc,QAASjT,KAAKoQ,SACdsC,UAAWmc,EACX3b,KAAMgZ,EAAS,aACHkD,EAAuB,iBACnBxG,GACZ/V,EACA4b,GAEHuB,GAAoBR,GAAyBxvB,KAAKmwB,cAAcb,GACjErf,EAAAA,cAAA,QAAMyC,UAAU,gCAA+B,cAAa,QAEvDrE,EAAoB8E,+BAAiC9E,EAAoB5N,0BAC3CkB,IAA9B0M,EAAoB8gB,OAAuB,KAAK9gB,EAAoB8gB,YAOjFM,0BAA0BH,GAE9B,OAD8Bc,EAAAA,EAAAA,8BAA6Bd,EAAetvB,KAAKkQ,MAAMxR,SAIjFyxB,cAAcb,GAA6B,IAAAe,EAC/C,MAAMhiB,EAAsBrO,KAAKkQ,MAAM7B,oBAGjCqG,EAAOrG,EAAoB8E,+BAAiC9E,EAAoB5N,sBAAwB,GACxG6vB,EAAc,CAChB,CACIjuB,OAAQ,GAAsC,QAAtCguB,EAAGhiB,EAAoB7N,uBAAe,IAAA6vB,EAAAA,EAAI,MAAMf,KAAiB5a,IACzErU,MAAOqU,EACP4a,cAAAA,EACAiB,aAAcliB,EAAoBwhB,mBAClC1Y,SAAU9I,EAAoB0hB,iBAItC,OACI9f,EAAAA,cAACugB,EAAAA,gBAAe,CACZ9d,UAAU,iCACV3T,YAAaiB,KAAKkQ,MAAMxR,QAAQkY,QAAQ7X,YACxC0xB,KAAMH,EACNI,oBAAoB,EACpBC,cAAY,IAKhBV,iBACJ,MAAM,WAAEjd,EAAU,8BAAEzD,EAA6B,oBAAElB,EAAmB,4BAAEua,GAAgC5oB,KAAKkQ,MAE7G,OAAI7B,EACO2E,EAAW,CACdzD,8BAAAA,EACAlB,oBAAAA,EACAY,aAAc2Z,IAIf,GAoBHoG,cACJ3gB,EACAkB,EACA8Z,EACA3qB,EACA2M,EACAiG,EACAsf,EACAC,GAEA,GAAIxiB,EAAoB5N,qBAAsB,KAAAgmB,EAAAqK,EAC1C9wB,KAAKoR,QAAQkB,cAAcC,MAAQlE,EAAoB8E,8BACvD,MAAMN,GAAYJ,EAAAA,EAAAA,wBAAuBnB,EAAmBtR,KAAKoR,SAC3D2f,EAAgBrpB,OAAOoW,SAASzP,EAAoB5N,qBAAsB,IAC1EuwB,EAAgD,QAAnCvK,EAAGzmB,KAAKkQ,MAAM+gB,6BAAqB,IAAAxK,OAAA,EAAhCA,EAAkC9f,MACpDtG,GAASA,EAAMqO,gBAAkBL,EAAoBK,gBAGnDwiB,EAAiBxpB,OAAOoW,UAASkT,MAAAA,OAAa,EAAbA,EAAevwB,uBAAwB,IAAK,IAC7E0wB,EAAyB,EAC/B,IAAIC,EAA+B,sBAE/BA,EADAL,EAAgBG,EACO,GAAGE,QACnBL,EAAgBG,EACA,GAAGE,UAEH,GAAGA,aAE9B,MAAMC,OAC4B1vB,IAA9B0M,EAAoB8gB,OAAuB9gB,EAAoB8gB,QAAUgC,EACnEN,IAAkCxB,EAAAA,EAAAA,QAAOwB,EAAgCxiB,EAAoB8gB,OAC7FyB,IAA4BvB,EAAAA,EAAAA,QAAOuB,EAA0BviB,EAAoB8gB,OAC3F,OACIlf,EAAAA,cAAA,MACIyC,UAAU,wDACVQ,KAAOlT,KAAKkQ,MAAMwJ,kBAAgC/X,EAAjB,eACjCkD,GAAI,GAAG0K,EAA8BoE,WAAYtI,KAEjD4E,EAAAA,cAAA,IAAA6C,OAAAC,OAAA,CACI3G,KAAMpM,KAAKiwB,iBACX/c,KAAK,SAAQ,gBACEmW,EAAS,aACZ,GAAG9Z,EAA8BoE,WAAYtF,EAAoB8E,0DAC3Eke,IACFpe,QAASjT,KAAKoQ,UACVyC,GAEJ5C,EAAAA,cAACqhB,EAAAA,gBAAe,CACZ5e,UAAW0e,EACXG,UAAWR,EACXS,YAA8D,QAAnDV,EAAEziB,EAAoB8E,qCAA6B,IAAA2d,EAAAA,EAAIziB,EAAoB5N,qBACtFgxB,WAAW,EACXC,UAAQ,EACR5Z,UAAU,GACVpZ,QAASA,EACTmG,GAAI7E,KAAKkQ,MAAM0U,SACfgB,SAAU5lB,KAAKkQ,MAAMyhB,eACrBjR,KAAM,KAEVzQ,EAAAA,cAAA,QAAMyC,UAAU,8BAA6B,cAAc1S,KAAKkQ,MAAMwJ,aAAe,YAAS/X,QAC3DA,IAA9B0M,EAAoB8gB,OAAuB,IAAI9gB,EAAoB8gB,8BClPhG,MAAMyC,WAAsB3hB,EAAAA,UACxB/Q,YAAYgR,GACR7H,MAAM6H,GAENlQ,KAAK6xB,cAAgB7xB,KAAK6xB,cAAc3W,KAAKlb,MAC7CA,KAAK8xB,iBAAmB9xB,KAAK8xB,iBAAiB5W,KAAKlb,MASnDA,KAAKua,MAAQ,CACTwX,UAPe,GAWhBrI,sBAAsBC,EAAgC9N,GACzD,OAAI7b,KAAKua,QAAUsB,GAAa7b,KAAKkQ,QAAUyZ,EAM5C7X,SACH,MAAM,wBAAEkgB,EAAuB,sBAAEjI,GAA0B/pB,KAAKkQ,MAMhE,GAJK8hB,GACDjI,EAAsBjgB,UAAUsK,MAAM,wDAGtC4d,EAAwBlD,cAAgBjhB,EAAAA,qBAAqBkhB,QAAU/uB,KAAKkQ,MAAMxR,QAAQ+E,IAAI/B,OAAOuwB,WACrG,OAAO,KAGX,MAAMvf,EAAYC,GAAAA,CACd,oBACA,aACAqf,EAAwBre,SAG5B,OACI1D,EAAAA,cAAA,OAAKyC,UAAWA,GACZzC,EAAAA,cAAC8I,EAAAA,OAAM,CACHrG,UAAW1S,KAAKua,MAAMwX,SAAW,qCAAuC,sCAAqC,aACjGC,EAAwBre,QACpCV,QAASjT,KAAK8xB,iBAAgB,gBACf9xB,KAAKua,MAAMwX,UAEzBC,EAAwBre,SAE7B1D,EAAAA,cAACiiB,EAAAA,SAAQ,CAAC5Z,OAAQtY,KAAKua,MAAMwX,SAAUI,QAAS,KAC3CnyB,KAAKoyB,kBAAkBJ,KAMhCI,kBAAkBJ,GACtB,OAAIlkB,EAAYkkB,EAAwBtjB,eAC7B1O,KAAKqyB,aAAaL,GAEtBhyB,KAAKsyB,yBAAyBN,GAGjCM,yBAAyBN,GAC7B,MAAM,WACFvH,EAAU,sBACVV,EAAqB,sBACrBkH,EAAqB,QACrBvyB,EAAO,sBACP0vB,EAAqB,4BACrBC,EAA2B,oBAC3BE,EAAmB,qBACnBC,EAAoB,SACpB5U,GACA5Z,KAAKkQ,MAIHgD,EAFF8e,EAAwBxiB,mBAAqBC,EAAAA,YAAYC,cACzDsiB,EAAwBlD,cAAgBjhB,EAAAA,qBAAqBkhB,OACnC,CAAE7b,KAAM,gBAAcvR,EAC9C4wB,EAAoBP,EAAwBtrB,QAAU,GACtD8rB,EAAYD,EAAkBjyB,KAAI,CAACqP,EAA4BtE,KACjE,IAAKsE,EAID,OAHAoa,EAAsBjgB,UAAUsK,MAC5B,6DAA6D4d,EAAwB5tB,aAAa4tB,EAAwBre,YAEvH,KAGX,MAAMiV,EAA8Bxa,EAAgCuB,EAAOshB,GAE3E,OACIhhB,EAAAA,cAAC6d,GAAU,CACPve,8BAA+ByiB,EAC/B3jB,oBAAqBsB,EACrBiZ,4BAA6BA,EAC7BqI,sBAAuBA,EAAsBjnB,QAAOyoB,GAChDF,EAAkB5rB,MAAKtG,GAASA,EAAMG,kBAAoBiyB,EAAcjyB,oBAE5EupB,sBAAuBA,EACvByC,SAAUxsB,KAAK6xB,cACf7e,WAAYhT,KAAKkQ,MAAM8C,WACvByX,WAAYA,EACZrqB,IAAKiL,EACLA,MAAOA,EACP3M,QAASA,EACTkmB,SAAU5kB,KAAKkQ,MAAM0U,SACrB+M,eAAgB3xB,KAAKkQ,MAAMyhB,eAC3BrgB,iBAAkBtR,KAAKkQ,MAAMoB,iBAC7B8c,sBAAuBA,EACvBG,oBAAqBA,EACrBC,qBAAsBA,EACtBH,4BAA6BA,EAC7B3U,aAAcE,OAI1B,OACI3J,EAAAA,cAAA,KAAA6C,OAAAC,OAAA,CACIL,UAAW,2BAA2Bsf,EAAwBre,WAC1DT,EAAI,cACI8e,EAAwBre,UAEnC6e,GAKLE,cAAcV,GAClB,OACIA,EAAwBW,uBAAyBC,EAAAA,gBAAgBC,OACjEb,EAAwBW,uBAAyBC,EAAAA,gBAAgBrH,QACjEyG,EAAwBW,uBAAyBC,EAAAA,gBAAgBE,eAE1D,SAEJ,QAGHT,aAAaL,GACjB,MAAM,WACFvH,EAAU,sBACVV,EAAqB,sBACrBkH,EAAqB,QACrBvyB,EAAO,6BACPqpB,EAA4B,6BAC5BG,GACAloB,KAAKkQ,MAGHsiB,GADoBR,EAAwBtrB,QAAU,IACxBpG,KAAI,CAACqP,EAA4BtE,KACjE,IAAKsE,EAID,OAHAoa,EAAsBjgB,UAAUsK,MAC5B,4CAA4C4d,EAAwB5tB,aAAa4tB,EAAwBre,YAEtG,KAGX,MAAMiV,EAA8Bxa,EAAgCuB,EAAOshB,GAErEjH,EAAYhqB,KAAK0yB,cAAcV,GAC/B5xB,EAAMwoB,EACN,GAAGA,EAA4BnoB,wBAAwBmoB,EAA4BloB,wBACnF,gBAAgB2K,IACtB,OACI4E,EAAAA,cAAA,MAAIyC,UAAW,sEAAoCtS,IAAKiL,GACpD4E,EAAAA,cAACsW,EAAe,CACZhX,8BAA+ByiB,EAC/B3jB,oBAAqBsB,EACrBiZ,4BAA6BA,EAC7BmB,sBAAuBA,EACvByC,SAAUxsB,KAAK6xB,cACf7e,WAAYhT,KAAKkQ,MAAM8C,WACvByX,WAAYA,EACZT,UAAWA,EACX5pB,IAAKA,EACLonB,UAAWpnB,EACX1B,QAASA,EACTqpB,6BAA8BA,EAC9BG,6BAA8BA,EAC9BtD,SAAU5kB,KAAKkQ,MAAM0U,SACrB+M,eAAgB3xB,KAAKkQ,MAAMyhB,qBAK3C,OAAO1hB,EAAAA,cAAA,MAAIyC,UAAW,yCAAyCsf,EAAwBre,WAAY6e,GAG/FX,cAAcjjB,GAClB5O,KAAKkQ,MAAM6iB,iBAAiBnkB,GAGxBkjB,mBACJ9xB,KAAKya,UAASuY,IAAa,CACvBjB,UAAWiB,EAAUjB,cAKjC,YC5PakB,GAAkCxe,IAAA,IAAC,UAAEye,GAAWze,EAAA,OACzDxE,EAAAA,cAAA,YACK,IACAijB,EACA,MCHIC,GAA0B1e,IAAA,IAAC,KAAEC,EAAI,UAAEhC,GAAW+B,EAAA,OACvDxE,EAAAA,cAAA,QAAMyC,UAAWA,GACZ,IACAgC,EACA,MCPF,IAAW0e,IAAlB,SAAkBA,GACdA,EAAA,UACAA,EAAA,UACAA,EAAA,UACAA,EAAA,cACAA,EAAA,YALJ,CAAkBA,KAAAA,GAAmB,+lBCmKrC,IAAqBC,GAAqBC,GAA1C,cAAmDrjB,EAAAA,cA4D/C/Q,YAAmBgR,EAAgEqK,GAAkC,IAAAgZ,EACjHlrB,MAAM6H,GArDO,KAAAsjB,sBAAkD,CAC/D,CAAEpzB,IAAKsI,EAAAA,GAAYC,0BAA2BtI,MAAOL,KAAKkQ,MAAMgG,UAAUvN,2BAC1E,CAAEvI,IAAKsI,EAAAA,GAAYI,oBAAqBzI,MAAOL,KAAKkQ,MAAMgG,UAAUpN,qBACpE,CAAE1I,IAAKsI,EAAAA,GAAYK,qBAAsB1I,MAAOL,KAAKkQ,MAAMgG,UAAUnN,sBACrE,CAAE3I,IAAKsI,EAAAA,GAAYM,qBAAsB3I,MAAOL,KAAKkQ,MAAMgG,UAAUlN,sBACrE,CAAE5I,IAAKsI,EAAAA,GAAYO,sBAAuB5I,MAAOL,KAAKkQ,MAAMgG,UAAUjN,uBACtE,CAAE7I,IAAKsI,EAAAA,GAAYG,uBAAwBxI,MAAOL,KAAKkQ,MAAMgG,UAAUrN,wBACvE,CAAEzI,IAAKsI,EAAAA,GAAYQ,wBAAyB7I,MAAOL,KAAKkQ,MAAMgG,UAAUhN,yBACxE,CAAE9I,IAAKsI,EAAAA,GAAYS,qBAAsB9I,MAAOL,KAAKkQ,MAAMgG,UAAU/M,sBACrE,CAAE/I,IAAKsI,EAAAA,GAAYU,0BAA2B/I,MAAOL,KAAKkQ,MAAMgG,UAAU9M,4BAK7D,KAAAqqB,UAAgCzzB,KAAKkQ,MAAMxR,QAAQkY,QAAQ3V,UAAU9B,SAG9E,KAAAu0B,UAAsB,KAMtB,KAAAC,mBAAyC,EAMhC,KAAAC,kBAAoB,EAEpB,KAAAC,qBAAuB,WAEvB,KAAAC,kBAAoB,WAEpB,KAAAC,kBAAoB,WAEpB,KAAAp0B,WAAYoC,EAAAA,EAAAA,IAAa/B,KAAKkQ,MAAMxR,QAAQkY,SAErD,KAAAod,wBAAkC,EAElC,KAAAC,YAAsB,EAmVtB,KAAAC,yBAA2B,KAAsB,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACrD,MAAMC,EAAiB,qFAEjBC,GACwB,QAA1Bf,EAAAn0B,KAAKkQ,MAAMwQ,KAAKyU,kBAAU,IAAAhB,OAAA,EAA1BA,EAA4B3pB,SAC5BxK,KAAKkQ,MAAMwQ,KAAKyU,WAAW3qB,OAAOR,QAAOorB,IAAG,IAAAC,EAAA,OAAID,EAAIhxB,YAA4C,QAApCixB,EAAKr1B,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,cAAM,IAAA6qB,OAAA,EAA/BA,EAAiCC,mBAEtG,IAAIC,GACAL,MAAAA,GAAmB,QAALd,EAAdc,EAAiB,UAAE,IAAAd,OAAA,EAAnBA,EAAqBhe,OACrB,IAAI8e,MAAAA,GAAmB,QAALb,EAAda,EAAiB,UAAE,IAAAb,OAAA,EAAnBA,EAAqBje,KAAKxC,QAAQ,OAAQ,KAAK4hB,iBAAiBN,MAAAA,GAAmB,QAALZ,EAAdY,EAAiB,UAAE,IAAAZ,OAAA,EAAnBA,EAAqBlwB,aAEzFqxB,GACAP,MAAAA,GAAmB,QAALX,EAAdW,EAAiB,UAAE,IAAAX,OAAA,EAAnBA,EAAqBmB,UACrBR,MAAAA,GAA0B,QAAZV,EAAdU,EAAiB,GAAGQ,cAAM,IAAAlB,OAAA,EAA1BA,EAA6B,GAAGmB,MAChC,GAAGT,MAAAA,GAA0B,QAAZT,EAAdS,EAAiB,GAAGQ,cAAM,IAAAjB,OAAA,EAA1BA,EAA6B,GAAGkB,IAAI/hB,QAAQ,OAAQ,KAAK4hB,gBAE5DI,GAC0B,QAA1BlB,EAAA10B,KAAKkQ,MAAMwQ,KAAKyU,kBAAU,IAAAT,OAAA,EAA1BA,EAA4BlqB,SAC5BxK,KAAKkQ,MAAMwQ,KAAKyU,WAAW3qB,OAAOR,QAAOorB,IAAG,IAAAS,EAAA,OAAIT,EAAIE,kBAAkD,QAApCO,EAAK71B,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,cAAM,IAAAqrB,OAAA,EAA/BA,EAAiCP,mBAExGQ,EAAqBZ,MAAAA,GAAmB,QAALP,EAAdO,EAAiB,UAAE,IAAAP,OAAA,EAAnBA,EAAqBve,KAK5C,IAAA2f,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAFiC,QAA/B1B,EAAA50B,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,cAAM,IAAAoqB,OAAA,EAA/BA,EAAiCU,kBAAmBt1B,KAAK6zB,uBAC1B,QAA/BgB,EAAA70B,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,cAAM,IAAAqqB,OAAA,EAA/BA,EAAiCS,kBAAmBt1B,KAAK+zB,oBAEzDwB,GAC4B,QAAxBQ,EAAA/1B,KAAKkQ,MAAMwQ,KAAKphB,gBAAQ,IAAAy2B,GAAQ,QAARA,EAAxBA,EAA0BvrB,cAAM,IAAAurB,GAAK,QAALA,EAAhCA,EAAmC,UAAE,IAAAA,OAAA,EAArCA,EAAuC3f,OACvC,IAA4B,QAA5B4f,EAAIh2B,KAAKkQ,MAAMwQ,KAAKphB,gBAAQ,IAAA02B,GAAQ,QAARA,EAAxBA,EAA0BxrB,cAAM,IAAAwrB,GAAK,QAALA,EAAhCA,EAAmC,UAAE,IAAAA,OAAA,EAArCA,EAAuC5f,KAAKxC,QAAQ,OAAQ,KAAK4hB,iBACzC,QADsDS,EAC9Ej2B,KAAKkQ,MAAMwQ,KAAKphB,gBAAQ,IAAA22B,GAAQ,QAARA,EAAxBA,EAA0BzrB,cAAM,IAAAyrB,GAAK,QAALA,EAAhCA,EAAmC,UAAE,IAAAA,OAAA,EAArCA,EAAuC7xB,aAG/CqxB,GAC4B,QAAxBS,EAAAl2B,KAAKkQ,MAAMwQ,KAAKphB,gBAAQ,IAAA42B,GAAQ,QAARA,EAAxBA,EAA0B1rB,cAAM,IAAA0rB,OAAA,EAAhCA,EAAkCR,UACV,QADgBS,EACxCn2B,KAAKkQ,MAAMwQ,KAAKphB,gBAAQ,IAAA62B,GAAQ,QAARA,EAAxBA,EAA0B3rB,cAAM,IAAA2rB,GAAQ,QAARA,EAAhCA,EAAkCT,cAAM,IAAAS,OAAA,EAAxCA,EAA2C,GAAGR,MAC9C,GAA2B,QAA3BS,EAAGp2B,KAAKkQ,MAAMwQ,KAAKphB,gBAAQ,IAAA82B,GAAQ,QAARA,EAAxBA,EAA0B5rB,cAAM,IAAA4rB,GAAQ,QAARA,EAAhCA,EAAkCV,cAAM,IAAAU,OAAA,EAAxCA,EAA2C,GAAGT,IAAI/hB,QAAQ,OAAQ,KAAK4hB,gBAE9EM,EAA6C,QAA3BO,EAAGr2B,KAAKkQ,MAAMwQ,KAAKphB,gBAAQ,IAAA+2B,GAAQ,QAARA,EAAxBA,EAA0B7rB,cAAM,IAAA6rB,OAAA,EAAhCA,EAAkCjgB,KAEvDwf,GAC8B,QAA1BU,EAAAt2B,KAAKkQ,MAAMwQ,KAAKyU,kBAAU,IAAAmB,OAAA,EAA1BA,EAA4B9rB,SAC5BxK,KAAKkQ,MAAMwQ,KAAKyU,WAAW3qB,OAAOR,QAAOorB,IAAG,IAAAmB,EAAA,OAAInB,EAAIE,kBAAkD,QAApCiB,EAAKv2B,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,cAAM,IAAA+rB,OAAA,EAA/BA,EAAiCnyB,cAMhH,IAyDEoyB,EAAAC,EAAAC,EAAAC,EAzDEC,EAAW,CACXC,MAAM,EACNC,UAAU,EACVC,MAAO,IACPC,aARiB,EASjBC,eAAgB,EAChBC,QAAQ,EACRC,WAAY,CACR,CACIC,WAAY,KACZR,SAAU,CACNI,aAAc,IAGtB,CACII,WAAY,KACZR,SAAU,CACNI,aAAc,IAGtB,CACII,WAAY,KACZR,SAAU,CACNI,aAAc,IAGtB,CACII,WAAY,IACZR,SAAU,CACNI,aAAc,IAGtB,CACII,WAAY,IACZR,SAAU,CACNI,aAAc,MAQ9B,GAAIpB,GAAuBA,EAAoB7yB,OAAS,EAAG,CACvD,MAAMs0B,EAAczB,EAAoB/lB,WAAUynB,IAAG,IAAAC,EAAA,OAAmC,QAA/BA,EAAAv3B,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,cAAM,IAAA+sB,OAAA,EAA/BA,EAAiCnzB,YAAakzB,EAAIlzB,YAE3G,IAAqB,IAAjBizB,EAAoB,CACpB,MAAOG,GAAe5B,EAAoB7lB,OAAOsnB,EAAa,GAC9DzB,EAAoB6B,QAAQD,IAGpC,OACIx3B,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,SACM,QAA/BsqB,EAAA90B,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,cAAM,IAAAsqB,OAAA,EAA/BA,EAAiCQ,kBAAmBt1B,KAAK8zB,oBAC1B,QAA/BiB,EAAA/0B,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,cAAM,IAAAuqB,OAAA,EAA/BA,EAAiC3wB,YAAapE,KAAK6zB,sBACnD+B,IACmB,QAAnBZ,EAAAY,SAAmB,IAAAZ,OAAA,EAAnBA,EAAqBjyB,QAAS,EAG1BkN,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,OAAKyC,UAAU,+BAA+BojB,GAC9C7lB,EAAAA,cAACsb,GAAAA,EAAMzY,OAAAC,OAAA,GAAK6jB,EAAQ,CAAElkB,UAAU,4BAC5BzC,EAAAA,cAAA,OACIyC,WACmC,QAA/B8jB,EAAAx2B,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,cAAM,IAAAgsB,OAAA,EAA/BA,EAAiClB,kBAAmBt1B,KAAK+zB,oBAC1B,QAA/B0C,EAAAz2B,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,cAAM,IAAAisB,OAAA,EAA/BA,EAAiCnB,kBAAmBt1B,KAAK6zB,qBACnD,2BACA,WAEVzzB,IAAK,GAEL6P,EAAAA,cAAA,KAAG7D,KAAMmpB,GACLtlB,EAAAA,cAAA,MAAIyC,UAAW,GAAqB,QAArBgkB,EAAGZ,SAAkB,IAAAY,GAAe,QAAfA,EAAlBA,EAAoBlB,qBAAa,IAAAkB,OAAA,EAAjCA,EAAmC9iB,QAAQ,KAAM,6BAA2B,YAG9F3D,EAAAA,cAAA,OACIqH,IAAK,GAAG2d,qBAAsD,QAAxC0B,EAAoBlB,SAAoB,IAAAkB,OAAA,EAApBA,EACpC/iB,QAAQ,OAAQ,iBACjBA,QAAQ,aAAc,oDAC3BgB,MAAM,MACNC,OAAO,SAIlB+gB,EAAoBt1B,KAAI,CAACo3B,EAAMrsB,KAAS,IAAAssB,EAAAC,EAAAC,EAAAC,EACrC,MAAMC,GAAkBL,MAAAA,OAAI,EAAJA,EAAMthB,OAAQshB,EAAKthB,KAAKxC,QAAQ,OAAQ,KAC1DokB,EACFD,GACA,IAAIA,EACCnkB,QAAQ,MAAO,KACfA,QAAQ,SAAU,IAClB4hB,iBAAiBkC,EAAKtzB,aAC/B,OACI6L,EAAAA,cAAA,OACIyC,WACmC,QAA/BilB,EAAA33B,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,cAAM,IAAAmtB,OAAA,EAA/BA,EAAiCvzB,YAAaszB,EAAKtzB,SAC7C,2BACA,WAEVhE,IAAKiL,EAAQ,GAEb4E,EAAAA,cAAA,KAAG7D,KAAM4rB,GACL/nB,EAAAA,cAAA,MAAIyC,UAAU,wBAAiC,QAAXklB,EAAEF,EAAKthB,YAAI,IAAAwhB,OAAA,EAATA,EAAWhkB,QAAQ,KAAM,MAC/D3D,EAAAA,cAAA,OACIqH,IACIogB,MAAAA,GAAY,QAARG,EAAJH,EAAMhC,cAAM,IAAAmC,GAAZA,EAAe,GAAGlC,IACZ,GAAGV,qBAAkCyC,MAAAA,GAAY,QAARI,EAAJJ,EAAMhC,cAAM,IAAAoC,OAAA,EAAZA,EAAe,GAAGnC,0CACvD,GAAGV,kBAEbrgB,MAAM,MACNC,OAAO,cAUhC5E,EAAAA,cAAAA,EAAAA,SAAA,OASE,KAAAgoB,qBAAuB,CAACC,EAA8Bp0B,KAAuD,IAAAq0B,EAAAC,EAAAC,EAAAC,EAC1H,IAAIC,EAA6B,GAsBjC,GAnBuB,aAAnBv4B,KAAKyzB,UACLyE,EAAc/4B,SAAW,WAEzB+4B,EAAc/4B,SAAW,SAGO,QAApCg5B,EAAIn4B,KAAKkQ,MAAMxR,QAAQkY,QAAQ1V,aAAK,IAAAi3B,GAAhCA,EAAkCn2B,UAClCu2B,EAAer2B,KAAKC,MAAMC,mBAAmBpC,KAAKkQ,MAAMxR,QAAQkY,QAAQ1V,MAAMc,WAGlFk2B,EAAchrB,kBACTlN,KAAKkQ,MAAMxR,QAAQkY,QAAQ1V,QACvBlB,KAAKkQ,MAAMxR,QAAQkY,QAAQ1V,MAAM8G,MAAsC,QAAlCowB,EAAIp4B,KAAKkQ,MAAMxO,OAAOqG,oBAAY,IAAAqwB,EAAAA,EAd9C,KAe9B,EACJF,EAAcjrB,eAAiB,CAAEhL,QAASs2B,GAC1CL,EAAc/qB,SAAyC,QAAjCkrB,EAAGr4B,KAAKkQ,MAAMxO,OAAOqG,oBAAY,IAAAswB,EAAAA,EAjBrB,GAkBlCH,EAAclrB,eAAiBlJ,EAASA,SACxCo0B,EAAcM,kBAAoB10B,EAASC,MAC3Cm0B,EAAcnrB,eAAgBvL,EAAAA,EAAAA,IAAuBxB,KAAKkQ,MAAMxR,QAAQkY,UAAY,GAChD,QAApC0hB,EAAIt4B,KAAKkQ,MAAMxR,QAAQkY,QAAQ1V,aAAK,IAAAo3B,GAAhCA,EAAkC91B,UAAW,CAC7C,MAAM4K,EAAiBpN,KAAKkQ,MAAMwQ,KAAKtT,eAAe5C,OAClD4C,IACA8qB,EAAc9qB,eAAiBA,KAS1B,KAAAqrB,qCAAuCz1B,UAA0B,IAAA01B,EAAAC,EAC9E,MAAMC,EAAmE,QAAvDF,EAAuC,QAAvCC,EAAG34B,KAAKkQ,MAAMwQ,KAAKwX,cAAc1tB,cAAM,IAAAmuB,OAAA,EAApCA,EAAsC3rB,sBAAc,IAAA0rB,EAAAA,EAAI,GAEvEzT,QAAwC4T,EAAAA,EAAAA,wDAC1C,IAAIC,EAAAA,mDACAF,EACA54B,KAAKkQ,MAAMxR,QACXq6B,EAAAA,4BAA4BC,aAEhCh5B,KAAKkQ,MAAMxR,QAAQ8X,eAGnBxS,EAAAA,gBAAgBC,YAAYghB,IAC5BjlB,KAAKya,SAAS,CAAEwK,gCAAAA,KAOP,KAAAgU,gBAAkBj2B,UAA0B,IAAAk2B,EAAAC,EACzD,MAAMP,EAAmE,QAAvDM,EAAuC,QAAvCC,EAAGn5B,KAAKkQ,MAAMwQ,KAAKwX,cAAc1tB,cAAM,IAAA2uB,OAAA,EAApCA,EAAsCnsB,sBAAc,IAAAksB,EAAAA,EAAI,GACvEp1B,QAAiBs1B,EAAAA,EAAAA,gCACnB,IAAIC,EAAAA,iCAAiCT,GACrC54B,KAAKkQ,MAAMxR,QAAQ8X,sBAGKxW,KAAKkQ,MAAMwQ,KAAKwX,eAC9BlrB,eAAiBlJ,GAGlB,KAAAw1B,sBAAwB,KACrC,MAAM,UAAEpjB,GAAclW,KAAKkQ,MAC3B,MXxtB0BA,CAAAA,IACvB,CACHqpB,MAAOvhB,EAAU9H,GACjBspB,YAAa9gB,EAAgBxI,GAC7BupB,YAAa5gB,EAAgB3I,GAC7BwpB,UAAWzpB,IAAAA,cAAC0pB,EAAAA,UAAS,CAACjnB,UAAU,4BWmtBzBknB,CAAkB,CACrB1jB,UAAW,CACP2jB,qBAAsB3jB,EAAU2jB,qBAChCjhB,WAAY1C,EAAU0C,YAE1BN,OAAQtY,KAAKua,MAAMuf,YACnBzhB,UAAWrY,KAAK+5B,gBAChBvhB,cAAexY,KAAKg6B,gBAIX,KAAAC,oBAAuB96B,IACpC,MAAM,KAAEuhB,EAAI,QAAEhiB,EAAO,UAAEwX,GAAclW,KAAKkQ,MAE1C,IAAIgqB,EAAsC,GAGnC,IAAAC,EAFHz7B,GAAWA,EAAQkY,SAAWlY,EAAQkY,QAAQ1V,OAASxC,EAAQkY,QAAQ1V,MAAMoB,EAC7E43B,EAAkB,IAAIx7B,EAAQkY,QAAQ1V,MAAMoB,KAE5C43B,EACKxZ,EAAKphB,SAASkL,QACX8oB,GAAsB8G,gBAAgB17B,EAAQkY,QAAQlX,OAAQghB,EAAKphB,SAASkL,OAAO6vB,mBACtF3Z,EAAKphB,SAASkL,QAAUkW,EAAKphB,SAASkL,OAAO4L,OACd,QADmB+jB,EACnDn6B,KAAKkQ,MAAMxR,QAAQkY,QAAQ1V,aAAK,IAAAi5B,OAAA,EAAhCA,EAAkCviB,QAClC,GAER,IACI0iB,EADAC,EAAmB,GAEnB7Z,EAAKwX,eAAiBxX,EAAKwX,cAAc1tB,aAA0D7I,IAAhD+e,EAAKwX,cAAc1tB,OAAOguB,kBAC7E8B,EAAqB5Z,EAAKwX,cAAc1tB,OAAOguB,kBACxC9X,EAAK5c,UAAY4c,EAAK5c,SAAS0G,SACtC8vB,EAAqB5Z,EAAK5c,SAAS0G,OAAOzG,OAI1Cw2B,EADAD,GAA6C,IAAvBA,EAEK,IAAvBA,GACMjL,EAAAA,EAAAA,QAAOrvB,KAAKkQ,MAAMgG,UAAUskB,iBAAkBF,GAC9Ct6B,KAAKkQ,MAAMgG,UAAUukB,YAEZpL,EAAAA,EAAAA,QAAOrvB,KAAKkQ,MAAMgG,UAAUskB,iBAAkB,GAOrE,MAAO,CACHE,eAAgB,CAAEhoB,UAAW,qCANhBhU,EAAQkY,QAAQ+jB,kBAAoB,gBAAgBj8B,EAAQkY,QAAQ+jB,kBAAkBnF,gBAAkB,MAOrH5d,MAAO,CACHgjB,YAPY3qB,EAAAA,cAACkjB,GAAK,CAACzgB,UAAU,4CAA4CgC,KAAMwB,EAAU2kB,mBAQzFC,UAPUZ,GAAmBjqB,EAAAA,cAACkjB,GAAK,CAACzgB,UAAU,0CAA0CgC,KAAMwlB,IAQ9Fa,WAPW9qB,EAAAA,cAACkjB,GAAK,CAACzgB,UAAU,2CAA2CgC,KAAM6lB,KASjFS,iBAAgBh7B,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,OACzCrL,SAAUA,IAID,KAAA87B,sBAAwB,KACrC,MAAM,KAAEva,GAAS1gB,KAAKkQ,MAChBgrB,EAAoBxa,EAAKwa,kBAAkB1wB,OAejD,MAAO,CACH2wB,2BAA4B,CAAEC,IAAK,MAAO1oB,UAAW,kDACrD2oB,sBAfAH,GACAA,EAAkB56B,KAAI,CAACD,EAA8BgL,IAE7C4E,EAAAA,cAAC4H,EAAI,CACDzX,IAAKiL,EACLqJ,KAAMrU,EAAM+V,KACZ0B,UAAW,GAAG9X,KAAKkQ,MAAMgG,UAAUolB,yBAAyBj7B,EAAM+V,OAClEhK,KAAM/L,EAAMk7B,QASxBC,2BAL0BvrB,EAAAA,cAACgjB,GAAS,CAACC,UAAU,QAStC,KAAAuI,oBAAsB,KACnC,MAAM,UAAEvlB,GAAclW,KAAKkQ,MACrBwrB,EAAiB17B,KAAK27B,+BAAiC37B,KAAKua,MAAMqhB,aAAaC,qBACrF,IAAIC,EAAkB97B,KAAK+7B,uBAC3B,MAAMC,EAAuB,CAAC,qBAAsB,cAAe,WAAY,iBAC3Eh8B,KAAKkQ,MAAMxR,QAAQ+E,IAAI/B,OAAOuwB,aAC9B6J,EAAkBA,EAAgB9xB,QAAOiyB,GAAkBA,EAAe77B,MAAQsI,EAAAA,GAAYG,0BAGlGizB,EAAkBA,EAAgB9xB,QAAOiyB,IAAmBD,EAAqBprB,SAASqrB,EAAe77B,OAyBzG,MAAO,CACH87B,iBAAkB,CAAExpB,UAAW,gDAC/BypB,eAxBAlsB,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,OAAKyC,UAAU,sBACXzC,EAAAA,cAACmsB,EAAAA,gBAAe,CACZC,eAAe,uBACfC,UAAWpmB,EAAUqmB,oBACrBC,WAAW,yBACXC,kBAAkB,wBAClBC,YAAY,OACZZ,gBAAiBA,EACjBa,eAAgBjB,EAChBkB,eAAgB58B,KAAK68B,sBACrBpf,IAAKzd,KAAK88B,6BAEd7sB,EAAAA,cAAA,OAAK2E,MAAM,IAAIC,OAAO,IAAIC,QAAQ,UAAUC,KAAK,OAAOJ,MAAM,8BAC1D1E,EAAAA,cAAA,QACImF,EAAE,kOACFL,KAAK,eAYZ,KAAAgoB,eAAiB,KAC9B,MAAM,OAAEr7B,EAAM,QAAEhD,EAAO,KAAEgiB,EAAI,UAAExK,GAAclW,KAAKkQ,MAC5CgoB,EAAgBxX,EAAKwX,cAAc1tB,OACnCgB,GAAUc,EAAAA,EAAAA,IAAc5N,EAAQkY,SAChC7O,EAAerG,EAAOqG,cAAgB,GAEtC2D,EAAYwsB,MAAAA,GAAAA,EAAehrB,kBAC3BgrB,EAAchrB,mBAAqBlN,KAAKkQ,MAAMxO,OAAOqG,cAAgB,IACpE/H,KAAKkQ,MAAMxR,QAAQkY,QAAQ1V,QAAUlB,KAAKkQ,MAAMxR,QAAQkY,QAAQ1V,MAAM8G,MAAS,EAChFg1B,GAAa9E,MAAAA,OAAa,EAAbA,EAAeM,oBAAqB,EACjDyE,EAAe/mB,EAAUgnB,gBACzBC,EAAWjnB,EAAUknB,YAE3B,OAAIJ,GAAcj1B,EACP,KAGPkI,EAAAA,cAACotB,EAAAA,uBAAsB,CACnB3qB,UAAU,yCACVQ,KAAK,aAAY,aACLgD,EAAUonB,oBACtB1wB,IAAKpB,EAAQY,KACbmxB,IAAI,OACJnrB,MAAO4qB,EACPj1B,aAAcA,EACdy1B,aAAc9xB,EACduxB,aAAcj9B,KAAKy9B,YAAYR,GAC/BE,SAAUn9B,KAAK09B,YAAYP,GAC3BQ,kBAAmBV,EACnBW,cAAeT,EACf7rB,iBAAkBtR,KAAKsR,oBAKlB,KAAAusB,eAAiB,KAA2B,IAAAC,EAAAC,EACzD,MAAM,KAAErd,EAAI,QAAEhiB,EAAO,OAAEgD,GAAW1B,KAAKkQ,MACjC8tB,EAAoBt/B,EAAQkY,QAAQ1V,OAASxC,EAAQkY,QAAQ1V,MAAM+8B,WAAa,QAAU,SAC1FC,EACFl+B,KAAKkQ,MAAMxO,OAAOG,oBAAsBmC,EAAAA,gBAAgBC,YAAYjE,KAAKua,MAAMlb,UACzEW,KAAKua,MAAMlb,SAAS2K,QAAOzJ,GAChByD,EAAAA,gBAAgBC,YAAY1D,EAAQmG,UAAY1G,KAAKm+B,wBAAwB59B,KAExFmgB,EAAKrhB,SAASmL,QACdkW,EAAKrhB,SAASmL,OAAOR,QAAOzJ,GACjByD,EAAAA,gBAAgBC,YAAY1D,EAAQmG,UAAY1G,KAAKm+B,wBAAwB59B,KAG5F69B,EAAkB1d,EAAKwX,cAAc1tB,QAAUkW,EAAKwX,cAAc1tB,OAAOuC,eAAkB,GACjG/M,KAAKq+B,uBAAuBH,GAAiBA,EAAcn7B,OAAQrB,EAAO0xB,qBAC1E,MAAMkL,EAAmBt+B,KAAK2zB,mBAC9B,IAAIx0B,EAAW,UACoB,QAA/B2+B,EAAA99B,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,cAAM,IAAAszB,OAAA,EAA/BA,EAAiCxI,kBAAmBt1B,KAAK8zB,kBACzD30B,EAAW,QACJa,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,SAAyC,QAA/BuzB,EAAA/9B,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,cAAM,IAAAuzB,OAAA,EAA/BA,EAAiCzI,kBAAmBt1B,KAAK8zB,oBACnG30B,EAAW,YAEf,MAAMo/B,EAAuB,CAAC,QAAS,SAAU,eAAgB,UAAW,gBACtEC,EAA0B,CAAC,WAAY,SAAU,eAAgB,UAAW,gBAC5EC,EAAuB,CAAC,eAAgB,UAAW,gBA8FzD,MAAO,CACHC,oBAAqB,CAAEhsB,UAAW,2CAClCisB,wBAAyB,CAAEjsB,UAAW,+CACtCrT,SA/FA6+B,GACAA,EAAc59B,KAAI,CAAC0xB,EAAmD3mB,IACjD,UAAblM,EACI6yB,EAAwBre,SAAW4qB,EAAqB3tB,SAASohB,EAAwBre,SAClF,KAGH1D,EAAAA,cAAC2hB,GAAa,CACVI,wBAAyBA,EACzBf,sBAAuBmN,EACvBrU,sBAAuB/pB,KAAK4+B,uBAC5B7W,6BAA8B/nB,KAAKkQ,MAAMgG,UAAU6R,6BACnDG,6BAA8BloB,KAAKkQ,MAAMgG,UAAUgS,6BACnD9nB,IAAKiL,EACL0nB,iBAAkB/yB,KAAK6+B,kBACvB7rB,WAAYhT,KAAK8+B,iBACjBrU,YAAY,EACZsU,2BAA4BT,GAAoBA,EAAmBjzB,GACnE2yB,kBAAmBA,EACnBt/B,QAASA,EACTkmB,SAAU5kB,KAAKkQ,MAAMrL,GACrB8sB,eAAgB3xB,KAAKkQ,MAAM0V,SAC3BtU,iBAAkBtR,KAAKsR,iBACvB8c,sBAAuBpuB,KAAKkQ,MAAMgG,UAAUkY,sBAC5CG,oBAAqBvuB,KAAKkQ,MAAMgG,UAAUqY,oBAC1CC,qBAAsBxuB,KAAKkQ,MAAMgG,UAAUsY,qBAC3CH,4BAA6BruB,KAAKkQ,MAAMgG,UAAUmY,4BAClDzU,SAAU5Z,KAAK4Z,WAIP,aAAbza,EACH6yB,EAAwBre,SAAW6qB,EAAwB5tB,SAASohB,EAAwBre,SACrF,KAGH1D,EAAAA,cAAC2hB,GAAa,CACVI,wBAAyBA,EACzBf,sBAAuBmN,EACvBrU,sBAAuB/pB,KAAK4+B,uBAC5B7W,6BAA8B/nB,KAAKkQ,MAAMgG,UAAU6R,6BACnDG,6BAA8BloB,KAAKkQ,MAAMgG,UAAUgS,6BACnD9nB,IAAKiL,EACL0nB,iBAAkB/yB,KAAK6+B,kBACvB7rB,WAAYhT,KAAK8+B,iBACjBrU,YAAY,EACZsU,2BAA4BT,GAAoBA,EAAmBjzB,GACnE2yB,kBAAmBA,EACnBt/B,QAASA,EACTkmB,SAAU5kB,KAAKkQ,MAAMrL,GACrB8sB,eAAgB3xB,KAAKkQ,MAAM0V,SAC3BtU,iBAAkBtR,KAAKsR,iBACvB8c,sBAAuBpuB,KAAKkQ,MAAMgG,UAAUkY,sBAC5CG,oBAAqBvuB,KAAKkQ,MAAMgG,UAAUqY,oBAC1CC,qBAAsBxuB,KAAKkQ,MAAMgG,UAAUsY,qBAC3CH,4BAA6BruB,KAAKkQ,MAAMgG,UAAUmY,4BAClDzU,SAAU5Z,KAAK4Z,WAKvBoY,EAAwBre,SAAW8qB,EAAqB7tB,SAASohB,EAAwBre,SAClF,KAGH1D,EAAAA,cAAC2hB,GAAa,CACVI,wBAAyBA,EACzBf,sBAAuBmN,EACvBrU,sBAAuB/pB,KAAK4+B,uBAC5B7W,6BAA8B/nB,KAAKkQ,MAAMgG,UAAU6R,6BACnDG,6BAA8BloB,KAAKkQ,MAAMgG,UAAUgS,6BACnD9nB,IAAKiL,EACL0nB,iBAAkB/yB,KAAK6+B,kBACvB7rB,WAAYhT,KAAK8+B,iBACjBrU,YAAY,EACZsU,2BAA4BT,GAAoBA,EAAmBjzB,GACnE2yB,kBAAmBA,EACnBt/B,QAASA,EACTkmB,SAAU5kB,KAAKkQ,MAAMrL,GACrB8sB,eAAgB3xB,KAAKkQ,MAAM0V,SAC3BtU,iBAAkBtR,KAAKsR,iBACvB8c,sBAAuBpuB,KAAKkQ,MAAMgG,UAAUkY,sBAC5CG,oBAAqBvuB,KAAKkQ,MAAMgG,UAAUqY,oBAC1CC,qBAAsBxuB,KAAKkQ,MAAMgG,UAAUsY,qBAC3CH,4BAA6BruB,KAAKkQ,MAAMgG,UAAUmY,4BAClDzU,SAAU5Z,KAAK4Z,eAmB1B,KAAAukB,wBAA2B59B,IAA8C,IAAAy+B,EAAAC,EAAAC,EAAAC,EACtF,MAAM,8BAAEv/B,GAAkCI,KAAKua,MACzC6kB,EACsE,KAAxC,QAA/BJ,EAAAh/B,KAAKkQ,MAAMwQ,KAAK5c,SAAS0G,cAAM,IAAAw0B,OAAA,EAA/BA,EAAiCt6B,oCAC9BnE,EAAQ6D,YAA4C,QAApC66B,EAAKj/B,KAAKkQ,MAAMwQ,KAAK5c,SAAS0G,cAAM,IAAAy0B,OAAA,EAA/BA,EAAiCv6B,oCACuB,KAAhF9E,MAAAA,OAA6B,EAA7BA,EAA+B+E,+CAC5BpE,EAAQ6D,YAAaxE,MAAAA,OAA6B,EAA7BA,EAA+B+E,8CAEtD06B,EACoE,KAAtC,QAA/BH,EAAAl/B,KAAKkQ,MAAMwQ,KAAK5c,SAAS0G,cAAM,IAAA00B,OAAA,EAA/BA,EAAiCz6B,kCAC9BlE,EAAQ6D,YAA4C,QAApC+6B,EAAKn/B,KAAKkQ,MAAMwQ,KAAK5c,SAAS0G,cAAM,IAAA20B,OAAA,EAA/BA,EAAiC16B,kCACY,KAArE7E,MAAAA,OAA6B,EAA7BA,EAA+ByE,oCAC5B9D,EAAQ6D,YAAaxE,MAAAA,OAA6B,EAA7BA,EAA+ByE,mCAG5D,OACI+6B,GACCp/B,KAAKkQ,MAAMxR,QAAQ+E,IAAI/B,OAAOwE,8BAAgCrD,EAAAA,GAAqCsD,SAChGk5B,GASK,KAAAC,qBAAuBt8B,MACpCk1B,EACAt4B,KAEA,GAAII,KAAKkQ,MAAMxR,QAAQ+E,IAAI/B,OAAOwE,8BAAgCrD,EAAAA,GAAqCsD,QAAS,CAC5G,MAAMo5B,EAAsB,IAAItgC,EAAAA,GAC5Bi5B,EAAc/4B,SACda,KAAKkQ,MAAMxR,QAAQkY,QAAQ7X,YAC3B,CACIgF,OAAO,GAIX,QAGApC,EAGA,IAGA,GAGA,OAGAA,EACA3B,KAAKL,UACLC,GAEE4/B,EAAoC,IAAIh5B,EAAAA,GAC1C+4B,EACA3/B,MAAAA,OAA6B,EAA7BA,EAA+ByE,mCAEnC,OAAOoC,EAAAA,EAAAA,IAA0B+4B,EAAmCx/B,KAAKkQ,MAAMxR,QAAQ8X,eAE3F,OAAOipB,QAAQ15B,aAAQpE,IAGV,KAAA+9B,kBAAoB,KAAsB,IAAAC,EACvD,MAAM,UAAEzpB,EAAS,KAAEwK,EAAI,UAAE5W,GAAc9J,KAAKkQ,OACtC,8BAAEtQ,GAAkCI,KAAKua,MACzCqlB,EAAoBlf,EAAKwX,cAAc1tB,QAAUkW,EAAKwX,cAAc1tB,OAAOuC,eAAkB,GAC7F0G,EAAkD,QAAlCksB,EAAG3/B,KAAKkQ,MAAMwQ,KAAKrhB,SAASmL,cAAM,IAAAm1B,OAAA,EAA/BA,EAAiCh5B,MAAKk5B,GAA6B,WAAnBA,EAAOlsB,UAChF,OACI1D,EAAAA,cAACD,EAAa,CACViC,WAAW,gCACXF,aAAcmE,EAAUnE,aACxBC,MAAOkE,EAAU4pB,mBACjB3tB,eAAgB+D,EAAU/D,eAC1BX,gBAAiBouB,EAEjBnuB,iBAAkBiP,EAAKrhB,SAASmL,OAChC4I,aAAc8C,EAAU9C,aACxBC,uBAAwB6C,EAAU7C,uBAClCvJ,UAAWA,EACXiH,gBAAiB/Q,KAAK+/B,iBACtB/sB,WAAYhT,KAAKggC,iCACjB9tB,gBAAiBgE,EAAUhE,gBAC3BZ,iBAAkBtR,KAAKsR,iBACvB5S,QAASsB,KAAKkQ,MAAMxR,QACpB+F,gCAAiC7E,MAAAA,OAA6B,EAA7BA,EAA+ByE,kCAChEiP,cAAeG,KASV,KAAAwsB,aAAe,KAAkB,IAAAC,EAAAC,EAAAC,EAAAC,EAC9C,MACI3+B,QAAQ,cAAEuU,IAEVjW,KAAKkQ,OACH,UAAEgG,GAAclW,KAAKkQ,MAMrBpM,EAAW9D,KAAKua,MAAM+lB,mBACtBxb,EAAgC,QAAnBob,EAAGlgC,KAAKkQ,MAAMqwB,aAAK,IAAAL,GAAW,QAAXA,EAAhBA,EAAkBM,iBAAS,IAAAN,OAAA,EAA3BA,EAA8B,GAC9Cnb,EAA0B/gB,EAAAA,gBAAgBC,YAAYjE,KAAKkQ,MAAMqwB,MAAMxb,yBACvE/kB,KAAKkQ,MAAMqwB,MAAMxb,wBAAwB,GACzC,KAEA0b,EAA+D,QAAtCN,EAAGngC,KAAKkQ,MAAMwQ,KAAKggB,aAAal2B,cAAM,IAAA21B,OAAA,EAAnCA,EAAqCx5B,MACnE+5B,GAAsC,0DAAtBA,EAAatqB,OAEjC,OACInG,EAAAA,cAACyU,EAAwB,CACrB5gB,SAAUA,EACVpF,QAASsB,KAAKkQ,MAAMxR,QACpBuX,cAAeA,EACfC,UAAWA,EACXyO,WAAY3kB,KAAKkQ,MAAM0V,SACvBhB,SAAU5kB,KAAKkQ,MAAMrL,GACrBggB,qBApBgB,EAqBhBvT,iBAAkBtR,KAAKsR,iBACvBwT,cAAeA,EACfC,wBAAyBA,EACzBtgB,gCAAgE,QAAjC27B,EAAEpgC,KAAKkQ,MAAMwQ,KAAK5c,SAAS0G,cAAM,IAAA41B,OAAA,EAA/BA,EAAiC37B,gCAClEugB,qBAAsByb,MAAAA,OAAyB,EAAzBA,EAA2BE,UACjD1b,gCAAiCjlB,KAAKua,MAAM0K,gCAC5ClB,SAA8B,QAAtBsc,EAAErgC,KAAKkQ,MAAMwQ,KAAK1B,YAAI,IAAAqhB,OAAA,EAApBA,EAAsB71B,UAK3B,KAAAqyB,sBAAyB+D,IACtC,MACIliC,SAAWkY,QAAS9X,EAAc,cAAE0X,IACpCxW,KAAKkQ,MAET,GAAKpR,GAAmB0X,GAAkBxW,KAAKkQ,MAAMwQ,KAAKwX,cAAc1tB,OASxEkC,OAAOm0B,QAAQC,UACX,GACA,IACAv1B,EAAAA,EAAAA,KACIe,EAAAA,EAAAA,IAActM,KAAKkQ,MAAMxR,QAAQkY,cACjCjV,EACA,CAAC3B,KAAK+gC,iCAAiCH,EAAajE,sBACpDh7B,KAGRq/B,EAAAA,EAAAA,KAAY,KACRhhC,KAAKkQ,MAAMwQ,KAAKwX,cAAc1tB,OAAQ0C,kBAAoB,EAC1DlN,KAAKkQ,MAAMwQ,KAAKwX,cAAc1tB,OAAQyC,eAAiB,CACnDhL,QAAS,CAACjC,KAAK+gC,iCAAiCH,EAAajE,yBAtBrE,CAEI,MAAMvoB,EAAQ,mDAAoDtV,EAAqC,GAApB,qBAC9E0X,EAAmC,GAAnB,sCAErBxW,KAAKkQ,MAAMpG,UAAUC,QAAQqK,KAsBpB,KAAA2sB,iCAAoCE,IACjD,MAAM,KAAEvgB,GAAS1gB,KAAKkQ,MAEtB,IAAKwQ,EAAKhX,oBAAoBc,OAC1B,MAAO,GAGX,MAAM02B,EAAsBxgB,EAAKhX,oBAAoBc,OAAO7D,MAAK+C,GACtDA,EAAoBtJ,MAAQ6gC,EAAO7gC,MAG9C,OAAI8gC,EACOA,EAAoBt3B,WAGxB,IAOM,KAAAu3B,uBAAyB,KAA6B,IAAAC,EACnE,MAAMC,EAAmD,QAAvCD,EAAGphC,KAAKkQ,MAAMwQ,KAAKwX,cAAc1tB,cAAM,IAAA42B,OAAA,EAApCA,EAAsCn0B,eAC3D,GAAIjJ,EAAAA,gBAAgBC,YAAYo9B,MAAAA,OAAY,EAAZA,EAAcp/B,SAC1C,OAAOo/B,EAAcp/B,QAAQ,GAGjC,MAAMq/B,GAAet2B,EAAAA,EAAAA,IAA8B,UAAWhL,KAAKkQ,MAAMxR,QAAQkY,SACjF,OAAI5S,EAAAA,gBAAgBC,YAAYq9B,GACrBA,EAAa,QADxB,GAWa,KAAAvF,qBAAuB,KACpC,MAAMryB,EAAsB1J,KAAKkQ,MAAMwQ,KAAKhX,oBAAoBc,OAEhE,IAAKd,EACD,MAAO,GAGX,MAAM63B,EAA4BvhC,KAAKwzB,sBAAsBxpB,QAAOw3B,GAChE93B,EAAoB/C,MAAKiM,GAAQ4uB,EAAmBphC,MAAQwS,EAAKxS,QAGrE,OAAO4D,EAAAA,gBAAgBy9B,YAAYF,IAOtB,KAAA5F,4BAA8B,KAC3C,MAAM+F,EAAmB1hC,KAAKmhC,yBAExBz3B,EAAsB1J,KAAKkQ,MAAMwQ,KAAKhX,oBAAoBc,OAEhE,IAAKk3B,IAAqBh4B,EACtB,OAGJ,MAAMi4B,EAAqBj4B,EAAoB/C,MAC3C66B,GACIA,EAAmB53B,WAAWxC,aAAes6B,EAAiBt6B,YAC9Do6B,EAAmB53B,WAAWvC,eAAiBq6B,EAAiBr6B,eAExE,OAAKs6B,EAIE3hC,KAAKwzB,sBAAsB7sB,MAAKs1B,GAAkBA,EAAe77B,MAAQuhC,EAAmBvhC,WAJnG,GAOa,KAAAy+B,kBAAqBjwB,IAA+D,IAAAgzB,EACjG,MACIljC,SAAWkY,QAAS9X,EAAc,cAAE0X,IACpCxW,KAAKkQ,MAET,IAAKpR,IAAmB0X,IAAkBxW,KAAKkQ,MAAMwQ,KAAKwX,cAAc1tB,OAAQ,CAC5E,MAAM4J,EAAQ,gEACPtV,EAAqC,GAApB,qBAA2B0X,EAAmC,GAAnB,sCAEnE,YADAxW,KAAKkQ,MAAMpG,UAAUC,QAAQqK,GAKjC,MAAMtF,EAA4BH,EAC9BC,GACoC,QAApCgzB,EAAA5hC,KAAKkQ,MAAMwQ,KAAKwX,cAAc1tB,cAAM,IAAAo3B,OAAA,EAApCA,EAAsC70B,gBAAiB,IAG3DL,OAAOm0B,QAAQC,UAAU,GAAI,IAAIv1B,EAAAA,EAAAA,KAAiBe,EAAAA,EAAAA,IAActM,KAAKkQ,MAAMxR,QAAQkY,SAAU9H,KAC7FkyB,EAAAA,EAAAA,KAAY,KACRhhC,KAAKkQ,MAAMwQ,KAAKwX,cAAc1tB,OAAQ0C,kBAAoB,EAC1DlN,KAAKkQ,MAAMwQ,KAAKwX,cAAc1tB,OAAQuC,cAAgB+B,MAI7C,KAAAgwB,iBAAoBlwB,IACjC,GAAI5O,KAAKkQ,MAAMwQ,KAAKwX,cAAc1tB,OAAQ,CACtC,MAAMq3B,EAAwBlzB,EAC1BC,EACA5O,KAAKkQ,MAAMwQ,KAAKwX,cAAc1tB,OAAOuC,eAAiB,IAG1D,OAAOxB,EAAAA,EAAAA,KAAiBe,EAAAA,EAAAA,IAActM,KAAKkQ,MAAMxR,QAAQkY,SAAUirB,GAGvE,OADA7hC,KAAKkQ,MAAMpG,UAAUC,QAAQ,uFACtB,IAGM,KAAAg2B,iBAAoBa,IACjC,MAAM,KAAElgB,EAAI,UAAE5W,GAAc9J,KAAKkQ,MAEjC,IAAKwQ,EAAKwX,cAAc1tB,OAEpB,YADAV,EAAUC,QAAQ,sGAItB,IAAI8E,EAA6B6R,EAAKwX,cAAc1tB,QAAUkW,EAAKwX,cAAc1tB,OAAOuC,eAAkB,GAE1G,GAAK6zB,EAAalwB,SASX,CACH7B,EAA4B,GAG5B,MAAMizB,EAAoB9hC,KAAK88B,2BAA2B7e,SAAWje,KAAK88B,2BAA2B7e,QAAQ/N,MAAMssB,WAC7GuF,EAAkBD,GAAqBnU,SAASC,eAAekU,GACrE9U,YAAW,KACP+U,GAAmBA,EAAgB9U,UACpC,QAjBqB,CACxB,MAAM+U,EAAiBpB,EAAa3vB,cACpC,IAAK+wB,EAED,YADAl4B,EAAUC,QAAQ,gFAGtB8E,EAA4BA,EAA0B7E,QACjDgF,IAA4CR,EAA8BwzB,EAAgBhzB,KAanG,MAAMxD,GAAUc,EAAAA,EAAAA,IAActM,KAAKkQ,MAAMxR,QAAQkY,SACjDlK,OAAOm0B,QAAQC,UAAU,GAAI,IAAIv1B,EAAAA,EAAAA,IAAiBC,EAASqD,IAC3D6R,EAAKwX,cAAc1tB,OAAO0C,kBAAoB,EAC9CwT,EAAKwX,cAAc1tB,OAAOuC,cAAgB8B,GAG7B,KAAAmxB,iCAAmC,CAACnvB,EAAsCoxB,KACvF,MAAM,KAAEvhB,EAAI,UAAE5W,GAAc9J,KAAKkQ,MAC3B1E,GAAUc,EAAAA,EAAAA,IAActM,KAAKkQ,MAAMxR,QAAQkY,SAEjD,IAAK8J,EAAKwX,cAAc1tB,OAEpB,OADAV,EAAUC,QAAQ,yGACXyB,EAAQY,KAGnB,IAAIyC,EAA6B6R,EAAKwX,cAAc1tB,QAAUkW,EAAKwX,cAAc1tB,OAAOuC,eAAkB,GAE1G,GAAKk1B,EASDpzB,EAA4B,OATf,CACb,IAAKgC,EAED,OADA/G,EAAUC,QAAQ,wFACXyB,EAAQY,KAEnByC,EAA4BA,EAA0B7E,QACjDgF,IAA4CR,EAA8BqC,EAAiB7B,KAMpG,OAAOzD,EAAAA,EAAAA,IAAiBC,EAASqD,IAwBpB,KAAAwvB,uBAAyB,CAACH,EAAwBgE,KAC/D,OAAQA,GACJ,KAAK9O,GAAoB+O,IACrBniC,KAAK2zB,mBAAqBuK,EAC1B,MACJ,KAAK9K,GAAoBgP,IACrBpiC,KAAK2zB,mBAAqB,EAC1B,MACJ,KAAKP,GAAoBiP,IACrBriC,KAAK2zB,mBAAqB,EAC1B,MACJ,KAAKP,GAAoBkP,MACrBtiC,KAAK2zB,mBAAqB,EAC1B,MACJ,KAAKP,GAAoBmP,KACrBviC,KAAK2zB,mBAAqB,EAC1B,MACJ,QACI3zB,KAAK2zB,mBAAqB,IASrB,KAAA8J,YAAe+E,GAExBvyB,EAAAA,cAAA,OAAKyC,UAAU,wBACXzC,EAAAA,cAAA,QAAMyC,UAAU,oCAAmC,cAAa,SAChEzC,EAAAA,cAAA,QAAMyC,UAAU,aAAa8vB,IAUxB,KAAA9E,YAAe+E,GAExBxyB,EAAAA,cAAA,OAAKyC,UAAU,wBACXzC,EAAAA,cAAA,QAAMyC,UAAU,aAAa+vB,GAC7BxyB,EAAAA,cAAA,QAAMyC,UAAU,qCAAoC,cAAa,UAzvCzE1S,KAAK0zB,UAAoD,YAAnB,QAArBH,EAAArjB,EAAMxR,QAAQkY,eAAO,IAAA2c,GAAQ,QAARA,EAArBA,EAAuBmP,cAAM,IAAAnP,OAAA,EAA7BA,EAA+BoP,MAAoB,KAAO,KAC3E3iC,KAAK+5B,gBAAkB9pB,EAAAA,YACvBjQ,KAAK88B,2BAA6B7sB,EAAAA,YAClCjQ,KAAKg6B,aAAeh6B,KAAKg6B,aAAa9e,KAAKlb,MAC3CA,KAAK4iC,gBAAkB5iC,KAAK4iC,gBAAgB1nB,KAAKlb,MACjDA,KAAKqN,cAAgB,GACrBrN,KAAKua,MAAQ,CACTqhB,aAAc,CACViH,SAAS,EACThH,qBAAsB77B,KAAKwzB,sBAAsB,IAErDsG,aAAa,EACbz6B,SAAU,GACVO,mCAA+B+B,EAC/B2+B,mBAAoB,GACpBwC,OAAQ,IAEZ,MAAM,mBAAEzX,EAAkB,SAAEJ,EAAQ,SAAEE,EAAQ,gBAAER,GAAoB3qB,KAAKkQ,MAAMgG,UAEzExW,EAASM,KAAKkQ,MAAMxR,QAAQkY,QAAQlX,OACpCoK,EAAY9J,KAAKkQ,MAAMpG,UACvB4iB,EAAqB1sB,KAAKkQ,MAAMgG,UAAU6sB,yBAC1C3V,EAAuBptB,KAAKkQ,MAAMgG,UAAU8sB,wBAClDhjC,KAAK4+B,uBAAyB,CAC1B90B,UAAAA,EACApK,OAAAA,EACA2rB,mBAAAA,EACAJ,SAAAA,EACAE,SAAAA,EACAR,gBAAAA,EACA+B,mBAAAA,EACAU,qBAAAA,GAEJptB,KAAKsR,kBAAmB2xB,EAAAA,EAAAA,oBACpBjjC,KAAKkQ,MAAMxR,QAAQkY,QAAQ+jB,kBAC3B36B,KAAKkQ,MAAMgzB,aACXljC,KAAKkQ,MAAMpG,WAEf9J,KAAK4iC,kBAjGC,eACN,MAA0B,OAAnB5iC,KAAK0zB,WAAyC,OAAnB1zB,KAAK0zB,UA8CpC,uBAAuBh0B,EAAgByjC,GAAyC,IAAAC,EACnF,IAAIC,EAKJ,OAJI3jC,GAAUyjC,GAAoBn/B,EAAAA,gBAAgBC,YAAYk/B,KAC1DE,EAAkBF,EAAiBx8B,MAAKiM,GAAQA,EAAK0wB,SAAU9N,gBAAkB91B,EAAO81B,iBAGtE,QAAtB4N,EAAOC,SAAe,IAAAD,OAAA,EAAfA,EAAiB/zB,KA8CrB,0BAAuB,IAAAk0B,EAC1BvjC,KAAKi0B,YAAa,EACd1nB,EAAAA,GAASC,WAAaE,OAAO82B,mBAC7B92B,OAAO82B,iBAAiB,SAAUxjC,KAAK4iC,iBACvC5iC,KAAK4iC,yBAGH5iC,KAAKyjC,0BAEX,MAAMvL,QAAsBl4B,KAAKkQ,MAAMwQ,KAAKwX,cACtCp0B,QAAiB9D,KAAKkQ,MAAMwQ,KAAK5c,SACjClE,QAAsC8jC,EAAAA,2BAAAA,+BAA0D,CAClGz9B,cAAejG,KAAKkQ,MAAMxR,QAAQ8X,gBAElCxW,KAAKi0B,YACLj0B,KAAKya,SAAS,CAAE7a,8BAAAA,IAGpB,MAAMC,QAAyBG,KAAKs/B,qBAAqBpH,EAAet4B,GAExEI,KAAKi4B,qBAAqBC,EAAep0B,IAGzC6/B,EAAAA,EAAAA,KACI,KAAK,IAAAC,EAAAC,EACD,MAAO,CACwB,QADxBD,EACH1L,EAAcnrB,qBAAa,IAAA62B,OAAA,EAA3BA,EAA6B7gC,OAC7Bm1B,EAAchrB,kBACdlJ,EAAAA,gBAAgBC,YAAwC,QAA7B4/B,EAAC3L,EAAcjrB,sBAAc,IAAA42B,OAAA,EAA5BA,EAA8B5hC,aAGlEe,UAAW,IAAA8gC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAhW,EAAAiW,EACP,MAAMC,QAAyBrkC,KAAKkQ,MAAMwQ,KAAKwX,cACzCz5B,EAAQ,IAAIqE,EAAAA,GACduhC,EAAiBllC,SACjBa,KAAKkQ,MAAMxR,QAAQkY,QAAQ7X,YAC3B,CACIH,OAAQ,CACJC,IAAKmB,KAAKkQ,MAAMxO,OAAOqG,aACvBE,KAAM2S,KAAKE,IAAIupB,EAAiBl3B,UAA8C,QAAtC22B,EAAIO,EAAiBn3B,yBAAiB,IAAA42B,EAAAA,EAAI,GAAI,IAE1F//B,OAAO,EACP7D,QAAwC,QAAjC6jC,EAAEM,EAAiBp3B,sBAAc,IAAA82B,EAAAA,EAAI,IAElB,QAD7BC,EACDK,EAAiBt3B,qBAAa,IAAAi3B,EAAAA,EAAI,KAEhChkC,KAAKkQ,MAAMxR,QAAQkY,QAAQ3V,UAAUud,UAAY,GAGnB,QAAhCylB,EAAAjkC,KAAKkQ,MAAMxR,QAAQkY,QAAQ1V,aAAK,IAAA+iC,GAAhCA,EAAkC3hC,EAC5BtC,KAAKkQ,MAAMxR,QAAQkY,QAAQ1V,MAAMoB,EACjCJ,KAAKO,UAAU,CACXC,UAA2C,QAAlCwhC,EAAElkC,KAAKkQ,MAAMxR,QAAQkY,QAAQ1V,aAAK,IAAAgjC,OAAA,EAAhCA,EAAkC1hC,UAC7CG,eAAgD,QAAlCwhC,EAAEnkC,KAAKkQ,MAAMxR,QAAQkY,QAAQ1V,aAAK,IAAAijC,OAAA,EAAhCA,EAAkC5hC,mBAGhD,QAAX4rB,EAACnuB,KAAKkQ,aAAK,IAAAie,GAAQ,QAARA,EAAVA,EAAYzsB,cAAM,IAAAysB,IAAlBA,EAAoB3uB,mBACtBQ,KAAKkQ,MAAMxO,OAAOG,mBAClB7B,KAAKkQ,MAAMxR,QAAQkY,QAAQlX,OAC3BM,KAAKL,UACLC,EACAC,GAGEykC,QAAuBC,EAAAA,EAAAA,IAAsB9lC,EAAOuB,KAAKkQ,MAAMxR,QAAQ8X,eAC7E6tB,EAAiB7L,kBAAoB8L,EAAevgC,MACpDsgC,EAAiBr3B,eAAiBs3B,EAAexgC,eAC3C9D,KAAKyjC,0BAGPzjC,KAAKkQ,MAAMxO,OAAO8iC,+BAC6B,QADAJ,EAC/CpkC,KAAKkQ,MAAMxR,QAAQ8X,cAAc1X,sBAAc,IAAAslC,GAAM,QAANA,EAA/CA,EAAiDK,YAAI,IAAAL,GAArDA,EAAuDM,iBAGvD1kC,KAAKi5B,kBAGT,MAAMv6B,EAAUsB,KAAKkQ,MAAMxR,QACrBimC,EAAmCjmC,EAAQ+E,IAAI/B,OAAOkjC,wBACtDC,EAA8BnmC,EAAQ+E,IAAI/B,OAAOojC,uBAYvD,GAVI9gC,EAAAA,gBAAgBC,YAAY0gC,KAC3BA,EAAiC/zB,SAASm0B,EAAAA,eAAeC,OAC1DhhC,EAAAA,gBAAgBC,YAAY4gC,KAC3BA,EAA4Bj0B,SAASm0B,EAAAA,eAAeC,OACrDhlC,KAAKkQ,MAAMxO,OAAOlC,mBAGlBQ,KAAKy4B,uCAGLz4B,KAAKkQ,MAAMxO,OAAOG,mBAAoB,KAAAojC,EAAAC,EAAAC,EAAAC,EAAAC,EACtC,MAAM9+B,EAAe,IAAIoE,EAAAA,GACrB05B,EAAiBllC,SACjBa,KAAKkQ,MAAMxR,QAAQkY,QAAQ7X,YAC3B,CACIH,OAAQ,CACJC,IAAKmB,KAAKkQ,MAAMxO,OAAOqG,aACvBE,KAAM2S,KAAKE,IACPupB,EAAiBl3B,UAA8C,QAAtC83B,EAAIZ,EAAiBn3B,yBAAiB,IAAA+3B,EAAAA,EAAIjlC,KAAK4zB,mBACxE5zB,KAAK4zB,oBAGb7vB,OAAO,EACP7D,QAAwC,QAAjCglC,EAAEb,EAAiBp3B,sBAAc,IAAAi4B,EAAAA,EAAI,IAElB,QAD7BC,EACDd,EAAiBt3B,qBAAa,IAAAo4B,EAAAA,EAAI,KAEhCnlC,KAAKkQ,MAAMxR,QAAQkY,QAAQ3V,UAAUud,UAAY,GACnB,QAAhC4mB,EAAAplC,KAAKkQ,MAAMxR,QAAQkY,QAAQ1V,aAAK,IAAAkkC,GAAhCA,EAAkC9iC,EAC5BtC,KAAKkQ,MAAMxR,QAAQkY,QAAQ1V,MAAMoB,EACD,QADE+iC,EAClCrlC,KAAKkQ,MAAMxR,QAAQkY,QAAQ1V,aAAK,IAAAmkC,OAAA,EAAhCA,EAAkC7iC,WACxC,EACAxC,KAAKkQ,MAAMxO,OAAOG,wBAClBF,EACA3B,KAAKL,UACLC,EACAC,GAGER,QAAiBimC,EAAAA,EAAAA,IAA4B/+B,EAAcvG,KAAKkQ,MAAMxR,QAAQ8X,eACpFxW,KAAKya,SAAS,CAAEpb,SAAAA,QAMxBW,KAAKkQ,MAAMxO,OAAO8iC,+BAE6B,QAD/CjB,EACAvjC,KAAKkQ,MAAMxR,QAAQ8X,cAAc1X,sBAAc,IAAAykC,GAAM,QAANA,EAA/CA,EAAiDkB,YAAI,IAAAlB,GAArDA,EAAuDmB,iBAGvD1kC,KAAKi5B,kBAINsM,uBACHvlC,KAAKi0B,YAAa,EACd1nB,EAAAA,GAASC,WAAaE,OAAO84B,qBAC7B94B,OAAO84B,oBAAoB,SAAUxlC,KAAK4iC,iBAI3C9wB,SAAM,IAAA2C,EAAAgxB,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACT,MACIxkC,QAAQ,cAAEuU,EAAa,UAAEvD,GAAW,UACpCwD,EACAwK,MAAM,cAAEwX,EAAep0B,SAAUqiC,EAAiB,eAAE/4B,IACpDpN,KAAKkQ,OAEJlQ,KAAKg0B,wBAA0BkE,EAAc1tB,QAAU27B,EAAkB37B,SAC1ExK,KAAKi4B,qBAAqBC,EAAc1tB,OAAQ27B,EAAkB37B,QAClExK,KAAKg0B,wBAAyB,GAGlC,MAAMlwB,EAAW9D,KAAKua,MAAM+lB,mBACtB8F,EAA6E,QAAhE3xB,EAAuC,QAAvCgxB,EAAuB,QAAvBC,EAAGxN,EAAc1tB,cAAM,IAAAk7B,OAAA,EAApBA,EAAsBt4B,sBAAc,IAAAq4B,EAAAA,EAAIr4B,EAAe5C,cAAM,IAAAiK,EAAAA,EAAI,KACvF,IAAI4xB,EAAY,GACXriC,EAAAA,gBAAgBC,YAAYH,KAC7BuiC,EAA+B,aAAnBrmC,KAAKyzB,UAA2Bvd,EAAUowB,2BAA6BpwB,EAAUqwB,0BAEjG,MAAMC,EAAoBxmC,KAAKigC,eACzBwG,EACFx2B,EAAAA,cAAC6F,EAAuB,CACpBE,QAASowB,EACT1nC,QAASsB,KAAKkQ,MAAMxR,QACpBuX,cAAeA,EACfC,UAAWA,EACXyO,WAAY3kB,KAAKkQ,MAAM0V,SACvBhB,SAAU5kB,KAAKkQ,MAAMrL,GACrByM,iBAAkBtR,KAAKsR,iBACvB/O,eAAgD,QAAlCojC,EAAE3lC,KAAKkQ,MAAMxR,QAAQkY,QAAQ1V,aAAK,IAAAykC,OAAA,EAAhCA,EAAkCpjC,iBAI1D,IAAIpD,EAAW,UACoB,QAA/BymC,EAAA5lC,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,cAAM,IAAAo7B,OAAA,EAA/BA,EAAiCtQ,kBAAmBt1B,KAAK8zB,kBACzD30B,EAAW,SAC2B,QAA/B0mC,EAAA7lC,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,cAAM,IAAAq7B,OAAA,EAA/BA,EAAiCvQ,kBAAmBt1B,KAAK6zB,qBAChE10B,EAAW,kBACJa,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,SAAyC,QAA/Bs7B,EAAA9lC,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,cAAM,IAAAs7B,OAAA,EAA/BA,EAAiCxQ,kBAAmBt1B,KAAK8zB,oBACnG30B,EAAW,YAEf,MAAMunC,EAA8B3mC,GAAAA,GAAA,GAC7BC,KAAKkQ,OAAK,IACbpM,SAAU0iC,EACVG,eAAgB3mC,KAAKi6B,oBAAoB96B,GACzC+7B,mBAAoBl7B,KAAKkQ,MAAMxO,OAAOklC,kBAAoB5mC,KAAKi7B,wBAC/D4L,WAAY7mC,KAAK69B,iBACjBnrB,UAAWC,GAAAA,CAAW,6BAA8BD,GACpD2gB,sBAAuB,CACnByT,YAAa9mC,KAAKkQ,MAClBwC,UAAWC,GAAAA,CAAW,6BAA8BD,IAExDq0B,cAA2E,KAAxB,QAApChB,EAAA/lC,KAAKkQ,MAAMwQ,KAAKwX,cAAc1tB,cAAM,IAAAu7B,OAAA,EAApCA,EAAsCvN,mBAA0Bx4B,KAAKy7B,sBAAwB,KAC5GuL,WAAYhnC,KAAK+8B,iBACjBkK,kBAAmB,CAAEv0B,UAAW,wCAChCw0B,wBAAyB,CAAEx0B,UAAW,+CAEtCy0B,iCAAkC,CAAEz0B,UAAW,sDAC/C00B,cAAepnC,KAAK0/B,oBACpB2H,YACgE,KAAxB,QAApCrB,EAAAhmC,KAAKkQ,MAAMwQ,KAAKwX,cAAc1tB,cAAM,IAAAw7B,OAAA,EAApCA,EAAsCxN,mBAClCvoB,EAAAA,cAAC8H,EAAW,CACRrD,KAAMwB,EAAU0C,WAChBd,UAAW5B,EAAU0C,WACrB0uB,SAAUtnC,KAAK+5B,gBACf9mB,QAASjT,KAAKg6B,aACdn1B,GAAG,wBAEP,KACR0iC,kBAAmBvnC,KAAKs5B,wBACxB1f,SAAU5Z,KAAK4Z,SACf4tB,aAAcnB,GAAap2B,EAAAA,cAACuE,EAAY,CAACE,KAAM2xB,IAC/CoB,uBAAwB,CAAE/0B,UAAW,4BACrCg1B,mBAAoBtB,EAAgBK,EAAmB,KACvDp5B,cAAerN,KAAKqN,cACpB4X,gCAAiCjlB,KAAKua,MAAM0K,gCAC5C0iB,mBAAoB3nC,KAAKk0B,2BACzB8G,kBACIh7B,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,SAAyC,QAA/By7B,EAAAjmC,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,cAAM,IAAAy7B,OAAA,EAA/BA,EAAiC3Q,kBAAmBt1B,KAAK8zB,mBAGhG8T,aAA4C,QAA/B1B,EAAAlmC,KAAKkQ,MAAMwQ,KAAKphB,SAASkL,cAAM,IAAA07B,OAAA,EAA/BA,EAAiC5Q,kBAAmBt1B,KAAK8zB,kBACtE30B,SAAAA,IAEJ,OAAOa,KAAKkQ,MAAM23B,WAAWnB,GAG1B,gCACH,MAAM5iC,EAAY9D,KAAKkQ,MAAMwQ,KAAKwX,cAAc1tB,QAAUxK,KAAKkQ,MAAMwQ,KAAKwX,cAAc1tB,OAAOwC,gBAAmB,GAC5G86B,QAAsB9nC,KAAK+nC,qBAC3BrnB,EAAO5c,IAAYA,MAAAA,OAAQ,EAARA,EAAUf,QAAS,EAAIe,EAASkG,QAAOgM,IAAY8xB,EAAcl3B,SAASoF,EAAQ5R,YAAa,GACxHpE,KAAKya,SAAS,CAAE6lB,mBAAoB5f,IAGjC,2BACH,IAAIiB,EAAW,GACf,MAAMqmB,EAAUC,aAAaC,QAAQ,WAErC,GAAKF,EAEE,CACH,MAAMp1B,EAAO1Q,KAAKC,MAAM6lC,GAClBG,EAAMC,KAAKD,MACjBxmB,EAAW/O,EAAKvS,MAEZ8nC,EAAMv1B,EAAKy1B,SACXJ,aAAaK,WAAW,WACxB3mB,QAAiB3hB,KAAKuoC,0BAR1B5mB,QAAiB3hB,KAAKuoC,oBAW1B,OAAO5mB,EAGJ,0BACH,MAIMjgB,EAAS,CACXwf,OAAQ,MACRC,cAAeC,EAAAA,EACfxU,IAAK,qCACLyU,QAAS,IAGb,OATcJ,EAAQ,IAUjBrK,QAAQlV,GACR+H,MAAMkY,IAAiB,IAAAC,EAAAC,EACpB,GAAIF,MAAAA,GAAc,QAANC,EAARD,EAAUjB,YAAI,IAAAkB,GAAdA,EAAgB4mB,wBAAyB7mB,MAAAA,GAAc,QAANE,EAARF,EAAUjB,YAAI,IAAAmB,GAAuB,QAAvBA,EAAdA,EAAgB2mB,6BAAqB,IAAA3mB,OAAA,EAArCA,EAAuC9e,QAAS,EAAG,KAAAgf,EAAA0mB,EAC5F,MAAMC,EAAkBN,KAAKD,MAAQQ,IAC/B/1B,EAAO,CACTvS,MAAOshB,MAAAA,GAAc,QAANI,EAARJ,EAAUjB,YAAI,IAAAqB,OAAA,EAAdA,EAAgBymB,sBACvBH,OAAQK,GAGZ,OADAT,aAAaW,QAAQ,UAAW1mC,KAAKO,UAAUmQ,IACxC+O,MAAAA,GAAc,QAAN8mB,EAAR9mB,EAAUjB,YAAI,IAAA+nB,OAAA,EAAdA,EAAgBD,0BAG9BpmB,OAAOhO,IACJxO,QAAQC,IAAIuO,MAs3BhBy0B,eACJ,OAAIt8B,EAAAA,GAASC,WACFoN,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAYC,QAASrb,QAASsB,KAAKkQ,MAAMxR,QAAQkY,WAEzEgD,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAYgvB,SAAUpqC,QAASsB,KAAKkQ,MAAMxR,QAAQkY,UAGzEojB,eACJh6B,KAAKya,SAAS,CACVqf,aAAc95B,KAAKua,MAAMuf,cAIzB8I,kBACJ5iC,KAAK0zB,UAAY1zB,KAAK6oC,eAElB7oC,KAAKua,MAAMuf,cAAgB95B,KAAK4Z,UAChC5Z,KAAKg6B,kBAnwCH1sB,EAAAA,EAAAA,IAAA,CAATgH,EAAAA,IAAQ,+BAqBThH,EAAAA,EAAAA,IAAA,CADCC,EAAAA,IAAU,iCAxBM8lB,GAAqBC,IAAAhmB,EAAAA,EAAAA,IAAA,CADzCiH,EAAAA,IACoB8e,kGC3JrB,MA4FM0V,EAAgBA,CAClB74B,EACA84B,EACAjC,KAEA,MAAM,SAAE1nC,EAAQ,oBAAEq/B,EAAmB,wBAAEC,GAA4BzuB,EACnE,OAAI7Q,EAEI4Q,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK4rB,GACN1uB,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK2rB,GACNzuB,EAAAA,cAAA,OAAKyC,UAAU,6CACVq0B,IAAkBiC,GAAoBC,EAAWlC,IAErD1nC,EAASiB,KAAI,CAAC4oC,EAAS79B,IACpB4E,EAAAA,cAACA,EAAAA,SAAc,CAAC7P,IAAKiL,GAAQ69B,OAM1C,MAGLD,EAAaA,CAAC/4B,EAAyB84B,KACzC,MAAM,iBAAE9M,EAAgB,eAAEC,GAAmBjsB,EAC7C,OAAIisB,IAAmB6M,EACZ/4B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKmpB,GAAmBC,GAEjC,MAGLgN,EAA2Bj5B,IAC7B,MAAM,2BAAEirB,EAA0B,sBAAEE,EAAqB,2BAAEG,GAA+BtrB,EAC1F,OAAImrB,EAEIprB,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKooB,GACLE,EAAsB/6B,KAAI,CAAChB,EAAU+L,IAClC4E,EAAAA,cAACA,EAAAA,SAAc,CAAC7P,IAAKiL,GAChB/L,EACA+7B,GAAyBA,EAAsBhwB,EAAQ,IAAMmwB,MAO3E,MAGL4N,EAAel5B,IACjB,MAAM,MAAE0H,EAAK,eAAE8iB,GAAmBxqB,EAClC,OAAI0H,EAEI3H,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK2nB,GACNzqB,EAAAA,cAAA,UACK2H,EAAMgjB,YACNhjB,EAAMkjB,YAKhB,MAGLuO,EAAoBn5B,IACtB,MAAM,MAAE0H,EAAK,eAAE8iB,GAAmBxqB,EAClC,OAAI0H,EAEI3H,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK2nB,GACNzqB,EAAAA,cAAA,UAAK2H,EAAMmjB,aAIhB,MAGX,EAxK6E7qB,IAAQ,IAAAo5B,EACjF,MAAM,sBACFjW,EAAqB,SACrBvvB,EAAQ,WACRkjC,EAAU,kBACVC,EAAiB,wBACjBC,EAAuB,cACvBE,EAAa,eAIbT,EAAc,WACdE,EAAU,kBACV3L,EAAiB,cACjB6L,EAAa,qBACbwC,EAAoB,iCACpBpC,EAAgC,aAChCK,EAAY,uBACZC,EAAsB,mBACtBC,GAEAx3B,EACE84B,EAAmE,QAAnDM,EAAGp5B,EAAMxR,QAAQ8X,cAAc1X,eAAeoC,aAAK,IAAAooC,OAAA,EAAhDA,EAAkD/mC,eAmB3E,OACI0N,EAAAA,cAACu5B,EAAAA,OAAM12B,OAAAC,OAAA,GAAKsgB,GACRpjB,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKw2B,GACLrO,GAAqBiO,EAAwBjO,GAC7CyL,GAAkB0C,EAAiB1C,IAExC12B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKo0B,GACLN,GAAckC,EAAclC,EAAYmC,EAAkBjC,GAC3D92B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKm0B,GACLP,GAAkByC,EAAYzC,GAC9BS,EACAL,IAAkBiC,GAAoBC,EAAWlC,GAClD92B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK00B,GAAyBC,GACnCz3B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKk0B,GACLO,EACA1jC,GAEJkjC,wFCzDrB,MA8FMyC,EAA0BA,CAC5BC,EACA7C,EACA1K,EACA6M,IAEO/4B,EAAAA,aACHy5B,EAAWnQ,MACX,GACAmQ,EAAWlQ,YACXmQ,EAAgBD,EAAY7C,EAAY1K,EAAgB6M,GACxDU,EAAWjQ,aAIbkQ,EAAkBA,CACpBz5B,EACA22B,EACA1K,EACA6M,IAEI7M,EACOlsB,EAAAA,aAAmBC,EAAMwpB,UAAW,GAAIuP,EAAW9M,EAAgB6M,GAAmBD,EAAclC,IAExG,KAGLkC,EAAiB74B,IACnB,MAAM,SAAE7Q,EAAQ,oBAAEq/B,EAAmB,wBAAEC,GAA4BzuB,EACnE,OAAI7Q,EAEI4Q,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK4rB,GACN1uB,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK2rB,GACLr/B,EAASiB,KAAI,CAAC4oC,EAAS79B,IACpB4E,EAAAA,cAACA,EAAAA,SAAc,CAAC7P,IAAKiL,GAAQ69B,OAM1C,MAGLD,EAAaA,CAAC/4B,EAAyB84B,KACzC,MAAM,iBAAE9M,EAAgB,eAAEC,GAAmBjsB,EAC7C,OAAIisB,IAAmB6M,EACZ/4B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKmpB,GAAmBC,GAEjC,MAqBLiN,EAAel5B,IACjB,MAAM,MAAE0H,EAAK,eAAE8iB,EAAc,eAAEM,EAAc,SAAE77B,GAAa+Q,EAE5D,OAAI0H,EAEQ3H,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK2nB,GACQ,oBAAbv7B,EACG8Q,EAAAA,cAAA,UACIA,EAAAA,cAAA,QAAMyC,UAAU,2CAAyC,mBAG7DzC,EAAAA,cAAA,WACM+qB,GAAkBpjB,EAAMgjB,YACzBhjB,EAAMkjB,WACLE,GACF/qB,EAAAA,cAAAA,EAAAA,SAAA,SACM2H,EAAMmjB,WAAU,OAQvC,MAGX,EA9L6E7qB,IAAQ,IAAAo5B,EACjF,MAAM,sBACFjW,EAAqB,SACrBvvB,EAAQ,WACRkjC,EAAU,kBACVC,EAAiB,wBACjBC,EAAuB,cACvBE,EAAa,SACbxtB,EAAQ,YACRytB,EAAW,kBACXE,EAAiB,eACjBZ,EAAc,WACdE,EAAU,cAEVE,EAAa,iCAEbI,EAAgC,aAChCK,EAAY,uBACZC,EAAsB,mBACtBC,EAAkB,mBAClBC,GACAz3B,EAEE84B,EAAmE,QAAnDM,EAAGp5B,EAAMxR,QAAQ8X,cAAc1X,eAAeoC,aAAK,IAAAooC,OAAA,EAAhDA,EAAkD/mC,eAC3E,OAAIqX,EAEI3J,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,OAAKyC,UAAU,iCACVi1B,GAEL13B,EAAAA,cAAA,OAAKyC,UAAU,wBACV20B,EACAoC,EAAwBlC,EAAmBV,EAAYE,EAAeiC,GACvE/4B,EAAAA,cAACu5B,EAAAA,OAAM12B,OAAAC,OAAA,GAAKsgB,GAERpjB,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKo0B,GACNl3B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKm0B,GACNj3B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK00B,GAAyBC,GACnCz3B,EAAAA,cAAA,OAAKyC,UAAU,iDACVi0B,GAAkByC,EAAYzC,GAC9BS,GAEDn3B,EAAAA,cAAA,OAAKyC,UAAU,6CACVq0B,IAAkBiC,GAAoBC,EAAWlC,IAE1D92B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKk0B,GACLO,EACA1jC,GAEJkjC,OASzB/2B,EAAAA,cAAAA,EAAAA,SAAA,KACAA,EAAAA,cAAA,OAAKyC,UAAU,iCACVi1B,GAED13B,EAAAA,cAAA,OAAKyC,UAAU,wBACfzC,EAAAA,cAACu5B,EAAAA,OAAM12B,OAAAC,OAAA,GAAKsgB,GAGPmU,EAAcv3B,EAAAA,cAAA,OAAKyC,UAAU,oBAAkB,IAAGi0B,GAAkByC,EAAYzC,GAAiBa,GAAsBv3B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKo0B,GAC7HN,GAAckC,EAAclC,GAC7B52B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKm0B,GACNj3B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK00B,GAAyBC,GACnCz3B,EAAAA,cAAA,OAAKyC,UAAU,iDACVi0B,GAAkByC,EAAYzC,GAC9BS,GAELn3B,EAAAA,cAAA,OAAKyC,UAAU,6CACVq0B,IAAkBiC,GAAoBC,EAAWlC,IAEtD92B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKk0B,GACLnjC,GAEJkjC,0nBCnGzB,MAAM4C,EAAU,CAAEC,QAAS,GAAIC,YAAa,IAmBlCC,EAA8BA,CAACC,EAAqBC,KAUlD,GADAL,EAAQE,YAAYE,GAAuBC,GACtCL,EAAQE,YAAYE,GAAqBE,QAC1C,MAAM,IAAItnC,MAAM,oBAAsBonC,EAAsB,mCAEhEJ,EAAQE,YAAYE,GAAqBE,QAAQC,UAAUC,eAAiBJ,EACxEJ,EAAQE,YAAYE,GAAqBE,QAAQC,UAAUtlC,KAC3D+kC,EAAQE,YAAYF,EAAQE,YAAYE,GAAqBE,QAAQC,UAAUtlC,IAAMmlC,IAMhGJ,EAAQC,QAAQ,2BAA6B,CAC1CQ,EAAGA,IAAMppB,EAAQ,MACjBqpB,MAAO,kBACPC,GAAI,CAAC,CAACC,KAAK,OAASC,KAAK,mFAAoFC,MAAO,GAAG,CAACF,KAAK,aAAeC,KAAK,mCAAoCC,MAAO,GAAG,CAACF,KAAK,WAAaC,KAAK,0EAA2EC,MAAO,GAAG,CAACF,KAAK,oBAAsBC,KAAK,oFAAqFC,MAAO,GAAG,CAACF,KAAK,iBAAmBC,KAAK,0EAA2EC,MAAO,GAAG,CAACF,KAAK,eAAiBC,KAAK,uEAAwEC,MAAO,GAAG,CAACF,KAAK,gBAAkBC,KAAK,kDAAmDC,MAAO,GAAG,CAACF,KAAK,WAAaC,KAAK,0EAA2EC,MAAO,GAAG,CAACF,KAAK,WAAaC,KAAK,sEAAuEC,MAAO,GAAG,CAACF,KAAK,sBAAwBC,KAAK,0EAA2EC,MAAO,IAEljCC,KAAK,EACLC,GAAI,YACJC,EAAG,0BACHC,EAAG,YAEHC,IAAK,GAGL5wB,GAAI,uCAOA4vB,EAF4B,0EACX9oB,EAAQ,MAQzB8oB,EAF4B,oFACX9oB,EAAQ,MAQzB8oB,EAF4B,uEACX9oB,EAAQ,KAQzB8oB,EAF4B,0EACX9oB,EAAQ,KAQzB8oB,EAF4B,mFACX9oB,EAAQ,MAQzB8oB,EAF4B,mCACX9oB,EAAQ,MAQzB8oB,EAF4B,0EACX9oB,EAAQ,MAQzB8oB,EAF4B,0EACX9oB,EAAQ,MAQzB8oB,EAF4B,sEACX9oB,EAAQ,MAQzB8oB,EAF4B,kDACX9oB,EAAQ,OAMjCvU,OAAOs+B,aAAet+B,OAAOs+B,cAAgB,GAC7Ct+B,OAAOs+B,aAAanB,QAAO9pC,EAAAA,EAAA,GACpB2M,OAAOs+B,aAAanB,SAAW,IAC/BD,EAAQC,SAGXn9B,OAAOs+B,aAAalB,YAAW/pC,EAAAA,EAAA,GAC5B2M,OAAOs+B,aAAalB,aAAe,IACnCF,EAAQE,aAEY,MAAMmB,EAAiB,GAC9BA,EAAe,+EAAiF,CACxGZ,EAAGA,IAAMppB,EAAQ,MACjBiqB,GAAI,+CAEpBD,EAAe,yEAA2E,CAC1EZ,EAAGA,IAAMppB,EAAQ,MACjBiqB,GAAI,+CAEpBD,EAAe,iGAAmG,CAClGZ,EAAGA,IAAMppB,EAAQ,MACjBiqB,GAAI,0EAEpBD,EAAe,8GAAgH,CAC/GZ,EAAGA,IAAMppB,EAAQ,MACjBiqB,GAAI,8EAEpBD,EAAe,0GAA4G,CAC3GZ,EAAGA,IAAMppB,EAAQ,MACjBiqB,GAAI,6EAEpBx+B,OAAOs+B,aAAet+B,OAAOs+B,cAAgB,GAC7Ct+B,OAAOs+B,aAAaC,eAAclrC,EAAAA,EAAA,GACP2M,OAAOs+B,aAAaC,gBAAkB,IACtCA,qFClJ3B,MAgEMxB,EAA0BA,CAC5BC,EACA7C,EACA1K,EACA6M,IAEO/4B,EAAAA,aACHy5B,EAAWnQ,MACX,GACAmQ,EAAWlQ,YACXmQ,EAAgBD,EAAY7C,EAAY1K,EAAgB6M,GACxDU,EAAWjQ,aAIbkQ,EAAkBA,CACpBz5B,EACA22B,EACA1K,EACA6M,IAEI7M,EACOlsB,EAAAA,aAAmBC,EAAMwpB,UAAW,GAAIuP,EAAW9M,EAAgB6M,GAAmBD,EAAclC,IAExG,KAGLkC,EAAiB74B,IACnB,MAAM,SAAE7Q,EAAQ,oBAAEq/B,EAAmB,wBAAEC,GAA4BzuB,EACnE,OAAI7Q,EAEI4Q,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK4rB,GACN1uB,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK2rB,GACLr/B,EAASiB,KAAI,CAAC4oC,EAAS79B,IACpB4E,EAAAA,cAACA,EAAAA,SAAc,CAAC7P,IAAKiL,GAAQ69B,OAM1C,MAGLD,EAAaA,CAAC/4B,EAAyB84B,KACzC,MAAM,iBAAE9M,EAAgB,eAAEC,GAAmBjsB,EAC7C,OAAIisB,IAAmB6M,EACZ/4B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKmpB,GAAmBC,GAEjC,MAGLgN,EAA2Bj5B,IAC7B,MAAM,2BAAEirB,EAA0B,sBAAEE,EAAqB,2BAAEG,GAA+BtrB,EAC1F,OAAImrB,EAEIprB,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKooB,GACLE,EAAsB/6B,KAAI,CAAChB,EAAU+L,IAClC4E,EAAAA,cAACA,EAAAA,SAAc,CAAC7P,IAAKiL,GAChB/L,EACA+7B,GAAyBA,EAAsBhwB,EAAQ,IAAMmwB,MAO3E,MAGL4N,EAAel5B,IACjB,MAAM,MAAE0H,EAAK,eAAE8iB,GAAmBxqB,EAClC,OAAI0H,EAEI3H,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK2nB,GACNzqB,EAAAA,cAAA,UACK2H,EAAMgjB,YACNhjB,EAAMkjB,UAAS,IAAGljB,EAAMmjB,WAAU,MAK5C,MAGX,EApJ6E7qB,IAAQ,IAAAo5B,EACjF,MAAM,sBACFjW,EAAqB,SACrBvvB,EAAQ,WACRkjC,EAAU,kBACVC,EAAiB,wBACjBC,EAAuB,cACvBE,EAAa,SACbxtB,EAAQ,YACRytB,EAAW,kBACXE,EAAiB,eACjBZ,EAAc,WACdE,EAAU,kBACV3L,EAAiB,cACjB6L,EAAa,qBACbwC,EAAoB,iCACpBpC,EAAgC,aAChCK,EAAY,uBACZC,EAAsB,mBACtBC,GACAx3B,EACE84B,EAAmE,QAAnDM,EAAGp5B,EAAMxR,QAAQ8X,cAAc1X,eAAeoC,aAAK,IAAAooC,OAAA,EAAhDA,EAAkD/mC,eAC3E,OAAIqX,EAEI3J,EAAAA,cAACu5B,EAAAA,OAAM12B,OAAAC,OAAA,GAAKsgB,GACP6H,GAAqBiO,EAAwBjO,GAC7CkO,EAAYzC,GACZS,EACAC,EACAoC,EAAwBlC,EAAmBV,EAAYE,EAAeiC,GACvE/4B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK00B,GAAyBC,GACnCz3B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKk0B,GACLO,EACA1jC,GAEJkjC,GAKT/2B,EAAAA,cAACu5B,EAAAA,OAAM12B,OAAAC,OAAA,GAAKsgB,GACP6H,GAAqBjrB,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKw2B,GAAuBJ,EAAwBjO,IAC/EjrB,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKo0B,GACLN,GAAckC,EAAclC,GAC7B52B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKm0B,GACNj3B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK00B,GAAyBC,GACnCz3B,EAAAA,cAAA,OAAKyC,UAAU,iDACVi0B,GAAkByC,EAAYzC,GAC9BS,GAELn3B,EAAAA,cAAA,OAAKyC,UAAU,6CACVq0B,IAAkBiC,GAAoBC,EAAWlC,IAEtD92B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKk0B,GACLO,EACA1jC,GAEJkjC,wFCxDrB,MA+DMyC,EAA0BA,CAC5BC,EACA7C,EACA1K,EACA6M,IAEO/4B,EAAAA,aACHy5B,EAAWnQ,MACX,GACAmQ,EAAWlQ,YACXmQ,EAAgBD,EAAY7C,EAAY1K,EAAgB6M,GACxDU,EAAWjQ,aAIbkQ,EAAkBA,CACpBz5B,EACA22B,EACA1K,EACA6M,IAEI7M,EACOlsB,EAAAA,aAAmBC,EAAMwpB,UAAW,GAAIuP,EAAW9M,EAAgB6M,GAAmBD,EAAclC,IAExG,KAGLkC,EAAiB74B,IACnB,MAAM,SAAE7Q,EAAQ,oBAAEq/B,EAAmB,wBAAEC,GAA4BzuB,EACnE,OAAI7Q,EAEI4Q,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK4rB,GACN1uB,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK2rB,GACLr/B,EAASiB,KAAI,CAAC4oC,EAAS79B,IACpB4E,EAAAA,cAACA,EAAAA,SAAc,CAAC7P,IAAKiL,GAAQ69B,OAM1C,MAGLD,EAAaA,CAAC/4B,EAAyB84B,KACzC,MAAM,iBAAE9M,EAAgB,eAAEC,GAAmBjsB,EAC7C,OAAIisB,IAAmB6M,EACZ/4B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKmpB,GAAmBC,GAEjC,MAGLgN,EAA2Bj5B,IAC7B,MAAM,2BAAEirB,EAA0B,sBAAEE,EAAqB,2BAAEG,GAA+BtrB,EAC1F,OAAImrB,EAEIprB,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKooB,GACLE,EAAsB/6B,KAAI,CAAChB,EAAU+L,IAClC4E,EAAAA,cAACA,EAAAA,SAAc,CAAC7P,IAAKiL,GAChB/L,EACA+7B,GAAyBA,EAAsBhwB,EAAQ,IAAMmwB,MAO3E,MAGL4N,EAAel5B,IACjB,MAAM,MAAE0H,EAAK,eAAE8iB,GAAmBxqB,EAClC,OAAI0H,EAEI3H,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK2nB,GACNzqB,EAAAA,cAAA,UACK2H,EAAMgjB,YACNhjB,EAAMkjB,YAKhB,MAGLuO,EAAoBn5B,IACtB,MAAM,MAAE0H,EAAK,eAAE8iB,GAAmBxqB,EAClC,OAAI0H,EAEI3H,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK2nB,GACNzqB,EAAAA,cAAA,UAAK2H,EAAMmjB,aAIhB,MAGX,EA/J6E7qB,IAAQ,IAAAo5B,EACjF,MAAM,sBACFjW,EAAqB,SACrBvvB,EAAQ,WACRkjC,EAAU,kBACVC,EAAiB,wBACjBC,EAAuB,cACvBE,EAAa,SACbxtB,EAAQ,YACRytB,EAAW,kBACXE,EAAiB,eACjBZ,EAAc,WACdE,EAAU,kBACV3L,EAAiB,cACjB6L,EAAa,qBACbwC,EAAoB,iCACpBpC,EAAgC,aAChCK,EAAY,uBACZC,EAAsB,mBACtBC,GACAx3B,EACE84B,EAAmE,QAAnDM,EAAGp5B,EAAMxR,QAAQ8X,cAAc1X,eAAeoC,aAAK,IAAAooC,OAAA,EAAhDA,EAAkD/mC,eAC3E,OAAIqX,EAEI3J,EAAAA,cAACu5B,EAAAA,OAAM12B,OAAAC,OAAA,GAAKsgB,GACP8V,EAAwBjO,GACxBkO,EAAYzC,GACZS,EACAC,EACAoC,EAAwBlC,EAAmBV,EAAYE,EAAeiC,GACvE/4B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK00B,GAAyBC,GACnCz3B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKk0B,GACLO,EACA1jC,GAEJkjC,GAKT/2B,EAAAA,cAACu5B,EAAAA,OAAM12B,OAAAC,OAAA,GAAKsgB,GACRpjB,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKw2B,GACLrO,GAAqBiO,EAAwBjO,GAC7CyL,GAAkB0C,EAAiB1C,IAExC12B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKo0B,GACLN,GAAckC,EAAclC,GAC7B52B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKm0B,GACLP,GAAkByC,EAAYzC,GAC9BS,EACAL,IAAkBiC,GAAoBC,EAAWlC,GAClD92B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK00B,GAAyBC,GACnCz3B,EAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKk0B,GACLO,EACA1jC,GAEJkjC,waCIrB,SAASmE,EAAyBC,EAA2BprB,GAAiC,IAAAqrB,EAAAC,EAC1F,IAAKtrB,IAAgBA,EAAY9b,gBAC7B,OAAO,KAGX,MACMqnC,EADcH,EACkC3nC,IAAI/B,OAAO6pC,kCAE3DC,EAEL,QAFsBH,EAAGrrB,EAAY9b,gBAAgByC,MAClD8kC,IAAc,IAAAC,EAAA,OAA0B,QAAtBA,EAAAD,EAAe93B,eAAO,IAAA+3B,OAAA,EAAtBA,EAAwBnc,uBAAwBgc,YACrE,IAAAF,OAAA,EAFyBA,EAEvBM,SAEH,IAAK3nC,EAAAA,gBAAgBC,YAAYunC,GAC7B,OAAO,KAIX,OAD6E,QAA1DF,EAAGE,EAAkB7kC,MAAKiM,IAA2B,IAAnBA,EAAKg5B,mBAAmB,IAAAN,EAAAA,EAAIE,EAAkB,GA2BvG,SAASK,EAAiBC,EAA+BV,EAA2BW,GAChF,MAAMC,EAAY,IAAIv/B,IAAIq/B,EAAuBV,EAAYx0B,QAAQ7X,YAAYktC,SAC7ED,EAAUE,OACVF,EAAUE,QAAU,IAAIH,IAExBC,EAAUE,QAAUH,EAIxB,OADmB,IAAIt/B,IAAIu/B,EAAU5/B,MACnB+/B,SAAWH,EAAUE,OAQ3C,SAASE,EAA2BC,GAChC,OAAKA,EAIDp8B,IAAAA,cAAA,OAAKyC,UAAU,gCACXzC,IAAAA,cAAA,YAAOo8B,IAJJ,KAwVf,SAASC,EACL9B,EACA+B,EACA1M,EACA2M,EACAC,EACAC,GAEA,MAAMC,EAA2BC,EAAmBH,EAAaC,MAAAA,EAAAA,EAA4B,IAC7F,MAAO,GAAGlC,MAAAA,EAAAA,EAAQ,MAAM+B,MAAAA,EAAAA,EAAS,MAAMM,EAAmBhN,EAAQ2M,KAC9DG,EAA2B,IAAIA,IAA6B,KAQpE,SAASE,EAAmBhN,EAAiBna,GACzC,GAAIma,GAAUna,EAAiB,CAC3B,MAAMonB,EAAgBjN,EAAOkN,QAAQ,GACrC,OAAO1d,EAAAA,EAAAA,QAAO3J,GAAmB,GAAIonB,EAAe,KAExD,MAAO,GAGX,SAASF,EAAmBH,EAAsBC,GAC9C,OAAID,GAAeC,GACRrd,EAAAA,EAAAA,QAAOqd,GAA4B,GAAID,GAE3C,GAmCX,SAASO,EACLtuC,EACAknB,EACA/gB,EACAooC,EACAC,EACAC,EACA7nB,EACAE,EACAC,EACAT,EACAE,GAEA,MAAMqnB,EAAsB,CACxBhsB,UAAW0sB,EACX5sB,cAAe6sB,EACfE,wBAAyBF,GAG7B,OACIj9B,IAAAA,cAACo9B,EAAAA,eAAc,CACX3uC,QAASA,EACTmG,GAAIA,EACJ+gB,SAAUA,EACVlF,KAAM,CAAE6rB,MAAAA,GACRY,YAAaA,EACb7nB,cAAeA,EACfE,kBAAmBA,EACnBR,qBAAsBA,EACtBE,eAAgBA,IAK5B,SAASvN,EACL1B,EACAiB,EACAC,EACAm2B,EACAl2B,EACA1Y,GAAsC,IAAA6uC,EAEtC,IAAKp2B,IAAaD,IAAiBjB,EAC/B,OAAO,KAGX,MAAMu3B,EAAgB9uC,MAAAA,GAAmB,QAAZ6uC,EAAP7uC,EAAS+E,IAAI/B,cAAM,IAAA6rC,OAAA,EAAnBA,EAAqBE,qBAE3C,IAAIC,EAAsBJ,EADIE,GAEDF,IACzBI,EAAsB,GAAGJ,KAHCE,KAK9B,MAAMn2B,EAAkB,CACpBC,IAAKH,EACLC,QAASA,GAAoB,GAC7BI,YAAak2B,GAEXn2B,EAAa,CACfL,aAAAA,EACAjB,cAAAA,GAGJ,OADAsB,EAAWtB,cAAc03B,iBAAkB,EAEvC19B,IAAAA,cAACwH,EAAAA,GAAK3E,OAAAC,OAAA,CACFjU,eAAgBJ,MAAAA,OAAO,EAAPA,EAAS8X,cAAc1X,gBACnCuY,EACAE,EAAU,CACdG,oBAAoB,QACpBk2B,qBAAmB,KAKxB,MAAMvoB,EAAoEwoB,EAAAA,GAAiBC,wBAEhG,+WAAS/tC,CAAA,CAAIguC,UAjauCt5B,IAsBjD,IAAAu5B,EAAAC,EAAAC,EAAAC,EAAA,IAtBkD,KACnDztB,EAAI,QACJhiB,EAAO,cACPuX,EAAa,YACbk3B,EAAW,cACX7nB,EAAa,kBACbE,EAAiB,iBACjBC,EAAgB,gBAChBC,EAAe,qBACf0oB,EAAoB,UACpBzoB,EAAS,SACTC,EAAQ,GACR/gB,EAAE,iBACFyM,EAAgB,gBAChBuU,EAAe,wBACfd,EAAuB,4BACvBspB,EAA2B,qBAC3BrpB,EAAoB,eACpBE,EAAc,eACdY,EAAc,wBACdE,EAAuB,oBACvBD,GACHtR,EACG,MAAMuB,EAAU0K,EAAK1K,QAErB,IAAIM,GAAaC,EAAAA,EAAAA,uBAAmC,QAAdy3B,EAACh4B,MAAAA,OAAO,EAAPA,EAASI,YAAI,IAAA43B,EAAAA,EAAI,GAAqB,QAAnBC,EAAEj4B,MAAAA,OAAO,EAAPA,EAAS5R,gBAAQ,IAAA6pC,EAAAA,EAAIvmC,OAAO4mC,UAAW5vC,EAAQ8X,mBAAe7U,GACtHgkB,IACArP,EAAau1B,EAAiBv1B,EAAY5X,EAAS,cAEvD,MAAM6vC,EAAiF,QAAxDL,EApInC,SAA6C9C,EAA2BprB,GACpE,MAAMwuB,EAAgBrD,EAAyBC,EAAaprB,GACtDyuB,EAAyBD,MAAAA,OAAa,EAAbA,EAAeE,iBAC9C,OAAK1qC,EAAAA,gBAAgBC,YAAYwqC,IAI1BE,EAAAA,EAAAA,kBAAiBF,EAAuB,GAAIrD,EAAYx0B,QAAQ7X,aAH5DihB,MAAAA,OAAW,EAAXA,EAAaxc,gBAgIUorC,CAAoClwC,EAASsX,UAAQ,IAAAk4B,EAAAA,EAAIl4B,MAAAA,OAAO,EAAPA,EAASxS,gBAC9FqrC,EAA2F,QAAnEV,EAhDlC,SACI/C,EACA90B,EACA0J,GAEA,MAAMwuB,EAAgBrD,EAAyBC,EAAaprB,GAC5D,OAAKwuB,MAAAA,GAAAA,EAAeM,YASbjD,EAAiBv1B,EAAY80B,EADhB,GAJAA,EACkC3nC,IAAI/B,OAAO6pC,qCAEtCwD,mBAAmBP,EAAcM,gBANjDx4B,EAyCsB04B,CAAmCtwC,EAAS4X,EAAYN,UAAQ,IAAAm4B,EAAAA,EAAI73B,GAC9F24B,EAAgBC,IAAqBC,EAAAA,EAAAA,UAAiBN,IACtDO,EAAiBC,IAAsBF,EAAAA,EAAAA,UAA6BZ,GAC3Et+B,IAAAA,WAAgB,KACZi/B,EAAkBL,GAClBQ,EAAmBd,KACpB,CAACj4B,EAAYu4B,EAA0BN,IAC1C,MAAOe,IAAuBH,EAAAA,EAAAA,UAAS,IAAII,EAAAA,YAErC1rC,EAAmBnF,EAAQ+E,IAAI/B,OAAOmC,iBAGtC0nC,EADc7sC,EACkC+E,IAAI/B,OAAO6pC,kCAO3DiE,EAAwBv/B,IAAAA,aAC1B,CAACm7B,EAA2BqE,KACxB,MAAMngB,EAAgBmgB,EAAWngB,cAEjC,GADAggB,EAAoBI,SAASpgB,EAAemgB,GACxC9f,EAAAA,iBAAiBC,mBAAmB6f,EAAWpvC,OAC/C,OAEJ,MAAM0rC,EAAc,GAAGzc,KAAiBmgB,EAAWpvC,QACnD,IAAIsvC,EAA2B,GAC/B,GAAIV,EAAer+B,SAAS0e,GAAgB,CACxC,MAAMsgB,EAAS,IAAInjC,IAAIwiC,EAAgB7D,EAAYx0B,QAAQ7X,YAAYktC,SACvE2D,EAAOjkC,aAAaC,OAAO0jB,GAC3BqgB,EAA2B9D,EAAiB+D,EAAOvjC,WAAY3N,EAASqtC,QAExE4D,EAA2B9D,EAAiBoD,EAAgBvwC,EAASqtC,GAGzE,GADAmD,EAAkBS,GACdrgB,IAAkBic,EAAmC,CACrD,MAAMsE,EAAwB7rC,EAAAA,gBAAgBC,YAAYwrC,EAAWK,kBAC/DL,EAAWK,iBAAiB,QAC5BnuC,EACA2B,GAAcqrC,EAAAA,EAAAA,kBAAiBkB,EAAuBzE,EAAYx0B,QAAQ7X,aAChFswC,EAAmB/rC,MAG3B,CAACgsC,EAAqB5wC,EAASuwC,IAGnC,IAAKj5B,EACD,OAAO,KA8FX,MAAM5E,GAAUC,EAAAA,EAAAA,kBAAiB,QAASC,EAAmB,GAAI0E,EAAQ5R,SAASiI,YAE5EwG,GAAYJ,EAAAA,EAAAA,wBAAuBnB,EAAmBF,GAGtD2+B,GAAyBrxC,EAAQ+E,IAAI/B,QAA0D,oBAAhDhD,EAAQ+E,IAAI/B,OAAOsuC,yBAExE,OACI//B,IAAAA,cAAAA,IAAAA,SAAA,KACKo+B,EACGp+B,IAAAA,cAAA,IAAA6C,OAAAC,OAAA,CACI3G,KAAM6iC,EACNh8B,SAASgE,EAAAA,EAAAA,kBAAiB3F,EAAmBF,EAAS4E,EAAQI,MAAM,aACxDk2B,EACRt2B,EAAQI,KACR1X,EAAQwV,iBAAiBC,eAAe6B,EAAQsK,OAChDtK,EAAQi6B,cACRvqB,EACA1P,EAAQk6B,aACR9B,GAEJ17B,UAAU,eACNG,GAEJ5C,IAAAA,cAAA,OAAKyC,UAAU,mCACXzC,IAAAA,cAAA,OAAKyC,UAAU,sBACViF,EACG1B,EACAvX,EAAQkY,QAAQM,aAChBk4B,EACAp5B,EAAQxS,gBACRwS,EAAQI,KACR1X,IAGRuR,IAAAA,cAAA,OAAKyC,UAAU,kCACXzC,IAAAA,cAAA,MAAIyC,UAAU,4BAA4BsD,EAAQI,MACjD42B,EACGtuC,EACAknB,EACA/gB,EACAmR,EAAQuK,UACRvK,EAAQsK,MACR6sB,EACA7nB,EACAE,EACAC,EACAT,EACAE,GAEH6qB,IAA0B3D,EAA2Bp2B,EAAQqQ,uBAqE/D8pB,GApEoBn6B,EAAQoQ,YAqE5CnW,IAAAA,cAAA,KAAGyC,UAAU,qBAAqBy9B,QAhE7BlgC,IAAAA,cAAA,IAAA6C,OAAAC,OAAA,CACI3G,KAAM6iC,EACNh8B,SAASgE,EAAAA,EAAAA,kBAAiB3F,EAAmBF,EAAS4E,EAAQI,MAAM,aACxDk2B,EACRt2B,EAAQI,KACR1X,EAAQwV,iBAAiBC,eAAe6B,EAAQsK,OAChDtK,EAAQi6B,cACRvqB,GAEJhT,UAAU,eACNG,GAEJ5C,IAAAA,cAAA,OAAKyC,UAAU,sBACViF,EACG1B,EACAvX,EAAQkY,QAAQM,aAChBk4B,EACAp5B,EAAQxS,gBACRwS,EAAQI,KACR1X,IAGRuR,IAAAA,cAAA,OAAKyC,UAAU,wBACXzC,IAAAA,cAAA,MAAIyC,UAAU,sBAAsBsD,EAAQI,MAC3C42B,EACGtuC,EACAknB,EACA/gB,EACAmR,EAAQuK,UACRvK,EAAQsK,MACR6sB,EACA7nB,EACAE,EACAC,GAEHsqB,IAA0B3D,EAA2Bp2B,EAAQqQ,yBAlKjD+pB,GAsKAp6B,EAAQ9R,iBAhKjC+L,IAAAA,cAAA,OAAKyC,UAAU,2BACV09B,GAAgB9vC,KAAKsS,IAAwB,IAAAy9B,EAAAC,EAAAC,EAAAC,EAC1C,MAAMC,EAAsD,QAApCJ,EAAe,QAAfC,EAAG19B,EAAKe,eAAO,IAAA28B,OAAA,EAAZA,EAAc/gB,2BAAmB,IAAA8gB,EAAAA,EAAI,GAChE,IAxBhB,SAAgC/gB,GAC5B,MACMqV,EADoBjmC,EACiC+E,IAAI/B,OAAOkjC,wBACtE,OACI5gC,EAAAA,gBAAgBC,YAAY0gC,KAC3BA,EAAiC/zB,SAASm0B,EAAAA,eAAeC,OAC1DL,EAAiC/zB,SAAS0e,EAAcC,qBAkB3CmhB,CAAuBD,GACxB,OAAO,KAGX,MACMlF,EADc7sC,EACkC+E,IAAI/B,OAAO6pC,kCAC3Djc,EAAgBmhB,EAChBE,EAiBA,QAjBQJ,EACG,QADHC,EACV59B,EAAK+4B,gBAAQ,IAAA6E,OAAA,EAAbA,EAAelwC,KAAiBmvC,IAAa,IAAAmB,EAAAC,EAAAC,EAAAC,EACzC,MAAO,CACH1uC,OAAQ,GAAgB,QAAhBuuC,EAAGh+B,EAAKxO,gBAAQ,IAAAwsC,EAAAA,EAAI,MAAMH,KAA4C,QAA1BI,EAAIpB,EAAWX,mBAAW,IAAA+B,EAAAA,EAAI,KAClFxwC,MAA6B,QAAxBywC,EAAErB,EAAWX,mBAAW,IAAAgC,EAAAA,EAAI,GACjCxhB,cAAAA,EACAiB,aAAckf,EAAW5f,mBACzB1Y,SAAUs4B,EAAW1f,eACrB+f,iBAAkBL,EAAWf,iBAC7BsC,UAAWvB,EAAW7D,UACtB7lB,oBAAqBA,GAAsBsJ,EAAAA,EAAAA,QAAOtJ,EAAqBuJ,GAAiB,GACxF7E,WACI5mB,IACAmiB,MAAAA,GAEC,QAFsB+qB,EAAvB/qB,EAAyBrf,MACrBsf,IAAqB,IAAAgrB,EAAA,OAAIhrB,EAAsB5lB,SAAiC,QAA5B4wC,EAAMxB,EAAWX,mBAAW,IAAAmC,EAAAA,EAAI,cACvF,IAAAF,OAAA,EAFDA,EAEGtmB,uBAEb,IAAA8lB,EAAAA,EAAI,GAQV,OANIjhB,IAAkBic,GAClBvnC,EAAAA,gBAAgBC,YAAY0sC,KAC3BA,EAAS9pC,MAAKqqC,GAAUA,EAAOF,cAEhCL,EAAS,GAAGK,WAAY,GAGxB/gC,IAAAA,cAACkhC,EAAAA,gCAA+B,CAC5BzyC,QAASA,EACTiyC,SAAUA,EACVS,kBAAmB5B,EACnBpvC,IAAKwS,EAAKxO,eA5CnB,MAqKL1F,EAAQ+E,IAAI/B,OAAOuwB,YA0CjC,SACImZ,EACAzZ,EACA/M,EACA2M,EACA8f,EACAv5B,EACAs2B,GAEA,IAAK7c,EACD,OAAO,KAGX,MAAM+f,GAAgBD,MAAAA,OAAY,EAAZA,EAAchlC,kBAAc1K,EAC5C6qC,EAAsBK,EAAmBtb,EAAWzZ,GACpD40B,EAA2BE,EAAmBllC,OAAO4pC,GAAgBlD,GAE3E,OACIn+B,IAAAA,cAACqhB,EAAAA,gBAAe,CACZ5yB,QAAS0sC,EACTvmC,GAAI+f,EACJgB,SAAU+L,EACVJ,UAAWA,EACXC,YAAa8f,EACb5f,UAAQ,EACR5Z,UAAW00B,EACX4B,qBAAsB1B,EACtBhsB,KAAM,KApEF6wB,CAAa7yC,EAASknB,EAAU/gB,EAAImR,EAAQi6B,cAAej6B,EAAQk6B,aAAcxqB,EAAiB0oB,IAlU/EoD,GAmUI1rB,IAlU+B,KAA/B0rB,GAK/BvhC,IAAAA,cAAA,OAAKyC,UAAU,6BACXzC,IAAAA,cAAA,YAAOuhC,KALJ,KAkUF3rB,GApHT,SAAyB2a,EAA4B5tB,GACjD,GAAkB,OAAd4tB,EACA,OAEJ,MAAMiR,EAAyCnC,EAAoBoC,YAAYpxC,KAAsBqwC,IAC1F,CACHgB,oBAAoBC,EAAAA,EAAAA,4CAA2CjB,EAASrhB,eACxEuiB,eAAgB,CACZztC,SAAU,EACV0tC,MAAOnB,EAAStwC,WAI5B,OAAO4P,IAAAA,aAAmBuwB,EAAiC,CAAEuR,kBAAmBn/B,EAAM6+B,mBAAAA,IAuG9DO,CAAgBnsB,EAAiB7P,EAAQ5R,UAC5D2gB,GAlTb,SACIA,EACA/O,EACArW,GAGA,OADAsyC,EAAAA,EAAAA,mBAAkBtyC,GACXsQ,IAAAA,aAAmB8U,EAA+C,CAAE/O,QAAAA,EAASrW,UAAAA,IA4ShDuyC,CAA8BntB,EAAyB/O,GAASjU,EAAAA,EAAAA,IAAarD,EAAQkY,WArU7H,IAAmC46B,GA0JEpB,GA8LVD,KA3aG,KA2iB9B,yGCnlBKgC,iDAAL,SAAKA,GACDA,EAAAA,EAAA,4DACAA,EAAAA,EAAA,+EACAA,EAAAA,EAAA,+EAHJ,CAAKA,IAAAA,EAAmB,KAWxB,MAAMC,EAAsBliC,GACjBD,IAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK7C,EAAM+2B,mBAAoB/2B,EAAMpM,UASrD,SAAS0gB,EAAkB/f,EAAqDuR,GAC5E,IAAKvR,IAAoCT,EAAAA,gBAAgBC,YAAY+R,EAAQ9R,iBACzE,OAEJ,MAAMugB,EAAqBzO,EAAQ9R,gBAAgByC,MAAKkM,GAAaA,EAAUzO,WAAaK,IAC5F,OAAIggB,EACOA,EAAmBlgB,eAD9B,EAcJ,MAAM8tC,EAAgCA,CAClCniC,EACA8F,EACA3K,EACAgjC,KACoB,IAAAiE,EAAAC,EACpB,MAAM,OAAE7wC,EAAM,QAAEhD,EAAO,UAAEwX,EAAS,gCAAE+O,GAAoC/U,EAClEoB,GAAmB2xB,EAAAA,EAAAA,oBAAmB/yB,EAAMxR,QAAQkY,QAAQ+jB,kBAAoBzqB,EAAMgzB,aAAchzB,EAAMpG,WAC1G0oC,EAAiBtiC,EAAMxR,QAAQ+E,IAAI/B,OAAO+wC,eAC1CC,EAAcxiC,EAAMxO,OAAOmjB,sBAA2C,SAAnB2tB,GAAgD,oBAAnBA,GAChFG,EAAYtE,EACZ,sDACA,iCACAuE,EAAgB5uC,EAAAA,gBAAgBC,YAAYiM,EAAMqwB,MAAMC,WAAatwB,EAAMqwB,MAAMC,UAAU,QAAK7+B,EAChG8C,EAA4D,QAA7B6tC,EAAGpiC,EAAMwQ,KAAK5c,SAAS0G,cAAM,IAAA8nC,OAAA,EAA1BA,EAA4B7tC,gCAC9Dg8B,EAA0D,QAAjC8R,EAAGriC,EAAMwQ,KAAKggB,aAAal2B,cAAM,IAAA+nC,OAAA,EAA9BA,EAAgC5rC,MAC9D+5B,GAAsC,0DAAtBA,EAAatqB,OAE3B8O,EAA2C,CAC7CC,oBAAqBjP,EAAUiP,qBAG7BJ,EAA0B/gB,EAAAA,gBAAgBC,YAAYiM,EAAMqwB,MAAMxb,yBAClE7U,EAAMqwB,MAAMxb,wBAAwB,GACpC,KAEN,OACI9U,IAAAA,cAAA,MAAIyC,UAAWigC,EAAWvyC,IAAKiL,GAC3B4E,IAAAA,cAACoV,EAAAA,iBAAgB,CACb3mB,QAASA,EACT4S,iBAAkBA,EAClB2E,cAAevU,EAAOuU,cACtBqP,cAAepP,EAAUqP,UACzBC,kBAAmBtP,EAAUsP,kBAC7BC,iBAAkBvP,EAAUuP,iBAC5BC,gBAAiBxP,EAAUwP,gBAC3BC,UAAW+sB,EACX7tC,GAAIqL,EAAMrL,GACVzE,IAAK4V,EAAQ5R,SACbwhB,SAAU1V,EAAM0V,SAChBlF,KAAM,CAAE1K,QAAAA,GACR6P,gBAAiB+sB,EACjB7tB,wBAAyBA,EACzBspB,4BAA6BA,EAC7BvoB,eAAgBtB,EAAkB/f,EAAiCuR,GACnEgP,qBAAsByb,MAAAA,OAAyB,EAAzBA,EAA2BE,UACjDzb,eAAgBA,EAChBa,oBAAqB7P,EAAU6P,oBAC/BC,wBAAyBf,MAAAA,OAA+B,EAA/BA,EAAiCte,MACrDsf,GACGjiB,EAAAA,gBAAgBC,YAAYgiB,IAC5BA,EAAsB,GAAGC,kBAAoBlQ,EAAQmQ,sBAYvE0sB,EAAkB3iC,IAAgG,IAAA4iC,EACpH,MAAMhvC,EAA0C,QAAlCgvC,EAAG5iC,EAAMwQ,KAAKwX,cAAc1tB,cAAM,IAAAsoC,OAAA,EAA/BA,EAAiC9lC,eAClD,IAAKlJ,IAAaE,EAAAA,gBAAgBC,YAAYH,GAC1C,OAAO,KAEX,MAAMivC,EAAqCZ,EAAoBY,2BACzDC,EAA+Cb,EAAoBa,qCACnEC,EAA+Cd,EAAoBc,qCACzE,OACIhjC,IAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK7C,EAAM+2B,mBACX/2B,EAAMs3B,aACPv3B,IAAAA,cAAA,MAAIyC,UAAU,iBACT5O,EAASxD,KAAI,CAAC0V,EAA8B3K,IAGnCgnC,EAA8BniC,EAAO8F,EAAS3K,EAFpDA,EAAQ0nC,IAA+BC,GACvC3nC,EAAQ0nC,IAA+BE,QAcrD5J,EAAoBn5B,IACtB,MAAM,MAAE0H,EAAK,eAAE8iB,GAAmBxqB,EAClC,OAAI0H,EACO3H,IAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK2nB,GAAiB9iB,EAAMmjB,YAErC,MAQLoO,EAA2Bj5B,IAC7B,MAAM,2BAAEirB,EAA0B,sBAAEE,EAAqB,2BAAEG,GAA+BtrB,EAC1F,OAAImrB,EAEIprB,IAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKooB,GACLE,EAAsB/6B,KAAI,CAAChB,EAAU+L,IAClC4E,IAAAA,cAACA,IAAAA,SAAc,CAAC7P,IAAKiL,GAChB/L,EACA+7B,EAAsBhwB,EAAQ,IAAMmwB,MAOlD,MAQE0X,EAAwBA,CAACt5B,EAAmBu5B,KAErD,MAEMC,EAAsCzlB,SAAS0lB,cAAc,cAE7DC,EAAmCF,MAAAA,OAAe,EAAfA,EAAiBG,aAEpDC,EAAgBL,EAND,EAKWG,MAAAA,EAAAA,EAJV,GAMhBG,EAAgB9lB,SAAS0lB,cAAc,uBACvCK,EAAmB/lB,SAAS0lB,cAAc,6BAC1CM,EAAiB/5B,EAAW+T,SAAS0lB,cAAc,4BAA8B1lB,SAAS0lB,cAAc,uBAC1GM,GAAkBF,GAAiBC,EAC/BnnC,EAAAA,GAASC,WAAamhB,SAASimB,gBAAgBC,UAAYL,GAC3DG,EAAeG,UAAUC,IAAI,eAC7BJ,EAAex1B,aAAa,QAAS,QAAQu1B,EAAiBM,mBAE9DL,EAAeG,UAAUG,OAAO,eAE7BN,IACHpnC,EAAAA,GAASC,WAAamhB,SAASimB,gBAAgBC,UAAYL,EAC3DG,EAAeG,UAAUC,IAAI,aAE7BJ,EAAeG,UAAUG,OAAO,YAChCN,EAAeG,UAAUG,OAAO,eAChCN,EAAeO,gBAAgB,YAkD3C,MAwGMzK,EAA0BA,CAC5BC,EACA7C,EACA1K,EACA6M,IAEO/4B,IAAAA,aACHy5B,EAAWnQ,MACX,GACAmQ,EAAWlQ,YACXmQ,EAAgBD,EAAY7C,EAAY1K,EAAgB6M,GACxDU,EAAWjQ,aAiCbkQ,EAAkBA,CACpBz5B,EACA22B,EACA1K,EACA6M,IAEI7M,EACOlsB,IAAAA,aAAmBC,EAAMwpB,UAAW,GAAIuP,EAAW9M,EAAgB6M,GA/BrD94B,CAAAA,IACzB,MAAM,SAAE7Q,EAAQ,oBAAEq/B,EAAmB,wBAAEC,GAA4BzuB,EACnE,OAAI7Q,EAEI4Q,IAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK4rB,GACN1uB,IAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK2rB,GACLr/B,EAASiB,KAAI,CAAC4oC,EAAS79B,IACpB4E,IAAAA,cAACA,IAAAA,SAAc,CAAC7P,IAAKiL,GAAQ69B,OAM1C,MAkB0FiL,CAAoBtN,IAE9G,KAQLkC,EAAiB74B,IACnB,MAAM,SAAE7Q,EAAQ,oBAAEq/B,EAAmB,wBAAEC,GAA4BzuB,EACnE,OAAI7Q,EAEI4Q,IAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK4rB,GACN1uB,IAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK2rB,GACLr/B,EAASiB,KAAI,CAAC4oC,EAAS79B,IACpB4E,IAAAA,cAACA,IAAAA,SAAc,CAAC7P,IAAKiL,GAAQ69B,OAM1C,MAULkL,EAAsBA,CACxBlkC,EACAmkC,EACAn+B,KAEA,MAAM,SAAE7W,GAAa6Q,EACrB,OAAI7Q,EAEI4Q,IAAAA,cAACoU,EAAAA,KAAI,CAAC3R,UAAU,2BACZzC,IAAAA,cAACoU,EAAAA,KAAI,CAAC+W,IAAI,SAAS1oB,UAAU,wBAAuB,aAAawD,EAAUo+B,cAAepkB,SAAU,EAAGjd,QAASohC,GAC3Gn+B,EAAUq+B,WAKpB,MASLtL,EAAaA,CAAC/4B,EAAyB84B,KACzC,MAAM,iBAAE9M,EAAgB,eAAEC,GAAmBjsB,EAC7C,OAAIisB,IAAmB6M,EACZ/4B,IAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKmpB,GAAmBC,GAEjC,MAQLiN,EAAel5B,IACjB,MAAM,MAAE0H,EAAK,eAAE8iB,GAAmBxqB,EAClC,OAAI0H,EAEI3H,IAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK2nB,GACNzqB,IAAAA,cAACoU,EAAAA,KAAI,CAAC+W,IAAI,KAAK1oB,UAAU,IACpBkF,EAAMgjB,YACNhjB,EAAMkjB,YAKhB,MAGX,EAhP+G5qB,IAAQ,IAAAo5B,EACnH,MAAM,sBACFjW,EAAqB,WACrB2T,EAAU,wBACVE,EAAuB,cACvBE,EAAa,SACbxtB,EAAQ,YACRytB,EAAW,kBACXE,EAAiB,eACjBZ,EAAc,WACdE,EAAU,kBACV3L,EAAiB,cACjB6L,EAAa,qBACbwC,EAAoB,iCACpBpC,EAAgC,uBAChCM,EAAsB,mBACtBC,EAAkB,aAClBF,EAAY,UACZtxB,GACAhG,GACJskC,EAAAA,EAAAA,YAAU,KACFtkC,EAAMxO,OAAO+yC,iBAAmBloC,EAAAA,GAASC,WA7DrD,SAA2BoN,EAAmBu5B,GAC1CzmC,OAAO82B,iBAAiB,UAAU,KAC9B0P,EAAsBt5B,EAAUu5B,MAEpCD,EAAsBt5B,EAAUu5B,GA2DxBuB,CAAkBxkC,EAAM0J,SAAU1J,EAAMxR,QAAQ+E,IAAI/B,OAAOizC,sBAEhE,CAACzkC,IACJ,MAAO0kC,EAAYC,IAAiB1F,EAAAA,EAAAA,WAAkB,GAChD52B,EAASA,KACXs8B,GAAeD,IAEbE,EAAiB7kC,IAAAA,OAAa,OA1DxC,SAAyB8kC,EAA+Cx8B,GACpEtI,IAAAA,WAAgB,KAKZ,SAAS+kC,EAAmBhpB,GACxB,MAAM7nB,EAAUwpB,SAAS0lB,cAAc,wCACnC0B,EAAgB92B,SAAY82B,EAAgB92B,QAAQg3B,SAASjpB,EAAMxb,SAAoBrM,GACvFoU,EAAOyT,GAMf,OAHIzf,EAAAA,GAASC,WACTmhB,SAAS6V,iBAAiB,QAASwR,GAEhC,KACCzoC,EAAAA,GAASC,WACTmhB,SAAS6X,oBAAoB,QAASwP,MAG/C,CAACD,EAAiBx8B,IAuCrB28B,CAAgBJ,EAAgBv8B,GAChC,MAAMywB,EAAmE,QAAnDM,EAAGp5B,EAAMxR,QAAQ8X,cAAc1X,eAAeoC,aAAK,IAAAooC,OAAA,EAAhDA,EAAkD/mC,eAC3E,OAAIqX,EAEI3J,IAAAA,cAACu5B,EAAAA,OAAM12B,OAAAC,OAAA,GAAKsgB,GACPqU,EAAqB,KAClBz3B,IAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKw2B,GACLJ,EAAwBjO,GACxBkO,EAAYzC,GACZ0C,EAAiB1C,IAGzBS,EACDn3B,IAAAA,cAACoU,EAAAA,KAAI,CAAC3R,UAAU,2BAA2B20B,GAC1CoC,EAAwBlC,EAAmBV,EAAYE,EAAeiC,GACvE/4B,IAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK00B,GAAyBC,GAClCF,EACAt3B,EAAMxO,OAAOyzC,wBAA0BtC,EAAe3iC,GAASkiC,EAAmBliC,GAClF82B,GAKT/2B,IAAAA,cAACu5B,EAAAA,OAAM12B,OAAAC,OAAA,GAAKsgB,GACPqU,EAAqB,KAClBz3B,IAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKw2B,GACLrO,GAAqBiO,EAAwBjO,GAC7CyL,GAAkByC,EAAYzC,GAC9BA,GAAkB0C,EAAiB1C,IAG5C12B,IAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAK00B,GAAyBC,GACnCz3B,IAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKo0B,GACNl3B,IAAAA,cAACoU,EAAAA,KAAI,CAAC5G,IAAKq3B,EAAgBpiC,UAAU,sBACjCzC,IAAAA,cAACoU,EAAAA,KAAI,CAAC3R,UAAU,4BACZzC,IAAAA,cAAC8I,EAAAA,OAAM,CACHrG,UAAWkiC,EAAa,oCAAsC,qCAAoC,aACvF,SACX3hC,QAASsF,EAAM,gBACAq8B,EACf1kB,SAAU,GAETha,EAAUk/B,YAEfnlC,IAAAA,cAAA,OAAKyC,UAAU,iDAAiD00B,GAChEn3B,IAAAA,cAAA,OAAKyC,UAAU,6CACVq0B,IAAkBiC,GAAoBC,EAAWlC,KAGzDF,GAAc+N,GAAc7L,EAAclC,GAC3C52B,IAAAA,cAACoU,EAAAA,KAAI,CAAC3R,UAAU,qBACXm0B,GAAc+N,GAAcR,EAAoBvN,EAAYtuB,EAAQrC,KAI7EjG,IAAAA,cAACoU,EAAAA,KAAIvR,OAAAC,OAAA,GAAKm0B,GACLM,EACAt3B,EAAMxO,OAAOyzC,wBAA0BtC,EAAe3iC,GAASkiC,EAAmBliC,GAClF82B,0BCzWrBqO,EAAOC,QAAUrlC,2BCAjBolC,EAAOC,QAAUC","sources":["webpack://Msdyn365.Commerce.Online/./src/actions/get-category-list.action.ts?3eec","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/actions/base-collection-action.ts?b97d","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/actions/get-full-products-by-collection.ts?a9e5","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/actions/get-inventory-refiners.ts?d9ee","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/actions/get-mapped-search-configuration.ts?6e69","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/actions/get-product-refiner-hierarchy.ts?6258","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/actions/get-refiners-for-collection.ts?3c59","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/actions/url-utils.ts?4658","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/list-page-state.ts?b1f9","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/utilities.ts?8bea","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/choice-summary.tsx?6a2f","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/error-message.tsx?4674","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/feature-search-result-item.tsx?1d7b","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/link.tsx?7dca","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/modal.tsx?784e","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/telemetryHelper.ts?a0bd","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/IncrementalQuantity.tsx?448f","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/product-collection-qty.tsx?626d","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/product-search-result-items.tsx?cb8c","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/range-refine-item.tsx?5c74","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/refine-item.tsx?6e95","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/refine-submenu.tsx?095c","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/separator.tsx?38b9","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/title.tsx?c1cb","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/search-result-container.props.autogenerated.ts?d341","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/search-result-container.tsx?0acf","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/search-result-container.view.tsx?b226","webpack://Msdyn365.Commerce.Online/./src/themes/localy-theme/views/search-result-container.view.tsx?9502","webpack://Msdyn365.Commerce.Online/./lib/search-result-container/module-registration.js?8625","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/search-result-container.view.tsx?89df","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/search-result-container.view.tsx?b779","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/product.component.tsx?fd23","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/search-result-container.view.tsx?6e86","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createObservableDataAction, IAction, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { Category, retailAction } from '@msdyn365-commerce/retail-proxy';\nimport { createGetCategoriesInput } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CategoriesDataActions.g';\n\n/**\n * Get Org Unit Configuration Data Action\n */\nexport default createObservableDataAction({\n action: >retailAction,\n input: (context: ICreateActionContext) => {\n return createGetCategoriesInput({ Paging: { Top: 0 } }, context.requestContext.apiSettings.channelId);\n }\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { CacheType, getCatalogId, IActionInput, IAny, ICommerceApiSettings, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport {\n convertToString,\n ChannelInventoryConfiguration,\n IQueryResultSettings,\n ProductRefinerValue,\n SortColumn\n} from '@msdyn365-commerce/retail-proxy';\nimport { generateCacheKey, QueryResultSettingsProxy } from '@msdyn365-commerce-modules/retail-actions';\nimport { toJS } from 'mobx';\n\nimport { hydrateRefinersFromUrl } from './url-utils';\n\n/**\n * Export listPageType.\n */\nexport type listPageType = 'Category' | 'Search' | 'Unknown';\n\n/**\n * Get include attributes from config.\n * @param inputData - ICreateActionContext.\n * @returns Boolean.\n */\nfunction getIncludeAttributes(inputData: ICreateActionContext, IGeneric>): boolean {\n if (inputData && inputData.config && inputData.config.includeAttributes !== undefined && inputData.config.includeAttributes === true) {\n return true;\n }\n return false;\n}\n\n/**\n * Get updateRefinerPanel from config.\n * @param inputData - ICreateActionContext.\n * @returns Boolean.\n */\nfunction getUpdateRefinerPanel(inputData: ICreateActionContext, IGeneric>): boolean {\n return !!inputData.config?.updateRefinerPanel;\n}\n\n/**\n * BaseCollection Action Input.\n */\nexport class BaseCollectionInput implements IActionInput {\n public pageType: listPageType;\n\n public category: number | undefined;\n\n public searchText: string | undefined;\n\n public refiners: ProductRefinerValue[];\n\n public queryResultSettings: IQueryResultSettings;\n\n public apiSettings: ICommerceApiSettings;\n\n public includeAttributes: boolean | undefined;\n\n public locale?: string;\n\n public isUpdateRefinerPanel?: boolean;\n\n public catalogId?: number;\n\n public channelInventoryConfiguration?: ChannelInventoryConfiguration;\n\n public inventoryRefiner?: IProductRefinerHierarchy;\n\n public constructor(\n pageType: listPageType,\n apiSettings: ICommerceApiSettings,\n queryResultSettings: IQueryResultSettings,\n refiners: ProductRefinerValue[],\n category: number | undefined,\n searchText: string | undefined,\n includeAttributes: boolean | undefined,\n isUpdateRefinerPanel?: boolean | undefined,\n locale?: string,\n catalogId?: number,\n channelInventoryConfiguration?: ChannelInventoryConfiguration,\n inventoryRefiner?: IProductRefinerHierarchy\n ) {\n this.pageType = pageType;\n this.apiSettings = apiSettings;\n this.category = category;\n this.searchText = searchText;\n this.queryResultSettings = queryResultSettings;\n this.refiners = refiners;\n this.includeAttributes = includeAttributes;\n this.isUpdateRefinerPanel = isUpdateRefinerPanel;\n this.locale = locale;\n this.catalogId = catalogId ?? 0;\n this.channelInventoryConfiguration = channelInventoryConfiguration;\n this.inventoryRefiner = inventoryRefiner;\n }\n\n public getCacheKey = () => {\n const queryResultSettings = {\n ...this.queryResultSettings.Paging,\n ...toJS(this.queryResultSettings.Sorting)\n };\n\n const cacheKey = generateCacheKey(\n this.apiSettings,\n { key: 'PageType', value: this.pageType },\n { key: 'Category', value: this.category },\n { key: 'SearchText', value: this.searchText },\n { key: 'CatalogId', value: this.catalogId },\n {\n key: 'Refiners',\n value: this.refiners.map(\n refiner =>\n `RefinerRecordId:${refiner.RefinerRecordId}-LeftValueBoundString:${refiner.LeftValueBoundString ||\n ''}-RightValueBoundString:${refiner.RightValueBoundString || ''}`\n )\n },\n { key: 'QueryResultSettings', value: convertToString(queryResultSettings) },\n { key: 'Locale', value: this.locale }\n );\n return cacheKey;\n };\n\n public getCacheObjectType = () => 'CollectionActionResult';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n// TODO: Create a data model here or import one to capture the response of the action\nexport interface IGetFullProductsByCollectionData {\n text: string;\n}\n\nexport type CollectionClassConstructor = new (\n pageType: listPageType,\n apiSettings: ICommerceApiSettings,\n queryResultSettings: IQueryResultSettings,\n refiners: ProductRefinerValue[],\n category: number | undefined,\n searchText: string | undefined,\n includeAttributes: boolean | undefined,\n isUpdateRefinerPanel?: boolean | undefined,\n locale?: string,\n catalogId?: number,\n channelInventoryConfiguration?: ChannelInventoryConfiguration,\n inventoryRefiner?: IProductRefinerHierarchy\n) => BaseCollectionInput;\n\n/**\n * TODO: Use this function to create the input required to make the action call.\n * @param args\n * @param inputClassConstuctor\n */\nexport const createBaseCollectionInput = (\n args: ICreateActionContext,\n inputClassConstuctor: CollectionClassConstructor\n): BaseCollectionInput => {\n const pageType =\n args.requestContext.urlTokens.pageType === 'Category' || (args.requestContext.query && args.requestContext.query.categoryId)\n ? 'Category'\n : 'Search';\n\n const queryResultSettings = QueryResultSettingsProxy.fromInputData(args).QueryResultSettings;\n const queryRefiners = hydrateRefinersFromUrl(args.requestContext);\n const includeAttributes = getIncludeAttributes(args);\n const isUpdateRefinerPanel = getUpdateRefinerPanel(args);\n const catalogId = getCatalogId(args.requestContext);\n\n if (args.requestContext.query && args.requestContext.query.sorting) {\n queryResultSettings.Sorting = { Columns: JSON.parse(decodeURIComponent(args.requestContext.query.sorting)) };\n }\n\n // const oos = addOOS();\n // console.log('', oos);\n\n // queryRefiners.push(oos[0]);\n // console.log('always comes here', queryRefiners);\n\n if (pageType === 'Category') {\n return new inputClassConstuctor(\n pageType,\n args.requestContext.apiSettings,\n queryResultSettings,\n queryRefiners,\n +(args.requestContext.urlTokens.itemId || (args.requestContext.query && args.requestContext.query.categoryId) || 0),\n undefined,\n includeAttributes,\n isUpdateRefinerPanel,\n args.requestContext.locale,\n catalogId\n );\n } else if (pageType === 'Search' && args.requestContext.query && args.requestContext.query.q) {\n return new inputClassConstuctor(\n pageType,\n args.requestContext.apiSettings,\n queryResultSettings,\n queryRefiners,\n undefined,\n args.requestContext.query.q,\n includeAttributes,\n isUpdateRefinerPanel,\n args.requestContext.locale,\n catalogId\n );\n } else if (pageType === 'Search' && args.requestContext.query && args.requestContext.query.recommendation) {\n let searchText = '';\n if (args.requestContext.query.productId) {\n searchText = JSON.stringify({\n ProductId: args.requestContext.query.productId,\n Recommendation: args.requestContext.query.recommendation\n });\n } else {\n searchText = JSON.stringify({ Recommendation: args.requestContext.query.recommendation });\n }\n return new inputClassConstuctor(\n pageType,\n args.requestContext.apiSettings,\n queryResultSettings,\n queryRefiners,\n undefined,\n searchText,\n includeAttributes,\n isUpdateRefinerPanel,\n args.requestContext.locale,\n catalogId\n );\n }\n\n // function addOOS(): ProductRefinerValue[] {\n // const compressedRefinerKeys = [\n // 'DataTypeValue',\n // 'LeftValueBoundString',\n // 'RefinerRecordId',\n // 'RefinerSourceValue',\n // 'RightValueBoundString',\n // 'UnitText'\n // ];\n // const compressedRefinerArray = [{ 0: 5, 1: 'Available', 2: 5637150588, 3: 1, 4: 'Available', 5: '' }];\n // return compressedRefinerArray.map(compressedRefiner => {\n // try {\n // const parsedRefiner: ProductRefinerValue = {};\n // compressedRefinerKeys.forEach((refinerKey: string | number, index: string | number) => {\n // // eslint-disable-next-line security/detect-object-injection\n // parsedRefiner[refinerKey] = compressedRefiner[index];\n // });\n // return parsedRefiner;\n // } catch {\n // return undefined;\n // }\n // });\n // }\n throw new Error('[getFullProductsForCollection]Unable to create input');\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext\n} from '@msdyn365-commerce/core';\nimport {\n AsyncResult,\n ChannelInventoryConfiguration,\n ProductRefinerValue,\n ProductSearchCriteria,\n ProductSearchResult\n} from '@msdyn365-commerce/retail-proxy';\nimport { searchByCriteriaAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { getInventoryConfigurationAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { ArrayExtensions, generateProductImageUrl, InventoryLevels } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { BaseCollectionInput, createBaseCollectionInput } from './base-collection-action';\nimport getInventoryRefinerAction, { InventoryInStockRefinerValueInput } from './get-inventory-refiners';\n\n/**\n * GetFullProductsByCollection Action Input.\n */\nexport class GetFullProductsByCollectionInput extends BaseCollectionInput implements IActionInput {\n /**\n * The cache object type.\n * @returns The cache object type.\n */\n public getCacheObjectType = (): string => 'FullProductSearchResult';\n\n /**\n * The data cache type.\n * @returns The data cache type.\n */\n public dataCacheType = (): CacheType => {\n if (\n this.pageType !== 'Category' ||\n (this.refiners && this.refiners.length > 0) ||\n (this.queryResultSettings &&\n this.queryResultSettings.Sorting &&\n this.queryResultSettings.Sorting.Columns &&\n this.queryResultSettings.Sorting.Columns.length > 0)\n ) {\n return 'request';\n }\n return 'application';\n };\n}\n\n/**\n * This setting defines inventory filtering options.\n */\nexport enum ProductListInventoryFilteringOptions {\n /**\n * Filter out all products out of stock.\n */\n HideOOS = 'hideOOS',\n\n /**\n * Sort products by availability, OOS goes last.\n */\n SortOOS = 'sortOOS',\n\n /**\n * No filtering selected.\n */\n Default = 'default'\n}\n\n/**\n * The full product search result with count interface.\n */\nexport interface IFullProductsSearchResultsWithCount {\n products: ProductSearchResult[];\n count: number;\n channelInventoryConfigurationId?: number;\n inventoryAwareSortableAttributeId?: number;\n}\n\n/**\n * CreateInput function which creates and actionInput used to fetch products for a list page.\n * @param args - The API arguments.\n * @returns IActionInput - The action input.\n */\nconst createInput = (args: ICreateActionContext<{ itemsPerPage: number; includedAttributes: boolean | undefined }>): IActionInput => {\n const input = createBaseCollectionInput(args, GetFullProductsByCollectionInput);\n\n // Set Top\n if (input.queryResultSettings.Paging && args.config) {\n input.queryResultSettings.Paging.Top = args.config.itemsPerPage || 1;\n }\n\n // Set Skip\n if (input.queryResultSettings.Paging && args.requestContext.query && args.requestContext.query.skip) {\n input.queryResultSettings.Paging.Skip = +args.requestContext.query.skip;\n }\n\n input.queryResultSettings.count = true;\n\n return input;\n};\n\n/**\n * Returns inventory in stock refiner value.\n * @param input - The inventory refiner input.\n * @param context - The request context.\n * @param channelInventoryConfiguration - The channelInventoryConfiguration.\n * @returns Refiners.\n */\nasync function getInventoryInStockRefinerValueAsync(\n input: GetFullProductsByCollectionInput,\n context: IActionContext,\n channelInventoryConfiguration: ChannelInventoryConfiguration\n): Promise {\n let inventoryRefiner = input.inventoryRefiner;\n // For hydrate, the inventory refiner is not added on input parameter, need to query the inventory refiner\n // For reaction in browser, the inventory refiner is added in componentDidMount of search-result-container\n if (!inventoryRefiner) {\n const refinerInput = new InventoryInStockRefinerValueInput(input, channelInventoryConfiguration.InventoryProductAttributeRecordId);\n inventoryRefiner = await getInventoryRefinerAction(refinerInput, context);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- inventoryRefiner may be null\n return (\n inventoryRefiner?.Values.find(\n value =>\n value.LeftValueBoundString !== channelInventoryConfiguration.InventoryOutOfStockAttributeValueText &&\n value.RightValueBoundString !== channelInventoryConfiguration.InventoryOutOfStockAttributeValueText\n ) ?? null\n );\n}\n\n/**\n * Returns list of products based on inventory information.\n * @param productSearchResults - The products.\n * @param context - The context.\n * @param metadataCount - The metadata count.\n * @param channelInventoryConfiguration - The channel inventory configuration.\n * @returns List of product based on the inventory information.\n */\nexport async function returnProducts(\n productSearchResults: ProductSearchResult[],\n context: IActionContext,\n metadataCount: number | undefined,\n channelInventoryConfiguration?: ChannelInventoryConfiguration\n): Promise {\n const defaultProductCount: number = 0;\n\n const productSearchResultsWithImages = productSearchResults.map(productSearchResult => {\n const newImageUrl = generateProductImageUrl(productSearchResult, context.requestContext.apiSettings);\n\n if (newImageUrl) {\n productSearchResult.PrimaryImageUrl = newImageUrl;\n }\n\n return productSearchResult;\n });\n\n // If inventory level is threshold or inventory check is disabled then return the list of products without the inventory configuration\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- read config file.\n if (\n context.requestContext.app.config.inventoryLevel === InventoryLevels.threshold ||\n context.requestContext.app.config.enableStockCheck === false\n ) {\n return {\n products: productSearchResultsWithImages,\n count: metadataCount ?? defaultProductCount\n };\n }\n\n const mappedProducts = productSearchResultsWithImages.map(productSearchResult => {\n if (ArrayExtensions.hasElements(productSearchResult.AttributeValues)) {\n for (const element of productSearchResult.AttributeValues) {\n if (\n channelInventoryConfiguration &&\n element.RecordId !== undefined &&\n element.RecordId === channelInventoryConfiguration.InventoryProductAttributeRecordId &&\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- read config file.\n context.requestContext.app.config.inventoryRanges !== 'all' &&\n element.TextValue !== channelInventoryConfiguration.InventoryOutOfStockAttributeValueText\n ) {\n // If same RecordId then it means that is the Inventory attribute\n // Based on the inventory range (and filtering options), the inventory label will be displayed\n // If Inventory range is 'All' then in stock and out of stock labels are shown, else only OOS\n // if the text value is different that the channelInventoryConfiguration.InventoryOutOfStockAttributeValueText then is in stock\n element.TextValue = '';\n }\n }\n }\n\n return productSearchResult;\n });\n\n return {\n products: mappedProducts,\n count: metadataCount ?? defaultProductCount,\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- check config.\n channelInventoryConfigurationId: channelInventoryConfiguration\n ? channelInventoryConfiguration.InventoryProductAttributeRecordId\n : undefined,\n inventoryAwareSortableAttributeId: channelInventoryConfiguration\n ? channelInventoryConfiguration.ProductAvailabilitySortableAttributeRecordId\n : undefined\n };\n}\n\n/**\n * Action function to fetch products for a list page.\n * @param input - The input.\n * @param context - The context.\n * @returns IFullProductsSearchResultsWithCount - The full product search result with count.\n */\n// eslint-disable-next-line complexity -- ignore the complexity.\nasync function action(input: GetFullProductsByCollectionInput, context: IActionContext): Promise {\n let promise: AsyncResult;\n let channelInventoryConfigurationPromise: AsyncResult;\n let searchProductId;\n const searchCriteriaInput: ProductSearchCriteria = {};\n searchCriteriaInput.Context = { ChannelId: context.requestContext.apiSettings.channelId, CatalogId: input.catalogId };\n searchCriteriaInput.Refinement = input.refiners;\n searchCriteriaInput.IncludeAttributes = input.includeAttributes;\n searchCriteriaInput.SkipVariantExpansion = true;\n const defaultNumber: number = 0;\n console.log(' input.refiners : ', input.refiners);\n\n if (input.channelInventoryConfiguration) {\n channelInventoryConfigurationPromise = AsyncResult.resolve(input.channelInventoryConfiguration);\n } else {\n channelInventoryConfigurationPromise = getInventoryConfigurationAsync({ callerContext: context });\n }\n const channelInventoryConfiguration = await channelInventoryConfigurationPromise;\n\n if (context.requestContext.app.config?.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS) {\n const inventoryInStockRefinerValue = await getInventoryInStockRefinerValueAsync(input, context, channelInventoryConfiguration);\n\n const isInventoryInStockRefinerValueExist = searchCriteriaInput.Refinement.some(\n refiner => refiner.RefinerRecordId === inventoryInStockRefinerValue?.RefinerRecordId\n );\n if (!isInventoryInStockRefinerValueExist && inventoryInStockRefinerValue) {\n searchCriteriaInput.Refinement.push(inventoryInStockRefinerValue);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n if (\n context.requestContext.app.config?.productListInventoryDisplay === ProductListInventoryFilteringOptions.SortOOS &&\n channelInventoryConfiguration.ProductAvailabilitySortableAttributeRecordId\n ) {\n input.queryResultSettings.Sorting = input.queryResultSettings.Sorting ?? {};\n input.queryResultSettings.Sorting.Columns = input.queryResultSettings.Sorting.Columns ?? [];\n const sortColumnName = `Attr_${channelInventoryConfiguration.ProductAvailabilitySortableAttributeRecordId}`;\n const isSortAttributeExist = input.queryResultSettings.Sorting.Columns.some(column => column.ColumnName === sortColumnName);\n if (!isSortAttributeExist) {\n input.queryResultSettings.Sorting.Columns.push({\n ColumnName: sortColumnName,\n IsDescending: true\n });\n }\n }\n\n if (input.pageType === 'Category' || context.requestContext.query?.categoryId) {\n if (input.category) {\n searchCriteriaInput.CategoryIds = [input.category || defaultNumber];\n promise = searchByCriteriaAsync(\n {\n callerContext: context,\n queryResultSettings: input.queryResultSettings\n },\n searchCriteriaInput\n );\n } else {\n throw new Error('[GetFullProductsForCollection]Category Page Detected, but no global categoryId found');\n }\n } else if (input.searchText && context.requestContext.query?.q) {\n searchCriteriaInput.SearchCondition = input.searchText;\n promise = searchByCriteriaAsync(\n {\n callerContext: context,\n queryResultSettings: input.queryResultSettings\n },\n searchCriteriaInput\n );\n } else if (input.searchText && context.requestContext.query && context.requestContext.query.recommendation) {\n const searchObject = JSON.parse(input.searchText);\n if (context.requestContext.query.productId) {\n searchProductId = Number(searchObject.ProductId);\n }\n if (Number.isNaN(searchProductId)) {\n throw new Error('Failed to cast search product id into a number.');\n } else if (\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Existing code\n !searchObject.Recommendation\n ) {\n throw new Error('Failed to retrieve the Recommendation.');\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- Existing code\n searchCriteriaInput.RecommendationListId = searchObject.Recommendation;\n if (searchProductId) {\n searchCriteriaInput.Ids = [searchProductId || defaultNumber];\n }\n promise = searchByCriteriaAsync(\n {\n callerContext: context,\n queryResultSettings: input.queryResultSettings\n },\n searchCriteriaInput\n );\n }\n } else {\n throw new Error('[GetFullProductsForCollection]Search Page Detected, but no q= or productId= query parameter found');\n }\n\n const productSearchResults = await promise;\n return returnProducts(productSearchResults, context, promise.metadata.count, channelInventoryConfiguration);\n}\n\nexport const actionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/search-result-container/get-full-products-by-collection',\n action: action as IAction,\n input: createInput\n});\n\nexport default actionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { BaseCollectionInput } from './base-collection-action';\nimport { getProductRefinerHierarchy } from './get-product-refiner-hierarchy';\n\n/**\n * InventoryInStockRefinerValue Input action.\n */\nexport class InventoryInStockRefinerValueInput extends BaseCollectionInput implements IActionInput {\n public inventoryProductAttributeRecordId: number;\n\n public constructor(input: BaseCollectionInput, inventoryProductAttributeRecordId: number = 0) {\n super(\n input.pageType,\n input.apiSettings,\n {\n count: true\n },\n\n // Parameter - refiners\n [],\n\n // Parameter - category\n undefined,\n\n // Parameter - searchText\n '',\n\n // Parameter - includeAttributes\n false,\n\n // Parameter - isUpdateRefinerPanel\n false,\n\n // Parameter - locale\n undefined,\n input.catalogId,\n input.channelInventoryConfiguration,\n input.inventoryRefiner\n );\n\n this.inventoryProductAttributeRecordId =\n inventoryProductAttributeRecordId || input.channelInventoryConfiguration?.InventoryProductAttributeRecordId || 0;\n }\n\n /**\n * GetCacheKey.\n * @returns - Returns string.\n */\n public getCacheKey = (): string => buildCacheKey('RefinerList', this.apiSettings);\n\n /**\n * GetCacheObjectType.\n * @returns - Returns string.\n */\n public getCacheObjectType = (): string => 'RefinerList';\n\n /**\n * DataCacheType.\n * @returns - CacheType string.\n */\n public dataCacheType = (): CacheType => 'application';\n}\n\n/**\n * Action method returns inventory in stock refiners.\n * @param input - InventoryInStockRefinerValueInput.\n * @param context - IActionContext.\n * @returns - Promise.\n */\nasync function action(input: InventoryInStockRefinerValueInput, context: IActionContext): Promise {\n const refiners = await getProductRefinerHierarchy(\n {\n Context: {\n ChannelId: input.apiSettings.channelId,\n CatalogId: input.catalogId\n }\n },\n input.queryResultSettings,\n context\n );\n\n // InventoryProductAttributeRecordId may be 0, and recId of default refiner Category/Price/Rating is always 0 by design. In this case, we should not return refiner\n // Why recId of default refiner Category/Price/Rating is 0: see GetChannelProductRefiners.sql\n return (\n (input.channelInventoryConfiguration?.InventoryProductAttributeRecordId !== 0 &&\n refiners.find(refiner => refiner.RecordId === input.channelInventoryConfiguration?.InventoryProductAttributeRecordId)) ||\n // keep legacy logic to avoid break existing customers usage from this file\n (input.inventoryProductAttributeRecordId !== 0 &&\n refiners.find(refiner => refiner.RecordId === input.inventoryProductAttributeRecordId)) ||\n null\n );\n}\n\n/**\n * Action.\n * @param id - Id.\n * @param action - Action.\n * @returns - Results.\n */\nexport const actionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/search-result-container/get-inventory-refiners',\n action: action as IAction\n});\n\nexport default actionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { SortColumn } from '@msdyn365-commerce/retail-proxy';\nimport { getSearchConfigurationAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\n\n// TODO: import from commerce entities when available\n// eslint-disable-next-line @typescript-eslint/naming-convention -- Name change will require many modifications\ninterface SearchConfiguration {\n ProductSortColumns?: SortColumn[];\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention -- Name change will require many modifications\nexport interface MappedSearchConfiguration {\n key: string;\n sortColumn: SortColumn;\n}\n\nexport const sortOptions = {\n sortByOptionRelevanceDesc: 'Ranking-Desc',\n sortByOptionRatingAsc: 'AverageRating-Asc',\n sortByOptionRatingDesc: 'AverageRating-Desc',\n sortByOptionNameAsc: 'Name-Asc',\n sortByOptionNameDesc: 'Name-Desc',\n sortByOptionPriceAsc: 'Price-Asc',\n sortByOptionPriceDesc: 'Price-Desc',\n sortByOptionBestSelling: 'BestSelling',\n sortByOptionNewScore: 'NewScore',\n sortByOptionTrendingScore: 'TrendingScore'\n};\n\n/**\n * ActionInput class for the get-mapped-search-configuration Data Action.\n */\nexport class MappedSearchInput implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('MappedSearchInput', this.apiSettings);\n\n public getCacheObjectType = () => 'MappedSearchInput';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Get a mapped search configuration that is easy to use for sorting.\n * @param input\n * @param ctx\n */\nexport async function getMappedSearchConfiguration(input: MappedSearchInput, ctx: IActionContext): Promise {\n return getSearchConfigurationAsync({ callerContext: ctx }).then((searchConfiguration: SearchConfiguration) => {\n return (searchConfiguration.ProductSortColumns || [])\n .map((sortColumn: SortColumn) => {\n let key = '';\n if (sortColumn.ColumnName) {\n switch (sortColumn.ColumnName.toUpperCase()) {\n case 'NAME':\n key = sortColumn.IsDescending ? sortOptions.sortByOptionNameDesc : sortOptions.sortByOptionNameAsc;\n break;\n case 'PRICE':\n key = sortColumn.IsDescending ? sortOptions.sortByOptionPriceDesc : sortOptions.sortByOptionPriceAsc;\n break;\n case 'AVERAGERATING':\n key = sortColumn.IsDescending ? sortOptions.sortByOptionRatingDesc : sortOptions.sortByOptionRatingAsc;\n break;\n case 'RANKING':\n key = sortOptions.sortByOptionRelevanceDesc;\n break;\n case 'BESTSELLINGSCORE':\n key = sortOptions.sortByOptionBestSelling;\n break;\n case 'NEWSCORE':\n key = sortOptions.sortByOptionNewScore;\n break;\n case 'TRENDINGSCORE':\n key = sortOptions.sortByOptionTrendingScore;\n break;\n default:\n }\n } else {\n ctx.telemetry.warning('[get-mapped-search-configuration] unknown search option');\n }\n if (key) {\n return {\n key,\n sortColumn\n };\n }\n return undefined;\n })\n .filter(Boolean);\n });\n}\n\nexport const createInput = (inputData: ICreateActionContext>): IActionInput => {\n return new MappedSearchInput(inputData.requestContext.apiSettings);\n};\n\nexport const getMappedSearchConfigurationDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/search-result-container/get-mapped-search-configuration',\n action: >getMappedSearchConfiguration,\n input: createInput\n});\n\nexport default getMappedSearchConfigurationDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { IQueryResultSettings, ProductRefiner, ProductSearchCriteria } from '@msdyn365-commerce/retail-proxy';\nimport { getProductSearchRefinersAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\n\n/**\n * Uses Bulk refiner API to get refiners and child refiner values.\n * @param searchCriteria Product search criteria.\n * @param maxItems Max items.\n * @param queryResultSettings\n * @param ctx Action context.\n */\nexport async function getProductRefinerHierarchy(\n searchCriteria: ProductSearchCriteria,\n queryResultSettings: IQueryResultSettings,\n ctx: IActionContext\n): Promise {\n return getProductSearchRefinersAsync({ callerContext: ctx, queryResultSettings }, searchCriteria).then(\n (productRefiners: ProductRefiner[]) => {\n if (!productRefiners) {\n ctx.trace('[getRefinersByCriteriaAction] returned no refiners');\n return [];\n }\n\n const result = (productRefiners || []).map((productRefiner: ProductRefiner) => productRefiner);\n\n if (result.length === 0) {\n ctx.trace('[getRefinersByCriteriaAction] returned no IProductRefinerHierarchy objects');\n return [];\n }\n\n return result;\n }\n );\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { createObservableDataAction, IAction, IActionContext, IActionInput, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { AsyncResult, ChannelInventoryConfiguration, ProductRefinerValue, ProductSearchCriteria } from '@msdyn365-commerce/retail-proxy';\nimport { getInventoryConfigurationAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\n\nimport { BaseCollectionInput, createBaseCollectionInput } from './base-collection-action';\nimport { getProductRefinerHierarchy } from './get-product-refiner-hierarchy';\nimport { getInventoryRefinerAction, InventoryInStockRefinerValueInput, ProductListInventoryFilteringOptions } from '.';\n\n/**\n * Default Category/Product Id Values.\n */\nenum DefaultValues {\n defaultCategoryIdValue = 0,\n defaultProductIdValue = 0\n}\n\n/**\n * Refiners-by-Collection Input action.\n */\nexport class RefinersByCollectionInput extends BaseCollectionInput implements IActionInput {\n public getCacheObjectType = () => 'ProductRefiner';\n\n public dataCacheType = () => {\n if (\n this.pageType !== 'Category' ||\n (this.refiners && this.refiners.length > 0) ||\n (this.queryResultSettings &&\n this.queryResultSettings.Sorting &&\n this.queryResultSettings.Sorting.Columns &&\n this.queryResultSettings.Sorting.Columns.length > 0)\n ) {\n return 'request';\n }\n return 'application';\n };\n}\n\n/**\n * Create input method which creates an ActionInput for fetching list page refiners.\n * @param args\n */\nconst createInput = (args: ICreateActionContext): IActionInput => {\n return createBaseCollectionInput(args, RefinersByCollectionInput);\n};\n\n/**\n * Returns inventory in stock refiner value.\n * @param input - The inventory refiner input.\n * @param context - The request context.\n * @param channelInventoryConfiguration - The channelInventoryConfiguration.\n * @returns Refiners.\n */\nasync function getInventoryInStockRefinerValueAsync(\n input: RefinersByCollectionInput,\n context: IActionContext,\n channelInventoryConfiguration: ChannelInventoryConfiguration\n): Promise {\n let inventoryRefiner = input.inventoryRefiner;\n // For hydrate, the inventory refiner is not added on input parameter, need to query the inventory refiner\n // For reaction in browser, the inventory refiner is added in componentDidMount of search-result-container\n if (!inventoryRefiner) {\n const refinerInput = new InventoryInStockRefinerValueInput(input, channelInventoryConfiguration.InventoryProductAttributeRecordId);\n inventoryRefiner = await getInventoryRefinerAction(refinerInput, context);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- inventoryRefiner may be null\n return (\n inventoryRefiner?.Values.find(\n value =>\n value.LeftValueBoundString !== channelInventoryConfiguration.InventoryOutOfStockAttributeValueText &&\n value.RightValueBoundString !== channelInventoryConfiguration.InventoryOutOfStockAttributeValueText\n ) ?? null\n );\n}\n\n/**\n * Action method which fetches refiners for the given list page.\n * @param input\n * @param context\n */\nasync function action(input: RefinersByCollectionInput, context: IActionContext): Promise {\n let searchProductId;\n const refiners: ProductRefinerValue[] = input.refiners || [];\n\n if (context.requestContext.app.config?.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS) {\n let channelInventoryConfigurationPromise: AsyncResult;\n if (input.channelInventoryConfiguration) {\n channelInventoryConfigurationPromise = AsyncResult.resolve(input.channelInventoryConfiguration);\n } else {\n channelInventoryConfigurationPromise = getInventoryConfigurationAsync({ callerContext: context });\n }\n const channelInventoryConfiguration = await channelInventoryConfigurationPromise;\n const inventoryInStockRefinerValue = await getInventoryInStockRefinerValueAsync(input, context, channelInventoryConfiguration);\n\n const isInventoryInStockRefinerValueExist = refiners.some(\n refiner => refiner.RefinerRecordId === inventoryInStockRefinerValue?.RefinerRecordId\n );\n if (!isInventoryInStockRefinerValueExist && inventoryInStockRefinerValue) {\n refiners.push(inventoryInStockRefinerValue);\n }\n }\n\n if (input.pageType === 'Category') {\n if (input.category) {\n return getProductRefinerHierarchy(\n {\n CategoryIds: [input.category || DefaultValues.defaultCategoryIdValue],\n Context: {\n ChannelId: input.apiSettings.channelId,\n CatalogId: input.catalogId\n },\n Refinement: input.isUpdateRefinerPanel ? refiners : []\n },\n input.queryResultSettings,\n context\n );\n }\n throw new Error('[GetRefinersForCollection]Category Page Detected, but no global categoryId found');\n } else {\n if (input.searchText && context.requestContext.query && context.requestContext.query.q) {\n return getProductRefinerHierarchy(\n {\n SearchCondition: input.searchText,\n Context: {\n ChannelId: input.apiSettings.channelId,\n CatalogId: input.catalogId\n },\n Refinement: input.isUpdateRefinerPanel ? refiners : []\n },\n input.queryResultSettings,\n context\n );\n }\n if (input.searchText && context.requestContext.query && context.requestContext.query.recommendation) {\n const searchObject = JSON.parse(input.searchText);\n if (context.requestContext.query.productId) {\n searchProductId = Number(searchObject.ProductId);\n }\n if (Number.isNaN(searchProductId)) {\n throw new Error('Failed to cast search product id into a number.');\n } else if (!searchObject.Recommendation) {\n throw new Error('Failed to retrieve the Recommendation.');\n } else {\n const searchCriteriaInput: ProductSearchCriteria = {};\n searchCriteriaInput.Context = {\n ChannelId: input.apiSettings.channelId,\n CatalogId: input.catalogId\n };\n searchCriteriaInput.Refinement = input.isUpdateRefinerPanel ? refiners : [];\n searchCriteriaInput.RecommendationListId = searchObject.Recommendation;\n if (searchProductId) {\n searchCriteriaInput.Ids = [searchProductId || DefaultValues.defaultProductIdValue];\n }\n return getProductRefinerHierarchy(searchCriteriaInput, input.queryResultSettings, context);\n }\n } else {\n throw new Error('[GetFullProductsForCollection]Search Page Detected, but no q= or productId= query parameter found');\n }\n }\n}\n\nexport const actionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/search-result-container/get-refiners-for-collection',\n action: >action,\n input: createInput\n});\n\nexport default actionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport MsDyn365, { IRequestContext } from '@msdyn365-commerce/core';\nimport { ProductRefinerValue, SortColumn } from '@msdyn365-commerce/retail-proxy';\n\n/**\n * Refiner Compression:\n * Refiners contains a non-trivial amount of data that is required to successfully make\n * a refiner-based API call. To allow for deep-linking of refiners in the URL, refiner data\n * must be compressed so that URL max length is not exceeded. Refiners will be compressed into\n * the following array style index-based format:\n * [DataTypeValue, LeftValueBoundString, RefinerRecordId, RefinerSourceValue, RightValueBoundString, UnitText].\n */\nconst compressedRefinerKeys = [\n 'DataTypeValue',\n 'LeftValueBoundString',\n 'RefinerRecordId',\n 'RefinerSourceValue',\n 'RightValueBoundString',\n 'UnitText'\n];\n\n/**\n * Hydrates compressed refiner data from URL.\n * @param fullUrl The full URL of the page.\n * @param requestContext\n */\nexport const hydrateRefinersFromUrl = (requestContext: IRequestContext): ProductRefinerValue[] => {\n const compressedRefinerArray = parseQueryParam<(string | number)[][]>('refiners', requestContext);\n if (!compressedRefinerArray || compressedRefinerArray.length === 0) {\n return [];\n }\n\n return compressedRefinerArray\n .map(compressedRefiner => {\n try {\n const parsedRefiner: ProductRefinerValue = {};\n compressedRefinerKeys.forEach((refinerKey, index) => {\n parsedRefiner[refinerKey] = compressedRefiner[index];\n });\n return parsedRefiner;\n } catch {\n return undefined;\n }\n })\n .filter(Boolean);\n};\n\n/**\n * Compressed a list of refiners for use in URLs.\n * @param refiners The uncompressed refiners.\n */\nexport const compressRefiners = (refiners: ProductRefinerValue[]) => {\n const compressedRefiners: (string | number)[][] = [];\n\n refiners.forEach(refiner => {\n const compressedRefiner: (string | number)[] = [];\n compressedRefinerKeys.forEach(refinerKey => {\n compressedRefiner.push(refiner[refinerKey]);\n });\n compressedRefiners.push(compressedRefiner);\n });\n\n return compressedRefiners;\n};\n\n/**\n * Method which creates a URL contiaining serialized active refiners.\n * @param fullUrl The Current URL of the page.\n * @param refiners The refiners which should be added to the URL.\n * @param sortingColumns\n * @param skipCount\n */\nexport const buildListPageUrl = (fullUrl: URL, refiners?: ProductRefinerValue[], sortingColumns?: SortColumn[], skipCount?: number) => {\n // Refiner Change flow\n if (refiners !== undefined) {\n if (refiners.length === 0) {\n fullUrl.searchParams.delete('refiners');\n } else {\n const sortedRefiners = refiners.sort((first, second) =>\n first.RefinerRecordId && second.RefinerRecordId && first.RefinerRecordId > second.RefinerRecordId ? 1 : -1\n );\n fullUrl.searchParams.set('refiners', JSON.stringify(compressRefiners(sortedRefiners)));\n }\n\n // Adding or removing a refiner means we want to always load page 1\n fullUrl.searchParams.delete('skip');\n return fullUrl.href;\n }\n\n if (sortingColumns !== undefined) {\n if (sortingColumns.length === 0) {\n fullUrl.searchParams.delete('sorting');\n } else {\n fullUrl.searchParams.set('sorting', JSON.stringify(sortingColumns));\n }\n\n // Changing the sort means always load page 1\n fullUrl.searchParams.delete('skip');\n return fullUrl.href;\n }\n\n if (skipCount) {\n fullUrl.searchParams.set('skip', skipCount.toString());\n }\n\n return fullUrl.href;\n};\n\n/**\n * Parses a query param from the query object of the request context.\n * @param key The query parameter key.\n * @param requestContext The request context.\n */\nexport const parseQueryParam = (key: string, requestContext: IRequestContext): T | null => {\n if (requestContext.query && requestContext.query[key]) {\n return JSON.parse(decodeURIComponent(requestContext.query[key]));\n }\n return null;\n};\n\n/**\n * Gets the current URL of the page from the request context.\n * @param requestContext The request context.\n */\nexport const getCurrentUrl = (requestContext: IRequestContext): URL => {\n if (MsDyn365.isBrowser) {\n return new URL(window.location.href);\n }\n\n // NOTE: Typing on requestURL is incorrect\n if (requestContext.url.requestUrl.href) {\n return new URL(requestContext.url.requestUrl.href);\n }\n return new URL((requestContext.url.requestUrl));\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { ProductPrice, ProductRefinerValue, ProductSearchResult, SimpleProduct, SortingInfo } from '@msdyn365-commerce/retail-proxy';\nimport { observable } from 'mobx';\n\nimport { listPageType } from './actions';\n\n/**\n * ListPageState class.\n */\nexport class ListPageState {\n @observable public activeFilters: ProductRefinerValue[] | null = null;\n\n @observable public activeProducts: ProductSearchResult[] = [];\n\n @observable public sortingCritera: SortingInfo | null = null;\n\n @observable public currentPageNumber: number | null = null;\n\n @observable public refiners: IProductRefinerHierarchy[] | null = null;\n\n @observable public totalProductCount: number | undefined;\n\n @observable public pageSize: number = 10;\n\n @observable public pageType: listPageType = 'Unknown';\n\n @observable public featureProduct: SimpleProduct | null = null;\n\n @observable public productPrices: ProductPrice[] | undefined = [];\n}\n\n/**\n * ListPageStateInput - action input.\n */\nexport class ListPageStateInput implements IActionInput {\n public getCacheKey = () => 'ListPageState';\n\n public getCacheObjectType = () => 'ListPageState';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\nexport async function listPageStateAction(input: ListPageStateInput, ctx: IActionContext): Promise {\n return new ListPageState();\n}\n\n/**\n * Create new input for create action.\n * @param inputData\n */\nexport const createListPageInput = (inputData: ICreateActionContext>): IActionInput => {\n return new ListPageStateInput();\n};\n\n/**\n * ListPageState - create action.\n */\nexport default createObservableDataAction({\n action: >listPageStateAction,\n input: createListPageInput\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { ITelemetry } from '@msdyn365-commerce/core';\nimport { AttributeDataType, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\n\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\n\n/**\n * Types of product refiner values.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerValueDataTypeValue {\n /**\n * Range slider is used for selections like price.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Range = 1,\n\n /**\n * Range input is a different way to specify ranges and can be expressed with input boxes\n * as well as a set of discrete single-select type values.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n RangeInput = 4,\n\n /**\n * This is a discrete list item, either multi-select or single-select.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n List = 5,\n\n /**\n * Boolean types allows only single-select.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Boolean = 6\n}\n\n/**\n * Types of product refiners.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerTypeValue {\n /**\n * Refiner values are single-select.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Single = 0,\n\n /**\n * Refiner values are multi-select.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Multi = 1\n}\n\n/**\n * ProductRefinerSource enum type.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerSource {\n /**\n * The None member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n None = 0,\n\n /**\n * The Attribute member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Attribute = 1,\n\n /**\n * The Category member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Category = 2,\n\n /**\n * The Price member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Price = 3,\n\n /**\n * The Rating member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Rating = 4\n}\n\n/**\n * Checks if the data type value corresponds to a slider.\n * @param dataTypeValue\n */\nexport function isRangeType(dataTypeValue: number | undefined): boolean {\n return (\n dataTypeValue === AttributeDataType.Currency ||\n dataTypeValue === AttributeDataType.Decimal ||\n dataTypeValue === AttributeDataType.Integer\n );\n}\n\n/**\n * Find the refinement criterion associated with this product refiner value.\n * @param productRefinerValue Product refiner value to match.\n * @param refinementCriteria Selected refinement criteria.\n */\nexport function findMatchingRefinementCriterion(\n productRefinerValue: ProductRefinerValue,\n refinementCriteria: ProductRefinerValue[]\n): ProductRefinerValue | undefined {\n // If the value is a range, then match only on data type value; otherwise match on item string\n return refinementCriteria.find((refinementCriterion: ProductRefinerValue) =>\n isMatchingRefinementCriterion(productRefinerValue, refinementCriterion)\n );\n}\n\n/**\n * Find the refinement criterion associated with this product refiner value.\n * @param productRefinerValue Product refiner value to match.\n * @param refinementCriteria Selected refinement criteria.\n * @param refinementCriterion\n */\nexport function isMatchingRefinementCriterion(productRefinerValue: ProductRefinerValue, refinementCriterion: ProductRefinerValue): boolean {\n // If the value is a range, then match only on data type value; otherwise match on item string\n return (\n refinementCriterion.RefinerRecordId === productRefinerValue.RefinerRecordId &&\n refinementCriterion.RefinerSourceValue === productRefinerValue.RefinerSourceValue &&\n refinementCriterion.DataTypeValue === productRefinerValue.DataTypeValue &&\n (isRangeType(refinementCriterion.DataTypeValue) ||\n refinementCriterion.LeftValueBoundString === productRefinerValue.LeftValueBoundString)\n );\n}\n\nexport function getUpdatedRefinementCriteria(\n itemToggleNotification: IRefineItemToggleNotification,\n currentRefinementCriteria: ProductRefinerValue[]\n): ProductRefinerValue[] {\n const updatedRefinementCriteria: ProductRefinerValue[] = [];\n let toggledItemFound = false;\n currentRefinementCriteria.forEach((selectedCriterion: ProductRefinerValue) => {\n if (isMatchingRefinementCriterion(itemToggleNotification.productRefinerValue, selectedCriterion)) {\n toggledItemFound = true;\n if (itemToggleNotification.isSelecting) {\n const next = {\n ...selectedCriterion,\n LeftValueBoundString:\n (itemToggleNotification.rangeStart !== undefined && `${itemToggleNotification.rangeStart}`) ||\n selectedCriterion.LeftValueBoundString,\n RightValueBoundString:\n (itemToggleNotification.rangeEnd !== undefined && `${itemToggleNotification.rangeEnd}`) ||\n selectedCriterion.RightValueBoundString\n };\n updatedRefinementCriteria.push(next);\n } // Else the item is being de-selected, so omit it from the refinement criteria\n } else {\n // Keep existing criterion because it is not in the item toggle notification\n updatedRefinementCriteria.push(selectedCriterion);\n }\n });\n\n if (!toggledItemFound) {\n const next = {\n ...itemToggleNotification.productRefinerValue,\n LeftValueBoundString:\n (itemToggleNotification.rangeStart !== undefined && `${itemToggleNotification.rangeStart}`) ||\n itemToggleNotification.productRefinerValue.LeftValueBoundString,\n RightValueBoundString:\n (itemToggleNotification.rangeEnd !== undefined && `${itemToggleNotification.rangeEnd}`) ||\n itemToggleNotification.productRefinerValue.RightValueBoundString\n };\n updatedRefinementCriteria.push(next);\n\n // If single select, then deselect any others in the parent refiner group\n if (\n (itemToggleNotification.productRefinerValue.DataTypeValue === AttributeDataType.Text ||\n itemToggleNotification.productRefinerValue.DataTypeValue === AttributeDataType.TrueFalse) &&\n itemToggleNotification.parentProductRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect\n ) {\n itemToggleNotification.parentProductRefinerHierarchy.Values.forEach((child: ProductRefinerValue) => {\n if (child.RefinerRecordId === next.RefinerRecordId && child.LeftValueBoundString === next.LeftValueBoundString) {\n // Do nothing\n } else {\n const matchingIndex = updatedRefinementCriteria.findIndex((criterion: ProductRefinerValue) =>\n isMatchingRefinementCriterion(child, criterion)\n );\n if (matchingIndex > -1) {\n updatedRefinementCriteria.splice(matchingIndex, 1);\n }\n }\n });\n }\n }\n\n return updatedRefinementCriteria;\n}\n\nexport function formatPrice(\n amount: string | undefined,\n currency: string | undefined,\n locale: string | undefined,\n telemetry: ITelemetry\n): string {\n if (!amount || !currency) {\n telemetry.trace(`[refine-menu.utilities.formatPrice] could not format price for ${amount} ${currency}`);\n return amount || '';\n }\n const priceAmount = (amount && Number(amount)) || 0;\n let result: string;\n\n try {\n result = new Intl.NumberFormat(locale, {\n style: 'currency',\n currencyDisplay: 'symbol',\n currency,\n minimumFractionDigits: 0\n }).format(priceAmount);\n } catch (error) {\n result = `${priceAmount} ${currency}`;\n telemetry.warning(`[refine-menu.utilities.formatPrice] Failed to format price for ${result}: ${error}`);\n }\n\n return result;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { ProductRefinerValue } from '@msdyn365-commerce/retail-proxy';\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ProductListInventoryFilteringOptions } from '../actions';\nimport { IChoiceSummaryProps } from './choice-summary.props';\nimport { isMatchingRefinementCriterion, isRangeType } from './utilities';\n\ninterface IRefinerMap {\n key: string;\n value: ProductRefinerValue;\n}\n\n/**\n * ChoiceSummary component.\n */\n@observer\nexport default class ChoiceSummary extends React.PureComponent {\n private readonly closeButtonGlyph: string = 'msi-close-btn';\n\n private readonly payLoad: IPayLoad;\n\n @computed get selectedRefinersMap(): IRefinerMap[] {\n let { selectedChoices } = this.props;\n const { channelInventoryConfigurationId, refinerHierarchy } = this.props;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n if (this.props.context?.app.config.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS) {\n selectedChoices = selectedChoices.filter(choice => {\n const parent = refinerHierarchy.find(\n (hierarchy: IProductRefinerHierarchy) =>\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, choice))\n );\n return parent && parent.RecordId !== channelInventoryConfigurationId;\n });\n }\n return selectedChoices.map((selectedRefiner: ProductRefinerValue, index) => {\n return {\n key: this._getKeyForRefinerValue(selectedRefiner, index.toString()),\n value: selectedRefiner\n } as IRefinerMap;\n });\n }\n\n constructor(props: Readonly) {\n super(props);\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n }\n\n public render(): JSX.Element {\n const { clearAllText, label, classNames, choiceAriaLabel, closeAriaLabel } = this.props;\n const items = this.selectedRefinersMap;\n this.payLoad.contentAction.etext = clearAllText;\n const clearAllAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n return (\n
\n {items.length > 0 && label && {label}}\n
    \n {items.map((item: IRefinerMap) => {\n this.payLoad.contentAction.etext = item.key;\n const attribute = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n\n return (\n
  • \n \n {item.value.LeftValueBoundString && item.value.LeftValueBoundLocalizedString === ''\n ? item.value.LeftValueBoundString\n : (item.value.LeftValueBoundLocalizedString ||\n item.value.LeftValueBoundLocalizedString === undefined) &&\n item.value.RefinerRecordId === 0\n ? item.key\n : item.value.LeftValueBoundString}\n \n \n
  • \n );\n })}\n
\n {items.length > 0 && clearAllText && (\n \n {clearAllText}\n \n )}\n
\n );\n }\n\n private _getKeyForRefinerValue(productRefinerValue: ProductRefinerValue, index: string): string {\n const { choiceFormat, choiceRangeValueFormat, refinerHierarchy, telemetry, refinerValues } = this.props;\n const overallFormat = choiceFormat || '{1}';\n const rangeFormat = choiceRangeValueFormat;\n let refinerName = '';\n if (refinerHierarchy && refinerHierarchy.find) {\n const parent = refinerHierarchy.find(\n (hierarchy: IProductRefinerHierarchy) =>\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, productRefinerValue))\n );\n\n if (!parent) {\n telemetry.warning('[choice-summary] could not find parent of selected refiner value');\n } else {\n refinerName = parent.KeyName || '';\n }\n }\n\n let refinerValueName: string;\n if (isRangeType(productRefinerValue.DataTypeValue)) {\n refinerValueName = rangeFormat\n .replace('{0}', this._formatPrice(productRefinerValue.LeftValueBoundString, productRefinerValue.UnitText))\n .replace('{1}', this._formatPrice(productRefinerValue.RightValueBoundString, productRefinerValue.UnitText));\n } else if (productRefinerValue.RefinerRecordId === 0) {\n const filterValue = refinerValues?.Values.find(\n refiner => refiner.LeftValueBoundString === productRefinerValue.LeftValueBoundString\n );\n refinerValueName = (filterValue ? filterValue.LeftValueBoundLocalizedString : productRefinerValue.LeftValueBoundString) || '';\n } else {\n refinerValueName = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n }\n\n if (refinerName === 'Rating' || refinerName === 'Price') {\n return overallFormat.replace('{0}', refinerName).replace('{1}', `${refinerValueName}`);\n }\n // if (refinerName === 'Price') {\n // return overallFormat.replace('{0}', refinerName).replace('{1}', `${refinerValueName}`);\n // }\n return overallFormat.replace('{0}', refinerName).replace('{1}', `${refinerValueName}_${refinerName}_${index}`);\n }\n\n private _formatPrice(amount: string | undefined, currency: string | undefined): string {\n if (!amount || !currency) {\n this.props.telemetry.trace('[choice-summary] could not format price');\n return amount || '';\n }\n let result = amount;\n\n try {\n result = this.props.context!.cultureFormatter.formatCurrency(Number(amount), currency);\n } catch (error) {\n this.props.telemetry.warning(`Failed to format price for ${result}: ${error}`);\n }\n\n return result;\n }\n\n private readonly _onClick = (e: React.MouseEvent): void => {\n e.preventDefault();\n e.stopPropagation();\n\n const target = e.currentTarget as HTMLElement;\n const clearAll = target.getAttribute('class')!.includes('choice-summary__clear-all');\n const selectedRefiner = clearAll ? undefined : this._getSelectedRefinerChoice(target);\n\n if (this.props.onChoiceClicked) {\n this.props.onChoiceClicked({\n clearAll,\n itemClicked: target,\n choiceClicked: selectedRefiner,\n nextItemToFocus: target.nextSibling as HTMLElement\n });\n }\n };\n\n private _getSelectedRefinerChoice(itemClicked: HTMLElement): ProductRefinerValue | undefined {\n const result = this.selectedRefinersMap.find(selected => itemClicked.id === selected.key);\n return (result && result.value) || undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport * as React from 'react';\n\ninterface IErrorMessage {\n text?: string;\n}\n\nexport const ErrorMessage: React.FC = ({ text }) => {\n return (\n <>\n
\n \n \n \n \n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n \n\n \n \n \n\n \n \n\n \n \n \n \n \n\n {/*
{text}
*/}\n
No products found
\n
\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { ICoreContext, IGridSettings, IImageData, IImageSettings, Image, IRequestContext } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultContainerResources } from '../search-result-container.props.autogenerated';\n\n// Import { IComponent, IComponentProps, ICoreContext, IGridSettings, IImageData, IImageSettings, Image, msdyn365Commerce } from '@msdyn365-commerce/core';\n\ninterface IFeatureSearchResultItem {\n product: SimpleProduct | null;\n context: ICoreContext;\n resources: ISearchResultContainerResources;\n imageSettings?: IImageSettings;\n moduleType: string;\n moduleId: string;\n telemetryContent?: ITelemetryContent;\n recommendation?: string;\n}\n\nexport const FeatureSearchResultItem: React.FC = ({\n product,\n context,\n imageSettings,\n resources,\n telemetryContent,\n recommendation\n}) => {\n if (product === null) {\n return null;\n }\n\n const productName = product.Name;\n const productRecordId = product && product.RecordId ? product.RecordId : 0;\n const productUrl = getProductPageUrlSync(product.Name || '', productRecordId, context && context.actionContext, undefined);\n const fallbackImage = getFallbackImageUrl(\n product.ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n );\n const heading =\n recommendation && recommendation === 'descriptions' ? resources.featureSimilarDescriptionTitle : resources.featureSimilarLooksTitle;\n\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', telemetryContent!, productName!, productRecordId.toString());\n\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n
\n \n
\n {renderProductPlacementImage(\n imageSettings,\n context.request.gridSettings,\n product.PrimaryImageUrl,\n product.Name,\n fallbackImage,\n context.actionContext.requestContext\n )}\n
\n \n
\n

{heading}

\n {renderProductTitle(product?.Name)}\n
\n
\n );\n};\n\nfunction renderProductPlacementImage(\n imageSettings?: IImageSettings,\n gridSettings?: IGridSettings,\n imageUrl?: string,\n altText?: string,\n fallbackImage?: string,\n context?: IRequestContext\n): JSX.Element | null {\n if (!imageUrl || !gridSettings || !imageSettings) {\n return null;\n }\n const img: IImageData = {\n src: imageUrl,\n altText: altText ? altText : ''\n };\n const imageProps = {\n gridSettings,\n imageSettings,\n fallBackSrc: fallbackImage\n };\n return ;\n}\n\nfunction renderProductTitle(title?: string): JSX.Element | null {\n return

{title}

;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport * as React from 'react';\n\ninterface ILink {\n className?: string;\n text?: string;\n href?: string;\n ariaLabel?: string;\n}\n\nexport const Link: React.FC = ({ text, className, href, ariaLabel }) => (\n \n {' '}\n {text}{' '}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { Button, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ISearchResultModalViewProps {\n modal: React.ReactElement;\n modalHeader: React.ReactElement;\n modalFooter: React.ReactElement;\n modalBody: React.ReactElement;\n}\n\ninterface IModalToggleProps {\n innerRef: React.RefObject | undefined;\n id: string;\n text: string;\n ariaLabel: string;\n onClick(): void;\n}\n\nexport interface ISearchResultModalResources {\n modalTitle: string;\n modalCloseButtonText: string;\n}\n\nexport interface ISearchResultModalProps {\n resources: ISearchResultModalResources;\n isOpen: boolean;\n returnRef: React.RefObject | undefined;\n onModalToggle(): void;\n}\n\nexport const ModalToggle: React.FC = (props: IModalToggleProps) => {\n const { /*text,*/ onClick /*, ariaLabel, innerRef, id*/ } = props;\n return (\n <>\n
\n
\n
\n \n \n \n
Filter
\n
\n
\n {/*
\n
\n \n \n \n \n
Sort By
\n
\n
*/}\n {/* */}\n
\n \n );\n};\n\nexport const SearchResultModal = (props: ISearchResultModalProps): ISearchResultModalViewProps => {\n return {\n modal: modalNode(props),\n modalHeader: modalHeaderNode(props),\n modalFooter: modalFooterNode(props),\n modalBody: \n };\n};\n\nconst modalNode = (props: ISearchResultModalProps) => {\n return (\n \n );\n};\n\nconst modalHeaderNode = (props: ISearchResultModalProps) => {\n return {props.resources.modalTitle};\n};\n\nconst modalFooterNode = (props: ISearchResultModalProps) => {\n return (\n \n \n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IDictionary, TelemetryEvent } from '@msdyn365-commerce/core';\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\n\nexport interface IContentAction {\n pgname: string;\n mname: string;\n etext?: string;\n recid?: string;\n etype?: string;\n}\n\nexport interface IPayLoad {\n contentCategory: string;\n contentAction: IContentAction;\n}\n\nexport interface ITelemetryContent {\n pageName: string;\n moduleName: string;\n telemetry?: ITelemetry;\n}\n\nexport enum TelemetryConstant {\n ShopSimliarLooks = 'shop similar looks',\n ShopSimliarDescription = 'shop similar description',\n PickupInStore = 'pick up in store',\n PreferredStore = 'set as preferred store',\n RemovePreferredStore = 'remove preferred store',\n IncrementQuantity = 'Increment quantity',\n DecrementQuantity = 'Decrement quantity',\n Checkout = 'Checkout',\n GuestCheckout = 'Guest checkout',\n BackToShopping = 'Back to shopping',\n ApplyPromoCode = 'Apply promo code',\n ViewMore = 'View more',\n OrderDetails = 'Order details',\n AvailablePoints = 'Available points',\n ExpiringPoints = 'Expiring points',\n AddUser = 'Add user',\n BuyItAgain = 'Buy it again',\n ContactNumber = 'ContactNumber',\n CheckoutChange = 'Change',\n Save = 'Save',\n SaveContinue = 'Save and Continue',\n Cancel = 'Cancel',\n DeliveryOptions = 'Delivery options',\n CheckoutTermsAndConditions = 'Checkout terms and conditions',\n ExpandAll = 'Expand all',\n CollapseAll = 'Collapse all',\n Expand = 'Expand',\n Collapse = 'Collapse',\n SignIn = 'Sign in',\n SignUp = 'Sign up',\n SignOut = 'Sign out',\n SwitchCustomer = 'Switch Customer',\n LoyaltyDetailLink = 'Loyalty detail ink',\n LoyaltyTermsLink = 'Loyalty terms link',\n LoyaltyTermsCancel = 'Loyalty terms cancel',\n LoyaltyTermsSubmit = 'Loyalty terms submit',\n LoyaltyTermsAgree = 'Loyalty terms agree',\n RemoveCartItem = 'Remove cart item',\n EditCart = 'Edit cart',\n BackToTop = 'Back to top',\n Logo = 'Logo',\n NavIcon = 'Navigation icon',\n ViewBagAndCheckout = 'View bag and checkout',\n ContinueShopping = 'Continue shopping',\n AddOrderTemplateToCart = 'Add order template to cart',\n PromoBannerClose = 'Close promo banner',\n WriteReview = 'Write Review',\n Next = 'Next',\n Previous = 'Previous',\n SubmitReview = 'Submit review',\n SuccessButton = 'Success',\n SearchStore = 'Search store',\n ShowAllStore = 'Show all store',\n ToggleMapView = 'Toggle map view',\n PrivacyPolicy = 'Privacy policy',\n ViewShoppingBag = 'View shopping bag',\n MyProfile = 'My profile',\n seeDetails = 'See Details'\n}\n\n/**\n * Returns the payload Object.\n * @param {string} contentCategory - Content Category.\n * @param {IModule} props - Module props.\n * @param pageName\n * @param {string} moduleName - Module Name.\n * @param {string} etext - Etext Name.\n * @param {string} recid - Recid Name.\n * @param telemetry\n */\nexport function getTelemetryObject(pageName: string, moduleName: string, telemetry: ITelemetry): ITelemetryContent {\n const telemetryContent: ITelemetryContent = { pageName, moduleName, telemetry };\n return telemetryContent;\n}\n\n/**\n * Returns the payload Object.\n * @param {string} contentCategory - Content Category.\n * @param {IModule} props - Module props.\n * @param {string} moduleName - Module Name.\n * @param eventType\n * @param telemetryContent\n * @param {string} etext - Etext Name.\n * @param {string} recid - Recid Name.\n */\nexport function getPayloadObject(eventType: string, telemetryContent: ITelemetryContent, etext: string, recid?: string): IPayLoad {\n const pageName = telemetryContent && telemetryContent.pageName ? telemetryContent.pageName : '';\n const moduleName = telemetryContent && telemetryContent.moduleName ? telemetryContent.moduleName : '';\n const payload: IPayLoad = {\n contentCategory: eventType,\n contentAction: {\n pgname: pageName,\n mname: moduleName,\n etext,\n recid,\n etype: eventType\n }\n };\n return payload;\n}\n\n/**\n * Returns the telemetry Attributes.\n * @param {IModule} props - Module Props.\n * @param telemetryContent\n * @param {IPayLoad} payLoad - Pay Load.\n */\nexport function getTelemetryAttributes(telemetryContent: ITelemetryContent, payLoad: IPayLoad): IDictionary | undefined {\n const contentData = payLoad.contentAction.recid ? payLoad.contentAction.recid : payLoad.contentAction.etext;\n const attributes: IDictionary | undefined =\n telemetryContent &&\n telemetryContent.telemetry &&\n telemetryContent.telemetry.setTelemetryAttribute &&\n telemetryContent.telemetry.setTelemetryAttribute(contentData!, payLoad.contentAction);\n return attributes;\n}\n\n/**\n * Returns the telemetry Attributes.\n * @param {IModule} props - Module Props.\n * @param {IPayLoad} payLoad - Pay Load.\n */\n\nexport const onTelemetryClick = (telemetryContent: ITelemetryContent, payLoad: IPayLoad, linkText: string) => () => {\n payLoad.contentAction.etext = linkText;\n if (telemetryContent && telemetryContent.telemetry) {\n telemetryContent.telemetry.logEvent(TelemetryEvent.Custom, payLoad);\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IRequestContext } from '@msdyn365-commerce/core';\nimport { debounce } from 'lodash';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, TelemetryConstant } from './telemetryHelper';\nimport { IIncrementalQuantityProps } from './IncrementalQuantityProps';\n/**\n * IIncrementalQuantityState interface.\n */\ninterface IIncrementalQuantityState {\n currentInput: number;\n isUpdating: boolean;\n}\n\n/**\n * Quantity Component - This component is used to add or remove quantity.\n */\n@observer\nexport default class IncrementalQuantity extends React.PureComponent {\n public static defaultProps: Partial = {\n min: 1,\n decrementGlyphClass: 'fas fa-minus',\n incrementGlyphClass: 'fas fa-plus'\n };\n private readonly _minValue: number;\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n private readonly payLoad: IPayLoad;\n\n public static getDerivedStateFromProps(\n props: Readonly,\n state: IIncrementalQuantityState\n ): IIncrementalQuantityState {\n const nextState = { ...state };\n\n if (props.disabled && !state.isUpdating) {\n nextState.isUpdating = true;\n }\n\n if (!props.disabled && state.isUpdating) {\n nextState.currentInput = props.currentCount ?? 1;\n nextState.isUpdating = false;\n }\n return nextState;\n }\n constructor(props: IIncrementalQuantityProps) {\n super(props);\n this.state = { currentInput: props.currentCount ?? 1, isUpdating: false };\n this._onIncrement = this._onIncrement.bind(this);\n this._onDecrement = this._onDecrement.bind(this);\n this._removeITem = this._removeITem.bind(this);\n this._handleChange = this._handleChange.bind(this);\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n this._minValue = this.props.min ?? IncrementalQuantity.defaultProps.min!;\n }\n public render(): JSX.Element {\n const { min, max } = this.props;\n const glyphMinusClassName: string = `${this.props.decrementGlyphClass!} quantity__controls-glyph`;\n //const glyphPlusClassName: string = `${this.props.incrementGlyphClass!} quantity__controls-glyph`;\n const removeClassName: string = `fas fa-trash quantity__controls-glyph`;\n const decrementDisabled = this.state.currentInput <= (min ?? 1) || this.props.isGiftCard;\n const incrementDisabled = this.state.currentInput >= max || this.props.isGiftCard;\n const currentValue = this.state.currentInput;\n this.payLoad.contentAction.etext = TelemetryConstant.DecrementQuantity;\n const decrementAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.IncrementQuantity;\n const incrementAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n const ariaLablelText = `${this.props.inputQuantityAriaLabel ?? ''} ${this.state.currentInput}`;\n let extraClassDecrement = '';\n // @ts-ignore\n let iconClassName = glyphMinusClassName;\n if (decrementDisabled) {\n // The quantity has reached its boundaries (max or min)\n extraClassDecrement = 'disabled';\n iconClassName = removeClassName;\n } else if (this.props.disabled) {\n // This.props.disabled shows if the state is not succeded yet\n extraClassDecrement = 'transition';\n iconClassName = removeClassName;\n }\n let extraClassIncrement = '';\n if (incrementDisabled) {\n // The quantity has reached its boundaries (max or min)\n extraClassIncrement = 'disabled';\n } else if (this.props.disabled) {\n // This.props.disabled shows if the state is not succeded yet\n extraClassIncrement = 'transition';\n }\n console.log(this.state.currentInput);\n let button = '';\n if (this.state.currentInput === 1) {\n // @ts-ignore\n } else {\n // @ts-ignore\n button = (\n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n return (\n <>\n {button}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n\n /**\n * It checks if its in mobile view or not.\n * @returns Boolean.\n */\n private readonly isMobileView = (): boolean => {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Added gridsetting values.\n const context = {\n gridSettings: {\n xs: { w: 767 },\n sm: { w: 991 },\n md: { w: 1199 },\n lg: { w: 1599 },\n xl: { w: 1600 }\n }\n } as IRequestContext;\n\n const isMobileCheck = isMobile({ variant: VariantType.Browser, context });\n return isMobileCheck === 'xs' || isMobileCheck === 'sm';\n };\n\n private async _onIncrement(): Promise {\n let invokeCallback = false;\n const currQuantity = this.state.currentInput;\n let updatedQuantity: number;\n\n if (currQuantity < this.props.max) {\n invokeCallback = true;\n updatedQuantity = currQuantity + 1;\n } else {\n invokeCallback = false;\n updatedQuantity = this.props.max;\n }\n\n if (invokeCallback && this.props.onChange) {\n if (await this.props.onChange(updatedQuantity)) {\n this.setState({ currentInput: updatedQuantity });\n }\n }\n }\n\n private _removeITem(): void {\n this.setState({ currentInput: -1 });\n }\n\n private async _onDecrement(): Promise {\n let invokeCallback = false;\n const currQuantity = this.state.currentInput;\n let updatedQuantity: number;\n console.log(currQuantity);\n\n if (currQuantity >= this._minValue) {\n invokeCallback = true;\n updatedQuantity = currQuantity - 1;\n } else {\n invokeCallback = false;\n updatedQuantity = this._minValue;\n }\n\n if (invokeCallback && this.props.onChange) {\n if (await this.props.onChange(updatedQuantity)) {\n this.setState({ currentInput: updatedQuantity });\n }\n }\n }\n\n private _handleChange(e: React.ChangeEvent): void {\n let currentValue = Number.parseInt(e.target.value, 10);\n if (Number.isNaN(currentValue)) {\n this.setState({ currentInput: currentValue });\n return;\n }\n currentValue = Math.min(this.props.max, Math.max(this._minValue, currentValue));\n this.setState({ currentInput: currentValue });\n debounce(() => {\n // Due of usage debouncer, we may ignore onChange return value\n this.props.onChange && this.props.onChange(this.state.currentInput);\n\n const inputElement =\n this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\n if (inputElement) {\n inputElement.setAttribute('aria-valuenow', this.state.currentInput.toString());\n inputElement.setAttribute('value', this.state.currentInput.toString());\n }\n }, 1000)();\n }\n\n /**\n * Validates min and updates.\n */\n private readonly _validateMin = (): void => {\n if (Number.isNaN(this.state.currentInput)) {\n this.setState({ currentInput: this._minValue });\n } else {\n const currentValue = Math.min(this.props.max, Math.max(this._minValue, this.state.currentInput));\n if (currentValue !== this.state.currentInput) {\n this.setState({ currentInput: currentValue });\n }\n }\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\n\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport IncrementalQuantity from './IncrementalQuantity';\nimport { IGridSettings, IImageSettings, IComponentProps } from '@msdyn365-commerce/core';\nimport { ArrayExtensions, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\nimport {\n ProductAvailableQuantity,\n ProductDimension,\n SimpleProduct,\n ProductsDataActions,\n ProductSearchCriteria,\n ProductType,\n ProductPrice\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { OrderDetailsProduct } from '@msdyn365-commerce/components';\nimport { ICartActionResult, getCartState } from '@msdyn365-commerce/global-state';\n//import { IProductCollectionData } from './product-collection.data';\n\nexport interface IAddToCartResources {\n goToCartText: string;\n continueShoppingText: string;\n closeNotificationLabel: string;\n headerItemOneText: string;\n headerItemFormatText: string;\n headerLinesFormatText?: string;\n headerMessageText: string;\n freePriceText: string;\n originalPriceText: string;\n currentPriceText: string;\n addedQuantityText: string;\n buyAgainNotificationTitle?: string;\n buyAgainNotificationCloseAriaLabel?: string;\n validationErrorMessage?: string;\n oneErrorText?: string;\n multiErrorsText?: string;\n}\nexport interface IAddToCartComponentProps extends IComponentProps<{ product: SimpleProduct; price?: ProductPrice } | undefined> {\n context: any;\n className?: string;\n product: any;\n outOfStockText?: string;\n disabled?: boolean;\n quantity?: number;\n navigationUrl?: string;\n productAvailability?: ProductAvailableQuantity;\n getSelectedProduct?: Promise;\n isNavigationToCartPageDisabled?: boolean;\n shouldSkipSiteSettings?: boolean;\n addToCartArialLabel?: string;\n products?: {\n productId: number;\n quantity: number;\n catalogId?: number;\n }[];\n orderDetailsProducts?: OrderDetailsProduct[];\n hasAvailableProducts?: boolean;\n imageSettings?: IImageSettings;\n gridSettings?: IGridSettings;\n\n isLoading?: boolean;\n isUpdatingDimension?: boolean;\n isLoadingDeliveryOptions?: boolean;\n isUpdatingDeliveryOptions?: boolean;\n isAddServiceItemToCart?: boolean;\n isAddEmailDeliveryItemToCart?: boolean;\n isPriceKeyedIn?: boolean;\n customPriceAmount?: number;\n isOrderQuantityLimitsFeatureEnabled?: boolean;\n\n dialogStrings?: IAddToCartResources;\n\n telemetryContent?: ITelemetryContent;\n\n catalogId?: number;\n cartData?: any;\n\n isCustomPriceSelected?: boolean;\n maximumKeyInPrice?: number;\n minimumKeyInPrice?: number;\n defaultMaximumKeyInPrice?: number;\n defaultMinimumKeyInPrice?: number;\n isProductQuantityLoading?: boolean;\n\n onAdd?(result: ICartActionResult): void;\n onError?(result: IAddToCartFailureResult): void;\n changeUpdatingDimension?(isUpdatingDimension: boolean): void;\n changeUpdatingDeliveryOptions?(isUpdatingDeliveryOptions: boolean): void;\n}\nexport declare type ICartActionFailureReason =\n | 'EMPTYINPUT'\n | 'MISSINGDIMENSION'\n | 'OUTOFSTOCK'\n | 'CARTACTIONFAILED'\n | 'INVALIDCUSTOMAMOUNT';\nexport interface IAddToCartFailureResult {\n failureReason: ICartActionFailureReason;\n\n stockLeft?: number;\n cartActionResult?: ICartActionResult;\n missingDimensions?: ProductDimension[];\n}\nexport interface IProductCollectionState {\n currentProductqQty?: any;\n}\n//const defaultQuantity = 1;\n\nclass ProductCollectionQty extends React.PureComponent {\n constructor(props: IAddToCartComponentProps) {\n super(props);\n this.state = {\n currentProductqQty: ''\n };\n }\n public removeITem = () => {\n void getCartState(this.props.context.actionContext).then((result: any): boolean => {\n const recordId = this.props.product.ItemId;\n void this.removeItemFromCart(this.props, recordId);\n this.setState({ currentProductqQty: -1 });\n return false;\n });\n };\n public removeItemFromCart = async (props: IAddToCartComponentProps, LineID: any): Promise => {\n const cartState = await getCartState(props.context.actionContext);\n const productInfow = await this.getAddToCartInputFromProps(props);\n const cartLinesData = cartState.cart.CartLines;\n const findData = cartLinesData?.find(cartLinesData => cartLinesData.ItemId === productInfow[0].product.ItemId);\n const input = {\n cartLineIds: [findData?.LineId!]\n };\n await cartState.removeCartLines(input);\n };\n public getAddToCartInputFromProps = async (props: IAddToCartComponentProps) => {\n const defaultQuantity = 1;\n const products = props.orderDetailsProducts?.filter(product => !ObjectExtensions.isNullOrUndefined(product.simpleProduct));\n const input = products?.map(product => {\n return {\n product: product.simpleProduct!,\n count: ObjectExtensions.isNullOrUndefined(product.salesLine.Quantity) ? defaultQuantity : product.salesLine.Quantity,\n catalogId: product.salesLine.CatalogId\n };\n });\n\n if (ArrayExtensions.hasElements(input)) {\n return input;\n }\n\n if (ArrayExtensions.hasElements(props.products)) {\n const actionContext = props.context.actionContext;\n const apiSettings = actionContext.requestContext.apiSettings;\n\n const catalogId = props.catalogId;\n const searchCriteriaInput: ProductSearchCriteria = {\n Context: {\n ChannelId: apiSettings.channelId,\n CatalogId: catalogId\n },\n IncludeAttributes: false,\n Ids: props.products.map(product => product.productId)\n };\n\n const searchResult = await ProductsDataActions.searchByCriteriaAsync({ callerContext: actionContext }, searchCriteriaInput);\n const productSearchResultsWithImages = searchResult.map(productSearchResult => {\n const newProductSearchResult = { ...productSearchResult };\n const newImageUrl = ' generateProductImageUrl(newProductSearchResult, apiSettings);';\n\n if (newImageUrl) {\n newProductSearchResult.PrimaryImageUrl = newImageUrl;\n }\n\n return newProductSearchResult;\n });\n\n return props.products.map(item => {\n const productData = productSearchResultsWithImages.find(product => product.RecordId === item.productId);\n let simpleProduct: SimpleProduct;\n if (productData) {\n simpleProduct = {\n ...productData,\n ProductTypeValue: ProductType.Variant,\n AdjustedPrice: productData.Price,\n BasePrice: productData.BasePrice ?? productData.Price\n };\n } else {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Cast to simple product since only record id is available.\n simpleProduct = {\n RecordId: item.productId\n } as SimpleProduct;\n }\n\n return {\n product: simpleProduct,\n count: item.quantity,\n catalogId: item.catalogId\n };\n });\n }\n\n if (props.data?.product) {\n return [\n {\n product: props.data.product,\n count: props.quantity ?? defaultQuantity,\n catalogId: props.catalogId\n }\n ];\n }\n\n return [];\n };\n public onChangeHandler = async (newValue: number): Promise => {\n if (newValue === -1) {\n this.removeITem();\n }\n const productID = this.props.data?.product.RecordId;\n let totalAvailableQuantity = 3;\n if (productID) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const axios = require('axios');\n const data = JSON.stringify({\n searchCriteria: {\n ProductIds: [productID],\n QuantityUnitTypeValue: 2,\n DefaultWarehouseOnly: true\n }\n });\n\n const config = {\n method: 'post',\n maxBodyLength: Infinity,\n // url: 'https://scudisf0ajx86631475-rs.su.retail.dynamics.com/Commerce/Products/GetEstimatedAvailability?api-version=7.3',\n url: 'https://scuh5bsct3g80746264-rs.su.retail.dynamics.com/Commerce/Products/GetEstimatedAvailability?api-version=7.3',\n headers: {\n accept: 'application/json',\n 'accept-language': 'en-US',\n 'cache-control': 'no-cache',\n 'content-type': 'application/json',\n oun: '00000001'\n },\n data: data\n };\n\n await axios\n .request(config)\n .then((response: { data: any }) => {\n if (\n response.data?.ProductWarehouseInventoryAvailabilities &&\n response.data?.ProductWarehouseInventoryAvailabilities.length > 0\n ) {\n const respObject = response.data?.ProductWarehouseInventoryAvailabilities.filter((item: any) => {\n return item.ProductId === productID;\n });\n if (respObject && respObject.length > 0) {\n totalAvailableQuantity = Math.floor((Number(respObject[0]?.PhysicalAvailable) * 100) / 100);\n }\n }\n })\n .catch((error: any) => {\n console.log(error);\n });\n }\n console.log('this nowwww respObject : ', newValue, '===', totalAvailableQuantity);\n\n if (newValue > totalAvailableQuantity) {\n return false;\n }\n const cartState = getCartState(this.props.context.actionContext).then((result: any): boolean => {\n const recordId = this.props.product.ItemId;\n const cartLinesData = result._cart.CartLines;\n const findData = cartLinesData.find((cartLinesData: { ItemId: any }) => cartLinesData.ItemId === recordId);\n this.setState({ currentProductqQty: newValue });\n if (findData === undefined) {\n // console.log(findData.Quantity);\n void this.addOneItemToCart(this.props);\n return true;\n }\n if (!result.isEmpty) {\n void this.updateCartId(this.props, findData.Quantity, newValue);\n return true;\n } else {\n void this.addOneItemToCart(this.props);\n //return true;\n }\n return false;\n });\n console.log(cartState);\n\n return true;\n };\n public updateCartId = async (props: IAddToCartComponentProps, oldQty: any, newQty: any): Promise => {\n const cartState = await getCartState(props.context.actionContext);\n const productInfow = await this.getAddToCartInputFromProps(props);\n const cartLinesData = cartState.cart.CartLines;\n const findData = cartLinesData?.find(cartLinesData => cartLinesData.ItemId === productInfow[0].product.ItemId);\n const addToCartResult = await cartState.updateCartLineQuantity({\n cartLineId: findData?.LineId || '',\n newQuantity: newQty\n });\n console.log(addToCartResult);\n };\n /**\n * Add one item to cart when it is not buy again.\n * @param props -- The props.\n * @param setDisabled -- The set disable call back.\n * @param openModal -- The open modal call back.\n */\n public addOneItemToCart = async (props: IAddToCartComponentProps): Promise => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- read config file.\n const addToCartInput = await this.getAddToCartInputFromProps(props);\n const product = addToCartInput[0].product;\n const quantity = addToCartInput[0].count;\n\n const cartState = await getCartState(props.context.actionContext);\n const addToCartResult = await cartState.addProductToCart({\n product,\n count: quantity,\n availableQuantity: props.productAvailability?.AvailableQuantity,\n additionalProperties: { orderQuantityLimitsFeatureIsEnabled: props.isOrderQuantityLimitsFeatureEnabled },\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- read config file.\n enableStockCheck: props.context.app.config.enableStockCheck,\n isPriceKeyedIn: props.isPriceKeyedIn,\n customPrice: props.isPriceKeyedIn ? props.customPriceAmount : undefined,\n isAddEmailDeliveryItemToCart: props.isAddEmailDeliveryItemToCart,\n shouldSkipSiteSettings: props.shouldSkipSiteSettings,\n catalogId: addToCartInput[0].catalogId\n });\n\n if (addToCartResult.status === 'SUCCESS') {\n console.log('its success');\n }\n };\n public _getCartStatusUpdate = (props: IAddToCartComponentProps, recordId: number): number => {\n const cartLinesData = props.cartData;\n if (cartLinesData && cartLinesData?.length !== 0) {\n const findData = cartLinesData.find((cartLinesData: { ItemId: any }) => cartLinesData.ItemId === recordId);\n if (findData) {\n return findData.Quantity;\n }\n }\n\n return 0;\n //return findData?.Quantity || 0;\n };\n public _SingleAddToCart = () => {\n void this.addOneItemToCart(this.props);\n this.setState({ currentProductqQty: 1 });\n return true;\n };\n\n public render(): JSX.Element | null {\n var getQty = this._getCartStatusUpdate(this.props, this.props.product.ItemId);\n //this.setState({ currentProductqQty: getQty });\n var button = null;\n var buttonAddtoCart = null;\n if (this.state.currentProductqQty === -1) {\n getQty = 0;\n }\n //this.setState({ currentProductqQty: getQty });\n if (\n getQty === 0 &&\n (this.state.currentProductqQty === 0 || this.state.currentProductqQty === '' || this.state.currentProductqQty === -1)\n ) {\n getQty = 0;\n // this.setState({ currentProductqQty: 0 });\n buttonAddtoCart = (\n \n );\n return {buttonAddtoCart};\n }\n if (getQty === 1 && this.state.currentProductqQty === '') {\n button = (\n \n );\n }\n if (this.state.currentProductqQty === 1) {\n button = (\n \n );\n }\n return (\n \n \n {button}\n \n \n \n );\n }\n}\nexport default ProductCollectionQty;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport { IPriceComponentResources, ProductComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ISearchResultContainerResources } from '../search-result-container.props.autogenerated';\nimport ProductCollectionQty from './product-collection-qty';\n\ninterface IProductSearchResultItems {\n products: ProductSearchResult[];\n context: ICoreContext;\n resources: ISearchResultContainerResources;\n imageSettings?: IImageSettings;\n moduleType: string;\n moduleId: string;\n allowBackNavigation?: boolean;\n telemetryContent: ITelemetryContent;\n quickviewSlot?: {} | null | undefined;\n productComparisonButton?: {} | null | undefined;\n channelInventoryConfigurationId?: number;\n isPriceMinMaxEnabled?: boolean;\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n cartData?: ICartState;\n}\n\n/**\n * Returns the product inventory label.\n * @param channelInventoryConfigurationId - The channel configuration Id.\n * @param product - The product.\n * @returns The inventory label.\n */\nexport function getInventoryLabel(channelInventoryConfigurationId: number | undefined, product: ProductSearchResult): string | undefined {\n if (!channelInventoryConfigurationId || !ArrayExtensions.hasElements(product.AttributeValues)) {\n return undefined;\n }\n const inventoryAttribute = product.AttributeValues.find(attribute => attribute.RecordId === channelInventoryConfigurationId);\n if (inventoryAttribute) {\n return inventoryAttribute.TextValue;\n }\n return undefined;\n}\nexport const ProductSearchResultItems: React.FC = ({\n products,\n context,\n imageSettings,\n resources,\n moduleType,\n moduleId,\n allowBackNavigation,\n telemetryContent,\n quickviewSlot,\n productComparisonButton,\n channelInventoryConfigurationId,\n isPriceMinMaxEnabled,\n productsDimensionAvailabilities,\n cartData\n}) => {\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n return (\n
    \n {products.map((product: ProductSearchResult, index: number) => {\n // Sounrced from region\n // let sourcedFromText = '';\n // if (product.AttributeValues && product.AttributeValues.length > 0) {\n // const filteredSpec = product.AttributeValues.filter(sp => {\n // return sp.Name && sp?.Name === 'Sourced Region';\n // });\n // sourcedFromText = filteredSpec && filteredSpec.length > 0 && filteredSpec[0].TextValue ? filteredSpec[0].TextValue : '';\n // }\n return (\n
  • \n {/* {sourcedFromText &&
    From {sourcedFromText}
    } */}\n \n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === product.MasterProductId\n )}\n />\n \n
  • \n );\n })}\n
\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { ISliderLabel, ISliderThumbProps, Slider } from '@msdyn365-commerce-modules/utilities';\nimport debounce from 'lodash/debounce';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IRefineItemProps, IRefineItemState } from './refine-item';\n\ntype InputType = 'Min' | 'Max';\n\nexport type RangeRefineItemType = 'slider' | 'input';\n\n/**\n * Range refine item properties.\n */\nexport interface IRangeRefineItemProps extends IRefineItemProps {\n rangeType: RangeRefineItemType;\n minValueSliderThumbAriaLabel?: string;\n maxValueSliderThumbAriaLabel?: string;\n sliderKey?: string;\n}\n\n/**\n * Range refine item state.\n */\nexport interface IRangeRefineItemState extends IRefineItemState {\n validationErrorMin: string | undefined;\n validationErrorMax: string | undefined;\n selectedMin: string | undefined;\n selectedMax: string | undefined;\n touchedMin: boolean;\n touchedMax: boolean;\n sliderId: string;\n minValue: string | undefined;\n maxValue: string | undefined;\n labels: ISliderLabel[];\n sliderThumbs: ISliderThumbProps[];\n}\n\n/**\n * RangeRefineItem component (controlled by RefineSubmenu).\n */\n@observer\nexport default class RangeRefineItem extends React.Component {\n private readonly _formattedPriceReverseLookup: Map = new Map();\n\n private readonly minInput: React.RefObject;\n\n private readonly maxInput: React.RefObject;\n\n @computed get currencyCode(): string {\n return this.props.productRefinerValue.UnitText || '';\n }\n\n public constructor(props: IRangeRefineItemProps) {\n super(props);\n this._onRangeUpdate = this._onRangeUpdate.bind(this);\n this._onRangeUpdateEnd = this._onRangeUpdateEnd.bind(this);\n this._handleRangeTooltipText = this._handleRangeTooltipText.bind(this);\n this._changeMin = this._changeMin.bind(this);\n this._changeMax = this._changeMax.bind(this);\n this._finishChangeMin = this._finishChangeMin.bind(this);\n this._finishChangeMax = this._finishChangeMax.bind(this);\n\n this.minInput = React.createRef();\n this.maxInput = React.createRef();\n\n const { selectedRefinementCriterion } = this.props;\n const initialMin = selectedRefinementCriterion?.LeftValueBoundString ?? '0';\n const initialMax = selectedRefinementCriterion?.RightValueBoundString;\n const sliderId = `slider_${String(this.props.parentProductRefinerHierarchy.RecordId)}_${String(\n this.props.productRefinerValue.RefinerRecordId\n )}`;\n const minValue = this.props.productRefinerValue.LeftValueBoundString;\n const maxValue = this.props.productRefinerValue.RightValueBoundString;\n const minPrice = this._formatPrice(minValue);\n const maxPrice = this._formatPrice(maxValue);\n const labels: ISliderLabel[] = this.getLabels(sliderId, minPrice, maxPrice);\n const selectedMin =\n this.props.selectedRefinementCriterion?.LeftValueBoundString ?? this.props.productRefinerValue.LeftValueBoundString ?? '0';\n const selectedMax =\n this.props.selectedRefinementCriterion?.RightValueBoundString ??\n this.props.productRefinerValue.RightValueBoundString ??\n maxValue;\n const selectedMinPrice = this._formatPrice(selectedMin);\n const selectedMaxPrice = this._formatPrice(selectedMax);\n const sliderKeyString = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\n const sliderThumbs: ISliderThumbProps[] = this.getSliderThumbs(\n sliderId,\n sliderKeyString,\n selectedMin,\n selectedMinPrice,\n selectedMax,\n selectedMaxPrice,\n maxPrice\n );\n this.state = {\n isChecked: false,\n validationErrorMin: undefined,\n validationErrorMax: undefined,\n selectedMin: initialMin,\n selectedMax: initialMax,\n touchedMin: false,\n touchedMax: false,\n sliderId,\n minValue,\n maxValue,\n labels,\n sliderThumbs\n };\n }\n\n public shouldComponentUpdate(nextProps: IRangeRefineItemProps, nextState: IRangeRefineItemState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public componentDidUpdate(previousProps: IRangeRefineItemProps): void {\n if (previousProps !== this.props) {\n this.updateSliderProps();\n }\n }\n\n public render(): JSX.Element | undefined {\n const { productRefinerValue, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\n\n if (!productRefinerValue || !parentProductRefinerHierarchy) {\n refineItemCommonProps.telemetry.error(\n 'Cannot render refine value range without productRefinerValue and parentProductRefinerHierarchy'\n );\n return undefined;\n }\n\n if (this.props.rangeType === 'input') {\n return this._renderInputFields();\n }\n\n return this._renderSlider();\n }\n\n /**\n * Function to update slider props.\n */\n private updateSliderProps(): void {\n const sliderId = `slider_${String(this.props.parentProductRefinerHierarchy.RecordId)}_${String(\n this.props.productRefinerValue.RefinerRecordId\n )}`;\n const minValue = this.props.productRefinerValue.LeftValueBoundString;\n const maxValue = this.props.productRefinerValue.RightValueBoundString;\n const minPrice = this._formatPrice(minValue);\n const maxPrice = this._formatPrice(maxValue);\n const labels: ISliderLabel[] = this.getLabels(sliderId, minPrice, maxPrice);\n const selectedMin =\n this.props.selectedRefinementCriterion?.LeftValueBoundString ?? this.props.productRefinerValue.LeftValueBoundString ?? '0';\n const selectedMax =\n this.props.selectedRefinementCriterion?.RightValueBoundString ??\n this.props.productRefinerValue.RightValueBoundString ??\n maxValue;\n const selectedMinPrice = this._formatPrice(selectedMin);\n const selectedMaxPrice = this._formatPrice(selectedMax);\n const sliderKeyString = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\n const sliderThumbs: ISliderThumbProps[] = this.getSliderThumbs(\n sliderId,\n sliderKeyString,\n selectedMin,\n selectedMinPrice,\n selectedMax,\n selectedMaxPrice,\n maxPrice\n );\n this.setState({ sliderId, minValue, maxValue, labels, sliderThumbs });\n }\n\n /**\n * Function to create the labels for slider.\n * @param sliderId - Slider element id for the DOM.\n * @param minPrice - Slider min value.\n * @param maxPrice - Slider max value.\n * @returns Array labels.\n */\n private readonly getLabels = (sliderId: string, minPrice: string, maxPrice: string): ISliderLabel[] => {\n return [\n {\n labelId: `${sliderId}_start`,\n labelString: `${minPrice}`,\n labelPositioning: 'start'\n },\n {\n labelId: `${sliderId}_end`,\n labelString: `${maxPrice}`,\n labelPositioning: 'end'\n }\n ];\n };\n\n /**\n * Function to create the slider thumbs for slider.\n * @param sliderId - Slider element id for the DOM.\n * @param sliderKey - Unique key for slider.\n * @param selectedMin - Slider selected min value.\n * @param selectedMinPrice - Slider selected min price.\n * @param selectedMax - Slider selected max value.\n * @param selectedMaxPrice - Slider selected max price..\n * @param maxPrice - Slider max price..\n * @returns Slider Thumb Props.\n */\n private readonly getSliderThumbs = (\n sliderId: string,\n sliderKey: string,\n selectedMin: string,\n selectedMinPrice: string,\n selectedMax: string | undefined,\n selectedMaxPrice: string,\n maxPrice: string\n ): ISliderThumbProps[] => {\n const sliderThumbDefaultValue = 0;\n return [\n {\n id: `${sliderId}${sliderKey}_slider_thumb_start`,\n value: (selectedMin && Number(selectedMin)) || sliderThumbDefaultValue,\n ariaLabel: `${this.props.minValueSliderThumbAriaLabel ?? ''} ${this.currencyCode}`,\n ariaValueText: `${selectedMinPrice}`\n },\n {\n id: `${sliderId}${sliderKey}_slider_thumb_end`,\n value: Number(selectedMax) || Number(maxPrice),\n ariaLabel: `${this.props.maxValueSliderThumbAriaLabel ?? ''} ${this.currencyCode}`,\n ariaValueText: `${selectedMaxPrice}`\n }\n ];\n };\n\n private _renderInputFields(): JSX.Element | undefined {\n const { isDisabled, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\n const { selectedMin, selectedMax, touchedMin, touchedMax, validationErrorMin, validationErrorMax } = this.state;\n\n const rangeAriaLabel = (refineItemCommonProps.rangeNameFormat || '{0}').replace('{0}', parentProductRefinerHierarchy.KeyName || '');\n const formAttrs = {\n 'aria-label': rangeAriaLabel,\n 'aria-disabled': isDisabled\n };\n\n // To enable price formatting of selected fields, this is the approach:\n // initial value: min=0 formatted as price, max=undefined\n // onFocus/onChange: convert to number (unformat) and mark as touched to indicate value is being edited\n // onBlur: validate and format entered value as price\n const minInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-min ${\n validationErrorMin ? 'refine-submenu__input-range--error' : ''\n }`;\n const maxInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-max ${\n validationErrorMax ? 'refine-submenu__input-range--error' : ''\n }`;\n const minLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-min';\n const maxLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-max';\n const formattedSelectedMin = this._getFormattedSelectedValue(selectedMin, touchedMin, validationErrorMin);\n const formattedSelectedMax = this._getFormattedSelectedValue(selectedMax, touchedMax, validationErrorMax);\n return (\n
\n \n \n {validationErrorMin && (\n \n {validationErrorMin}\n \n )}\n {validationErrorMax && validationErrorMin !== validationErrorMax && (\n \n {validationErrorMax}\n \n )}\n
\n );\n }\n\n private _renderSlider(): JSX.Element | undefined {\n const { isDisabled, sliderKey } = this.props;\n const ariaAttributes = {\n 'aria-disabled': isDisabled\n };\n\n return (\n \n );\n }\n\n private _changeMin(event: React.FocusEvent): void {\n this._changeValue(event, 'Min');\n }\n\n private _changeMax(event: React.FocusEvent): void {\n this._changeValue(event, 'Max');\n }\n\n private _changeValue(event: React.FocusEvent, inputType: InputType): void {\n const selectedKey = `selected${inputType}`;\n const touchedKey = `touched${inputType}`;\n this.setState({\n [selectedKey]: this._getInputWithoutFormatting(event.currentTarget.value),\n [touchedKey]: true\n });\n }\n\n private _finishChangeMin(event: React.FocusEvent): boolean {\n const selectedMinValue = this._getInputWithoutFormatting(event.currentTarget.value);\n this.setState({\n selectedMin: selectedMinValue,\n minTouched: false\n });\n const minInput = Number(selectedMinValue);\n const {\n onToggle,\n parentProductRefinerHierarchy,\n productRefinerValue,\n refineItemCommonProps,\n selectedRefinementCriterion\n } = this.props;\n const max = (selectedRefinementCriterion && selectedRefinementCriterion.RightValueBoundString) || undefined;\n\n const maxNum = max ? Number(max) : undefined;\n\n if (isNaN(minInput)) {\n this.setState({ validationErrorMin: refineItemCommonProps.validationErrorNaN });\n this._focus('Min');\n return false;\n }\n\n if (this._validateRange(minInput, maxNum)) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: minInput,\n rangeEnd: maxNum\n });\n return true;\n }\n this._focus('Min');\n\n return false;\n }\n\n private _finishChangeMax(event: React.FocusEvent): boolean {\n const selectedMaxValue = this._getInputWithoutFormatting(event.currentTarget.value);\n this.setState({\n selectedMax: selectedMaxValue,\n maxTouched: false\n });\n const maxInput = Number(selectedMaxValue);\n const {\n onToggle,\n parentProductRefinerHierarchy,\n productRefinerValue,\n refineItemCommonProps,\n selectedRefinementCriterion\n } = this.props;\n const min = (selectedRefinementCriterion && selectedRefinementCriterion.LeftValueBoundString) || '0';\n\n const minNum = Number(min);\n\n if (isNaN(maxInput)) {\n this.setState({ validationErrorMax: refineItemCommonProps.validationErrorNaN });\n this._focus('Max');\n return false;\n }\n\n if (this._validateRange(minNum, maxInput)) {\n if (productRefinerValue) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: minNum,\n rangeEnd: maxInput\n });\n } else {\n this._focus('Max');\n }\n return true;\n }\n\n return false;\n }\n\n private _focus(inputType: InputType): void {\n const ref = inputType === 'Max' ? this.maxInput : this.minInput;\n\n setTimeout(() => {\n if (ref && ref.current) {\n ref.current.focus();\n }\n }, 50);\n }\n\n private _getFormattedSelectedValue(\n selected: string | undefined,\n touched: boolean,\n validationError: string | undefined\n ): string | undefined {\n if (touched || validationError || selected === undefined) {\n return selected;\n }\n return this._formatPrice(selected);\n }\n\n private _validateRange(min: number, max: number | undefined): boolean {\n const { refineItemCommonProps } = this.props;\n if (max === undefined) {\n return true;\n }\n\n if (min > max) {\n this.setState({\n validationErrorMin: refineItemCommonProps.validationErrorRange,\n validationErrorMax: refineItemCommonProps.validationErrorRange\n });\n return false;\n }\n\n return true;\n }\n\n private _formatPrice(amount: string | undefined): string {\n if (this.props.productRefinerValue.RefinerRecordId === 0) {\n const result = this.props.context.cultureFormatter.formatCurrency(Number(amount), this.currencyCode);\n return result;\n }\n return amount || '';\n }\n\n private _getInputWithoutFormatting(input: string): string {\n // First try to cast raw input to a number\n const inputAsNum = Number(input);\n if (!isNaN(inputAsNum)) {\n return input;\n }\n\n // Otherwise try a reverse lookup and fall back to the raw input if all else fails\n const reverseLookupResult = this._formattedPriceReverseLookup.get(input);\n return reverseLookupResult || input;\n }\n\n // NOTE: Fix types once Shared Components build pipeline bug fixed\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onRangeUpdate(sliderChangeNotification: any): void {\n // Need to filter out mousemove events as these cause errors after the menu updates and slider re-renders\n if (sliderChangeNotification.eventType !== 'mousemove') {\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\n if (productRefinerValue && sliderChangeNotification) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: sliderChangeNotification.firstThumbValue,\n rangeEnd: sliderChangeNotification.secondThumbValue\n });\n\n this._focusOnSliderThumb(sliderChangeNotification);\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onRangeUpdateEnd(sliderChangeNotification: any): void {\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\n if (productRefinerValue && sliderChangeNotification) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: sliderChangeNotification.firstThumbValue,\n rangeEnd: sliderChangeNotification.secondThumbValue\n });\n\n this._focusOnSliderThumb(sliderChangeNotification);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _focusOnSliderThumb(sliderChangeNotification: any): void {\n if (sliderChangeNotification.id) {\n const element = document.getElementById(`${sliderChangeNotification.id}range`);\n if (element) {\n setTimeout(() => {\n element.focus();\n }, 0);\n }\n }\n }\n\n private _handleRangeTooltipText(tooltip: number): string {\n return this._formatPrice(`${tooltip}`);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { RatingComponent, SwatchComponent } from '@msdyn365-commerce/components';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProductRefinerSource, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\nimport { checkIfShouldDisplayAsSwatch, DimensionTypes, IDimensionsApp, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IRefineItemCommonProps } from './refine-item.props.common';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\n\n/**\n * RefineItem properties.\n */\nexport interface IRefineItemProps {\n parentProductRefinerHierarchy: IProductRefinerHierarchy;\n productRefinerValue: ProductRefinerValue;\n selectedRefinementCriterion: ProductRefinerValue | undefined;\n selectedRefinerValues?: ProductRefinerValue[];\n refineItemCommonProps: IRefineItemCommonProps;\n isDisabled: boolean;\n context: ICoreContext>;\n moduleId: string;\n moduleTypeName: string;\n index?: number;\n productCountAriaLabel?: string;\n singleProductCountAriaLabel?: string;\n refineItemAriaLabel?: string;\n refineItemsAriaLabel?: string;\n isMobileView?: boolean;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onToggle(notfication: Readonly): void;\n urlBuilder(refiner: IRefineItemToggleNotification): string;\n}\n\n/**\n * Refine item state.\n */\nexport interface IRefineItemState extends React.ComponentState {\n isChecked: boolean;\n renderingError?: object;\n}\n\n/**\n * Single-select and multi-select refine item component (controlled by RefineSubmenu).\n */\nexport default class RefineItem extends React.Component {\n private readonly anchorType: React.RefObject;\n\n private readonly payLoad: IPayLoad;\n\n public constructor(props: IRefineItemProps) {\n super(props);\n this._onClick = this._onClick.bind(this);\n this.state = {\n isChecked: !!this.props.selectedRefinementCriterion\n };\n this.anchorType = React.createRef();\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n }\n\n public shouldComponentUpdate(nextProps: IRefineItemProps, nextState: IRefineItemState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | undefined {\n const {\n isDisabled,\n refineItemCommonProps,\n parentProductRefinerHierarchy,\n productRefinerValue,\n selectedRefinementCriterion,\n productCountAriaLabel,\n singleProductCountAriaLabel,\n index,\n children,\n onToggle,\n context,\n telemetryContent,\n refineItemAriaLabel,\n refineItemsAriaLabel,\n ...attrs\n } = this.props;\n if (!productRefinerValue) {\n refineItemCommonProps.telemetry.error('[refine-item] Cannot render refineItem without productRefinerValue');\n return undefined;\n }\n if (!productRefinerValue.LeftValueBoundString) {\n refineItemCommonProps.telemetry.warning(\n `[refine-item] RefineItem without LeftValueBoundString: ${JSON.stringify(productRefinerValue)}`\n );\n }\n const isSingleSelect = parentProductRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect;\n let itemTypeClassName = isSingleSelect ? 'single-select' : 'multi-select';\n itemTypeClassName = `ms-refine-submenu-item ${itemTypeClassName}`;\n const inputType = isSingleSelect ? 'radio' : 'checkbox';\n const isChecked = !!selectedRefinementCriterion;\n itemTypeClassName = isChecked ? `${itemTypeClassName}-checked` : itemTypeClassName;\n if (parentProductRefinerHierarchy.SourceValue === ProductRefinerSource.Rating) {\n return this._renderRating(\n productRefinerValue,\n parentProductRefinerHierarchy,\n isChecked,\n context,\n index,\n telemetryContent,\n productCountAriaLabel,\n singleProductCountAriaLabel\n );\n }\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString ?? productRefinerValue.LeftValueBoundString;\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const productText = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const productCount = productRefinerValue.Count || 0;\n let refineMenuItemAriaLabel;\n if (productCount === 1) {\n refineMenuItemAriaLabel = refineItemAriaLabel\n ? format(refineItemAriaLabel, parentProductRefinerHierarchy.KeyName, productText)\n : '';\n } else {\n refineMenuItemAriaLabel = refineItemsAriaLabel\n ? format(refineItemsAriaLabel, parentProductRefinerHierarchy.KeyName, productText, productCount)\n : '';\n }\n\n const dimensionType = (this.props.parentProductRefinerHierarchy.KeyName?.toLocaleLowerCase() ?? '') as DimensionTypes;\n const shouldDisplayAsSwatch = this._getShouldDisplayAsSwatch(dimensionType);\n\n let className = 'ms-refine-submenu-item';\n if (shouldDisplayAsSwatch) {\n className = classnames(className, `ms-refine-submenu-item__dimension__${dimensionType}`);\n }\n\n // If the swatch has no color or image specified, it should be displayed as text.\n // We don't use swatch logic to display the number of the results found together with the text.\n const hasColor = !StringExtensions.isNullOrWhitespace(productRefinerValue.SwatchColorHexCode);\n const hasImage = !StringExtensions.isNullOrWhitespace(productRefinerValue.SwatchImageUrl);\n const hasContentSwatch = hasColor || hasImage;\n\n return (\n
  • \n \n {hasContentSwatch && shouldDisplayAsSwatch && this._renderSwatch(dimensionType)}\n \n \n
  • \n );\n }\n\n private _getShouldDisplayAsSwatch(dimensionType: DimensionTypes) {\n const shouldDisplayAsSwatch = checkIfShouldDisplayAsSwatch(dimensionType, this.props.context as ICoreContext);\n return shouldDisplayAsSwatch;\n }\n\n private _renderSwatch(dimensionType: DimensionTypes): JSX.Element | null {\n const productRefinerValue = this.props.productRefinerValue;\n\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const text = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n const swatchItems = [\n {\n itemId: `${productRefinerValue.RefinerRecordId ?? ''}-${dimensionType}-${text}`,\n value: text,\n dimensionType,\n colorHexCode: productRefinerValue.SwatchColorHexCode,\n imageUrl: productRefinerValue.SwatchImageUrl\n }\n ];\n\n return (\n \n );\n }\n\n private _getRefinerUrl(): string {\n const { urlBuilder, parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\n\n if (productRefinerValue) {\n return urlBuilder({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: !selectedRefinementCriterion\n });\n }\n\n return '';\n }\n\n private readonly _onClick = (e: React.MouseEvent): void => {\n e.preventDefault();\n\n const { parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\n if (productRefinerValue) {\n this.props.onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: !selectedRefinementCriterion\n });\n\n setTimeout(() => {\n this.anchorType.current && this.anchorType.current.focus();\n }, 0);\n }\n };\n\n private _renderRating(\n productRefinerValue: ProductRefinerValue,\n parentProductRefinerHierarchy: IProductRefinerHierarchy,\n isChecked: boolean,\n context: ICoreContext,\n index?: number,\n telemetryContent?: ITelemetryContent,\n ratingUserCountAriaLabel?: string,\n ratingSingleUserCountAriaLabel?: string\n ): JSX.Element | undefined {\n if (productRefinerValue.LeftValueBoundString) {\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString;\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\n const refinerRating = Number.parseInt(productRefinerValue.LeftValueBoundString, 10);\n const ratingRefiner = this.props.selectedRefinerValues?.find(\n value => value.DataTypeValue === productRefinerValue.DataTypeValue\n );\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const selectedRating = Number.parseInt(ratingRefiner?.LeftValueBoundString || '0', 10);\n const defaultChkProductCount = 1;\n let ratingComponentClass: string = 'ms-rating-component';\n if (refinerRating > selectedRating) {\n ratingComponentClass = `${ratingComponentClass}__up`;\n } else if (refinerRating < selectedRating) {\n ratingComponentClass = `${ratingComponentClass}__down`;\n } else {\n ratingComponentClass = `${ratingComponentClass}__current`;\n }\n const productCountAriaLabelValue =\n productRefinerValue.Count !== undefined && productRefinerValue.Count === defaultChkProductCount\n ? ratingSingleUserCountAriaLabel && format(ratingSingleUserCountAriaLabel, productRefinerValue.Count)\n : ratingUserCountAriaLabel && format(ratingUserCountAriaLabel, productRefinerValue.Count);\n return (\n \n \n \n \n {productRefinerValue.Count !== undefined && `(${productRefinerValue.Count})`}\n \n \n \n );\n }\n return undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport { DisplayTemplate, ProductRefinerSource, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\nimport { Button, Collapse, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport RangeRefineItem, { RangeRefineItemType } from './range-refine-item';\nimport RefineItem from './refine-item';\nimport { IRefineItemCommonProps } from './refine-item.props.common';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\nimport { findMatchingRefinementCriterion, isRangeType } from './utilities';\n\n/**\n * Properties associated with the RefineSubmenu component.\n */\nexport interface IRefineSubmenuProps {\n tempRangeTypeTODO: RangeRefineItemType;\n minValueSliderThumbAriaLabel?: string;\n maxValueSliderThumbAriaLabel?: string;\n productRefinerHierarchy: IProductRefinerHierarchy;\n selectedRefinerValues: ProductRefinerValue[];\n refineItemCommonProps: IRefineItemCommonProps;\n isDisabled: boolean;\n isExpandedOnInitialLoad: boolean;\n context: ICoreContext>;\n moduleId: string;\n moduleTypeName: string;\n productCountAriaLabel?: string;\n singleProductCountAriaLabel?: string;\n refineItemAriaLabel?: string;\n refineItemsAriaLabel?: string;\n isMobile?: boolean;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onUpdateRefiners(notfication: Readonly): void;\n urlBuilder(refiner: IRefineItemToggleNotification): string;\n}\n\n/**\n * Refine submenu state.\n */\nexport interface IRefineSubmenuState extends React.ComponentState {\n expanded: boolean;\n}\n\n/**\n *\n * The RefineSubmenu component renders the submenu category and child items.\n * This computed observes the stateful category hierarchy object.\n * @extends {React.PureComponent}\n */\nclass RefineSubmenu extends React.Component {\n constructor(props: IRefineSubmenuProps) {\n super(props);\n\n this._onToggleItem = this._onToggleItem.bind(this);\n this._onToggleSubmenu = this._onToggleSubmenu.bind(this);\n\n // const isExpanded = this.props.isExpandedOnInitialLoad;\n const isExpanded = false;\n\n // If (this.props.productRefinerHierarchy.DataTypeValue === ProductRefinerValueDataTypeValue.Range) {\n // isExpanded = true;\n // }\n\n this.state = {\n expanded: isExpanded\n };\n }\n\n public shouldComponentUpdate(nextProps: IRefineSubmenuProps, nextState: IRefineSubmenuState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { productRefinerHierarchy, refineItemCommonProps } = this.props;\n\n if (!productRefinerHierarchy) {\n refineItemCommonProps.telemetry.error('Cannot render submenu without refiner hierarchy data');\n }\n\n if (productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating && this.props.context.app.config.hideRating) {\n return null;\n }\n\n const className = classnames(\n 'ms-refine-submenu',\n 'list-group',\n productRefinerHierarchy.KeyName // Deprecated because of the localization issues. Leaving for backward compatibility reasons.\n );\n\n return (\n
    \n \n {productRefinerHierarchy.KeyName}\n \n \n {this._renderChildItems(productRefinerHierarchy)}\n \n
    \n );\n }\n\n private _renderChildItems(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n if (isRangeType(productRefinerHierarchy.DataTypeValue)) {\n return this._renderRange(productRefinerHierarchy);\n }\n return this._renderSingleMultiSelect(productRefinerHierarchy);\n }\n\n private _renderSingleMultiSelect(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n const {\n isDisabled,\n refineItemCommonProps,\n selectedRefinerValues,\n context,\n productCountAriaLabel,\n singleProductCountAriaLabel,\n refineItemAriaLabel,\n refineItemsAriaLabel,\n isMobile\n } = this.props;\n const isSingleSelect =\n productRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect &&\n productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating;\n const role = isSingleSelect ? { role: 'listbox' } : undefined;\n const refinerValuesList = productRefinerHierarchy.Values || [];\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\n if (!child) {\n refineItemCommonProps.telemetry.error(\n `[refine-submenu] Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\n );\n return null;\n }\n\n const selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\n\n return (\n \n refinerValuesList.find(value => value.RefinerRecordId === selectedValue.RefinerRecordId)\n )}\n refineItemCommonProps={refineItemCommonProps}\n onToggle={this._onToggleItem}\n urlBuilder={this.props.urlBuilder}\n isDisabled={isDisabled}\n key={index}\n index={index}\n context={context}\n moduleId={this.props.moduleId}\n moduleTypeName={this.props.moduleTypeName}\n telemetryContent={this.props.telemetryContent}\n productCountAriaLabel={productCountAriaLabel}\n refineItemAriaLabel={refineItemAriaLabel}\n refineItemsAriaLabel={refineItemsAriaLabel}\n singleProductCountAriaLabel={singleProductCountAriaLabel}\n isMobileView={isMobile}\n />\n );\n });\n return (\n \n {listItems}\n \n );\n }\n\n private _getRangeType(productRefinerHierarchy: IProductRefinerHierarchy): 'input' | 'slider' {\n if (\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range ||\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Slider ||\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.SliderWithBars\n ) {\n return 'slider';\n }\n return 'input';\n }\n\n private _renderRange(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n const {\n isDisabled,\n refineItemCommonProps,\n selectedRefinerValues,\n context,\n minValueSliderThumbAriaLabel,\n maxValueSliderThumbAriaLabel\n } = this.props;\n const submenuClassNamePrefix = 'ms-refine-submenu__item list-group-item refine-submenu__item';\n const refinerValuesList = productRefinerHierarchy.Values || [];\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\n if (!child) {\n refineItemCommonProps.telemetry.error(\n `Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\n );\n return null;\n }\n\n const selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\n\n const rangeType = this._getRangeType(productRefinerHierarchy);\n const key = selectedRefinementCriterion\n ? `${selectedRefinementCriterion.LeftValueBoundString}-${selectedRefinementCriterion.RightValueBoundString}`\n : `not-selected-${index}`;\n return (\n
  • \n \n
  • \n );\n });\n return
      {listItems}
    ;\n }\n\n private _onToggleItem(itemToggleNotification: IRefineItemToggleNotification): void {\n this.props.onUpdateRefiners(itemToggleNotification);\n }\n\n private _onToggleSubmenu(): void {\n this.setState(prevState => ({\n expanded: !prevState.expanded\n }));\n }\n}\n\nexport default RefineSubmenu;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport * as React from 'react';\n\ninterface ISeparator {\n separator: string;\n}\n\nexport const Separator: React.FC = ({ separator }) => (\n \n {` `}\n {separator}\n {` `}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport * as React from 'react';\n\ninterface ITitle {\n className: string;\n text: string;\n}\n\nexport const Title: React.FC = ({ text, className }) => (\n \n {` `}\n {text}\n {` `}\n \n);\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * ISearchResultContainer containerModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\n\r\nexport const enum expandRefinersCount {\r\n all = 'all',\r\n one = 'one',\r\n two = 'two',\r\n three = 'three',\r\n four = 'four'\r\n}\r\n\r\nexport interface ISearchResultContainerConfig extends Msdyn365.IModuleConfig {\r\n itemsPerPage?: number;\r\n allowBackNavigation?: boolean;\r\n imageSettings?: Msdyn365.IImageSettings;\r\n expandRefinersCount?: expandRefinersCount;\r\n disableHierarchy?: boolean;\r\n includeAttributes?: boolean;\r\n enableAffiliationBasedPricing?: boolean;\r\n updateRefinerPanel?: boolean;\r\n className?: string;\r\n clientRender?: boolean;\r\n}\r\n\r\nexport interface ISearchResultContainerResources {\r\n noResultsForRefinersText: string;\r\n resultCategoryNotFoundText: string;\r\n resultSearchNotFoundText: string;\r\n paginationAriaLabel: string;\r\n priceFree: string;\r\n priceRangeSeparator: string;\r\n originalPriceText: string;\r\n currentPriceText: string;\r\n ratingAriaLabel: string;\r\n flipperNext: string;\r\n flipperPrevious: string;\r\n searchTextPrefix: string;\r\n numberOfProducts: string;\r\n oneProduct: string;\r\n categoryLinkAriaLabel: string;\r\n sortByDropdownLabel: string;\r\n sortByOptionNameAsc: string;\r\n sortByOptionNameDesc: string;\r\n sortByOptionPriceAsc: string;\r\n sortByOptionPriceDesc: string;\r\n sortByOptionRatingDesc: string;\r\n sortByOptionBestSelling: string;\r\n sortByOptionNewScore: string;\r\n sortByOptionTrendingScore: string;\r\n sortByOptionRelevanceDesc: string;\r\n placeholderTextMax: string;\r\n minLabel: string;\r\n maxLabel: string;\r\n rangeNameFormat: string;\r\n validationErrorNotNumber: string;\r\n validationErrorNotRange: string;\r\n clearAllText: string;\r\n choiceSummaryLabel: string;\r\n choiceFormat: string;\r\n choiceRangeValueFormat: string;\r\n choiceAriaLabel: string;\r\n closeAriaLabel: string;\r\n modalTitle: string;\r\n modalCloseButtonText: string;\r\n minValueSliderThumbAriaLabel: string;\r\n maxValueSliderThumbAriaLabel: string;\r\n featureSimilarLooksTitle: string;\r\n featureSimilarDescriptionTitle: string;\r\n productCountAriaLabel: string;\r\n singleProductCountAriaLabel: string;\r\n swatchItemAriaLabel: string;\r\n refineItemsAriaLabel: string;\r\n refineItemAriaLabel: string;\r\n}\r\n\r\nexport interface ISearchResultContainerProps extends Msdyn365.IModule {\r\n resources: ISearchResultContainerResources;\r\n config: ISearchResultContainerConfig;\r\n slots: {\r\n quickview: React.ReactNode[];\r\n productComparisonButton: React.ReactNode[];\r\n };\r\n}\r\n","/* eslint-disable security/detect-object-injection */\n/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport {\n CategoryHierarchy as CategoryHierarchyData,\n IProductRefinerHierarchy,\n IProductsDimensionsAvailabilities\n} from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { getCatalogId, ICoreContext } from '@msdyn365-commerce/core';\nimport {\n ChannelInventoryConfiguration,\n format,\n ProductPrice,\n ProductRefinerValue,\n ProductSearchResult,\n SortColumn,\n StoreOperationsDataActions,\n TextValueTranslation\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n DimensionAvailabilitiesForProductSearchResultInput,\n DimensionTypes,\n DimensionSwatchDisplayTypes,\n getDimensionAvailabilitiesForProductSearchResultAction,\n getPriceForProductSearchResult,\n IDimensionsApp,\n PriceForProductSearchResultInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n ILabeledDropdownOnChangeNotification,\n ILabeledDropdownOption,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n LabeledDropdown,\n UncontrolledPagination,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, observable, reaction, transaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n BaseCollectionInput,\n buildListPageUrl,\n getCollectionProducts,\n getCollectionRefinersAction,\n getCurrentUrl,\n GetFullProductsByCollectionInput,\n getInventoryRefinerAction,\n IFullProductsSearchResultsWithCount,\n InventoryInStockRefinerValueInput,\n parseQueryParam,\n ProductListInventoryFilteringOptions,\n RefinersByCollectionInput,\n sortOptions\n} from './actions';\nimport { hydrateRefinersFromUrl } from './actions/url-utils';\nimport {\n ErrorMessage,\n FeatureSearchResultItem,\n getUpdatedRefinementCriteria,\n IChoiceSummaryClickNotification,\n IRefineItemCommonProps,\n IRefineItemToggleNotification,\n ISearchResultModalViewProps,\n isMatchingRefinementCriterion,\n Link,\n ModalToggle,\n ProductSearchResultItems,\n SearchResultModal,\n Separator,\n Title\n} from './components';\nimport ChoiceSummary from './components/choice-summary';\nimport RefineSubmenu from './components/refine-submenu';\nimport { ListPageState } from './list-page-state';\nimport { ISearchResultContainerData } from './search-result-container.data';\nimport { expandRefinersCount, ISearchResultContainerProps } from './search-result-container.props.autogenerated';\nimport Slider from 'react-slick';\n\nexport interface ISearchResultContainerViewProps extends ISearchResultContainerProps {\n products?: React.ReactNode;\n className?: string;\n SearchResultContainer: IModuleProps;\n TitleViewProps: ITitleViewProps;\n categoryHierarchy: ICategoryHierarchyViewProps;\n pagination?: React.ReactNode;\n ProductsContainer: INodeProps;\n ProductSectionContainer: INodeProps;\n refineMenu: IRefineMenuViewProps;\n sortByOptions: ISortByViewProps;\n choiceSummary?: React.ReactNode;\n modalToggle: React.ReactNode;\n searchResultModal: ISearchResultModalViewProps;\n isMobile: boolean;\n CategoryNavContainer: INodeProps;\n RefineAndProductSectionContainer: INodeProps;\n errorMessage: React.ReactNode;\n FeatureSearchContainer: INodeProps;\n similarLookProduct?: React.ReactNode;\n productPrices?: ProductPrice[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n categoriesCarousal?: React.ReactNode;\n isBrandPage: boolean;\n isCategoryPage: boolean;\n pageType: string;\n}\n\nexport interface ITitleViewProps {\n TitleContainer: INodeProps;\n title: ISearchResultTitle;\n isCategoryPage: boolean;\n pageType: string;\n}\n\nexport interface IRefineMenuViewProps {\n RefineMenuContainer: INodeProps;\n RefinerSectionContainer: INodeProps;\n refiners?: React.ReactNode[];\n}\n\nexport interface ICategoryHierarchyViewProps {\n categoryHierarchyList?: React.ReactNode[];\n categoryHierarchySeparator?: React.ReactNode;\n CategoryHierarchyContainer: INodeProps;\n}\n\nexport interface ISortByViewProps {\n SortingContainer: INodeProps;\n sortByDropDown?: React.ReactNode;\n}\n\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Title component for search result container.\n */\nexport interface ISearchResultTitle {\n titlePrefix?: React.ReactNode;\n titleText?: React.ReactNode;\n titleCount?: React.ReactNode;\n}\n\nexport interface ISearchResultContainerState {\n sortingState: ISortByCollectionState;\n modalIsOpen: boolean;\n refiners: IProductRefinerHierarchy[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n channelInventoryConfiguration?: ChannelInventoryConfiguration;\n activeProductsList: ProductSearchResult[];\n oosIds: [];\n}\n\ninterface ISortByCollectionState {\n selectedSortByOption: ILabeledDropdownOption;\n pending: boolean;\n}\n\n/**\n *\n * SearchResultContainer component.\n * @extends {React.PureComponent>}\n */\n@observer\nexport default class SearchResultContainer extends React.PureComponent<\n ISearchResultContainerProps,\n ISearchResultContainerState\n> {\n @computed get isMobile(): boolean {\n return this._viewport === 'xs' || this._viewport === 'sm';\n }\n\n private readonly sortByDropdownOptions: ILabeledDropdownOption[] = [\n { key: sortOptions.sortByOptionRelevanceDesc, value: this.props.resources.sortByOptionRelevanceDesc },\n { key: sortOptions.sortByOptionNameAsc, value: this.props.resources.sortByOptionNameAsc },\n { key: sortOptions.sortByOptionNameDesc, value: this.props.resources.sortByOptionNameDesc },\n { key: sortOptions.sortByOptionPriceAsc, value: this.props.resources.sortByOptionPriceAsc },\n { key: sortOptions.sortByOptionPriceDesc, value: this.props.resources.sortByOptionPriceDesc },\n { key: sortOptions.sortByOptionRatingDesc, value: this.props.resources.sortByOptionRatingDesc },\n { key: sortOptions.sortByOptionBestSelling, value: this.props.resources.sortByOptionBestSelling },\n { key: sortOptions.sortByOptionNewScore, value: this.props.resources.sortByOptionNewScore },\n { key: sortOptions.sortByOptionTrendingScore, value: this.props.resources.sortByOptionTrendingScore }\n ];\n\n private readonly _refineItemCommonProps: IRefineItemCommonProps;\n\n private readonly _pageType: string | undefined = this.props.context.request.urlTokens.pageType;\n\n @observable\n private _viewport: GridSize = 'lg';\n\n private readonly _modalToggleRef: React.RefObject;\n\n private readonly _sortAndFilterContainerRef: React.RefObject;\n\n private expandrefinerCount: number | undefined = 0;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly productPrices: ProductPrice[];\n\n private readonly defaultPageNumber = 0;\n\n private readonly localyOnlineRecordId = 5637144702;\n\n private readonly allBrandsRecordId = 5637144824;\n\n private readonly allOfferSRecordId = 5637144701;\n\n private readonly catalogId = getCatalogId(this.props.context.request);\n\n private isListPageStateUpdated: boolean = false;\n\n private _isMounted: boolean = false;\n\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\n let nameTranslation: TextValueTranslation | undefined;\n if (locale && nameTranslations && ArrayExtensions.hasElements(nameTranslations)) {\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\n }\n\n return nameTranslation?.Text;\n }\n\n public constructor(props: ISearchResultContainerProps, state: ISearchResultContainerState) {\n super(props);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Check required.\n this._viewport = props.context.request?.device?.Type === 'Mobile' ? 'xs' : 'lg';\n this._modalToggleRef = React.createRef();\n this._sortAndFilterContainerRef = React.createRef();\n this._toggleModal = this._toggleModal.bind(this);\n this._updateViewport = this._updateViewport.bind(this);\n this.productPrices = [];\n this.state = {\n sortingState: {\n pending: false,\n selectedSortByOption: this.sortByDropdownOptions[0]\n },\n modalIsOpen: false,\n refiners: [],\n channelInventoryConfiguration: undefined,\n activeProductsList: [],\n oosIds: []\n };\n const { placeholderTextMax, minLabel, maxLabel, rangeNameFormat } = this.props.resources;\n\n const locale = this.props.context.request.locale;\n const telemetry = this.props.telemetry;\n const validationErrorNaN = this.props.resources.validationErrorNotNumber;\n const validationErrorRange = this.props.resources.validationErrorNotRange;\n this._refineItemCommonProps = {\n telemetry,\n locale,\n placeholderTextMax,\n minLabel,\n maxLabel,\n rangeNameFormat,\n validationErrorNaN,\n validationErrorRange\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this._updateViewport();\n }\n public async componentDidMount(): Promise {\n this._isMounted = true;\n if (MsDyn365.isBrowser && window.addEventListener) {\n window.addEventListener('resize', this._updateViewport);\n this._updateViewport();\n }\n //\n await this.fetchActiveProductsList();\n //\n const listPageState = await this.props.data.listPageState;\n const products = await this.props.data.products;\n const channelInventoryConfiguration = await StoreOperationsDataActions.getInventoryConfigurationAsync({\n callerContext: this.props.context.actionContext\n });\n if (this._isMounted) {\n this.setState({ channelInventoryConfiguration });\n }\n // Push inventory in stock refiner when productListInventoryDisplay is hide oos\n const inventoryRefiner = await this._getInventoryRefiner(listPageState, channelInventoryConfiguration);\n\n this._updateListPageState(listPageState, products);\n\n // Initialize reaction based on listPageState properties\n reaction(\n () => {\n return [\n listPageState.activeFilters?.length,\n listPageState.currentPageNumber,\n ArrayExtensions.hasElements(listPageState.sortingCritera?.Columns)\n ];\n },\n async () => {\n const newListPageState = await this.props.data.listPageState;\n const input = new GetFullProductsByCollectionInput(\n newListPageState.pageType,\n this.props.context.request.apiSettings,\n {\n Paging: {\n Top: this.props.config.itemsPerPage,\n Skip: Math.max(newListPageState.pageSize * (newListPageState.currentPageNumber ?? 0), 0)\n },\n count: true,\n Sorting: newListPageState.sortingCritera ?? {}\n },\n newListPageState.activeFilters ?? [],\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\n +(this.props.context.request.urlTokens.recordId || 0),\n\n // eslint-disable-next-line max-len -- existing code\n this.props.context.request.query?.q\n ? this.props.context.request.query.q\n : JSON.stringify({\n ProductId: this.props.context.request.query?.productId,\n Recommendation: this.props.context.request.query?.recommendation\n }),\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Required check.\n !!this.props?.config?.includeAttributes,\n this.props.config.updateRefinerPanel,\n this.props.context.request.locale,\n this.catalogId,\n channelInventoryConfiguration,\n inventoryRefiner\n );\n\n const productResults = await getCollectionProducts(input, this.props.context.actionContext);\n newListPageState.totalProductCount = productResults.count;\n newListPageState.activeProducts = productResults.products;\n await this.fetchActiveProductsList();\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- check is required.\n if (\n this.props.config.enableAffiliationBasedPricing &&\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\n ) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities data without blocking the UI.\n this._getActivePrice();\n }\n\n const context = this.props.context as ICoreContext;\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\n if (\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none) &&\n this.props.config.includeAttributes\n ) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities of dimensions data without blocking the UI.\n this._getProductsDimensionsAvailabilities();\n }\n\n if (this.props.config.updateRefinerPanel) {\n const refinerInput = new RefinersByCollectionInput(\n newListPageState.pageType,\n this.props.context.request.apiSettings,\n {\n Paging: {\n Top: this.props.config.itemsPerPage,\n Skip: Math.max(\n newListPageState.pageSize * (newListPageState.currentPageNumber ?? this.defaultPageNumber),\n this.defaultPageNumber\n )\n },\n count: true,\n Sorting: newListPageState.sortingCritera ?? {}\n },\n newListPageState.activeFilters ?? [],\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\n +(this.props.context.request.urlTokens.recordId || 0),\n this.props.context.request.query?.q\n ? this.props.context.request.query.q\n : this.props.context.request.query?.productId,\n false,\n this.props.config.updateRefinerPanel,\n undefined,\n this.catalogId,\n channelInventoryConfiguration,\n inventoryRefiner\n );\n\n const refiners = await getCollectionRefinersAction(refinerInput, this.props.context.actionContext);\n this.setState({ refiners });\n }\n }\n );\n\n if (\n this.props.config.enableAffiliationBasedPricing &&\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Condition required.\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\n ) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities data without blocking the UI.\n this._getActivePrice();\n }\n }\n\n public componentWillUnmount(): void {\n this._isMounted = false;\n if (MsDyn365.isBrowser && window.removeEventListener) {\n window.removeEventListener('resize', this._updateViewport);\n }\n }\n\n public render(): JSX.Element {\n const {\n config: { imageSettings, className },\n resources,\n data: { listPageState, products: productCollection, featureProduct }\n } = this.props;\n\n if (!this.isListPageStateUpdated && listPageState.result && productCollection.result) {\n this._updateListPageState(listPageState.result, productCollection.result);\n this.isListPageStateUpdated = true;\n }\n\n const products = this.state.activeProductsList; //(this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\n const searchProduct = listPageState.result?.featureProduct ?? featureProduct.result ?? null;\n let errorText = '';\n if (!ArrayExtensions.hasElements(products)) {\n errorText = this._pageType === 'Category' ? resources.resultCategoryNotFoundText : resources.resultSearchNotFoundText;\n }\n const productsComponent = this._getProducts();\n const featureComponent = (\n \n );\n\n let pageType = 'search';\n if (this.props.data.category.result?.ParentCategory === this.allBrandsRecordId) {\n pageType = 'brand';\n } else if (this.props.data.category.result?.ParentCategory === this.localyOnlineRecordId) {\n pageType = 'parent-category';\n } else if (this.props.data.category.result && this.props.data.category.result?.ParentCategory !== this.allBrandsRecordId) {\n pageType = 'category';\n }\n const searchResultContainerViewProps = {\n ...this.props,\n products: productsComponent,\n TitleViewProps: this._getCollectionTitle(pageType),\n categoryHierarchy: !this.props.config.disableHierarchy && this._getCategoryHierarchy(),\n refineMenu: this._getRefineMenu(),\n className: classnames('ms-search-result-container', className),\n SearchResultContainer: {\n moduleProps: this.props,\n className: classnames('ms-search-result-container', className)\n },\n sortByOptions: this.props.data.listPageState.result?.totalProductCount !== 0 ? this._getSortingDropDown() : null,\n pagination: this._getPagination(),\n ProductsContainer: { className: 'ms-search-result-container__Products' },\n ProductSectionContainer: { className: 'ms-search-result-container__product-section' },\n // CategoryNavContainer: { className: 'ms-search-result-container__category-nav-section' },\n RefineAndProductSectionContainer: { className: 'ms-search-result-container__refine-product-section' },\n choiceSummary: this._getChoiceSummary(),\n modalToggle:\n this.props.data.listPageState.result?.totalProductCount !== 0 ? (\n \n ) : null,\n searchResultModal: this._getSearchResultModal(),\n isMobile: this.isMobile,\n errorMessage: errorText && ,\n FeatureSearchContainer: { className: 'ms-feature-search-result' },\n similarLookProduct: searchProduct ? featureComponent : null,\n productPrices: this.productPrices,\n productsDimensionAvailabilities: this.state.productsDimensionAvailabilities,\n categoriesCarousal: this.renderCategoriesCarousal(),\n isCategoryPage:\n this.props.data.category.result && this.props.data.category.result?.ParentCategory !== this.allBrandsRecordId\n ? true\n : false,\n isBrandPage: this.props.data.category.result?.ParentCategory === this.allBrandsRecordId,\n pageType\n };\n return this.props.renderView(searchResultContainerViewProps) as React.ReactElement;\n }\n\n public async fetchActiveProductsList() {\n const products = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\n const OOSProductIds = await this.fetchOOSProductIds();\n const data = products && products?.length > 0 ? products.filter(product => !OOSProductIds.includes(product.RecordId)) : [];\n this.setState({ activeProductsList: data });\n }\n\n public async fetchOOSProductIds() {\n let response = [];\n const itemStr = localStorage.getItem('OOSData');\n\n if (!itemStr) {\n response = await this.getOOSProductData();\n } else {\n const item = JSON.parse(itemStr);\n const now = Date.now();\n response = item.value;\n // Check if the data is expired\n if (now > item.expiry) {\n localStorage.removeItem('OOSData'); // Remove expired data from local storage\n response = await this.getOOSProductData();\n }\n }\n return response;\n }\n\n public async getOOSProductData() {\n const minutes = 15;\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const axios = require('axios');\n\n const config = {\n method: 'get',\n maxBodyLength: Infinity,\n url: 'https://api.localy.ae/fetchOOSData',\n headers: {}\n };\n\n return axios\n .request(config)\n .then((response: any) => {\n if (response?.data?.unavailableProductIds && response?.data?.unavailableProductIds?.length > 0) {\n const expiryTimestamp = Date.now() + minutes * 60 * 1000; // Set expiry time in milliseconds\n const item = {\n value: response?.data?.unavailableProductIds,\n expiry: expiryTimestamp\n };\n localStorage.setItem('OOSData', JSON.stringify(item));\n return response?.data?.unavailableProductIds;\n }\n })\n .catch((error: any) => {\n console.log(error);\n });\n }\n\n private renderCategoriesCarousal = (): React.ReactNode => {\n const base_image_url = 'https://images-eu-prod.cms.commerce.dynamics.com/cms/api/vnnhvggtsx/imageFileData/'; // prod\n // const base_image_url = 'https://images-eu-prod.cms.commerce.dynamics.com/cms/api/mhkxmwzwbc/imageFileData/'; // uat\n const parentCategory =\n this.props.data.categories?.result &&\n this.props.data.categories.result.filter(cat => cat.RecordId === this.props.data.category.result?.ParentCategory);\n\n let parentCategoryUrl =\n parentCategory?.[0]?.Name &&\n `/${parentCategory?.[0]?.Name.replace(/\\s+/g, '-').toLowerCase()}/${parentCategory?.[0]?.RecordId}.c`;\n\n let parentCategoryImgUrl =\n parentCategory?.[0]?.Images &&\n parentCategory?.[0].Images?.[0].Uri &&\n `${parentCategory?.[0].Images?.[0].Uri.replace(/\\s+/g, '-').toLowerCase()}`;\n\n let sameLevelCategories =\n this.props.data.categories?.result &&\n this.props.data.categories.result.filter(cat => cat.ParentCategory === this.props.data.category.result?.ParentCategory);\n\n let parentCategoryName = parentCategory?.[0]?.Name;\n // If parentCategory is localyOnline\n if (\n this.props.data.category.result?.ParentCategory === this.localyOnlineRecordId ||\n this.props.data.category.result?.ParentCategory === this.allOfferSRecordId\n ) {\n parentCategoryUrl =\n this.props.data.category?.result?.[0]?.Name &&\n `/${this.props.data.category?.result?.[0]?.Name.replace(/\\s+/g, '-').toLowerCase()}/${\n this.props.data.category?.result?.[0]?.RecordId\n }.c`;\n\n parentCategoryImgUrl =\n this.props.data.category?.result?.Images &&\n this.props.data.category?.result?.Images?.[0].Uri &&\n `${this.props.data.category?.result?.Images?.[0].Uri.replace(/\\s+/g, '-').toLowerCase()}`;\n\n parentCategoryName = this.props.data.category?.result?.Name;\n\n sameLevelCategories =\n this.props.data.categories?.result &&\n this.props.data.categories.result.filter(cat => cat.ParentCategory === this.props.data.category.result?.RecordId);\n }\n const sliderNumber = 6;\n // if (sameLevelCategories?.length && sameLevelCategories?.length >= 6) {\n // sliderNumber = 6;\n // }\n var settings = {\n dots: false,\n infinite: false,\n speed: 500,\n slidesToShow: sliderNumber,\n slidesToScroll: 1,\n arrows: true,\n responsive: [\n {\n breakpoint: 1400,\n settings: {\n slidesToShow: 6\n }\n },\n {\n breakpoint: 1200,\n settings: {\n slidesToShow: 6\n }\n },\n {\n breakpoint: 1024,\n settings: {\n slidesToShow: 5\n }\n },\n {\n breakpoint: 600,\n settings: {\n slidesToShow: 3\n }\n },\n {\n breakpoint: 480,\n settings: {\n slidesToShow: 2\n }\n }\n // You can unslick at a given breakpoint now by adding:\n // settings: \"unslick\"\n // instead of a settings object\n ]\n };\n if (sameLevelCategories && sameLevelCategories.length > 0) {\n const indexToMove = sameLevelCategories.findIndex(obj => this.props.data.category.result?.RecordId === obj.RecordId);\n\n if (indexToMove !== -1) {\n const [movedObject] = sameLevelCategories.splice(indexToMove, 1); // Remove the object at indexToMove\n sameLevelCategories.unshift(movedObject); // Add it to the beginning of the array\n }\n }\n if (\n this.props.data.category.result &&\n this.props.data.category.result?.ParentCategory !== this.allBrandsRecordId &&\n this.props.data.category.result?.RecordId !== this.localyOnlineRecordId &&\n sameLevelCategories &&\n sameLevelCategories?.length > 0\n ) {\n return (\n <>\n
    {parentCategoryName}
    \n \n \n \n

    \n View all\n

    \n \n
    \n \n {sameLevelCategories.map((card, index) => {\n const categoryUrlName = card?.Name && card.Name.replace(/\\s+/g, '-');\n const categoryUrl =\n categoryUrlName &&\n `/${categoryUrlName\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '')\n .toLowerCase()}/${card.RecordId}.c`;\n return (\n \n \n

    {card.Name?.replace(/-/g, ' ')}

    \n \n
    \n \n );\n })}\n
    \n \n );\n } else {\n return <>;\n }\n };\n\n /**\n * Update the list page state with initial data.\n * @param listPageState -- List page State.\n * @param products -- Products.\n */\n private readonly _updateListPageState = (listPageState: ListPageState, products: IFullProductsSearchResultsWithCount): void => {\n let querySorting: SortColumn[] = [];\n const defaultPageNumber: number = 10;\n\n if (this._pageType === 'Category') {\n listPageState.pageType = 'Category';\n } else {\n listPageState.pageType = 'Search';\n }\n\n if (this.props.context.request.query?.sorting) {\n querySorting = JSON.parse(decodeURIComponent(this.props.context.request.query.sorting)) as SortColumn[];\n }\n\n listPageState.currentPageNumber =\n (this.props.context.request.query &&\n +this.props.context.request.query.skip / (this.props.config.itemsPerPage ?? defaultPageNumber)) ||\n 0;\n listPageState.sortingCritera = { Columns: querySorting };\n listPageState.pageSize = this.props.config.itemsPerPage ?? defaultPageNumber;\n listPageState.activeProducts = products.products;\n listPageState.totalProductCount = products.count;\n listPageState.activeFilters = hydrateRefinersFromUrl(this.props.context.request) || [];\n if (this.props.context.request.query?.productId) {\n const featureProduct = this.props.data.featureProduct.result;\n if (featureProduct) {\n listPageState.featureProduct = featureProduct;\n }\n }\n };\n\n /**\n * Get products dimension availabilities.\n * @returns Void.\n */\n private readonly _getProductsDimensionsAvailabilities = async (): Promise => {\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\n\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\n new DimensionAvailabilitiesForProductSearchResultInput(\n productsList,\n this.props.context as ICoreContext,\n DimensionSwatchDisplayTypes.productCard\n ),\n this.props.context.actionContext\n );\n\n if (ArrayExtensions.hasElements(productsDimensionAvailabilities)) {\n this.setState({ productsDimensionAvailabilities });\n }\n };\n\n /**\n * Get the active price for the products.\n */\n private readonly _getActivePrice = async (): Promise => {\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\n const products = await getPriceForProductSearchResult(\n new PriceForProductSearchResultInput(productsList),\n this.props.context.actionContext\n );\n\n const listPageState = await this.props.data.listPageState;\n listPageState.activeProducts = products;\n };\n\n private readonly _getSearchResultModal = (): ISearchResultModalViewProps => {\n const { resources } = this.props;\n return SearchResultModal({\n resources: {\n modalCloseButtonText: resources.modalCloseButtonText,\n modalTitle: resources.modalTitle\n },\n isOpen: this.state.modalIsOpen,\n returnRef: this._modalToggleRef,\n onModalToggle: this._toggleModal\n });\n };\n\n private readonly _getCollectionTitle = (pageType: string): ITitleViewProps => {\n const { data, context, resources } = this.props;\n\n let collectionTitle: string | undefined = '';\n if (context && context.request && context.request.query && context.request.query.q) {\n collectionTitle = `\"${context.request.query.q}\"`;\n } else {\n collectionTitle =\n (data.category.result &&\n SearchResultContainer.getFriendlyName(context.request.locale, data.category.result.NameTranslations)) ||\n (data.category.result && data.category.result.Name) ||\n this.props.context.request.query?.title ||\n '';\n }\n let productCountText = '';\n let productCountNumber: number | undefined;\n if (data.listPageState && data.listPageState.result && data.listPageState.result.totalProductCount !== undefined) {\n productCountNumber = data.listPageState.result.totalProductCount;\n } else if (data.products && data.products.result) {\n productCountNumber = data.products.result.count;\n }\n\n if (productCountNumber && productCountNumber !== 0) {\n productCountText =\n productCountNumber !== 1\n ? format(this.props.resources.numberOfProducts, productCountNumber)\n : this.props.resources.oneProduct;\n } else {\n productCountText = format(this.props.resources.numberOfProducts, 0);\n }\n const pageName = context.request.telemetryPageName ? `result-count-${context.request.telemetryPageName.toLowerCase()}` : '';\n const titlePrefix = ;\n const titleText = collectionTitle && <Title className='ms-search-result__collection-title-text' text={collectionTitle} />;\n const titleCount = <Title className='ms-search-result__collection-title-count' text={productCountText} />;\n\n return {\n TitleContainer: { className: `ms-search-result-container__title ${pageName}` },\n title: {\n titlePrefix,\n titleText,\n titleCount\n },\n isCategoryPage: this.props.data.category.result ? true : false,\n pageType: pageType\n };\n };\n\n private readonly _getCategoryHierarchy = (): ICategoryHierarchyViewProps => {\n const { data } = this.props;\n const categoryHierarchy = data.categoryHierarchy.result;\n const categoryLinks =\n categoryHierarchy &&\n categoryHierarchy.map((value: CategoryHierarchyData, index: number) => {\n return (\n <Link\n key={index}\n text={value.Name}\n ariaLabel={`${this.props.resources.categoryLinkAriaLabel} ${value.Name}`}\n href={value.Url}\n />\n );\n });\n const categoryLinkSeparator = <Separator separator='/' />;\n\n return {\n CategoryHierarchyContainer: { tag: 'nav', className: 'ms-search-result-container__category-hierarchy' },\n categoryHierarchyList: categoryLinks,\n categoryHierarchySeparator: categoryLinkSeparator\n };\n };\n\n private readonly _getSortingDropDown = (): ISortByViewProps => {\n const { resources } = this.props;\n const activeDropdown = this._getCurrentlySelectedOption() || this.state.sortingState.selectedSortByOption;\n let dropdownOptions = this._getAllSortByOptions();\n const sortOptionsBlackList = ['AverageRating-Desc', 'BestSelling', 'NewScore', 'TrendingScore'];\n if (this.props.context.app.config.hideRating) {\n dropdownOptions = dropdownOptions.filter(dropdownOption => dropdownOption.key !== sortOptions.sortByOptionRatingDesc);\n }\n // Remove blacklisted sort options\n dropdownOptions = dropdownOptions.filter(dropdownOption => !sortOptionsBlackList.includes(dropdownOption.key));\n\n const dropdown = (\n <>\n <div className='sort-filter-parent'>\n <LabeledDropdown\n labelClassname='reviews-list-sort-by'\n labelText={resources.sortByDropdownLabel}\n dropdownId='categorySortByDropdown'\n dropdownClassname='reviews-list-dropdown'\n toggleColor='link'\n dropdownOptions={dropdownOptions}\n selectedOption={activeDropdown}\n onSelectOption={this._updateSortByDropdown}\n ref={this._sortAndFilterContainerRef}\n />\n <svg width='6' height='4' viewBox='0 0 6 4' fill='none' xmlns='http://www.w3.org/2000/svg'>\n <path\n d='M3.56565 3.74758C3.26725 4.08414 2.73275 4.08414 2.43435 3.74758L0.184084 1.20944C-0.235608 0.736054 0.108641 -5.47465e-08 0.749732 0L5.25027 3.84327e-07C5.89136 4.39073e-07 6.23561 0.736055 5.81592 1.20944L3.56565 3.74758Z'\n fill='black'\n />\n </svg>\n </div>\n </>\n );\n return {\n SortingContainer: { className: 'ms-search-result-container__Sort-by-category' },\n sortByDropDown: dropdown\n };\n };\n\n private readonly _getPagination = (): React.ReactNode => {\n const { config, context, data, resources } = this.props;\n const listPageState = data.listPageState.result;\n const fullUrl = getCurrentUrl(context.request);\n const itemsPerPage = config.itemsPerPage || 10;\n // eslint-disable-next-line max-len -- existing code\n const skipCount = listPageState?.currentPageNumber\n ? listPageState.currentPageNumber * (this.props.config.itemsPerPage || 10)\n : (this.props.context.request.query && +this.props.context.request.query.skip) || 0;\n const totalItems = listPageState?.totalProductCount || 0;\n const previousText = resources.flipperPrevious;\n const nextText = resources.flipperNext;\n\n if (totalItems <= itemsPerPage) {\n return null;\n }\n return (\n <UncontrolledPagination\n className='ms-search-result-container__pagination'\n role='navigation'\n aria-label={resources.paginationAriaLabel}\n url={fullUrl.href}\n qsp='skip'\n items={totalItems}\n itemsPerPage={itemsPerPage}\n startingItem={skipCount}\n previousText={this._renderPrev(previousText)}\n nextText={this._renderNext(nextText)}\n previousAriaLabel={previousText}\n nextAriaLabel={nextText}\n telemetryContent={this.telemetryContent}\n />\n );\n };\n\n private readonly _getRefineMenu = (): IRefineMenuViewProps => {\n const { data, context, config } = this.props;\n const tempRangeTypeTODO = context.request.query && context.request.query.inputRange ? 'input' : 'slider';\n const validRefiners =\n this.props.config.updateRefinerPanel && ArrayExtensions.hasElements(this.state.refiners)\n ? this.state.refiners.filter(refiner => {\n return ArrayExtensions.hasElements(refiner.Values) && !this._shouldHideFromRefiners(refiner);\n })\n : data.refiners.result &&\n data.refiners.result.filter(refiner => {\n return ArrayExtensions.hasElements(refiner.Values) && !this._shouldHideFromRefiners(refiner);\n });\n\n const activeRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n this._getexpandRefinerCount(validRefiners && validRefiners.length, config.expandRefinersCount);\n const expandedRefiners = this.expandrefinerCount;\n let pageType = 'search';\n if (this.props.data.category.result?.ParentCategory === this.allBrandsRecordId) {\n pageType = 'brand';\n } else if (this.props.data.category.result && this.props.data.category.result?.ParentCategory !== this.allBrandsRecordId) {\n pageType = 'category';\n }\n const brandFilterBlackList = ['Brand', 'Rating', 'Sourced From', 'hideOOS', 'Stock Status'];\n const categoryFilterBlackList = ['Category', 'Rating', 'Sourced From', 'hideOOS', 'Stock Status'];\n const otherFilterBlackList = ['Sourced From', 'hideOOS', 'Stock Status'];\n const subMenus =\n validRefiners &&\n validRefiners.map((productRefinerHierarchy: IProductRefinerHierarchy, index: number) => {\n if (pageType === 'brand') {\n if (productRefinerHierarchy.KeyName && brandFilterBlackList.includes(productRefinerHierarchy.KeyName)) {\n return null;\n } else {\n return (\n <RefineSubmenu\n productRefinerHierarchy={productRefinerHierarchy}\n selectedRefinerValues={activeRefiners}\n refineItemCommonProps={this._refineItemCommonProps}\n minValueSliderThumbAriaLabel={this.props.resources.minValueSliderThumbAriaLabel}\n maxValueSliderThumbAriaLabel={this.props.resources.maxValueSliderThumbAriaLabel}\n key={index}\n onUpdateRefiners={this._onUpdateRefiners}\n urlBuilder={this._buildRefinerUrl}\n isDisabled={false}\n isExpandedOnInitialLoad={!!(expandedRefiners && expandedRefiners > index)}\n tempRangeTypeTODO={tempRangeTypeTODO}\n context={context}\n moduleId={this.props.id}\n moduleTypeName={this.props.typeName}\n telemetryContent={this.telemetryContent}\n productCountAriaLabel={this.props.resources.productCountAriaLabel}\n refineItemAriaLabel={this.props.resources.refineItemAriaLabel}\n refineItemsAriaLabel={this.props.resources.refineItemsAriaLabel}\n singleProductCountAriaLabel={this.props.resources.singleProductCountAriaLabel}\n isMobile={this.isMobile}\n />\n );\n }\n } else if (pageType === 'category') {\n if (productRefinerHierarchy.KeyName && categoryFilterBlackList.includes(productRefinerHierarchy.KeyName)) {\n return null;\n } else {\n return (\n <RefineSubmenu\n productRefinerHierarchy={productRefinerHierarchy}\n selectedRefinerValues={activeRefiners}\n refineItemCommonProps={this._refineItemCommonProps}\n minValueSliderThumbAriaLabel={this.props.resources.minValueSliderThumbAriaLabel}\n maxValueSliderThumbAriaLabel={this.props.resources.maxValueSliderThumbAriaLabel}\n key={index}\n onUpdateRefiners={this._onUpdateRefiners}\n urlBuilder={this._buildRefinerUrl}\n isDisabled={false}\n isExpandedOnInitialLoad={!!(expandedRefiners && expandedRefiners > index)}\n tempRangeTypeTODO={tempRangeTypeTODO}\n context={context}\n moduleId={this.props.id}\n moduleTypeName={this.props.typeName}\n telemetryContent={this.telemetryContent}\n productCountAriaLabel={this.props.resources.productCountAriaLabel}\n refineItemAriaLabel={this.props.resources.refineItemAriaLabel}\n refineItemsAriaLabel={this.props.resources.refineItemsAriaLabel}\n singleProductCountAriaLabel={this.props.resources.singleProductCountAriaLabel}\n isMobile={this.isMobile}\n />\n );\n }\n } else {\n if (productRefinerHierarchy.KeyName && otherFilterBlackList.includes(productRefinerHierarchy.KeyName)) {\n return null;\n } else {\n return (\n <RefineSubmenu\n productRefinerHierarchy={productRefinerHierarchy}\n selectedRefinerValues={activeRefiners}\n refineItemCommonProps={this._refineItemCommonProps}\n minValueSliderThumbAriaLabel={this.props.resources.minValueSliderThumbAriaLabel}\n maxValueSliderThumbAriaLabel={this.props.resources.maxValueSliderThumbAriaLabel}\n key={index}\n onUpdateRefiners={this._onUpdateRefiners}\n urlBuilder={this._buildRefinerUrl}\n isDisabled={false}\n isExpandedOnInitialLoad={!!(expandedRefiners && expandedRefiners > index)}\n tempRangeTypeTODO={tempRangeTypeTODO}\n context={context}\n moduleId={this.props.id}\n moduleTypeName={this.props.typeName}\n telemetryContent={this.telemetryContent}\n productCountAriaLabel={this.props.resources.productCountAriaLabel}\n refineItemAriaLabel={this.props.resources.refineItemAriaLabel}\n refineItemsAriaLabel={this.props.resources.refineItemsAriaLabel}\n singleProductCountAriaLabel={this.props.resources.singleProductCountAriaLabel}\n isMobile={this.isMobile}\n />\n );\n }\n }\n });\n\n return {\n RefineMenuContainer: { className: 'ms-search-result-container__refine-menu' },\n RefinerSectionContainer: { className: 'ms-search-result-container__refiner-section' },\n refiners: subMenus\n };\n };\n\n /**\n * Should hide from refiners.\n * @param refiner - The refiner.\n * @returns ShouldHideFromRefiners.\n */\n private readonly _shouldHideFromRefiners = (refiner: IProductRefinerHierarchy): boolean => {\n const { channelInventoryConfiguration } = this.state;\n const isInventorySortableAttribute =\n (this.props.data.products.result?.inventoryAwareSortableAttributeId !== 0 &&\n refiner.RecordId === this.props.data.products.result?.inventoryAwareSortableAttributeId) ||\n (channelInventoryConfiguration?.ProductAvailabilitySortableAttributeRecordId !== 0 &&\n refiner.RecordId === channelInventoryConfiguration?.ProductAvailabilitySortableAttributeRecordId);\n\n const isInventoryProductAttribute =\n (this.props.data.products.result?.channelInventoryConfigurationId !== 0 &&\n refiner.RecordId === this.props.data.products.result?.channelInventoryConfigurationId) ||\n (channelInventoryConfiguration?.InventoryProductAttributeRecordId !== 0 &&\n refiner.RecordId === channelInventoryConfiguration?.InventoryProductAttributeRecordId);\n\n // Always hide sortable attribute since it's just for sorting products in Azure search, not for customers\n return (\n isInventorySortableAttribute ||\n (this.props.context.app.config.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS &&\n isInventoryProductAttribute)\n );\n };\n\n /**\n * Get inventory refiners.\n * @param listPageState The listPageState\n * @returns inventory refiner.\n */\n private readonly _getInventoryRefiner = async (\n listPageState: ListPageState,\n channelInventoryConfiguration: ChannelInventoryConfiguration\n ): Promise<IProductRefinerHierarchy | undefined> => {\n if (this.props.context.app.config.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS) {\n const baseCollectionInput = new BaseCollectionInput(\n listPageState.pageType,\n this.props.context.request.apiSettings,\n {\n count: true\n },\n\n // Parameter - refiners\n [],\n\n // Parameter - category\n undefined,\n\n // Parameter - searchText\n '',\n\n // Parameter - includeAttributes\n false,\n\n // Parameter - isUpdateRefinerPanel\n false,\n\n // Parameter - locale\n undefined,\n this.catalogId,\n channelInventoryConfiguration\n );\n const inventoryInStockRefinerValueInput = new InventoryInStockRefinerValueInput(\n baseCollectionInput,\n channelInventoryConfiguration?.InventoryProductAttributeRecordId\n );\n return getInventoryRefinerAction(inventoryInStockRefinerValueInput, this.props.context.actionContext);\n }\n return Promise.resolve(undefined);\n };\n\n private readonly _getChoiceSummary = (): React.ReactNode => {\n const { resources, data, telemetry } = this.props;\n const { channelInventoryConfiguration } = this.state;\n const selectedRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n const refinerValueName = this.props.data.refiners.result?.find(rating => rating.KeyName === 'Rating');\n return (\n <ChoiceSummary\n classNames='ms-choice-summary-by-category'\n clearAllText={resources.clearAllText}\n label={resources.choiceSummaryLabel}\n closeAriaLabel={resources.closeAriaLabel}\n selectedChoices={selectedRefiners}\n // @ts-expect-error: NOTE Type-unsafe line below, null refinersByCategoryHierarchy case not handled\n refinerHierarchy={data.refiners.result}\n choiceFormat={resources.choiceFormat}\n choiceRangeValueFormat={resources.choiceRangeValueFormat}\n telemetry={telemetry}\n onChoiceClicked={this._onChoiceClicked}\n urlBuilder={this._buildRefinerUrlForChoiceSummary}\n choiceAriaLabel={resources.choiceAriaLabel}\n telemetryContent={this.telemetryContent}\n context={this.props.context}\n channelInventoryConfigurationId={channelInventoryConfiguration?.InventoryProductAttributeRecordId}\n refinerValues={refinerValueName}\n />\n );\n };\n\n /**\n * Get Active products.\n * @returns - JSX Elements.\n */\n private readonly _getProducts = (): JSX.Element => {\n const {\n config: { imageSettings }\n // ,allowBackNavigation: shouldAllowBackNavigation\n } = this.props;\n const { resources } = this.props;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- Reading config value.\n // const breadCrumbType: string = this.props.context.app.config.breadcrumbType;\n const shouldAllowBack = false;\n //shouldAllowBackNavigation && (breadCrumbType === 'back' || breadCrumbType === 'categoryAndBack');\n\n const products = this.state.activeProductsList; //(this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\n const quickviewSlot = this.props.slots?.quickview?.[0];\n const productComparisonButton = ArrayExtensions.hasElements(this.props.slots.productComparisonButton)\n ? this.props.slots.productComparisonButton[0]\n : null;\n\n const isPriceMinMaxFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n return (\n <ProductSearchResultItems\n products={products}\n context={this.props.context}\n imageSettings={imageSettings}\n resources={resources}\n moduleType={this.props.typeName}\n moduleId={this.props.id}\n allowBackNavigation={shouldAllowBack}\n telemetryContent={this.telemetryContent}\n quickviewSlot={quickviewSlot}\n productComparisonButton={productComparisonButton}\n channelInventoryConfigurationId={this.props.data.products.result?.channelInventoryConfigurationId}\n isPriceMinMaxEnabled={isPriceMinMaxFeatureState?.IsEnabled}\n productsDimensionAvailabilities={this.state.productsDimensionAvailabilities}\n cartData={this.props.data.cart?.result}\n />\n );\n };\n\n private readonly _updateSortByDropdown = (notification: ILabeledDropdownOnChangeNotification): void => {\n const {\n context: { request: requestContext, actionContext }\n } = this.props;\n\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\n // eslint-disable-next-line max-len -- existing code\n const error = `[sort-by-category] cannot sort without context: ${!requestContext ? 'requestContext ' : ''} ${\n !actionContext ? 'actionContext ' : ''\n } could not be found`;\n this.props.telemetry.warning(error);\n return;\n }\n\n window.history.pushState(\n {},\n '',\n buildListPageUrl(\n getCurrentUrl(this.props.context.request),\n undefined,\n [this._getSortColumnFromSelectedOption(notification.selectedOption)],\n undefined\n )\n );\n transaction(() => {\n this.props.data.listPageState.result!.currentPageNumber = 0;\n this.props.data.listPageState.result!.sortingCritera = {\n Columns: [this._getSortColumnFromSelectedOption(notification.selectedOption)]\n };\n });\n };\n\n private readonly _getSortColumnFromSelectedOption = (option: ILabeledDropdownOption): SortColumn => {\n const { data } = this.props;\n\n if (!data.searchConfiguration.result) {\n return {};\n }\n\n const mappedConfiguration = data.searchConfiguration.result.find(searchConfiguration => {\n return searchConfiguration.key === option.key;\n });\n\n if (mappedConfiguration) {\n return mappedConfiguration.sortColumn;\n }\n\n return {};\n };\n\n /**\n * Retrieves current sort criteria.\n * @returns Sort criteria column which is currently active or undefined if it's not specified.\n */\n private readonly _getSortCriteriaColumn = (): SortColumn | undefined => {\n const sortCriteria = this.props.data.listPageState.result?.sortingCritera;\n if (ArrayExtensions.hasElements(sortCriteria?.Columns)) {\n return sortCriteria!.Columns[0];\n }\n\n const queryColumns = parseQueryParam<SortColumn[]>('sorting', this.props.context.request);\n if (ArrayExtensions.hasElements(queryColumns)) {\n return queryColumns[0];\n }\n\n return undefined;\n };\n\n /**\n * Retrieves dropdown options.\n * @returns All dropdown options.\n */\n private readonly _getAllSortByOptions = (): ILabeledDropdownOption[] => {\n const searchConfiguration = this.props.data.searchConfiguration.result;\n\n if (!searchConfiguration) {\n return [];\n }\n\n const mappedSearchConfiguration = this.sortByDropdownOptions.filter(mappedSearchConfig =>\n searchConfiguration.find(item => mappedSearchConfig.key === item.key)\n );\n\n return ArrayExtensions.validValues(mappedSearchConfiguration);\n };\n\n /**\n * Retrieves current selected dropdown option based on the sort criteria.\n * @returns Current dropdown option.\n */\n private readonly _getCurrentlySelectedOption = (): ILabeledDropdownOption | undefined => {\n const activeSortColumn = this._getSortCriteriaColumn();\n\n const searchConfiguration = this.props.data.searchConfiguration.result;\n\n if (!activeSortColumn || !searchConfiguration) {\n return undefined;\n }\n\n const activeMappedConfig = searchConfiguration.find(\n mappedSearchConfig =>\n mappedSearchConfig.sortColumn.ColumnName === activeSortColumn.ColumnName &&\n mappedSearchConfig.sortColumn.IsDescending === activeSortColumn.IsDescending\n );\n if (!activeMappedConfig) {\n return undefined;\n }\n\n return this.sortByDropdownOptions.find(dropdownOption => dropdownOption.key === activeMappedConfig.key);\n };\n\n private readonly _onUpdateRefiners = (itemToggleNotification: IRefineItemToggleNotification): void => {\n const {\n context: { request: requestContext, actionContext }\n } = this.props;\n\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\n const error = `Refine menu cannot refine search criteria: \n ${!requestContext ? 'requestContext ' : ''} ${!actionContext ? 'actionContext ' : ''} could not be found`;\n this.props.telemetry.warning(error);\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Server side the list PageState will not be called.\n const updatedRefinementCriteria = getUpdatedRefinementCriteria(\n itemToggleNotification,\n this.props.data.listPageState.result?.activeFilters || []\n );\n\n window.history.pushState({}, '', buildListPageUrl(getCurrentUrl(this.props.context.request), updatedRefinementCriteria));\n transaction(() => {\n this.props.data.listPageState.result!.currentPageNumber = 0;\n this.props.data.listPageState.result!.activeFilters = updatedRefinementCriteria;\n });\n };\n\n private readonly _buildRefinerUrl = (itemToggleNotification: IRefineItemToggleNotification): string => {\n if (this.props.data.listPageState.result) {\n const newRefinementCriteria = getUpdatedRefinementCriteria(\n itemToggleNotification,\n this.props.data.listPageState.result.activeFilters || []\n );\n\n return buildListPageUrl(getCurrentUrl(this.props.context.request), newRefinementCriteria);\n }\n this.props.telemetry.warning('[buildRefinerQueryString]List Page State Not available, unable to build refiner URL');\n return '';\n };\n\n private readonly _onChoiceClicked = (notification: IChoiceSummaryClickNotification): void => {\n const { data, telemetry } = this.props;\n\n if (!data.listPageState.result) {\n telemetry.warning('[choice-summary-by-category._onChoiceClicked]ListPageState unavailable, unable to update refiners.');\n return;\n }\n\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n if (!notification.clearAll) {\n const selectedChoice = notification.choiceClicked;\n if (!selectedChoice) {\n telemetry.warning('[choice-summary-by-category._onChoiceClicked] Choice could not be determined');\n return;\n }\n currentRefinementCriteria = currentRefinementCriteria.filter(\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedChoice, selectedCriterion)\n );\n } else {\n currentRefinementCriteria = [];\n\n // Set focus to sort and filter\n const dropdownElementId = this._sortAndFilterContainerRef.current && this._sortAndFilterContainerRef.current.props.dropdownId;\n const dropdownElement = dropdownElementId && document.getElementById(dropdownElementId);\n setTimeout(() => {\n dropdownElement && dropdownElement.focus();\n }, 50);\n }\n\n const fullUrl = getCurrentUrl(this.props.context.request);\n window.history.pushState({}, '', buildListPageUrl(fullUrl, currentRefinementCriteria));\n data.listPageState.result.currentPageNumber = 0;\n data.listPageState.result.activeFilters = currentRefinementCriteria;\n };\n\n private readonly _buildRefinerUrlForChoiceSummary = (selectedRefiner: ProductRefinerValue, isClearAll: boolean): string => {\n const { data, telemetry } = this.props;\n const fullUrl = getCurrentUrl(this.props.context.request);\n\n if (!data.listPageState.result) {\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl]ListPageState unavailable, unable to create refiner URL.');\n return fullUrl.href;\n }\n\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n if (!isClearAll) {\n if (!selectedRefiner) {\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl] URL for Choice could not be determined');\n return fullUrl.href;\n }\n currentRefinementCriteria = currentRefinementCriteria.filter(\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedRefiner, selectedCriterion)\n );\n } else {\n currentRefinementCriteria = [];\n }\n\n return buildListPageUrl(fullUrl, currentRefinementCriteria);\n };\n\n private _getViewport(): GridSize {\n if (MsDyn365.isBrowser) {\n return isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n }\n return isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n }\n\n private _toggleModal(): void {\n this.setState({\n modalIsOpen: !this.state.modalIsOpen\n });\n }\n\n private _updateViewport(): void {\n this._viewport = this._getViewport();\n\n if (this.state.modalIsOpen && !this.isMobile) {\n this._toggleModal();\n }\n }\n\n private readonly _getexpandRefinerCount = (validRefiners?: number, refinerCount?: expandRefinersCount): void => {\n switch (refinerCount) {\n case expandRefinersCount.all:\n this.expandrefinerCount = validRefiners;\n break;\n case expandRefinersCount.one:\n this.expandrefinerCount = 1;\n break;\n case expandRefinersCount.two:\n this.expandrefinerCount = 2;\n break;\n case expandRefinersCount.three:\n this.expandrefinerCount = 3;\n break;\n case expandRefinersCount.four:\n this.expandrefinerCount = 4;\n break;\n default:\n this.expandrefinerCount = 0;\n }\n };\n\n /**\n * Renders a Pagination previous text.\n * @param paginationPreviousText - Pagination previous text from resources.\n * @returns Previous text and flipper icon.\n */\n private readonly _renderPrev = (paginationPreviousText: string) => {\n return (\n <div className='msc-pagination__prev'>\n <span className='ms-search-result__pagination-left' aria-hidden='true' />\n <span className='prev-text'>{paginationPreviousText}</span>\n </div>\n );\n };\n\n /**\n * Renders a Pagination next text.\n * @param paginationNextText - Pagination next text from resources.\n * @returns Next text and flipper icon.\n */\n private readonly _renderNext = (paginationNextText: string) => {\n return (\n <div className='msc-pagination__next'>\n <span className='next-text'>{paginationNextText}</span>\n <span className='ms-search-result__pagination-right' aria-hidden='true' />\n </div>\n );\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\n/*import { ISearchResultModalViewProps } from './components';*/\nimport {\n ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n ISearchResultContainerViewProps,\n ISortByViewProps,\n ITitleViewProps\n} from './search-result-container';\n\nconst SearchResultContainerView: React.FC<ISearchResultContainerViewProps> = props => {\n const {\n SearchResultContainer,\n products,\n pagination,\n ProductsContainer,\n ProductSectionContainer,\n choiceSummary,\n //isMobile,\n //modalToggle,\n //searchResultModal,\n TitleViewProps,\n refineMenu,\n categoryHierarchy,\n sortByOptions,\n CategoryNavContainer,\n RefineAndProductSectionContainer,\n errorMessage,\n FeatureSearchContainer,\n similarLookProduct\n //categoriesCarousal\n } = props;\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n /* if (isMobile) {\n return (\n <Module {...SearchResultContainer}>\n {renderCategoryHierarchy(categoryHierarchy)}\n {renderTitle(TitleViewProps)}\n {categoriesCarousal}\n {choiceSummary}\n {modalToggle}\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Module>\n );\n }*/\n return (\n <Module {...SearchResultContainer}>\n <Node {...CategoryNavContainer}>\n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\n {TitleViewProps && renderTitleCount(TitleViewProps)}\n </Node>\n <Node {...RefineAndProductSectionContainer}>\n {refineMenu && renderRefiner(refineMenu, isRecoSearchPage, sortByOptions)}\n <Node {...ProductSectionContainer}>\n {TitleViewProps && renderTitle(TitleViewProps)}\n {choiceSummary}\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Node>\n </Node>\n </Module>\n );\n};\n\n/*const createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};*/\n\n/*const createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderRefiner(refineMenu, isRecoSearchPage, sortByDropDown));\n }\n return null;\n};*/\n\nconst renderRefiner = (\n props: IRefineMenuViewProps,\n isRecoSearchPage: string | undefined,\n sortByOptions: ISortByViewProps | undefined\n): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n <Node {...RefinerSectionContainer}>\n <Node {...RefineMenuContainer}>\n <div className='ms-search-result-wrapper-sort-by-category'>\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n </div>\n {refiners.map((submenu, index) => (\n <React.Fragment key={index}>{submenu}</React.Fragment>\n ))}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return <Node {...SortingContainer}>{sortByDropDown}</Node>;\n }\n return null;\n};\n\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n <Node {...CategoryHierarchyContainer}>\n {categoryHierarchyList.map((category, index) => (\n <React.Fragment key={index}>\n {category}\n {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n </React.Fragment>\n ))}\n </Node>\n );\n }\n\n return null;\n};\n\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h2>\n {title.titlePrefix}\n {title.titleText}\n </h2>\n </Node>\n );\n }\n return null;\n};\n\nconst renderTitleCount = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h5>{title.titleCount}</h5>\n </Node>\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport {\n // ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n // ISearchResultContainerViewProps,\n ISearchResultModalViewProps,\n ISortByViewProps\n} from '@msdyn365-commerce-modules/search-result-container';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\nimport {\n ISearchResultContainerViewProps, ITitleViewProps\n} from '../../../modules/search-result-container/search-result-container';\n\nconst SearchResultContainerView: React.FC<ISearchResultContainerViewProps> = props => {\n const {\n SearchResultContainer,\n products,\n pagination,\n ProductsContainer,\n ProductSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n TitleViewProps,\n refineMenu,\n //categoryHierarchy,\n sortByOptions,\n // CategoryNavContainer,\n RefineAndProductSectionContainer,\n errorMessage,\n FeatureSearchContainer,\n similarLookProduct,\n categoriesCarousal\n } = props;\n\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n <>\n <div className=\"col-12 custom-category-slider\">\n {categoriesCarousal}\n </div>\n <div className=\"col-12 custom-search\">\n {modalToggle}\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n <Module {...SearchResultContainer}>\n {/* {categoryHierarchy && <Node {...CategoryNavContainer}>{renderCategoryHierarchy(categoryHierarchy)}</Node>} */}\n <Node {...RefineAndProductSectionContainer}>\n <Node {...ProductSectionContainer}>\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <div className='ms-search-result-wrapper-title-choice-summary'>\n {TitleViewProps && renderTitle(TitleViewProps)}\n {choiceSummary}\n </div>\n <div className='ms-search-result-wrapper-sort-by-category'>\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n </div>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Node>\n </Node>\n </Module>\n </div>\n </>\n );\n }\n return (\n <>\n <div className=\"col-12 custom-category-slider\">\n {categoriesCarousal}\n </div>\n <div className=\"col-12 custom-search\">\n <Module {...SearchResultContainer}>\n {/* {categoryHierarchy && <Node {...CategoryNavContainer}>{renderCategoryHierarchy(categoryHierarchy)}</Node>} */}\n\n {errorMessage? <div className='no-products-head'> {TitleViewProps && renderTitle(TitleViewProps)}{errorMessage}</div>: <Node {...RefineAndProductSectionContainer}>\n {refineMenu && renderRefiner(refineMenu)}\n <Node {...ProductSectionContainer}>\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <div className='ms-search-result-wrapper-title-choice-summary'>\n {TitleViewProps && renderTitle(TitleViewProps)}\n {choiceSummary}\n </div>\n <div className='ms-search-result-wrapper-sort-by-category'>\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n </div>\n <Node {...ProductsContainer}>\n {products}\n </Node>\n {pagination}\n </Node>\n </Node> }\n\n\n\n\n\n </Module>\n </div>\n </>\n );\n};\n\nconst createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\nconst createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefiner(refineMenu));\n }\n return null;\n};\n\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n <Node {...RefinerSectionContainer}>\n <Node {...RefineMenuContainer}>\n {refiners.map((submenu, index) => (\n <React.Fragment key={index}>{submenu}</React.Fragment>\n ))}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return <Node {...SortingContainer}>{sortByDropDown}</Node>;\n }\n return null;\n};\n\n/*const renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n <Node {...CategoryHierarchyContainer}>\n {categoryHierarchyList.map((category, index) => (\n <React.Fragment key={index}>\n {category}\n {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n </React.Fragment>\n ))}\n </Node>\n );\n }\n\n return null;\n};*/\n\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer, isCategoryPage, pageType } = props;\n\n if (title) {\n return (\n <Node {...TitleContainer}>\n {pageType === 'parent-category' ? (\n <h2>\n <span className=\"ms-search-result__collection-title-text\"> All Products </span>\n </h2>\n ) :(\n <h2>\n {!isCategoryPage && title.titlePrefix}\n {title.titleText}\n {!isCategoryPage &&\n <>\n ({title.titleCount})\n </>}\n </h2>\n )}\n\n </Node>\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\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['search-result-container'] = {\n c: () => require('partner/modules/search-result-container/search-result-container.tsx'),\n $type: 'containerModule',\n da: [{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action', runOn: 1},{name:'categories', path:'actions/get-category-list.action', runOn: 0},{name:'category', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category', runOn: 0},{name:'categoryHierarchy', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy', runOn: 0},{name:'featureProduct', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0},{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0},{name:'listPageState', path:'modules/search-result-container/list-page-state', runOn: 0},{name:'products', path:'modules/search-result-container/actions/get-full-products-by-collection', runOn: 0},{name:'refiners', path:'modules/search-result-container/actions/get-refiners-for-collection', runOn: 0},{name:'searchConfiguration', path:'modules/search-result-container/actions/get-mapped-search-configuration', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'search-result-container',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/search-result-container'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action';\n let dataAction = require('@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'actions/get-category-list.action';\n let dataAction = require('partner/actions/get-category-list.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/search-result-container/actions/get-full-products-by-collection';\n let dataAction = require('partner/modules/search-result-container/actions/get-full-products-by-collection');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/search-result-container/actions/get-mapped-search-configuration';\n let dataAction = require('partner/modules/search-result-container/actions/get-mapped-search-configuration');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/search-result-container/actions/get-refiners-for-collection';\n let dataAction = require('partner/modules/search-result-container/actions/get-refiners-for-collection');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/search-result-container/list-page-state';\n let dataAction = require('partner/modules/search-result-container/list-page-state');\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__|modules|search-result-container|search-result-container'] = {\n c: () => require('partner/modules/search-result-container/search-result-container.view.tsx'),\n cn: '__local__-__local__-search-result-container'\n };\nviewDictionary['__local__|__local__|themes|localy-theme|views|search-result-container'] = {\n c: () => require('partner/themes/localy-theme/views/search-result-container.view.tsx'),\n cn: '__local__-__local__-search-result-container'\n };\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|search-result-container'] = {\n c: () => require('@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/search-result-container.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-search-result-container'\n };\nviewDictionary['@msdyn365-commerce-modules|search-result-container|modules|search-result-container|search-result-container'] = {\n c: () => require('@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/search-result-container.view.js'),\n cn: '@msdyn365-commerce-modules-search-result-container-search-result-container'\n };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|search-result-container'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/search-result-container.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-search-result-container'\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 {\n ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n ISearchResultContainerViewProps,\n ISearchResultModalViewProps,\n ISortByViewProps,\n ITitleViewProps\n} from '@msdyn365-commerce-modules/search-result-container';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nconst SearchResultContainerView: React.FC<ISearchResultContainerViewProps> = props => {\n const {\n SearchResultContainer,\n products,\n pagination,\n ProductsContainer,\n ProductSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n TitleViewProps,\n refineMenu,\n categoryHierarchy,\n sortByOptions,\n CategoryNavContainer,\n RefineAndProductSectionContainer,\n errorMessage,\n FeatureSearchContainer,\n similarLookProduct\n } = props;\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n <Module {...SearchResultContainer}>\n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\n {renderTitle(TitleViewProps)}\n {choiceSummary}\n {modalToggle}\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Module>\n );\n }\n return (\n <Module {...SearchResultContainer}>\n {categoryHierarchy && <Node {...CategoryNavContainer}>{renderCategoryHierarchy(categoryHierarchy)}</Node>}\n <Node {...RefineAndProductSectionContainer}>\n {refineMenu && renderRefiner(refineMenu)}\n <Node {...ProductSectionContainer}>\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <div className='ms-search-result-wrapper-title-choice-summary'>\n {TitleViewProps && renderTitle(TitleViewProps)}\n {choiceSummary}\n </div>\n <div className='ms-search-result-wrapper-sort-by-category'>\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n </div>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Node>\n </Node>\n </Module>\n );\n};\n\nconst createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\nconst createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefiner(refineMenu));\n }\n return null;\n};\n\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n <Node {...RefinerSectionContainer}>\n <Node {...RefineMenuContainer}>\n {refiners.map((submenu, index) => (\n <React.Fragment key={index}>{submenu}</React.Fragment>\n ))}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return <Node {...SortingContainer}>{sortByDropDown}</Node>;\n }\n return null;\n};\n\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n <Node {...CategoryHierarchyContainer}>\n {categoryHierarchyList.map((category, index) => (\n <React.Fragment key={index}>\n {category}\n {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n </React.Fragment>\n ))}\n </Node>\n );\n }\n\n return null;\n};\n\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h2>\n {title.titlePrefix}\n {title.titleText}({title.titleCount})\n </h2>\n </Node>\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultModalViewProps } from './components';\nimport {\n ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n ISearchResultContainerViewProps,\n ISortByViewProps,\n ITitleViewProps\n} from './search-result-container';\n\nconst SearchResultContainerView: React.FC<ISearchResultContainerViewProps> = props => {\n const {\n SearchResultContainer,\n products,\n pagination,\n ProductsContainer,\n ProductSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n TitleViewProps,\n refineMenu,\n categoryHierarchy,\n sortByOptions,\n CategoryNavContainer,\n RefineAndProductSectionContainer,\n errorMessage,\n FeatureSearchContainer,\n similarLookProduct\n } = props;\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n <Module {...SearchResultContainer}>\n {renderCategoryHierarchy(categoryHierarchy)}\n {renderTitle(TitleViewProps)}\n {choiceSummary}\n {modalToggle}\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Module>\n );\n }\n return (\n <Module {...SearchResultContainer}>\n <Node {...CategoryNavContainer}>\n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\n {TitleViewProps && renderTitleCount(TitleViewProps)}\n </Node>\n <Node {...RefineAndProductSectionContainer}>\n {refineMenu && renderRefiner(refineMenu)}\n <Node {...ProductSectionContainer}>\n {TitleViewProps && renderTitle(TitleViewProps)}\n {choiceSummary}\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Node>\n </Node>\n </Module>\n );\n};\n\nconst createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\nconst createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefiner(refineMenu));\n }\n return null;\n};\n\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n <Node {...RefinerSectionContainer}>\n <Node {...RefineMenuContainer}>\n {refiners.map((submenu, index) => (\n <React.Fragment key={index}>{submenu}</React.Fragment>\n ))}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return <Node {...SortingContainer}>{sortByDropDown}</Node>;\n }\n return null;\n};\n\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n <Node {...CategoryHierarchyContainer}>\n {categoryHierarchyList.map((category, index) => (\n <React.Fragment key={index}>\n {category}\n {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n </React.Fragment>\n ))}\n </Node>\n );\n }\n\n return null;\n};\n\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h2>\n {title.titlePrefix}\n {title.titleText}\n </h2>\n </Node>\n );\n }\n return null;\n};\n\nconst renderTitleCount = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h5>{title.titleCount}</h5>\n </Node>\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport {\n IPriceComponentResources,\n ISwatchItem,\n PriceComponent,\n ProductComponentSwatchComponent,\n RatingComponent\n} from '@msdyn365-commerce/components';\nimport {\n getCatalogId,\n IAny,\n IComponent,\n IComponentProps,\n ICoreContext,\n IGeneric,\n IGridSettings,\n IImageData,\n IImageSettings,\n Image,\n msdyn365Commerce\n} from '@msdyn365-commerce/core';\nimport { AttributeSwatch, AttributeValue, ProductDimension, ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n convertDimensionTypeToProductDimensionType,\n Dictionary,\n DimensionTypes,\n generateImageUrl,\n getProductPageUrlSync,\n IDimensionsApp,\n StringExtensions,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n format,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport React, { useState } from 'react';\n\nexport interface IProductComponentProps extends IComponentProps<{ product?: ProductSearchResult }> {\n className?: string;\n imageSettings?: IImageSettings;\n savingsText?: string;\n freePriceText?: string;\n originalPriceText?: string;\n currentPriceText?: string;\n ratingAriaLabel?: string;\n ratingCountAriaLabel?: string;\n allowBack?: boolean;\n telemetryContent?: ITelemetryContent;\n quickViewButton?: React.ReactNode;\n productComparisonButton?: React.ReactNode;\n isEnabledProductDescription?: boolean;\n isPriceMinMaxEnabled?: boolean;\n priceResources?: IPriceComponentResources;\n inventoryLabel?: string;\n dimensionAvailabilities?: IProductsDimensionsAvailabilities[];\n swatchItemAriaLabel?: string;\n}\n\nexport interface IProductComponent extends IComponent<IProductComponentProps> {}\n\nconst PriceComponentActions = {};\n\n/**\n * Gets the product page url from the default swatch selected.\n * @param productData - Product card to be rendered.\n * @returns The default color swatch selected if any.\n */\nfunction getDefaultSwatchSelected(coreContext: ICoreContext, productData?: ProductSearchResult): AttributeSwatch | null {\n if (!productData || !productData.AttributeValues) {\n return null;\n }\n\n const siteContext = coreContext as ICoreContext<IDimensionsApp>;\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\n\n const attributeSwatches = productData.AttributeValues.find(\n attributeValue => attributeValue.KeyName?.toLocaleLowerCase() === dimensionToPreSelectInProductCard\n )?.Swatches;\n\n if (!ArrayExtensions.hasElements(attributeSwatches)) {\n return null;\n }\n\n const defaultSwatch = attributeSwatches.find(item => item.IsDefault === true) ?? attributeSwatches[0];\n return defaultSwatch;\n}\n\n/**\n * Gets the product image from the default swatch selected.\n * @param coreContext - Context of the module using the component.\n * @param productData - Product card to be rendered.\n * @returns The product card image url.\n */\nfunction getProductImageUrlFromDefaultSwatch(coreContext: ICoreContext, productData?: ProductSearchResult): string | undefined {\n const defaultSwatch = getDefaultSwatchSelected(coreContext, productData);\n const swatchProductImageUrls = defaultSwatch?.ProductImageUrls;\n if (!ArrayExtensions.hasElements(swatchProductImageUrls)) {\n return productData?.PrimaryImageUrl;\n }\n\n return generateImageUrl(swatchProductImageUrls[0], coreContext.request.apiSettings);\n}\n\n/**\n * Updates the product url link to product details page.\n * @param productDetailsPageUrl - Product page url.\n * @param coreContext - Context of the module using the component.\n * @param queryString - Querystring to be added to the URL.\n * @returns The update product page url.\n */\nfunction updateProductUrl(productDetailsPageUrl: string, coreContext: ICoreContext, queryString: string): string {\n const sourceUrl = new URL(productDetailsPageUrl, coreContext.request.apiSettings.baseUrl);\n if (sourceUrl.search) {\n sourceUrl.search += `&${queryString}`;\n } else {\n sourceUrl.search += queryString;\n }\n\n const updatedUrl = new URL(sourceUrl.href);\n return updatedUrl.pathname + sourceUrl.search;\n}\n\n/**\n * Gets the react node for product unit of measure display.\n * @param unitOfMeasure - DefaultUnitOfMeasure property from product.\n * @returns The node representing markup for unit of measure component.\n */\nfunction renderProductUnitOfMeasure(unitOfMeasure?: string): JSX.Element | null {\n if (!unitOfMeasure) {\n return null;\n }\n return (\n <div className='msc-product__unit-of-measure'>\n <span>{unitOfMeasure}</span>\n </div>\n );\n}\n\n/**\n * Gets the react node for product availability.\n * @param inventoryAvailabilityLabel - The product information.\n * @returns The node representing markup for product availability.\n */\nfunction renderProductAvailability(inventoryAvailabilityLabel: string | undefined): JSX.Element | null {\n if (!inventoryAvailabilityLabel || inventoryAvailabilityLabel === '') {\n return null;\n }\n\n return (\n <div className='msc-product__availability'>\n <span>{inventoryAvailabilityLabel}</span>\n </div>\n );\n}\n\n/**\n * Renders product comparison button similar to the quick view button.\n * @param productComparisonButton - React element of the button.\n * @param product - Current product info.\n * @param catalogId - Current catalog.\n * @returns React element for the specific product.\n */\nfunction renderProductComparisonButton(\n productComparisonButton: React.ReactNode,\n product: ProductSearchResult,\n catalogId: number\n): JSX.Element | undefined {\n validateCatalogId(catalogId);\n return React.cloneElement(productComparisonButton as React.ReactElement, { product, catalogId });\n}\n\n/**\n * Gets the product page url from the default swatch selected.\n * @param coreContext - Context of the module using the component.\n * @param productUrl - Product page url for the product card.\n * @param productData - Product card to be rendered.\n * @returns The product card image url.\n */\nfunction getProductPageUrlFromDefaultSwatch(\n coreContext: ICoreContext,\n productUrl: string,\n productData?: ProductSearchResult\n): string | undefined {\n const defaultSwatch = getDefaultSwatchSelected(coreContext, productData);\n if (!defaultSwatch?.SwatchValue) {\n return productUrl;\n }\n\n const siteContext = coreContext as ICoreContext<IDimensionsApp>;\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\n\n const queryStringEncoded = encodeURIComponent(defaultSwatch.SwatchValue);\n const queryString = `${dimensionToPreSelectInProductCard}=${queryStringEncoded}`;\n return updateProductUrl(productUrl, coreContext, queryString);\n}\n\nconst ProductCard: React.FC<IProductComponentProps> = ({\n data,\n context,\n imageSettings,\n savingsText,\n freePriceText,\n originalPriceText,\n currentPriceText,\n ratingAriaLabel,\n ratingCountAriaLabel,\n allowBack,\n typeName,\n id,\n telemetryContent,\n quickViewButton,\n productComparisonButton,\n isEnabledProductDescription,\n isPriceMinMaxEnabled,\n priceResources,\n inventoryLabel,\n dimensionAvailabilities,\n swatchItemAriaLabel\n}) => {\n const product = data.product;\n\n let productUrl = getProductPageUrlSync(product?.Name ?? '', product?.RecordId ?? Number.MIN_VALUE, context.actionContext, undefined);\n if (allowBack) {\n productUrl = updateProductUrl(productUrl, context, 'back=true');\n }\n const productImageUrlFromSwatch = getProductImageUrlFromDefaultSwatch(context, product) ?? product?.PrimaryImageUrl;\n const productPageUrlFromSwatch = getProductPageUrlFromDefaultSwatch(context, productUrl, product) ?? productUrl;\n const [productPageUrl, setProductPageUrl] = useState<string>(productPageUrlFromSwatch);\n const [productImageUrl, setProductImageUrl] = useState<string | undefined>(productImageUrlFromSwatch);\n React.useEffect(() => {\n setProductPageUrl(productPageUrlFromSwatch);\n setProductImageUrl(productImageUrlFromSwatch);\n }, [productUrl, productPageUrlFromSwatch, productImageUrlFromSwatch]);\n const [selectedSwatchItems] = useState(new Dictionary<DimensionTypes, ISwatchItem>());\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access -- app context is generic\n const enableStockCheck = context.app.config.enableStockCheck;\n\n const siteContext = context as ICoreContext<IDimensionsApp>;\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\n\n /**\n * Updates the product page and Image url based on swatch selected.\n * @param coreContext - Context of the caller.\n * @param swatchItem - Dimension swatch selected.\n */\n const updatePageAndImageUrl = React.useCallback(\n (coreContext: ICoreContext, swatchItem: ISwatchItem) => {\n const dimensionType = swatchItem.dimensionType;\n selectedSwatchItems.setValue(dimensionType, swatchItem);\n if (StringExtensions.isNullOrWhitespace(swatchItem.value)) {\n return;\n }\n const queryString = `${dimensionType}=${swatchItem.value}`;\n let productPageUrlWithSwatch = '';\n if (productPageUrl.includes(dimensionType)) {\n const newUrl = new URL(productPageUrl, coreContext.request.apiSettings.baseUrl);\n newUrl.searchParams.delete(dimensionType);\n productPageUrlWithSwatch = updateProductUrl(newUrl.toString(), context, queryString);\n } else {\n productPageUrlWithSwatch = updateProductUrl(productPageUrl, context, queryString);\n }\n setProductPageUrl(productPageUrlWithSwatch);\n if (dimensionType === dimensionToPreSelectInProductCard) {\n const swatchProductImageUrl = ArrayExtensions.hasElements(swatchItem.productImageUrls)\n ? swatchItem.productImageUrls[0]\n : undefined;\n const newImageUrl = generateImageUrl(swatchProductImageUrl, coreContext.request.apiSettings);\n setProductImageUrl(newImageUrl);\n }\n },\n [selectedSwatchItems, context, productPageUrl]\n );\n\n if (!product) {\n return null;\n }\n\n /**\n * Checks if rendering the particular dimensions is allowed for product card.\n * @param dimensionType - Dimension to be displayed.\n * @returns Updates the state with new product page url.\n */\n function shouldDisplayDimension(dimensionType: string): boolean {\n const dimensionsContext = context as ICoreContext<IDimensionsApp>;\n const dimensionsToDisplayOnProductCard = dimensionsContext.app.config.dimensionsInProductCard;\n return (\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n dimensionsToDisplayOnProductCard.includes(dimensionType.toLocaleLowerCase() as DimensionTypes)\n );\n }\n\n /**\n * Gets the react node for product dimension as swatch.\n * @param attributeValues - Attribute value property from product.\n * @returns The node representing markup for unit of measure component.\n */\n function renderProductDimensions(attributeValues?: AttributeValue[]): JSX.Element | null {\n if (!attributeValues) {\n return null;\n }\n\n return (\n <div className='msc-product__dimensions'>\n {attributeValues.map((item: AttributeValue) => {\n const dimensionTypeValue = item.KeyName?.toLocaleLowerCase() ?? '';\n if (!shouldDisplayDimension(dimensionTypeValue)) {\n return null;\n }\n\n const siteContext = context as ICoreContext<IDimensionsApp>;\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\n const dimensionType = dimensionTypeValue as DimensionTypes;\n const swatches =\n item.Swatches?.map<ISwatchItem>(swatchItem => {\n return {\n itemId: `${item.RecordId ?? ''}-${dimensionTypeValue}-${swatchItem.SwatchValue ?? ''}`,\n value: swatchItem.SwatchValue ?? '',\n dimensionType,\n colorHexCode: swatchItem.SwatchColorHexCode,\n imageUrl: swatchItem.SwatchImageUrl,\n productImageUrls: swatchItem.ProductImageUrls,\n isDefault: swatchItem.IsDefault,\n swatchItemAriaLabel: swatchItemAriaLabel ? format(swatchItemAriaLabel, dimensionType) : '',\n isDisabled:\n enableStockCheck &&\n dimensionAvailabilities?.find(\n dimensionAvailability => dimensionAvailability.value === (swatchItem.SwatchValue ?? '')\n )?.isDisabled\n };\n }) ?? [];\n if (\n dimensionType === dimensionToPreSelectInProductCard &&\n ArrayExtensions.hasElements(swatches) &&\n !swatches.some(swatch => swatch.isDefault)\n ) {\n swatches[0].isDefault = true;\n }\n return (\n <ProductComponentSwatchComponent\n context={context}\n swatches={swatches}\n onSelectDimension={updatePageAndImageUrl}\n key={item.RecordId}\n />\n );\n })}\n </div>\n );\n }\n\n function renderQuickView(quickview: React.ReactNode, item?: number): JSX.Element | undefined {\n if (quickview === null) {\n return undefined;\n }\n const selectedDimensions: ProductDimension[] = selectedSwatchItems.getValues().map<ProductDimension>(swatches => {\n return {\n DimensionTypeValue: convertDimensionTypeToProductDimensionType(swatches.dimensionType),\n DimensionValue: {\n RecordId: 0,\n Value: swatches.value\n }\n };\n });\n return React.cloneElement(quickview as React.ReactElement, { selectedProductId: item, selectedDimensions });\n }\n\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', telemetryContent!, '', product.RecordId.toString());\n\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- -- Do not need type check for appsettings\n const isUnitOfMeasureEnabled = context.app.config && context.app.config.unitOfMeasureDisplayType === 'buyboxAndBrowse';\n\n return (\n <>\n {isEnabledProductDescription ? (\n <a\n href={productPageUrl}\n onClick={onTelemetryClick(telemetryContent!, payLoad, product.Name!)}\n aria-label={renderLabel(\n product.Name,\n context.cultureFormatter.formatCurrency(product.Price),\n product.AverageRating,\n ratingAriaLabel,\n product.TotalRatings,\n ratingCountAriaLabel\n )}\n className='msc-product'\n {...attribute}\n >\n <div className='msc-product__image__description'>\n <div className='msc-product__image'>\n {renderProductPlacementImage(\n imageSettings,\n context.request.gridSettings,\n productImageUrl,\n product.PrimaryImageUrl,\n product.Name,\n context\n )}\n </div>\n <div className='msc-product__title_description'>\n <h5 className='msc-product__title__text'>{product.Name}</h5>\n {renderPrice(\n context,\n typeName,\n id,\n product.BasePrice,\n product.Price,\n savingsText,\n freePriceText,\n originalPriceText,\n currentPriceText,\n isPriceMinMaxEnabled,\n priceResources\n )}\n {isUnitOfMeasureEnabled && renderProductUnitOfMeasure(product.DefaultUnitOfMeasure)}\n {renderDescription(product.Description)}\n </div>\n </div>\n </a>\n ) : (\n <a\n href={productPageUrl}\n onClick={onTelemetryClick(telemetryContent!, payLoad, product.Name!)}\n aria-label={renderLabel(\n product.Name,\n context.cultureFormatter.formatCurrency(product.Price),\n product.AverageRating,\n ratingAriaLabel\n )}\n className='msc-product'\n {...attribute}\n >\n <div className='msc-product__image'>\n {renderProductPlacementImage(\n imageSettings,\n context.request.gridSettings,\n productImageUrl,\n product.PrimaryImageUrl,\n product.Name,\n context\n )}\n </div>\n <div className='msc-product__details'>\n <h5 className='msc-product__title'>{product.Name}</h5>\n {renderPrice(\n context,\n typeName,\n id,\n product.BasePrice,\n product.Price,\n savingsText,\n freePriceText,\n originalPriceText,\n currentPriceText\n )}\n {isUnitOfMeasureEnabled && renderProductUnitOfMeasure(product.DefaultUnitOfMeasure)}\n </div>\n </a>\n )}\n {renderProductDimensions(product.AttributeValues)}\n {!context.app.config.hideRating &&\n renderRating(context, typeName, id, product.AverageRating, product.TotalRatings, ratingAriaLabel, ratingCountAriaLabel)}\n {renderProductAvailability(inventoryLabel)}\n {quickViewButton && renderQuickView(quickViewButton, product.RecordId)}\n {productComparisonButton && renderProductComparisonButton(productComparisonButton, product, getCatalogId(context.request))}\n </>\n );\n};\n\nfunction renderLabel(\n name?: string,\n price?: string,\n rating?: number,\n ratingAriaLabelText?: string,\n reviewCount?: number,\n ratingCountAriaLabelText?: string\n): string {\n const reviewCountArialableText = getReviewAriaLabel(reviewCount, ratingCountAriaLabelText ?? '');\n return `${name ?? ''} ${price ?? ''} ${getRatingAriaLabel(rating, ratingAriaLabelText)}${\n reviewCountArialableText ? ` ${reviewCountArialableText}` : ''\n }`;\n}\n\nfunction renderDescription(description?: string): JSX.Element | null {\n return <p className='msc-product__text'>{description}</p>;\n}\n\nfunction getRatingAriaLabel(rating?: number, ratingAriaLabel?: string): string {\n if (rating && ratingAriaLabel) {\n const roundedRating = rating.toFixed(2);\n return format(ratingAriaLabel || '', roundedRating, '5');\n }\n return '';\n}\n\nfunction getReviewAriaLabel(reviewCount?: number, ratingCountAriaLabelText?: string): string {\n if (reviewCount && ratingCountAriaLabelText) {\n return format(ratingCountAriaLabelText || '', reviewCount);\n }\n return '';\n}\n\nfunction renderRating(\n coreContext: ICoreContext,\n moduleTypeName: string,\n moduleId: string,\n avgRating?: number,\n totalRatings?: number,\n ariaLabel?: string,\n ratingCountAriaLabel?: string\n): JSX.Element | null {\n if (!avgRating) {\n return null;\n }\n\n const numberRatings = totalRatings?.toString() || undefined;\n const ratingAriaLabelText = getRatingAriaLabel(avgRating, ariaLabel);\n const ratingCountAriaLabelText = getReviewAriaLabel(Number(numberRatings), ratingCountAriaLabel);\n\n return (\n <RatingComponent\n context={coreContext}\n id={moduleId}\n typeName={moduleTypeName}\n avgRating={avgRating}\n ratingCount={numberRatings}\n readOnly\n ariaLabel={ratingAriaLabelText}\n ratingCountAriaLabel={ratingCountAriaLabelText}\n data={{}}\n />\n );\n}\n\nfunction renderPrice(\n context: ICoreContext,\n typeName: string,\n id: string,\n basePrice?: number,\n adjustedPrice?: number,\n savingsText?: string,\n freePriceText?: string,\n originalPriceText?: string,\n currentPriceText?: string,\n isPriceMinMaxEnabled?: boolean,\n priceResources?: IPriceComponentResources\n): JSX.Element | null {\n const price: ProductPrice = {\n BasePrice: basePrice,\n AdjustedPrice: adjustedPrice,\n CustomerContextualPrice: adjustedPrice\n };\n\n return (\n <PriceComponent\n context={context}\n id={id}\n typeName={typeName}\n data={{ price }}\n savingsText={savingsText}\n freePriceText={freePriceText}\n originalPriceText={originalPriceText}\n isPriceMinMaxEnabled={isPriceMinMaxEnabled}\n priceResources={priceResources}\n />\n );\n}\n\nfunction renderProductPlacementImage(\n imageSettings?: IImageSettings,\n gridSettings?: IGridSettings,\n imageUrl?: string,\n fallbackImageUrl?: string,\n altText?: string,\n context?: ICoreContext<IGeneric<IAny>>\n): JSX.Element | null {\n if (!imageUrl || !gridSettings || !imageSettings) {\n return null;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment -- Site level config can be of any type.\n const contextConfig = context?.app.config?.placeholderImageName;\n const emptyPlaceHolderImage = contextConfig as string;\n let fallbackImageSource = fallbackImageUrl;\n if (emptyPlaceHolderImage && fallbackImageUrl) {\n fallbackImageSource = `${fallbackImageUrl},${emptyPlaceHolderImage}`;\n }\n const img: IImageData = {\n src: imageUrl,\n altText: altText ? altText : '',\n fallBackSrc: fallbackImageSource\n };\n const imageProps = {\n gridSettings,\n imageSettings\n };\n imageProps.imageSettings.cropFocalRegion = true;\n return (\n <Image\n requestContext={context?.actionContext.requestContext}\n {...img}\n {...imageProps}\n loadFailureBehavior='empty'\n bypassHideOnFailure\n />\n );\n}\n\nexport const ProductComponent: React.FunctionComponent<IProductComponentProps> = msdyn365Commerce.createComponentOverride<\n IProductComponent\n>('Product', { component: ProductCard, ...PriceComponentActions });\n\nexport default ProductComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IPriceComponentResources } from '@msdyn365-commerce/components';\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n ISearchResultContainerViewProps,\n ISearchResultModalViewProps,\n ISortByViewProps,\n ITitleViewProps\n} from '@msdyn365-commerce-modules/search-result-container';\nimport { Button, getTelemetryObject, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport React, { MouseEventHandler, useEffect, useState } from 'react';\n\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport {\n ISearchResultContainerProps,\n ISearchResultContainerResources\n} from '../definition-extensions/search-result-container.ext.props.autogenerated';\nimport { ProductComponent } from './components/product.component';\n\n/**\n * DescriptionInterval.\n */\nenum DescriptionInterval {\n productDescriptionInterval = 14,\n productDescriptionIntervalRemainder0 = 0,\n productDescriptionIntervalRemainder9 = 9\n}\n\n/**\n * Render Clear button for mobile viewport.\n * @param props - The view props.\n * @returns The JSX Element.\n */\nconst renderProductCards = (props: ISearchResultContainerViewProps & ISearchResultContainerProps<{}>): JSX.Element | null => {\n return <Node {...props.ProductsContainer}>{props.products}</Node>;\n};\n\n/**\n * Returns the product inventory label.\n * @param channelInventoryConfigurationId - The channel configuration Id.\n * @param product - The product.\n * @returns The inventory label.\n */\nfunction getInventoryLabel(channelInventoryConfigurationId: number | undefined, product: ProductSearchResult): string | undefined {\n if (!channelInventoryConfigurationId || !ArrayExtensions.hasElements(product.AttributeValues)) {\n return undefined;\n }\n const inventoryAttribute = product.AttributeValues.find(attribute => attribute.RecordId === channelInventoryConfigurationId);\n if (inventoryAttribute) {\n return inventoryAttribute.TextValue;\n }\n return undefined;\n}\n\n/**\n * Render Clear button for mobile viewport.\n * @param props - The view props.\n * @param product - The product item data.\n * @param index - The index of each product item.\n * @param isEnabledProductDescription - The flag for showing Product desription tile.\n * @returns The JSX Element.\n */\nconst renderProductCardsDescription = (\n props: ISearchResultContainerViewProps & ISearchResultContainerProps<{}>,\n product: ProductSearchResult,\n index: number,\n isEnabledProductDescription?: boolean\n): JSX.Element | null => {\n const { config, context, resources, productsDimensionAvailabilities } = props;\n const telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.friendlyName, props.telemetry);\n const breadCrumbType = props.context.app.config.breadcrumbType;\n const isAllowBack = props.config.allowBackNavigation && (breadCrumbType === 'back' || breadCrumbType === 'categoryAndBack');\n const classname = isEnabledProductDescription\n ? 'ms-product-search-result__item product__description'\n : 'ms-product-search-result__item';\n const quickviewslot = ArrayExtensions.hasElements(props.slots.quickview) ? props.slots.quickview[0] : undefined;\n const channelInventoryConfigurationId = props.data.products.result?.channelInventoryConfigurationId;\n const isPriceMinMaxFeatureState = props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n\n const productComparisonButton = ArrayExtensions.hasElements(props.slots.productComparisonButton)\n ? props.slots.productComparisonButton[0]\n : null;\n\n return (\n <li className={classname} key={index}>\n <ProductComponent\n context={context}\n telemetryContent={telemetryContent}\n imageSettings={config.imageSettings}\n freePriceText={resources.priceFree}\n originalPriceText={resources.originalPriceText}\n currentPriceText={resources.currentPriceText}\n ratingAriaLabel={resources.ratingAriaLabel}\n allowBack={isAllowBack}\n id={props.id}\n key={product.RecordId}\n typeName={props.typeName}\n data={{ product }}\n quickViewButton={quickviewslot}\n productComparisonButton={productComparisonButton}\n isEnabledProductDescription={isEnabledProductDescription}\n inventoryLabel={getInventoryLabel(channelInventoryConfigurationId, product)}\n isPriceMinMaxEnabled={isPriceMinMaxFeatureState?.IsEnabled}\n priceResources={priceResources}\n swatchItemAriaLabel={resources.swatchItemAriaLabel}\n dimensionAvailabilities={productsDimensionAvailabilities?.find(\n (dimensionAvailability: IProductsDimensionsAvailabilities[]) =>\n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === product.MasterProductId\n )}\n />\n </li>\n );\n};\n\n/**\n * Render Clear button for mobile viewport.\n * @param props - The view props.\n * @returns The JSX Element.\n */\nconst renderProducts = (props: ISearchResultContainerViewProps & ISearchResultContainerProps<{}>): JSX.Element | null => {\n const products = props.data.listPageState.result?.activeProducts;\n if (!products || !ArrayExtensions.hasElements(products)) {\n return null;\n }\n const productDescriptionInterval: number = DescriptionInterval.productDescriptionInterval;\n const productDescriptionIntervalRemainder0: number = DescriptionInterval.productDescriptionIntervalRemainder0;\n const productDescriptionIntervalRemainder9: number = DescriptionInterval.productDescriptionIntervalRemainder9;\n return (\n <Node {...props.ProductsContainer}>\n {props.errorMessage}\n <ul className='list-unstyled'>\n {products.map((product: ProductSearchResult, index: number) =>\n index % productDescriptionInterval === productDescriptionIntervalRemainder0 ||\n index % productDescriptionInterval === productDescriptionIntervalRemainder9\n ? renderProductCardsDescription(props, product, index, true)\n : renderProductCardsDescription(props, product, index, false)\n )}\n </ul>\n </Node>\n );\n};\n\n/**\n * Render Title Count.\n * @param props - The title view props.\n * @returns The JSX Element.\n */\nconst renderTitleCount = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return <Node {...TitleContainer}>{title.titleCount}</Node>;\n }\n return null;\n};\n\n/**\n * Render Category Hierarchy.\n * @param props - The category hierarchy view props.\n * @returns The JSX Element.\n */\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n <Node {...CategoryHierarchyContainer}>\n {categoryHierarchyList.map((category, index) => (\n <React.Fragment key={index}>\n {category}\n {categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n </React.Fragment>\n ))}\n </Node>\n );\n }\n\n return null;\n};\n\n/**\n * Function to make filter sticky.\n * @param isMobile - The boolean prop.\n * @param isStickyHeader - The boolean prop.\n */\nexport const configureStickyFilter = (isMobile: boolean, isStickyHeader: boolean): void => {\n // Get heights of cookie and promotion banners\n const defaultValue = 0;\n const defaultOffset = 28;\n const headerContainer: HTMLElement | null = document.querySelector('.ms-header');\n\n const headerHeight: number | undefined = headerContainer?.offsetHeight;\n const containerHeight: number = headerHeight ?? defaultOffset;\n const bannerHeights = isStickyHeader ? defaultValue : containerHeight;\n const headerElement = document.querySelector('header .lock-opaque');\n const defaultContainer = document.querySelector('header .default-container');\n const refinerElement = isMobile ? document.querySelector('.msc-sort-filter-wrapper') : document.querySelector('.ms-refiner-heading');\n if (refinerElement && headerElement && defaultContainer) {\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > bannerHeights) {\n refinerElement.classList.add('lock-Filter');\n refinerElement.setAttribute('style', `top: ${defaultContainer.clientHeight}px`);\n } else {\n refinerElement.classList.remove('lock-Filter');\n }\n } else if (refinerElement) {\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > bannerHeights) {\n refinerElement.classList.add('lock-top');\n } else {\n refinerElement.classList.remove('lock-top');\n refinerElement.classList.remove('lock-Filter');\n refinerElement.removeAttribute('style');\n }\n }\n};\n\n/**\n * Function to setup filter sticky.\n * @param isMobile - The boolean prop.\n * @param isStickyHeader - The boolean prop.\n */\nfunction stickyFilterSetup(isMobile: boolean, isStickyHeader: boolean): void {\n window.addEventListener('scroll', () => {\n configureStickyFilter(isMobile, isStickyHeader);\n });\n configureStickyFilter(isMobile, isStickyHeader);\n}\n\n/**\n * Function to make filter sticky.\n * @param refinerRefernce - Ref prop for filter.\n * @param toggle - Toggle function for filter menu.\n */\nfunction useOutsideClick(refinerRefernce: React.RefObject<HTMLElement>, toggle: (event: Event) => void) {\n React.useEffect(() => {\n /**\n * Function to make filter sticky.\n * @param event - Event prop for filter.\n */\n function handleClickOutside(event: Event) {\n const element = document.querySelector('.ms-refine-filter__toggle_collapsed');\n if (refinerRefernce.current && !refinerRefernce.current.contains(event.target as Node) && !element) {\n toggle(event);\n }\n }\n if (MsDyn365.isBrowser) {\n document.addEventListener('click', handleClickOutside);\n }\n return () => {\n if (MsDyn365.isBrowser) {\n document.removeEventListener('click', handleClickOutside);\n }\n };\n }, [refinerRefernce, toggle]);\n}\n\n/**\n * Render the category page items.\n * @param props - The view props.\n * @returns The search Result container module view.\n */\nconst SearchResultContainerView: React.FC<ISearchResultContainerViewProps & ISearchResultContainerProps<{}>> = props => {\n const {\n SearchResultContainer,\n pagination,\n ProductSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n TitleViewProps,\n refineMenu,\n categoryHierarchy,\n sortByOptions,\n CategoryNavContainer,\n RefineAndProductSectionContainer,\n FeatureSearchContainer,\n similarLookProduct,\n errorMessage,\n resources\n } = props;\n useEffect(() => {\n if (props.config.useStickyFilter && MsDyn365.isBrowser) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app context is generic\n stickyFilterSetup(props.isMobile, props.context.app.config.enableStickyHeader as boolean);\n }\n }, [props]);\n const [isExpanded, setIsExpanded] = useState<boolean>(false);\n const toggle = () => {\n setIsExpanded(!isExpanded);\n };\n const wrapperRefiner = React.useRef(null);\n useOutsideClick(wrapperRefiner, toggle);\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n <Module {...SearchResultContainer}>\n {similarLookProduct ? null : (\n <Node {...CategoryNavContainer}>\n {renderCategoryHierarchy(categoryHierarchy)}\n {renderTitle(TitleViewProps)}\n {renderTitleCount(TitleViewProps)}\n </Node>\n )}\n {choiceSummary}\n <Node className='msc-sort-filter-wrapper'>{modalToggle}</Node>\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n {errorMessage}\n {props.config.enableProdutDescription ? renderProducts(props) : renderProductCards(props)}\n {pagination}\n </Module>\n );\n }\n return (\n <Module {...SearchResultContainer}>\n {similarLookProduct ? null : (\n <Node {...CategoryNavContainer}>\n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\n {TitleViewProps && renderTitle(TitleViewProps)}\n {TitleViewProps && renderTitleCount(TitleViewProps)}\n </Node>\n )}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...RefineAndProductSectionContainer}>\n <Node ref={wrapperRefiner} className='ms-refiner-heading'>\n <Node className='ms-refiner-heading_title'>\n <Button\n className={isExpanded ? 'ms-refine-filter__toggle_expanded' : 'ms-refine-filter__toggle_collapsed'}\n aria-label='Filter'\n onClick={toggle}\n aria-expanded={isExpanded}\n tabIndex={0}\n >\n {resources.filterText}\n </Button>\n <div className='ms-search-result-wrapper-title-choice-summary'>{choiceSummary}</div>\n <div className='ms-search-result-wrapper-sort-by-category'>\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n </div>\n </Node>\n {refineMenu && isExpanded && renderRefiner(refineMenu)}\n <Node className='ms-refine__footer'>\n {refineMenu && isExpanded && renderRefinerFooter(refineMenu, toggle, resources)}\n </Node>\n </Node>\n\n <Node {...ProductSectionContainer}>\n {errorMessage}\n {props.config.enableProdutDescription ? renderProducts(props) : renderProductCards(props)}\n {pagination}\n </Node>\n </Node>\n </Module>\n );\n};\n\n/**\n * Render Search result Modal.\n * @param modalProps - The Search Result Modal view props.\n * @param refineMenu - The Refine Menu view props.\n * @param sortByDropDown - The Sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\n/**\n * Render Refiner Mobile.\n * @param props - The Refine Menu view props.\n * @returns The JSX Element.\n */\nconst renderRefinerMobile = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n <Node {...RefinerSectionContainer}>\n <Node {...RefineMenuContainer}>\n {refiners.map((submenu, index) => (\n <React.Fragment key={index}>{submenu}</React.Fragment>\n ))}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\n/**\n * Render Search result Body.\n * @param props - The Search Result Modal view props.\n * @param refineMenu - The Refine Menu view props.\n * @param sortByDropDown - The Sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefinerMobile(refineMenu));\n }\n return null;\n};\n\n/**\n * Render Refiner.\n * @param props - The Refine Menu view props.\n * @returns The JSX Element.\n */\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n <Node {...RefinerSectionContainer}>\n <Node {...RefineMenuContainer}>\n {refiners.map((submenu, index) => (\n <React.Fragment key={index}>{submenu}</React.Fragment>\n ))}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\n/**\n * Render Refiner Footer.\n * @param props - The Refine Menu view props.\n * @param handler - The Refine menu toggle function.\n * @param resources - Resources to get the done text and aria label.\n * @returns The JSX Element.\n */\nconst renderRefinerFooter = (\n props: IRefineMenuViewProps,\n handler: MouseEventHandler,\n resources: ISearchResultContainerResources\n): JSX.Element | null => {\n const { refiners } = props;\n if (refiners) {\n return (\n <Node className='ms-refine__footer__done'>\n <Node tag='button' className='ms-refine-filter-done' aria-label={resources.doneAriaLabel} tabIndex={0} onClick={handler}>\n {resources.doneText}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\n/**\n * Render sort by drop down.\n * @param props - The sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return <Node {...SortingContainer}>{sortByDropDown}</Node>;\n }\n return null;\n};\n\n/**\n * Render Title.\n * @param props - The title view props.\n * @returns The JSX Element.\n */\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <Node tag='h1' className=''>\n {title.titlePrefix}\n {title.titleText}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["createObservableDataAction","action","retailAction","input","context","createGetCategoriesInput","Paging","Top","requestContext","apiSettings","channelId","BaseCollectionInput","constructor","pageType","queryResultSettings","refiners","category","searchText","includeAttributes","isUpdateRefinerPanel","locale","catalogId","channelInventoryConfiguration","inventoryRefiner","getCacheKey","_objectSpread","this","toJS","Sorting","generateCacheKey","key","value","map","refiner","RefinerRecordId","LeftValueBoundString","RightValueBoundString","convertToString","getCacheObjectType","dataCacheType","createBaseCollectionInput","args","inputClassConstuctor","urlTokens","query","categoryId","QueryResultSettingsProxy","fromInputData","QueryResultSettings","queryRefiners","hydrateRefinersFromUrl","inputData","config","undefined","_inputData$config","updateRefinerPanel","getUpdateRefinerPanel","getCatalogId","sorting","Columns","JSON","parse","decodeURIComponent","itemId","q","recommendation","productId","stringify","ProductId","Recommendation","Error","ProductListInventoryFilteringOptions","GetFullProductsByCollectionInput","length","async","returnProducts","productSearchResults","metadataCount","productSearchResultsWithImages","productSearchResult","newImageUrl","generateProductImageUrl","PrimaryImageUrl","app","inventoryLevel","InventoryLevels","threshold","enableStockCheck","products","count","ArrayExtensions","hasElements","AttributeValues","element","RecordId","InventoryProductAttributeRecordId","inventoryRanges","TextValue","InventoryOutOfStockAttributeValueText","channelInventoryConfigurationId","inventoryAwareSortableAttributeId","ProductAvailabilitySortableAttributeRecordId","actionDataAction","id","_context$requestConte","_context$requestConte2","_context$requestConte3","_context$requestConte4","promise","channelInventoryConfigurationPromise","searchProductId","searchCriteriaInput","Context","ChannelId","CatalogId","Refinement","IncludeAttributes","SkipVariantExpansion","console","log","AsyncResult","resolve","getInventoryConfigurationAsync","callerContext","productListInventoryDisplay","HideOOS","inventoryInStockRefinerValue","_inventoryRefiner$Val","_inventoryRefiner","refinerInput","InventoryInStockRefinerValueInput","getInventoryRefinerAction","Values","find","getInventoryInStockRefinerValueAsync","some","push","SortOOS","_input$queryResultSet","_input$queryResultSet2","sortColumnName","column","ColumnName","IsDescending","CategoryIds","searchByCriteriaAsync","SearchCondition","searchObject","Number","isNaN","RecommendationListId","Ids","metadata","itemsPerPage","skip","Skip","_input$channelInvento","inventoryProductAttributeRecordId","arguments","super","buildCacheKey","_input$channelInvento2","getProductRefinerHierarchy","_input$channelInvento3","sortOptions","sortByOptionRelevanceDesc","sortByOptionRatingAsc","sortByOptionRatingDesc","sortByOptionNameAsc","sortByOptionNameDesc","sortByOptionPriceAsc","sortByOptionPriceDesc","sortByOptionBestSelling","sortByOptionNewScore","sortByOptionTrendingScore","MappedSearchInput","getMappedSearchConfiguration","ctx","getSearchConfigurationAsync","then","searchConfiguration","ProductSortColumns","sortColumn","toUpperCase","telemetry","warning","filter","Boolean","createInput","getMappedSearchConfigurationDataAction","searchCriteria","getProductSearchRefinersAsync","productRefiners","trace","result","productRefiner","DefaultValues","RefinersByCollectionInput","defaultCategoryIdValue","defaultProductIdValue","compressedRefinerKeys","compressedRefinerArray","parseQueryParam","compressedRefiner","parsedRefiner","forEach","refinerKey","index","_unused","buildListPageUrl","fullUrl","sortingColumns","skipCount","searchParams","delete","sortedRefiners","sort","first","second","set","compressedRefiners","compressRefiners","href","toString","getCurrentUrl","MsDyn365","isBrowser","URL","window","location","url","requestUrl","ListPageState","activeFilters","activeProducts","sortingCritera","currentPageNumber","pageSize","featureProduct","productPrices","__decorate","observable","ListPageStateInput","listPageStateAction","createListPageInput","ProductRefinerValueDataTypeValue","ProductRefinerTypeValue","ProductRefinerSource","isRangeType","dataTypeValue","AttributeDataType","Currency","Decimal","Integer","findMatchingRefinementCriterion","productRefinerValue","refinementCriteria","refinementCriterion","isMatchingRefinementCriterion","RefinerSourceValue","DataTypeValue","getUpdatedRefinementCriteria","itemToggleNotification","currentRefinementCriteria","updatedRefinementCriteria","toggledItemFound","selectedCriterion","isSelecting","next","rangeStart","rangeEnd","Text","TrueFalse","parentProductRefinerHierarchy","RefinerTypeValue","RefinerType","SingleSelect","child","matchingIndex","findIndex","criterion","splice","ChoiceSummary","React","props","closeButtonGlyph","_onClick","e","preventDefault","stopPropagation","target","currentTarget","clearAll","getAttribute","includes","selectedRefiner","_getSelectedRefinerChoice","onChoiceClicked","itemClicked","choiceClicked","nextItemToFocus","nextSibling","payLoad","getPayloadObject","telemetryContent","_this$props$context","selectedChoices","refinerHierarchy","choice","parent","hierarchy","_getKeyForRefinerValue","render","clearAllText","label","classNames","choiceAriaLabel","closeAriaLabel","items","selectedRefinersMap","contentAction","etext","clearAllAttributes","getTelemetryAttributes","className","classnames","item","attribute","Object","assign","urlBuilder","onClick","role","LeftValueBoundLocalizedString","choiceFormat","choiceRangeValueFormat","refinerValues","overallFormat","rangeFormat","refinerValueName","refinerName","KeyName","replace","_formatPrice","UnitText","filterValue","amount","currency","cultureFormatter","formatCurrency","error","selected","computed","observer","ErrorMessage","_ref","text","xmlns","width","height","viewBox","fill","clipPath","cx","cy","r","d","stroke","strokeWidth","x1","y1","x2","y2","gradientUnits","stopColor","offset","FeatureSearchResultItem","_context$request$app","product","imageSettings","resources","productName","Name","productRecordId","productUrl","getProductPageUrlSync","actionContext","fallbackImage","getFallbackImageUrl","ItemId","request","OmniChannelMedia","heading","featureSimilarDescriptionTitle","featureSimilarLooksTitle","onTelemetryClick","gridSettings","imageUrl","altText","img","src","imageProps","fallBackSrc","Image","loadFailureBehavior","renderProductPlacementImage","title","Link","ariaLabel","ModalToggle","modalNode","Modal","autoFocus","applicationNode","returnFocusRef","returnRef","isOpen","toggle","onModalToggle","zIndex","modalHeaderNode","ModalHeader","modalTitle","modalFooterNode","ModalFooter","Button","TelemetryConstant","contentData","recid","setTelemetryAttribute","IncrementalQuantity","IncrementalQuantity_1","_props$currentCount","_this$props$min","eventType","inputRef","isMobileView","isMobileCheck","isMobile","variant","VariantType","Browser","xs","w","sm","md","lg","xl","_validateMin","state","currentInput","setState","_minValue","currentValue","Math","min","max","currentCount","isUpdating","_onIncrement","bind","_onDecrement","_removeITem","_handleChange","contentCategory","pgname","pageName","mname","moduleName","etype","defaultProps","nextState","_props$currentCount2","disabled","_this$props$inputQuan","_this$props$inputQuan2","glyphMinusClassName","decrementGlyphClass","removeClassName","decrementDisabled","isGiftCard","incrementDisabled","DecrementQuantity","decrementAttributes","IncrementQuantity","incrementAttributes","ariaLablelText","inputQuantityAriaLabel","extraClassDecrement","iconClassName","extraClassIncrement","button","decrementButtonAriaLabel","color","transform","type","pattern","onChange","onBlur","ref","incrementButtonAriaLabel","invokeCallback","currQuantity","updatedQuantity","parseInt","_debounce","inputElement","current","HTMLInputElement","setAttribute","incrementGlyphClass","ProductCollectionQty","removeITem","getCartState","recordId","removeItemFromCart","currentProductqQty","LineID","cartState","productInfow","getAddToCartInputFromProps","cartLinesData","cart","CartLines","findData","cartLineIds","LineId","removeCartLines","_props$orderDetailsPr","_props$data","orderDetailsProducts","ObjectExtensions","isNullOrUndefined","simpleProduct","salesLine","Quantity","ProductsDataActions","newProductSearchResult","productData","_productData$BasePric","ProductTypeValue","ProductType","Variant","AdjustedPrice","Price","BasePrice","quantity","_props$quantity","data","onChangeHandler","_this$props$data","newValue","productID","totalAvailableQuantity","axios","require","method","maxBodyLength","Infinity","headers","accept","oun","ProductIds","QuantityUnitTypeValue","DefaultWarehouseOnly","response","_response$data","_response$data2","ProductWarehouseInventoryAvailabilities","_response$data3","respObject","_respObject$","floor","PhysicalAvailable","catch","_cart","addOneItemToCart","isEmpty","updateCartId","oldQty","newQty","addToCartResult","updateCartLineQuantity","cartLineId","newQuantity","_props$productAvailab","addToCartInput","addProductToCart","availableQuantity","productAvailability","AvailableQuantity","additionalProperties","orderQuantityLimitsFeatureIsEnabled","isOrderQuantityLimitsFeatureEnabled","isPriceKeyedIn","customPrice","customPriceAmount","isAddEmailDeliveryItemToCart","shouldSkipSiteSettings","status","_getCartStatusUpdate","cartData","_SingleAddToCart","getQty","buttonAddtoCart","strokeLinecap","strokeLinejoin","Node","minQuantityText","maxQuantityText","getInventoryLabel","inventoryAttribute","ProductSearchResultItems","moduleType","moduleId","allowBackNavigation","quickviewSlot","productComparisonButton","isPriceMinMaxEnabled","productsDimensionAvailabilities","priceResources","priceRangeSeparator","_cartData$cart","ProductComponent","freePriceText","priceFree","originalPriceText","currentPriceText","ratingAriaLabel","allowBack","typeName","quickViewButton","inventoryLabel","swatchItemAriaLabel","dimensionAvailabilities","dimensionAvailability","masterProductId","MasterProductId","Description","DefaultUnitOfMeasure","ExtensionProperties","RangeRefineItem","_selectedRefinementCr","_this$props$selectedR","_this$props$selectedR2","_ref2","_this$props$selectedR3","_this$props$selectedR4","_formattedPriceReverseLookup","Map","getLabels","sliderId","minPrice","maxPrice","labelId","labelString","labelPositioning","getSliderThumbs","sliderKey","selectedMin","selectedMinPrice","selectedMax","selectedMaxPrice","_this$props$minValueS","_this$props$maxValueS","minValueSliderThumbAriaLabel","currencyCode","ariaValueText","maxValueSliderThumbAriaLabel","_onRangeUpdate","_onRangeUpdateEnd","_handleRangeTooltipText","_changeMin","_changeMax","_finishChangeMin","_finishChangeMax","minInput","maxInput","selectedRefinementCriterion","initialMin","initialMax","String","minValue","maxValue","labels","sliderKeyString","sliderThumbs","isChecked","validationErrorMin","validationErrorMax","touchedMin","touchedMax","shouldComponentUpdate","nextProps","componentDidUpdate","previousProps","updateSliderProps","refineItemCommonProps","rangeType","_renderInputFields","_renderSlider","_ref3","_this$props$selectedR5","_this$props$selectedR6","_ref4","_this$props$selectedR7","_this$props$selectedR8","isDisabled","formAttrs","rangeNameFormat","minInputClassName","maxInputClassName","formattedSelectedMin","_getFormattedSelectedValue","formattedSelectedMax","minLabel","onFocus","maxLabel","placeholder","placeholderTextMax","ariaAttributes","Slider","inForm","step","orientation","showLabels","showTooltip","onChangeEnd","debounce","handleTooltipText","event","_changeValue","inputType","selectedKey","touchedKey","_getInputWithoutFormatting","selectedMinValue","minTouched","onToggle","maxNum","validationErrorNaN","_focus","_validateRange","selectedMaxValue","maxTouched","minNum","setTimeout","focus","touched","validationError","validationErrorRange","inputAsNum","get","sliderChangeNotification","firstThumbValue","secondThumbValue","_focusOnSliderThumb","document","getElementById","tooltip","RefineItem","anchorType","_productRefinerValue$","_this$props$parentPro","_this$props$parentPro2","_this$props","productCountAriaLabel","singleProductCountAriaLabel","children","refineItemAriaLabel","refineItemsAriaLabel","attrs","_objectWithoutProperties","_excluded","isSingleSelect","itemTypeClassName","SourceValue","Rating","_renderRating","productText","productCount","Count","refineMenuItemAriaLabel","format","dimensionType","toLocaleLowerCase","shouldDisplayAsSwatch","_getShouldDisplayAsSwatch","hasColor","StringExtensions","isNullOrWhitespace","SwatchColorHexCode","hasImage","SwatchImageUrl","hasContentSwatch","_getRefinerUrl","tabIndex","_renderSwatch","checkIfShouldDisplayAsSwatch","_productRefinerValue$2","swatchItems","colorHexCode","SwatchComponent","list","isSelectionEnabled","isRefineItem","ratingUserCountAriaLabel","ratingSingleUserCountAriaLabel","_productRefinerValue$3","refinerRating","ratingRefiner","selectedRefinerValues","selectedRating","defaultChkProductCount","ratingComponentClass","productCountAriaLabelValue","RatingComponent","avgRating","ratingCount","hideCount","readOnly","moduleTypeName","RefineSubmenu","_onToggleItem","_onToggleSubmenu","expanded","productRefinerHierarchy","hideRating","Collapse","timeout","_renderChildItems","_renderRange","_renderSingleMultiSelect","refinerValuesList","listItems","selectedValue","_getRangeType","DisplayTemplateValue","DisplayTemplate","Range","SliderWithBars","onUpdateRefiners","prevState","Separator","separator","Title","expandRefinersCount","SearchResultContainer","SearchResultContainer_1","_props$context$reques","sortByDropdownOptions","_pageType","_viewport","expandrefinerCount","defaultPageNumber","localyOnlineRecordId","allBrandsRecordId","allOfferSRecordId","isListPageStateUpdated","_isMounted","renderCategoriesCarousal","_this$props$data$cate","_parentCategory$","_parentCategory$2","_parentCategory$3","_parentCategory$4","_parentCategory$0$Ima","_parentCategory$0$Ima2","_this$props$data$cate3","_parentCategory$5","_this$props$data$cate5","_this$props$data$cate6","_this$props$data$cate17","_this$props$data$cate18","_sameLevelCategories","base_image_url","parentCategory","categories","cat","_this$props$data$cate2","ParentCategory","parentCategoryUrl","toLowerCase","parentCategoryImgUrl","Images","Uri","sameLevelCategories","_this$props$data$cate4","parentCategoryName","_this$props$data$cate7","_this$props$data$cate8","_this$props$data$cate9","_this$props$data$cate10","_this$props$data$cate11","_this$props$data$cate12","_this$props$data$cate13","_this$props$data$cate14","_this$props$data$cate15","_this$props$data$cate19","_this$props$data$cate20","_parentCategoryName","_parentCategoryImgUrl","settings","dots","infinite","speed","slidesToShow","slidesToScroll","arrows","responsive","breakpoint","indexToMove","obj","_this$props$data$cate16","movedObject","unshift","card","_this$props$data$cate21","_card$Name","_card$Images","_card$Images2","categoryUrlName","categoryUrl","_updateListPageState","listPageState","_this$props$context$r","_this$props$config$it","_this$props$config$it2","_this$props$context$r2","querySorting","totalProductCount","_getProductsDimensionsAvailabilities","_this$props$data$list","_this$props$data$list2","productsList","getDimensionAvailabilitiesForProductSearchResultAction","DimensionAvailabilitiesForProductSearchResultInput","DimensionSwatchDisplayTypes","productCard","_getActivePrice","_this$props$data$list3","_this$props$data$list4","getPriceForProductSearchResult","PriceForProductSearchResultInput","_getSearchResultModal","modal","modalHeader","modalFooter","modalBody","ModalBody","SearchResultModal","modalCloseButtonText","modalIsOpen","_modalToggleRef","_toggleModal","_getCollectionTitle","collectionTitle","_this$props$context$r3","getFriendlyName","NameTranslations","productCountNumber","productCountText","numberOfProducts","oneProduct","TitleContainer","telemetryPageName","titlePrefix","searchTextPrefix","titleText","titleCount","isCategoryPage","_getCategoryHierarchy","categoryHierarchy","CategoryHierarchyContainer","tag","categoryHierarchyList","categoryLinkAriaLabel","Url","categoryHierarchySeparator","_getSortingDropDown","activeDropdown","_getCurrentlySelectedOption","sortingState","selectedSortByOption","dropdownOptions","_getAllSortByOptions","sortOptionsBlackList","dropdownOption","SortingContainer","sortByDropDown","LabeledDropdown","labelClassname","labelText","sortByDropdownLabel","dropdownId","dropdownClassname","toggleColor","selectedOption","onSelectOption","_updateSortByDropdown","_sortAndFilterContainerRef","_getPagination","totalItems","previousText","flipperPrevious","nextText","flipperNext","UncontrolledPagination","paginationAriaLabel","qsp","startingItem","_renderPrev","_renderNext","previousAriaLabel","nextAriaLabel","_getRefineMenu","_this$props$data$cate22","_this$props$data$cate23","tempRangeTypeTODO","inputRange","validRefiners","_shouldHideFromRefiners","activeRefiners","_getexpandRefinerCount","expandedRefiners","brandFilterBlackList","categoryFilterBlackList","otherFilterBlackList","RefineMenuContainer","RefinerSectionContainer","_refineItemCommonProps","_onUpdateRefiners","_buildRefinerUrl","isExpandedOnInitialLoad","_this$props$data$prod","_this$props$data$prod2","_this$props$data$prod3","_this$props$data$prod4","isInventorySortableAttribute","isInventoryProductAttribute","_getInventoryRefiner","baseCollectionInput","inventoryInStockRefinerValueInput","Promise","_getChoiceSummary","_this$props$data$refi","selectedRefiners","rating","choiceSummaryLabel","_onChoiceClicked","_buildRefinerUrlForChoiceSummary","_getProducts","_this$props$slots","_this$props$data$feat","_this$props$data$prod5","_this$props$data$cart","activeProductsList","slots","quickview","isPriceMinMaxFeatureState","featureState","IsEnabled","notification","history","pushState","_getSortColumnFromSelectedOption","transaction","option","mappedConfiguration","_getSortCriteriaColumn","_this$props$data$list5","sortCriteria","queryColumns","mappedSearchConfiguration","mappedSearchConfig","validValues","activeSortColumn","activeMappedConfig","_this$props$data$list6","newRefinementCriteria","dropdownElementId","dropdownElement","selectedChoice","isClearAll","refinerCount","all","one","two","three","four","paginationPreviousText","paginationNextText","device","Type","_updateViewport","pending","oosIds","validationErrorNotNumber","validationErrorNotRange","getTelemetryObject","friendlyName","nameTranslations","_nameTranslation","nameTranslation","Language","_this$props$context$a2","addEventListener","fetchActiveProductsList","StoreOperationsDataActions","reaction","_listPageState$active","_listPageState$sortin","_newListPageState$cur","_newListPageState$sor","_newListPageState$act","_this$props$context$r4","_this$props$context$r5","_this$props$context$r6","_this$props$context$a","newListPageState","productResults","getCollectionProducts","enableAffiliationBasedPricing","user","isAuthenticated","dimensionsToDisplayOnProductCard","dimensionsInProductCard","dimensionsToDisplayAsSwatch","dimensionsAsSwatchType","DimensionTypes","none","_newListPageState$cur2","_newListPageState$sor2","_newListPageState$act2","_this$props$context$r7","_this$props$context$r8","getCollectionRefinersAction","componentWillUnmount","removeEventListener","_listPageState$result","_listPageState$result2","_this$props$context$r9","_this$props$data$cate24","_this$props$data$cate25","_this$props$data$cate26","_this$props$data$list7","_this$props$data$list8","_this$props$data$cate27","_this$props$data$cate28","productCollection","searchProduct","errorText","resultCategoryNotFoundText","resultSearchNotFoundText","productsComponent","featureComponent","searchResultContainerViewProps","TitleViewProps","disableHierarchy","refineMenu","moduleProps","sortByOptions","pagination","ProductsContainer","ProductSectionContainer","RefineAndProductSectionContainer","choiceSummary","modalToggle","innerRef","searchResultModal","errorMessage","FeatureSearchContainer","similarLookProduct","categoriesCarousal","isBrandPage","renderView","OOSProductIds","fetchOOSProductIds","itemStr","localStorage","getItem","now","Date","expiry","removeItem","getOOSProductData","unavailableProductIds","_response$data4","expiryTimestamp","minutes","setItem","_getViewport","Viewport","renderRefiner","isRecoSearchPage","renderSort","submenu","renderCategoryHierarchy","renderTitle","renderTitleCount","_props$context$action","CategoryNavContainer","Module","createSearchResultModal","modalProps","createModalBody","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","$type","da","name","path","runOn","iNM","ns","n","p","pdp","__bindings__","viewDictionary","cn","getDefaultSwatchSelected","coreContext","_productData$Attribut","_attributeSwatches$fi","dimensionToPreSelectInProductCard","attributeSwatches","attributeValue","_attributeValue$KeyNa","Swatches","IsDefault","updateProductUrl","productDetailsPageUrl","queryString","sourceUrl","baseUrl","search","pathname","renderProductUnitOfMeasure","unitOfMeasure","renderLabel","price","ratingAriaLabelText","reviewCount","ratingCountAriaLabelText","reviewCountArialableText","getReviewAriaLabel","getRatingAriaLabel","roundedRating","toFixed","renderPrice","basePrice","adjustedPrice","savingsText","CustomerContextualPrice","PriceComponent","fallbackImageUrl","_context$app$config","contextConfig","placeholderImageName","fallbackImageSource","cropFocalRegion","bypassHideOnFailure","msdyn365Commerce","createComponentOverride","component","_product$Name","_product$RecordId","_getProductImageUrlFr","_getProductPageUrlFro","ratingCountAriaLabel","isEnabledProductDescription","MIN_VALUE","productImageUrlFromSwatch","defaultSwatch","swatchProductImageUrls","ProductImageUrls","generateImageUrl","getProductImageUrlFromDefaultSwatch","productPageUrlFromSwatch","SwatchValue","encodeURIComponent","getProductPageUrlFromDefaultSwatch","productPageUrl","setProductPageUrl","useState","productImageUrl","setProductImageUrl","selectedSwatchItems","Dictionary","updatePageAndImageUrl","swatchItem","setValue","productPageUrlWithSwatch","newUrl","swatchProductImageUrl","productImageUrls","isUnitOfMeasureEnabled","unitOfMeasureDisplayType","AverageRating","TotalRatings","description","attributeValues","_item$KeyName$toLocal","_item$KeyName","_item$Swatches$map","_item$Swatches","dimensionTypeValue","shouldDisplayDimension","swatches","_item$RecordId","_swatchItem$SwatchVal","_swatchItem$SwatchVal2","_dimensionAvailabilit","isDefault","_swatchItem$SwatchVal3","swatch","ProductComponentSwatchComponent","onSelectDimension","totalRatings","numberRatings","renderRating","inventoryAvailabilityLabel","selectedDimensions","getValues","DimensionTypeValue","convertDimensionTypeToProductDimensionType","DimensionValue","Value","selectedProductId","renderQuickView","validateCatalogId","renderProductComparisonButton","DescriptionInterval","renderProductCards","renderProductCardsDescription","_props$data$products$","_props$data$featureSt","breadCrumbType","breadcrumbType","isAllowBack","classname","quickviewslot","renderProducts","_props$data$listPageS","productDescriptionInterval","productDescriptionIntervalRemainder0","productDescriptionIntervalRemainder9","configureStickyFilter","isStickyHeader","headerContainer","querySelector","headerHeight","offsetHeight","bannerHeights","headerElement","defaultContainer","refinerElement","documentElement","scrollTop","classList","add","clientHeight","remove","removeAttribute","renderRefinerMobile","renderRefinerFooter","handler","doneAriaLabel","doneText","useEffect","useStickyFilter","stickyFilterSetup","enableStickyHeader","isExpanded","setIsExpanded","wrapperRefiner","refinerRefernce","handleClickOutside","contains","useOutsideClick","enableProdutDescription","filterText","module","exports","ReactDOM"],"sourceRoot":""}