{"version":3,"file":"static/js/61394b24429edde873dc.bundle.js","mappings":";0HACO,MAAMA,EAAYC,GACK,iBAAXA,GAAwBA,GAAUA,EAAOC,OAASD,OAASE,oFCM9E,MAAMC,EAAyB,eAiFlBC,EAAiBA,CAACC,EAA0CC,EAA0BC,KAAyC,IAAAC,EACxI,MAAMC,EAAYH,GAAoBH,EACtC,IAAIO,EAAuC,QAAvBF,GAAGT,EAAAA,EAAAA,GAASM,UAAW,IAAAG,GAAwH,QAAxHA,EAApBA,EAAsBG,MAAMC,IAA6B,IAAAC,EAAA,OAAKD,MAAAA,GAAmB,QAANC,EAAbD,EAAeE,YAAI,IAAAD,OAAA,EAAnBA,EAAqBE,cAAcC,WAAWP,MAAAA,OAAS,EAATA,EAAWM,cAAcC,kBAAO,IAAAR,OAAA,EAA5IA,EAA8IS,UACrK,IAAKP,GAAoBQ,EAAAA,GAASC,UAAW,KAAAC,EACzC,MAAMC,EAAkBC,aAAaC,QAAQ,uBAC7C,IAAIC,EAA+C,GAC/CH,IACAG,EAAiBC,KAAKC,MAAML,IAEhC,MAAMM,EAAyE,QAA3DP,EAAGI,EAAeb,MAAKiB,GAAQA,EAAKC,YAActB,WAAS,IAAAa,OAAA,EAAxDA,EAA0DU,UACjF,IAAGH,EAGC,OAFAjB,EAAmBiB,EAK3B,OAAOjB,GAGEqB,EAAsBA,CAAC1B,EAA6BC,EAA0BC,KAGvF,IAAIG,EAAmBL,GAAcA,EAFnBC,GAAoBH,GAGtC,IAAKO,GAAoBQ,EAAAA,GAASC,UAAW,KAAAa,EACzC,MAAMX,EAAkBC,aAAaC,QAAQ,uBAC7C,IAAIC,EAA+C,GAC/CH,IACAG,EAAiBC,KAAKC,MAAML,IAEhC,MAAMM,EAAyE,QAA3DK,EAAGR,EAAeb,MAAKiB,GAAQA,EAAKC,YAActB,WAAS,IAAAyB,OAAA,EAAxDA,EAA0DF,UACjF,IAAGH,EAGC,OAFAjB,EAAmBiB,EAK3B,OAAOjB,GAIEuB,EAAoBA,CAAC5B,EAA0CC,KAAgD,IAAA4B,EACxH,MAAMxB,EACFL,IAGC,QAHS6B,EACV7B,EAAWM,MACPC,GAAiBA,EAAcE,MAAQF,EAAcE,KAAKC,cAAcC,SAAWV,EAAiBS,cAAcC,gBACrH,IAAAkB,OAAA,EAFDA,EAEGjB,WACP,GAAKP,EAGL,OAAOA,0JC1HJ,MAAMyB,EAAgBC,IAA2C,IAAAC,EACpE,MAAMC,EAAaF,EAAeG,IAAID,WAChCE,EAASF,EAAWE,OACpBC,EAAOH,EAAWI,SAAS3B,cAGjC,IAAI4B,EAAWF,MAAAA,OAAI,EAAJA,EAAMG,MAAM,KAAKC,OAAO,GAGnCJ,EAAKK,MAAM,SACXH,EAAWI,EAAoBJ,IAInCA,EAAWK,EAAeL,EAAUP,GAIpC,MAAO,GAAGI,KAFmB,QAAXH,EAAGM,SAAQ,IAAAN,OAAA,EAARA,EAAUY,KAAK,QAK3BC,EAAed,IAA2C,IAAAe,EACnE,MACMV,EADaL,EAAeG,IAAID,WACdI,SAAS3B,cAGjC,IAAI4B,EAAWF,MAAAA,OAAI,EAAJA,EAAMG,MAAM,KAAKC,OAAO,GAGvCF,EAAWK,EAAeL,EAAUP,GAIpC,MAAO,IAFsB,QAAXe,EAAGR,SAAQ,IAAAQ,OAAA,EAARA,EAAUF,KAAK,QAiC3BF,EAAuBJ,SAQfzC,IAAbyC,GAA0BA,EAAS1C,OAAS,IAC5C0C,EAAWA,EAASS,QAAOC,IAAuC,IAA5BA,EAAQC,QAAQ,UAGnDX,GAUEK,EAAiBA,CAACL,EAAoBP,KAC/C,MAAMmB,EAAuBnB,EAAeoB,IAAIC,OAAOF,qBAEvD,GAAIZ,EAAS1C,OAAS,GAAKsD,GAAwBA,EAAqBtD,OAAS,EAAG,CAChF,MAAMyD,EAAsCH,MAAAA,OAAoB,EAApBA,EAAsBvC,OAAO4B,MAAM,MAC/Ec,MAAAA,OAAyB,EAAzBA,EAA2BzD,QAAS,GAChC0C,EAASgB,SAAQC,IACbF,EAA0BC,SAAQE,IAC9B,MAAMC,EAAiBD,EAAc7C,OAAOD,cACtCgD,EAAepB,EAASW,QAAQQ,GAClCA,EAAe7D,OAAS,IAAuB,IAAlB8D,GAC7BpB,EAASE,OAAOkB,EAAc,SAMlD,OAAOpB,GAWEqB,EAAgCA,CACzC5B,EACA6B,KAEA,IAAIC,EAAkBC,EAAwB/B,GAkB9C,OAfI8B,KAC6B,IAAzBD,EACAC,EAAkBA,EAAgBd,QAAOgB,GAC9BA,EAAUC,uBAEW,IAAzBJ,IACPC,EAAkBA,EAAgBd,QAAOgB,GAC9BA,EAAUE,4BAGzBJ,EAAgBK,MAAK,CAACC,EAA2BC,IACtCD,EAAEE,MAAQD,EAAEC,SAIpBR,GAUES,EAAyBA,CAACvC,EAAiC6B,KACpE,MAAMW,EAA6BZ,EAA8B5B,EAAgB6B,GAE3EY,EAAkC,GAOxC,OALAD,GACIA,EAA2BjB,SAAQmB,IAC/BD,EAAsBE,KAAKD,EAAaE,YAAYhE,OAAOD,kBAG5D8D,GAQEV,EAA2B/B,GAC7BA,EAAeoB,IAAIC,OAAOwB,iBAG9BC,eAAeC,EAClB/C,EACAgD,GAEA,MAAMC,EAA8C,GACpD,GAA+B,IAA3BD,EAAgBnF,OAChB,OAAOoF,EAEX,MAEM5C,EAFaL,EAAeG,IAAID,WAEdI,SAGxB,IAAIC,EAAWF,MAAAA,OAAI,EAAJA,EAAMG,MAAM,KAAKC,OAAO,GAGvCF,EAAWK,EAAeL,EAAUP,GAGpC,MAAMkD,EAAkBlD,EAAemD,UAAUhF,UAC9B+E,EAAkB,GAAGA,WAAsBpF,IAG1DyC,EAASE,QAAQ,GAIrB,MAAM2C,EAA8B,GAuBpC,OAtBA7C,EAASgB,SAAQ8B,IACb,MAAMpC,EAAUqC,mBAAmBD,GACnC,IAA8B,IAA1BpC,EAAQC,QAAQ,KAAa,EACLD,MAAAA,OAAO,EAAPA,EAAST,MAAM,MACDQ,QAAOuC,GAAQA,EAAK1F,OAAS,IACrD0D,SAAQiC,IAClBJ,EAAkBT,KAAKa,EAAa7E,cAAcC,WAG1DwE,EAAkBT,KAAK1B,MAE3BmC,EAAkB7B,SAASN,IACvB+B,EAAgBzB,SAASkC,IACrBA,EAAYC,OAAOnC,SAASoC,IAAgB,IAAAC,EACxC,MAAMC,EAAuD,QAApCD,EAAGD,EAAaG,4BAAoB,IAAAF,GAAiC,QAAjCA,EAAjCA,EAAmCjF,cAAcC,OAAO4B,MAAM,YAAI,IAAAoD,GAAW,QAAXA,EAAlEA,EAAoE/C,KAAK,YAAI,IAAA+C,GAAuB,QAAvBA,EAA7EA,EAA+EG,QAAQ,MAAO,cAAM,IAAAH,OAAA,EAApGA,EAAsGG,QAAQC,EAAkBhE,EAAeoB,IAAIC,OAAO4C,oCAAqC,KACvNJ,GAAuBA,IAAwB5C,GAC/CgC,EAAqBN,KAAKgB,YAMnCV,EAUJ,MAAMiB,EAAwBA,CAACC,EAAcnE,KAA2C,IAAAoE,EAAAC,EAE3F,MAAOC,KAAaC,GAAcJ,MAAAA,OAAI,EAAJA,EAAM3D,MAAM,KAG9C,IAAK8D,EAASE,SAAS,QAAUF,EAASE,SAAS,QAAUxE,EAAeoB,IAAIC,OAC5E,OAAO8C,EAIX,IAAI5D,EAAW+D,MAAAA,OAAQ,EAARA,EAAU9D,MAAM,KAG/BD,EAAWK,EAAeL,EAAUP,GAGpC,MAAMyE,EAAgD,QAAvCL,EAAGG,EAAWG,KAAIC,GAAS,IAAIA,aAAQ,IAAAP,OAAA,EAApCA,EAAsCvD,KAAK,IAI7D,MAAO,GADc,GAAW,QAAXwD,EAAG9D,SAAQ,IAAA8D,OAAA,EAARA,EAAUxD,KAAK,OAAO4D,OAGrCT,EAAqBY,IAC9B,IAAIC,EAAgB,GACpB,QAA0B/G,IAAtB8G,GAAyD,KAAtBA,EAA0B,KAAAE,EAC7DD,EAAgBD,MAAAA,GAAoC,QAAnBE,EAAjBF,EAAmBhG,OAAO4B,MAAM,YAAI,IAAAsE,OAAA,EAApCA,EAAsCjE,KAAK,QAC3DgE,EAAgBA,GAAmC,KAAlBA,EAAuB,OAAOA,IAAkB,GAGjF,OAAO,IAAIE,OAFK,cAAcF,KAEH,MAK3B,OAAO,IAAIE,OAFK,eAEW,iGC7Q7B,MAAOC,EAAbC,cAIW,KAAAC,YAAc,IAAM,gBACpB,KAAAC,mBAAqB,IAAM,gBAC3B,KAAAC,cAAgB,IAA0B,eA0BrD,QAAeC,EAAAA,GAAoC,CAC/CC,OATJxC,eAAsByC,EAA+BC,GAKjD,MAAO,CAAEC,iBAAiB,IAM1BC,GAAI,oBACJH,MAnBiBI,GACV,IAAIX,kNCTT,MAAOY,EAMTX,YAAYxF,EAAmBoG,EAAmBC,EAAiCC,GAO5E,KAAAb,YAAc,IAAM,+BACpB,KAAAC,mBAAqB,IAAM,wBAC3B,KAAAC,cAAgB,IAAiB,OARpCY,KAAKvG,UAAYA,EACjBuG,KAAKH,UAAYA,EACjBG,KAAKF,gBAAkBA,EACvBE,KAAKD,UAAYA,GAAa,GAQ/B,MAAME,EACTC,IAEA,MAAMzG,GAAY0G,EAAAA,EAAAA,qCAAoCD,GACtD,GAAIzG,EACA,OAAO,IAAImG,GAAmCnG,GAAYyG,EAAUlG,eAAeoG,YAAYP,WAE/F,MAAM,IAAIQ,MAAM,gGAOjBvD,eAAewD,EAClBf,EACAC,GAGA,OAAOe,QAAQC,UACVC,MAAK,KACF,MAAMC,EAA2CnB,EAAMO,gBAEvD,IAAKY,EAAe,CAChB,MAAMC,EAAuB,IAAIC,EAAAA,qBAAqBrB,EAAM9F,UAAW8F,EAAMM,WAE7E,OAAOgB,EAAAA,EAAAA,oBAAmBF,EAAsBnB,GAGpD,OAAOkB,KAEVD,MAA+BK,IAC5B,MAAMJ,EAAsEI,EAE5E,OAAIJ,GACOK,EAAAA,EAAAA,yBACH,CAAEC,cAAexB,EAAKyB,oBAAqB,IAC3CP,EAAcQ,SACd3B,EAAMM,UACNN,EAAMQ,WAIP,QAEVU,MAAMU,GACmCA,GAK/B,KAEVC,OAAOC,IAEJ,MADA7B,EAAI8B,MAAMD,EAAME,SACV,IAAIlB,MAAM,4DAA4DgB,EAAME,cAI9F,SAAeC,EAAAA,EAAAA,IAA2B,CACtC9B,GAAI,8EACJJ,OAAmCgB,EACnCf,MAAOU,yKCpFJ,MAAMwB,EAAwBC,IAA2E,IAA1E,KAAEC,EAAI,UAAEC,EAAS,KAAEC,EAAI,UAAEC,EAAS,MAAEC,EAAK,QAAEC,EAAO,iBAAEC,GAAkBP,EACxG,MAAMQ,GAAUC,EAAAA,EAAAA,kBAAiB,QAASF,EAAkB,GAAI,IAE1DG,OAAoBtK,IAAT6J,EAAqBA,EAAO,GAC7CO,EAAQG,cAAcC,MAAQF,EAE9B,MAAM/J,GAAYkK,EAAAA,EAAAA,wBAAuBN,EAAkBC,GAE3D,OACIM,EAAAA,cAAA,IAAAC,OAAAC,OAAA,GACQrK,EAAS,CACbuJ,UAAWA,EACXC,KAAMA,EAAI,aACEC,EACZa,SAASC,EAAAA,EAAAA,kBAAiBX,EAAkBC,EAASE,IAChDJ,GAAW,CAAE,iBAAiB,IAEnCQ,EAAAA,cAAA,QAAMK,SAAS,QAAQT,GACvBI,EAAAA,cAAA,QAAMK,SAAS,WAAWC,QAASf,MC1BlCgB,EAAkCrB,IAAA,IAAC,UAAEsB,GAAWtB,EAAA,OAAKc,EAAAA,cAAA,sBAAkB,QAAM,IAAGQ,EAAS,wlBC8CtG,MAAMC,UAAmBT,EAAAA,cAOrBvD,YAAYiE,GACRC,MAAMD,GAPF,KAAAE,UAAgCpD,KAAKkD,MAAMG,QAAQC,QAAQnG,UAAUoG,SACrE,KAAAtB,kBAAsCuB,EAAAA,EAAAA,oBAC1CxD,KAAKkD,MAAMG,QAAQC,QAAQG,kBAC3BzD,KAAKkD,MAAMQ,aACX1D,KAAKkD,MAAMS,WA8FP,KAAAC,aAAe,KACnB,MAAM,KAAEC,GAAS7D,KAAKkD,MAAM7H,OAC5B,OAAKwI,GAASA,EAAKC,SAAYD,EAAKC,QAAQC,gBAI5C/D,KAAKgE,SAAS,CACVC,cAAc,IAGdzB,EAAAA,cAACf,EAAI,CACDE,KAAMkC,EAAKzB,SACXN,UAAW+B,EAAK/B,WAAa+B,EAAKzB,SAClCP,MAAM3D,EAAAA,EAAAA,IAAsB2F,EAAKC,SAAWD,EAAKC,QAAQC,eAAgB/D,KAAKkD,MAAMG,QAAQC,SAC5FvB,MAAM,IACNH,UAAU,qBACVK,iBAAkBjC,KAAKiC,qBAb3BjC,KAAKkD,MAAMG,QAAQM,UAAUtC,MAAM,0DAC5B,OA+GP,KAAA6C,oBAAuB/J,IAC3B,MAAMI,EAAWJ,EAAIK,MAAM,KAC3BD,EAAS4J,MAET,OADe5J,MAAAA,OAAQ,EAARA,EAAUM,KAAK,MAG1B,KAAAuJ,0BAA6BC,IACjC,MAAM,MAAEC,GAAUtE,KAAKkD,MAAM7H,OAE7B,OAAKiJ,GAAWA,EAAMzM,OAAS,EAIxByM,EAAM5F,KAAI,CAAC6F,EAAmBxC,KACjCsC,IAEI7B,EAAAA,cAACf,EAAI,CACD+C,IAAKzC,EACLJ,KAAM4C,EAAMnC,SACZN,UAAWyC,EAAMzC,WAAayC,EAAMnC,SACpCP,MAAM3D,EAAAA,EAAAA,IAAsBqG,EAAMT,SAAWS,EAAMT,QAAQC,eAAgB/D,KAAKkD,MAAMG,QAAQC,SAC9FvB,MAAO,CAAEsC,aAAAA,GAAeI,WACxB7C,UAAU,qBACVK,iBAAkBjC,KAAKiC,uBAb/BjC,KAAKkD,MAAMG,QAAQM,UAAUtC,MAAM,wDAC5B,OAiBP,KAAAqD,kBAAqBC,IACzB,IAAIC,EAAyB,GACzBC,EAAU,GACd,MAAMC,EAAyB,GAuB/B,OAtBAH,GACIA,EAAWpJ,SAAQ,CAACgC,EAAMwE,KACtB,OAAQA,GACJ,KAAK,EACD8C,EAAUtH,EACV,MACJ,KAAK,EAGL,KAAK,EACDsH,EAAU,GAAGtH,IACb,MACJ,QACIsH,EAAU,GAElBC,EAAanI,KAAKkI,GAEdD,EADArH,EAAKwH,SAAS,KACC,IAAIH,KAAiBrH,EAAK/C,MAAM,MAEhC,IAAIoK,EAAcrH,MAGtC,CAAEuH,aAAAA,EAAcF,aAAAA,IAEnB,KAAAI,cAAgB,KAA+C,IAAAC,EAAAC,EAAAC,EACnE,MAAM,KAAEC,EAAI,QAAE/B,GAAYrD,KAAKkD,MACzBlJ,EAAiBqJ,GAAWA,EAAQC,QACpCpG,EAAkBlD,EAAemD,UAAUhF,SAC3CkN,EAAanI,EAAkB,GAAGA,WAAsBpF,EAC9D,IAAIwN,EAAQF,EAAKG,SAASC,QAAUJ,EAAKG,SAASC,OAAOC,MAAS,UAC9DC,EAAgB,QAAPT,EAAGK,SAAI,IAAAL,GAAY,QAAZA,EAAJA,EAAMzK,MAAM,YAAI,IAAAyK,OAAA,EAAhBA,EAAkBxK,OAAO,GAEzCiL,GAAY9K,EAAAA,EAAAA,IAAe8K,EAAWrC,EAAQC,SAE9CgC,EAAgB,QAAZJ,EAAGQ,SAAS,IAAAR,OAAA,EAATA,EAAWrK,KAAK,KACvB,MAAM8K,EAAS7M,EAAAA,GAASC,WAAa6M,OAAOC,SACtCC,EAAiBH,IAAyB,QAAnBR,EAAIQ,EAAOrL,gBAAQ,IAAA6K,GAA0B,QAA1BA,EAAfA,EAAiBpH,QAAQ,IAAIuH,KAAS,WAAG,IAAAH,OAAA,EAAzCA,EAA2CpH,QAAQ,IAAIsH,IAAc,KAChGV,EAAamB,GAAkBxI,mBAAmBwI,GAAgBtL,MAAM,MACxE,aAAEsK,EAAY,aAAEF,GAAiB5E,KAAK0E,kBAAkBC,GACxDoB,GAA4BxJ,EAAAA,EAAAA,IAAuByD,KAAKkD,MAAMG,QAAQC,SAAS,GAC/E0C,EACFZ,EAAKa,SAAST,QACdJ,EAAKa,SAAST,OAAOxK,QAAOkL,GACjBA,EAAQC,UAAiF,IAAtEJ,EAA0B7K,QAAQgL,EAAQC,QAAQxN,iBAE9EyN,EAA4C,GAClDJ,MAAAA,GAAAA,EAAkBzK,SAAQ8K,IACtB,IAAIzJ,EAAcyJ,EAAWF,QACzBvJ,IACAA,EAAcA,EAAYjE,cAC1ByN,EAAaxJ,GAAe,IAEhCyJ,EAAW3I,OAAOnC,SAAQ2K,IACtBtB,GACIA,EAAarJ,SAAQ+K,IAAc,IAAAC,EAAAC,GAC3B5J,GAAesJ,EAAQpI,wBACoB,QAA1CyI,EAAAL,EAAQpI,qBAAqBnF,qBAAa,IAAA4N,GAAuB,QAAvBA,EAA1CA,EAA4CxI,QAAQ,MAAO,cAAM,IAAAwI,OAAA,EAAjEA,EAAmExI,SAAQC,EAAAA,EAAAA,IAAkBhE,EAAeoB,IAAIC,OAAO4C,oCAAqC,QAASqI,EAAY3N,cAAc6B,MAAM,KAAKK,KAAK,OAC/J,QAA1C2L,EAAAN,EAAQpI,qBAAqBnF,qBAAa,IAAA6N,GAAuB,QAAvBA,EAA1CA,EAA4CzI,QAAQ,MAAO,cAAM,IAAAyI,OAAA,EAAjEA,EAAmEzI,SAAQC,EAAAA,EAAAA,IAAkBhE,EAAeoB,IAAIC,OAAO4C,oCAAqC,QAASqI,EAAY3N,gBAEjLiE,GAAesJ,EAAQpI,sBAC9BoI,EAAQpI,qBAAqBnF,gBAAkB2N,EAAY3N,cAAc6B,MAAM,KAAKK,KAAK,OAFzFuL,EAAaxJ,GAAaD,KAAKuJ,EAAQpI,qBAAqBtD,MAAM,KAAKK,KAAK,gBAWhG,IAAI4L,EAAM,GACNC,EAAU,GACVC,GAAW,EACf,MAAM3J,EAAkB,IAAI+I,GAmC5B,OAlCAA,EAA0BxK,SAAQ/B,IAAO,IAAAoN,IAChCR,EAAa5M,KAA2B,QAAlBoN,EAAAR,EAAa5M,UAAK,IAAAoN,OAAA,EAAlBA,EAAoB/O,QAAS,YAC7CuO,EAAa5M,GACpBwD,EAAgBvC,OAAOuC,EAAgB9B,QAAQ1B,GAAO,OAI9DwD,EAAgB6J,OAAMrN,IAAO,IAAAsN,EAAAC,EACzB,MAAMC,EAAiBZ,EACjBF,EAAU1M,EAEhB,IADuB,QAAvBsN,EAAAE,EAAed,UAAQ,IAAAY,OAAA,EAAvBA,EAAyBjP,QAAS,UAAWmP,EAAed,IACjC,QAAvBa,EAAAC,EAAed,UAAQ,IAAAa,OAAA,EAAvBA,EAAyBlP,QAAS,GAAK8O,EAAU,KAAAM,EAAAC,EAAAC,EAI4BC,EAA7E,GAHIlB,IAAYlJ,EAAgB,IAA0C,KAAb,QAAvBiK,EAAAD,EAAed,UAAQ,IAAAe,OAAA,EAAvBA,EAAyBpP,UAC3D4O,EAAM,GAAGO,EAAed,MAExBA,IAAYlJ,EAAgB,IAA0C,KAAb,QAAvBkK,EAAAF,EAAed,UAAQ,IAAAgB,OAAA,EAAvBA,EAAyBrP,QAC3D6O,EAAU,IAAGM,EAAehK,EAAgB,IAAM,KAAKgK,EAAed,KAAa,GAAGc,EAAed,MAClD,KAAb,QAAlCkB,EAAAJ,EAAehK,EAAgB,WAAG,IAAAoK,OAAA,EAAlCA,EAAoCvP,UACpC4O,EAAOO,EAAehK,EAAgB,IAAqC,GAAGyJ,OAASO,EAAed,KAA1D,GAAGc,EAAed,MAUtE,OAPIA,IAAYlJ,EAAgB,IAA0C,KAAb,QAAvBmK,EAAAH,EAAed,UAAQ,IAAAiB,OAAA,EAAvBA,EAAyBtP,UAC3D4O,EACIA,GAAOC,EACD,GAAGD,KAAOO,EAAehK,EAAgB,IAAM0J,EAAU,OAAOM,EAAehK,EAAgB,IAAM,KAAKgK,EAAed,KAAaO,IAEtI,GAAGO,EAAed,OAEzB,EAGP,OADAS,GAAW,GACJ,KAGR,CAAEpJ,KAAMkJ,EAAK3B,aAAAA,IAGhB,KAAAuC,QAAWC,IACf,MAAM,KAAElC,EAAI,QAAE/B,GAAYrD,KAAKkD,MAEzBhG,GADiBmG,GAAWA,EAAQC,SACHnG,UAAUhF,SAC3CkN,EAAanI,EAAkB,GAAGA,WAAsBpF,EAC9D,IAAIwN,EAAQF,EAAKG,SAASC,QAAUJ,EAAKG,SAASC,OAAOC,MAAS,UAC9DC,EAAYJ,EAAK9K,MAAM,KAAKC,OAAO,GAEvCiL,GAAY9K,EAAAA,EAAAA,IAAe8K,EAAWrC,EAAQC,SAE9CgC,EAAOI,EAAU7K,KAAK,KACtB,MAAM8K,EAAS7M,EAAAA,GAASC,WAAa6M,OAAOC,SAC5C,MAAO,IAAIP,KAAQgC,IAAkBjC,EAAa,IAAIA,IAAe,KAAKM,GAAUA,EAAO4B,OAAS5B,EAAO4B,OAAS,MAEhH,KAAAC,yBAA4BC,IAAsB,IAAAC,EACtD,OAEc,QAFdA,EAAOD,EACFE,YACAC,iBAAS,IAAAF,OAAA,EAFPA,EAGD3J,QAAQ,0BAA0BrD,GAASA,EAAMmN,iBAEnD,KAAAC,sBAAyBzD,IAC7B,MAAM,KAAEe,GAASpF,KAAKkD,MAChB6E,EAAoB3C,EAAK2C,kBAAkBvC,QAAU,IAAIJ,EAAK2C,kBAAkBvC,QACtF,IAAKuC,EAED,OADA/H,KAAKkD,MAAMG,QAAQM,UAAUtC,MAAM,2DAC5B,KAEX,MAAM2G,EAAqC,GAY3C,OAXAD,EAAkBrJ,KAAI6G,IAClB,MAAM0C,EAAiB,CACnBvP,KAAM6M,EAAS7M,KACfwP,IAAK3C,EAAS2C,KAElBF,EAAsBrL,KAAKsL,MAE/BjI,KAAKmI,MAAMC,iBAAiBvQ,QACxBmI,KAAKmI,MAAMC,iBAAiB1J,KAAKlF,IAC7BwO,EAAsBrL,KAAKnD,MAE5BwO,EACDA,EAAsBtJ,KAAI,CAAC6F,EAAkBxC,KAC3CsC,IAEI7B,EAAAA,cAACf,EAAI,CACD+C,IAAKzC,EACLJ,KAAM4C,EAAM7L,KACZoJ,UAAWyC,EAAM7L,KACjBmJ,MAAM3D,EAAAA,EAAAA,IAAsBqG,EAAM2D,IAAKlI,KAAKkD,MAAMG,QAAQC,SAC1DvB,MAAOsC,EAAaI,WACpB7C,UAAU,qBACVI,QAASD,IAAUiG,EAAsBnQ,OAAS,EAClDoK,iBAAkBjC,KAAKiC,sBAIjC,MAmBF,KAAAoG,aAAgBhE,IACpB,MAAMlK,EAAM6F,KAAKkD,MAAMG,QAAQC,QAAQnJ,IAAID,WAAW2H,MAElDxG,QAAQ,gBAAEiN,GACVlD,MACImD,SAAW/C,OAAQ+C,GACnBC,0BAA4BhD,OAAQgD,GACpCC,eAAiBjD,OAAQuC,IAG7B3M,KAAOC,QAAQ,4BAAEqN,KACjB1I,KAAKkD,MACHxJ,GAAY1B,EAAAA,EAAAA,IAAewQ,EAA0BE,IAAgC,GAC3F,IAAKX,EAED,OADA/H,KAAKkD,MAAMG,QAAQM,UAAUtC,MAAM,kDAC5B,KAEX,MAAMiD,EAAuB,GA8B7B,OA5BAyD,EAAkBrJ,KAAI,CAAC6F,EAAqBxC,KACxCsC,IACAC,EAAM3H,KACF6F,EAAAA,cAACf,EAAI,CACD+C,IAAKzC,EACLJ,KAAM4C,EAAM7L,KACZoJ,UAAWyC,EAAM7L,KACjBmJ,MAAM3D,EAAAA,EAAAA,IAAsBqG,MAAAA,OAAK,EAALA,EAAO2D,IAAMlI,KAAKkD,MAAMG,QAAQC,SAC5DvB,MAAOsC,EAAaI,WACpB7C,UAAU,qBACVK,iBAAkBjC,KAAKiC,uBAI/BsG,IAAYD,IACZjE,IACAC,EAAM3H,KACF6F,EAAAA,cAACf,EAAI,CACDE,KAAMjI,EAAY,GAAGA,KAAa6O,EAAQ7P,OAAS6P,EAAQ7P,KAC3DoJ,UAAWpI,EAAY,GAAGA,KAAa6O,EAAQ7P,OAAS6P,EAAQ7P,KAChEmJ,KAAM1H,EACN4H,MAAOsC,EAAaI,WACpBzC,SAAS,EACTJ,UAAU,qBACVK,iBAAkBjC,KAAKiC,qBAI5BqC,GAGH,KAAAqE,QAAU,KACV7P,EAAAA,GAASC,WACT6M,OAAOgD,QAAQC,QAIf,KAAAC,kBAAoB,IAEpB9I,KAAKkD,MAAMG,SAAWrD,KAAKkD,MAAMG,QAAQC,SAAWtD,KAAKkD,MAAMG,QAAQC,QAAQyF,OAAS/I,KAAKkD,MAAMG,QAAQC,QAAQyF,MAAMF,KAIzH/P,EAAAA,GAASC,YAAoC,KAAtBiQ,SAASC,UAAmBrD,OAAOgD,QAAQ/Q,OAAS,GACpE,KAGP2K,EAAAA,cAAA,KACIZ,UAAU,4BACVsH,KAAK,SACLrH,KAAK,sBACLc,QAAS3C,KAAK2I,QAAO,aACT3I,KAAKkD,MAAMiG,UAAUC,mBAEhCpJ,KAAKkD,MAAMiG,UAAUC,mBAbnB,KAjeXpJ,KAAKmI,MAAQ,CACTC,iBAAkB,GAClBiB,oBAAqB,GACrBpF,cAAc,GAGfqF,oBACH,MAAMtB,EAAqC,IACrC,KAAEzK,EAAI,aAAEuH,GAAiB9E,KAAKgF,gBACpCzH,GACIA,EAAK/C,MAAM,KAAKe,SAAQ,CAACkM,EAAI1F,KACzB,MAAMuF,EAAkBxC,GAAgBA,EAAa/C,GAC/C5H,EAAM6F,KAAKqH,QAAQC,GACnBiC,EAAwB,CAC1B7Q,KAAMsH,KAAKwH,yBAAyBC,EAAGjN,MAAM,MAAMK,KAAK,MACxDqN,IAAK/N,GAET6N,EAAsBrL,KAAK4M,MAEnCvJ,KAAKgE,SAAS,CAAEoE,iBAAkBJ,IAE/BwB,qBACH,MAAMnF,EAAerE,KAAK4D,eAAiB,EAAI,EACzC6F,EAASzJ,KAAK0J,yBAAyBrF,GACzCoF,GACAzJ,KAAKgE,SAAS,CACVqF,oBAAqBI,IAI1BE,SACH,MAAM,UAAE/H,GAAc5B,KAAKkD,MAAM7H,OACjC,IAAIuO,EAAW,KACXC,EAAkB,KAClBC,EAAsB,KAC1BF,EAAW5J,KAAK4D,eAChB,MAAMS,EAAeuF,EAAW,EAAI,EACpC,GAAuB,aAAnB5J,KAAKoD,UACLyG,EAAkB7J,KAAKoE,0BAA0BC,GAC5CwF,IACDA,EAAkB7J,KAAK8H,sBAAsBzD,SAE9C,GAAuB,YAAnBrE,KAAKoD,WAEZ,GADAyG,EAAkB7J,KAAKoE,0BAA0BC,IAC5CwF,EAAiB,CAClB,MAAME,EAAgB/J,KAAKkD,MAAMG,QAAQjI,IAAIC,OAAO2O,eAC9B,aAAlBD,IACAF,EAAkB7J,KAAKqI,aAAahE,IAElB,oBAAlB0F,IACAD,EAAsB9J,KAAK8I,oBAC3Be,EAAkB7J,KAAKqI,aAAahE,IAElB,SAAlB0F,IACAD,EAAsB9J,KAAK8I,oBACC,OAAxBgB,IACAD,EAAkB7J,KAAKqI,aAAahE,WAKhDwF,EAAkB7J,KAAKoE,0BAA0BC,GAErD,MAAM4F,EAAgBzH,EAAAA,cAACO,EAAS,CAACC,UAAU,MACrCkH,EAAmBC,EAAAA,EAAA,GAClBnK,KAAKkD,OAAK,IACbkH,oBAAqB,CACjBC,YAAarK,KAAKkD,MAClBtB,UAAW0I,GAAAA,CAAW,gBAAiB1I,GACvC2I,IAAK,MACLrB,KAAM,cAEVsB,eAAgB,CACZD,IAAK,KACL3I,UAAW,sBAEf6I,mBAAoB,CAChBF,IAAK,KACL3I,UAAW,sBAEfiC,KAAM+F,EACN3F,aAAcjE,KAAKmI,MAAMlE,aACzBK,MAAOuF,EACPa,WAAYZ,EACZ9G,UAAWiH,EACXZ,oBAAqBrJ,KAAKmI,MAAMkB,oBAAsBrJ,KAAKmI,MAAMkB,oBAAsB,KACvFsB,oBAAqB3K,KAAK4K,yBAAyBvG,KAEvD,OAAOrE,KAAKkD,MAAM2H,WAAWX,GAuBzBR,yBAAyBrF,GAC7B,MAAMyG,EAAU9K,KAAKkD,MAAMG,QAAQC,QAAQnJ,IAAID,WAAWE,QACpD,KAAEyJ,GAAS7D,KAAKkD,MAAM7H,OACtB0P,EAAW/K,KAAK8H,sBAAsBzD,GAC5C,IAAI2G,EAAW,EACf,MAAMC,EAAiB,CACnB,WAAY,qBACZ,QAAS,iBACT,gBAAmB,CAAC,CAChB,QAAS,WACT,SAAYD,IACZ,KAAQ,CACJ,GAAMF,EACN,KAAQjH,MAAAA,OAAI,EAAJA,EAAMzB,aAI1B,GAAuB,aAAnBpC,KAAKoD,UACL2H,MAAAA,GAAAA,EAAUrM,KAAIwM,IACV,MAAMC,EAAgBL,EAAQM,OAAOF,EAAQhI,MAAMrB,MAC7CwJ,EAAwBrL,KAAKkE,oBAAoBiH,GACvDF,EAAeK,gBAAgB3O,KAAK,CAChC,QAAS,WACT,SAAYqO,IACZ,KAAQ,CACJ,GAAMK,EACN,KAAQH,EAAQhI,MAAMvB,eAKjC,KAAA4J,EACD,MAAMC,EAAmD,QAAnCD,EAAGvL,KAAKkD,MAAMG,QAAQC,QAAQyF,aAAK,IAAAwC,OAAA,EAAhCA,EAAkCE,EAC3DR,EAAeK,gBAAgB3O,KAAK,CAChC,QAAS,WACT,SAAYqO,IACZ,KAAQ,CACJ,GAAM,GAAGF,KAAWU,IACpB,KAAQA,GAAoBxL,KAAKwH,yBAAyBgE,MAMtE,OADgCnS,KAAKqS,UAAUT,GAG3CL,yBAAyBvG,GAC7B,MAAMyG,EAAU9K,KAAKkD,MAAMG,QAAQC,QAAQnJ,IAAID,WAAWE,QACpD,KAAEyJ,GAAS7D,KAAKkD,MAAM7H,OACtBsQ,EAAW3L,KAAKqI,aAAahE,GAC7BwF,EAAkB7J,KAAKoE,0BAA0BC,GACvD,IAAI2G,EAAW,EACf,MAAMC,EAAiB,CACnB,WAAY,qBACZ,QAAS,iBACT,gBAAmB,CAAC,CAChB,QAAS,WACT,SAAYD,IACZ,KAAQ,CACJ,GAAMF,EACN,KAAQjH,MAAAA,OAAI,EAAJA,EAAMzB,aAIH,YAAnBpC,KAAKoD,UACLuI,MAAAA,GAAAA,EAAUjN,KAAIkN,IACV,MAAMC,EAAmBD,EAAQ1I,MAAMrB,KAAKkD,SAAS+F,GAAWc,EAAQ1I,MAAMrB,KAAOiJ,EAAQM,OAAOQ,EAAQ1I,MAAMrB,MAC5GwJ,EAAwBrL,KAAKkE,oBAAoB2H,GACvDZ,EAAeK,gBAAgB3O,KAAK,CAChC,QAAS,WACT,SAAYqO,IACZ,KAAQ,CACJ,GAAMK,EACN,KAAQO,EAAQ1I,MAAMvB,WAMlCkI,MAAAA,GAAAA,EAAiBnL,KAAIoN,IACjBb,EAAeK,gBAAgB3O,KAAK,CAChC,QAAS,WACT,SAAYqO,IACZ,KAAQ,CACJ,GAAMc,EAAe5I,MAAMrB,KAC3B,KAAQiK,EAAe5I,MAAMvB,WAO7C,OADgCtI,KAAKqS,UAAUT,IA0SvD,4HCliBA,MAgHA,EAhH2D/H,IAAQ,IAAA6I,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAC/D,MAAM,KAAExI,EAAI,aAAEI,EAAY,MAAEK,EAAK,WAAEoG,EAAU,oBAAEN,EAAmB,eAAEI,EAAc,mBAAEC,EAAkB,UAAEzH,EAAS,oBAAEqG,EAAmB,oBAAEsB,GAAwBzH,EAKhK,IAAIoJ,GAA0B,EAC9B,MAAM/I,EAAmC,QAA3BwI,EAAG7I,EAAMkC,KAAKmH,qBAAa,IAAAR,GAAQ,QAARA,EAAxBA,EAA0BvG,cAAM,IAAAuG,OAAA,EAAhCA,EAAkCxI,SAC7CiI,EAA8C,QAA9BQ,EAAG9I,EAAMG,QAAQC,QAAQyF,aAAK,IAAAiD,OAAA,EAA3BA,EAA6BP,EAChDe,EAAYlI,MAAAA,GAAAA,EAAOzM,QAAUqL,EAAM7H,OAAOoR,mBAAqBnI,MAAAA,OAAK,EAALA,EAAO7J,OAJxD,EAI4E6J,EAAMzM,QAAUyM,EAC1GoI,EAAU5T,EAAAA,GAASC,WAAa6M,OAAOC,SAASvL,SAChDqS,EAAyC,QAA3BV,EAAG/I,EAAMkC,KAAKmH,qBAAa,IAAAN,GAAQ,QAARA,EAAxBA,EAA0BzG,cAAM,IAAAyG,OAAA,EAAhCA,EAAkCU,eACnDC,EAAgBD,GAAkBA,EAAe9U,OAAS,IAAsB,QAArBqU,EAAIS,EAAe,UAAE,IAAAT,OAAA,EAAjBA,EAAmBW,sBAAuB,GACzGC,EAAsBF,MAAAA,GAAwD,QAA3CT,EAAbS,EAAerU,MAAKwU,GAAoB,mBAAbA,MAAAA,OAAG,EAAHA,EAAKC,cAAwB,IAAAb,GAAO,QAAPA,EAAxDA,EAA0Dc,aAAK,IAAAd,OAAA,EAA/DA,EAAiEe,aACtFC,EAAgBC,GAAoB5K,EAAAA,UAAe,GACpD6K,EAAWC,IAA0D,IAAAC,EACvED,EAAME,iBACN,MAAMC,EAAYH,EAAMI,OAElBC,EADaF,MAAAA,GAAuB,QAAdF,EAATE,EAAWG,QAAQ,YAAI,IAAAL,OAAA,EAAvBA,EAAyBM,aAAa,QAGrD,SAAUjI,aAA0B9N,IAAhB6V,IACpBL,EAAME,iBAGNM,KAAK3P,KAAK,CACNmP,MAAO,sBACPS,eAAgB,iBAChBC,aAAc,OAAOL,IACrBM,YAAa,SAASvB,IACtBwB,qBAAsB,UAEtBpV,EAAAA,GAASC,WAAa4U,IACtB/H,OAAOC,SAAShE,KAAO8L,KAUnC,GANiB,WAAbpK,GAAgE,QAA3C6I,EAAIlJ,EAAMkC,KAAK+I,sBAAsB3I,cAAM,IAAA4G,GAAvCA,EAAyC3M,gBAClE6M,GAAiB,EACG,WAAb/I,GAAiE,QAAxC8I,EAACnJ,EAAMkC,KAAK+I,sBAAsB3I,cAAM,IAAA6G,GAAvCA,EAAyC5M,kBAC1E6M,GAAiB,IAGhBzI,IAASS,IAAUoG,EAEpB,OADAxH,EAAMG,QAAQM,UAAUyK,QAAQ,mDACzB,KAiBX,OALA5L,EAAAA,WAAgB,KACX6G,GACD+D,GAAmB,KAEpB,CAAC/D,IACApF,EAIIzB,EAAAA,cAAC6L,EAAAA,OAAM5L,OAAAC,OAAA,GAAK0H,GACP+C,IAAgC,aAAZ5J,GAAsC,WAAZA,IApBzB+K,MAC9B,GAAIjF,EAAqB,CACrB,MAAMkF,EAAgBvF,SAASwF,cAAc,UAC7CD,EAAeE,aAAa,OAAQ,uBACpCF,EAAc5M,KAAO0H,EACrB,MAAMqF,EAAO1F,SAAS0F,KACtBA,EAAKC,aAAaJ,EAAeG,EAAKE,qBAcsCN,GAC1B,YAA7CpL,EAAMG,QAAQC,QAAQnG,UAAUoG,UACjCf,EAAAA,cAACqM,EAAAA,GAAe,KAEhBrM,EAAAA,cAAA,4BAAwB,UAAUsM,KAAK,sBAAsBC,wBAAyB,CAAEC,OAAQrE,MAEhGnI,EAAAA,cAACyM,EAAAA,KAAIxM,OAAAC,OAAA,GAAK8H,GACL3G,GAAqB,WAAbN,GACLf,EAAAA,cAACyM,EAAAA,KAAIxM,OAAAC,OAAA,GAAK+H,GACL5G,EACAS,GAAStB,GAGjBa,GAAqB,WAAbN,IAA0B+I,GAC/B9J,EAAAA,cAACyM,EAAAA,KAAIxM,OAAAC,OAAA,GAAK+H,GACL5G,EACAb,EACAE,EAAMiG,UAAU+F,6BAA4B,IAA2B,KAAxBpC,EAA6BtK,EAAAA,cAAA,QAAMZ,UAAU,yBAAuB,KAAIkL,EAAmB,MAAatK,EAAAA,cAAA,QAAMZ,UAAU,yBAAuB,KAAI4J,EAAgB,OAG1Nd,GAAclI,EAAAA,cAACyM,EAAAA,KAAIxM,OAAAC,OAAA,GAAK+H,GAAqBC,GAE7C8B,GACGA,EAAU9N,KAAI,CAACP,EAAM4D,IACjBS,EAAAA,cAACA,EAAAA,SAAc,CAACgC,IAAKzC,GACjBS,EAAAA,cAACyM,EAAAA,KAAIxM,OAAAC,OAAA,GACG+H,EAAkB,CACtB7I,UAAW0I,GAAAA,CACPG,EAAmB7I,UACnBG,IAAUyK,EAAU3U,OAAS,EAAI,0BAA4B,IAEjE8K,QAAS0K,IAERlP,EACAqO,EAAUzK,EAAQ,IAAMiB,QAtC9CR,EAAAA,cAAC2M,EAAAA,EAAc,CAACvN,UAAU,oCAAoCwN,OAAO,OAAON,KAAK,8qBClC1F,MAAOO,EAeTpQ,YACIsE,EACAnD,EACAa,EACAgF,EACAV,EACA+J,EACAC,EACAC,EAEAC,EAEAC,EACAC,EACA5P,GAiCG,KAAAb,YAAc,KACjB,MAAM+B,EAAmBkJ,EAAAA,EAAA,GAClBnK,KAAKiB,oBAAoB2O,SACzBC,EAAAA,EAAAA,IAAK7P,KAAKiB,oBAAoB6O,UAGrC,OAAOC,EAAAA,EAAAA,eACH,GAAG/P,KAAKuD,YAAYvD,KAAKwP,UAAUxP,KAAKuF,UAAYvF,KAAKsP,cAActP,KAAKiG,SAASvH,KAAIwH,GAAW,GAAGA,EAAQ8J,kBAAkB9J,EAAQpI,sBAAwB,KAAKoI,EAAQ+J,uBAAyB,YAAUC,EAAAA,EAAAA,iBAAgBjP,MAAwBjB,KAAKyP,cAC9PzP,KAAKI,YAAaJ,KAAKwP,SAIxB,KAAArQ,mBAAqB,IAAM,yBAC3B,KAAAC,cAAgB,IAAiB,cA5CpCY,KAAKuD,SAAWA,EAChBvD,KAAKI,YAAcA,EACnBJ,KAAKuF,SAAWA,EAChBvF,KAAKsP,WAAaA,EAClBtP,KAAKiB,oBAAsBA,EAC3BjB,KAAKiG,SAAWA,EAChBjG,KAAKuP,kBAAoBA,EACzBvP,KAAKwP,OAASA,EAEdxP,KAAKyP,YAAcA,EAEnBzP,KAAK0P,yBAA2BA,EAChC1P,KAAK2P,qBAAuBA,EAC5B3P,KAAKD,UAAYA,MAAAA,EAAAA,EAAa,EAC1BC,KAAKiG,UAAYjG,KAAKiG,SAASpO,OAAS,IACxCmI,KAAKiG,SAAS,GAAG4G,oBAAsB,CACnC,CACIG,IAAK,oBACLC,MAAO,CACHkD,gBAAgBT,QAAyD5X,IAA7B4X,GAC5CU,eAAWtY,EACXuY,yBAAqBvY,EACrBwY,kBAAcxY,EACdyY,kBAAczY,EACd0Y,eAAW1Y,EACXoV,iBAAapV,OAiD9B,MAAM2Y,EAA4BA,CACrC9Q,EACA+Q,KAEA,MAAMnN,EACyC,aAA3C5D,EAAK3F,eAAemD,UAAUoG,UAA4B5D,EAAK3F,eAAe+O,OAASpJ,EAAK3F,eAAe+O,MAAM1D,WAC3G,WACA,SAEJpE,EAAsB0P,EAAAA,yBAAyBC,cAAcjR,GAAMkR,oBACnEC,GAAgBC,EAAAA,EAAAA,IAAuBpR,EAAK3F,gBAC5CuV,MAxIoBrP,EAwIqBP,KAtI3CO,EAAU7E,aAC6BvD,IAAvCoI,EAAU7E,OAAOkU,oBACsB,IAAvCrP,EAAU7E,OAAOkU,mBAJzB,IAA8BrP,EA0I1B,MAAM8Q,EAAWrR,EAAK3F,eAAeG,IAAID,WAAWI,SAG9CqV,EA/HV,SAA+BzP,GAA+D,IAAA+Q,EAC1F,QAAyB,QAAjBA,EAAC/Q,EAAU7E,cAAM,IAAA4V,IAAhBA,EAAkBC,oBA8HEC,CAAsBxR,GAC7CI,GAAYqR,EAAAA,EAAAA,IAAazR,EAAK3F,gBAMpC,GAJI2F,EAAK3F,eAAe+O,OAASpJ,EAAK3F,eAAe+O,MAAMsI,UACvDpQ,EAAoB6O,QAAU,CAAEwB,QAAuBjY,KAAKC,MAAMgE,mBAAmBqC,EAAK3F,eAAe+O,MAAMsI,YAGlG,aAAb9N,EACA,OAAO,IAAImN,EACPnN,EACA5D,EAAK3F,eAAeoG,YACpBa,EACA6P,IACEnR,EAAK3F,eAAemD,UAAUoU,QAAW5R,EAAK3F,eAAe+O,OAASpJ,EAAK3F,eAAe+O,MAAM1D,YAAe,QACjHvN,EACAyX,EACA5P,EAAK3F,eAAewV,OACpBwB,OAAUlZ,EAAW6X,EAAsB5P,GAE5C,GAAiB,WAAbwD,GAAyB5D,EAAK3F,eAAe+O,OAASpJ,EAAK3F,eAAe+O,MAAM0C,EACvF,OAAO,IAAIiF,EACPnN,EACA5D,EAAK3F,eAAeoG,YACpBa,EACA6P,OACAhZ,EACA6H,EAAK3F,eAAe+O,MAAM0C,EAC1B8D,EACA5P,EAAK3F,eAAewV,YAAQ1X,OAAWA,EAAW6X,EAAsB5P,GAEzE,GAAiB,WAAbwD,GAAyB5D,EAAK3F,eAAe+O,OAASpJ,EAAK3F,eAAe+O,MAAMtP,UACvF,OAAO,IAAIiX,EACPnN,EACA5D,EAAK3F,eAAeoG,YACpBa,EACA6P,OACAhZ,EACA6H,EAAK3F,eAAe+O,MAAMtP,UAC1B8V,EACA5P,EAAK3F,eAAewV,YAAQ1X,OAAWA,EAAW6X,EAAsB5P,GAIhF,MAAM,IAAIM,MAAM,4KCpMbvD,eAAe0U,EAA2BC,EAAuCxQ,EAA2CzB,GAC/H,OAAOkS,EAAAA,EAAAA,+BAA8B,CAAE1Q,cAAexB,EAAKyB,oBAAqBA,GAAuBwQ,GAAgBhR,MAAMkR,IACzH,IAAKA,EAED,OADAnS,EAAI8B,MAAM,sDACyB,GAGvC,MAAMkE,GAAUmM,GAAmB,IAAIjT,KAAKkT,GAA6DA,IAEzG,OAAKpM,EAAO3N,OAKL2N,GAJHhG,EAAI8B,MAAM,8EACyB,OCVzC,MAAOuQ,UAAkCxC,EAAAA,EAA/CpQ,kCACW,KAAAE,mBAAqB,IAAM,iBAC3B,KAAAC,cAAgB,IAEG,aAAlBY,KAAKuD,UACJvD,KAAKiG,UAAYjG,KAAKiG,SAASpO,OAAS,GACxCmI,KAAKiB,qBAAuBjB,KAAKiB,oBAAoB6O,SAAW9P,KAAKiB,oBAAoB6O,QAAQwB,SAAWtR,KAAKiB,oBAAoB6O,QAAQwB,QAAQzZ,OAAS,EAExJ,UAEA,eAuEnB,SAAe2J,EAAAA,EAAAA,IAA2B,CACtC9B,GAAI,iFACJJ,OA1DJxC,eAAsByC,EAAkCC,GACpD,IAAIsS,EACJ,GAAuB,aAAnBvS,EAAMgE,SAAyB,CAC/B,GAAIhE,EAAMgG,SACN,OAAOiM,EACH,CACIO,YAAa,CAACxS,EAAMgG,UACpByM,QAAS,CACLC,UAAW1S,EAAMa,YAAYP,UAC7BqS,UAAW3S,EAAMa,YAAYL,YAGrCR,EAAM0B,oBACNzB,GAEJ,MAAM,IAAIa,MAAM,oFAGpB,GAAId,EAAM+P,YAAe9P,EAAIxF,eAAe+O,OAASvJ,EAAIxF,eAAe+O,MAAM0C,EAC1E,OAAO+F,EACH,CACIW,gBAAiB5S,EAAM+P,WACvB0C,QAAS,CACLC,UAAW1S,EAAMa,YAAYP,UAC7BqS,UAAW3S,EAAMa,YAAYL,YAGrCR,EAAM0B,oBACNzB,GAEJ,GAAID,EAAM+P,YAAe9P,EAAIxF,eAAe+O,OAASvJ,EAAIxF,eAAe+O,MAAMtP,UAAY,CAEtF,GADAqY,EAAkBM,OAAO7S,EAAM+P,YAC3B8C,OAAOC,MAAMP,GACb,MAAM,IAAIzR,MAAM,mDAEhB,OAAOmR,EACH,CACIQ,QAAS,CACLC,UAAW1S,EAAMa,YAAYP,UAC7BqS,UAAW3S,EAAMa,YAAYL,WAEjCuS,qBAAsB,QACtBC,IAAK,CAACT,GAAmB,IAE7BvS,EAAM0B,oBACNzB,GAGR,MAAM,IAAIa,MACN,sGAUhBd,MAlEiBI,IACV8Q,EAAAA,EAAAA,GAA0B9Q,EAAMkS,wGChB3C,MAAMW,EAAwB,CAAC,gBAAiB,uBAAwB,kBAAmB,qBAAsB,wBAAyB,YAM7HzB,EAA0B/W,IACnC,MAAMyY,EAAyBC,EAAuC,WAAY1Y,GAClF,OAAKyY,GAA2BA,EAAuB5a,OAIzB4a,EAAuB/T,KAAKiU,IACtD,IACI,MAAMC,EAAqC,GAK3C,OAJAJ,EAAsBjX,SAAQ,CAACsX,EAAY9Q,KAEvC6Q,EAAcC,GAAcF,EAAkB5Q,MAE3C6Q,EACT,MAAME,GACJ,WAEL9X,OAAO+X,SAdC,IAyCFC,EAAmBA,CAACC,EAAchN,EAAkCiN,EAA+BC,SAE3Frb,IAAbmO,GACKA,EAASpO,OAGVob,EAAQG,aAAaC,IAAI,WAAYha,KAAKqS,UA1BrBzF,CAAAA,IAC7B,MAAMqN,EAA4C,GAWlD,OATArN,EAAS1K,SAAS2K,IACd,MAAMyM,EAAyC,GAC/CH,EAAsBjX,SAASsX,IAE3BF,EAAkBhW,KAAKuJ,EAAQ2M,OAEnCS,EAAmB3W,KAAKgW,MAGrBW,GAcqDC,CAAiBtN,KAFrEgN,EAAQG,aAAaI,OAAO,YAMhCP,EAAQG,aAAaI,OAAO,QACrBP,EAAQpR,WAGI/J,IAAnBob,GACIA,EAAerb,OAGfob,EAAQG,aAAaC,IAAI,UAAWha,KAAKqS,UAAUwH,IAFnDD,EAAQG,aAAaI,OAAO,WAMhCP,EAAQG,aAAaI,OAAO,QACrBP,EAAQpR,OAGfsR,GACAF,EAAQG,aAAaC,IAAI,OAAQF,EAAU1O,YAGxCwO,EAAQpR,MAQN6Q,EAAkBA,CAAIlO,EAAaxK,IACzCA,EAAe+O,OAAS/O,EAAe+O,MAAMvE,GAClCnL,KAAKC,MAAMgE,mBAAmBtD,EAAe+O,MAAMvE,KAE1D,KAOEiP,EAAiBzZ,GACvBlB,EAAAA,GAASC,UACD,IAAI2a,IAAI9N,OAAOC,SAAShE,MAG3B7H,EAAeG,IAAID,WAAW2H,KACvB,IAAI6R,IAAI1Z,EAAeG,IAAID,WAAW2H,MAEtC,IAAI6R,IAAsB1Z,EAAeG,IAAID,0LCpG1D,MAAOyZ,EAAb1U,cACuB,KAAA2U,cAA8C,KAC9C,KAAAC,qBAAqD,KACrD,KAAAlH,eAAwC,GACxC,KAAAmH,eAAqC,KACrC,KAAAC,kBAAmC,KAEnC,KAAAC,SAAmB,GACnB,KAAAzQ,SAAyB,UACzB,KAAA0Q,eAAuC,KACvC,KAAAC,cAA6C,KATpDC,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,qCACCD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,4CACCD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,sCACCD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,sCACCD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,yCACCD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,yCACCD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,gCACCD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,gCACCD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,sCACCD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,oCAMT,MAAOC,EAAbpV,cACW,KAAAC,YAAc,IAAM,gBACpB,KAAAC,mBAAqB,IAAM,gBAC3B,KAAAC,cAAgB,IAAiB,eAGrCtC,eAAewX,EAClB/U,EACAC,GAEA,OAAO,IAAImU,EAMR,MAAMY,EACTrU,GAEO,IAAImU,EAMf,GAAe7S,EAAAA,EAAAA,IAA0C,CACrDlC,OAAgCgV,EAChC/U,MAAOgV,uuBC/CX,MAAMC,EAAoBjV,IACxB,cAAeA,GACb,IAAK,YACL,IAAK,UACH,OAAO,KACT,IAAK,SACH,MAAO,GAAGA,MACZ,QACE,MAAMkV,EAAcC,WAAWnV,GACzBoV,EAAOpV,EAAM7E,MAAM,QACzB,OAAO2X,MAAMoC,GAAe,GAAKE,EAAO,GAAGF,IAAcE,IAAS,GAAGF,QAgC3E,EA5BiD/S,IAQ5C,IAAAkT,EAAAC,EAAA,IAR6C,MAChDC,EAAK,OACL1F,EAAM,OACN2F,EAAM,KACNjG,EAAO,OAAM,UACblN,EAAY,GAAE,MACdoT,EAAQ,IAETtT,EADIuT,GAAIC,EAAAA,EAAAA,GAAAxT,EAAAyT,GAEP,MACMC,EAAa,SAAUxT,EAAmB,GAAPkN,KADb,SAATA,EACgD,YAAc,MAAe,qBAATA,GAAgClN,EAAuB,GAAX,YAAiBmT,EAAS,SAAW,MAAMnT,IAE9K,OACEY,IAAAA,cAAA,OAAAC,OAAAC,OAAA,GACMuS,EAAI,CACRrT,UAAWwT,EACXJ,MAAK7K,EAAAA,EAAA,GACA6K,GAAK,IAERF,MAAO,GAA0B,QAA1BF,EAAGJ,EAAiBM,UAAM,IAAAF,EAAAA,EAAI,KAErCxF,OAAQ,GAA2B,QAA3ByF,EAAGL,EAAiBpF,UAAO,IAAAyF,EAAAA,EAAI,KACvCQ,aAAc,inBCvDtB,MAAMC,EAAU,CAAEC,QAAS,GAAIC,YAAa,IAmBlCC,EAA8BA,CAACC,EAAqBC,KAUlD,GADAL,EAAQE,YAAYE,GAAuBC,GACtCL,EAAQE,YAAYE,GAAqBE,QAC1C,MAAM,IAAIvV,MAAM,oBAAsBqV,EAAsB,mCAEhEJ,EAAQE,YAAYE,GAAqBE,QAAQC,UAAUC,eAAiBJ,EACxEJ,EAAQE,YAAYE,GAAqBE,QAAQC,UAAUnW,KAC3D4V,EAAQE,YAAYF,EAAQE,YAAYE,GAAqBE,QAAQC,UAAUnW,IAAMgW,IAMhGJ,EAAQC,QAAQ,mBAAqB,CAClCQ,EAAGA,IAAMC,EAAQ,MACjBC,MAAO,gBACPC,GAAI,CAAC,CAACC,KAAK,WAAa9b,KAAK,0EAA2E+b,MAAO,GAAG,CAACD,KAAK,oBAAsB9b,KAAK,oFAAqF+b,MAAO,GAAG,CAACD,KAAK,gBAAkB9b,KAAK,wEAAyE+b,MAAO,GAAG,CAACD,KAAK,gBAAkB9b,KAAK,uDAAwD+b,MAAO,GAAG,CAACD,KAAK,UAAY9b,KAAK,0EAA2E+b,MAAO,GAAG,CAACD,KAAK,2BAA6B9b,KAAK,mDAAoD+b,MAAO,GAAG,CAACD,KAAK,WAAa9b,KAAK,2EAA4E+b,MAAO,GAAG,CAACD,KAAK,wBAA0B9b,KAAK,qCAAsC+b,MAAO,IAEn1BC,KAAK,EACLC,GAAI,YACJC,EAAG,kBACHC,EAAG,YAEHC,IAAK,GAGLC,GAAI,+BAOAjB,EAF4B,wEACXO,EAAQ,MAQzBP,EAF4B,0EACXO,EAAQ,MAQzBP,EAF4B,oFACXO,EAAQ,MAQzBP,EAF4B,0EACXO,EAAQ,KAQzBP,EAF4B,qCACXO,EAAQ,MAQzBP,EAF4B,mDACXO,EAAQ,MAQzBP,EAF4B,2EACXO,EAAQ,MAQzBP,EAF4B,uDACXO,EAAQ,MAMjCpQ,OAAO+Q,aAAe/Q,OAAO+Q,cAAgB,GAC7C/Q,OAAO+Q,aAAapB,QAAOpL,EAAAA,EAAA,GACpBvE,OAAO+Q,aAAapB,SAAW,IAC/BD,EAAQC,SAGX3P,OAAO+Q,aAAanB,YAAWrL,EAAAA,EAAA,GAC5BvE,OAAO+Q,aAAanB,aAAe,IACnCF,EAAQE,aAEY,MAAMoB,EAAiB,GAC9BA,EAAe,+DAAiE,CACxFb,EAAGA,IAAMC,EAAQ,MACjBa,GAAI,uCAEpBjR,OAAO+Q,aAAe/Q,OAAO+Q,cAAgB,GAC7C/Q,OAAO+Q,aAAaC,eAAczM,EAAAA,EAAA,GACPvE,OAAO+Q,aAAaC,gBAAkB,IACtCA,kBCnI3B,IAAIE,EAAW,WACXC,EAAyB,EAAQ,KAKrCC,EAAOC,QAAUF,EAAuB,WAAa,WACnD,OAAOD,EAAS9W,OAEd,GAAG4H,uBCTP,IAAIsP,EAAuB,cACvBC,EAAQ,EAAQ,IAChBC,EAAc,EAAQ,KAM1BJ,EAAOC,QAAU,SAAUI,GACzB,OAAOF,GAAM,WACX,QAASC,EAAYC,MANf,cAOGA,MACHH,GAAwBE,EAAYC,GAAalB,OAASkB,qBCZpE,IAAIC,EAAa,aACbP,EAAyB,EAAQ,KAKrCC,EAAOC,QAAUF,EAAuB,aAAe,WACrD,OAAOO,EAAWtX,OAEhB,GAAG2H,wBCTP,IAAI4P,EAAO,EAAQ,IACfC,EAAgC,EAAQ,IACxCC,EAAW,EAAQ,IACnBC,EAAoB,EAAQ,IAC5BC,EAAW,EAAQ,IACnBlT,EAAW,EAAQ,IACnBmT,EAAyB,EAAQ,IACjCC,EAAY,EAAQ,IACpBC,EAAqB,EAAQ,IAC7BC,EAAa,EAAQ,IAGzBP,EAA8B,SAAS,SAAUQ,EAAOC,EAAaC,GACnE,MAAO,CAGL,SAAeC,GACb,IAAIC,EAAIR,EAAuB5X,MAC3BqY,EAAUX,EAAkBS,QAAUrgB,EAAY+f,EAAUM,EAAQH,GACxE,OAAOK,EAAUd,EAAKc,EAASF,EAAQC,GAAK,IAAIrZ,OAAOoZ,GAAQH,GAAOvT,EAAS2T,KAIjF,SAAUE,GACR,IAAIC,EAAKd,EAASzX,MACdwY,EAAI/T,EAAS6T,GACbG,EAAMP,EAAgBD,EAAaM,EAAIC,GAE3C,GAAIC,EAAIC,KAAM,OAAOD,EAAIlU,MAEzB,IAAKgU,EAAGI,OAAQ,OAAOZ,EAAWQ,EAAIC,GAEtC,IAAII,EAAcL,EAAGM,QACrBN,EAAGO,UAAY,EAIf,IAHA,IAEItT,EAFAuT,EAAI,GACJxC,EAAI,EAEgC,QAAhC/Q,EAASuS,EAAWQ,EAAIC,KAAc,CAC5C,IAAIQ,EAAWvU,EAASe,EAAO,IAC/BuT,EAAExC,GAAKyC,EACU,KAAbA,IAAiBT,EAAGO,UAAYhB,EAAmBU,EAAGb,EAASY,EAAGO,WAAYF,IAClFrC,IAEF,OAAa,IAANA,EAAU,KAAOwC,uBC1C9B,EAAQ,MACR,IAAIE,EAAI,EAAQ,IACZrR,EAAU,EAAQ,KAKtBqR,EAAE,CAAEvL,OAAQ,SAAUwL,OAAO,EAAM/C,KAAM,UAAWgD,OAAQ,GAAGvR,UAAYA,GAAW,CACpFA,QAASA,oBCTX,IAAIqR,EAAI,EAAQ,IACZtR,EAAY,EAAQ,KAKxBsR,EAAE,CAAEvL,OAAQ,SAAUwL,OAAO,EAAM/C,KAAM,YAAagD,OAAQ,GAAGC,WAAazR,GAAa,CACzFyR,SAAUzR,oBCPZ,IAAIsR,EAAI,EAAQ,IACZrR,EAAU,EAAQ,KAKtBqR,EAAE,CAAEvL,OAAQ,SAAUwL,OAAO,EAAM/C,KAAM,UAAWgD,OAAQ,GAAGE,YAAczR,GAAW,CACtFyR,UAAWzR,oBCNb,EAAQ,MACR,IAAIqR,EAAI,EAAQ,IACZtR,EAAY,EAAQ,KAKxBsR,EAAE,CAAEvL,OAAQ,SAAUwL,OAAO,EAAM/C,KAAM,YAAagD,OAAQ,GAAGxR,YAAcA,GAAa,CAC1FA,UAAWA,WCVbqP,EAAOC,QAAUzU,cCAjBwU,EAAOC,QAAUqC","sources":["webpack://mattressfirm/./src/Utilities/emtpyChecker.ts?e2f5","webpack://mattressfirm/./src/Utilities/get-product-brand.tsx?2b65","webpack://mattressfirm/./src/Utilities/plp-url-utils.ts?728b","webpack://mattressfirm/./src/actions/srp-breadcrumb-page.action.ts?4397","webpack://mattressfirm/./src/data-actions/get-attributes-for-selected-variant.ts?4859","webpack://mattressfirm/./src/modules/mfrm-breadcrumb/components/link.tsx?b62c","webpack://mattressfirm/./src/modules/mfrm-breadcrumb/components/separator.tsx?9fd2","webpack://mattressfirm/./src/modules/mfrm-breadcrumb/mfrm-breadcrumb.tsx?3d25","webpack://mattressfirm/./src/modules/mfrm-breadcrumb/mfrm-breadcrumb.view.tsx?73ef","webpack://mattressfirm/./src/modules/mfrm-search-result-container/actions/base-collection-action.ts?d7f5","webpack://mattressfirm/./src/modules/mfrm-search-result-container/actions/get-product-refiner-hierarchy.ts?fe25","webpack://mattressfirm/./src/modules/mfrm-search-result-container/actions/get-refiners-for-collection.ts?0b98","webpack://mattressfirm/./src/modules/mfrm-search-result-container/actions/url-utils.ts?05d8","webpack://mattressfirm/./src/modules/mfrm-search-result-container/list-page-state.ts?a8cb","webpack://mattressfirm/./src/themes/mattressfirm/custom-components/CustomSkeleton/index.tsx?ef9d","webpack://mattressfirm/./lib/mfrm-breadcrumb/module-registration.js?3b9a","webpack://mattressfirm/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/internals/string-trim-end.js?ae01","webpack://mattressfirm/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/internals/string-trim-forced.js?a8ca","webpack://mattressfirm/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/internals/string-trim-start.js?bcbc","webpack://mattressfirm/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/es.string.match.js?a69e","webpack://mattressfirm/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/es.string.trim-end.js?340d","webpack://mattressfirm/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/es.string.trim-left.js?eab2","webpack://mattressfirm/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/es.string.trim-right.js?3d8f","webpack://mattressfirm/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/es.string.trim-start.js?1f35","webpack://mattressfirm/external var \"React\"?0d3b","webpack://mattressfirm/external var \"ReactDOM\"?853b"],"sourcesContent":["// tslint:disable\r\nexport const hasArray = (values: any): any[] | undefined => {\r\n return (typeof values !== 'string') && values && values.length ? values : undefined;\r\n};","import { IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { AttributeValue } from '@msdyn365-commerce/retail-proxy';\r\nimport React from 'react';\r\nimport { IBrandListData } from '../modules/mfrm-buybox/mfrm-buybox.view';\r\nimport { IProductBonusWithBrandName } from '../modules/mfrm-cart/mfrm-cart';\r\nimport {hasArray} from './emtpyChecker';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\n\r\nconst fallBackBrandAttribute = 'VENDOR BRAND';\r\n\r\n// tslint:disable-next-line: cyclomatic-complexity\r\nexport const parseBrandData = (\r\n attributes: AttributeValue[] | undefined,\r\n backendAttribute: string,\r\n gridSettings: IGridSettings,\r\n renderBrandNameOnly: Boolean = false,\r\n brandList: IBrandListData[],\r\n imageSettings?: IImageSettings\r\n): JSX.Element | undefined => {\r\n const attribute = backendAttribute || fallBackBrandAttribute;\r\n const productBrandName =\r\n attributes &&\r\n attributes.find(currAttribute => currAttribute.Name && currAttribute.Name.toLowerCase().trim() === attribute.toLowerCase().trim())\r\n ?.TextValue;\r\n\r\n if (renderBrandNameOnly) {\r\n return {productBrandName};\r\n }\r\n\r\n const selectedBrand =\r\n (brandList &&\r\n productBrandName &&\r\n brandList.find(\r\n (brand: IBrandListData) => brand && brand.brandName.toLowerCase().trim() === productBrandName.toLowerCase().trim()\r\n )) ||\r\n undefined;\r\n\r\n if (!selectedBrand) {\r\n return undefined;\r\n }\r\n\r\n const copySelectedBrand: IBrandListData = selectedBrand;\r\n // set alt text to brand name if no alt text is configured\r\n if (copySelectedBrand && _useDefaultAltText(copySelectedBrand) && copySelectedBrand.brandLogo) {\r\n copySelectedBrand.brandLogo.altText = productBrandName;\r\n }\r\n\r\n // set height to configured value or the default\r\n const height = copySelectedBrand && copySelectedBrand.logoHeight !== undefined ? copySelectedBrand.logoHeight : 22;\r\n const brandImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=0&h=25&m=6`, w: 0, h: 25 },\r\n lg: { q: `w=0&h=25&m=6`, w: 0, h: 25 },\r\n xl: { q: `w=0&h=25&m=6`, w: 0, h: 25 }\r\n },\r\n lazyload: false\r\n };\r\n\r\n const brandLogo = copySelectedBrand && copySelectedBrand.brandLogo && (\r\n \r\n );\r\n // place logo inside a link if configured to\r\n const brandLink =\r\n copySelectedBrand &&\r\n copySelectedBrand.brandLink &&\r\n copySelectedBrand.brandLink.linkUrl &&\r\n copySelectedBrand.brandLink.linkUrl.destinationUrl &&\r\n copySelectedBrand.brandLink;\r\n const linkElement = brandLink && (\r\n \r\n {brandLogo}\r\n \r\n );\r\n\r\n return linkElement || brandLogo;\r\n};\r\n// get only brandName\r\nexport const parseBrandName = (attributes: AttributeValue[] | undefined, backendAttribute: string, recordId?: number): string | undefined => {\r\n const attribute = backendAttribute || fallBackBrandAttribute;\r\n let productBrandName = hasArray(attributes)?.find((currAttribute: AttributeValue) => currAttribute?.Name?.toLowerCase().trim() === attribute?.toLowerCase().trim())?.TextValue;\r\n if (!productBrandName && MsDyn365.isBrowser) {\r\n const getLocalStorage = localStorage.getItem('bonusItmesWithBrand');\r\n let bonusItemArray: IProductBonusWithBrandName[] = [];\r\n if (getLocalStorage) {\r\n bonusItemArray = JSON.parse(getLocalStorage);\r\n }\r\n const checkBrandName = bonusItemArray.find(item => item.productId === recordId)?.brandName;\r\n if(checkBrandName) {\r\n productBrandName = checkBrandName;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n return productBrandName;\r\n};\r\n\r\nexport const parseBrandNameUnbxd = (attributes: any | undefined, backendAttribute: string, recordId?: number): string | undefined => {\r\n const attribute = backendAttribute || fallBackBrandAttribute;\r\n // let productBrandName = hasArray(attributes)?.find((currAttribute: AttributeValue) => currAttribute?.Name?.toLowerCase().trim() === attribute?.toLowerCase().trim())?.TextValue;\r\n let productBrandName = attributes && attributes[attribute];\r\n if (!productBrandName && MsDyn365.isBrowser) {\r\n const getLocalStorage = localStorage.getItem('bonusItmesWithBrand');\r\n let bonusItemArray: IProductBonusWithBrandName[] = [];\r\n if (getLocalStorage) {\r\n bonusItemArray = JSON.parse(getLocalStorage);\r\n }\r\n const checkBrandName = bonusItemArray.find(item => item.productId === recordId)?.brandName;\r\n if(checkBrandName) {\r\n productBrandName = checkBrandName;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n return productBrandName;\r\n};\r\n\r\n// get only brandName\r\nexport const getBrandNameCheck = (attributes: AttributeValue[] | undefined, backendAttribute: string): string | undefined => {\r\n const productBrandName =\r\n attributes &&\r\n attributes.find(\r\n currAttribute => currAttribute.Name && currAttribute.Name.toLowerCase().trim() === backendAttribute.toLowerCase().trim()\r\n )?.TextValue;\r\n if (!productBrandName) {\r\n return undefined;\r\n }\r\n return productBrandName;\r\n};\r\n\r\n// get the appropriate image alt text\r\nconst _useDefaultAltText = (selectedBrand: IBrandListData): boolean => {\r\n const configuredAltText = selectedBrand.brandLogo?.altText;\r\n return !(configuredAltText && configuredAltText.trim() && configuredAltText !== 'No Data Available');\r\n};\r\n","import { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IRequestContext } from '@msdyn365-commerce/core';\r\nimport { ProductRefinerValue } from '@msdyn365-commerce/retail-proxy';\r\nexport interface IVirtualRefinersConfig {\r\n order: number;\r\n refinerName: string;\r\n enableForMattresses: boolean;\r\n enableForOtherCategories: boolean;\r\n allowDuplicate: boolean;\r\n}\r\n\r\n/**\r\n * This will create the canonicalURL as per 7924 requirement\r\n * @param requestContext\r\n * @returns string of canonical URL\r\n */\r\nexport const canonicalURL = (requestContext: IRequestContext): string => {\r\n const requestUrl = requestContext.url.requestUrl;\r\n const origin = requestUrl.origin;\r\n const path = requestUrl.pathname.toLowerCase();\r\n\r\n // separate out url parts split on forward / and remove first empty index\r\n let urlParts = path?.split('/').splice(1);\r\n\r\n // remove double values containing pipe sign\r\n if (path.match(/%7c/)) {\r\n urlParts = removePipeSignValue(urlParts);\r\n }\r\n\r\n // remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n const filteredPath = urlParts?.join('/');\r\n\r\n return `${origin}/${filteredPath}`;\r\n};\r\n\r\nexport const filteredURL = (requestContext: IRequestContext): string => {\r\n const requestUrl = requestContext.url.requestUrl;\r\n const path = requestUrl.pathname.toLowerCase();\r\n\r\n // separate out url parts split on forward / and remove first empty index\r\n let urlParts = path?.split('/').splice(1);\r\n\r\n // remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n const filteredPath = urlParts?.join('/');\r\n\r\n return `/${filteredPath}`;\r\n};\r\n\r\n/**\r\n * This will create the canonicalURL as per 7924 requirement\r\n * @param requestContext\r\n * @returns string of canonical URL\r\n */\r\nexport const canonicalURLWithoutBaseUrl = (requestContext: IRequestContext): string => {\r\n const requestUrl = requestContext.url.requestUrl;\r\n const path = requestUrl.pathname.toLowerCase();\r\n\r\n // separate out url parts split on forward / and remove first empty index\r\n let urlParts = path?.split('\\/').splice(1);\r\n\r\n // remove double values containing pipe sign\r\n if (path.match(/%7c/)) {\r\n urlParts = removePipeSignValue(urlParts);\r\n }\r\n\r\n // remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n return urlParts?.join('\\/');\r\n};\r\n\r\n/**\r\n * This will remove the Pipe sign value set from urlParts\r\n * @param urlParts\r\n * @returns\r\n */\r\nexport const removePipeSignValue = (urlParts: string[]) => {\r\n // urlParts.forEach((part, index) => {\r\n // const indexOfValue = urlParts.indexOf('%7c');\r\n // if (indexOfValue !== -1) {\r\n // urlParts.splice(indexOfValue, 1);\r\n // }\r\n // });\r\n\r\n if (urlParts !== undefined && urlParts.length > 0) {\r\n urlParts = urlParts.filter(urlPart => urlPart.indexOf('%7c') === -1);\r\n }\r\n\r\n return urlParts;\r\n};\r\n\r\n/**\r\n * This will remove the keywords from urlParts array which were received from\r\n * the app.settings.json/CMS Extensions\r\n * @param urlParts\r\n * @param requestContext\r\n * @returns urlParts array filtered\r\n */\r\nexport const removeKeywords = (urlParts: string[], requestContext: IRequestContext): string[] => {\r\n const removeKeywordFromUrl = requestContext.app.config.removeKeywordFromUrl;\r\n\r\n if (urlParts.length > 0 && removeKeywordFromUrl && removeKeywordFromUrl.length > 0) {\r\n const removeKeywordFromUrlArray: string[] = removeKeywordFromUrl?.trim().split(',');\r\n removeKeywordFromUrlArray?.length > 0 &&\r\n urlParts.forEach(_part => {\r\n removeKeywordFromUrlArray.forEach(removeKeyword => {\r\n const trimmedKeyword = removeKeyword.trim().toLowerCase();\r\n const indexOfValue = urlParts.indexOf(trimmedKeyword);\r\n if (trimmedKeyword.length > 0 && indexOfValue !== -1) {\r\n urlParts.splice(indexOfValue, 1);\r\n }\r\n });\r\n });\r\n }\r\n\r\n return urlParts;\r\n};\r\n\r\n/**\r\n * This will sort the Virtual refiner config based on order and return\r\n * only active virtual refiner configs based on isMattress category will\r\n * be returned\r\n * @param requestContext\r\n * @param isMattressesCategory boolean | undefined\r\n * @returns IVirtualRefinersConfig[] | undefined\r\n */\r\nexport const getSortedVirtualRefinerConfig = (\r\n requestContext: IRequestContext,\r\n isMattressesCategory: boolean | undefined\r\n): IVirtualRefinersConfig[] | undefined => {\r\n let appConfigSorted = getVirtualRefinerConfig(requestContext);\r\n\r\n // sort the config by provided config\r\n if (appConfigSorted) {\r\n if (isMattressesCategory === true) {\r\n appConfigSorted = appConfigSorted.filter(appConfig => {\r\n return appConfig.enableForMattresses;\r\n });\r\n } else if (isMattressesCategory === false) {\r\n appConfigSorted = appConfigSorted.filter(appConfig => {\r\n return appConfig.enableForOtherCategories;\r\n });\r\n }\r\n appConfigSorted.sort((a: IVirtualRefinersConfig, b: IVirtualRefinersConfig) => {\r\n return a.order - b.order;\r\n });\r\n }\r\n\r\n return appConfigSorted;\r\n};\r\n\r\n/**\r\n * Virtual refiner names from the app.settings.json will be returned which can be used\r\n * to filter out refiners data based upon active virtual refiners\r\n * @param requestContext\r\n * @param isMattressesCategory boolean | undefined\r\n * @returns string[]\r\n */\r\nexport const getVirtualRefinerNames = (requestContext: IRequestContext, isMattressesCategory: boolean | undefined): string[] => {\r\n const sortedVirtualRefinerConfig = getSortedVirtualRefinerConfig(requestContext, isMattressesCategory);\r\n\r\n const appConfigRefinerNames: string[] = [];\r\n\r\n sortedVirtualRefinerConfig &&\r\n sortedVirtualRefinerConfig.forEach(sortedConfig => {\r\n appConfigRefinerNames.push(sortedConfig.refinerName.trim().toLowerCase());\r\n });\r\n\r\n return appConfigRefinerNames;\r\n};\r\n\r\n/**\r\n * This will return the value of virtual refiner configuration\r\n * @param requestContext\r\n * @returns IVirtualRefinersConfig[] | undefined\r\n */\r\nexport const getVirtualRefinerConfig = (requestContext: IRequestContext): IVirtualRefinersConfig[] => {\r\n return requestContext.app.config.urlModifications;\r\n};\r\n\r\nexport async function getVirtualRefinerValues(\r\n requestContext: IRequestContext,\r\n virtualRefiners: IProductRefinerHierarchy[]\r\n): Promise {\r\n const virtualRefinerValues: ProductRefinerValue[] = [];\r\n if (virtualRefiners.length === 0) {\r\n return virtualRefinerValues;\r\n }\r\n const requestUrl = requestContext.url.requestUrl;\r\n // const origin = requestUrl.origin;\r\n const path = requestUrl.pathname;\r\n\r\n // separate out url parts split on forward / and remove first empty index\r\n let urlParts = path?.split('/').splice(1);\r\n\r\n // remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n // remove category id {categoryid}.c\r\n const categoryIdToken = requestContext.urlTokens.recordId;\r\n const categoryId = categoryIdToken ? `${categoryIdToken}.c` : undefined;\r\n\r\n if (categoryId) {\r\n urlParts.splice(-1);\r\n }\r\n\r\n // run loop for each url part and get values from refiners for further usage\r\n const finalizedUrlParts: string[] = [];\r\n urlParts.forEach(plainUrlPart => {\r\n const urlPart = decodeURIComponent(plainUrlPart);\r\n if (urlPart.indexOf('|') !== -1) {\r\n const splitOnPipeSign = urlPart?.split('|');\r\n const filteredParts = splitOnPipeSign.filter(part => part.length > 0);\r\n filteredParts.forEach(filteredPart => {\r\n finalizedUrlParts.push(filteredPart.toLowerCase().trim());\r\n });\r\n }\r\n finalizedUrlParts.push(urlPart);\r\n });\r\n finalizedUrlParts.forEach((urlPart) => {\r\n virtualRefiners.forEach((mainRefiner) => {\r\n mainRefiner.Values.forEach((refinerValue) => {\r\n const refinerValueKeyName = refinerValue.LeftValueBoundString?.toLowerCase().trim().split(' ')?.join('-')?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-');\r\n if (refinerValueKeyName && refinerValueKeyName === urlPart) {\r\n virtualRefinerValues.push(refinerValue);\r\n }\r\n });\r\n });\r\n });\r\n\r\n return virtualRefinerValues;\r\n}\r\n\r\n/**\r\n * For navigation menu links, it will remove keywords configured in global configurations from the navigation link\r\n * and clp link and return url path string\r\n * @param link\r\n * @param requestContext\r\n * @returns string\r\n */\r\nexport const navLinkKeywordRemoval = (link: string, requestContext: IRequestContext): string => {\r\n // Using the rest operator in case there is a weirdly formatted URL with multiple question marks.\r\n const [linkBase, ...linkParams] = link?.split('?');\r\n\r\n // Only apply to category links and product links, which end in .c or .p. Check that a keyword is configured.\r\n if (!linkBase.endsWith('.c') && !linkBase.endsWith('.p') || !requestContext.app.config) {\r\n return link;\r\n }\r\n\r\n // Separate out url parts split on forward /\r\n let urlParts = linkBase?.split('\\/');\r\n\r\n // Remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n // Glue the URL params back together\r\n const linkParam = linkParams.map(param => `?${param}`)?.join('');\r\n\r\n // Rebuild URL by joining with forward slash and appending any URL parameters\r\n const filteredLink = `${urlParts?.join('/')}${linkParam}`;\r\n return `${filteredLink}`;\r\n};\r\nexport const regExSpecialChars = (includeConfigList: string): RegExp => {\r\n let includeConfig = '';\r\n if (includeConfigList !== undefined && includeConfigList !== '') {\r\n includeConfig = includeConfigList?.trim().split(',')?.join('\\\\\\\\');\r\n includeConfig = includeConfig && includeConfig !== '' ? `\\\\\\\\${includeConfig}` : '';\r\n const pattern = `[^\\\\w\\\\&\\\\|${includeConfig}]`;\r\n // eslint-disable-next-line security/detect-non-literal-regexp\r\n return new RegExp(pattern, 'gi');\r\n } else {\r\n\r\n const pattern = `[^\\\\w\\\\&\\\\|]`;\r\n // eslint-disable-next-line security/detect-non-literal-regexp\r\n return new RegExp(pattern, 'gi');\r\n }\r\n};\r\n","import * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport interface ISRPBreadcrumbState {\r\n breadcrumbCheck: boolean;\r\n}\r\n\r\n/**\r\n * SrpBreadcrumbPage Input Action\r\n */\r\nexport class SrpBreadcrumbPageInput implements Msdyn365.IActionInput {\r\n // Construct the input needed to run the action\r\n // Determine if the results of this get action should cache the results and if so provide\r\n // a cache object type and an appropriate cache key\r\n public getCacheKey = () => `BreadcrumbSrp`;\r\n public getCacheObjectType = () => 'BreadcrumbSrp';\r\n public dataCacheType = (): Msdyn365.CacheType => 'application';\r\n}\r\n\r\n// Create a data model here or import one to capture the response of the action\r\nexport interface ISrpBreadcrumbPageData {\r\n text: string;\r\n}\r\n\r\n/**\r\n * Use this function to create the input required to make the action call\r\n */\r\nconst createInput = (args: Msdyn365.ICreateActionContext): Msdyn365.IActionInput => {\r\n return new SrpBreadcrumbPageInput();\r\n};\r\n\r\n/**\r\n * Use this function to call your action and process the results as needed\r\n */\r\nasync function action(input: SrpBreadcrumbPageInput, ctx: Msdyn365.IActionContext): Promise {\r\n // const apiSettings = Msdyn365.msdyn365Commerce.apiSettings;\r\n\r\n // Uncomment the below line to get the value from a service\r\n // const response = await Msdyn365.sendRequest('/get/example/id/1', 'get');\r\n return { breadcrumbCheck: false };\r\n}\r\n\r\nexport default Msdyn365.createObservableDataAction({\r\n action: >action,\r\n // Give your data action a unique id\r\n id: 'SrpBreadcrumbPage',\r\n input: createInput\r\n // Uncomment the below line if this is a meant to be a batched data action\r\n // isBatched: true\r\n});\r\n","import {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport { AttributeValue, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { getSelectedProductIdFromActionInput, getSelectedVariant, SelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getAttributeValuesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\n\r\n/**\r\n * Chains getting the SelectedVariant with GetActivePrice\r\n */\r\nexport class AttributesForSelectedVariantInput implements IActionInput {\r\n public productId: number;\r\n public channelId: number;\r\n public catalogId: number;\r\n public selectedProduct: SimpleProduct | undefined;\r\n\r\n constructor(productId: number, channelId: number, selectedProduct?: SimpleProduct, catalogId?: number) {\r\n this.productId = productId;\r\n this.channelId = channelId;\r\n this.selectedProduct = selectedProduct;\r\n this.catalogId = catalogId || 0;\r\n }\r\n\r\n public getCacheKey = () => `AttributesForSelectedVariant`;\r\n public getCacheObjectType = () => 'ProductAttributeValue';\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\nexport const createAttributesForSelectedVariantInput = (\r\n inputData: ICreateActionContext>\r\n): AttributesForSelectedVariantInput => {\r\n const productId = getSelectedProductIdFromActionInput(inputData);\r\n if (productId) {\r\n return new AttributesForSelectedVariantInput(+productId, +inputData.requestContext.apiSettings.channelId);\r\n } else {\r\n throw new Error('Unable to create PriceForSelectedVariantInput, no productId found on module config or query');\r\n }\r\n};\r\n\r\n/**\r\n * Calls the Retail API a get a list of dimension values for a given product.\r\n */\r\nexport async function getAttributesForSelectedVariantAction(\r\n input: AttributesForSelectedVariantInput,\r\n ctx: IActionContext\r\n): Promise {\r\n // @ts-ignore: Promise vs. ObservablePromise typing conflict\r\n return Promise.resolve()\r\n .then(() => {\r\n const activeProduct: SimpleProduct | undefined = input.selectedProduct;\r\n\r\n if (!activeProduct) {\r\n const selectedVariantInput = new SelectedVariantInput(input.productId, input.channelId);\r\n\r\n return getSelectedVariant(selectedVariantInput, ctx);\r\n }\r\n\r\n return activeProduct;\r\n })\r\n .then((productResult: SimpleProduct | null) => {\r\n const activeProduct: SimpleProduct | undefined = productResult;\r\n\r\n if (activeProduct) {\r\n return getAttributeValuesAsync(\r\n { callerContext: ctx, queryResultSettings: {} },\r\n activeProduct.RecordId,\r\n input.channelId,\r\n input.catalogId\r\n );\r\n }\r\n\r\n return null;\r\n })\r\n .then((attributeValues: AttributeValue[] | null) => {\r\n const resultArray = attributeValues;\r\n if (resultArray) {\r\n return resultArray;\r\n }\r\n\r\n return [];\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace(error.message);\r\n throw new Error(`[getPriceForSelectedVariantAction]Error executing action ${error.message}`);\r\n });\r\n}\r\n\r\nexport default createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/product-info/get-attributes-for-selected-variant',\r\n action: >getAttributesForSelectedVariantAction,\r\n input: createAttributesForSelectedVariantInput\r\n});\r\n","/* eslint-disable no-duplicate-imports */\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\ninterface ILink {\r\n className?: string;\r\n text?: string;\r\n href?: string;\r\n ariaLabel?: string;\r\n index: string;\r\n noclick?: boolean;\r\n telemetryContent: ITelemetryContent;\r\n}\r\n\r\nexport const Link: React.FC = ({ text, className, href, ariaLabel, index, noclick, telemetryContent }) => {\r\n const payLoad = getPayloadObject('click', telemetryContent, '', '');\r\n\r\n const linkText = text !== undefined ? text : '';\r\n payLoad.contentAction.etext = linkText;\r\n // Construct telemetry attribute to render\r\n const attribute = getTelemetryAttributes(telemetryContent, payLoad);\r\n\r\n return (\r\n \r\n {linkText}\r\n \r\n \r\n );\r\n};\r\n","/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\ninterface ISeparator {\r\n separator: string;\r\n}\r\n\r\nexport const Separator: React.FC = ({ separator }) => ;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, NodeTag } from '@msdyn365-commerce-modules/utilities';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport { ICategoryUrl } from '@msdyn365-commerce/core-internal/dist/types/interfaces/ICategoryPathInterfaces';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { getVirtualRefinerNames, navLinkKeywordRemoval, regExSpecialChars, removeKeywords } from '../../Utilities/plp-url-utils';\r\nimport { Link } from './components/link';\r\nimport { Separator } from './components/separator';\r\nimport { IMfrmBreadcrumbData } from './mfrm-breadcrumb.data';\r\nimport { ILinksData, IMfrmBreadcrumbProps } from './mfrm-breadcrumb.props.autogenerated';\r\nimport { parseBrandName } from '../../Utilities/get-product-brand';\r\n\r\nexport interface IBreadcrumbViewProps extends IMfrmBreadcrumbProps {\r\n root?: React.ReactNode;\r\n isLoadedRoot?: boolean;\r\n links?: React.ReactNode[];\r\n backButton?: React.ReactNode;\r\n separator?: React.ReactNode;\r\n BreadcrumbContainer: IModuleProps;\r\n BreadcrumbList: INodeProps;\r\n BreadcrumbListItem: INodeProps;\r\n plpBreadcrumbSchema: string;\r\n pdpBreadcrumbSchema: string;\r\n}\r\ninterface ICategory {\r\n Name: string;\r\n Url: string;\r\n}\r\ninterface IConcatRefiners {\r\n concatRefinerCat: ICategory[];\r\n}\r\ninterface IUrlParts {\r\n realUrlParts: string[];\r\n refinerParts: string[];\r\n}\r\ninterface IBreadcrumbSchemaState {\r\n plpBreadcrumbSchema: string;\r\n}\r\ninterface IRootState {\r\n isLoadedRoot: boolean;\r\n}\r\n/**\r\n *\r\n * Breadcrumb component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass Breadcrumb extends React.PureComponent, IConcatRefiners & IBreadcrumbSchemaState & IRootState> {\r\n private _pageType: string | undefined = this.props.context.request.urlTokens.pageType;\r\n private telemetryContent: ITelemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n constructor(props: IMfrmBreadcrumbProps) {\r\n super(props);\r\n this.state = {\r\n concatRefinerCat: [],\r\n plpBreadcrumbSchema: '',\r\n isLoadedRoot: false\r\n };\r\n }\r\n public componentDidMount(): void {\r\n const categoryHierarchyTemp: ICategory[] = [];\r\n const { part, realUrlParts } = this._getUrlString();\r\n part &&\r\n part.split('/').forEach((st, index) => {\r\n const originalUrlPart = realUrlParts && realUrlParts[index];\r\n const url = this._getUrl(originalUrlPart);\r\n const refinerCat: ICategory = {\r\n Name: this._trimSpacesAndCapitalize(st.split('$$').join('/')),\r\n Url: url\r\n };\r\n categoryHierarchyTemp.push(refinerCat);\r\n });\r\n this.setState({ concatRefinerCat: categoryHierarchyTemp });\r\n }\r\n public componentDidUpdate(): void {\r\n const itemPosition = this._getRootLink() ? 1 : 0;\r\n const schema = this._makePlpBreadcrumbSchema(itemPosition);\r\n if (schema) {\r\n this.setState({\r\n plpBreadcrumbSchema: schema\r\n });\r\n }\r\n }\r\n public render(): JSX.Element | null {\r\n const { className } = this.props.config;\r\n let rootLink = null;\r\n let breadcrumbLinks = null;\r\n let backButtonComponent = null;\r\n rootLink = this._getRootLink();\r\n const itemPosition = rootLink ? 1 : 0;\r\n if (this._pageType === 'Category') {\r\n breadcrumbLinks = this._getCustomBreadcrumbLinks(itemPosition);\r\n if (!breadcrumbLinks) {\r\n breadcrumbLinks = this._getCategoryHierarchy(itemPosition);\r\n }\r\n } else if (this._pageType === 'Product') {\r\n breadcrumbLinks = this._getCustomBreadcrumbLinks(itemPosition);\r\n if (!breadcrumbLinks) {\r\n const breaCrumbType = this.props.context.app.config.breadcrumbType;\r\n if (breaCrumbType === 'category') {\r\n breadcrumbLinks = this._getPDPLinks(itemPosition);\r\n }\r\n if (breaCrumbType === 'categoryAndBack') {\r\n backButtonComponent = this._getPDPBackButton();\r\n breadcrumbLinks = this._getPDPLinks(itemPosition);\r\n }\r\n if (breaCrumbType === 'back') {\r\n backButtonComponent = this._getPDPBackButton();\r\n if (backButtonComponent === null) {\r\n breadcrumbLinks = this._getPDPLinks(itemPosition);\r\n }\r\n }\r\n }\r\n } else {\r\n breadcrumbLinks = this._getCustomBreadcrumbLinks(itemPosition);\r\n }\r\n const linkSeparator = ;\r\n const breadcrumbViewProps = {\r\n ...this.props,\r\n BreadcrumbContainer: {\r\n moduleProps: this.props,\r\n className: classnames('ms-breadcrumb', className),\r\n tag: 'nav',\r\n role: 'navigation'\r\n },\r\n BreadcrumbList: {\r\n tag: 'ol' as NodeTag,\r\n className: 'ms-breadcrumb_list'\r\n },\r\n BreadcrumbListItem: {\r\n tag: 'li',\r\n className: 'ms-breadcrumb_item'\r\n },\r\n root: rootLink,\r\n isLoadedRoot: this.state.isLoadedRoot,\r\n links: breadcrumbLinks,\r\n backButton: backButtonComponent,\r\n separator: linkSeparator,\r\n plpBreadcrumbSchema: this.state.plpBreadcrumbSchema ? this.state.plpBreadcrumbSchema : null,\r\n pdpBreadcrumbSchema: this._makePdpBreadcrumbSchema(itemPosition)\r\n };\r\n return this.props.renderView(breadcrumbViewProps) as React.ReactElement;\r\n }\r\n private _getRootLink = (): JSX.Element | null => {\r\n const { root } = this.props.config;\r\n if (!root || !root.linkUrl || !root.linkUrl.destinationUrl) {\r\n this.props.context.telemetry.error('BreadCrumb link url content is empty, link wont render');\r\n return null;\r\n }\r\n this.setState({\r\n isLoadedRoot: true\r\n });\r\n return (\r\n \r\n );\r\n };\r\n\r\n private _makePlpBreadcrumbSchema(itemPosition: number): string | null {\r\n const homeUrl = this.props.context.request.url.requestUrl.origin;\r\n const { root } = this.props.config;\r\n const plpLinks = this._getCategoryHierarchy(itemPosition);\r\n let position = 1;\r\n const breadcrumbData = {\r\n \"@context\": \"https://schema.org\",\r\n \"@type\": \"BreadcrumbList\",\r\n \"itemListElement\": [{\r\n \"@type\": \"ListItem\",\r\n \"position\": position++,\r\n \"item\": {\r\n \"id\": homeUrl,\r\n \"name\": root?.linkText\r\n }\r\n }]\r\n };\r\n if (this._pageType === 'Category') {\r\n plpLinks?.map(plpLink => {\r\n const breadcrumbUrl = homeUrl.concat(plpLink.props.href);\r\n const modifiedBreadcrumbUrl = this.modifyBreadcrumbUrl(breadcrumbUrl);\r\n breadcrumbData.itemListElement.push({\r\n \"@type\": \"ListItem\",\r\n \"position\": position++,\r\n \"item\": {\r\n \"id\": modifiedBreadcrumbUrl,\r\n \"name\": plpLink.props.text\r\n }\r\n });\r\n });\r\n }\r\n else {\r\n const searchQueryValue = this.props.context.request.query?.q;\r\n breadcrumbData.itemListElement.push({\r\n \"@type\": \"ListItem\",\r\n \"position\": position++,\r\n \"item\": {\r\n \"id\": `${homeUrl}/${searchQueryValue}`,\r\n \"name\": searchQueryValue && this._trimSpacesAndCapitalize(searchQueryValue)\r\n }\r\n });\r\n }\r\n // Construct the JSON-LD data that contains the product metadata information used by search enginge crawlers\r\n const plpBreadcrumbSchemaData = JSON.stringify(breadcrumbData);\r\n return plpBreadcrumbSchemaData;\r\n }\r\n private _makePdpBreadcrumbSchema(itemPosition: number): string | null {\r\n const homeUrl = this.props.context.request.url.requestUrl.origin;\r\n const { root } = this.props.config;\r\n const pdpLinks = this._getPDPLinks(itemPosition);\r\n const breadcrumbLinks = this._getCustomBreadcrumbLinks(itemPosition);\r\n let position = 1;\r\n const breadcrumbData = {\r\n \"@context\": \"https://schema.org\",\r\n \"@type\": \"BreadcrumbList\",\r\n \"itemListElement\": [{\r\n \"@type\": \"ListItem\",\r\n \"position\": position++,\r\n \"item\": {\r\n \"id\": homeUrl,\r\n \"name\": root?.linkText\r\n }\r\n }]\r\n };\r\n if (this._pageType === 'Product') {\r\n pdpLinks?.map(pdpLink => {\r\n const pdpBreadcrumbUrl = pdpLink.props.href.includes(homeUrl) ? pdpLink.props.href : homeUrl.concat(pdpLink.props.href);\r\n const modifiedBreadcrumbUrl = this.modifyBreadcrumbUrl(pdpBreadcrumbUrl);\r\n breadcrumbData.itemListElement.push({\r\n \"@type\": \"ListItem\",\r\n \"position\": position++,\r\n \"item\": {\r\n \"id\": modifiedBreadcrumbUrl,\r\n \"name\": pdpLink.props.text\r\n }\r\n });\r\n });\r\n }\r\n else {\r\n breadcrumbLinks?.map(breadcrumbLink => {\r\n breadcrumbData.itemListElement.push({\r\n \"@type\": \"ListItem\",\r\n \"position\": position++,\r\n \"item\": {\r\n \"id\": breadcrumbLink.props.href,\r\n \"name\": breadcrumbLink.props.text\r\n }\r\n });\r\n });\r\n }\r\n // Construct the JSON-LD data that contains the product metadata information used by search enginge crawlers\r\n const pdpBreadcrumbSchemaData = JSON.stringify(breadcrumbData);\r\n return pdpBreadcrumbSchemaData;\r\n }\r\n private modifyBreadcrumbUrl = (url: string): string => {\r\n const urlParts = url.split('\\/');\r\n urlParts.pop();\r\n const newUrl = urlParts?.join('\\/');\r\n return newUrl;\r\n };\r\n private _getCustomBreadcrumbLinks = (itemPosition: number): JSX.Element[] | null => {\r\n const { links } = this.props.config;\r\n\r\n if (!links || !(links.length > 0)) {\r\n this.props.context.telemetry.error('BreadCrumb links content is empty, links wont render');\r\n return null;\r\n }\r\n return links.map((value: ILinksData, index: number) => {\r\n itemPosition++;\r\n return (\r\n \r\n );\r\n });\r\n };\r\n private _makeRealUrlParts = (decodedArr: string[] | false | ''): IUrlParts => {\r\n let refinerParts: string[] = [];\r\n let realUrl = '';\r\n const realUrlParts: string[] = [];\r\n decodedArr &&\r\n decodedArr.forEach((part, index) => {\r\n switch (index) {\r\n case 0:\r\n realUrl = part;\r\n break;\r\n case 1:\r\n realUrl = `${part}`;\r\n break;\r\n case 2:\r\n realUrl = `${part}`;\r\n break;\r\n default:\r\n realUrl = '';\r\n }\r\n realUrlParts.push(realUrl);\r\n if (part.includes('|')) {\r\n refinerParts = [...refinerParts, ...part.split('|')];\r\n } else {\r\n refinerParts = [...refinerParts, part];\r\n }\r\n });\r\n return { realUrlParts, refinerParts };\r\n };\r\n private _getUrlString = (): { part: string; realUrlParts: string[] } => {\r\n const { data, context } = this.props;\r\n const requestContext = context && context.request;\r\n const categoryIdToken = requestContext.urlTokens.recordId;\r\n const categoryId = categoryIdToken ? `${categoryIdToken}.c` : undefined;\r\n let slug = (data.category.result && data.category.result.Slug) || '/search';\r\n let slugArray = slug?.split('/')?.splice(1);\r\n // remove keywords form slugArray\r\n slugArray = removeKeywords(slugArray, context.request);\r\n // FIX reset slug to without keywords\r\n slug = slugArray?.join('/');\r\n const params = MsDyn365.isBrowser && window.location;\r\n const refinersString = params && params.pathname?.replace(`/${slug}/`, '')?.replace(`/${categoryId}`, '');\r\n const decodedArr = refinersString && decodeURIComponent(refinersString).split('/');\r\n const { realUrlParts, refinerParts } = this._makeRealUrlParts(decodedArr);\r\n const configVirtualRefinerNames = getVirtualRefinerNames(this.props.context.request, true);\r\n const filteredRefiners =\r\n data.refiners.result &&\r\n data.refiners.result.filter(refiner => {\r\n return refiner.KeyName && configVirtualRefinerNames.indexOf(refiner.KeyName.toLowerCase()) !== -1;\r\n });\r\n const sortedValues: { [key: string]: string[] } = {};\r\n filteredRefiners?.forEach(refinerSet => {\r\n let refinerName = refinerSet.KeyName;\r\n if (refinerName) {\r\n refinerName = refinerName.toLowerCase();\r\n sortedValues[refinerName] = []; // size, brand, price\r\n }\r\n refinerSet.Values.forEach(refiner => {\r\n refinerParts &&\r\n refinerParts.forEach(refinerPart => {\r\n if (refinerName && refiner.LeftValueBoundString &&\r\n (refiner.LeftValueBoundString.toLowerCase()?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-') === refinerPart.toLowerCase().split('-').join(' ')\r\n || refiner.LeftValueBoundString.toLowerCase()?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-') === refinerPart.toLowerCase())) {\r\n sortedValues[refinerName].push(refiner.LeftValueBoundString.split('/').join('$$'));\r\n } else if (refinerName && refiner.LeftValueBoundString &&\r\n refiner.LeftValueBoundString.toLowerCase() === refinerPart.toLowerCase().split('-').join(' ')) {\r\n sortedValues[refinerName].push(refiner.LeftValueBoundString.split('/').join('$$'));\r\n }\r\n });\r\n });\r\n });\r\n\r\n // sort by configuration\r\n\r\n let str = '';\r\n let strNext = '';\r\n let breakAll = true;\r\n const virtualRefiners = [...configVirtualRefinerNames];\r\n configVirtualRefinerNames.forEach(item => {\r\n if (!sortedValues[item] || sortedValues[item]?.length < 1) {\r\n delete sortedValues[item];\r\n virtualRefiners.splice(virtualRefiners.indexOf(item), 1);\r\n }\r\n });\r\n\r\n virtualRefiners.every(item => {\r\n const sortedRefiners = sortedValues;\r\n const refiner = item;\r\n sortedRefiners[refiner]?.length < 1 ? delete sortedRefiners[refiner] : null;\r\n if (sortedRefiners[refiner]?.length < 2 && breakAll) {\r\n if (refiner === virtualRefiners[0] && sortedRefiners[refiner]?.length === 1) {\r\n str = `${sortedRefiners[refiner]}`;\r\n }\r\n if (refiner === virtualRefiners[1] && sortedRefiners[refiner]?.length === 1) {\r\n strNext = `${sortedRefiners[virtualRefiners[0]] ? `/ ${sortedRefiners[refiner]}` : `${sortedRefiners[refiner]}`}`;\r\n if (sortedRefiners[virtualRefiners[2]]?.length !== 1) {\r\n str = !sortedRefiners[virtualRefiners[0]] ? `${sortedRefiners[refiner]}` : `${str} / ${sortedRefiners[refiner]}`;\r\n }\r\n }\r\n if (refiner === virtualRefiners[2] && sortedRefiners[refiner]?.length === 1) {\r\n str =\r\n str || strNext\r\n ? `${str} ${sortedRefiners[virtualRefiners[1]] ? strNext : '/'} ${sortedRefiners[virtualRefiners[2]] ? `/ ${sortedRefiners[refiner]}` : str\r\n }`\r\n : `${sortedRefiners[refiner]}`;\r\n }\r\n return true;\r\n } else {\r\n breakAll = false;\r\n return false;\r\n }\r\n });\r\n return { part: str, realUrlParts };\r\n };\r\n\r\n private _getUrl = (originalUrlPart: string): string => {\r\n const { data, context } = this.props;\r\n const requestContext = context && context.request;\r\n const categoryIdToken = requestContext.urlTokens.recordId;\r\n const categoryId = categoryIdToken ? `${categoryIdToken}.c` : undefined;\r\n let slug = (data.category.result && data.category.result.Slug) || '/search';\r\n let slugArray = slug.split('/').splice(1);\r\n // remove keywords form slugArray\r\n slugArray = removeKeywords(slugArray, context.request);\r\n // FIX reset slug to without keywords\r\n slug = slugArray.join('/');\r\n const params = MsDyn365.isBrowser && window.location;\r\n return `/${slug}/${originalUrlPart}${categoryId ? `/${categoryId}` : ''}${params && params.search ? params.search : ''}`;\r\n };\r\n private _trimSpacesAndCapitalize = (st: string): string => {\r\n return st\r\n .trimStart()\r\n .trimEnd()\r\n ?.replace(/(^\\w{1})|(\\s{1}\\w{1})/g, match => match.toUpperCase());\r\n };\r\n private _getCategoryHierarchy = (itemPosition: number): JSX.Element[] | null => {\r\n const { data } = this.props;\r\n const categoryHierarchy = data.categoryHierarchy.result && [...data.categoryHierarchy.result];\r\n if (!categoryHierarchy) {\r\n this.props.context.telemetry.error('Category Hierarchy content is empty, module wont render');\r\n return null;\r\n }\r\n const categoryHierarchyTemp: ICategory[] = [];\r\n categoryHierarchy.map(category => {\r\n const cat: ICategory = {\r\n Name: category.Name!,\r\n Url: category.Url!\r\n };\r\n categoryHierarchyTemp.push(cat);\r\n });\r\n this.state.concatRefinerCat.length &&\r\n this.state.concatRefinerCat.map((item: ICategory) => {\r\n categoryHierarchyTemp.push(item);\r\n });\r\n return categoryHierarchyTemp\r\n ? categoryHierarchyTemp.map((value: ICategory, index: number) => {\r\n itemPosition++;\r\n return (\r\n \r\n );\r\n })\r\n : null;\r\n };\r\n\r\n // This is used in _getCategoryHierarchy OOB to support translations. TODO: decide if we want to implement.\r\n\r\n // private readonly _getFriendlyName = (locale: string, nameTranslations?: TextValueTranslation[]): string | undefined => {\r\n // let nameTranslation: TextValueTranslation | undefined;\r\n // if (locale && nameTranslations && ArrayExtensions.hasElements(nameTranslations)) {\r\n // nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\r\n // }\r\n\r\n // // If friendly name for current locale is null, should use default locale.\r\n // if (nameTranslation === undefined && ArrayExtensions.hasElements(nameTranslations)) {\r\n // nameTranslation = nameTranslations[0];\r\n // }\r\n\r\n // return nameTranslation?.Text;\r\n // };\r\n\r\n private _getPDPLinks = (itemPosition: number): JSX.Element[] | null => {\r\n const url = this.props.context.request.url.requestUrl.href;\r\n const {\r\n config: { hideProductName },\r\n data: {\r\n product: { result: product },\r\n productSpecificationData: { result: productSpecificationData },\r\n categoryPaths: { result: categoryHierarchy }\r\n\r\n },\r\n app: { config: { brandBackofficeAttributePdp } }\r\n } = this.props;\r\n const brandName = parseBrandName(productSpecificationData, brandBackofficeAttributePdp) || '';\r\n if (!categoryHierarchy) {\r\n this.props.context.telemetry.error('Category path content is empty for the product');\r\n return null;\r\n }\r\n const links: JSX.Element[] = [];\r\n\r\n categoryHierarchy.map((value: ICategoryUrl, index: number) => {\r\n itemPosition++;\r\n links.push(\r\n \r\n );\r\n });\r\n if (product && !hideProductName) {\r\n itemPosition++;\r\n links.push(\r\n \r\n );\r\n }\r\n return links;\r\n };\r\n\r\n private _goBack = (): void => {\r\n if (MsDyn365.isBrowser) {\r\n window.history.back();\r\n }\r\n };\r\n\r\n private _getPDPBackButton = (): JSX.Element | null => {\r\n const isBackAllowed =\r\n this.props.context && this.props.context.request && this.props.context.request.query && this.props.context.request.query.back;\r\n if (!isBackAllowed) {\r\n return null;\r\n }\r\n if (MsDyn365.isBrowser && (document.referrer === '' || window.history.length < 2)) {\r\n return null;\r\n }\r\n return (\r\n \r\n {this.props.resources.backToResultsText}\r\n \r\n );\r\n };\r\n}\r\n\r\nexport default Breadcrumb;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport { HtmlHeadInclude } from '@msdyn365-commerce/core-internal';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { IBreadcrumbViewProps } from './mfrm-breadcrumb';\r\nimport CustomSkeleton from '../../themes/mattressfirm/custom-components/CustomSkeleton';\r\n\r\n// tslint:disable-next-line: cyclomatic-complexity\r\nconst MfrmBreadCrumbView: React.FC = props => {\r\n const { root, isLoadedRoot, links, backButton, BreadcrumbContainer, BreadcrumbList, BreadcrumbListItem, separator, plpBreadcrumbSchema, pdpBreadcrumbSchema } = props;\r\n // VSI Customization - start\r\n // Todo\r\n // To remove channel navigation hirarchy parent node i.e. All, which might be updated later on\r\n const levelToHide = 1;\r\n let showBreadCrumb: boolean = false;\r\n const pageType = props.data.listPageState?.result?.pageType;\r\n const searchQueryValue = props.context.request.query?.q;\r\n const mfrmLinks = links?.length && props.config.hideParentCatagory ? links?.splice(levelToHide, links.length) : links;\r\n const pageURL = MsDyn365.isBrowser && window.location.pathname;\r\n const activeProducts = props.data.listPageState?.result?.activeProducts;\r\n const extProperties = activeProducts && activeProducts.length > 0 && activeProducts[0]?.ExtensionProperties || [];\r\n const fallBackQueryResult = extProperties?.find(obj => obj?.Key === 'FallbackQuery')?.Value?.StringValue;\r\n const [isSchemaUpdated,setIsSchemaUpdated]=React.useState(false);\r\n const getHREF = (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n const targetElm = event.target as Element;\r\n const parentHREF = targetElm?.closest('a')?.getAttribute('href'); // get clicked items parent href\r\n const redirectURL = parentHREF; // set redirect url after tagging even\r\n // @ts-ignore\r\n if ('utag' in window && redirectURL !== undefined) {\r\n event.preventDefault();\r\n // @ts-ignore\r\n // tslint:disable-next-line: object-literal-key-quotes\r\n utag.link({\r\n event: 'internal navigation',\r\n event_category: 'internal links',\r\n event_action: `to: ${redirectURL}`,\r\n event_label: `from: ${pageURL}`,\r\n event_noninteraction: 'false'\r\n });\r\n if (MsDyn365.isBrowser && redirectURL) {\r\n window.location.href = redirectURL;\r\n }\r\n }\r\n };\r\n if (pageType === 'Search' && props.data.updateBreadcrumbOnSrp.result?.breadcrumbCheck) {\r\n showBreadCrumb = true;\r\n } else if (pageType === 'Search' && !props.data.updateBreadcrumbOnSrp.result?.breadcrumbCheck) {\r\n showBreadCrumb = false;\r\n }\r\n // VSI Customization - ends\r\n if (!root && !links && !backButton) {\r\n props.context.telemetry.warning('BreadCrumb content is empty, module wont render');\r\n return null;\r\n }\r\n const _renderPlpBreadcrumbSchema =()=> {\r\n if (plpBreadcrumbSchema) {\r\n const inlineScripts = document.createElement('script');\r\n inlineScripts .setAttribute('type', 'application/ld+json');\r\n inlineScripts.text = plpBreadcrumbSchema;\r\n const head = document.head;\r\n head.insertBefore(inlineScripts, head.firstElementChild);\r\n }\r\n };\r\n\r\n React.useEffect(() => {\r\n if(plpBreadcrumbSchema){\r\n setIsSchemaUpdated(true);\r\n }\r\n } ,[plpBreadcrumbSchema]);\r\n if(!isLoadedRoot){\r\n return ;\r\n } else {\r\n return (\r\n \r\n {isSchemaUpdated && (pageType ==='Category' || pageType ==='Search') && _renderPlpBreadcrumbSchema() }\r\n {props.context.request.urlTokens.pageType === 'Product' &&\r\n \r\n {/* tslint:disable:react-no-dangerous-html - intentionally setting inner html with only data action output (no unsanizted user input)*/}\r\n