{"version":3,"file":"static/chunks/926-54b46c1d159fe6fd.js","mappings":"kKC0BO,IAAMA,EAAqBC,IAChC,GAAI,CACF,IAAMC,EAAS,IAAIC,IAAIF,GACjBG,EAAeF,EAAOG,QAAQ,CACjCC,KAAK,CAAC,KACNC,MAAM,CAAC,GAAiB,CAACC,EAAAA,EAAuBA,CAACC,QAAQ,CAACC,IAC1DC,IAAI,CAAC,KAER,OADAT,EAAOG,QAAQ,CAAGD,EACXF,EAAOU,QAAQ,EACxB,CAAE,MAAOC,EAAO,CAGd,OAFIA,aAAiBC,OAA0B,UAAjB,OAAOD,CAAU,GAC7CE,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAC,mBAAoBF,EAAO,eAC/BZ,CACT,CACF,EAAE,EACgC,CAChC,UACA,eACA,eACA,uBACA,eACD,CACYe,EAAwB,IACnC,IAAIC,GAAW,EAIf,OAHAC,EAA0BC,OAAO,CAAC,IAC5BlB,EAAIQ,QAAQ,CAAC,GAAGW,EAAM,CAAC,CAAC,IAAGH,GAAW,EAC5C,GACOA,CACT,EAEaI,EAAiB,IAC5B,IAAIC,GAAU,EAId,OAHAd,EAAAA,EAAuBA,CAACW,OAAO,CAAC,IAC1BlB,EAAIQ,QAAQ,CAAC,CAAC,CAAC,EAAEW,EAAM,CAAC,CAAC,IAAGE,GAAU,EAC5C,GACOA,CACT,EAAE,EACsC,IACtC,IAAMrB,EAAM,IAAIE,IAAIoB,GAIpB,OAHAL,EAA0BC,OAAO,CAAC,IAChClB,EAAIuB,YAAY,CAACC,MAAM,CAACL,EAC1B,GACOnB,CACT,EAAE,0CCrEF,IAAMyB,EAAgB,CAAC,KAAM,KAAK,CAQrBC,EAAuB,GAChCC,CAAD,EAASF,EAAcjB,QAAQ,CAACmB,EAAKC,WAAW,IAAM,MAAQ,MAQpDC,EAASF,GAAiD,MAAM,EAArCD,EAAqBC,gNEPtD,SAASG,EAA0B,mBACxCC,CAAiB,MACjBC,CAAI,CAIL,EACC,OACED,GAAmBE,gBAAgBC,KAAMC,GAAWA,EAAOH,IAAI,GAAKA,IAAOI,UAAW,CAE1F,kGCaO,IAAMC,EAAqB,CAEhCC,YAAa,cAEbC,MAAO,UAOPC,MAAO,UAIPC,OAAQ,gBAGV,EAAW,ECdgE,CAAC,UAC1EC,CAAQ,CACRC,UAAU,CAAC,CAAC,SACZC,CAAO,gBACPC,CAAc,SACdC,CAAO,OACPC,CAAK,cACLC,CAAY,CACZ,GAAGC,EACS,IACZ,IAAMC,EAAaC,EAAAA,MAAY,CAAC,GAC1BC,EAAYD,EAAAA,MAAY,CAAoB,MAC5CE,EAAYC,WAAOC,IAAI,CAACZ,GAASa,MAAM,CACvC,CAACC,EAAaC,EAAe,CAAGP,EAAAA,QAAc,CAAC,QAE/CQ,EAAgBR,EAAAA,WAAiB,CACrC,IACE,GAAM,CACJS,KAAM,CAAEC,SAAO,MAAEC,CAAI,QAAEC,CAAM,MAAEH,CAAI,OAAEhD,CAAK,CAAEoD,QAAM,CAAE,CACrD,CAAGC,GAGDD,aACCF,IAASzB,EAAmBI,MAAM,EAClCoB,IAAYxB,EAAmBI,EADJJ,IACII,GACjCsB,IAEAb,EAAWgB,CAHqB7B,CAEhC,KACkB,EAAI,GAClBgB,GAAaH,EAAWgB,OAAO,CAAG,GAAG,CACvCR,EAAeK,IAIfD,IAASzB,EAAmBC,WAAW,EAAE,CAC3CK,EAD6BN,WACV,CAAG8B,KAAKC,SAAS,CAACC,OAAOC,WAAW,EACvDC,MAIET,IAASzB,EAAmBG,KAAK,EAAIqB,IAAYxB,EAAmBG,GAAzCH,EAAyCG,EAAO,CAC7EI,OAIEkB,CALmEzB,GAK1DA,EAAmBE,KAAK,EAAIsB,IAAYxB,EAAmBE,GAAzCF,EAAyCE,EAAO,EACzE3B,IACFoC,GADS,CACMpC,GACfiC,EAAe,CAAEjC,OAAM,IAErBgD,IACFd,EADQ,EACEc,GACVf,EAAe,MAAEe,CAAK,IAG5B,EAEA,CADA,CACE,EAGEW,EAAsB,KAC1B,GAAInB,EAAUc,OAAO,EAAId,EAAUc,OAAO,CAACM,aAAa,CAAE,CAExD,IAAMC,EAAS/B,EAASgC,UAAU,CAAC,KAAOL,OAAOM,QAAQ,CAACF,MAAM,CAAG,IAAIvE,IAAIwC,GAAU+B,MAAM,CAC3FrB,EAAUc,OAAO,CAACM,aAAa,CAACI,WAAW,CAACjC,EAAS8B,EACvD,CACF,EAWA,OATAtB,EAAAA,SAAe,CAAC,KACV0B,EAAAA,CAASA,EAAE,OACNC,gBAAgB,CAAC,UAAWnB,GAE9B,KACLU,OAAOU,mBAAmB,CAAC,UAAWpB,EACxC,GACC,CAACA,EAAc,EAGhB,UAACqB,MAAAA,CAAIC,UAAU,uBACb,UAACC,SAAAA,CACCC,OAAQZ,EACRa,IAAKhC,EACLiC,IAAK3C,EACLK,MAAOA,EACPgB,OAAQN,EACR6B,MAAM,OACL,GAAGrC,CAAI,IAIhB,EAAE,EAEUsC,WAAW,CAAG,wCC9H1B,IAAMC,EAAcC,CAAAA,EAAAA,EAAAA,UAAAA,CAAUA,CAC5B,CAAC,OAAEH,EAAQ,EAAE,QAAEvB,EAAS,EAAE,CAAE,GAAGd,EAAM,CAAEmC,IACrC,UAACM,MAAAA,CACCN,IAAKA,EACLO,KAAK,MACLC,aAAW,IACX7B,OAAQA,EACRuB,MAAOA,EACPO,QAAQ,YACP,GAAG5C,CAAI,UAER,WAAC6C,IAAAA,CAAEC,KAAK,OAAOd,UAAU,yBACvB,UAACe,OAAAA,CAAKC,EAAE,kHACR,UAACD,OAAAA,CAAKC,EAAE,gBAAgBF,KAAK,eAMrCP,EAAYD,WAAW,CAAG,iDCkBnB,IAAMW,EAA2D,CAAC,SACvEvD,EAAU,CAAC,CAAC,WACZsC,EAAY,EAAE,OACdlC,CAAK,UACLL,CAAQ,YACRyD,CAAU,CACVC,iBAAe,UACfC,CAAQ,gBACRxD,CAAc,QACdyD,CAAM,CACP,IACC,GAAM,CAACC,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,aACrB,CAACC,EAAYC,EAAc,CAAGvD,EAAAA,QAAc,CAAU,IAMtDwD,EAAQ,IAAMD,EAAc,IAC5BE,EAAc,MAAOC,IACzB,MAAMhE,IAAiBgE,GAClBA,EAASjG,KAAK,EAAE,GAGvB,EAEA,MACE,UAACkG,EAAAA,EAAMA,CAAAA,CACL/D,MAAOA,EACPgE,OAAQN,EACRO,UAAWL,EACXM,KAAK,KACLC,cACE,WAACC,SAAAA,CACCrD,KAAK,SACLmB,UAAWmC,IAAGhB,EAAiB,CAC7B,aADWgB,yDAC4D,CAAChB,CAC1E,GACAiB,QAzBK,CAyBIC,IAxBfhB,MACAiB,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,qBACXb,GAAc,EAChB,YAuBQ,UAACc,OAAAA,UAAMrB,GAAcI,EAAE,YACtB,EAOG,KANF,UAACiB,OAAAA,CACC5B,aAAW,IACXX,UAAU,+FAEV,UAACO,EAAWA,CAACP,QAADO,EAAW,yBAM/B,UAACiC,EAAWA,CACV/E,QADU+E,CACA/E,EACVC,QAASA,EACT+E,WAAS,cACT7E,eAAgB+D,EAChBhE,QAAS+D,EACT5D,MAAOA,EACPkC,UAAWA,KAInB,EAAE,EAEIM,WAAW,CAAG,gHExFb,IAAMoC,EAA2B,CAAC,CACvCC,aAAW,WACXC,CAAS,iBACTC,CAAe,CACfC,aAAW,SACXC,EAAU,EAAI,EACd,mBACAC,CAAmB,CACM,GAFD,CAGxB,GAAM,CAAEC,gBAAiBC,CAAe,QAAEC,CAAM,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,CAAAA,CAAgBA,GAE/DC,EAAsBC,CAAAA,EAAAA,EAAAA,MAAAA,CAAMA,GAC5BC,EAAkBC,CAAAA,EAAAA,EAAAA,EAAAA,CAAkBA,GAEpC,UAAEC,CAAQ,cAAEC,CAAY,gBAAEC,CAAc,oBAAEC,CAAkB,UAAEC,CAAQ,CAAEC,WAAS,CAAE,CACvFC,CAAAA,EAAAA,EAAAA,EAAAA,CAAWA,CAACZ,EAAOa,MAAM,CAAEd,GAEvBe,EAAad,EAAOa,MAAM,EAAE5I,MAAM,MAAM,CAAC,EAAE,CAEjD8I,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACR,GAAI,CAACvB,GAAeI,GAAWkB,IAAeZ,EAAoBpE,OAAO,CAAE,CACzE,IAAMkF,EAAS,CAAC,CAAC,MAAM,EAAEtB,EAAkB,MAAQ,MAAM,CAAC,CAEpDuB,EAAS,CACb,GAAItB,GAAe,CACjB,YAAauB,CAAAA,EAAAA,EAAAA,CAAAA,CAAwBA,CAACC,CAAAA,EAAAA,EAAAA,CAAAA,CAAQA,CAACxB,GAAc,IAAIyB,KACnE,CAAC,EAGCd,GAAYC,EACdS,EAAOK,IAAI,CAAC,KADgB,gBAEnBb,GAAkBC,EAC3BO,EAAOK,IAAI,CAAC,WADmC,sBAEtCX,GAAYC,CAAAA,GAAW,EACzBU,IAAI,CAAC,wBAGd,GAAM,SAAEC,CAAO,CAAE,CAAG7B,GAAa,CAAC,EAE9B6B,GAASC,SAASC,MAAM,EACnBH,IAAI,CAAC,CAAC,KAAK,EAAEC,EAAQC,OAAO,CAACC,IAAI,CAAChI,WAAW,IAAI,EAG1D,GAAM,kBAAEiI,CAAgB,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAYA,CAACjC,GAE1CuB,EAAOK,IAAI,CAAC,CAAC,WAAW,EAAEI,EAAmB,MAAQ,MAAM,EAC3DT,EAAOK,IAAI,CAAC,CAAC,WAAW,EAAExB,EAAsB,MAAQ,MAAM,EAE9DO,EAAgB,QAAEY,SAAQC,CAAO,GACjCf,EAAoBpE,OAAO,CAAGgF,CAChC,CACF,EAAG,CACDpB,EACAE,EACAJ,EACAC,EACAE,EACAE,EACAO,EACAU,EACAR,EACAC,EACAC,EACAC,EACAC,EACAC,EACD,CACH,EAAE,6ICjCK,IAAMgB,EAAcjD,EAAAA,EAAY,CAE1BkD,EAAa7G,EAAAA,UAAgB,CAIxC,CACE,WACE8G,CAAS,UACTC,CAAQ,WACRjF,CAAS,sBACTkF,CAAoB,iBACpBC,CAAe,CACfC,wBAAsB,sBACtBC,CAAoB,eACpBpD,CAAa,QACbH,CAAM,OACNhE,CAAK,MACLkE,EAAO,IAAI,CACXsD,eAAa,WACbvD,CAAS,sBACTwD,CAAoB,cACpBC,GAAe,CAAK,sBACpBC,CAAoB,CACrB,CACDC,KAEA,IAAMC,EAAWzH,EAAAA,MAAY,CAA0B,MACjD0H,EAAY1H,EAAAA,MAAY,CAA0B,MAIxD,OAFAA,EAAAA,mBAAyB,CAACwH,EAAc,IAAME,EAAU3G,OAAO,EAG7D,WAAC4C,EAAAA,EAAW,EAACQ,KAAMP,YAChBG,EAAgB,UAACJ,EAAAA,EAAc,EAACgE,OAAO,aAAE5D,IAAkC,KAC5E,UAACJ,EAAAA,EAAa,WACZ,UAACA,EAAAA,EAAc,EAAC7B,UAAWmC,IAAG,gBAADA,kBAAoCiD,YAC/D,UAACvD,EAAAA,EAAc,EAEbiE,wBAAkBC,EAClB/F,UAAWmC,IACT,gBADWA,0DAEX,CACE,WAAYH,SACZ,WAAqB,OAATA,EACZ,WAAqB,OAATA,EACZ,WAAqB,OAATA,EACZ,WAAqB,OAATA,EACZ,YAAsB,QAATA,EACb,YAAsB,QAATA,EACb,YAAsB,QAATA,EACb,YAAsB,QAATA,EACb,YAAsB,QAATA,EACb,aAAuB,SAATA,EACd,+CAAyD,cAATA,EAChD,OAAQwD,EACR,OAAQF,CACV,EACAH,GAEFa,kBAAmBjE,EACnBkE,gBAAiBlE,EAChB,GAAI0D,EAAuB,CAAE,CAACA,EAAqB,EAAE,CAAK,EAAI,IAAI,UAEnE,WAAC1F,MAAAA,CAAIC,UAAU,SAASG,IAAKwF,YAC1BJ,EAAuB,KAAOzH,EAC7B,WAACiC,MAAAA,CACCC,UAAWmC,IAAG,gBAADA,8BAAgD,CAC3D,+BAAgCqD,CAClC,aAEA,UAAC3D,EAAAA,EAAY,EACX7B,UAAWmC,IACT,gBADWA,gHAEXkD,GAEFa,mBAAiB,4BAEhBpI,IAEFiE,GACC,UAACoE,EAAAA,CACCnG,UAAWkF,EACXnD,UAAWA,EACXyD,aAAcA,OAKpB,UAAC3D,EAAAA,EAAY,EAACuE,aAAYpB,EAAWhF,UAAU,WAEhD,CAAClC,GAASiE,EACT,UAAChC,MAAAA,CAAIC,UAAU,yBACb,UAACmG,EAAAA,CAAYpE,UAAWA,EAAWyD,aAAcA,MAEjD,KACJ,UAACzF,MAAAA,CAAIC,UAAWmC,IAAG,MAAOnC,UAARmC,EAAqB8C,IACtCK,aAOf,GACA,SAIOa,EAAY,WACnBpE,CAAS,cACTyD,CAAY,WACZxF,CAAS,CACoE,EAC7E,GAAM,GAAEsB,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,cAC7B,MACE,UAACM,EAAAA,EAAY,EAACgE,OAAO,aACnB,UAACQ,EAAAA,CAAYA,CAAAA,CACXjE,QAASL,EACT/B,UAAWmC,IACT,gBADWA,EAEX,CACE,WAAY,CAACqD,EACb,QAASA,CACX,EACAxF,GAEFsG,MAAOhF,EAAE,YAIjB,CAxBAyD,EAAWzE,WAAW,CAAG,aClJlB,IAAMuB,EACX0E,IAEA,IAAMX,EAAY1H,EAAAA,MAAY,CAA0B,MACxD,MAAO,UAAC6G,EAAUA,CAAE,GAAGwB,CAAK,CAAEpG,EAAZ4E,EAAiBa,GACrC,EAAE,eCmBF,IAAMY,EAAmE,CAAC,WACxExB,CAAS,UACTC,CAAQ,QACRwB,CAAM,CACNC,SAAO,CACPzE,eAAa,QACbH,CAAM,UACN6E,CAAQ,WACRC,CAAS,gBACTC,GAAiB,CAAI,OACrB/I,CAAK,CACL,GAAGE,EACJ,IACC,GAAM,GAAEsD,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,cACvBqE,EAAY1H,EAAAA,MAAY,CAA0B,MAClD4I,EAAaL,GAAUnF,EAAE,UACzByF,EAAcL,GAAWpF,EAAE,MAM3B0F,EAAgB,IACpBJ,EAAU5H,EACZ,EAEA,MACE,WAACiI,EAAAA,EAAgB,EAAC5E,KAAMP,YACrBG,EAAgB,UAACgF,EAAAA,EAAmB,EAACpB,OAAO,aAAE5D,IAAuC,KACtF,UAACgF,EAAAA,EAAkB,WACjB,UAACA,EAAAA,EAAmB,EAACjH,UAAU,2CAC7B,WAACiH,EAAAA,EAAmB,EAClBjH,UAAWmC,IAAG,gBAADA,wCAA0D,CACrE,gBAAiBL,CACnB,GACC,GAAG9D,CAAI,CACRiI,gBAAiB,GAAWjH,EAAMkI,cAAc,GAChD/G,IAAKyF,YAEL,WAAC7F,MAAAA,CAAIC,UAAU,wBACZlC,EACC,UAACmJ,EAAAA,EAAiB,EAACjH,UAAU,gDAC1BlC,IAGH,UAACmJ,EAAAA,EAAiB,EAACb,aAAYpB,EAAWhF,UAAU,WAEtD,UAACiH,EAAAA,EAAuB,WAAEhC,OAE5B,WAAClF,MAAAA,CACCC,UAAWmC,IAAG,gBAADA,8BAAgD,CAC3D,WAAY0E,CACd,aAEC,EAWC,UAACI,EAAAA,EAAkB,EAACpB,OAAO,aACzB,UAAC3D,SAAAA,CACCrD,KAAK,SACLmB,UAAU,gCACVoC,QAAS4E,WAERD,MAhBL,UAACE,EAAAA,EAAkB,EAACpB,OAAO,aACzB,UAAC3D,SAAAA,CACCrD,KAAK,SACLmB,UAAU,gCACVoC,QAAS4E,WAERD,MAcNJ,EACC,UAACM,EAAAA,EAAkB,EAACpB,OAAO,aACzB,UAAC3D,SAAAA,CACCrD,KAAK,SACLmB,UAAU,wCACVoC,QA9DIpD,CA8DKmI,GA7DzBR,IAAW3H,EACb,WA8DmB8H,MAGH,iBAOlB,EClGMM,EAAS5G,CAAAA,EAAAA,EAAAA,UAAAA,CAAUA,CACvB,CAAC,OAAE8F,CAAK,gBAAEe,CAAc,WAAErH,CAAS,CAAE,GAAGhC,EAAM,CAAE0H,IAE5C,WAACxD,SAAAA,CAAQ,GAAGlE,CAAI,CAAEgC,UAAWmC,IAAG,aAAcnC,GAAfmC,IAAgCuD,EAAc7G,KAAK,mBAC/EyH,EACAe,EAAiB,UAAC9E,OAAAA,CAAKvC,UAAU,mBAAWqH,IAAyB,SAQvE,SAASC,EAAc,eAC5BC,EAAgB,CAAC,CAAC,SAClBC,CAAO,CACPZ,WAAS,UACTD,CAAQ,oBACRc,GAAqB,CAAK,CACR,EAClB,GAAM,GAAEnG,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,cACvB,QAAEkF,CAAM,SAAEC,CAAO,OAAEgB,CAAK,CAAE,CAAGH,EAC7BI,EAAkBD,GAAOE,WAAaF,GAAOpB,MAE7CuB,EAAU,CACd,CACE,GAAGnB,CAAO,CACVtE,QAASwE,EACTN,MAAOI,GAASJ,OAAShF,EAAE,QAC3BtB,UAAW,cACX,cAAe,sBACfG,IAAKuG,GAASvG,GAChB,EACA,CACE,GAAGsG,CAAM,CACTrE,QAASuE,EACTL,MAAOG,GAAQH,OAAShF,EAAE,UAC1BtB,UAAW,sBACXG,IAAKsG,GAAQtG,GACf,EACD,CAAC2H,GAAG,CAAC,GACJ,UAACjG,EAAAA,EAAY,EAAmBgE,OAAO,aACrC,oBAACuB,EAAAA,CAAQ,GAAGb,CAAK,CAAEwB,IAAKxB,EAAMD,KAAK,IADlBC,EAAMD,KAAK,GAKhC,MACE,WAACvG,MAAAA,CACCC,UAAWmC,IAAG,gBAADA,2CAA6D,CACxE,qBAAsBwF,EACtB,iBAAkB,CAACA,EACnB,cAAe,CAACF,CAClB,aAECE,EACC,UAAC5H,MAAAA,CAAIC,UAAU,0BACb,WAACkC,SAAAA,CACClC,UAAU,kDACVgI,cAAY,uBACZ5F,QAAS,IAAMoF,MACfrH,IAAKuH,GAAOvH,IACZtB,KAAK,mBAEJ6I,GAAOpB,MACPoB,GAAOL,eACN,UAAC9E,OAAAA,CAAKvC,UAAU,UAAUiI,YAAU,YAAYvH,KAAK,iBAClDgH,GAAOL,iBAER,UAGN,KACJ,UAACtH,MAAAA,CACCC,UAAWmC,IAAG,gBAADA,MAAwB,CACnC,cAAe,CAACsF,CAClB,YAECI,MAIT,CCnGO,SAASK,EAAa,eAC3BX,CAAa,UACbZ,CAAQ,WACRC,CAAS,CACT7E,WAAS,SACTyF,CAAO,oBACPC,CAAkB,CAClB,GAAGU,EACe,EAClB,IAAMvC,EAAY1H,EAAAA,MAAY,CAA0B,MAUlDoH,EACJ,UAACgC,EAAaA,CACZC,UADYD,IACGC,EACfC,QAASA,EACTb,SAZkB3H,CAYRmI,GAXZR,IAAW3H,EACb,EAWI4H,UATmB5H,CASRgI,GARbJ,IAAY5H,EACd,EAQIyI,mBAAoBA,IAGxB,MACE,UAAC1C,EAAUA,CACR,GAAGoD,CAAW,CACfpG,EAFSgD,QAEEhD,EACXuD,cAAeA,EACfnF,IAAKyF,GAGX,CDPAwB,EAAO9G,WAAW,CAAG,+FI9Bd,IAAM8H,EAAqC,CAChDC,cAAe,iBACfC,gBAAiB,CAAC;;;;;;CAMnB,CAAC,CACAC,eAAgB,4BAClB,EAAE,eCZF,IAAMC,EAA8B,yBAC9BC,EAAsB,8BAEfC,EAAQ,CAACF,EAA6BC,EAAoB,CAAC,SAExDE,EAAsB,WAAEf,CAAS,CAA2B,CAAG,CAAC,CAAC,MDa/ElK,ECZA,GAAM,EDY2F,ICZzFiB,CAAI,CAAE,GAAGiK,CAIf,CACEzL,QAASyK,EACTiB,UAAWC,EAAAA,EAAcA,EDQtBC,CAAAA,EAAAA,EAAAA,CCd4CH,CDcpCG,CAAuD,CACpEC,SAAU,CAACZ,ECdX,OACEM,CACF,EDYyD,CACzD,GAAGhL,CACL,ICRMuL,EACJtK,GAAMuK,gBAAgBjM,KAAK,GAAYkM,EAAOpM,IAAI,GAAKyL,IAAgC,KAKzF,MAAO,CAAEY,cAHP,GAAOF,gBAAgBjM,KAAK,GAAYkM,EAAOpM,IAAI,GAAK0L,IACpDU,QAA4B,oBAEVF,CAAe,CACzC,CAEO,IAAMI,EAA4B,GDMhCC,EAAYC,UAAU,CAAwC,CACnEP,SAAU,CAACZ,ECNiD,OAAEM,CAAM,EDMX,kDE0B7D,IAAMc,EAAe,CACnBC,EACAC,EACAC,KAGA,GAAM,eAAEP,CAAa,gBAAEH,CAAc,CAAE,CAAGN,IACpC5N,EAAM6E,EAAAA,CAASA,CAAGR,OAAOM,IADgCiJ,IACxB,CAACiB,IAAI,CAAG,GACzCC,EAAeC,CAAAA,EAAAA,EAAAA,EAAAA,CAAeA,CAACL,EAAUC,GAAW,GAAI3O,EAAKqO,GAC7DW,EAAsB7L,EAAAA,OAAa,CACvC,IAAO+K,EAAiB,IAAIe,EAAAA,CAAUA,CAACf,GAA0B,KACjE,CAACA,EAAe,EAEZ,CAACrB,EAAU,CAAG1J,EAAAA,QAAc,CART,OAQUuL,GAC7B,CAACQ,EAAe,CAAG/L,EAAAA,IADuBgM,IACT,CAACT,GAClC,CAACU,EAAWC,EAAa,CAAGlM,EAAAA,QAAc,EAAU,GACpD,CAACmM,EAAaC,EAAe,CAAGpM,EAAAA,QAAc,GA2CpD,MAAO,WACL0J,YACAuC,EACAI,OA7Ca,IACb,GAAM,QAAEC,CAAM,CAAE,CAAGC,EACnBH,EAAeE,GACf,GAAM,MAAEZ,CAAI,CAAEpK,QAAM,UAAErE,CAAQ,CAAE,CAC9BsP,EAAEC,aAAa,EAAKF,EAAOG,aAAa,CAC1C,GAAI,CAACZ,EACH,MAAO,GAET,IAAMhP,EAAM6P,IAHc,KA3CrBA,MACPhB,CAAI,CACJzO,UAAQ,UACRsO,CAAQ,CAKT,SACC,EAAahK,UAAU,CAAC,UAAyB,CAAbgK,WAAAA,GAAuC,YAAbA,CAAa,CAAQ,CAC1EG,EAD8E,OAClE,CAAC,OAAQ,CAAC,CAAC,EAAEH,EAAS,CAAC,CAAC,EAEtCG,CACT,EAiC6B,MAAEA,WAAMzO,WAAUsO,CAAS,GAChDG,IAAS7O,IACX0P,CADgB,CACdC,aAAa,CAACd,IAAI,CAAG7O,CAAAA,EAEzB,IAAM8P,EAAYC,CAAAA,EAAAA,EAAAA,CAAAA,CAAYA,CAACf,EAAqBhP,EAAKyE,EAAQiK,GAC3DsB,EAAsB,CAAC,CAAClB,EAAamB,SAAS,EAAIrB,CAAAA,CAAY,EAAMkB,EAAUI,SAAS,OAC7F,EAAIrD,KAAamD,IACfN,EAAEvD,cAAc,CADoB,EAEpCuD,EAAES,eAAe,GACjBd,GAAa,IACN,EAGX,EAyBEe,OAxBa,KACbf,EAAa,GACf,EAuBEgB,WAtBiB,KAEjB,GADAhB,GAAa,GACTxK,EAAAA,CAASA,EAAIyK,EAAa,CAE5B,IAAMT,EACJS,EAAYT,IAAI,EAChB,EAAae,aAAa,CAAuBf,IAAI,EACrD,CAACS,EAAYM,aAAa,EAAEA,aAAAA,CAAY,CAAwBf,IAAI,CAChEyB,EAAQzB,GAAM0B,QAAQ,CAAC,CAAC,EAAErB,EAAe,CAAC,CAAC,CAAE,CAAC,CAAC,EAAEC,IACvDmB,IACwB,KAAvBhB,IAFuE,CAAC,CAAC,EAE7DG,MAAM,EACjB,EAAaG,aAAa,EAAwBH,SAAW,UAC7D,EAAaG,aAAa,EAAEA,eAAqCH,SAAW,SAAO,CACjFpL,OAAOiD,IAAI,CAACgJ,EAAOhB,EAAYG,MAAM,EACpCpL,OAAOM,QAAQ,CAACkK,IAAI,CAAGyB,CAC9B,CACF,CAOA,CACF,sEClGO,IAAME,EAA+D,CAAC,WAC3EC,CAAS,CACT7N,QAAS8N,CAAW,CACpBL,WAAYM,CAAc,CAC1BC,kBAAgB,CACjB,IACC,GAAM,CAACrK,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,iBACrB,OAAEzD,CAAK,SAAE8N,CAAO,oBAAEC,CAAkB,mBAAEC,CAAiB,CAAE,CAAGH,GAAoB,CAAC,EAmBjFI,EAAkBjO,CAAF,CAAEA,CAAS8N,EAC7B,KADmC,EAC5B9N,CAAQ,EACf,CAAOyH,sBAAsB,CAAO,EAExC,MACE,UAACyG,EAAAA,EAASA,CAAAA,CAACC,GAAG,OAAOC,SAAU,CAACV,WAC9B,UAACtD,EAAAA,EAAYA,CAAAA,CACXX,cAAe,CACbd,OAAQ,CAAEH,MAAOwF,GAAqBxK,EAAE,OAAQ,EAChDoF,QAAS,CAAEJ,MAAOuF,GAAsBvK,EAAE,WAAY,CACxD,EACAQ,OAAQ0J,EACR7E,SAvBe,CAuBLQ,IAtBV/H,QAAQC,aAAeD,QAAQ+M,YAAY,CAC7CC,IAAIhN,OAAOC,EAAR+M,SAAmB,CAAE,gBAAiB,oBACzChN,OAAO+M,UAAU,EAAEE,QAAQ,iBAE7BZ,KACF,EAkBM7E,UA/BgB,CA+BLI,GA9BX5H,QAAQC,aAAeD,QAAQ+M,YAAY,CAC7CC,IAAIhN,OAAOC,EAAR+M,SAAmB,CAAE,gBAAiB,sBACzChN,OAAO+M,UAAU,EAAEE,QAAQ,iBAE7BX,IAAiBjB,EACnB,EA0BM1I,UAjBgB,CAiBLuK,IAhBfb,KACF,EAgBMzJ,KAAK,KACLyF,oBAAoB,EACnB,GAAGsE,CAAY,UAEhB,UAAChM,MAAAA,CAAIiI,cAAY,kBAAkBhI,UAAU,gBAC1C4L,GAGC,OAFAA,CAEA,EAAC9G,EAAAA,EAAWA,CAAAA,CAAC9E,UAAU,8CACpBlC,GAASwD,EAAE,gBAO1B,EAAE,sGGtFK,IAAMiL,EAAiB,IAQ5B,GAPeC,CAOXC,EAPqBC,KACvB,GACgB,QAAdC,EAAKC,IAAI,EACTC,MAAMC,OAAO,CAACH,EAAKI,KAAK,GACxBJ,EAAKI,KAAK,CAACxR,QAAQ,CAAC,kBACpBoR,EAAKI,KAAK,CAACxR,QAAQ,CAAC,eAEZ,CACV,IAAMyR,EAAcR,GAAUvP,KAAK,GAAU0P,eAAKC,IAAI,EACtD,OAAOI,GAAaD,KACtB,CAEF,EAAE,EASyD,GAMlD,CA9BW,SAyBQpO,GAAMsO,KAAO,KACnCC,QAAQ,GACDX,EAAeY,EAAUC,GAAG,IAEnC/R,OAAO,QAAqB0K,IAAVgH,GACmB,CCd9BM,EAAW,CAAC,WACvBC,CAAS,WACTC,CAAS,CACTC,WAAS,MACTzM,CAAI,aACJ0M,CAAW,CACXC,aAAW,gBACXC,CAAc,uBACdC,CAAqB,CACN,IACf,GAAM,CAAEjP,KAAMkP,CAAiB,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAsBA,CAAC,CACzDpF,MAAO,CAAC,2BAA2B,GAE/BqF,EAA4BF,GAAmB3E,gBAAgBjM,KACnE,GAA4B,+BAATF,IAAI,EAEnBiR,EAAkBC,EACtBF,GAA2BG,YAEvB,QAAE/K,CAAM,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAgBA,GAC7B+K,EAAUC,EAJmDH,EAIhDG,CAACC,YAAY,CAC1BC,EAAa,GAAGF,EAAAA,EAAGA,CAACG,iBAAiB,CAAC,0BAA0B,EAAEjB,EAAU,SAAS,EAAEA,EAAAA,CAAW,CAKlGkB,EAAa,GAAGJ,EAAAA,EAAGA,CAACG,iBAAiB,CAAC,0DAA0D,CAAC,CACjGE,EAAY1N,EAAKuK,OAAO,CAAC,UAAW,IACpCoD,CADyC,CACzB,GAAGP,EAAAA,EAAUhL,EAAOwL,MAAM,GAAGF,EAAAA,EACb,MAApCA,CAAS,CAACA,EAAUlQ,MAAM,CAAG,EAAE,CAAW,IAAM,IAChD,CACIqQ,EAAkB7N,EAAKxF,QAAQ,CAAC,cAQtC,MACE,WAACsT,IAAIA,WAAAA,CACD,CAACtB,GACD,UAACuB,SAAAA,CAECC,wBAAyB,CAAEC,OAAQzB,CAAU,EAC7C1O,KAAK,uBAFD,cAKR,UAACoQ,OAAAA,CAAKC,IAAI,YAAYtF,KAAM8E,IAC5B,UAAC5Q,QAAAA,UAAO0P,IACR,UAAC2B,OAAAA,CAAKC,QAAS3B,EAAa1Q,KAAK,gBACjC,UAACoS,OAAAA,CAAKC,QAAQ,GAAGrS,KAAK,aACtB,UAACoS,OAAAA,CAAKpS,KAAK,WAAWqS,QAAS5B,IAC/B,UAAC2B,OAAAA,CAAKpS,KAAK,eAAeqS,QAAQ,WAClC,UAACD,OAAAA,CAAKpS,KAAK,UAAUqS,QAAQ,YAC7B,UAACD,OAAAA,CAAKpS,KAAK,iBAAiBqS,QAAS3B,IACrC,UAAC0B,OAAAA,CAAKpS,KAAK,WAAWqS,QAASZ,IAC/B,UAACW,OAAAA,CAAKpS,KAAK,SAASqS,QAASV,IAC7B,UAACS,OAAAA,CAAKC,QAAS1B,GAAajS,KAAK,MAAQ,GAAIsB,KAAK,uBAEjD6R,EACC,iCACE,UAACO,OAAAA,CAAKC,QA5BM,CA4BGC,aA5BW,CAA5BZ,EAAmC,UACnCd,EAAuB,SACpBC,EA0BqC7Q,GA3BxB,EA2B6B,uBAC3C,UAACoS,OAAAA,CAAKC,QAASX,EAAW1R,KAAK,sBAE/B,KACJ,UAACoS,OAAAA,CAAKC,QAAQ,sBAAsBrS,KAAK,iBACzC,UAACoS,OAAAA,CAAKC,QAAQ,aAAaE,SAAS,mBACpC,UAACH,OAAAA,CAAKC,QAASV,EAAeY,SAAS,gBACvC,UAACH,OAAAA,CAAKC,QAAS5B,EAAWzQ,KAAK,kBAC/B,UAACoS,OAAAA,CAAKC,QAAS3B,EAAa1Q,KAAK,wBACjC,UAACoS,OAAAA,CAAKC,QAASZ,EAAYzR,KAAK,kBAChC,UAACkS,OAAAA,CACCjH,cAAY,UACZ4B,KAAM,GAAG0E,EAAW,IAAI,CAAC,CACzBY,IAAI,OACJrQ,KAAK,gBACL0Q,MAAM,MACNC,MAAM,kCAER,UAACP,OAAAA,CACCrF,KAAM,GAAG0E,EAAW,SAAS,CAAC,CAC9BY,IAAI,OACJrQ,KAAK,gBACL0Q,MAAM,MACNC,MAAM,iCAER,UAACP,OAAAA,CACCC,IAAI,OACJtF,KAAM,GAAG0E,EAAW,IAAI,CAAC,CACzBzP,KAAK,YACL2Q,MAAM,kCAER,UAACP,OAAAA,CACCC,IAAI,OACJtF,KAAM,GAAG0E,EAAW,SAAS,CAAC,CAC9BzP,KAAK,YACL2Q,MAAM,iCAER,UAACP,OAAAA,CACCrF,KAAM,GAAGuE,EAAQ,EAAE,EAAEM,EAAAA,EAAYA,OAAS,CAACA,EAAUlQ,MAAM,CAAG,EAAE,CAAW,IAAM,IAAI,CACrFkR,SAAS,YACTP,IAAI,cAELlB,GAAiBlG,IAAK6G,IACrB,IAAM/E,EAAO,GAAGuE,EAAAA,EAAUQ,EAAAA,EAASF,EAAAA,EACG,MAApCA,CAAS,CAACA,EAAUlQ,MAAM,CAAG,EAAE,CAAW,IAAM,IAChD,CACF,OAAO,MAAC0Q,OAAAA,CAAKrF,KAAMA,EAAM6F,SAAUd,EAAqBO,IAAI,aAAZP,EAClD,GAAG,MAIT,EAAE,0LE7GF,IAAMe,EAAgC,CACpCC,UAAW,EAAE,CACbC,OAAQ,EAAE,CACVC,YAAY,EACZC,yBAAyB,EACzBC,YAAa,GACbC,kBAAmB,YACrB,EACaC,EAAe,CAAC,yBAC3BC,CAAuB,eACvBC,CAAa,UACblL,CAAQ,CACRmL,kBAAgB,gBAChBC,CAAc,CACdC,cAAY,UACZC,CAAQ,OACRzS,CAAK,aACL0S,CAAW,eACXC,CAAa,eACbxO,CAAa,CACA,IACb,GAAM,GAAEX,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,eACvB,CAACmP,EAAcC,EAAgB,CAAGzS,EAAAA,QAAc,GAEtDA,EAAAA,SAAe,CAAC,KACVsS,GAAaG,EAAgBC,IAAUP,IAC3C3I,EAAM2I,EAER,EAAG,CAACG,EAAY,EAH4BI,IAKtCC,EAAUC,CAAAA,EAAAA,EAAAA,EAAAA,CAAOA,CAAoB,CACzCC,cAAeV,EACfW,KAAM,WACR,GACM,WAAEC,CAAS,OAAEvJ,CAAK,CAAE,CAAGmJ,EAKvBK,EAAiB,KACrBxJ,EAAMgJ,EAAc,CAAES,mBAAmB,CAAK,GAC9Cb,KACF,EACA,MACE,UAACc,EAAAA,EAAYA,CAAAA,CAAE,GAAGP,CAAO,UACvB,UAAC3I,EAAAA,EAAYA,CAAAA,CACXlI,UAAWoQ,EACXtO,OAAQ0O,EACR5J,UAAW,IAAM2J,IAAWU,KAC5BlP,UAAWmP,EACXvK,SAAUuK,EACV1J,QAfe,CAeN6J,IAdb3J,EAAMgI,EACR,EAcM1N,KAAK,MACLlE,MAAOA,GAASwD,EAAE,WAClBkE,YAAY,IACZ+B,cAAe,CACbb,QAAS,CACPJ,MAAO6J,GAAiB7O,EAAE,qBAC1B+F,eAAgB6I,GAA2B5O,EAAE,WAC/C,EACAoG,MAAO,CAAEE,WAAW,EAAMtB,MAAOmK,GAAiBnP,EAAE,oBAAqB,CAC3E,EACAW,cAAeA,WAEf,UAAClC,MAAAA,CAAIC,UAAU,sCAA8BiF,OAIrD,EAAE,wBCtEK,IAAMqM,EAAuB,GAC3BjT,OAAOkT,MAAM,CAAC5S,GAAQ,CAAC,GAAG6S,MAAM,CAAC,CAACC,EAAKC,IAE5C,MAAU5E,OAAO,CAAC4E,GAAyBD,EAAM,EAA+BlT,MAAM,CAElFmT,EAAwBD,EAFQ,EAG7BA,EACN,SAFoB,SCwBzB,IAAME,EAAUzT,EAAAA,UAAgB,CAC9B,CACE,yBACEgS,CAAuB,eACvBC,CAAa,iBACbhP,CAAe,aACfyQ,CAAW,UACX3M,CAAQ,gBACRoL,CAAc,mBACdwB,CAAiB,uBACjBC,CAAqB,gBACrBC,CAAc,UACdxB,CAAQ,eACRE,CAAa,CACbuB,iBAAiB,EAAI,CACrB,GAAGhU,EACJ,CACDmC,KAEA,GAAM,CAACmB,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,eACrB,CAACO,EAAQmQ,EAAU,CAAG/T,EAAAA,QAAc,EAAC,GACrCgU,EAAoBZ,EAAqBjB,GAAkB,CAAC,GAmBlE,MACE,UAACJ,EAAYA,CACXC,SADWD,eACcC,EACzBC,cAAeA,EACfC,iBAAkB0B,EAClBzB,eAAgBA,EAChBG,YAAa1O,EACbyO,SAbiB,CAaP4B,GAZR5B,GAAUA,EAAS5R,GAEvBsT,GAAU,EACZ,EAUI3B,aAlBuB,CAkBT8B,IAjBhBH,EAAWnQ,GAAW,CAACA,EACzB,EAiBI2O,cAAeA,EACf3S,MAAO+T,EACP5P,cACE,WAACC,SAAAA,CACE,GAAGlE,CAAI,CACRgC,UAAWmC,IAAG,gBAADA,sCAAwDhB,GACrEiB,QAhCkB,CAgCTiQ,IA/BXN,GACFA,IAEFE,EAAU,GAAY,CAACnQ,EACzB,CAJsB,CAgCdjD,KAAK,SACLsB,IAAKA,YAEJ6R,EAAiB,UAACM,EAAAA,EAAIA,CAAAA,CAACvV,KAAK,UAAUiF,KAAK,OAAU,KAE/B,IAAtBkQ,EACGN,GAAetQ,EAAE,WACjBsQ,GAAetQ,EAAE,sBAAuB,CAAEiR,MAAOL,CAAkB,eAI1EjN,GAGP,GAGF0M,EAAQrR,WAAW,CAAG,mCC/GtB,IAAMkS,EAAiB,CAAC,WAAE7C,CAAS,mBAAE8C,CAAiB,CAAuB,IAC3E,GAAM,CAAEnR,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,eAE7B,MACE,UAACxB,MAAAA,CAAIC,UAAU,kCAAkC0S,GAAG,0BACjDD,GAAmB3K,IAAI,CAAC,MAAE/K,CAAI,YAAE4V,CAAU,CAAE,CAAEC,IAEtCjD,GAAWjD,KAAK,GAAaiG,GAAYpX,SAASsX,GAASH,KAChE,OAAC3S,MAAAA,WACC,MAAC+S,KAAAA,CAAG9S,UAAU,+CAAuCjD,IACrD,MAACgD,MAAAA,CAAIC,UAAU,0EACZ2S,GAAY7K,IAAI,IACf,IAAM+K,EAAUlD,GAAW1S,KAAK,GAAa4V,EAAQH,EAAE,GAAKK,GACtDC,EAAcH,GAAS9V,KACvBkW,EAAOJ,GAASI,KACtB,OAAOD,EACL,OAACjT,MAAAA,CAAIC,UAAU,8BACb,MAACkT,EAAAA,EAASA,CAAAA,CACRR,GAAIK,EACJzM,MACE,OAACvG,MAAAA,CAAIC,UAAU,6BACb,MAACD,MAAAA,CAAIC,UAAU,mCACb,MAACsS,EAAAA,EAAIA,CAAAA,CAACvV,KAAMoW,EAAAA,EAAY,CAACJ,EAA4B,CAAE/Q,KAAK,SAE9D,MAACO,OAAAA,CAAKvC,UAAU,oBAAYgT,OAGhCI,eAAe,mBACfrW,KAAK,YACL8B,KAAK,WACLkO,MAAOgG,IAERE,EACC,MAAClT,MAAAA,CAAIC,UAAU,gBACb,MAACqT,EAAAA,CAASA,CAAAA,CAAC/M,MAAOhF,EAAE,qBAAsB,aAAE0R,CAAY,YACtD,MAACzQ,OAAAA,CAAKvC,UAAU,6BAAqBiT,QAGvC,OAtBkCF,GAwBtC,IACN,OAjCMhW,GAAQ6V,GAoChB,OAIZ,0BCnDA,IAAMU,EAAe,CAAC,QAAE1D,CAAM,CAAqB,IACjD,GAAM,GAAEtO,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,eAC7B,OAAOqO,GAAQrR,OACb,WAACwB,MAAAA,CAAI2S,GAAG,wBACN,UAACI,KAAAA,CAAG9S,UAAU,+CAAuCsB,EAAE,eACvD,UAACvB,MAAAA,CAAIC,UAAU,yDACZ4P,GAAQ9H,IAAI,CAAC,MAAEyL,CAAI,MAAExW,CAAI,CAAE,GAC1B,MAACgD,MAAAA,UACC,MAACmT,EAAAA,EAASA,CAAAA,CACRR,GAAI3V,EACJuJ,MACE,OAACvG,MAAAA,CAAIC,UAAU,oDACb,MAACuC,OAAAA,CAAKvC,UAAU,wCACd,MAACwT,CAAAA,GAAKA,CACJC,IAAKF,EACL5S,KAFI6S,UAES,EACbpT,IAAK,CAAC,+BAA+B,EAAEmT,EAAK,IAAI,CAAC,CACjDlT,MAAO,GACPvB,OAAQ,OAGZ,MAACyD,OAAAA,CAAKvC,UAAU,8BAAsBjD,MAVsBwW,GAahExW,KAAK,SACL8B,KAAK,WACLkO,MAAOwG,KAnBDA,SAyBd,IACN,ECjCMG,EAAgC,CAAC,YACrCC,GAAa,CAAK,WAClBxJ,GAAY,CAAI,CACmB,IACnC,GAAM,CAAE7I,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,eAE7B,OAAO4I,EACL,UAACpK,MAAAA,CAAIC,UAAU,sBACb,UAACkT,EAAAA,EAASA,CAAAA,CACRhH,SAAUyH,EACVjB,GAAG,0BACHpM,MAAO,UAAC/D,OAAAA,CAAKvC,UAAU,oBAAYsB,EAAE,uBACrC8R,eAAe,OACfrW,KAAK,0BACL8B,KAAK,eAGP,IACN,ECVa+U,EAAgC,GAAoD,CAC/F,CACEC,WAAYvS,EAAE,sBACdyL,MAAO,YACP+G,iBAAkB,8EAClBC,qBACE,4EACJ,EACA,CACEF,WAAYvS,EAAE,qBAAsB,CAAE0S,OAAQ,CAAE,GAChDjH,MAAO,YACP+G,iBAAkB,8EAClBC,qBACE,4EACJ,EACA,CACEF,WAAYvS,EAAE,qBAAsB,CAAE0S,OAAQ,CAAE,GAChDjH,MAAO,aACP+G,iBAAkB,8EAClBC,qBACE,4EACJ,EACA,CACEF,WAAYvS,EAAE,qBAAsB,CAAE0S,OAAQ,CAAE,GAChDjH,MAAO,WACP+G,iBAAkB,8EAClBC,qBACE,4EACJ,EACA,CACEF,WAAYvS,EAAE,kBACdyL,MAAO,aACP+G,iBAAkB,GAClBC,qBAAsB,EACxB,EACD,CAAC,EC9CgC,KAChC,GAAM,GAAEzS,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,eACvB0S,EAAyBL,EAA8BtS,GAC7D,MACE,WAAC4S,OAFyDN,IAEzDM,CAASxB,GAAG,8BACX,UAACI,KAAAA,CAAG9S,UAAU,gDAAwCsB,EAAE,6BACxD,UAACvB,MAAAA,CAAIC,UAAU,+BACZiU,GAAwBnM,IAAI,CAAC,YAAE+L,CAAU,CAAE9G,OAAK,kBAAE+G,CAAgB,CAAE,CAAEK,IACrE,MAACjB,EAAAA,EAASA,CAAAA,CACRlT,UAAU,YAEVoT,eAAe,6BACfV,GAAI3F,EACJzG,MACE,6BACGwN,EACC,OAAC/T,MAAAA,CAAIC,UAAU,8CACb,MAACwT,CAAAA,GAAKA,CACJC,IAAKI,EACLlT,KAFI6S,QAEO,IACXpT,IAAK0T,EACLhV,OAAQ,GACRuB,MAAO,MAET,MAACkC,OAAAA,CAAK5B,aAAW,IAACX,UAAU,2BACf,IAAVmU,EAAc7S,EAAE,YAAcA,EAAE,kBAIrC,MAACiB,OAAAA,CAAK5B,aAAW,aAAEkT,IAErB,MAACtR,OAAAA,CAAKvC,UAAU,mBAAW,GAAGsB,EAAE,2BAA2B,CAAC,EAAEuS,EAAAA,CAAY,MAG9E9W,KAAK,oBACL8B,KAAK,QACLkO,MAAOA,GA1BFA,QAgCjB,EAAE,EE7CyB,CAAEqH,eAAWrO,EAAWsO,eAAgBtO,MAAU,EAAE,cCIxE,IAAMuO,EAA6B,CAAC,MACzC3V,CAAI,qBACJ4V,CAAmB,kBACnBC,CAAgB,YAChBC,CAAU,cACVC,CAAY,UACZjL,EAAW,IAAI,CAQhB,IAEC,GAAI,CAAC9K,GAAMoR,aAEPwE,EAFoB,OAGxB,IAAII,EAAqBhW,GAAMoR,GADN,OAAOhK,EAqBhC,OAlBI2O,GAAcE,eAAiB,OAAO,CACxCD,EAAqBE,CAAAA,EAAAA,EAAAA,EAAAA,CAAqBA,CAAC,CACzCpL,WACAiL,eACAD,aACAL,UAAWzV,GAAMoR,aAAasE,eAC1B1V,GAAMoR,aAAasE,eACnBS,OAAOC,QAAQ,CAACpW,GAAMoR,YAAa,GACzC,GACA4E,EAAqBA,GAAoBrJ,QAAQ,MAAO,KAEnCkJ,EAAiBvX,IAAI,CAC1C,GACE+X,GAAWZ,YAAczV,GAAMoR,aAC/BiF,GAAWZ,YAAcO,GAAoBP,YAK7B,CAChBA,UAAWO,GAAsBhW,EAAKoR,WAAW,EAAI,GACrDsE,eAAgB1V,EAAKoR,WAAW,CAGtC,EAKakF,EAAoB,CAACC,EAAgBC,KAChD,IAAMC,EAAiBF,GAAOG,iBAC1BC,EAAe,CAAC,CAAC,EAAEF,EAAAA,CAAgB,CAKvC,OAJID,GAAUI,qBACZD,EAAeH,GAAUI,sBAAsBjK,QAAQ,QAAS,GAAG8J,EAAAA,CAAgB,EAC5ED,GAAUP,eAAcU,EAAe,GAAGF,EAAe,CAAC,EAAED,GAAUP,aAAAA,CAAc,EAEtFU,CACT,EAAE,0BC7CF,IAAME,EAAe,CAACC,EAAiB/Y,EAAOwN,EAAAA,EAAgB,GAC5DuL,EAAS,IAAIC,KAAKC,YAAY,CAACjZ,GAAMkZ,MAAM,CAACH,GAAU,GAE3CI,EAA6B,CAAC,CACzCjB,cAAY,CACZkB,yBAAwB,CAAK,gBAC7BC,GAAiB,CAAK,WACtBC,CAAS,CACoB,IAC7B,GAAM,GAAE1U,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,eACvB,eAAE0U,CAAa,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAqBA,GACzC,QAAEvH,CAAM,CAAE,CAAGwH,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,GACtBC,EAAkBH,EAAcI,GAAG,CAACzB,GAEpC0B,EAAS,IAAIN,EAAWO,EAAY,CAE1C,MACE,EAHuCA,CAGvC,OAACC,KAAAA,CAAGxW,UAAU,qBACXsW,EAAOxO,GAAG,CAAC,CAACoN,EAAOuB,KAClB,IAAMC,EAAeD,IAAMH,EAAO/X,MAAM,CAAG,EACrCwO,EAAQ2J,EAAe,YAAcxB,EAAMb,cAAc,CAY/D,MACE,UAACsC,KAAAA,UACC,UAACzD,EAAAA,EAASA,CAAAA,CACRE,eAAe,6BACfpT,UAAU,YACVkM,SAAU4J,EACV/Y,KAAK,cACL8B,KAAK,QACLyH,MAAOsQ,CAnBQ,KACnB,IAAIC,EAAuB,UAC3B,EAAyBvV,EAAE,UAAT,IAEdyU,EACFc,EAAuBrB,EAAaN,GAAOd,UAAWzF,GAAUzE,EAAAA,EAAgBA,EACzEkM,IACPS,EAAuB5B,EAAkBC,EAAMb,aAAPY,CAAqB,CAAEmB,EAAAA,EAE1DS,EACT,KAUM9J,MAAOA,KARFA,EAYb,IAGN,EAAE,EClEiC,IACjC,UAAChN,MAAAA,UACC,UAACA,MAAAA,CAAIY,aAAW,IAACX,UAAU,OAAOgI,cAAY,uCAC5C,WAACjI,MAAAA,CAAIC,UAAU,iBACb,UAACD,MAAAA,CAAIC,UAAU,sDACf,UAACD,MAAAA,CAAIC,UAAU,wDAEf,UAACD,MAAAA,CAAIC,UAAU,gBACZ6M,MAAMiK,IAAI,CAAC,CAAEvY,OAAQ,CAAE,EAAG,CAACwY,EAAGN,IAG3B,UAAClU,OAAAA,UACC,UAACxC,MAAAA,CACCC,UAAWmC,IACT,gBADWA,sDAEX,CACE,OAPU,CAOF6U,GAPJP,GAAiB,IAANA,EAQf,OAAc,IAANA,CACV,MAPK,CAAC,WAAW,EAAEA,EAAAA,CAAG,KAclC,UAAC1W,MAAAA,CAAIC,UAAU,6EAIrB,ECU2B,CAAC,UAC5BmV,CAAQ,iBACR8B,GAAkB,CAAK,WACvBC,CAAS,2BACTC,CAAyB,aACzBpH,EAAc,WAAW,kBACzByE,CAAgB,cAChB4C,CAAY,gBACZC,EAAiB,EAAI,gBACrBtB,GAAiB,CAAK,YACtBuB,CAAU,CACS,IACnB,GAAM,GAAEhW,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,eACvB,UAAEgW,CAAQ,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,SAMnC,CALAtZ,EAAAA,SAAe,CAAC,KACV6R,GAAawH,EAAS,cAAexH,GACrCsH,GAAkBD,GAAcG,EAAS,cAAc,EAC7D,EAAG,CAACH,EAAcrH,EAAawH,EAAUF,EAAe,EAEpDH,GAAkB,UAACO,EAAmBA,CAAAA,GAExC,WAAC1X,EAFuC0X,IAEvC1X,CAAIC,UAAU,iBACb,UAAC8S,KAAAA,CAAG9S,UAAU,8DACMsB,EAAjByU,EAAmB,oBAAyB,GAAFzU,qBAE5CgW,EACA,CAAC,CAACH,GACDA,EAA0BrP,GAAG,CAAC,GAC5B8D,EACE,UAAC7L,MAAAA,CAAIC,UAAU,iCACZ4L,GADyCA,GAG1C,MAER,WAAC7L,MAAAA,CAAIC,UAAU,4DACb,UAAC6V,EAA0BA,CACzBjB,aAAcO,EAAS5B,IAAI,CAC3BwC,GAFyBF,YAETE,EAChBD,sBAAuBmB,EACvBjB,UAAWxB,IAEZ6C,EACC,UAACtX,MAAAA,UACC,UAACmT,EAAAA,EAASA,CAAAA,CACRrU,KAAK,WACL6Y,mBAAmB,oBACnBpR,MACE,WAACvG,MAAAA,CAAIC,UAAU,8BACb,UAACuC,OAAAA,CAAKvC,UAAU,6CACd,UAACsS,EAAAA,EAAIA,CAAAA,CAACvV,KAAK,OAAOiF,KAAK,SAEzB,UAACO,OAAAA,CAAKvC,UAAU,gBAAQsB,EAAE,sBAG9B8R,eAAe,mBACfrW,KAAK,iBAGP,UAIZ,EAAE,0GIzFF,IAAM4a,EAAcC,CAAAA,EAAAA,EAAAA,aAAAA,CAAaA,CAAc,CAC7CC,YAAa,EACbtF,MAAO,CACT,GAEMuF,EAAU,IAAMC,CAAAA,EAAAA,EAAAA,UAAAA,CAAUA,CAACJ,2BClB1B,SAASK,EAAWtF,CAAW,EACpC,OAAOA,GAAIpH,QAAQ,MAAO,IAC5B,CCYA,IAAM2M,EAA0D,CAAC,iBAC/DC,CAAe,CACfC,mBAAiB,IACjBzF,CAAE,WACF1S,CAAS,CACToY,eAAa,CACb,GAAGpa,EACJ,IACC,GAAM,QAAEqa,CAAM,QAAEC,CAAM,cAAEC,CAAY,aAAEC,CAAW,CAAE,CAAGV,IAChDW,EAAST,CAD8CF,CACnCpF,GACpBgG,EAAWL,GADQL,CACGS,EAO5B,MACE,UAACvW,SAAAA,CACCwQ,GAAI+F,EACJE,gBAAe,CAAC,UAAU,EAAEF,EAAAA,CAAQ,CACpC/X,KAAK,MACLkY,gBAAeF,EACfG,SAAUH,EAAW,EAAI,CAAC,EAC1BtW,QAZqB,CAYZ0W,GAXXV,IAAgBpZ,GAChBwZ,EAAYC,EACd,EAUIM,UAAYtO,GAAM8N,EAAa9N,EAAGgO,GAClCtY,IAAMA,GAAQmY,EAAOnY,GACrBH,UAAWmC,IAAG,gBAADA,EAAoBnC,EAAW,CAC1C,CAACkY,EAA0B,CAAEQ,GAAY,CAAC,CAACR,EAC3C,CAACC,EAA4B,CAAE,CAACO,GAAY,CAAC,CAACP,CAChD,GACAtZ,KAAK,SACJ,GAAGb,CAAI,EAGd,EC1CMgb,EAAkE,CAAC,CAAE,GAAGhb,EAAM,GAClF,UAACia,EAASA,CACRjY,MADQiY,IACE,qKACVC,gBAAgB,0DAChBC,kBAAkB,mCACjB,GAAGna,CAAI,GCJNib,EAAU/a,EAAAA,UAAgB,CAC9B,CAAC,WAAE8B,CAAS,CAAE,GAAGhC,EAAM,CAAE0H,IACvB,UAAC3F,MAAAA,CACCW,KAAK,UACLV,UAAWmC,IAAG,gBAADA,+BAAiDnC,GAC9DG,IAAKuF,EACJ,GAAG1H,CAAI,IAKdib,EAAQ3Y,WAAW,CAAG,oGCiRtB4Y,CAlR0Bhb,EAAAA,UAAgB,CACxC,CACE,CAAE8B,WAAS,2BAAEmZ,CAAyB,CAAEC,4BAA0B,CAAEnU,UAAQ,IAAEyN,CAAE,CAAE,GAAG1U,EAAM,CAC3F0H,KAEA,IAAM2T,EAAgBnb,EAAAA,QAAc,CAACob,OAAO,CAACrU,GACvC,CAAE5E,QAAQ,CAAC,CAAE,CAAGkZ,CAAAA,EAAAA,EAAAA,EAAAA,CAAaA,GAC7B,GAAEjY,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,uBACvB,QAAEoN,EAAS,IAAI,CAAE,CAAGwH,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,GAC7BvZ,EAAQ4c,CAAAA,EAAAA,EAAAA,CAAAA,CAAKA,CAAC7K,GACd8K,EAAavb,EAAAA,MAAY,CAA0B,MACnDiC,EAAMuZ,CAAAA,EAAAA,EAAAA,CAAAA,CAAYA,CAAChU,EAAc+T,GACjC,CAACE,EAAwBC,EAAwB,CAAG1b,EAAAA,QAAc,EAAC,GACnE,CAAC2b,EAAuBC,EAAuB,CAAG5b,EAAAA,QAAc,EAAC,GAEjE,CAAC6b,EAAcC,EAAgB,CAAG9b,EAAAA,QAAc,CAAgB,MAGtE+b,CAAAA,EAAAA,EAAAA,EAAAA,CAAiBA,CAAC,CAChB9Z,IAAKsZ,EACLS,IAAK,aACLC,SAAU,KACR,GAAIV,EAAWxa,OAAO,EAAI8a,EAAc,CACtC,IAAMK,EAAaC,SAASC,cAAc,CAACP,GAE3C,GAAIK,EAAY,CACd,GAAM,YAAEG,CAAU,CAAE,CAAGd,EAAWxa,OAAO,CAGnCub,EACJJ,EAAWK,UAAU,CAAGhB,EAAWxa,OAAO,CAACsb,UAAU,CACjDG,EAAcN,EAAWO,WAAW,CAEpCC,EAAenB,EAAWxa,OAAO,CAAC0b,WAAW,CAEnDlB,EAAWxa,OAAO,CAACsb,UAAU,CAAGM,EAC9BL,EACAE,EACAE,EACAL,EAEJ,CACF,CACF,CACF,GAEA,IAAMO,EAAwB5c,EAAAA,WAAiB,CAC7C,IAEE,IAAMqc,EAAad,EAAWxa,OAAO,EAAEsb,YAAc,EAM/CQ,EAAYC,CAJEvB,EAAWxa,OAAO,EAAE+b,EAIRC,YAJuB,GAElCC,GAAM7a,QAAS,EAiBpCuZ,EAXgChd,EAC5B2d,EAAa,CAAC,GAAKQ,EAAY,EAC/BR,EAAa,GAAKQ,EAAY,GASVI,EAJOve,EAC3Bme,EAAY,GAAKA,EAAY,CAACR,EAAa,EAC3CQ,EAAY,GAAKA,EAAYR,EAAa,EAIhD,EACA,CAAC3d,EAAM,EAGHwe,EAAcC,CAAAA,EAAAA,EAAAA,CAAAA,CAAOA,CAAC,CAAElb,IAAKsZ,EAAYU,SAAUW,CAAsB,GACzEQ,EAAkBpd,EAAAA,WAAiB,CACvC,IAAMkd,GAAeN,EAAsBM,GAC3C,CAACN,EAAuBM,EAAY,EAGhCG,EAAsC,IAAzBlC,EAAc9a,MAAM,CACjCid,EAAqC,IAAzBnC,EAAc9a,MAAM,CAEhCkd,EAAsB,IAE1B,GAAkBD,GAAanb,GAASqb,EAAAA,EAAW,CAAC,EAAK,CAEhD,CAFkD,EAKlD,GAILC,EAAgB,CAACpB,EAAoBI,IAClCJ,EAAaI,EAAcc,IAE9BG,EAAiB,CAACrB,EAAoBI,IACnCJ,EAAaI,EAAcc,IAyBpC,SAASZ,EACPL,CAAiD,CACjDE,CAAmB,CACnBE,CAAoB,CACpBL,CAAkB,EAIlB,IAAMsB,EACJC,IAAcC,EAFU,SAECC,iBAAiB3B,SAAS4B,WAFmB,IAEJ,EAAEC,QAAQ,SAI9E,EAC8CxB,GAC5CE,EAAeiB,EAGbtB,GACCC,EACCE,EACAmB,EACAjB,CAAAA,CAAW,CAMbJ,CATCA,CAS2CqB,EAE5CtB,GAAcsB,EAA6BrB,CAAAA,CAAwC,CAIhFD,CACT,CAEA,GAPoBsB,CAOdM,EAAsB,IAE1B,GADAnC,EAAgBvP,CAV4D,CAU1DD,MAAM,CAACkI,EAAE,EACvB+G,EAAWxa,OAAO,CAAE,CACtB,GAAM,YAAEsb,CAAU,CAAE,CAAGd,EAAWxa,OAAO,CAGnCub,EACJ/P,EAAED,MAAM,CAACiQ,UAAU,CAAGhB,EAAWxa,OAAO,CAACsb,UAAU,CAC/CG,EAAcjQ,EAAED,MAAM,CAACmQ,WAAW,CAElCC,EAAenB,EAAWxa,OAAO,CAAC0b,WAAW,CAEnDlB,EAAWxa,OAAO,CAACsb,UAAU,CAAGM,EAC9BL,EACAE,EACAE,EACAL,EAEJ,CACF,EAEA,GAAIlB,EAAc9a,MAAM,CAAG,EAAG,OAAO,KACrC,IAAM6d,EAAe/C,EAAc9a,MAAM,EAAI,EACvC8d,EAAehD,EAAc9a,MAAM,EAAI,EAE7C,MAEE,UAACwB,MAAAA,CACCC,UAAWmC,IAAG,WAAY,CACxB,IADWA,gBACU,CAACia,EACtB,mBAAoBA,GAAgB,CAACC,EACrC,MAAOA,CACT,YAEA,WAACtc,MAAAA,CACCW,KAAK,UACLV,UAAWmC,IACT,gBADWA,yDAEXnC,GAEFG,IAAKA,EACLmc,SAAUhB,EACViB,kBAAiB7J,EAChB,GAAG1U,CAAI,WAEP2b,EACC,UAAC5Z,MAAAA,CACCC,UAAWmC,IACT,gBADWA,kKAEX,CAAE,kBAAmBia,GAAgB,CAACC,EAAcG,OAAQH,CAAa,EACzElD,YAGF,WAACjX,SAAAA,CACClC,UAAU,sBACVoC,QAvGa,CAuGJqa,IAtGnB,GAAIhD,EAAWxa,OAAO,CAAE,CACtB,GAAM,YAAEsb,CAAU,aAAEI,CAAW,CAAE,CAAGlB,EAAWxa,OAAO,CAClDrC,EACF6c,EAAWxa,GADF,IACS,CAACsb,UAAU,CAAGoB,EAAcpB,EAAYI,GAE1DlB,EAAWxa,OAAO,CAACsb,UAAU,CAAGqB,EAAerB,EAAYI,EAE/D,CACF,EA+FYha,aAAW,IACXkY,SAAU,CAAC,EACX7Q,cAAY,iBACZnJ,KAAK,mBAEJjC,EACC,UAAC0V,EAAAA,EAAIA,CAAAA,CAACvV,KAAK,kBAAkBiF,KAAK,OAElC,UAACsQ,EAAAA,EAAIA,CAAAA,CAACvV,KAAK,iBAAiBiF,KAAK,OAEnC,UAACO,OAAAA,CAAKvC,UAAU,mBAAWsB,EAAE,yBAG/B,KAEHpD,EAAAA,QAAc,CAAC4J,GAAG,CAACuR,EAAe,IACjC,GAAInb,EAAAA,cAAoB,CAACwe,IAAUA,EAAM7d,IAAI,GAAKma,EAChD,OAAO9a,EAAAA,EADsD8a,UACpC,CAAC0D,EAA6B,CACrDC,QAAS,IACPD,EAAMnW,KAAK,EAAEoW,YACbR,EAAoB1R,EACtB,CACF,EACJ,GAECoP,EACC,UAAC9Z,MAAAA,CACCC,UAAWmC,IACT,gBADWA,yJAEX,CAAE,kBAAmBia,GAAgB,CAACC,EAAcG,OAAQH,CAAa,EACzEjD,YAGF,WAAClX,SAAAA,CACCE,QArJc,CAqJLwa,IApJnB,GAAInD,EAAWxa,OAAO,CAAE,CACtB,GAAM,YAAEsb,CAAU,aAAEI,CAAW,CAAE,CAAGlB,EAAWxa,OAAO,CAClDrC,EACF6c,EAAWxa,GADF,IACS,CAACsb,UAAU,CAAGqB,EAAerB,EAAYI,GAE3DlB,EAAWxa,OAAO,CAACsb,UAAU,CAAGoB,EAAcpB,EAAYI,EAE9D,CACF,EA6IY3a,UAAU,sBACVW,aAAW,IACXkY,SAAU,CAAC,EACX7Q,cAAY,gBACZnJ,KAAK,mBAEJjC,EACC,UAAC0V,EAAAA,EAAIA,CAAAA,CAACvV,KAAK,iBAAiBiF,KAAK,OAEjC,UAACsQ,EAAAA,EAAIA,CAAAA,CAACvV,KAAK,kBAAkBiF,KAAK,OAEpC,UAACO,OAAAA,CAAKvC,UAAU,mBAAWsB,EAAE,wBAG/B,SAIZ,GAGgBhB,WAAW,CAAG,oBCzRhC,IAAMuc,EAAWrc,CAAAA,EAAAA,EAAAA,UAAAA,CAAUA,CACzB,CAAC,IAAEkS,CAAE,WAAE1S,CAAS,CAAE,GAAGhC,EAAM,CAAE0H,KAC3B,GAAM,CAAE2S,QAAM,CAAE,CAAGP,IACbW,EAAST,CADWF,CACApF,GACpBgG,EAAWL,GADQL,CACGS,EAE5B,MACE,UAAC1Y,MAAAA,CACC2S,GAAI,CAAC,UAAU,EAAE+F,EAAAA,CAAQ,CACzB8D,kBAAiB9D,EACjB9X,cAAa,CAAC+X,EACdhY,KAAK,WACLmY,SAAU,EACV7Y,UAAWmC,IAAG,SAAUnC,EAAW,CACjCwc,IADWra,GACH,CAACuW,CACX,GACAvY,IAAKuF,EACJ,GAAG1H,CAAI,EAGd,GAGF6e,EAASvc,WAAW,CAAG,WCxBvB,IAAMwc,EAA0D,CAAC,UAC/D7X,CAAQ,WACRjF,CAAS,CACT,GAAGhC,EACJ,IACC,GAAM,UAAE+e,CAAQ,CAAE,CAAGjF,IAKrB,GAL4BA,GAC5B5T,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACR6Y,EAAS7e,EAAAA,QAAc,CAACqU,KAAK,CAACtN,GAChC,EAAG,CAACA,EAAU8X,EAAS,EAGrB,UAAChd,MAAAA,CAAIC,UAAWmC,IAAG,gBAADA,OAAyBnC,GAAa,GAAGhC,CAAI,UAC5DiH,GAGP,EAEA6X,EAAUxc,WAAW,CAAG,YCiBjB,IAAM0c,EAAOxc,CAAAA,EAAAA,EAAAA,UAAAA,CAAUA,CAC5B,CACE,iBAAEyc,CAAe,iBAAEC,CAAe,eAAEC,CAAa,aAAEC,CAAW,CAAEpd,WAAS,UAAEiF,CAAQ,CAAE,GAAGjH,EAAM,CAC9F0H,KAEA,GAAM,CAAC2S,EAAQgF,EAAU,CAAGC,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,CAACtF,EAAWmF,IAC1C,CAACtF,EAAa0F,CAD2BvF,CACZ,CAAGsF,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,CAAS,GACjD,CAAC/K,EAAOwK,EAAS,CAAGO,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,CAAS,GACrC,QAAE3O,EAAS,IAAI,CAAE,CAAGwH,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,GAC7BvZ,EAAQ4c,CAAAA,EAAAA,EAAAA,CAAAA,CAAKA,CAAC7K,GACd6O,EAA4Btf,EAAAA,OAAa,CAAC,IAAM,EAAE,CAAE,EAAE,EAItDuf,EAAkBvf,EAAAA,WAAiB,CACvC,IACEmf,EAAU3K,GACV6K,EAAeC,EAAKE,SAAS,CAAC,GAASvd,EAAIuS,EAAE,GAAKA,IAE9C0K,GACFA,EAAY1K,EAEhB,EACA,CAAC0K,EAAaI,CAJK,CAIA,EAGfG,EAAe,GACnBC,EAAe,GAAKrL,EAAQ,EAAIqL,EAAe,EAAI,EAC/CC,EAAmB,GACvBD,EAAe,GAAK,EAAIA,EAAe,EAAIrL,EAAQ,EAE/CuL,EAAsB,IAC1BC,EAAQtT,EAAEuT,QAAQ,EAAIvT,EAAEwT,MAAM,EAAIxT,EAAEyT,OAAO,EAAIzT,EAAE0T,OAAAA,EAyDnD,MANAja,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACJ,CAACiZ,GACHK,EAAKjf,MAAM,CAAG,GADI,EACiBif,CAAI,CAAC,EAAE,EAAE9K,GAEhD,EAAG,CAAC+K,EAAiBN,EAAeK,EAAK,EAGvC,UAAC7F,EAAYyG,QAAQ,CAATzG,CACV5K,MAAO,QACLsL,cACAR,EACAS,OAnFoC,GACxCnY,EAAOqd,EAAKjiB,QAAQ,CAAC4E,GAAOqd,EAAOA,EAAKhZ,IAAI,CAACrE,GAAQqd,EAmFjDjL,QACAgG,aA9DgD,CAAC9N,EAAGiI,KACxD,GAAIoL,EAAoBrT,GACtB,CAD0B,MACnB,EAGT,IAAM0J,EAAQqJ,EAAKE,SAAS,CAAEvd,GAAQA,EAAIuS,EAAE,GAAKA,GAC7C2L,EAAS,EACb,OAAQ5T,EAAE1C,GAAG,EACX,IAAK,UACL,IAAK,YACH,GAAc,YAAV0C,EAAE1C,GAAG,EAAkB,CAACmV,EAC1B,MAEFzS,EAAEvD,OAH2C,OAG7B,GAChBmX,EAASzhB,EAAQ+gB,EAAaxJ,GAAS0J,EAAiB1J,GACpD8I,GACFQ,EAAgBD,CAAI,CAACa,EAAO,EAAEC,MADX,OACwB,OAAS5L,GAEtD8K,CAAI,CAACa,EAAO,EAAEE,QACd,KACF,KAAK,YACL,IAAK,aACH,GAAc,cAAV9T,EAAE1C,GAAG,EAAoB,CAACmV,EAC5B,MAEFzS,EAAEvD,OAH6C,OAG/B,GAChBmX,EAASzhB,EAAQihB,EAAiB1J,GAASwJ,EAAaxJ,GACpD8I,GACFQ,EAAgBD,CAAI,CAACa,EAAO,EAAEC,MADX,OACwB,OAAS5L,GAEtD8K,CAAI,CAACa,EAAO,EAAEE,QACd,KACF,KAAK,QACL,IAAK,IACHd,EAAgB/K,GAChB,KACF,KAAK,MACHjI,EAAEvD,cAAc,GAChBsW,CAAI,CAACjL,EAAQ,EAAE,EAAEgM,QACjB,KACF,KAAK,OACH9T,EAAEvD,cAAc,GAChBsW,CAAI,CAAC,EAAE,EAAEe,OAGb,CACF,EAiBM/F,YAhB8C,GAAQiF,EAAgB/K,YAiBtEqK,CACF,WAEA,UAAChd,MAAAA,CAAII,IAAKuF,EAAc1F,UAAWmC,IAAG,WAAYnC,GAAa,EAA1BmC,CAA6BnE,CAAI,UACnEiH,KAIT,GACA,EAEG3E,WAAW,CAAG,4IIlJZ,SAASke,EACdC,CAAsC,CACtCpjB,CAAc,CACdwD,CAAgB,EAEhB,IAAI6f,EAA2CC,EAAAA,EAAyBA,CAExE,GAAa,cAAT9f,EAAsB,CACxB,IAAM+f,EAAiB,IAAIH,EAAmBG,cAAc,CAAC,CACvDC,EAAeD,EAAeE,OAAO,CAACzjB,EACvB,CAAC,KAAlBwjB,GAAqBD,EAAeG,MAAM,CAACF,EAAc,GAC7DH,EAAuB,CACrB,GAAGD,CAAkB,CACrBG,gBACF,CACF,MAAO,GAAI/f,iBAAuB,CAChC,IAAMmgB,EAAmB,IAAIP,EAAmBO,gBAAgB,CAAC,CAC3DC,EAAiBD,EAAiBF,OAAO,CAACzjB,GACzB,CAAC,IAApB4jB,GAAuBD,EAAiBD,MAAM,CAACE,EAAgB,GACnEP,EAAuB,CACrB,GAAGD,CAAkB,kBACrBO,CACF,CACF,MAAO,GAAIngB,YAAqB,GAC9B6f,EAAuB,CACrB,GAAGD,CAAkB,CACrBS,oBAAqB,CAACT,EAAmBS,mBAAmB,OAEzD,GAAa,UAATrgB,GAAoBA,UAAmB,GAChD6f,EAAuB,CACrB,GAAGD,CAAkB,CACrB1O,iBAAahK,CACf,OACK,GAAa,WAAW,CAApBlH,EACT6f,EAAuB,CACrB,GAAGD,CAAkB,CACrBU,cAAe9jB,CACjB,OACK,GAAa,WAATwD,EAAmB,CAC5B,IAAMugB,EAAe,IAAIX,EAAmBW,YAAY,CAAC,CACnDC,EAAaD,EAAaN,OAAO,CAACzjB,EACrB,CAAC,KAAhBgkB,GAAmBD,EAAaL,MAAM,CAACM,EAAY,GACvDX,EAAuB,CACrB,GAAGD,CAAkB,cACrBW,CACF,CACF,CAEA,MAAO,sBAAEV,CAAqB,CAChC,CAEO,IAAMY,EAA6B,CACxCb,EACAc,KAEA,IAAMC,EAAsBf,EAAmBG,cAAc,CAACa,MAAM,CAClEhB,EAAmBW,YAAY,EAE7BX,EAAmBS,mBAAmB,EAAEM,EAAoBhb,IAAI,CAAC,uBACrE,IAAIkb,EAAkBF,EAAoB/jB,IAAI,CAAC,KACzCkkB,EAAmBlB,EAAmB1O,WAAW,CACnD0O,EAAmB1O,WAAW,CAACtU,IAAI,CAAC,UACpCsK,EAOJ,OANI4Z,IACFD,EAAkBA,EAAkBA,EAAgBD,MAAM,CAAC,gBAAkB,eAKxE,iBAAEC,mBAAiBC,EAAkBC,iBAH1CL,GAAsD,eAArCd,EAAmBU,aAAa,MAC7CpZ,EACA0Y,EAAmBU,aACoC,CAC/D,EAAE,EAEmC,GACnCV,GAAoBG,gBAAgBvjB,OAAO0iB,SAASxf,OACpDkgB,GAAoBO,kBAAkB3jB,OAAO0iB,SAASxf,OACtDkgB,GAAoBW,cAAc/jB,OAAO0iB,SAASxf,SACjDkgB,EAAAA,GAAoBS,sBAAsB,EAC1CW,EAD8C,GACb9P,EAAjC8P,WAA8C,CAAC,EAAE,GACjDpB,CADqD,EACjCU,EADqC,KACzDV,SACwC,eAArCA,EAAmBU,aAAa,GAGhC,CAFE,CAIFU,CAFG,CAEY,CAHb,GAGuC9B,EAAQhO,GAAiC,IAAhBA,CAAgB,EAE3E+P,EAAoB,CAAC/P,EAAgCgQ,CAFMhQ,IAGtEgO,EACEhO,IAEuB,IAAnBA,CAAW,CAAC,EAAE,EACdA,CAAW,CAAC,EAAE,GAAMgQ,EAAAA,EAAgCC,EAAAA,EAAAA,CAAe,CAAC,EAIrE,CAFH,GAFwCD,KAI5BE,EAAgBC,CAAkB,EAChD,OAAOA,GAAWA,GAAS7kB,OAAO0iB,UAAUxf,OAAS,EAAI2hB,GAAS7kB,OAAO0iB,cAAWhY,CACtF,CACO,SAASoa,EAAiB9kB,CAA2B,EAC1D,OAAOA,GAAqB,eAAXA,EAA0BA,OAAS0K,CACtD,CAEO,SAASqa,EAA6B,UAC3CC,CAAQ,iBACRnd,CAAe,WACfoK,CAAS,gBACT+J,CAAc,qBACdiJ,CAAmB,CAQpB,EACC,GAAM,oBAAE7B,CAAkB,WAAE8B,CAAS,CAAE,CAAGrd,EAEpC0b,EAAiB0B,GAAqB1B,gBAAgBrgB,OACxD+hB,EAAoB1B,cAAc,CAClCH,GAAoBG,gBAAkB,EAAE,CACtCI,EAAmBsB,GAAqBtB,kBAAkBzgB,OAC5D+hB,GAAqBtB,iBACrBP,GAAoBO,kBAAoB,EAAE,CACxCI,EAAekB,GAAqBlB,cAAc7gB,OACpD+hB,EAAoBlB,YAAY,CAChCX,GAAoBW,cAAgB,EAAE,CAEtCiB,GAAY,CAACzB,EAAerjB,QAAQ,CAAC8kB,IACvCzB,EAAepa,IAAI,CAAC6b,GAGlB,CAAChJ,GAAkB2H,EAAiBzjB,QAAQ,CAACilB,EAAAA,EAAiBA,CAACC,IAAI,GAAG,EACvD1B,MAAM,CAACC,EAAiBF,OAAO,CAAC0B,EAAAA,EAAiBA,CAACC,IAAI,EAAG,GAGxEnT,GAA2B,OAAdA,GAAsB,CAAC8R,EAAa7jB,QAAQ,CAAC+R,IAC5D8R,EAAa5a,IAAI,CAAC8I,CADsD,EAG1E,IAAMoT,EACJJ,GAAqBvQ,mBAAgBhK,EACjCua,GAAqBvQ,YACrB0O,GAAoB1O,YAEpBoP,EAAgBmB,GAAqBnB,cACvCmB,GAAqBnB,cACrBV,GAAoBU,cAClBwB,EACJL,GAAqBpB,2BAAwBnZ,EACzCua,EAAoBpB,mBAAmB,CACvCT,GAAoBS,oBAG1B,MAAO,CACL,GAAGT,CAAkB,gBACrBG,mBACAI,eACAI,EACArP,YAfkBwQ,OAAYxa,EAAY2a,gBAgB1CvB,EACAD,qBAT0BqB,GAAoBI,CAUhD,CACF,CAcA,IAcanL,EAdPoL,CAcuBnL,EAAiB/Y,IAC5C+Y,EAAS,IAAIC,KAAKC,CAfK,CAACkL,UAeM,CAACnkB,GAAQwN,EAAAA,EAAgBA,EAAE0L,MAAM,CAACH,GAAU,GAAG,EAE3C,CAClCgJ,EAAyD,IAAI,CAC7DqC,EAAmB,KAAK,GAKjBC,OAAOhR,CAHM0O,GAAoB1O,aAAe,GAG9B,CAACiR,GAFmC,QAArBF,EAAiC,EAAJ,EAEhC,EAAI,mLC7M3C,IAAMG,EAAgBzgB,CAAAA,EAAAA,EAAAA,UAAAA,CAAUA,CAC9B,CAAC,OAAEH,EAAQ,EAAE,QAAEvB,EAAS,EAAE,CAAE,GAAGd,EAAM,CAAEmC,IACrC,WAACM,MAAAA,CACCN,IAAKA,EACLO,KAAK,MACLC,aAAW,IACX7B,OAAQA,EACRuB,MAAOA,EACPO,QAAQ,YACP,GAAG5C,CAAI,WAER,UAAC6C,IAAAA,CAAEC,KAAK,wBACN,UAACogB,SAAAA,CAAO/e,GAAG,KAAKgf,GAAG,KAAKC,EAAE,SAE5B,WAACvgB,IAAAA,CAAEwgB,UAAU,gCAAgCC,OAAO,UAAUC,cAAc,mBAC1E,UAACxgB,OAAAA,CAAKC,EAAE,8BAA8BwgB,YAAY,MAClD,UAACzgB,OAAAA,CAAKC,EAAE,+BAA+BwgB,YAAY,aAM3DP,EAAc3gB,WAAW,CAAG,gBCZ5B,IAAMmhB,EAAYvjB,EAAAA,UAAgB,CAChC,CAAC,IADYujB,GACV9lB,CAAK,WAAEqE,CAAS,CAAE,GAAGhC,EAAM,CAAEmC,KAC9B,IAAMuhB,EAAW,CAAC/lB,GAAOgmB,MAAQtjB,OAAOkT,MAAM,CAAC5V,EAAMgmB,KAAK,EAAI,CAAChmB,GAAOiQ,QAAQ,EAAEvQ,MAAM,CACpF,GAAoB,UAAb,OAAOumB,GAEVC,EAAWH,EAASnjB,MAAM,CAAG,EAEnC,MACE,UAACwB,MAAAA,CACCI,IAAKA,EACLH,UAAWmC,IAAGnC,EAAW,CACvBwc,OAAQ,CAACqF,EACT,GAFW1f,WAEI0f,CACjB,GACC,GAAG7jB,CAAI,UAEP6jB,GACC,UAAC9hB,MAAAA,CAAIC,UAAU,mCACZ0hB,EAAS5Z,GAAG,CAAC,GACZ,WAAC/H,MAAAA,CAECC,UAAU,kFAEV,UAACihB,EAAaA,CAAAA,GACd,OADcA,CACd,EAAC1e,OAAAA,UAAMqJ,MAJFmV,OAAOnV,QAW1B,GAGF6V,EAAUnhB,WAAW,CAAG,MAAfmhB,MChBF,IAAMK,EAAqD,CAAC,CACjEC,cAAY,UACZxR,CAAQ,UACRtL,CAAQ,cACR+c,EAAe,CAAEhR,KAAM,YAAaiR,aAAc,KAAM,CAAC,gBACzDC,GAAiB,CAAI,QACrBC,EAAS,MAAM,CACf,GAAGnkB,EACJ,IACC,GAAM,CAACsD,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,YACrB6gB,EAAoBlkB,EAAAA,OAAa,CAAC,IAAM8jB,EAAc,CAACA,EAAa,EAEpEnR,EAAUC,CAAAA,EAAAA,EAAAA,EAAAA,CAAOA,CAAoB,CACzCE,KAAM,YACNiR,aAAc,MACd,GAAGG,CAAiB,GAEhB,CACJC,UAAW,QAAEC,CAAM,aAAEC,CAAW,CAAE,CACnC,CAAG1R,EACE2R,EAAYnkB,OAAOC,IAAI,CAACgkB,GAAQ/jB,MAAM,CAAG,EAQ/C,MACE,WAAC6S,EAAAA,EAAYA,CAAAA,CAAE,GAAGP,CAAO,WACtBqR,GACC,UAACniB,MAAAA,CACCW,KAAK,QACLV,UAAWmC,IAAG,gBAADA,YAA8B,CACzC,WAAYqgB,GAAaD,CAC3B,YAECC,GAAaD,GACZ,UAACE,KAAAA,UACC,UAAChB,EAASA,CACRzhB,UAAU,OADFyhB,cAER9lB,MAAO,CAAEiQ,QAASmW,GAAgBzgB,EAAE,eAAgB,QAM9D,UAACohB,OAAAA,CAAKP,OAAQA,EAAS,GAAGnkB,CAAI,CAAE2kB,UAAU,IAACpS,SAAUM,EAAQsB,YAAY,CAACyQ,IAxBxErS,GACFA,EAAS5R,EAAMkS,EAEnB,CAHgB,WAyBT5L,MAIT,EAAE,EC3EoB,CAAwB,UAAEA,CAAQ,CAAoB,IAC1E,IAAM4L,EAAU2G,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,GAC9B,MAA2B,YAApB,OAAOvS,EAA0BA,EAAS4L,GAAW5L,CAC9D,iBCAA,IAAM4d,EAAkB3kB,EAAAA,UAAgB,CACtC,CAAC,CAAE8B,WAAS,KADO6iB,IACLjX,CAAO,SAAEkX,CAAO,IAAEpQ,CAAE,CAAE,GAAG1U,EAAM,CAAEmC,KAC7C,GAAM,GAAEmB,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,YACvBmgB,EAAW7U,MAAMC,OAAO,CAAClB,GAAWA,EAAU,CAACA,EAAQ,CAE7D,MACE,UAAC7L,MAAAA,CAAI2S,GAAIA,EAAI1S,UAAU,2BACpB8iB,EACC,WAAC/iB,MAAAA,CAAIC,UAAU,uBACb,UAAC+iB,EAAAA,CAAOA,CAAAA,CAAC/gB,KAAK,OACd,UAACghB,IAAAA,UAAG1hB,EAAE,gBAGRogB,GACAA,GAAU5Z,IAAI,CAACiF,EAAOoH,IACpB,MAACpU,MAAAA,CACCI,IAAKA,EACLH,UAAWmC,IAAG,gBAADA,+BAAiDnC,GAE7D,GAAGhC,CAAI,UAER,MAACglB,IAAAA,UAAGjW,KAHC,CAAC,aAAa,EAAEoH,EAAQ,GAAG,IAS5C,GAGF0O,EAAgBviB,WAAW,CAAG,kBClC9B,CDkCeuiB,GClCTI,EAAsE,CAAC,CAC3EC,UAAQ,UACRC,CAAQ,CACT,IACC,GAJmBF,CAIZ3hB,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,YAErB6hB,EAAeF,GAAY5hB,EAAE,YAC7B+hB,EAAeF,GAAY7hB,EAAE,YAE7BgiB,EAAOF,GAAgBC,EAE7B,OAAOC,EACL,iCACG,IACD,WAAC/gB,OAAAA,CAAKvC,UAAU,sCAA4B,IAAEsjB,EAAK,UAEnD,IACN,EChBMC,EAA0D,CAAC,CAC/Djd,OAAK,SADQid,CAEbL,CAAQ,UACRC,CAAQ,UACRtB,CAAQ,WACR7hB,CAAS,UACTiF,CAAQ,CACR,GAAGjH,EACJ,GAEG,WAACsI,QAAAA,CACCtG,UAAWmC,IAAG,QAASnC,EAAW,CAChC,KADWmC,SACI0f,CACjB,GACC,GAAG7jB,CAAI,WAER,WAACuE,OAAAA,WACE+D,EACD,UAAC2c,EAAeA,CAACC,SAAUA,EAAUC,SAAUA,OAEhDle,GAFiBge,ECbX/P,EAET,CAAC,OACH5M,CAAK,MACLvJ,CAAI,UACJmmB,CAAQ,UACRC,CAAQ,iBACRK,CAAe,gBACfpQ,CAAc,aACdqQ,CAAW,SACXX,CAAO,WACP9iB,CAAS,oBACT0X,CAAkB,CAClB,GAAG1Z,EACJ,IACC,IAAM0U,EAAKxU,EAAAA,KAAW,GAChBwlB,EAAU,CAAC,YAAY,EAAEhR,EAAAA,CAAI,CAC7BiR,EAAW,CAAC,aAAa,EAAEjR,EAAAA,CAAI,CAC/B,CAACpR,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,YACrB,UACJqiB,CAAQ,CACRvB,UAAW,CAAEC,QAAM,CAAE,CACtB,CAAG9K,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,GACZqM,EAAaxN,CAAAA,EAAAA,EAAAA,EAAAA,CAAGA,CAACiM,EAAQvlB,GACzB8kB,EAAW,CAAC,CAACgC,EAEfC,EAAiB,GACjBC,EAAa,GACjB,OAAQ/lB,EAAKa,IAAI,EACf,IAAK,WACHilB,EAAiB,gBACjBC,EAAa,uBACb,KACF,KAAK,QACHD,EAAiB,aACjBC,EAAa,eACb,KACF,SACED,EAAiB,mBAErB,CAEA,MACE,WAAC/jB,MAAAA,CAAIC,UAAW0X,YACd,UAAC6L,EAASA,CACRjd,MAAOA,EACP4c,SAFQK,EAGRJ,SAAUA,EACVtB,SAAUA,EACV7hB,UAAWmC,IAAG,aAAc4hB,EAAY3Q,CAA3BjR,WAEb,UAAC6hB,QAAAA,CACCnlB,KAAK,OACJ,GAAGb,CAAI,CACRgC,UAAWmC,IAAG2hB,EAAgB9jB,EAAW,CACvC,WADWmC,EACG0f,CAChB,GACAoC,eAAcpC,EACdqB,SAAUA,EACVpd,mBAAkB,GAAG4d,EAAQ,CAAC,EAAEC,EAAS,CAAC,EAAE3lB,GAAM,CAAC,mBAAmB,EAAI,IAAI,CAC7E,GAAG4lB,EAAS7mB,EAAM,CACjBmmB,WAAUA,GAAW5hB,EAAE,iBACvB,EAD0C,CACvCkiB,CAAe,EAClB,KAGN,UAAC/B,EAASA,CAAC/O,GAAIgR,EAAS/nB,MAAOkoB,IAC/B,EADUpC,CACV,OAACoB,EAAeA,CAACnQ,GAAIiR,EAAU/X,QAAS6X,EAAaX,QAASA,MAGpE,CAHsBD,CAGpB,SGtEF,IAAMqB,EAEF,CAAC,OACH5d,CAAK,MACLvJ,CAAI,UACJomB,CAAQ,UACRD,CAAQ,iBACRM,CAAe,CACfpQ,gBAAc,aACdqQ,CAAW,SACXX,CAAO,WACP9iB,CAAS,oBACT0X,CAAkB,UAClBzS,CAAQ,CACR,GAAGjH,EACJ,IACC,IAAM0U,EAAKxU,EAAAA,KAAW,GAChBwlB,EAAU,CAAC,YAAY,EAAEhR,EAAAA,CAAI,CAC7BiR,EAAW,CAAC,aAAa,EAAEjR,EAAAA,CAAI,CAC/B,CAACpR,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,YACrB,UACJqiB,CAAQ,CACRvB,UAAW,CAAEC,QAAM,CAAE,CACtB,CAAG9K,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,GACZqM,EAAaxN,CAAAA,EAAAA,EAAAA,EAAAA,CAAGA,CAACiM,EAAQvlB,GACzB8kB,EAAW,CAAC,CAACgC,EAEnB,MACE,WAAC9jB,MAAAA,CAAIC,UAAW0X,YACd,UAAC6L,EAASA,CACRjd,MAAOA,EACP4c,SAFQK,EAGRJ,SAAUA,EACVtB,SAAUA,EACV7hB,UAAWmC,IAAG,aAAciR,GAAfjR,SAEb,UAACgiB,SAAAA,CACE,GAAGnmB,CAAI,CACRgC,UAAWmC,IAAGnC,EAAW,CACvB,aADWmC,CACI,CAACnE,EAAKomB,QAAQ,CAC7B,mBAAoBpmB,EAAKomB,QAAQ,CACjC,aAAcvC,CAChB,GACAqB,SAAUA,EACVe,eAAcpC,EACd/b,mBAAkB,GAAG4d,EAAQ,CAAC,EAAEC,EAAAA,CAAU,CACzC,GAAGC,EAAS7mB,EAAM,CACjBmmB,WAAUA,GAAW5hB,EAAE,iBACvB,EAD0C,CACvCkiB,CAAe,EAClB,UAEDve,MAGL,UAACwc,EAASA,CAAC/O,GAAIgR,EAAS/nB,MAAOkoB,IAC/B,EADUpC,CACV,OAACoB,EAAeA,CAACnQ,GAAIiR,EAAU/X,QAAS6X,EAAaX,QAASA,MAGpE,CAHsBD,sEGtCf,IAAMwB,EAAkC,CAAC,SAC9CC,CAAO,aACPC,CAAW,mBACXC,CAAiB,OACjBC,EAAQ,KAAK,CACbC,gBAAc,CACf,IACC,IAAMC,EACJ,kLAEGL,GAAYC,EAKf,MALc,EAKd,EAACK,CAL2B,YAK3BA,CAAW5c,cAAY,6BACrBuc,EACC,UAACM,IAAAA,CACCpiB,WAAS,gBACTuF,cAAY,mBACZhI,UAAWmC,IAAGwiB,EAAgB,cAAjBxiB,GAAmC,CAC9C,QAAmB,QAAVsiB,EACT,UAAqB,UAAVA,CACb,GACA7a,KAAM2a,EACNniB,QAAS,IAAMsiB,MACfla,OAAQga,WAEPF,IAGH,UAACvkB,MAAAA,CACCmG,mBAAiB,cACjBlG,UAAWmC,IAAGwiB,EAAgB,cAAjBxiB,uBAAuD,CAClE,QAAmB,QAAVsiB,EACT,UAAqB,UAAVA,CACb,YAECH,MA3BA,IAgCX,EAAE,0FGpEF,IAAMQ,EAAuBC,IAC3B,IAAM,8BAA8D,aADlCA,6BAGhCC,KAAK,IAIF,SAASC,IACd,GAAM,CAAEhiB,gBAAiBC,CAAe,CAAE,CAAGE,CAAAA,EAAAA,EAAAA,EAAAA,CAAgBA,UAC7D,EAAKxD,CAASA,EAAKsD,EAAD,CAAkBgiB,SAG7B,UAACJ,EAAAA,CAAAA,GAFC,IAGX,kFCFO,IAAM/B,EAAU7kB,EAAAA,UAAgB,CACrC,CAAC,WAAE8B,CAAS,MAAEgC,EAAO,IAAI,OAAEmjB,CAAK,CAAE,GAAGnnB,EAAM,CAAE0H,KAC3C,GAAM,CAAC0f,EAAaC,EAAe,CAAGnnB,EAAAA,QAAc,EAAC,GAUrD,OARAA,EAAAA,SAAe,CAAC,KACd,GAAIinB,EAAO,CACT,IAAMG,EAAQC,WAAW,IAAMF,GAAe,GAAOF,GACrD,MAAO,IAAMK,aAAaF,EAC5B,CACA,OAAOD,GAAe,EACxB,EAAG,CAACF,EAAM,EAGR,WAAC1kB,MAAAA,CACCC,KAAK,MACLC,cAAY,OACZX,UAAWmC,IACT,gBADWA,WAEX,CACE,MAAgB,OAATH,EACP,OAAiB,OAATA,EACR,OAAQA,SACR,OAAiB,OAATA,EACRwa,OAAQ,CAAC4I,CACX,EACAplB,GAEFY,QAAQ,cACRE,KAAK,OACLX,IAAKuF,EACJ,GAAG1H,CAAI,WAER,UAACkjB,SAAAA,CAAOlhB,UAAU,aAAamC,GAAG,KAAKgf,GAAG,KAAKG,OAAO,eAAeE,YAAY,OACjF,UAACzgB,OAAAA,CACCD,KAAK,eACLE,EAAE,m+CAIV,GAGF+hB,EAAQziB,WAAW,CAAG,2TIhCtB,IAAMmlB,EAAcvnB,EAAAA,UAAgB,CAClC,CAAC,WAAE8B,CAAS,SAAE0lB,CAAO,SAAEC,CAAO,UAAEC,CAAQ,aAAEC,CAAW,CAAE,GAAG7nB,EAAM,CAAE0H,IAChE,UAACxD,SAAAA,CACClC,UAAWmC,IACT,gBADWA,wMAEX,oHACA,CACE,sBAAuB,CAACyjB,GAAYF,EACpC,YAAa,CAACE,GAAY,CAACF,GAAWC,EACtC,+HACEC,EACF,YAAaD,EACb,sBAAuBE,YACvB7lB,CACF,GAED,GAAGhC,CAAI,CACRa,KAAK,SACLsB,IAAKuF,KAKX+f,EAAYnlB,WAAW,CAAG,cC0B1B,IAAMwlB,EAAS,aAKTC,EAAgB7nB,EAAAA,UAAgB,CACpC,CACE,CACE8nB,KAAG,QACHC,CAAM,SACNC,EAAU,GAAG,eACbC,CAAa,CACbC,MAAOC,CAAW,aAClBC,CAAW,CACX3X,QAAM,WACN3O,CAAS,CACTumB,oBAAkB,CAClBC,gBAAc,UACdC,CAAQ,OACRC,EAAQ,IAAIniB,IAAM,CAClBoiB,iBAAkBC,EAAyB,EAAE,CAC7CC,aAAcC,EAAqB,EAAE,CACtC,CACDphB,KAEA,IAAM0gB,EAAQC,GAAeU,CAAAA,EAAAA,EAAAA,CAAAA,CAAYA,CAACL,GAEpCM,EAAe,IACnB,IAAMC,EAASjmB,aAAauD,KACtB2iB,EAAaD,EAAS,CAAC,GAAI,GAAI,GAAG,CAAGjmB,EAAE5F,KAAK,CAAC,KAC7C+rB,EAAaF,EACfjmB,EACA,IAAIuD,KACFwQ,SAASmS,CAAU,CAAC,EAAE,EAAI,GAAI,IAC9BnS,SAASmS,CAAU,CAAC,EAAE,EAAI,GAAI,IAAM,EACpCnS,SAASmS,CAAU,CAAC,EAAE,EAAI,GAAI,KAEpC,MAAOtR,CAAAA,EAAAA,EAAAA,EAAAA,CAAMA,CAACuR,EAAMrB,EACtB,EAEMa,EAAmBzoB,EAAAA,OAAa,CACpC,IAAM0oB,EAAuB9e,GAAG,CAACkf,GACjC,CAACJ,EAAuB,EAGpBC,EAAe3oB,EAAAA,OAAa,CAChC,IAAM4oB,EAAmBhf,GAAG,CAACkf,GAC7B,CAACF,EAAmB,EAGhBM,EAAkBlpB,EAAAA,OAAa,CACnC,IAAMmpB,CAAAA,EAAAA,EAAAA,EAAAA,CAAmBA,CAAC,CAAEF,KAAMf,EAAOzX,QAAO,GAChD,CAACyX,EAAOzX,EAAO,EAEX2Y,EAAOC,CAAAA,EAAAA,EAAAA,EAAAA,CAAaA,CAAC,QAAE5Y,CAAO,GAC9B6Y,EAAgBC,CAAAA,EAAAA,EAAAA,EAAAA,CAAaA,CAAC,CAClCN,KAAMf,SACNzX,EACAjR,QAAS,CAAEgqB,UAAW,MAAO,CAC/B,GACMC,EAAWC,CAAAA,EAAAA,EAAAA,EAAAA,CAAYA,CAACjZ,GAAU,OAAS,GAC3CkZ,EAASC,CAAAA,EAAAA,EAAAA,EAAAA,CAAOA,CAACnZ,GACnB,GAAG6Y,EAAcO,IAAI,CAACC,OAAO,GAAGR,EAAcO,IAAI,CAACzE,IAAI,CAAC,CAAC,EAAEkE,EAAcpB,KAAK,CAAC4B,OAAO,GAAGR,EAAcpB,KAAK,CAAC9C,IAAI,EAAE,CACnH,GAAGkE,EAAcpB,KAAK,CAAC9C,IAAI,CAAC,CAAC,EAAEqE,EAAAA,EAAWH,EAAcO,IAAI,CAACC,OAAO,EAAE,CACpEtV,EAAKxU,EAAAA,KAAW,GAChB+pB,EAAU,CAAC,eAAe,EAAEvV,EAAAA,CAAI,CAEtC,MACE,WAAC3S,MAAAA,CAAII,IAAKuF,EAAc1F,UAAWmC,IAAG,gBAADA,eAAiCnC,aACpE,UAACyiB,KAAAA,CACCziB,UAAU,gDACV0S,GAAIuV,EACJjgB,cAAY,wBACZC,YAAU,kBAET4f,IAEH,WAACK,QAAAA,CAAMxnB,KAAK,OAAOV,UAAU,SAASuc,kBAAiB0L,YACrD,UAACE,QAAAA,UACC,UAACC,KAAAA,UACEd,EAAKxf,GAAG,CAAC,GACR,UAACugB,KAAAA,CAAGC,MAAM,MAAoBtoB,UAAU,yCACtC,UAACuC,OAAAA,CAAK5B,aAAW,aAAE4nB,KADAA,QAM3B,UAACC,QAAAA,UACEpB,EAAMtf,GAAG,CAAC,CAAC2gB,EAAGhS,IACb,UAAC2R,KAAAA,UACEK,EAAE3gB,GAAG,CAAC,IACL,GAAI9G,EAAG,CACL,IAAM4kB,EAAW,GAAQ8C,CAAAA,EAAAA,EAAAA,CAAAA,CAASA,CAAC1nB,EAAGglB,IAAUC,GAAUyC,CAAAA,EAAAA,EAAAA,CAAAA,CAASA,CAAC1nB,EAAGilB,GACjE0C,EACJ/C,GAAY8C,CAAAA,EAAAA,EAAAA,CAAAA,CAASA,CAAC1nB,EAAG0lB,IAAWF,GAAkBoC,CAAAA,EAAAA,EAAAA,CAAAA,CAAiBA,CAAC5nB,GACpEkL,EAAW2a,EAAatoB,MAAM,CAChC,CAACsoB,EAAatrB,QAAQ,CAACqa,CAAAA,EAAAA,EAAAA,EAAAA,CAAMA,CAAC5U,EAAG8kB,KACjCK,IAEA0C,CAAAA,EAAAA,EAAAA,CAAAA,CAAQA,CAAC7nB,EAAG8nB,CAAAA,CADZ,CACYA,EAAAA,CAAAA,CAAUA,CAACpC,KAAWqC,CAAAA,EAAAA,EAAAA,CAAAA,CAAOA,CAAC/nB,EAAGgoB,CAAAA,EAAAA,EAAAA,CAAAA,CAAOA,CAACtC,EAAOR,GAAAA,EAC1DR,EACJM,OAAOC,GAASgD,CAAAA,EAAAA,EAAAA,CAAAA,CAAgBA,CAACjoB,EAAG,CAAEkoB,MAAOlD,EAAKmD,IAAKlD,CAAO,GAC1DJ,EAD+D,EAChCtqB,QAAQ,CAACqa,CAAAA,EAAAA,EAAAA,EAAAA,CAAMA,CAAC5U,EAAG8kB,IAElDsD,EAAY,IAAM9C,EAAYtlB,GAyCpC,MACE,UAACqoB,KAAAA,CAAqBrpB,UAAU,eAC7BspB,CAAAA,EAAAA,EAAAA,CAAAA,CAAWA,CAACtoB,EAAGolB,GACd,WAACX,EAAWA,CACV/S,GAAI,CAAC,IADK+S,EACCzkB,EAAEuoB,OAAO,IAAI,CACxBrd,SAAUA,EACV0Z,SAAUA,EACVF,QAASA,EACTG,YAAaA,EACbF,QAAS+C,CAAAA,EAAAA,EAAAA,CAAAA,CAASA,CAAC1nB,EAAG0lB,GACtB3N,UAlDU,CAkDCA,GAjDjB,IAAIyQ,GAAO,EACX,OAAQ/e,EAAE1C,GAAG,EACX,IAAK,IACL,IAAK,QACHqhB,IACAI,GAAO,EACP,KACF,KAAK,aACHjD,EAAmBvlB,EAAEuoB,OAAO,GAAIP,CAAAA,EAAAA,EAAAA,CAAAA,CAAOA,CAAChoB,EAAG,GAAGuoB,OAAO,IACrD,KACF,KAAK,YACHhD,EAAmBvlB,EAAEuoB,OAAO,GAAIE,CAAAA,EAAAA,EAAAA,CAAAA,CAAOA,CAACzoB,EAAG,GAAGuoB,OAAO,IACrDC,EAAO,GACP,KACF,KAAK,YACHjD,EAAmBvlB,EAAEuoB,OAAO,GAAIP,CAAAA,EAAAA,EAAAA,CAAAA,CAAOA,CAAChoB,EAAG,GAAGuoB,OAAO,IACrDC,EAAO,GACP,KACF,KAAK,UACHjD,EAAmBvlB,EAAEuoB,OAAO,GAAIE,CAAAA,EAAAA,EAAAA,CAAAA,CAAOA,CAACzoB,EAAG,GAAGuoB,OAAO,IACrDC,GAAO,EACP,KACF,KAAK,OACHjD,EAAmBvlB,EAAEuoB,OAAO,GAAIG,CAAAA,EAAAA,EAAAA,CAAAA,CAAWA,CAAC1oB,GAAGuoB,OAAO,IACtDC,GAAO,EACP,KACF,KAAK,MACHjD,EAAmBvlB,EAAEuoB,OAAO,GAAII,CAAAA,EAAAA,EAAAA,CAAAA,CAAaA,CAAC3oB,GAAGuoB,OAAO,IACxDC,EAAO,EAIX,CACIA,IACF/e,EADQ,eACS,GACjBA,EAAEvD,cAAc,GAEpB,EAaQ9E,QAAS,IACHwnB,EAAIC,OAAO,EAAID,EAAIE,OAAO,EAAE,GAGlC,EACAnN,QAAS,IAAM4J,EAAmBvlB,EAAEuoB,OAAO,IAC3C1Q,SAAU8P,EAAO,EAAI,CAAC,YAEtB,UAACpmB,OAAAA,CAAKvC,UAAU,mBAAWymB,EAAWA,EAASzlB,GAAK,KACpD,UAACuB,OAAAA,CAAK5B,aAAW,aACdK,EAAE+oB,kBAAkB,CAAC7f,EAAAA,EAAgBA,CAAE,CACtC8b,IAAK,SACP,QAGF,MAzBGhlB,EAAEuoB,OAAO,GA4BtB,CACA,OAAO,IACT,IAvFOd,CAAC,CAAC,EAAE,EAAEc,WAAa9S,WA8FxC,GAGFsP,EAAczlB,WAAW,CAAG,+BCjP5B,IAAM0pB,EAAe,aAsDRC,EAAwD,CAAC,cACpEC,CAAY,eACZ/D,CAAa,UACblhB,CAAQ,QACR0J,CAAM,KACNqX,CAAG,QACHC,CAAM,SACNC,CAAO,aACPI,CAAW,gBACX6D,CAAc,UACd1D,CAAQ,cACR2D,CAAY,SACZxe,CAAO,QACPye,CAAM,OACNC,CAAK,UACLC,CAAQ,kBACR5D,CAAgB,cAChBE,CAAY,CACZH,QAAQ,IAAIniB,IAAM,4BAClBimB,CAA0B,CAC1B,GAAGxsB,EACJ,IACC,IAAMmC,EAAMjC,EAAAA,MAAY,CAAiB,MACnCusB,EAAYvsB,EAAAA,MAAY,CAAiB,MACzCwsB,EAAYxsB,EAAAA,MAAY,CAAiB,MACzC,CAACysB,EAAYC,EAAc,CAAG1sB,EAAAA,QAAc,GAC5C2sB,EAAmB3sB,EAAAA,MAAY,CAAoB,MACnD4sB,EAAe5sB,EAAAA,MAAY,CAAoB,MAC/C,CAACkoB,EAAO2E,EAAS,CAAG7sB,EAAAA,QAAc,CAAC6oB,CAAAA,EAAAA,EAAAA,CAAAA,CAAYA,CAACf,GAAOU,IACvD,CAACplB,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,gBACrBypB,EAAUhF,EAAMgD,CAAAA,EAAAA,EAAAA,CAAAA,CAAOA,CAAChD,EAAK,GAAKA,EAClCiF,EAAe9E,IAAwBmD,CAAAA,EAAAA,EAAAA,CAAAA,CAAWA,CAAClD,EAAOM,EAA3B,CAC/BwE,EAAkBhtB,EAAAA,MAAY,CAAC8nB,GAAOU,GAEtCyE,EAAc,IACdhB,GAAkBnpB,EAChBglB,CADmB,EACZ,CAACC,EACNiE,EAIExB,CAAAA,EAAAA,CALY,CAKZA,CAAAA,CAASA,CAAC1nB,EAAGglB,EAJD,EAIS+C,CAAAA,EAAAA,EAAAA,CAAAA,CAAOA,CAAC/nB,EAAGglB,GAClCmE,EAAenpB,CADyB,EAE/B6nB,CAAAA,EAAAA,EAAAA,CAAAA,CAAQA,CAAC7nB,EAAGglB,IACrBM,EAAYtlB,GAOV+nB,CAAAA,EAAAA,EAAAA,CAAAA,CAAOA,CAAC/nB,EAAGglB,GACbmE,EAAenpB,CADI,EAEV6nB,CAAAA,EAAAA,EAAAA,CAAAA,CAAQA,CAAC7nB,EAAGglB,IACrBM,EAD2B,IAK/BA,EAAYtlB,GACZmpB,OAAepkB,IAGjBugB,EAAYtlB,GAEVwpB,GAA8BxpB,GAAG,CACnCkqB,EAAgBjsB,OAAO,EAAG+B,EAE5BsB,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,oCACb,EAEM8oB,EAAc,IAClB,GAAI3E,EAAU,CACZ,IAAI0D,IAAkBnpB,GAAG,CACnBglB,GAAQC,EAoBZ,EApBW,IAAS,CAoBbQ,EAASzlB,EAAG,IAnBjB,GAAIkpB,EAAc,CAChB,GAAIxB,CAAAA,EAAAA,EAAAA,CAAAA,CAASA,CAAC1nB,EAAGglB,IAAQ+C,CAAAA,EAAAA,EAAAA,CAAAA,CAAOA,CAAC/nB,EAAGglB,GAClC,GADwC,IACjCS,EAASzlB,GAAG,GAErB,GAAI6nB,CAAAA,EAAAA,EAAAA,CAAAA,CAAQA,CAAC7nB,EAAGglB,GACd,GADoB,IACbS,EAASzlB,EAAG,GAEvB,KAAO,CACL,GAAI+nB,CAAAA,EAAAA,EAAAA,CAAAA,CAAOA,CAAC/nB,EAAGglB,GACb,GADmB,IACZS,EAASzlB,GAAG,GAErB,GAAI6nB,CAAAA,EAAAA,EAAAA,CAAAA,CAAQA,CAAC7nB,EAAGglB,GACd,GADoB,IACbS,EAASzlB,GAAG,EAEvB,CAOJ,OAAOylB,EAASzlB,EAClB,CAGA,OAAOA,EAAE+oB,kBAAkB,CAACpb,EAAQ,CAAE0c,UAAW,MAAO,EAC1D,EAEMC,EAAgB,IACpBP,EAAS/pB,EACX,EAEMulB,EAAqB,CAACvlB,EAAWuqB,EAAeC,KACpD,GAAID,EAAM,CACRX,EAAcW,GACd,IAAME,EAA+B,IAAhBD,EAAoBpF,EAAQsF,CAAAA,EAAAA,EAAAA,CAAAA,CAASA,CAACtF,EAAO,GAClE,GAAI,CAACkD,CAAAA,EAAAA,EAAAA,CAAAA,CAAWA,CAACmC,EAAcF,GAAO,CACpC,GAAIA,EAAOvqB,EAAG,CACZ,GAAoB,IAAhBwqB,CAAqB,CAAC,CAACd,EAAUzrB,OAAO,EAAE0sB,aAAc,OAC5DL,EAAcI,CAAAA,EAAAA,EAAAA,CAAAA,CAASA,CAACtF,EAAO,GACjC,CACImF,EAAOvqB,GAAqB,GAAG,CAAnBwqB,GACdF,EAAcM,CAAAA,EAAAA,EAAAA,CAAAA,CAASA,CAACxF,EAAO,GAEnC,CACF,CACF,EAaA,OAXAloB,EAAAA,SAAe,CAAC,KACViC,EAAIlB,OAAO,EAAE,sBACO,KACpB,IAAM4sB,EAAU1rB,EAAIlB,OAAO,EAAE6sB,cAAiC,CAAC,KAAK,EAAEnB,EAAAA,CAAY,EAC9EkB,GACFA,EAAQtN,IADG,CACE,EAEjB,EAEJ,EAAG,CAACoM,EAAYxqB,EAAI,EAGlB,WAACJ,MAAAA,CAAII,IAAKA,EAAKH,UAAU,mBAAmBgI,cAAY,+BACrD,CAAC,CAACge,GACD,iCACE,UAAChC,QAAAA,CACCnlB,KAAK,SACL9B,KAAMutB,EACN5X,GAAI,GAAG2X,EAAO,CAAC,EAAEC,EAAAA,CAAO,CACxBvd,MAAOiZ,GAAOpQ,CAAAA,EAAAA,EAAAA,EAAAA,CAAMA,CAACoQ,EAAKgE,KAE5B,UAAChG,QAAAA,CACCnlB,KAAK,SACL9B,KAAMwtB,EACN7X,GAAI,GAAG2X,EAAO,CAAC,EAAEE,EAAAA,CAAU,CAC3Bxd,MACEkZ,EAASrQ,CAAAA,EAAAA,EAAAA,EAAAA,CAAMA,CAACqQ,EAAQ+D,GAAgBhE,GAAOpQ,CAAAA,EAAAA,EAAAA,EAAAA,CAAMA,CAACoT,CAAAA,EAAAA,EAAAA,CAAAA,CAAOA,CAAChD,EAAK,GAAIgE,QAK9EQ,EACC,UAACA,EAAAA,CACCuB,qBAAsBb,EAAgBjsB,OAAO,CAC7C+sB,cAAeV,IAEf,KACJ,WAACvrB,MAAAA,CACCC,UAAWmC,IAAG,gBAADA,OAAyB,CACpCqa,OAAQ,CAAC,CAACgO,CACZ,aAEA,UAACyB,EAAAA,EAAWA,CAAAA,CACV7pB,QAAS,IAAMkpB,EAAcM,CAAAA,EAAAA,EAAAA,CAAAA,CAASA,CAACxF,EAAO,IAC9CjmB,IAAK0qB,EACL3e,SAAU+e,EACV3kB,MAAOhF,EAAE,mBAEX,UAAC4qB,EAAAA,EAAWA,CAAAA,CACV9pB,QAAS,IAAMkpB,EAAcI,CAAAA,EAAAA,EAAAA,CAAAA,CAASA,CAACtF,EAAO,IAC9CjmB,IAAK2qB,EACLxkB,MAAOhF,EAAE,kBAKb,WAACvB,MAAAA,CAAIC,UAAU,YAAYU,KAAK,cAAc0F,aAAYgkB,EAAe,GAAGpsB,CAAI,WAC9E,UAAC+B,MAAAA,CAAIkI,YAAU,SAASjI,UAAU,mBAC/B4L,IAEH,WAAC7L,MAAAA,CAAIC,UAAU,sCACb,UAAC+lB,EAAaA,CACZ5lB,IAAKsqB,EACLnE,IAFYP,QAECoF,EACbxc,OAAQA,EACRqX,IAAKA,EACLC,OAAQA,GAAU+E,EAClB5E,MAAOA,EACPF,QAASA,EACTyE,WAAYA,EACZpE,mBAAoB,CAACvlB,EAAGuqB,IAAShF,EAAmBvlB,EAAGuqB,EAAM,GAC7D/E,cAAc,IACdC,SAAU2E,EACVjF,cAAeA,EACfO,MAAOA,EACPC,iBAAkBA,EAClBE,aAAcA,IAEhB,UAACd,EAAaA,CACZ5lB,IAAKuqB,EACLpE,IAFYP,QAECoF,EACbxc,OAAQA,EACRqX,IAAKA,EACLC,OAAQA,GAAU+E,EAClB9E,QAASA,EACTE,MAAOsF,CAAAA,EAAAA,EAAAA,CAAAA,CAASA,CAACtF,EAAO,GACxBpmB,UAAU,kBACV2qB,WAAYA,EACZpE,mBAAoB,CAACvlB,EAAGuqB,IAAShF,EAAmBvlB,EAAGuqB,EAAM,GAC7D9E,SAAU2E,EACVjF,cAAeA,EACfO,MAAOA,EACPC,iBAAkBA,EAClBE,aAAcA,IAEf5hB,UAKX,EAAE,kFEnSK,IAAMknB,EAAiB,CAAC,aAAErpB,CAAW,CAA4B,IACtE,GAAM,CAAEmO,WAAS,CAAE,CAAGuG,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,GAC9B4U,EAAkBxW,CAAAA,EAAAA,EAAAA,EAAAA,CAAMA,CAAC3E,KAAaob,OAAOvpB,YAAa,cAIhE,MAFI,IAAgB,CAACwpB,CAAAA,EAAAA,EAAAA,CAAAA,CAAOA,CAACxpB,EAAaspB,IAAsB,CAACtpB,GAAespB,CAAAA,GAC9E9pB,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,gBACN,IACT,EAAE,iLCTK,IAAMiqB,EAA4B,CAACC,EAAoBC,KAC5D,GAAI,CAACD,GAAa,CAACC,EACjB,MAAO,CADmB,CACjB,CAEX,IAAMC,EAAqBpoB,CAAAA,EAAAA,EAAAA,CAAAA,CAAQA,CAACkoB,GAAWG,WAAW,GACpDC,EAAmBtoB,CAAAA,EAAAA,EAAAA,CAAAA,CAAQA,CAACmoB,GAASE,WAAW,GAEhDE,EAAW,CACf3D,MAAO,IAAI3kB,KAAKmoB,GAChBvD,IAAK,IAAI5kB,KAAKqoB,EAChB,EAEA,MAAOE,CAAAA,EAAAA,EAAAA,CAAAA,CAAmBA,CAACD,EAC7B,EACaE,EAA0B,KACrC,IAAMC,EAAiB,IAAIzoB,OAAOooB,WAAW,GACvCM,EAAiBC,CAAAA,EAAAA,EAAAA,CAAAA,CAAQA,CAACF,EAAgB,GAAGL,WAAW,GAC9D,MAAO,gBAAEK,iBAAgBC,CAAe,CAC1C,EAAE,EACkCva,GAClC,EAIuBA,EACpBpH,OAAO,CAAC,OAAQ,KAChBA,OAAO,CAAC,iBAAkB,IAC1BA,OAAO,CAAC,OAAQ,KAChBA,OAAO,CAAC,OAAQ,KAChB3O,WAAW,GARL,GCHEwwB,EAA6D,CAAC,CACzExe,QAAM,gBACNqe,CAAc,gBACdC,CAAc,sBACdlB,CAAoB,eACpBC,CAAa,CACd,IACC,IAAMoB,EAAgBC,CAAAA,EAAAA,EAAAA,EAAAA,CAAaA,CAAC,uBAC9BC,EAAoC,EAAE,CACtCC,EAA0BP,GAAkB1oB,CAAAA,EAAAA,EAAAA,CAAAA,CAAQA,CAAC0oB,GACrD,CAACQ,EAAkBC,EAAoB,CAAGnQ,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,CACtD,GAA4ByJ,CAAAA,EAAAA,EAAAA,CAAAA,CAAYA,CAACwG,IAA6BxG,CAAAA,EAAAA,EAAAA,CAAAA,CAAYA,CAAC,IAAIxiB,OAEnF,CAACmpB,EAAkBC,EAAoB,CAAGrQ,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,CAACiQ,GAA2B,IAAIhpB,MAClF,CAACqpB,EAAcC,EAAgB,CAAGvQ,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,CAAC,IAC3C,CAACwQ,EAAsBC,EAAsB,CAAGzQ,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GACzD0Q,EAAczB,EAA0BS,EAAgBC,GAExDlU,EAAY,IAChB,OAAQtO,EAAE1C,GAHiCwkB,EAIzC,IAAK,MACH9hB,EAAEvD,cAAc,GAChBomB,CAAY,CAACA,EAAa/uB,MAAM,CAAG,EAAE,EAAEggB,QACvC,KACF,KAAK,OACH9T,EAAEvD,cAAc,GAChBomB,CAAY,CAAC,EAAE,EAAE/O,OAErB,CACF,EAEM0P,EAAU,CAACxjB,EAAqC0J,KACpD,IAAIkK,EAAS,EACb,OAAQ5T,EAAE1C,GAAG,EACX,IAAK,YACHsW,EAASlK,EAAQ,GAAK,EAAIA,EAAQ,EAAImZ,EAAa/uB,MAAM,CAAG,EAC5D+uB,CAAY,CAACjP,EAAO,EAAEE,QACtB,KACF,KAAK,aACHF,EAASlK,EAAQ,GAAKmZ,EAAa/uB,MAAM,CAAG,EAAI4V,EAAQ,EAAI,EAC5DmZ,CAAY,CAACjP,EAAO,EAAEE,OAK1B,CACF,EAEAra,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACR,GAAI6nB,EAAsB,CACxB,IAAMmC,EAA4BnH,CAAAA,EAAAA,EAAAA,CAAAA,CAAYA,CAACgF,GACzCoC,EAAyBpH,CAAAA,EAAAA,EAAAA,CAAAA,CAAYA,CAAC2G,GACvCpB,CAAAA,EAAAA,EAAAA,CAAAA,CAAOA,CAAC4B,EAA2BC,KACtCV,EAAoBS,GACpB,GAAiBL,GAAgB,GACjCF,EAAoB5B,GAExB,CALmE,EAMlE,CAACA,EAAsB6B,EAAcF,EAAiB,EAEzD,IAAMU,EAAaC,CAAAA,EAAAA,EAAAA,OAAAA,CAAOA,CAAC,IACzB,EAGOL,EAHH,CAGgBlmB,IAAI,IAHN,IAIVwmB,EAAahC,EAAAA,CAAAA,CAAOA,EAAiBkB,GACrCe,EAAYC,EAAezE,kBAAkB,CAACpb,EAAQ,CAC1DyX,MAAO,QACP2B,KAAM,SACR,GACM0G,EAAyBD,EAAezE,kBAAkB,CAACpb,EAAQ,CACvEyX,MAAO,OACP2B,KAAM,SACR,GACA,MAAO,gBACLyG,aACAF,YACAC,EACAE,wBACF,CACF,GAlBS,EAAE,CAmBV,CAAC9f,EAAQqf,EAAaR,EAAiB,EAEpCkB,EAAyB,KACxBZ,IACHxrB,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,SADc,iBAEzByrB,GAAsB,IAExBzrB,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,+BACb,EAEA,MACE,UAACvC,MAAAA,CACCC,UAAU,2FACVU,KAAK,UACLsH,cAAY,qCAEXomB,EAAWtmB,GAAG,CACb,CAAC,gBAAE0mB,CAAc,WAAED,CAAS,CAAED,YAAU,wBAAEG,CAAsB,CAAE,CAAEta,IAClE,UAACjS,SAAAA,CACClC,UAAWmC,IACT,gBADWA,2DAEX,CACE,4BAA6BmsB,CAC/B,GAEF5b,GAAIic,EAAoB,CAAC,IAAI,EAAExa,EAAQ,EAAE,CAAC,EAAEoa,EAAAA,CAAW,EAEvD1V,SAAU,EAAmB,EAAL,CAAC,EACzB1Y,IAAK,IACEyuB,IAAI,IAIPA,EAAGC,MADW,QACG,CAAC,CAChBC,OAAQ1B,EAAgB,SAAW,QACnC2B,SAAU,SACVC,MAAO,SACT,GACIpB,IACFgB,EAAGrQ,KAAK,GADQ,GAEA,KAGpB+O,EAAa9oB,IAAI,CAACoqB,GACpB,EACAxsB,QAAS,KACP4pB,IAAgBwC,GAChBf,EAAoBe,GACpBX,GAAgB,GAChBa,GACF,EACA3V,UAAWA,EACXkV,QAAS,GAAOA,EAAQxjB,EAAG0J,GAC3ByE,gBAAe0V,EACfloB,aAAYqoB,EACZ/tB,KAAK,MACL7B,KAAK,kBAEL,UAAC0D,OAAAA,CACCvC,UAAWmC,IAAG,gBAADA,IAAsB,CACjC,eAAgBmsB,EAChB,gBAAiB,CAACA,CACpB,YAECC,KAtCEA,KA6CjB,EAAE,EAEwC,CAAC,UAAE9kB,CAAQ,CAAwB,IAC3E,GAAM,gBAAEujB,CAAc,gBAAEC,CAAc,CAAE,CAAGF,IAsB3C,MApB0B,CAAC,YAFuCA,UAGhEhB,CAAoB,CACpBC,eAAa,CAOd,GAEG,UAACmB,EAAAA,CACCH,eAAgBA,EAChBC,eAAgBA,EAChBte,OAAQlF,EACRuiB,cAAeA,EACfD,qBAAsBA,GAK9B,EAAE,ECjM6B,KAC7B,GAAM,CACJ5oB,OAAQ,QAAEwL,CAAM,CAAE,CACnB,CAAGvL,CAAAA,EAAAA,EAAAA,EAAAA,CAAgBA,GACdqG,EAAWkF,GAAU,KACrB,CAACsgB,EAAiBC,EAAmB,CAAG5R,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GAIjD,CACJ6R,aAAc,CAAEC,EAAGD,CAAY,CAAE,UACjCE,CAAQ,CACT,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAmBA,CAAC,CACtBC,QAASC,EAAAA,EAAyBA,CAACD,OAAO,CAC1CE,cAAeR,CACjB,GAEMS,EAAiBL,GAAYF,EAcnC,MAAO,CACLQ,sBA1B4B,KAC5BT,GAAmB,EACrB,EAyBEU,sBAd4BvB,CAAAA,EAAAA,EAAAA,OAAAA,CAAOA,CACnC,IACEqB,EACI,CAEIlF,2BAA4BA,EAA2B,UAAE/gB,CAAS,EAEtE,EACA,CAAC,EACP,CAACimB,EAAgBjmB,EAAS,CAM5B,CACF,EAAE,kLC9BK,IAAMomB,EAA2C,CACtDxnB,cAAe,iBACfC,gBAAiB,CAAC;;;;;CAKnB,CAAC,CACAC,eAAgB,kCAClB,EAAE,EA2BkD,CAClDF,cAAe,QACfC,gBAAiB,CAAC;;;;;;;;;;;CAWnB,CAAC,CACAC,eAAgB,8BAClB,EAAE,ECpDqCA,cAAc,CAAC,EAEXA,cAAc,CCXlD,EDS+BunB,ECTzBC,EAAsB,CACjCC,GAAI,UACJC,GAAI,YACJC,GAAI,QACJC,GAAI,QACJC,GAAI,UACJC,GAAI,UACJC,GAAI,aACJC,GAAI,QACJC,GAAI,cACJ9d,GAAI,mBACJ+d,GAAI,WACJC,GAAI,MACJC,GAAI,MACJC,GAAI,aACJC,GAAI,QACJC,GAAI,SACJC,GAAI,eACJC,GAAI,YACJC,GAAI,UACJC,GAAI,UACJ7I,GAAI,MACJD,GAAI,eACJ+I,GAAI,aACJ,UAAW,OACX,UAAW,MACb,EAAW,qCCuKJ,SAASC,EAAyBC,CAAwB,EAC/D,OAAOA,EAAUh2B,MAAM,CAAC,IACjBqB,EAAK4J,KAAK,EAAE,CACfgrB,EAAAA,EAAAA,EAAAA,CAAUA,CACR,+BACA,CAAC,oCAAoC,EAAE50B,EAAKqQ,KAAK,EAAE,EAGhDrQ,EAAK4J,KAAK,EAErB,CAEO,SAASirB,EAAoBhe,CAAY,EAC9C,GAAa,SAAS,CAAlBA,EACF,MAAO,UAET,GAAa,SAAS,CAAlBA,EACF,MAAO,UAET,IAAMie,EAAeje,EAAKnY,KAAK,CAAC,IAAI,CAAC,EAAE,CACvC,OAAOo2B,GAAc70B,eAAiB,IACxC,CAEO,SAAS80B,EAAgBC,CAAiB,CAAEC,CAAyB,EAC1E,IAAMC,EAAchyB,EAAAA,CAASA,CACzBR,OAAOM,QAAQ,CAACkK,IAAI,CAAC0B,OAAO,CAC1BumB,OAAO,CAAC,CAAC,EAAEzyB,OAAOM,QAAQ,CAACvE,QAAQ,CAACC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EACpD,CAAC,CAAC,EAAEs2B,EAAU,CAAC,CAAC,EAElB,GACJ,OAAOC,EAAkBC,EAAYx2B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAGw2B,CACvD,CAEO,SAASE,EAAaT,CAAwB,EAGnD,MAAO,IAFUA,EAAUh2B,MAAM,CAAC,GAAUuB,CAAAA,EAAAA,EAAAA,CAAAA,CAAKA,CAACF,EAAKqQ,KAAK,MAC3CskB,EAAUh2B,MAAM,CAAC,GAAU,CAACuB,CAAAA,EAAAA,EAAAA,CAAAA,CAAKA,CAACF,EAAKqQ,KAAK,GAC5B,qECrL5B,SAASglB,EAAiB,SAC/BroB,EAAU,EAAE,eACZnC,CAAa,SACbyqB,EAAU,EAAE,QACZrjB,EAAS,IAAI,cACbsjB,CAAY,cACZC,CAAY,kBACZC,CAAgB,cAChBC,CAAY,OACZC,CAAK,qBACLC,CAAmB,CACnB,GAAGt0B,EACmB,EACtB,GAAM,CAACu0B,EAAkBC,EAAoB,CAAGt0B,EAAAA,QAAc,GAIxD,CAACu0B,EAAaC,EAAe,CAAGx0B,EAAAA,QAAc,EAAC,GAC/C,CAAEoD,GAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,yBACvBoxB,EAAiBrvB,CAAAA,EAAAA,EAAAA,MAAAA,CAAMA,CAAuB,MAC9CsvB,EAAoBtvB,CAAAA,EAAAA,EAAAA,MAAAA,CAAMA,CAAoB,MAC9C,SAAEwf,CAAO,CAAE+P,cAAY,yBAAEC,CAAuB,wBAAEC,CAAsB,CAAE,CDhD3E,SAASC,SACdtpB,CAAO,SACPsoB,CAAO,iBACPL,CAAe,cACfS,CAAY,CAMb,MHmCCa,EGlCA,GAAM,CAAEt0B,GHkCmD,EGlC7Cu0B,CAAkB,CAAEC,KHsCjC,MGtC6CC,CAAqB,CAAE,CHF9DrqB,CAAAA,CGGLsqB,CHHKtqB,EAAAA,CAAAA,CAAQA,CAA6D,CAC1EC,SAAU,CAAC6mB,OAPboD,EAOiE,GGG3D,CAAEt0B,GHVwD,EAChEjB,CGSuB,CAAEy1B,GADiBE,EHLzC,MGMoCC,CAAgB,CAAE,GAAGC,CACxD,CACEvB,QAASA,EAAQwB,WAAW,EAC9B,EHmCKzqB,CAAAA,EAAAA,EAAAA,CAAAA,CAAQA,CAAyD,CACtEC,SAAU,CAAC8mB,EAAsCmD,EAAU,CGlCzD91B,QAAS,CAAC,CAAC60B,CHoCf,IGjCMyB,EAAWC,CAAAA,EAAAA,EAAAA,EAAAA,CAAWA,GAGtBC,EAAwCT,GAAoBhqB,gBAAgBjM,KAChF,GAAoB,gCAAZ22B,EAAG72B,IAAI,GACdoM,OAEC0qB,EAA6B,EAAE,CAG7BC,EAAeH,GAAwBI,WAAW,CAACrqB,EAAQ,CAC3DsqB,EAAeL,GAAwBtC,UACvC4C,EAAqBH,EACvB,OAAQx1B,IAAI,CAACw1B,GAAgDz4B,MAAM,CACjE,GAAc,CAACy4B,GAAc,CAACrqB,EAAS,EAAElO,SAASy2B,EAAQwB,WAAW,KAEvE,EAAE,CAC+B9pB,GAAasqB,IAEhDH,EAAmBx1B,EAF2B,CAAC,IAErB61B,OAAO,CAACF,GAC/B34B,MAAM,CACL,CAAC,CAACqB,EAAMy3B,EAAU,GAAKA,GAAW54B,SAASmO,IAAY,CAACuqB,EAAmB14B,QAAQ,CAACmB,IAErFoL,GAAG,CAAC,CAAC,CAACpL,EAAK,GAAKA,EAAAA,EAKrB,IAAMwR,EAAaylB,GAAwBzlB,WACrCkmB,EAAqBT,GAAwBS,mBAC7CC,EAAanmB,EACf,IAAIlE,EAAAA,UAAUA,CAAC,CAAEjN,KAAM,uCAA6BmR,CAAW,GAC/D,KACEomB,EAA2B,CAAC,CAAC5qB,GAAW,CAAC,CAACwE,GAAc,CAAC,CAACkmB,GAAsBC,EAChFt5B,EAAM6E,EAAAA,CAASA,CAAGR,OAAOM,QAAQ,CAACkK,IAAI,CAAG,GAC3C0qB,IACFT,EAAmBO,EAAmB/4B,MAAM,CAAC,GAC3Cg5B,EAAWE,GAAG,CAAC,EAFW,OAET7qB,WAASD,EAAU1O,KAAI,KAK5C,IAAMy5B,EAAeC,GAAWC,OAAOC,cAAcC,gBACjDH,GAAWC,OAAOC,cAAcC,gBAAgBpjB,OAAO,CAACqjB,EAAKprB,KAExDoqB,GAAkBt4B,SAASg2B,EAAoB9nB,GAAU8J,MAAQ,MACpB,MAC9C,CADAge,EAAoB9nB,GAAU8J,MAAQ,KAEtCshB,EAAIrwB,IAAI,CAAC,CACP,GAAGiF,CAAQ,CACX8J,KAAMge,EAAoB9nB,GAAU8J,MAAQ,GAC9C,GAEKshB,GACN,EAAE,EACJ,EAAE,CAEDC,EAAuBN,EAAan5B,MAAM,CAAC,GAAUqB,GAAMq4B,SAC3DC,EAAsBR,EAAan5B,MAAM,CAAC,GAAUqB,GAAMu4B,YAC1DC,EAAa9C,GAAc+C,UAAU,GACrCC,EAD2C,CAE/C,CACE9uB,MAAOypB,EAAoB,EAAK,CAChChjB,MAAO,KACPnD,GAF0B,EAEpB,CAACsrB,GAAczD,EAAgB,KAAME,EAAAA,CAAe,EAAM,GAChE0D,YAAa,CAAC,CAACH,CACjB,KACGrB,EAAiB/rB,GAAG,CAAC,IACtB,IAAMwtB,EAAWlD,GAAc+C,UAAU,CAACz4B,EAAyC,CAEnF,MAAO,CACL4J,MAAOypB,CAAmB,CAACrzB,EAAyC,CACpEqQ,MAAOrQ,EACPkN,KAAM,IAAa6nB,EAAgB/0B,EAAMi1B,EAAAA,CAAe,EAAM,GAC9D0D,YALkB,CAAC,CAACC,CAMtB,CACF,MACGR,EAAqBhtB,GAAG,CAAC,GAAW,EACrCxB,EADqC,IAC9BypB,CAAmB,CAACrzB,GAAM6W,KAAyC,EAAI7W,EAAK4J,KAAK,CACxFyG,MAAOrQ,GAAM6W,MAAQ,GACrB3J,KACEwoB,GAAc+C,UAAU,CAACz4B,GAAM6W,KAAyC,EACxE7W,GAAMq4B,SACN,GACFM,aAAa,EACf,GACD,CACKE,EAAkC,IACnCP,EAAoBltB,GAAG,CAAC,GAAW,EACpCxB,EADoC,IAC7BypB,CAAmB,CAACrzB,GAAM6W,KAAyC,EAAI7W,EAAK4J,KAAK,CACxFyG,MAAOrQ,GAAM6W,MAAQ,GACrB3J,KACEwoB,GAAcoD,SAAS,CAAC94B,EAAK6W,IAAI,CAAqC,EACtE7W,GAAMu4B,YACN,GACFI,aAAa,EACf,GACD,CAEKI,EAA6BL,EAAkBttB,GAAG,CAAC,GAAUpL,EAAKqQ,KAAK,EACvE2oB,EAA0Br3B,OAAOC,IAAI,CAAC8zB,GAAc+C,UAAY,CAAC,GAAG95B,MAAM,CAC9E,GAAU,CAACo6B,EAA2Bl6B,QAAQ,CAACmB,IAG7Cg5B,EAAwBn3B,MAAM,EAAE,EAChBiG,IAAI,IACjBkxB,EAAwB5tB,GAAG,CAAC,GAAW,EACxCxB,EADwC,IACjCypB,CAAmB,CAACrzB,EAAyC,CACpEqQ,MAAOrQ,EACPkN,KAAMwoB,GAAc+C,UAAU,CAACz4B,EAAyC,EAAI,GAC5E24B,aAAa,EACf,IAIJ,IAAMM,EAA4BJ,EAAiBztB,GAAG,CAAC,GAAUpL,EAAKqQ,KAAK,EACrE6oB,EAAyBv3B,OAAOC,IAAI,CAAC8zB,GAAcoD,SAAW,CAAC,GAAGn6B,MAAM,CAC5E,GACE,CAACs6B,EAA0Bp6B,QAAQ,CAACmB,IAAS,CAAC+4B,EAA2Bl6B,QAAQ,CAACmB,IAGlFk5B,EAAuBr3B,MAAM,EAAE,EAChBiG,IAAI,IAChBoxB,EAAuB9tB,GAAG,CAAC,GAAW,EACvCxB,EADuC,IAChCypB,CAAmB,CAACrzB,EAAyC,CACpEqQ,MAAOrQ,EACPkN,KAAMwoB,GAAcoD,SAAS,CAAC94B,EAAyC,EAAI,GAC3E24B,aAAa,EACf,IAIJ,IAAMvC,EAA0BhB,EAC9BV,EAAyBgE,GAAmBS,IAAI,CAAC,CAAChR,EAAGuK,IAAMvK,EAAEve,KAAK,CAACwvB,aAAa,CAAC1G,EAAE9oB,KAAK,IAEpFysB,EAAyBjB,EAC7BV,EAAyBmE,GAAkBM,IAAI,CAAC,CAAChR,EAAGuK,IAAMvK,EAAEve,KAAK,CAACwvB,aAAa,CAAC1G,EAAE9oB,KAAK,IAOzF,MAAO,CACLusB,aANmBxE,CAAAA,EAAAA,EAAAA,OAAAA,CAAOA,CAC1B,IAAM,IAAIyE,KAA4BC,EAAuB,CAC7D,CAACD,EAAyBC,EAAuB,EAKjDjQ,QAhJc,CAAC2Q,GAAYL,GAAyBE,0BAiJpDR,yBACAC,CACF,CACF,ECzHiC,SAC3BrpB,UACAsoB,EACAL,gBAAiBO,GAAcP,6BAC/BS,CACF,GAEFluB,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACR,GAAI,CAAC4e,GAAW,CAACyP,GAAkBhf,KAAM,OAMvCif,GAJEjf,IAAAA,CAD2B5E,CACrBA,CAIgConB,CAAAA,EAAAA,EAAAA,EAAAA,CAAeA,CAACpnB,CAApCqnB,GAA+C,GAHjEpsB,KAAMipB,EAAa51B,IAAI,CAAC,GAAUP,EAAKqQ,KAAK,GAAK4B,IAAS/E,MAAQ,IAItE,CACF,EAAG,CAACipB,EAAc/P,EAASnU,EAAQ4jB,GAAkBhf,KAAK,EAE1D,IAAM0iB,EAAiB/3B,EAAAA,WAAiB,CAAC,KACvC00B,EAAkB3zB,OAAO,EAAE6sB,cAAc,MAAMvN,OACjD,EAAG,EAAE,EAEC2X,EAAoBC,CAAAA,EAAAA,EAAAA,EAAAA,CAAoBA,CAAC,CAC7CC,SAAUvpB,MAAMiK,IAAI,CAAC8b,EAAkB3zB,OAAO,EAAEo3B,iBAAiB,MAAQ,EAAE,EAC3EC,cAAe3D,CACjB,GAEM4D,EAAiBr4B,EAAAA,WAAiB,CAAC,IACnCkB,QAAQC,aAAeD,QAAQ+M,YAAY,IACzC/M,OAAOC,EAAR+M,SAAmB,CAAE,iBAAkB,kBAC1CA,IAAIhN,OAAOC,EAAR+M,SAAmB,CAAE,yBAA0B3C,GAClDrK,OAAO+M,UAAU,EAAEE,QAAQ,iBAE3BmqB,QAAQC,IAAI,CAAC,sCAEjB,EAFyD,EAEpD,EAEL,MACE,UAAC12B,MAAAA,CAAIC,MALmF,IAKxE02B,IAAW,gBAADA,kBAAoCvE,GAAoB,GAAGn0B,CAAI,UACvF,UAAC24B,EAAAA,EAAKA,CAAAA,UACJ,UAACC,EAAAA,UACE,CAAC,QAAE90B,CAAM,CAAE,GACV,iCACE,WAAC/B,MAAAA,CAAIC,UAAU,sCACb,UAACuC,OAAAA,CACCvC,UAAW02B,IAAW,gBAADA,KAAuBzE,GAAcjyB,UAAW,CACnE,oBAA+B,SAAVqyB,CACvB,GACAwE,MAAO5E,GAAc6E,OACrBn2B,cAAY,gBAEXW,EAAE,cAEJwhB,EACC,UAAC/iB,MAAAA,CAAIC,UAAU,iDAEf,WAAC+2B,EAAAA,EAAWA,CAAAA,CACV52B,IAAKwyB,EACL3yB,UAAW02B,IAAW,gBAADA,WAA6BnvB,GAAevH,UAAW,CAC1E,oBAA+B,SAAVqyB,CACvB,GACAjwB,QAAS,IAAME,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,6BAC1B00B,oBAAqBf,EACrBY,MAAO,CACL,GAAGtvB,GAAeuvB,MAAM,CACxB,GAAIrE,EAAclrB,GAAe0vB,YAAc,IACjD,EACAC,aAAc,IAAMxE,EAAe,IACnCyE,aAAc,IAAMzE,EAAe,cAEnC,UAACnwB,OAAAA,CAAKvC,UAAU,mBAAWsB,EAAE,cAC5BixB,GAAkBhf,KACfwc,CAAmB,CACjBwC,EAAiBhf,IAAI,CACtB,CACD,KAAM,IACV,UAAC6jB,EAAAA,CACCp3B,UAAW02B,IAAW,gBAADA,QAA0B,CAC7C,eAAgB50B,EAChB,oBAA+B,SAAVuwB,CACvB,WAKPvP,EAAU,KACT,UAACuU,EAAAA,EAAYA,CAAAA,CAACC,YAAa,CAAEC,UAAW,MAAOC,UAAW,MAAO,WAC/D,WAACz3B,MAAAA,CACCI,IAAKyyB,EACL5yB,UAAU,+DAET8yB,EAAwBv0B,MAAM,CAC7B,WAACwB,MAAAA,WACEmyB,GAAcuF,cACb,UAACzU,IAAAA,CAAEhjB,UAAU,sDACVsB,EAAE,eAEH,KACJ,UAACkV,KAAAA,CAAGxW,UAAU,kCACX8yB,EAAwBhrB,GAAG,CAAC,GAC3B,UAAC4vB,EAAAA,CAECpxB,MAAO5J,EAAK4J,KAAK,CACjBmD,SAAU/M,EAAKqQ,KAAK,CACpB4qB,UAAW,CACTv1B,QAAS,KACPm0B,EAAe75B,EAAKqQ,KAAK,EACzBulB,IAAsB51B,EAAKqQ,KAAK,CAClC,EACAgM,UAAWmd,EACX0B,YAAal7B,EAAK24B,WAAW,CAC7Bt6B,IAAK2B,EAAKkN,IAAI,GAVXlN,EAAKqQ,KAAK,QAgBrB,KACHgmB,EAAuBx0B,MAAM,CAC5B,WAACwB,MAAAA,WACEmyB,GAAcuF,cACb,UAACzU,IAAAA,CAAEhjB,UAAU,sDACVsB,EAAE,iBAEH,KACJ,UAACkV,KAAAA,UACEuc,EAAuBjrB,GAAG,CAAC,GAC1B,UAAC4vB,EAAAA,CAECpxB,MAAO5J,EAAK4J,KAAK,CACjBmD,SAAU/M,EAAKqQ,KAAK,CACpB4qB,UAAW,CACTv1B,QAAS,IAAMm0B,EAAe75B,EAAKqQ,KAAK,EACxCgM,UAAWmd,EACX0B,YAAal7B,EAAK24B,WAAW,CAC7Bt6B,IAAK2B,EAAKkN,IAAI,GAPXlN,EAAKqQ,KAAK,QAarB,kBAUxB,CAEA,SAAS2qB,EAAS,OAChBpxB,CAAK,CACLmD,UAAQ,CACRkuB,WAAS,CAKV,EACC,MACE,UAAChhB,KAAAA,CAEC3W,UAAW02B,IAAW,YAAa,CACjC,GADmBA,WACJ95B,CAAAA,EAAAA,EAAAA,CAAAA,CAAKA,CAAC6M,EACvB,GACA/M,KAAM+M,WAEN,UAACouB,MAAAA,UACC,WAACC,EAAAA,EAAIA,CAAAA,CAAC5oB,IAAI,sBAAuB,GAAGyoB,CAAS,WAC1CrxB,EAAO,UARP,CAAC,MAAM,EAAEmD,EAAAA,CAAU,CAa9B,CAEA,SAASmtB,EAAkB,UAAE3xB,CAAQ,CAA0D,EAE7F,OAAOA,EADS8yB,CAAAA,EAAAA,EAAAA,EACAC,CADQD,GAE1B,CAEA,SAASX,EAAc7wB,CAAkC,EACvD,MACE,UAAC9F,MAAAA,CAAIG,QAAQ,YAAYq3B,QAAQ,MAAO,GAAG1xB,CAAK,UAC9C,UAAC1F,IAAAA,CAAEygB,OAAO,OAAOE,YAAY,IAAI1gB,KAAK,cAAco3B,SAAS,mBAC3D,UAACr3B,IAAAA,CAAEwgB,UAAU,kBAAkBG,YAAY,IAAIF,OAAO,wBACpD,UAAC6W,WAAAA,CAAS5W,cAAc,QAAQ9L,OAAO,4BAKjD,gBEhPO,IAAM2iB,EAAc,CAAC,QAC1Bt2B,CAAM,UACNmD,CAAQ,WACRozB,CAAS,cACTC,CAAY,6BACZC,CAA2B,CAC3BC,YAAU,aACVC,CAAW,CACM,IACjB,GAAM,CAACC,EAAqBC,EAAuB,CAAGrb,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GAC/DpZ,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACR,GAAKpC,CAAD,CASG,CACLuY,KAVW,IAUFue,IAAI,CAAC/B,KAAK,CAACgC,QAAQ,CAAG,SAC/B,IAAMC,EAAsBze,UAAUgc,iBAEpC,CAAC,CAAC,EAAEiC,EAAa,QAAQ,EAAEC,EAA4B,GAAG,EAAEA,EAA4B,6BAA6B,CAAC,EAExHO,EAAoB78B,OAAO,CAAC,IACtB88B,GACFA,EAAsBC,YAAY,CAAC,KADV,EAJqE,OAK5C,OAEtD,GAIA,IAAIC,EAAgC5e,UAAUyR,cAC5C,CAAC,CAAC,EAAEyM,EAAAA,CAA6B,EAE7BW,EAAiB,EAAE,CACzB,KAAOD,GACLC,EAAI10B,IAAI,CAACy0B,GACTA,CAFoB,CAEJA,EAActuB,aAAa,CAE7CuuB,GAAKj9B,QAAQ,IACPk9B,GACFA,EAAiBC,aADG,EACY,CAAC,cAErC,GACAC,EAAuBp6B,OAAO,CAAG65B,CACnC,KApCoB,UAAdT,GAAuBM,GAAuB,GAClDte,SAASue,IAAI,CAAC/B,KAAK,CAACgC,QAAQ,CAAG,OAC3BQ,EAAuBp6B,OAAO,EAChCo6B,EAAuBp6B,OAAO,CAAChD,OAAO,CAAC,IACjC88B,GACFA,EAAsBK,eAAe,CAAC,EADb,YAG7B,EA8BN,EAAG,CAACt3B,EAAQu2B,EAAWC,EAAcC,EAA4B,EAEjE,IAAMc,EAAyB/1B,CAAAA,EAAAA,EAAAA,MAAAA,CAAMA,GAErC,MACE,UAAC0I,EAAAA,EAASA,CAAAA,CAACE,SAAU,CAACpK,EAAQ22B,aAAaA,GAAcA,WACvD,GADqE,EACrE,KAAC14B,MAAAA,CACCC,UAAWmC,IACT,gBADWA,wGAEX,CACE,2EACEL,GAAwB,SAAdu2B,EACZ,2EACEv2B,GAAwB,UAAdu2B,EACZ,QAAuB,UAAdA,EACT,2BAA4B,CAACv2B,CAC/B,GAEFw3B,eAAgB,KACI,UAAdjB,GAAuBM,GAAuB,EACpD,EACAnc,OAAQ,CAAC1a,EACTkG,cAAa,CAAC,YAAY,EAAEqwB,EAAAA,CAAW,CACtC,GAAGG,CAAU,UAGC,UAAdH,EACCK,GAAwBa,CAAAA,EAAAA,EAAAA,EAAAA,CAAkBA,IAAMz3B,EAC9C,UAAC/B,MAAAA,CAAIC,UAAU,0BAAkBiF,IAC/B,KAEJA,KAKV,EAAE,qCG9FK,IAAMu0B,EAAwB,KACnCl3B,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAHsB,eAIlC,EAAE,SAMcm3B,EAA0BnzB,CAAa,CAAEozB,CAAsB,EAG7EC,EANOC,CAIkC,GAAG,EAAEF,EAAgB,GAAGA,CAEnD3sB,CAFiE,CAAC,CAAC,CAAG,KAAKzG,EAAAA,CAAO,CAJrFgF,OAAO,CAAC,SAAU,IAAI3O,WAAW,GAO9C,CAEO,SAASg9B,EAAc5sB,CAAa,EACrC3N,QAAQC,aAAeD,QAAQ+M,YAAcY,IAC/CX,GADsD,CAClDhN,OAAOC,EAAR+M,SAAmB,CAAE,gBAAiBW,GACzC3N,OAAO+M,UAAU,EAAEE,QAAQ,gBAE/B,CAEA,IAAMwtB,EAAc,CAACC,EAAqBp9B,IAAiBo9B,GAAaxuB,QAAQ,WAAY5O,GA0GrF,SAASq9B,EAAuBC,CAAW,EAChD,IAAMC,EAAUD,GAAM,CAAC,OAAO,EAAEC,SAAW,IAM3C,MAAO,CAAEA,UAASC,iBAJOD,QAIWE,cAHF,MAAZF,EAG6BG,eAFhB,MAAZH,GAA+B,MAAZA,GAA+B,MAAZA,CAEK,CACpE,CCnJO,IAAMI,EAAuD,CAAC,OAAEC,CAAK,OAAEjI,CAAK,CAAE,IACnF,GAAM,CAAE/wB,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,cACvBg5B,EACW,OAAfD,EAAM/mB,IAAI,CACNjS,EAAE,oBACa,OAAfg5B,EAAM/mB,IAAI,CACV,GAAGjS,EAAE,oBAAoB,EAAE,EAAEg5B,EAAMv9B,IAAI,EAAE,CAC1B,OAAfu9B,EAAM/mB,IAAI,CACV,GAAGjS,EAAE,oBAAoB,KAAK,CAAC,CAC/Bg5B,EAAMv9B,IAAI,CAEhB,MACE,UAACy9B,MAAAA,CACCp6B,IACY,SAAViyB,EACI,CAAC,2BAA2B,EAAEiI,EAAM/mB,IAAI,CAAC,aAAa,CAAC,CACvD,CAAC,2BAA2B,EAAE+mB,EAAM/mB,IAAI,CAAC,IAAI,CAAC,CAGpDE,IAAK8mB,EACLv6B,UAAU,eAGhB,EAAE,EAIE,CAAC,OAAEs6B,CAAK,WAAEt6B,CAAS,OAAEqyB,CAAK,SAAEoI,CAAO,CAAE,IACvC,GAAM,GAAEn5B,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,cAI7B,MACE,UAACm5B,EAHuB,KAAO,OAG9BA,CAAQt0B,aAAYq0B,QAAoB10B,EAAV00B,UAAgCz6B,WAC7D,WAAC6kB,IAAAA,CACC7c,cAAY,kBACZ4B,KAAM0wB,EAAMv/B,GAAG,CACfiF,UAAU,6EACT,GAAI,CAAC,CAACs6B,EAAMl4B,OAAO,EAAI,CAAEA,QAASk4B,EAAMl4B,OAAO,CAAE,CACjD,GAAI,CAAC,CAACk4B,EAAM9vB,MAAM,EAAI,CAAEA,OAAQ8vB,EAAM9vB,MAAO,CAAC,CAC9C,GAAI8vB,GAAO9vB,SAAW,UAAY,CAAE0E,IAAK,YAAa,CAAC,WAExD,UAACmrB,EAAAA,CAAKhI,MAAOA,EAAOiI,MAAOA,IAC3B,UAAC/3B,OAAAA,CAAKvC,UAAU,mBAAWs6B,GAAO9vB,SAAW,SAAW,CAAC,EAAE,EAAElJ,EAAE,WAAW,CAAG,SAIrF,EAAE,eC5BK,SAASq5B,EAAQ,UAAE11B,CAAQ,OAAEotB,CAAK,CAAEvwB,UAAS,CAAK,CAAE,GAAG84B,EAA6B,EACzF,IAAMC,EAAmB,SAAVxI,EAETyI,EAAc58B,EAAAA,YAAkB,CAAC+G,EAAU,CAC/CjF,UAAWmC,IAAG8C,EAASsB,KAAK,CAACvG,QAAhBmC,CAAyB,CAAE,sBAC1C,GAEA,MACE,UAACwU,KAAAA,CACE,GAAGikB,CAAa,CACjB56B,UAAWmC,IAAG,gBAADA,mCAAqD,CAChE,gBAAiB,CAACkwB,EAClB,qBAAsBwI,EACtB,uBAAwB/4B,GAAU,CAACuwB,EACnC,4BAA6BvwB,GAAU+4B,CACzC,YAECC,GAGP,CAEO,SAASC,EAAc,OAC5Bz0B,CAAK,MACL00B,CAAI,WACJC,CAAS,qBACTC,CAAmB,OACnB7I,CAAK,SACL8I,CAAO,CAQR,EACC,IAAMN,EAAmB,SAAVxI,EAEf,MACE,iCACE,UAAC9vB,OAAAA,CAAKvC,UAAWmC,IAAG,gBAA6B,SAAZg5B,EAAqB,gBAAkB,eACzE70B,IAGF00B,EACC,WAACj7B,MAAAA,CAAIC,UAAWmC,IAAG,gBAADA,EAChB,UAACmQ,EAAAA,EAAIA,CAAAA,CACHvV,KAAMi+B,EACNh7B,UAAWmC,IACT04B,EAAS,cADE14B,EACgB,WAC3B,gDAEFi5B,QAAQ,SAEV,UAAC9oB,EAAAA,EAAIA,CAAAA,CACHvV,KAAMi+B,EACNf,QAAQ,QACRj6B,UAAWmC,IACT04B,EAAS,cADE14B,SACuB,kBAClC,qDAEFi5B,QAAQ,YAGV,KAEHH,EACC,WAACl7B,MAAAA,WACC,UAACuS,EAAAA,EAAIA,CAAAA,CACHvV,KAAMk+B,EACNj7B,UAAWmC,IACT+4B,EAAsB,aAAe,CAD1B/4B,IAEX,gDAEFi5B,QAAQ,SAEV,UAAC9oB,EAAAA,EAAIA,CAAAA,CACHvV,KAAMk+B,EACNj7B,UAAWmC,IACT+4B,EAAsB,aAAe,CAD1B/4B,IAEX,qDAEFi5B,QAAQ,YAGV,OAGV,CAaO,IAAMC,EAAkD,CAAC,OAC9DhJ,CAAK,WACLiJ,CAAS,SACTH,CAAO,OACP70B,CAAK,QACLi1B,CAAM,8BACNC,CAA4B,CAC5B,GAAGx9B,EACJ,GAEG,UAAC28B,EAAAA,CAAQtI,MAAOA,EAAOrqB,cAAY,qBACjC,UAAC8vB,EAAAA,EAAIA,CAAAA,CACH2D,UAAW,GACV,GAAGz9B,CAAI,CACR09B,wBAAuBF,GAA8BG,KACrDC,yBAAwBJ,GAA8BzuB,MACtD/M,UAAWmC,IAAG,gBAADA,sBAAwCo5B,EAAS,MAAQ,MAAO,CAC3E,gBAA6B,eAAZJ,CACnB,YAEA,UAACJ,EAAAA,CAAcI,QAASA,EAAS9I,MAAOA,EAAO/rB,MAAOA,EAAO00B,KAAMM,QAqB9DO,EAAyE,CAAC,OACrFxJ,CAAK,SACL8I,CAAO,aACPvpB,CAAW,YACXkqB,CAAU,SACV15B,CAAO,OACPtE,CAAK,gBACLF,CAAc,CACdqH,UAAQ,CACT,IACC,GAAM,CAACzD,EAAYC,EAAc,CAAGvD,EAAAA,QAAc,CAAU,IAMtDwD,EAAQ,IAAMD,GAAc,GAE5BE,EAAc,IAClB/D,IAAiBgE,GACZA,EAASjG,KAAK,EAAE,GAGvB,EAEM0d,EAAgBnb,EAAAA,QAAc,CAACob,OAAO,CAACrU,GAEvC,CAAC3D,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,aAE3B,MACE,iCACE,UAACo5B,EAAAA,CAAQtI,MAAOA,EAAOrqB,cAAY,sBACjC,UAAC9F,SAAAA,CACC8F,cAAY,aACZnJ,KAAK,SACLmB,UAAU,gEACVoC,QAzBK,CAyBIC,IAxBfm3B,IACAp3B,MACAX,GAAc,EAChB,MAHuB+3B,KA0Bf,UAACuB,EAAAA,CACCz0B,MAAOsL,GAAetQ,EAAE,UACxB05B,KAAMc,EACNzJ,MAAOA,EACP8I,QAASA,QAIf,UAACt5B,EAAAA,EAAMA,CAAAA,CAACC,OAAQN,EAAYO,UAAWL,EAAOM,KAAK,KAAKlE,MAAOA,WAC5DI,EAAAA,QAAc,CAAC4J,GAAG,CAACuR,EAAe,GACjC,EAAInb,cAAoB,CAACwe,IAAUA,EAAM7d,IAAI,GAAK2D,EAAAA,EAAWA,CACpDtE,CADsD,CACtDA,YAAkB,CACvBwe,EACA,CACE9e,eAAgB+D,EAChBhE,QAAS+D,CACX,GAGGgb,OAKjB,EAAE,EAcoF,CAAC,UACrFzX,CAAQ,OACRqB,CAAK,MACL00B,CAAI,cACJe,CAAY,SACZ35B,CAAO,OACPiwB,CAAK,gBACLM,CAAc,SACdwI,CAAO,WACPF,CAAS,8BACTO,CAA4B,CAC7B,IACC,GAAM,QAAE15B,CAAM,CAAE,CAAGi2B,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,GAE3B,MACE,iCACE,UAAC4C,EAAAA,CAAQtI,MAAOA,EAAOvwB,OAAQA,EAAQkG,cAAY,sBACjD,UAAC+uB,EAAAA,EAAWA,CAAAA,CACV52B,IAAKwyB,EACL+I,wBAAuBF,GAA8BG,KACrDC,yBAAwBJ,GAA8BzuB,MACtD3K,QAAS,KACPo3B,IACAp3B,KACF,EACApC,UAHuBw5B,IAGT,gBAADr3B,0BAA4C,CACvD,gBAA6B,eAAZg5B,CACnB,YAEA,UAACJ,EAAAA,CACC1I,MAAOA,EACP/rB,MAAOA,EACP60B,QAASA,EACTF,UAAWA,EACXD,KAAMA,EACNE,oBAAqB,CAACp5B,GAAUi6B,QAItC,UAAC1E,EAAAA,EAAYA,CAAAA,CACXr3B,UAAU,0DACVs3B,YAAa,CAAE0E,KAAM,CAAE,WAEtB/2B,MAIT,EAAE,GC/Q2F,CAAC,OAC5FotB,CAAK,SACL8I,CAAO,aACPvpB,CAAW,YACXkqB,CAAU,SACV15B,CAAO,OACPtE,CAAK,gBACLF,CAAc,UACdqH,CAAQ,CACT,IACC,GAAM,CAACzD,EAAYC,EAAc,CAAGvD,EAAAA,QAAc,EAAC,GAO7CwD,EAAQ,IAAMD,GAAc,GAE5BE,EAAc,IAClB/D,IAAiBgE,GACZA,EAASjG,KAAK,EAAE,GAGvB,EAEM0d,EAAgBnb,EAAAA,QAAc,CAACob,OAAO,CAACrU,GAEvC,CAAC3D,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,aAE3B,MACE,iCACE,UAACoV,KAAAA,CAAG3W,UAAU,4CACZ,UAACkC,SAAAA,CACClC,UAAU,yJACVgI,cAAY,aACZnJ,KAAK,SACLuD,QAzBK,CAyBIC,IAxBfm3B,IACAp3B,MACAX,GAAc,EAChB,MAHuB+3B,KA0Bf,UAACuB,EAAaA,CACZz0B,MAAOsL,GAAetQ,CADVy5B,CACY,UACxBC,KAAMc,EACNzJ,MAAOA,EACP8I,QAASA,QAIf,UAACt5B,EAAAA,EAAMA,CAAAA,CAACC,OAAQN,EAAYO,UAAWL,EAAOM,KAAK,KAAKlE,MAAOA,WAC5DI,EAAAA,QAAc,CAAC4J,GAAG,CAACuR,EAAe,GACjC,EAAInb,cAAoB,CAACwe,IAAUA,EAAM7d,IAAI,GAAK2D,EAAAA,EAAWA,CACpDtE,CADsD,CACtDA,YAAkB,CACvBwe,EACA,CACE9e,eAAgB+D,EAChBhE,QAAS+D,CACX,GAGGgb,OAKjB,EAAE,SAkBcie,GAAQ,UAAE11B,CAAQ,CAAE,GAAG21B,EAA6B,CAA7CD,CACrB,IAAMG,EAAc58B,EAAAA,YAAkB,CAAC+G,EAAU,CAC/CjF,UAAWmC,IAAG8C,EAASsB,KAAK,CAACvG,QAAhBmC,CAAyB,CAAE,sBAC1C,GAEA,MACE,UAACwU,KAAAA,CACE,GAAGikB,CAAa,CACjB56B,UAAU,6HAET86B,GAGP,CAEO,IAAMmB,GAAsD,CAAC,OAClE5J,CAAK,WACLiJ,CAAS,CACTH,SAAO,OACP70B,CAAK,QACLi1B,CAAM,8BACNC,CAA4B,CAC5B,GAAGx9B,EACJ,GAEG,UAAC28B,GAAOA,CAACtI,MAAOA,EAAOrqB,SAAf2yB,KAA2B,qBACjC,UAAC7C,EAAAA,EAAIA,CAAAA,CACH2D,WAAW,EACV,GAAGz9B,CAAI,CACR09B,wBAAuBF,GAA8BG,KACrDC,yBAAwBJ,GAA8BzuB,MACtD/M,UAAWmC,IAAG,gBAADA,sBAAwCo5B,EAAS,MAAQ,MAAO,CAC3E,gBAA6B,eAAZJ,CACnB,YAEA,UAACJ,EAAaA,CAACI,QAASA,EAAVJ,MAA0B1I,EAAO/rB,MAAOA,EAAO00B,KAAMM,wBC3HpE,SAASY,GAAwB,SACtCC,CAAO,OACP71B,CAAK,CAIN,EACC,GAAM,CAAEqI,SAAS,IAAI,CAAE,CAAGwH,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,GAEnC,MACE,UAACpW,MAAAA,CAAIC,UAAU,iCACb,UAACo8B,GAAAA,UACED,EAAQr0B,GAAG,CACV,CAAC,CAAExB,MAAO+1B,CAAY,CAAEptB,KAAM,8BAAEusB,CAA4B,CAAE,GAAGvsB,EAAM,SAAE7M,CAAO,CAAE,GAChF,UAACk6B,GAAAA,UACC,UAACxE,EAAAA,EAAIA,CAAAA,CACF,GAAG7oB,CAAI,CACRlU,IAAK8+B,CAAAA,EAAAA,GAAAA,EAAAA,CAAWA,CAAC5qB,GAAMlU,IAAK4T,GAC5B+sB,wBAAuBF,GAA8BG,KACrDC,yBAAwBJ,GAA8BzuB,MACtD0uB,WAAW,EACXz7B,UAAU,uBACVu8B,gBAAgB,yMAChBn6B,QAAS,IACPq3B,EAA0B4C,EAAc/1B,GACxClE,MACA6M,GAAM7M,SAFmBq3B,CAETz6B,EAClB,WAECq9B,KAfcA,OAuB/B,CAYe,SAASG,GAAkB,MACxCC,CAAI,CACJC,WAAS,mCACTC,CAAiC,kCACjCC,CAAgC,WAChCC,CAAS,CACc,EACvB,GAAM,QAAEluB,EAAS,IAAI,CAAE,CAAGwH,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,GAC7B,CAAC7U,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,cAErBu7B,EAA6BC,CAAAA,EAAAA,GAAAA,EAAAA,CAAwBA,CAACN,GAAMO,aAAc,QAAEruB,CAAO,GAEzF,MACE,WAAC5O,MAAAA,CAAIC,UAAU,gCACb,WAACD,MAAAA,CAAIC,UAAU,8BACb,UAACD,MAAAA,CAAIC,UAAU,wFACb,UAACsS,EAAAA,EAAIA,CAAAA,CAACvV,KAAK,OAAOiF,KAAK,UAEzB,WAACjC,MAAAA,CAAIC,UAAU,iBACb,UAACgjB,IAAAA,CAAEhjB,UAAU,uDACVsB,EAAE,YAAa,CAAE27B,SAAUR,EAAK1/B,IAAI,KAEvC,WAACimB,IAAAA,CAAEhjB,UAAU,4BACX,UAACuC,OAAAA,CAAKvC,UAAU,4DACby8B,EAAKS,UAAU,GACV,IACP57B,EAAE,aAEL,UAAC0hB,IAAAA,CAAEhjB,UAAU,6CACVsB,EAAE,oBAAqB,CAAE67B,kBAAmBL,CAA2B,KAEzEL,EAAKW,aAAa,CACjB,UAACpa,IAAAA,CAAEhjB,UAAU,6CACVsB,EAAE,qBAAsB,CAAE87B,cAAeX,EAAKW,aAAa,KAE5D,WAGR,UAACr9B,MAAAA,CAAIC,UAAU,gCACb,WAACo8B,GAAAA,WACEM,GAAWW,YACV,UAACC,GAAAA,CACCviC,IAAK2hC,GAAWW,YAAYtiC,IAC5BqH,QAAS,KACPu3B,EAAc,WAADA,sBACf,EACA/B,YAAa+E,WAEZr7B,EAAE,sBAEH,KACHo7B,GAAWa,oBAAsB,CAACX,EACjC,UAACU,GAAAA,CACCviC,IAAK2hC,GAAWa,mBAAmBxiC,IACnCqH,QAAS,KACPu3B,EAAc,WAADA,0BACf,EACA/B,YAAa+E,WAEZr7B,EAAE,cAEH,KAEHo7B,GAAWc,kBAAkBziC,KAAO,CAAC6hC,EACpC,UAACU,GAAAA,CACCviC,IAAK2hC,EAAUc,gBAAgB,CAACziC,GAAG,CACnCqH,QAAS,KACPu3B,EAAc,WAADA,wBACf,EACA/B,YAAa+E,WAEZr7B,EAAE,iBAEH,KAEHo7B,GAAWe,mBAAmB1iC,KAAO,CAAC6hC,EACrC,UAACU,GAAAA,CACCviC,IAAK2hC,EAAUe,iBAAiB,CAAC1iC,GAAG,CACpCqH,QAAS,KACPu3B,EAAc,WAADA,yBACf,EACA/B,YAAa+E,WAEZr7B,EAAE,aAEH,KAEHo7B,GAAWgB,cAAc3iC,IACxB,UAACuiC,GAAAA,CACCviC,IAAK2hC,EAAUgB,YAAY,CAAC3iC,GAAG,CAC/BqH,QAAS,KACPu3B,EAAc,WAADA,4BACf,EACA/B,YAAa+E,WAEZr7B,EAAE,4BAEH,KAEHo7B,GAAWiB,sBAAsB5iC,IAChC,UAACuiC,GAAAA,CACCviC,IAAK2hC,EAAUiB,oBAAoB,CAAC5iC,GAAG,CACvCqH,QAAS,KACPu3B,EAAc,WAADA,4BACf,EACA/B,YAAa+E,WAEZr7B,EAAE,4BAEH,KAEHo7B,GAAWkB,YAAY7iC,IACtB,UAACuiC,GAAAA,CACCviC,IAAK2hC,EAAUkB,UAAU,CAAC7iC,GAAG,CAC7BqH,QAAS,KACPu3B,EAAc,WAADA,uBACf,EACA/B,YAAa+E,WAEZr7B,EAAE,uBAEH,KAEHo7B,GAAWmB,eAAe9iC,IACzB,UAACuiC,GAAAA,CACCviC,IAAK2hC,EAAUmB,aAAa,CAAC9iC,GAAG,CAChCqH,QAAS,KACPu3B,EAAc,WAADA,6BACf,EACA/B,YAAa+E,WAEZr7B,EAAE,6BAEH,KACJ,UAACg7B,GAAAA,UACC,UAACp6B,SAAAA,CACClC,UAAU,kOACVoC,QAAS,UACPu3B,EAAc,WAADA,cACb,MAAMkD,GACR,EACAh+B,KAAK,kBAEJyC,EAAE,sBAOjB,CAEA,SAAS86B,GAAS,UAAEn3B,CAAQ,CAAE,GAAG64B,EAAuC,EACtE,MACE,UAACtnB,KAAAA,CAAI,GAAGsnB,CAAS,CAAE99B,UAAWmC,IAAG,gBAADA,EAAoB27B,EAAU99B,SAAS,WACpEiF,GAGP,CAEA,SAASq3B,GAAa,UAAEr3B,CAAQ,CAAE,GAAG21B,EAA2C,EAC9E,MACE,UAACjkB,KAAAA,CAAI,GAAGikB,CAAa,CAAE5yB,cAAY,iBAAiBhI,UAAU,gBAC5D,UAACuC,OAAAA,CAAKvC,UAAU,oOACbiF,KAIT,CAEA,SAASq4B,GAAa,KACpBviC,CAAG,SACHqH,CAAO,UACP6C,CAAQ,aACR2yB,CAAW,CAMZ,EACC,MACE,UAAC0E,GAAAA,UACC,UAACxE,EAAAA,EAAIA,CAAAA,CACH/8B,IAAKA,EACL0gC,WAAW,EACXz7B,UAAU,yCACVu8B,gBAAgB,0KAChBn6B,QAASA,EACTw1B,YAAaA,WAEZ3yB,KAIT,iBChPA,IAAM84B,GAAgC,KACpC,IAAMnF,EAAOve,SAASyR,aAAa,CAAC,QAEpC,GAAI8M,EAeF,IAfQ,GAK2B/rB,MAAMiK,IAAI,CAJnB8hB,EAAKvC,gBAAgB,CAC7C,wGAG+Dh7B,MAAM,CAAC,IACtE,IAAMw7B,EAAQz3B,OAAO4c,gBAAgB,CAAC6P,GACtC,MACoB,SAAlBgL,EAAMmH,OAAO,EACQ,WAArBnH,EAAMoH,UAAU,EAChB,EAAyBtjB,WAAW,CAAG,GACvC,EAAyBujB,YAAY,CAAG,CAE5C,EAIJ,EAEaC,GAAqE,CAAC,mBACjFC,CAAiB,CACjBC,kBAAgB,eAChBC,CAAa,UACbr5B,CAAQ,SACRg1B,CAAO,cACPsE,CAAY,qBACZC,CAAmB,CACpB,IACC,IAAMC,EAA4B,KAChCn8B,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,gBACXk8B,KACF,EAqBME,EAAwB,IAC5B,IAAMC,EAA6BZ,KAEnC,GAAI,CAACtzB,EAAEuT,QAAQ,EAAc,QAAVvT,EAAE1C,GAAG,EAAc42B,EAA4B,CAChEl0B,EAAEvD,cAAc,GAOhB,IAAM03B,EAAY,CALG/xB,MAAMgyB,SAAS,CAAC/f,OAAO,CAACggB,IAAI,CAC/CH,EACAtkB,SAAS0kB,aAAa,EAGU,GAAKJ,EAA2BpgC,MAAM,CAExEogC,CAA0B,CAACC,EAAU,EAAErgB,OACzC,CACF,EAuCA,MAlCAra,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACR,GAAIm6B,EAAkB,CAGpBW,SAD6B3I,gBAAgB,CAAC,gCAClCp6B,OAAO,CAAC,GAAQ2yB,EAAGqQ,MAAM,IAGrC,IAAMC,EAAa7kB,SAASue,IAAI,CAkB1BuG,EAAW,IAAIC,iBAdc,IACjC,IAAK,IAAMC,KAAYC,EACC,YADc,CACD,CAA/BD,EAASxgC,IAAI,EACfwgC,EAASE,UAAU,CAACtjC,OAAO,CAAC,IAEN,IAAlBujC,EAAKC,QAAQ,EACb,EAAsBC,YAAY,CAAC,2BACnC,EACsBT,MAAM,EAEhC,EAGN,GAIA,OAFAE,EAASQ,OAAO,CAACT,EAjBoB,CAAEU,SAiBVz2B,EAjBqB,EAAM02B,SAAS,CAAM,GAmBhE,KACLV,EAASW,UAAU,EACrB,CACF,CACF,EAAG,CAACzB,EAAiB,EAGnB,UAACt+B,MAAAA,UACC,WAACggC,GAAAA,EAAY,EAAC19B,KAAMg8B,YAClB,UAAC0B,GAAAA,EAAe,EAACl6B,OAAO,aAAEZ,IAC1B,UAAC86B,GAAAA,EAAc,EAACC,UAAWzB,WACzB,WAACwB,GAAAA,EAAe,EACd//B,UAAWmC,IACT,gBADWA,8EAEXm8B,GAEF7Z,MAAM,MACNwb,gBAAgB,IAChBh6B,gBAAiBm4B,EACjBh4B,aAAW,kBACX85B,gBAAiB,GAAWlhC,EAAMkI,cAAc,aAEhD,UAACnH,MAAAA,CAAIC,UAAU,4BACb,UAAC+/B,GAAAA,EAAa,EACZ//B,UAAU,UACVoG,aAAW,wBACXhE,QAASg8B,EACTrlB,UA9Fe,CA8FJonB,GA7FvB,IAAMxB,EAA6BZ,KAEnC,GAAItzB,EAAEuT,QAAQ,EAAc,QAAVvT,EAAE1C,GAAG,EAAc42B,EAA4B,CAC/Dl0B,EAAEvD,cAAc,GAQhB,IAAMk5B,EACJ,CANmBvzB,MAAMgyB,SAAS,CAAC/f,OAAO,CAACggB,IAAI,CAC/CH,EACAtkB,SAAS0kB,aAAa,EAIN,EAAIJ,EAA2BpgC,MAAAA,EAAUogC,EAA2BpgC,MAAM,CAE5FogC,CAA0B,CAACyB,EAAc,EAAE7hB,OAC7C,CACF,WA+Ec,UAACjM,EAAAA,EAAIA,CAAAA,CAACvV,KAAK,QAAQiF,KAAK,WAG5B,WAACghB,IAAAA,CAAEhjB,UAAU,oBAAoB0S,GAAG,yBACjCunB,QACC,iCAAE,wCACsC,IACtC,UAAC/3B,SAAAA,CACCE,QAASq8B,EACT1lB,UAAW2lB,EACX7/B,KAAK,SACLmB,UAAU,qBACX,sBAID,KACS,MAAZi6B,EACC,iCACE,UAAC/3B,SAAAA,CACCE,QAASq8B,EACT1lB,UAAW2lB,EACX7/B,KAAK,SACLmB,UAAU,qBACX,oBAGD,UAACuC,OAAAA,UAAK,0CAEN,KACS,MAAZ03B,EACC,iCACE,UAAC13B,OAAAA,UAAK,sBACN,UAACL,SAAAA,CACCE,QAASq8B,EACT1lB,UAAW2lB,EACX7/B,KAAK,SACLmB,UAAU,qBACX,oBAGD,UAACuC,OAAAA,UAAK,0BAEN,QAEN,UAACw9B,GAAAA,EAAa,EACZ//B,UAAU,6BACVK,MAAO,GACPvB,OAAQ,GACR6B,eAAa,aAO3B,ECvLa0/B,GAA0B,CAAC,gBACtCziC,CAAc,OACdE,CAAK,SACLJ,EAAU,CAAC,CAAC,UACZD,CAAQ,SACRw8B,CAAO,iBACP94B,CAAe,SACfiB,CAAO,cACPk+B,CAAY,UACZr7B,CAAQ,CAC8C,IACtD,GAAM,CAACzD,EAAYC,EAAc,CAAGvD,EAAAA,QAAc,EAAC,GAC7C,CAACmgC,EAAkBkC,EAAoB,CAAGriC,EAAAA,QAAc,CAAC,IAEzD,CAACsiC,EAAuBC,EAAyB,CAAGviC,EAAAA,QAAc,MAEtE6H,GAEI26B,EAAYxiC,EAAAA,MAAY,CAA6B,MAWrDwD,EAAQ,IAAMD,EAAc,IAE5B28B,EAAoB,KACxBmC,EAAoB,IACpBG,GAAWzhC,SAASsf,OACtB,EAQM5c,EAAc,MAAOC,IAEzB,MAAMhE,IAAiBgE,GAClBA,EAASjG,KAAK,EAAE,GAGvB,EACA,MACE,iCACE,UAACkG,EAAAA,EAAMA,CAAAA,CACL/D,MAAOA,EACPgE,OAAQN,EACRO,UAAWL,EACXM,KAAK,KACLC,cACE,UAACk8B,GAAYA,CACXC,QADWD,UACQC,EACnBC,iBAAkBA,EAClBpE,QAASA,EACTsE,aAAciC,EACdhC,oBAAqB,KACnBJ,MACA38B,GAAc,GACd6+B,KACF,WAEA,UAACp+B,SAAAA,CACC8F,cAAY,aACZnJ,KAAK,SACLmB,UAAWmB,EACXiB,QApDU,CAoDDu+B,IAnDnBv+B,MACAk+B,MACA7+B,GAAc,GACd8+B,GAAoB,GACpB/G,IACAl3B,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,QADUk3B,YAEvB,EA8CYr5B,IAAKugC,EACL56B,mBAAiB,wBAEhBb,eAKP,UAACzC,EAAAA,EAAWA,CAAAA,CACV/E,SAAUA,EACVC,QAASA,EACT+E,WAAS,cACT7E,eAAgB+D,EAChBhE,QAAS+D,EACT5D,MAAOA,MAGX,UAACiC,MAAAA,CAAII,IAtDOq/B,CAsDFoB,GArDRpB,GACFiB,EAAyBjB,CADjB,CAGZ,MAqDF,EAAE,SCqBOqB,GAAQ,cACfC,CAAY,CACZC,iBAAe,WACflE,CAAS,MACTJ,CAAI,yBACJuE,CAAuB,WACvBtE,CAAS,OACTrK,CAAK,kCACLuK,CAAgC,wBAChCqE,CAAsB,6BACtBC,CAA2B,mCAC3BvE,CAAiC,iBACjCwE,CAAe,MACfnH,CAAI,CACS,EACb,GAAM,CAAC14B,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,CAAC,aAAc,YAAY,EAUhD6/B,EAA2D,CAC/D3jC,SAAUi/B,GAAW2E,YAAYtmC,KAAO,GACxC+C,MAAOwD,EAAE,oBACT1D,eAAgBmjC,CAClB,EAEMO,EAAoBh+B,CAAAA,EAAAA,EAAAA,MAAAA,CAAMA,CAAoB,MAC9Cu3B,EAAmB,SAAVxI,EACT,UAAEkP,CAAQ,UAAEC,CAAQ,UAAEC,CAAQ,CAAE,CAAGC,SAjBhCA,EACP,GAAM,WAAEC,CAAS,UAAEtS,CAAQ,CAAE,CAAGuS,CAAAA,EAAAA,EAAAA,EAAAA,CAAuBA,CAAC,iBAAkBC,EAAAA,EAAMA,CAACC,EAAE,EACnF,MAAO,CACLP,SAAUlS,GAAYsS,GAAWI,SAAW,IAC5CP,SAAUnS,GAAYsS,GAAWI,SAAW,IAC5CN,SAAUpS,GAAYsS,GAAWI,SAAW,GAC9C,CACF,IAYM,kBAAE7H,CAAgB,eAAEC,CAAa,gBAAEC,CAAc,SAAEH,CAAO,CAAE,CAAGF,EAAuBC,GAE5F,MACE,UAACgI,CAHwFjI,KAGxFiI,CAAIhiC,UAAU,uCAAuCoG,aAAY9E,EAAE,yBAClE,WAACkV,KAAAA,CAAGxW,UAAU,iBACXghC,EACC,UAACrqB,KAAAA,CAAG3W,UAAU,4CACZ,UAAC+xB,EAAgBA,CAACM,MAAOA,EAAQ,GAAG2O,CAAuB,CAA1CjP,IAEjB,KACH2K,IAAWuF,cAAiBhB,EAAD,CAA4B9G,EAiCpD,KAhCF,UAACkB,EAAeA,CACdj5B,GAFmD,KAE1C,IADKi5B,CAEZ7B,IACAl3B,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,QADUk3B,WAErBG,EAAc,WAADA,GACf,EACA5+B,IAAK2hC,GAAWuF,aAAalnC,IAC7B68B,YAAa+E,EACbuF,mBAAmB,EACnB7P,MAAOA,EACP8I,QAAQ,OACRI,MAAM,IACL,GAAIgG,EACD,CACEjG,UAAW,WACXh1B,MAAOhF,EAAE,YACX,EACAkgC,EACA,CACElG,UAAW,kBACXh1B,MAAOhF,EAAE,WACX,EACAmgC,EACA,CACEnG,UAAW,kBACXh1B,MAAOhF,EAAE,YACX,EACA,CACEg6B,UAAW,WACXh1B,MAAOhF,EAAE,WACX,CAAC,GAIRo7B,GAAWuF,cAAgB,CAAChB,GAA0B9G,EACrD,UAAC8B,GAAmBA,CAClB75B,QAAS,KACPo3B,EAFgByC,EAGhB35B,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,QADUk3B,WAErBG,EAAc,WAADA,GACf,EACA5+B,IAAK2hC,GAAWuF,aAAalnC,IAC7B68B,YAAa+E,EACbuF,mBAAmB,EACnB7P,MAAOA,EACP8I,QAAQ,OACRI,MAAM,IACND,UAAU,WACVh1B,MAAOhF,EAAE,cAET,KAEHm7B,EACC,UAAC9F,EAAAA,EAAKA,CAAAA,UACJ,UAACwL,EAAgBA,CACfhH,QAAQ,KADOgH,EAEf9P,MAAOA,EACPM,eAAgB2O,EAChBl/B,QAAS,KACPu3B,EAAc,WAADA,MACbr3B,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,qBACb,EACAgE,MAAOhF,EAAE,YAAa,CAAE27B,SAAUR,EAAK1/B,IAAK,GAC5Ci+B,KAAK,uBAEL,UAACwB,GAAiBA,CAChBC,KAAMA,EACNC,MAFgBF,IAELE,EACXC,kCAAmCA,EACnCC,iCAAkCA,EAClCC,UAAWA,QAIf,CAACH,GAAW2E,YAAc3E,GAAW0F,YAAcjB,CAAAA,CAAc,EACnE,CAACD,EACD,iCACGxE,GAAW0F,YAAcjB,EACxBA,EACE,UAACA,EAAAA,CACCkB,kBAAmBf,EACnBthC,UAAU,8BAETsB,EAAE,YAEHo7B,GAAW0F,WACbjI,EACE,UAAC8B,GAAmBA,CAClBd,QAAQ,OADUc,GAEdS,EAAU0F,UAAU,CACxB3G,WAAW,EACXyG,mBAAmB,EACnB57B,MAAOhF,EAAE,UACT+wB,MAAOA,EACPjwB,QAAS,KACPo3B,IACAl3B,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,QADUk3B,UAErBG,EAAc,WAADA,MACf,IAGF,UAAC0B,EAAeA,CACdF,QAAQ,IADME,GAEb,GAAGqB,EAAU0F,UAAU,CACxB3G,WAAW,EACXyG,mBAAmB,EACnB57B,MAAOhF,EAAE,UACT+wB,MAAOA,EACPjwB,QAAS,KACPo3B,IACAl3B,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,QADUk3B,UAErBG,EAAc,WAADA,MACf,IAGF,KACF,KAEHQ,EAAgB,UAACp6B,MAAAA,CAAIC,UAAU,QAAW,KAEzC08B,CAAAA,GAAW0F,YAAc1F,GAAW4F,eAAAA,CAAc,EACpD5F,GAAW2E,YACX,CAAClH,EACC,UAACp6B,MAAAA,CACCY,eAAa,EACbX,UAAU,kFAEV,UAACD,MAAAA,CAAIC,UAAW66B,EAAS,wBAA0B,uBAEnD,KAEH6B,GAAW2E,YAAcnH,EACxB,UAAC2B,EAAgBA,CACfV,QAAQ,KADOU,EAEfxJ,MAAOA,EACPz0B,eAAgBwjC,EAAexjC,cAAc,CAC7CE,MAAOsjC,EAAetjC,KAAK,CAC3BsE,QAAS,KACPu3B,EAAc,WAADA,OACbr3B,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,oBACb,EACAw5B,WAAW,cACXlqB,YAAatQ,EAAE,6BAEf,UAACkB,EAAAA,EAAWA,CAAAA,CAACC,WAAS,cAAe,GAAG2+B,CAAc,CAAG,GAAGN,CAAY,KAExE,KAEHpE,GAAW2E,YAAclH,EACxB,UAACoI,GAAuBA,CACtBpH,QAAQ,OACR9I,IAFsBkQ,EAEflQ,EACPz0B,eAAgBwjC,EAAexjC,cAAc,CAC7CE,MAAOsjC,EAAetjC,KAAK,CAC3BsE,QAAS,KACPu3B,EAAc,WAADA,OACbr3B,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,oBACb,EACAw5B,WAAW,cACXlqB,YAAatQ,EAAE,6BAEf,UAACkB,EAAAA,EAAWA,CAAAA,CAACC,WAAS,cAAe,GAAG2+B,CAAc,CAAG,GAAGN,CAAY,KAExE,KACHpE,GAAW2E,YAAcjH,EACxB,UAACzjB,KAAAA,CAAG3W,UAAU,oEACZ,UAACqgC,GAAuBA,CACrB,GAAGe,CAAc,CAClBnH,QAASA,EACT94B,IAHsBk/B,YAGN,0DAChBj+B,QAAS,KACPu3B,EAAc,WAADA,MACf,EACC,GAAGmH,CAAY,UAEhB,UAAC/F,EAAaA,CACZz0B,MAAOhF,EAAE,EADGy5B,kBAEZC,KAAK,cACL3I,MAAOA,EACP8I,QAAQ,aAIZ,QAEJ,SAIZ,CAMA,SAASqH,GAAQ,cAAEC,CAAY,OAAEpQ,CAAK,CAAgB,EACpD,GAAM,CAAE1jB,SAAS,IAAI,CAAE,CAAGwH,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,GAEnC,MACE,UAACpW,MAAAA,CAAIC,UAAU,4CACb,UAACD,MAAAA,CAAIC,UAAU,wCACb,UAACwW,KAAAA,CAAGxW,UAAU,wDACXyiC,EAAa36B,GAAG,CAAC,CAAC,OAAExB,CAAK,SAAE61B,CAAO,CAAEltB,MAAI,SAAE7M,CAAO,CAAE,GAClD,CAAK+5B,GAAS59B,QAAU0Q,GAAMlU,IAE1B,CAF+B,EAE/B,iBAACsgC,EAAeA,CACb,GAAGpsB,CAAI,CACRlU,IAAK8+B,CAAAA,EAAAA,GAAAA,EAAAA,CAAWA,CAAC5qB,GAAMlU,IAAK4T,GAC5BwsB,QAAQ,aACR70B,MAAOA,EACPi1B,MAAM,IACNxzB,IAAKzB,EACL+rB,MAAOA,EACPjwB,QAAS,IACPo3B,IACAC,EAA0BnzB,GAC1BlE,MACA6M,GAAM7M,GAHeo3B,OAGLx6B,CAFSy6B,CAG3B,IAIF0C,GAAS59B,OAET,CAFiB,EAEjB,OAACo4B,EAAAA,EAAKA,CAAAA,UACJ,UAACwL,EAAgBA,CACfhH,QAAQ,KADOgH,QAEf77B,MAAOA,EACP20B,UAAU,qBACVc,YAAY,IACZ1J,MAAOA,EACPjwB,QAAS,KACPq3B,EAA0BnzB,EAC5B,EACAk1B,mBAF2B/B,UAEGxqB,GAAMusB,sCAEpC,UAACU,GAAuBA,CAACC,QAASA,EAAS71B,MAAOA,GAA1B41B,IAZhB51B,GAiBT,WAMnB,CAEA,OArZO,SAAkB,CAqZVo8B,QApZbC,CAAO,CAoZe,aAnZtBC,GAAe,CAAK,kCACpBhG,CAAgC,CAChCqE,wBAAsB,6BACtBC,CAA2B,mCAC3BvE,CAAiC,OACjCrC,CAAK,cACLmI,CAAY,MACZhG,CAAI,yBACJuE,CAAuB,cACvBF,CAAY,iBACZC,CAAe,WACfrE,CAAS,WACTG,CAAS,SACTpC,CAAO,OACPpI,CAAK,MACL2H,CAAI,CACJmH,iBAAe,CACD,EAgBd,IAAMtG,EAASxI,WASf,MACE,WAACtyB,MAAAA,CAAIC,UAAU,2BACb,UAACD,MAAAA,CACCC,UAAWmC,IAAG,CACZ,eADWA,GACQwgC,EACnB3C,UAAW,CAAC2C,CACd,YAEA,WAAC5iC,MAAAA,CAAIC,UAAU,oCACZ4iC,EAAe,KACd,UAAC7iC,MAAAA,CAAIC,UAAU,mCAZpB,GANqBy6B,EACtB,CACE/5B,KAAM,UACN,aAAc,EACd,aAAc+5B,CAChB,EACA,CAAC,CAYwD,GAAGoI,OACpD,UADqE,EACpE/K,EAAIA,CAAAA,CACH/8B,IAAKu/B,EAAMv/B,GAAG,CACdyP,OAAQ8vB,EAAM9vB,MAAM,CACpBpI,QAASo3B,EAET+C,gBAAgB,GAFc/C,+DAG9B0I,mBAAmB,WAEnB,UAAC7H,EAAIA,CAAChI,CAADgI,KAAQhI,EAAOiI,MAAOA,QAIjC,UAACv6B,MAAAA,CAAIC,UAAU,gCACb,UAAC6gC,GAAAA,MA/CTpE,YACAC,kBACAqE,YACAlE,eACAiE,0BACAE,QACA3O,EACA2H,wCACA4C,EACAqE,qDACAC,oCACAvE,kBACAwE,WAuCE,UAACphC,MAAAA,CACCC,UAAWmC,IAAG,CACZ,eADWA,QACa,CAAC04B,EACzB,4BAA6BA,CAC/B,YAEA,UAAC96B,MAAAA,CACCC,UAAWmC,IAAG,CACZ,eADWA,GACQwgC,EACnB3C,UAAW,CAAC2C,CACd,YAEA,UAAC5iC,MAAAA,CAAIC,UAAU,qBAAqBgI,cAAY,kCAC7Cy6B,GAAclkC,OAAS,UAACikC,GAAAA,CAAQnQ,MAAOA,EAAOoQ,aAAcA,IAAmB,aAM5F,ECxGaK,GAAa,CAAC,WAAEC,CAAS,QAAEjhC,CAAM,CAAEnE,SAAO,CAAe,IACpE,GAAM,CAACqlC,EAAUC,EAAY,CAAG3lB,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,GAClC,CAAC4lB,EAAeC,EAAiB,CAAG7lB,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,GAC5C,CAAC8lB,EAAcC,EAAgB,CAAG/lB,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,GAC1C,CAACgmB,EAAmBC,EAAqB,CAAGjmB,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,GACpDkmB,EAAgBlgC,CAAAA,EAAAA,EAAAA,MAAAA,CAAMA,CAAoB,MAC1C,CAACmgC,EAAaC,EAAe,CAAGpmB,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GACzCqmB,EAAqBrgC,CAAAA,EAAAA,EAAAA,MAAAA,CAAMA,CAAoB,MAC/C,GAAEhC,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,cACvB,QAAEoN,EAAS,IAAI,CAAE,CAAGwH,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,GAEnCjS,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACHpC,GAAQuhC,OAAgBt9B,EAC/B,EAAG,CAACjE,EAAO,EAUX,IAAM8hC,EAAc,KAClBre,WAAW,KACTie,GAAevkC,SAASsf,OAC1B,EAAG,GACL,EAEMslB,EAAe,CAACC,EAAuB3vB,KAC3CuvB,GAAe,GACfT,EAAYa,GACZX,EAAiBhvB,EACnB,EAEA,MACE,WAACpU,MAAAA,CACCC,UAAWyjC,EAAc,4BAA8B,iBACvDnK,eAAgB,KACVmK,IACFC,GAAe,GACfL,EAAgBL,CAFD,EAGfO,EAAqBL,GACrBU,IAEJ,YAEA,UAAC7jC,MAAAA,CAAIC,UAAU,6GACb,WAACkC,SAAAA,CAAOE,QAASzE,EAASkB,KAAK,SAASmB,UAAU,iBAChD,UAACsS,EAAAA,EAAIA,CAAAA,CAACvV,KAAK,QAAQiD,UAAU,WAC7B,WAACuC,OAAAA,CAAKvC,UAAU,4EACbsB,EAAE,SACH,UAACiB,OAAAA,CAAKvC,UAAU,mBAAWsB,EAAE,kBAIlC8hC,EACC,WAAClhC,SAAAA,CACC/B,IAAKqjC,EACLphC,QA5CO,CA4CE2hC,IA3CfL,GAAe,GACfT,OAAYl9B,GACZwf,WAAW,KACToe,GAAoB1kC,SAASsf,OAC/B,EAAG,IACL,EAuCQve,UAAWmC,IACT,gBADWA,sFAEX,2EACA,+BACA,uBACA,oEAEF6hC,gBAAc,OACdnlC,KAAK,mBAEL,UAACyT,EAAAA,EAAIA,CAAAA,CAACvV,KAAK,wBAAwBiD,UAAU,iCAC7C,UAACuC,OAAAA,UAAM6gC,EAAa98B,KAAK,MAEzB,KAEH88B,EACC,UAAC5sB,KAAAA,UACE4sB,EAAajH,OAAO,EAAEr0B,IAAI,GACzBg8B,EAAS70B,IAAI,EAAElU,IACb,MAAC4b,KAAAA,UACC,MAACmhB,EAAAA,EAAIA,CAAAA,CACHyE,gBAAgB,6GAChBd,WAAW,EACXz7B,UAAWmC,IACT,gBADWA,qCAEX,+DACA,wEACA,6BACA,wDAEFpH,IAAK8+B,GAAAA,EAAAA,CAAWA,EAAU5qB,IAAI,CAAClU,GAAG,CAAE4T,GACpCipB,YAAakM,EAAS70B,IAAI,CAAC2oB,WAAW,CACtCx1B,QAAS,IACPq3B,EAA0BqK,EAASx9B,KAAK,CAAE88B,EAAa98B,KAAK,EAC5Dw9B,EAAS1hC,IADgBq3B,GACT,KAChBqK,EAAS70B,IAAI,EAAE7M,UAAUpD,EAC3B,EACA08B,wBAAuBoI,EAAS70B,IAAI,CAACusB,4BAA4B,EAAEG,KACnEC,yBAAwBkI,EAAS70B,IAAI,CAACusB,4BAA4B,EAAEzuB,eAEnE+2B,EAASx9B,KAAK,IArBVw9B,EAASx9B,KAAK,EAwBrB,QAKR,EADA,CACA,OAACkQ,KAAAA,UACEusB,EAAUj7B,GAAG,CAAC,CAACg8B,EAAU3vB,IACxB,GAAcgoB,SAAS59B,OAEnB,CAF2B,EAE3B,OAACoY,EAL0D,GAK1DA,UACC,WAACzU,SAAAA,CACC/B,IAAKmjC,IAAsBnvB,EAAQwvB,EAAqB,KACxDvhC,QAAS,KACPyhC,EAAaC,EAAU3vB,GACvBslB,EAA0BqK,EAASx9B,KAAK,CAC1C,EACAtG,UAAWmC,GAFgBs3B,CAGzB,gBADWt3B,mGAEX,8FACA,wEACA,wDACA,mFAEF6hC,gBAAc,QACdnlC,KAAK,SACL68B,wBAAuBoI,EAAS70B,IAAI,EAAEusB,8BAA8BG,KACpEC,yBAAwBkI,EAAS70B,IAAI,EAAEusB,8BAA8BzuB,gBAErE,UAACxK,OAAAA,UAAMuhC,EAASx9B,KAAK,GACrB,UAACgM,EAAAA,EAAIA,CAAAA,CAACvV,KAAK,wBAAwBiD,UAAU,oCApBxC8jC,EAASx9B,KAAK,EAwBhBw9B,EAAS70B,IAAI,EAAElU,IAEtB,CAF2B,EAE3B,OAAC4b,KAAAA,UACC,UAACmhB,EAAAA,EAAIA,CAAAA,CACHyE,gBAAgB,kEAChBd,UAAW,GACXz7B,UAAWmC,IACT,gBADWA,mDAEX,+DACA,wEACA,wDAEFpH,IAAK8+B,CAAAA,EAAAA,GAAAA,EAAAA,CAAWA,CAACiK,EAAS70B,IAAI,CAAClU,GAAG,CAAE4T,GACpCipB,YAAakM,EAAS70B,IAAI,CAAC2oB,WAAW,CACtCx1B,QAAS,IACPq3B,EAA0BqK,EAASx9B,KAAK,EACxCw9B,EAAS1hC,OAAO,KADSq3B,EAEhBxqB,IAAI,EAAE7M,UAAUpD,EAC3B,EACA08B,wBAAuBoI,EAAS70B,IAAI,CAACusB,4BAA4B,EAAEG,KACnEC,yBAAwBkI,EAAS70B,IAAI,CAACusB,4BAA4B,EAAEzuB,eAEnE+2B,EAASx9B,KAAK,IApBVw9B,EAASx9B,KAAK,EAyBpB,UAMnB,EAAE,GC9KgC,KAChC,GAAM,WAAE1D,CAAS,iBAAEC,CAAe,CAAE,CAAGohC,CAAAA,EAAAA,EAAAA,EAAAA,CAAOA,GACxC,QAAEt1B,CAAM,CAAE3K,QAAM,CAAE,CAAGmS,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,GAE9B+tB,EAAWC,STgCHA,CAAmC,CAAEthC,CAAwB,EAC3E,IAAMuhC,EAAYvK,ESjCqBsK,CTkCrC/1B,EAAAA,EAAAA,EAAAA,CAAGA,CAAC,aAAc,sDAClB1R,GAGI2nC,EAAYxK,EAChB,GAAGzrB,CAAAA,EAAAA,EAAAA,EAAAA,CAAGA,CAAC,gBAAgB,mCAAmC,EAAEk2B,IAAe,CAC3E5nC,GAEI6nC,EAAqBn2B,CAAAA,EAAAA,EAAAA,EAAAA,CAAGA,CAAC,eAAgB,2BAE/C,MAAO,CACLizB,WAAY,CAAEtmC,IAAKqpC,CAAU,EAC7BhC,WAAY,CAAErnC,IAAKspC,CAAU,EAC7BhH,YAAa,CAAEtiC,IAAK,GAAGwpC,EAAAA,EAAqB7nC,EAAK,gCAAgC,CAAC,EAClF6gC,mBAAoB,CAAExiC,IAAK,GAAGwpC,EAAAA,EAAqB7nC,EAAK,8BAA8B,CAAC,EACvFmhC,cAAe,CAAE9iC,IAAK,GAAGwpC,EAAAA,EAAqB7nC,EAAK,iBAAiB,CAAC,EACrE8gC,iBAAkB,CAAEziC,IAAK,GAAGwpC,EAAAA,EAAqB7nC,EAAK,4BAA4B,CAAC,EACnF+gC,kBAAmB,CAAE1iC,IAAK,GAAGwpC,EAAAA,EAAqB7nC,EAAK,6BAA6B,CAAC,EACrFihC,qBAAsB,CACpB5iC,IAAKqT,CAAAA,EAAAA,EAAAA,EAAAA,CAAGA,CAAC,sCAAuC,yCAClD,EACAwvB,WAAY,CACV7iC,IAAKqT,CAAAA,EAAAA,EAAAA,EAAAA,CAAGA,CACN,mCACA,iDAEJ,EACAsvB,aAAc,CACZ3iC,IAAKqT,CAAAA,EAAAA,EAAAA,EAAAA,CAAGA,CACN,oCACA,2EAEJ,EACA6zB,aAAc,CACZlnC,IAAK8H,EACD,GAAG0hC,EAAAA,EAAqB7nC,EAAK,8BAA8B,CAAC,CAC5D,GAAG6nC,EAAAA,EAAqB7nC,EAAK,uBAAuB,CAAC,CAE7D,CACF,ESzE0CiS,GAAU,KAAM9L,GAElD2hC,EAAc5hC,GAAW6B,SAAS+/B,YAClCC,GAAW1mB,CAAQnb,GAAW6B,SAASigC,eAAkB1gC,EAAOzI,QAAQ,CAAC,WAEzEqJ,EACJhC,GAAW6B,SAASkgC,SACpB/hC,GAAW6B,SAASmgC,cACpBhiC,GAAW6B,SAASogC,WAEhBC,EACJliC,GAAW6B,SAASsgC,oBACpBniC,GAAW6B,SAASugC,oBACpBpiC,GAAW6B,SAASwgC,gBACpBriC,GAAW6B,SAASygC,eAEtB,MAAO,CACL,GAAGhB,CAAQ,CACXrG,cAAe2G,EAAcN,GAAUrG,mBAAgB93B,EACvD43B,qBAAsB/4B,EAAmBs/B,GAAUvG,0BAAuB53B,EAC1E23B,aAAcoH,GAAuBlgC,EAAmBs/B,GAAUxG,kBAAe33B,EACjF63B,WAAY6G,EAAWP,GAAUtG,gBAAa73B,CAChD,CACF,EAAE,GCZ6B,CAAC,CAC9Bg9B,WAAS,OACTzI,CAAK,cACLwG,CAAY,MACZrE,CAAI,iBACJ0E,CAAe,WACfgE,CAAS,iBACTpE,CAAe,CACfC,yBAAuB,CACvBnE,WAAS,SACT8F,CAAO,cACPC,CAAY,wBACZ3B,CAAsB,6BACtBC,CAA2B,mCAC3BvE,CAAiC,kCACjCC,CAAgC,SAChCnC,CAAO,OACPpI,CAAK,MACL2H,CAAI,CACa,IACjB,GAAM,CAACoL,EAAYC,EAAc,CAAG/nB,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GACvC,CAACgoB,EAAeC,EAAiB,CAAGjoB,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GAC7C,GAAEhc,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,CAAC,aAAc,YAAY,EAClDikC,EAAwBliC,CAAAA,EAAAA,EAAAA,MAAAA,CAAMA,CAAoB,MAElDmiC,EAAkBC,KAElBC,EAAa,KACjBN,GAAc,GACdE,GAAiB,GACjBlrB,SAASva,mBAAmB,CAAC,UAAW8lC,EAC1C,EAEMA,EAAgB,IACN,UAAU,CAApBn7B,EAAE1C,GAAG,EACP49B,GAEJ,EAEME,EAAuB,KAC3BxrB,SAASxa,gBAAgB,CAAC,UAAW+lC,EACvC,EAEME,EAA0B,KAC9BzrB,SAASva,mBAAmB,CAAC,UAAW8lC,EAC1C,EAcMG,EAAiB,KACrBvM,IACAl3B,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,QADUk3B,cAErB6L,GAAc,GACVC,GACFC,GAAiB,GACjBO,MAFiB,GAIA,GACjBD,IAEJ,EAUMhL,EAAmB,SAAVxI,EAET2T,EAAoB7jC,IACxB,gBAD0BA,0HAE1B,CACE,oBAAqB04B,CACvB,GAGI,eAAEV,CAAa,gBAAEC,CAAc,SAAEH,CAAO,CAAE,CAAGF,EAAuBC,GAE1E,MACE,iCACE,WAACgI,MAAAA,CACCtvB,GAAG,aACH1S,UAAWmC,IAAG,gBAADA,OAAyB,CACpC,8BAA+B,CAACkwB,EAChC,aAAcwI,CAChB,aAEA,WAAC96B,MAAAA,CACCC,UAAWmC,IAAG,gBAADA,wCAA0D,CACrE,UAAW,CAAC,CAAC6+B,EACb,kBAAmB,CAACA,CACtB,aAEC+B,GAAaA,EAAUxkC,MAAM,CAAG,EAC/B,WAAC2D,SAAAA,CACClC,UAAWmC,IAAG,YAAa,CACzB,GADWA,uBACgB,CAAC,CAAC6+B,CAC/B,GACA5+B,QAhEQ,CAgEC6jC,IA/DnBzM,IACI8L,GAAeC,GAAiB,GAChCH,GACFC,GAAc,EAHK7L,CAInBsM,GAFc,GAIdD,IACAR,GAAc,GAElB,EAuDYxmC,KAAK,SACLmlC,gBAAeoB,EACf1yB,GAAG,6BAEH,UAACJ,EAAAA,EAAIA,CAAAA,CACHvV,KAAK,OACLiF,KAAK,KACLhC,UAAWmC,IAAG,eAAgB,CAC5B,oBAAqB04B,CACvB,KAEF,WAACt4B,OAAAA,CACCvC,UAAWmC,IAAG,gBAADA,kDAAoE,CAC/E,oBAAqB04B,CACvB,aAEA,UAACt4B,OAAAA,CAAKvC,UAAU,mBAAWsB,EAAE,UAC5BA,EAAE,cAGL,KACH,EASG,KARF,UAAC4kC,EAAcA,CACb7T,MAAOA,EACPiI,GAFa4L,GAEN5L,EACPt6B,UAAWmC,IAAG,CACZ,eADWA,WACgB,CAAC,CAAC6+B,CAC/B,GACAvG,QAASA,IAGb,WAAC16B,MAAAA,CAAIC,UAAU,mEACZghC,EACC,UAACjhC,MAAAA,CAAIC,UAAU,wBACb,UAAC+xB,EAAgBA,CAACM,MAAOA,EAAQ,GAAG2O,CAAuB,CAA1CjP,IAEjB,KACJ,WAAChyB,MAAAA,CAAIC,UAAU,8CACZylC,GAAiBxD,cAAgB,CAAChB,EACjC,UAACnJ,EAAAA,EAAIA,CAAAA,CACH93B,UAAU,OACVu8B,gBAAgB,0CAChBd,WAAW,EACX1gC,IAAK0qC,GAAiBxD,aAAalnC,IACnC68B,YAAa+E,EACbuF,mBAAmB,EACnB9/B,QAAS,KACPo3B,IACAl3B,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,QADUk3B,WAErBG,EAAc,WAADA,GACf,WAECQ,GAAiB,CAACsC,EACjB,UAACl6B,OAAAA,CAAKvC,UAAU,2HACbsB,EAAE,cAGL,iCACE,UAACgR,EAAAA,EAAIA,CAAAA,CACHvV,KAAK,WACLiF,KAAK,KACLhC,UAAWmC,IAAG,eAAgB,CAC5B,WAAY,CAACkwB,EACb,oBAAqBwI,CACvB,KAEF,UAACt4B,OAAAA,CACCvC,UAAWmC,IACT,gBADWA,+DAEX,CACE,oBAAqB04B,CACvB,YAGDv5B,EAAE,mBAKT,KACH64B,GAAiB,CAACsC,EAAO,UAAC18B,MAAAA,CAAIC,UAAU,uBAA0B,KAClEy8B,EACC,WAACv6B,SAAAA,CACClC,UAAU,eACVoC,QAAS,KACPu3B,EAAc,WAADA,MACboM,GACF,EACA/B,gBAAesB,EACfzmC,KAAK,mBAEL,UAACyT,EAAAA,EAAIA,CAAAA,CACHvV,KAAK,cACLiF,KAAK,KACLhC,UAAWmC,IAAG,eAAgB,CAAjBA,WACC,CAACkwB,EACb,gBAAiBwI,CACnB,KAEF,UAACt4B,OAAAA,CACCvC,UAAWmC,IACT,gBADWA,4DAEX,CACE,oBAAqB04B,CACvB,YAGDv5B,EAAE,YAAa,CAAE27B,SAAUR,EAAK1/B,IAAI,QAGvC,CAAC0oC,GAAiBpE,YAAcoE,GAAiBrD,UAAAA,CAAS,EAC5D,CAAClB,EACD,UAACnhC,MAAAA,CAAIC,UAAWmC,IAAG,gBAADA,CAAoB,OAAQ,CAACg4B,CAAc,YAC3D,WAACp6B,MAAAA,CAAIC,UAAU,8BACZylC,GAAiBrD,YAAc,CAACjB,EAC/B,UAACphC,MAAAA,CAAIC,UAAWmC,IAAG,QAAS,CAAE,OAAZA,CAAkC,YAClD,UAAC21B,EAAAA,EAAIA,CAAAA,CACF,GAAG2N,EAAgBrD,UAAU,CAC9BF,mBAAmB,EACnBzG,WAAW,EACXz7B,UACEm6B,EACI,6EACA6L,EAEN5jC,QAAS,KACPo3B,IACAl3B,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,QADUk3B,UAErBG,EAAc,WAADA,MACf,WAECr4B,EAAE,cAGL,KACH6/B,EACC,UAACphC,MAAAA,CAAIC,UAAU,iBACb,UAACmhC,EAAAA,CACCnhC,UAAWgmC,EACX3D,kBAAmBmD,WAElBlkC,EAAE,cAGL,KACHmkC,EAAgBpE,UAAU,EAAIjH,EAC7B,UAACr6B,MAAAA,CACCC,UAAU,OACVoC,QAAS,KACPo3B,IACAG,EAAc,WAADA,IADQH,EAEvB,WAEA,WAAC6G,GAAuBA,CACtB5iC,SAAUgoC,GAAiBpE,OADLhB,KACiBtlC,KAAO,GAC9C+C,MAAOwD,EAAE,oBACT1D,eAAgBmjC,EAChB9G,QAASA,EACT94B,gBAAiBgB,IACf,gBADiBA,mDAEjB,CACE,oBAAqB04B,CACvB,GAEFyF,aAAc,KACZ+E,GAAc,GACdE,EAAiB,GACnB,EACC,GAAGzE,CAAY,WAEhB,UAACxuB,EAAAA,EAAIA,CAAAA,CACHvV,KAAK,cACLiF,KAAK,KACLhC,UAAWmC,IAAG,gBAADA,SAA2B,CACtC,WAAY,CAACkwB,EACb,gBAAiBwI,CACnB,KAEF,UAACt4B,OAAAA,UAAMjB,EAAE,2BAGX,KACHmkC,EAAgBpE,UAAU,EAAI,CAACjH,EAC9B,WAACr6B,MAAAA,CACCC,UAAU,OACVoC,QAAS,KACPo3B,IACAG,EAAc,WAADA,IADQH,EAEvB,YAEC,EASG,KARF,UAAClnB,EAAAA,EAAIA,CAAAA,CACHvV,KAAK,cACLiF,KAAK,KACLhC,UAAWmC,IAAG,gBAADA,SAA2B,CACtC,WAAY,CAACkwB,EACb,gBAAiBwI,CACnB,KAGJ,UAAC55B,EAAAA,EAAKA,CAAAA,CACJxD,SAAUgoC,GAAiBpE,YAAYtmC,KAAO,GAC9C+C,MAAOwD,EAAE,oBACT1D,eAAgBmjC,EAChB3/B,UAAU,EACVC,OAAQ,KACNgkC,EAAc,IACdE,EAAiB,GACnB,EACApkC,gBACEg5B,EACI,8IACAh4B,IACE,gBADAA,mDAEA,CACE,oBAAqB04B,CACvB,GAGP,GAAGiG,CAAY,MAGlB,UAGN,cAIRsE,CAAAA,GAAcE,CAAAA,CAAY,EAC1B,UAACvlC,MAAAA,CACCC,UAAU,oGACVgI,cAAY,oBACZ5F,QAASujC,IAGZ5C,GAAaA,EAAUxkC,MAAM,CAAG,EAC/B,UAACwB,MAAAA,CACCiI,cAAY,aACZhI,UAAWmC,IAAG,CAAEgkC,QAASf,EAAYgB,KAAxBjkC,KAAmC,CAACijC,CAAW,YAE5D,UAAChN,EAAWA,CACVt2B,OAAQsjC,CADEhN,CAEVC,UAAU,OACVC,aAAc6M,EACd5M,4BAA4B,aAC5BE,YAAa,KACXpe,SAASC,cAAc,CAAC,qBAAqBiE,SACtC,YAGT,UAACukB,GAAUA,CAAChhC,MAADghC,CAASsC,EAAYrC,UAAWA,EAAWplC,QAnS5C,CAmSqD0oC,IAlSzEhB,EAAc,GAChB,QAoSU,KACJ,UAACjN,EAAWA,CACVt2B,OAAQwjC,CADElN,CAEVC,UAAU,QACVC,aAAc6M,EACd5M,4BAA4B,sBAE3BkE,GAAQ6I,EACP,UAACgB,GAAAA,CACC7J,KAAMA,EACNC,UAAW+I,EACX9nC,QA7SS,CA6SA4oC,IA5SnBhB,GAAiB,EACnB,EA4SY1I,UAAWA,EACXD,iCAAkCA,EAClCD,kCAAmCA,IAEnC,UAIR,UAACqF,MAAAA,CAAIhiC,UAAU,2BACb,UAAC0iC,GAAQA,CACPC,KADOD,GACEC,EACTC,aAAcA,EACdhG,iCAAkCA,EAClCqE,uBAAwBA,EACxBC,4BAA6BA,EAC7BvE,kCAAmCA,EACnCrC,MAAOA,EACPyG,gBAAiBA,EACjBlE,UAAWA,EACXJ,KAAMA,EACNC,UAAW+I,EACXhD,aAAcM,EACd/B,wBAAyBA,EACzBF,aAAcA,EACdrG,QAASA,EACTpI,MAAOA,EACP2H,KAAMA,EACNmH,gBAAiBA,QAK3B,EAAE,GAasB,CAAC,KACvBpmC,CAAG,SACHqH,CAAO,UACP6C,CAAQ,aACR2yB,CAAW,CAMZ,GAEG,UAACE,EAAAA,EAAIA,CAAAA,CACHyE,gBAAiBp6B,IACf,gBADiBA,gBAEjB,4FACA,wEACA,wDACA,iFAEFnC,UAAU,wJACVy7B,WAAW,EACX1gC,IAAKA,EACLqH,QAASA,EACTw1B,YAAaA,WAEZ3yB,IAKDqhC,GAAiB,CAAC,CACtB7J,MAAI,WACJC,CAAS,SACT/+B,CAAO,WACPk/B,CAAS,kCACTD,CAAgC,mCAChCD,CAAiC,CACjB,IAChB,GAAM,QAAEhuB,EAAS,IAAI,CAAE,CAAGwH,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,GAE7B,GAAE7U,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,cACvBu7B,EAA6BC,CAAAA,EAAAA,GAAAA,EAAAA,CAAwBA,CAACN,EAAKO,YAAY,CAAE,QAAEruB,CAAO,GAExF,MACE,WAAC3C,EAAAA,EAASA,CAAAA,CAACysB,WAAW,cACpB,UAAC14B,MAAAA,CAAIC,UAAU,8GACb,WAACkC,SAAAA,CAAOE,QAASzE,EAASkB,KAAK,SAASmB,UAAU,iBAChD,UAACsS,EAAAA,EAAIA,CAAAA,CAACvV,KAAK,QAAQiF,KAAK,KAAKhC,UAAU,WACvC,WAACuC,OAAAA,CAAKvC,UAAU,4EACbsB,EAAE,SACH,UAACiB,OAAAA,CAAKvC,UAAU,mBAAWsB,EAAE,iCAInC,WAACvB,MAAAA,CAAIC,UAAU,iBACb,UAACD,MAAAA,CAAIC,UAAU,gBACb,UAACD,MAAAA,CAAIC,UAAU,mFACb,UAACsS,EAAAA,EAAIA,CAAAA,CAACvV,KAAK,OAAOiF,KAAK,WAG3B,WAACjC,MAAAA,CAAIC,UAAU,wJACb,UAACuC,OAAAA,UAAMjB,EAAE,YAAa,CAAE27B,SAAUR,EAAK1/B,IAAI,KAC3C,WAACgD,MAAAA,CAAIC,UAAU,uBACb,UAACuC,OAAAA,CAAKvC,UAAU,qBAAay8B,EAAKS,UAAU,GAAQ,IAAE57B,EAAE,aAE1D,UAACvB,MAAAA,UAAKuB,EAAE,oBAAqB,CAAE67B,kBAAmBL,CAA2B,KAC5EL,EAAKW,aAAa,CACjB,UAACr9B,MAAAA,UAAKuB,EAAE,qBAAsB,CAAE87B,cAAeX,EAAKW,aAAa,KAC/D,WAGR,WAACr9B,MAAAA,CAAIC,UAAU,kHACZ08B,GAAWW,aAAatiC,IACvB,UAACyrC,GAAAA,CACCzrC,IAAK2hC,EAAUW,WAAW,CAACtiC,GAAG,CAC9BqH,QAAS,KACPu3B,EAAc,WAADA,sBACf,EACA/B,YAAa+E,WAEZr7B,EAAE,sBAEH,KACHo7B,GAAWe,mBAAmB1iC,IAC7B,UAACyrC,GAAAA,CACCzrC,IAAK2hC,EAAUe,iBAAiB,CAAC1iC,GAAG,CACpCqH,QAAS,KACPu3B,EAAc,WAADA,yBACf,EACA/B,YAAa+E,WAEZr7B,EAAE,aAEH,KAEHo7B,GAAWa,oBAAoBxiC,KAAO,CAAC6hC,EACtC,UAAC4J,GAAAA,CACCzrC,IAAK2hC,EAAUa,kBAAkB,CAACxiC,GAAG,CACrCqH,QAAS,KACPu3B,EAAc,WAADA,0BACf,EACA/B,YAAa+E,WAEZr7B,EAAE,cAEH,KAEHo7B,GAAWc,kBAAkBziC,KAAO,CAAC6hC,EACpC,UAAC4J,GAAAA,CACCzrC,IAAK2hC,EAAUc,gBAAgB,CAACziC,GAAG,CACnCqH,QAAS,KACPu3B,EAAc,WAADA,wBACf,EACA/B,YAAa+E,WAEZr7B,EAAE,iBAEH,KAEHo7B,GAAWgB,cAAc3iC,IACxB,UAACyrC,GAAAA,CACCzrC,IAAK2hC,EAAUgB,YAAY,CAAC3iC,GAAG,CAC/BqH,QAAS,KACPu3B,EAAc,WAADA,4BACf,EACA/B,YAAa+E,WAEZr7B,EAAE,4BAEH,KAEHo7B,GAAWiB,sBAAsB5iC,IAChC,UAACyrC,GAAAA,CACCzrC,IAAK2hC,EAAUiB,oBAAoB,CAAC5iC,GAAG,CACvCqH,QAAS,KACPu3B,EAAc,WAADA,4BACf,EACA/B,YAAa+E,WAEZr7B,EAAE,4BAEH,KAEHo7B,GAAWkB,YAAY7iC,IACtB,UAACyrC,GAAAA,CACCzrC,IAAK2hC,EAAUkB,UAAU,CAAC7iC,GAAG,CAC7BqH,QAAS,KACPu3B,EAAc,WAADA,uBACf,EACA/B,YAAa+E,WAEZr7B,EAAE,uBAEH,KAEHo7B,GAAWmB,eAAe9iC,IACzB,UAACyrC,GAAAA,CACCzrC,IAAK2hC,EAAUmB,aAAa,CAAC9iC,GAAG,CAChCqH,QAAS,KACPu3B,EAAc,WAADA,6BACf,EACA/B,YAAa+E,WAEZr7B,EAAE,6BAEH,KAEJ,UAACY,SAAAA,CACClC,UAAWmC,IACT,gBADWA,oEAEX,iHACA,0CACA,qGACA,wDACA,0CACA,iFAEFC,QAAS,UACPu3B,EAAc,WAADA,cACbh8B,IACA,MAAMk/B,GACR,EACAh+B,KAAK,kBAEJyC,EAAE,kBAKb,kBC5mBA,IAAMmlC,GAAqBpoC,OAAOqoC,MAAM,CAAC,CACvC/qC,MAAO,YACPgrC,QAAS,SACTC,OAAQ,QACV,GAKaC,GAAqB,CAAC,QACjC9nC,CAAM,UACNkG,CAAQ,WACRjF,CAAS,YACT8mC,CAAU,CACV,GAAG9oC,EACqB,GAEtB,WAAC+B,MAAAA,CACCC,UAAWmC,IACT,gBADWA,+BAEX,CACE,4BAAwC,UAAXpD,EAC7B,8BAA0C,YAAXA,EAC/B,4BAA6BA,YAC/B,EACAiB,GAEFiI,YAAWw+B,EAAkB,CAAC1nC,EAAO,CACrCgoC,eAAa,EACb/+B,cAAY,qBACX,GAAGhK,CAAI,WAEP8oC,EACC,UAACx0B,EAAAA,EAAIA,CAAAA,CAAE,GAAGw0B,CAAU,GAEpB,iCACG/nC,aAAsB,UAACuT,EAAAA,EAAIA,CAAAA,CAACvV,KAAK,eAAek9B,QAAQ,UAC7C,YAAXl7B,GAAwB,UAACuT,EAAAA,EAAIA,CAAAA,CAACvV,KAAK,eAAek9B,QAAQ,aAG9Dh1B,6CEzCA,IAAM+hC,GAAmC,CAC9C3+B,cAAe,2BACfC,gBAAiB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BnB,CAAC,CACAC,eAAgB,0BAClB,EAAE,GAwB6B,CAC7BF,cAAe,UACfC,gBAAiB,CAAC;;;;;;;;;CASnB,CAAC,CACAC,eAAgB,SAClB,EAAE,GAqBoC,CACpCF,cAAe,iBACfC,gBAAiB,CAAC;;;;;CAKnB,CAAC,CACAC,eAAgB,gBAClB,EAAE,GAqBqC,CACrCF,cAAe,kBACfC,gBAAiB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDnB,CAAC,CACAC,eAAgB,iBAClB,EAAE,GAqBiC,CACjCF,cAAe,cACfC,gBAAiB,CAAC;;;;;;;;;;;;;;;;;CAiBnB,CAAC,CACAC,eAAgB,aAClB,EAAE,GAkBkD,CAClDF,cAAe,+BACfC,gBAAiB,CAAC;;;;CAInB,CAAC,CACAC,eAAgB,8BAClB,EAAE,GC9P0B,CAC1B0+B,aAAc,gBACdC,aAAc,gBACdC,KAAM,iBACNC,QAAS,UAETC,MAAO,QACPC,WAAY,cACZC,UAAW,aAEXC,YAAa,eAEbC,WAAY,cACZC,MAAO,iBAEPC,IAAK,KAIP,EAAW,gBCnBJ,IAAMC,GAA4B,gBAAgB,GESjC,IACtB,OAAQ7qC,GACN,IAAK,eACL,IAAK,uBACH,OAAO8qC,GAAaZ,SAADY,GAAa,KAC7B,eACL,IAAK,uBACH,OAAOA,GAAaX,SAADW,GAAa,KAC7B,OACH,OAAOA,GAAaV,IAAI,KAALU,QAEnB,OAAOA,GAAaH,KAAK,IAANG,CAChB,aACH,OAAOA,GAAaJ,SAADI,CAAW,SAE9B,MAAO,EACX,CACF,EAEaC,GAAQ,CACnBC,IAAK,MACLC,KAAM,MACR,EAAW,SAIKC,GAAc,MAC5B10B,EAAO,IAAI,UACX9J,EAAW,IAAI,MACf5K,EAAO,aAAa,WACpBqpC,CAAS,gBACTC,EAAiBL,GAAMC,GAAG,mBAC1BK,CAAiB,CAQlB,QJqCC1qC,EIpCA,GAAM,CAAC4D,CJoCuE,CIpCrE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,sBACrB,UACJ8mC,CAAQ,aACRC,CAAW,UACX/wB,CAAQ,OACRgxB,CAAK,CACLlmB,UAAW,eAAEmmB,CAAa,CAAE,UAC5B5kB,CAAQ,eACR6kB,CAAa,CACd,CAAGjxB,CAAAA,EAAAA,GAAAA,EAAAA,CAAcA,GAEZ,CAACkxB,EAAcC,EAAgB,CAAGrrB,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GAE3CsrB,ED3DD,SAASC,EACd,GAAM,CAAElqC,MAAI,CAAE,CHiHPoK,CAAAA,CGjHU+/B,CHiHV//B,EAAAA,CAAAA,CAAQA,CAA2C,CACxDC,SAAU,CAAC+/B,GGlH2B,CACtCrgC,CADqCogC,KAC9B,CAAClB,GACV,EHgH+C,GG9G/C,MAAO,CACLzqC,QAASN,CAAAA,CAJwB+qC,CAIxB/qC,GAAAA,CAAAA,CAAyBA,CAAC,CACjCC,kBAAmB6B,EACnB5B,KAAM6qC,EACR,EACF,CACF,ICgDyEzqC,OAAO,CAExE6rC,EACK,MDtDwBpB,CCsDjCr0B,GAAiB,CAACm1B,GAAgBP,IAAmBL,GAAMC,GAAG,CAE1DkB,EAAcC,CAAAA,EAAAA,EAAAA,WAAAA,CAAWA,CAC7B,GAA4BhB,EAAY,GAAGA,EAAU,CAAC,EAAEiB,EAAAA,CAAO,CAAGA,EAClE,CAACjB,EAAU,EAGPkB,EAAsBX,EAAcQ,EAAY,gBAAgBI,UAEhEC,EAAUf,EAAMU,EAAY,eAC5BM,EAAOhB,EAAMU,EAAY,SACzBO,EAAQjB,EAAMU,EAAY,UAE1B,CAAEtqC,KAAM8qC,CAAgB,CAAE,CJzBzB1gC,CAAAA,CIyB4B2gC,CJzB5B3gC,EAAAA,CAAAA,CAAQA,CAAqD,CAClEC,SAAU,CAACg+B,GIyBX,UAAEv9B,EAD+DigC,KACrDn2B,OAAM1U,CAAK,EJzBgC,CI0BvD,QAAW,CAAC,CAAC0U,CJxBf,GI0BMo2B,EAASF,GAAkBG,WAAW,CAAC,EAAE,EAAED,QAAU,EAAE,CACvDE,EAAmBJ,GAAkBG,WAAW,CAAC,EAAE,EAAEC,iBACrDC,EACJD,GAAkBE,8BAAgCnB,EAGpD1kC,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACJikC,IAAmBL,GAAMC,GAAG,EAAE,CACd,CAACkB,EAAY,SAAS,EAAE,EAC/BA,EAAY,SAAUU,EAAOprC,MAAM,CAAG,EAAI,eAAiB,GAG1E,EAAG,CAAC0qC,EAAa1xB,EAAUoyB,EAAQnB,EAAeL,EAAe,EAEjE,GAAM,CACJxpC,KAAMqrC,CAAe,WACrB9yB,CAAS,OACTvb,CAAK,CACN,EJhBDs3B,CIgBIgX,CACF,OJjBoC,GIkBlCxgC,EACAygC,EAHeD,SAGH1B,EAAMU,EAAY,cAChC,IACA,CACE9rC,QACE,CAAC,CAAC,4BAA4BgtC,IAAI,CAACb,IAC1B,OAAT/1B,GACA,CAAE40B,CAAAA,IAAmBL,GAAME,IAAI,EAAI,CAACoB,CAAAA,CAAkB,EJtBrDrgC,CAAAA,EAAAA,EAAAA,CAAAA,CAAQA,CAAoC,CACjDC,SAAU,CAACohC,GAAiBnX,EAAU,CACtC,GAAGv1B,CAAO,IIwBZwG,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACR,GAAI8lC,EAEA,GAAkBK,SAASC,GAFV,IAEiBC,SAAShB,MAC1CS,EAAD,CAAkBK,SAASC,OAAOC,SAASf,OAU3ClB,EAAYW,EAAY,eACxBX,EAAYW,EAAY,SACxB1xB,EAAS0xB,EAAY,QAASe,GAAiBK,SAASC,OAAOC,SAAShB,MACxEhyB,EAAS0xB,EAAY,SAAUe,GAAiBK,SAASC,OAAOC,SAASf,OACzEb,GAAgB,KAZhBA,GAAgB,GAChBpxB,EAAS0xB,EAAY,QAAS,IAC9B1xB,EAAS0xB,EAAY,SAAU,gBAC/BZ,EAASY,EAAY,cAAe,CAClCpqC,KAAM,WACN+M,QAAStK,EAAE,+BACb,SAQG,GAAI3F,EAET,IAAK,CAFW,GAELA,KADIuD,KAAKsrC,KAAK,CAACtrC,KAAKC,SAAS,CAACxD,IACd8uC,aAAa,CAAE,GAC7B7+B,UAAY,aAAa,CAClC+8B,GAAgB,GAChBpxB,EAAS0xB,EAAY,QAAS,IAC9B1xB,EAAS0xB,EAAY,SAAU,gBAC/BZ,EAASY,EAAY,cAAe,CAClCpqC,KAAM,WACN+M,QAAStK,EAAE,+BACb,GAIR,EAAG,CAAC0oC,EAAiBzyB,EAAU0xB,EAAaZ,EAAU/mC,EAAGgnC,EAAa3sC,EAAM,EAE5EuI,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KAEJkkC,IACElxB,EAAWkxB,GAAkB,GAC5BA,GAAkB,GAE3B,CAJyB,CAItB,CAAClxB,EAAWkxB,EAAkB,EAEjC,IAAMsC,EAASjB,GAAkBG,WAAW,CAAC,EAAE,EAAEe,sBAC7C,GAAY,OAAD,GAAWR,IAAI,CAAC52B,GAK7B,IALoC,CAKpC,0BACGm3B,EAAO5iC,GAAG,CAAC,CAAC,MAAE/K,CAAI,OAAEuJ,CAAK,UAAE4c,CAAQ,CAAE,GAChC8lB,IAAiCjsC,aAA6B,SAATA,CAAS,CAAK,CAC9D,EADkE,CAClE,OAACinB,QAAAA,CAA8BnlB,KAAK,SAAU,GAAG+kB,EAASqlB,EAAYlsC,GAAM,EAAhEksC,EAAYlsC,IAGpB,UAATA,GAAoB4sC,EAAOprC,MAAM,CAAG,EAEpC,WAAC2lB,GAAAA,EAAUA,CAAAA,CACT5d,MAAOA,EACP8M,eAAe,SACfrW,KAAMksC,EAAYlsC,GAElB6tC,aAAc/C,GAAaH,KAAK,CAChCvkB,GAD0B0kB,MAChB,CAAC3kB,EACXM,gBAAiB,CACfqnB,SAAU,GACR,CAAK3nB,GAGEnW,OAHQ,WAGoB,IAACA,IACvB,OAATwG,EACEjS,EAAE,uBACFA,EAAE,0BAGZ,GAFQ,SAIR,UAACwpC,SAAAA,CAAO5+B,QAAQ,IAACsQ,MAAM,IAACzP,MAAM,wBAC3BzL,EAAE,kBAEJqoC,EAAO7hC,GAAG,CAAC,GACV,UAACgjC,SAAAA,CAAO/9B,MAAOy8B,EAAMz8B,KAAK,UACvBy8B,EAAMzsC,IAAI,EADoBysC,EAAMz8B,KAAK,KApBzCk8B,EAAYlsC,IA4BnB+sC,EACKD,GAAkBc,gBAAgBj+B,KAAK,GADf,EACkC3P,IAAI,GAAKA,GACxE,UAACmW,GAAAA,EAASA,CAAAA,CACR5M,MAAOA,EACP8M,eAAe,mBACfrW,KAAMksC,EAAYlsC,GAClB6tC,aAAcG,GAAgBhuC,GAC9B+lB,QAAkB,eAAT/lB,GAAyBma,EAClCiM,SAAU,CAACD,EAEXM,gBAAiB,CACfqnB,SAAU,IACR,GAAI,CAAC3nB,GAAa,CAAC,EAAUnmB,cAAwB,GACnD,OAAO,EAET,OAAQA,GACN,IAAK,eACL,IAAK,uBACH,GAAa,MAAM,CAAfwW,EACF,OAAOjS,EAAE,0BAEX,OAAOA,EAAE,6BACX,KAAK,QACH,OAAOA,EAAE,yBACX,KAAK,OACH,GAAa,MAAM,CAAfiS,EACF,OAAOjS,EAAE,sBAEX,OAAOA,EAAE,qBACX,KAAK,aACH,GAAa,OAATiS,EAAe,CACjB,GAAI,4BAA4B42B,IAAI,CAACp9B,GAAQ,CAC3C,GAAa,eAAe,CAAxBlO,GACF,GAAI,IAAiB,CAACmrC,GAAiBK,OAAAA,CAAM,EAAM,CAACb,EAClD,KADyD,EAClDloC,EAAE,+BACX,MACK,GACL,CAAConC,GAAgB,CAACsB,GAAiBK,OAAAA,CAAM,EACxC,EAACd,CAAD,EAAS,CAACC,CAAAA,CAAI,CAEf,EADA,KACOloC,EAAE,gCAGX,OAAO,CACT,CACA,GAAc,KAAVyL,GAAgB,CAACy8B,GAAkB,eAAe,CAAxB3qC,EAC5B,OAAOyC,EAAE,2BAEX,MAAiB,OACbA,EAAE,yBACFA,EAAE,0BACR,CACA,MAAO4hB,OAAYnW,GAAezL,EAAE,GAAT,wBAC7B,SACE,GAAa,2BAAwB,OAAOA,EAAE,8BAC9C,GAAa,yBAATvE,EAAiC,OAAOuE,EAAE,8BAC9C,OAAOA,EAAE,CAAC,QAAQ,EAAEvE,EAAK,MAAM,CAAC,CACpC,CACF,CACF,EACC,GAAa,iBAATA,GACI,yBAATA,GACS,iBAATA,GACS,yBAATA,GACAA,WACI,CAAEiuC,UAAW,EAAG,EAChB,CAAC,CAAC,EAzDD/B,EAAYlsC,IA2DjB,KAKJ,UAACmW,GAAAA,EAASA,CAAAA,CACR5M,MAAOA,EACP8M,eAAe,mBACfrW,KAAMksC,EAAYlsC,GAClB6tC,aAAcG,GAAgBhuC,GAC9B+lB,QAAkB,eAAT/lB,GAAyBma,EAClCiM,SAAU,CAACD,EAEXM,gBAAiB,CACfqnB,SAAU,IACR,GAAI,CAAC3nB,GAAa,CAAC,EAAmB,cAAe,GACnD,OAAO,EAET,OAAQnmB,GACN,IAAK,eACL,IAAK,uBACH,GAAa,MAAM,CAAfwW,EACF,OAAOjS,EAAE,0BAEX,OAAOA,EAAE,6BACX,KAAK,QACH,OAAOA,EAAE,yBACX,KAAK,OACH,GAAa,MAAM,CAAfiS,EACF,OAAOjS,EAAE,sBAEX,OAAOA,EAAE,qBACX,KAAK,aACH,GAAa,OAATiS,EAAe,CACjB,GAAI,4BAA4B42B,IAAI,CAACp9B,GAAQ,CAC3C,GAAI,CAAC27B,GAAgB,CAACsB,GAAiBK,OAAAA,CAAM,EAAO,EAACd,CAAD,EAAS,CAACC,CAAAA,CAAI,CAChE,EADoE,KAC7DloC,EAAE,gCAEX,OAAO,CACT,CACA,GAAIyL,MAAiB,IAACw8B,GAAQ,CAACC,CAAAA,CAAI,EAAM3qC,eAAwB,GAC/D,OAAOyC,EAAE,2BAEX,MAAiB,KAAVyL,EACHzL,EAAE,yBACFA,EAAE,0BACR,CACA,QAAO4hB,KAAYnW,GAAezL,EAAE,GAAT,wBAC7B,SACE,GAAa,yBAATvE,EAAiC,OAAOuE,EAAE,8BAC9C,GAAa,yBAATvE,EAAiC,OAAOuE,EAAE,8BAC9C,OAAOA,EAAE,CAAC,QAAQ,EAAEvE,EAAK,MAAM,CAAC,CACpC,CACF,CACF,EACC,GAAIA,oBACI,yBAATA,GACS,iBAATA,GACS,yBAATA,GACS,SAATA,EACI,CAAEiuC,UAAW,EAAG,EAChB,CAAC,CAAC,EAjDD/B,EAAYlsC,OA5HlB,IAmLX,CCrUO,IAAMkuC,GAIT,CAAC,CACH3kC,OAAK,MACLvJ,CAAI,UACJmmB,CAAQ,CACRC,UAAQ,iBACRK,CAAe,gBACfpQ,CAAc,CACdpT,WAAS,oBACT0X,CAAkB,2BAClBwzB,CAAyB,CACzB,GAAGltC,EACJ,IACC,IAAM0U,EAAKy4B,CAAAA,EAAAA,EAAAA,KAAAA,CAAKA,GACVxnB,EAAW,CAAC,aAAa,EAAEjR,EAAAA,CAAI,CAC/B,CAACpR,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,sBACrB,UACJqiB,CAAQ,CACRvB,UAAW,QAAEC,CAAM,CAAEkmB,eAAa,CAAE,CACrC,CAAGhxB,CAAAA,EAAAA,GAAAA,EAAAA,CAAcA,GAEZqM,EAAyBxN,CAAAA,EAAAA,GAAAA,EAAAA,CAAGA,CAACiM,EAAQvlB,GACrCquC,EAAe/0B,CAAAA,EAAAA,GAAAA,EAAAA,CAAGA,CAACmyB,EAAezrC,GAClC8kB,EAAW,CAAC,CAACgC,EAEbwnB,EAAmB,CACvB,CAAExsC,KAAM,SAAU+M,QAAStK,EAAE,+BAAgC,EAC7D,CAAEzC,KAAM,eAAgB+M,QAAStK,EAAE,qCAAsC,EACzE,CAAEzC,KAAM,eAAgB+M,QAAStK,EAAE,qCAAsC,EACzE,CAAEzC,KAAM,mBAAoB+M,QAAStK,EAAE,yCAA0C,EAClF,CAED,MACE,WAACvB,MAAAA,CAAIC,UAAWmC,IAAG,CAAE,CAACuV,EAA6B,CAAE,CAAC,CAACA,CAAmB,QAAxDvV,KAChB,UAACohB,GAAAA,EAASA,CAAAA,CACRjd,MAAOA,EACP4c,SAAUA,EACVC,SAAUA,EACVtB,SAAUA,EACV7hB,UAAWmC,IAAG,aAAc,CAC1B,CAACiR,CADUjR,CACe,CAAE,CAAC,CAACiR,CAChC,YAEA,UAAC4Q,QAAAA,CACE,GAAGhmB,CAAI,CACRgC,UAAWmC,IAAG,aAAc,CAC1B,CAACnC,CADUmC,CACU,CAAE,CAAC,CAACnC,EACzB,aAAc6hB,CAChB,GACAoC,eAAcpC,EACd/b,mBAAkB6d,EACjB,GAAGC,EAAS7mB,EAAM,CACjB8tC,SAAU,CACR3nB,SAAU,GACR,kEAAkEinB,IAAI,CAACp9B,IACvEzL,EAAE,kBACJgqC,OAAQ,GAAmB,UAAUnB,IAAI,CAACp9B,IAAUzL,EAAE,gCACtDiqC,aAAc,GACZ,cAAcpB,IAAI,CAACp9B,IAAUzL,EAAE,sCACjCkqC,aAAc,GACZ,cAAcrB,IAAI,CAACp9B,IAAUzL,EAAE,sCACjCmqC,iBAAkB,GAChB,iCAAiCtB,IAAI,CAACp9B,IACtCzL,EAAE,yCACN,EACA,GAAGkiB,CAAe,EAClB,KAGN,UAAChN,KAAAA,CACC9D,GAAIiR,EACJ3jB,UAAWmC,IAAG,gBAADA,yBAA2C,CACtD,CAAC+oC,EAAoC,CAAE,CAAC,CAACA,CAC3C,YAECG,EAAiBvjC,GAAG,CAAC,CAAC,SAAE8D,CAAO,MAAE/M,CAAI,CAAE,IACtC,IAAM6sC,EAAsB7nB,GAAYlC,OAAO,CAAC9iB,EAAK,CACrD,MACE,WAAC8X,KAAAA,CAEC3W,UAAWmC,IAAG,gBAADA,kCAAoD,CAC/D,cAAeupC,EACf,eAAgB,CAACA,GAAuBN,CAC1C,aAECM,GAAuB,UAACzqB,GAAAA,EAAaA,CAAAA,CAACjhB,UAAU,oBAChD,CAAC0rC,GAAuB,CAACN,GACxB,UAAC3qC,MAAAA,CACCC,KAAK,MACLC,aAAW,IACXC,QAAQ,WACR9B,OAAO,KACPuB,MAAM,KACNL,UAAU,2BAEV,UAACkhB,SAAAA,CAAO/e,GAAG,IAAIgf,GAAG,IAAIC,EAAE,IAAItgB,KAAK,cAGpC,CAAC4qC,GAAuBN,GACvB,UAAC3qC,MAAAA,CACCC,KAAK,MACLC,aAAW,IACXC,QAAQ,WACRP,MAAM,KACNvB,OAAO,KACPkB,UAAU,2BAEV,UAACe,OAAAA,CACCC,EAAE,eACFsgB,OAAO,UACPxgB,KAAK,OACLo3B,SAAS,UACT3W,cAAc,QACdoqB,eAAe,YAIrB,UAACppC,OAAAA,UAAMqJ,MAtCF,CAAC,gBAAgB,EAAE/M,EAAAA,CAAM,CAyCpC,OAIR,EAAE,GC5IA,yFAAyF,GACtE,qBAAqB,GC4B8B,CAAC,UACvEqkB,CAAQ,SACRxlB,CAAO,oBACPga,CAAkB,WAClBk0B,CAAS,gBACTx4B,CAAc,cACdy4B,CAAY,OACZvlC,CAAK,SACLwc,CAAO,yBACPgpB,CAAuB,MACvB/uC,EAAO,OAAO,kBACdgvC,CAAgB,YAChBp4B,CAAU,CACVq4B,mBAAiB,CAClB,IACC,IAAMt5B,EAAKy4B,CAAAA,EAAAA,EAAAA,KAAAA,CAAKA,GACVxnB,EAAW,CAAC,aAAa,EAAEjR,EAAAA,CAAI,CAC/Bu5B,EAAgB,CAAC,mBAAmB,EAAEv5B,EAAAA,CAAI,CAC1CgR,EAAU,CAAC,YAAY,EAAEhR,EAAAA,CAAI,CAC7B,CAACpR,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,sBACrB,UACJqiB,CAAQ,CACRvB,UAAW,QAAEC,CAAM,CAAE,CACtB,CAAG9K,CAAAA,EAAAA,GAAAA,EAAAA,CAAcA,GAEZ00B,EAAoC71B,CAAAA,EAAAA,GAAAA,EAAAA,CAAGA,CAACiM,EAAQ,GAAGvlB,EAAK,YAAY,CAAC,EACrEovC,EAAqC91B,CAAAA,EAAAA,GAAAA,EAAAA,CAAGA,CAACiM,EAAQ,GAAGvlB,EAAK,aAAa,CAAC,EACvE8kB,EAAW,CAAC,CAACqqB,GAAyB,CAAC,CAACC,EAExCC,EAAa/d,CAAAA,EAAAA,EAAAA,OAAAA,CAAOA,CACxB,IACE3wB,GAASoK,IAAI,CAAC,MAAE/K,CAAI,MAAEwW,CAAI,aAAE84B,CAAW,CAAE,GACvC,MAACvB,SAAAA,CAEC/9B,MAAO,GAAGs/B,EAAAA,EAAc94B,EAAAA,CAAM,CAC7B,GAAI,GAAG84B,EAAAA,EAAc94B,EAAAA,CAAM,GAAKs4B,EAAe,CAAEjmB,UAAU,CAAK,EAAI,CAAC,CAAC,UACvE,CAAC,CAAC,EAAEymB,EAAY,CAAC,EAAEtvC,EAAAA,CAAM,EAHpB,CAAC,OAAO,EAAEwW,EAAAA,CAAM,GAK3B,CAACs4B,EAAcnuC,EAAQ,EAGzB,MACE,WAACqC,MAAAA,CACCC,UAAWmC,IAAG,CACZ,CAACuV,EAA6B,CAAE,CAAC,CAACA,CACpC,QAFavV,KAIb,WAACpC,MAAAA,CACCC,UAAWmC,IAAG,gBAADA,QAA0B,CACrC,YAAa2pC,EACbtvB,OAAQ,CAACsvB,CACX,aAEA,UAACvoB,GAAAA,EAASA,CAAAA,CACRjd,MAAOhF,EAAE,2BACT4hB,SAAUA,EACVrB,SAAU,CAAC,CAACsqB,EACZnsC,UAAWmC,IAAG,CACZ,CAACiR,EAAyB,CAAE,CAAC,CAACA,CAChC,QAFajR,IAIb,UAACI,OAAAA,CAAKvC,UAAWmC,IAAG,gBAADA,kBACjB,WAACgiB,SAAAA,CACC0nB,aAAcA,EACdjB,aAAc/C,GAAaT,OAAO,CAClCpnC,CAD0B6nC,SACf1lC,IAAG,gBAADA,6CAA+D,CAC1E,QAAS,CAAC2pC,EACV,kBAAmBA,EACnB,aAAc,CAAC,CAACK,EAChBjgC,SAAU4W,EACV,CAAC8oB,EAAoB,CAAE,CAAC,CAACA,CAC3B,GACA1/B,SAAU4W,EACV9a,cAAY,qBACZic,eAAc,CAAC,CAACkoB,EAChBrmC,mBAAkB6d,EACjB,GAAGC,EAAS,GAAG7mB,EAAK,aAAa,CAAC,CAAE,CACnCmmB,SAAU,CAAEnW,OAAO,EAAMnB,QAAStK,EAAE,0BAA2B,CACjE,EAAE,WAEDyqC,EACC,UAACjB,SAAAA,CAA2B/9B,MAAM,GAAGb,QAAQ,aAC1C5K,EAAE,mCADO,iBAGV,KAEH5D,GAASoK,IAAI,CAAC,MAAE/K,CAAI,MAAEwW,CAAI,aAAE84B,CAAW,CAAE,GACxC,MAACvB,SAAAA,CAEC/9B,MAAO,GAAGs/B,EAAAA,EAAc94B,EAAAA,CAAM,UAC9B,CAAC,CAAC,EAAE84B,EAAY,CAAC,EAAEtvC,EAAAA,CAAM,EAFpB,CAAC,OAAO,EAAEwW,EAAAA,CAAM,UAO9B44B,GAA0B,UAAC1qB,GAAAA,EAASA,CAAAA,CAAC/O,GAAIgR,EAAS/nB,MAAOwwC,IAE1D,UAAC5oB,GAAAA,EAASA,CAAAA,CACRjd,MAAOA,GAAShF,EAAE,eAClB4hB,SAAUA,EACVrB,SAAU,CAAC,CAACqqB,EACZlsC,UAAWmC,IAAG,CACZ,CAACiR,EAAyB,CAAE,CAAC,CAACA,CAChC,QAFajR,IAIb,UAACI,OAAAA,CAAKvC,UAAWmC,IAAG,gBAADA,8BACjB,UAAC6hB,QAAAA,CACC4mB,aAAc/C,GAAaF,GAAG,CAC9B9oC,KAD0BgpC,MAE1B7nC,UAAWmC,IAAG,gBAADA,mDAAqE,CAChF,aAAc,CAAC,CAAC+pC,EAChB,CAACN,EAAoB,CAAE,CAAC,CAACA,CAC3B,GACA3nB,eAAc,CAAC,CAACioB,EAChBpmC,mBAAkB,GAAG4d,EAAQ,CAAC,EAAEC,EAAAA,CAAU,CAC1C3b,cAAY,oBACZgjC,UAAW,GACV,GAAGpnB,EAAS,GAAG7mB,EAAK,YAAY,CAAC,CAAE,CAClCmmB,SAAU,CAAEnW,OAAO,EAAMnB,QAAStK,EAAE,yBAA0B,EAC9DgrC,QAAS,CAAEv/B,MAAOw/B,GAAO3gC,EAAF2gC,MAAWjrC,EAAE,yBAA0B,CAChE,EAAE,OAIP4qC,GAAyB,UAACzqB,GAAAA,EAASA,CAAAA,CAAC/O,GAAIgR,EAAS/nB,MAAOuwC,IACzD,UAACrpB,GAAAA,EAAeA,CAAAA,CAACnQ,GAAIiR,EAAUb,QAASA,OAE1C,WAAC/iB,MAAAA,CAAIC,UAAWmC,IAAG,CAAE,eAAHA,GAAsB2pC,CAAwB,aAC9D,UAACvoB,GAAAA,EAASA,CAAAA,CACRjd,MAAOA,GAAShF,EAAE,eAClB4hB,SAAUA,EACVrB,SAAUA,EACV7hB,UAAWmC,IAAG,CACZ,CAACiR,EAAyB,CAAE,CAAC,CAACA,CAChC,QAFajR,IAIb,WAACI,OAAAA,CACCvC,UAAWmC,IAAG,OAAQ,CACpB,QADWA,GACC,CAAC2pC,EACb,+BAAgCA,CAClC,aAEA,WAAC3nB,SAAAA,CACC0nB,aAAcA,EACdjB,aAAc/C,GAAaT,OAAO,CAClCpnC,CAD0B6nC,SACf1lC,IAAG,gBAADA,6CAA+D,CAC1E,QAAS,CAAC2pC,EACV,kBAAmBA,EACnB,aAAc,CAAC,CAACK,EAChBjgC,SAAU4W,GAAWnP,EACrB,CAACi4B,EAAoB,CAAE,CAAC,CAACA,CAC3B,GACA1/B,SAAU4W,GAAWnP,EACrB3L,cAAY,qBACZic,eAAc,CAAC,CAACkoB,EAChBrmC,mBAAkB6d,EACjB,GAAGC,EAAS,GAAG7mB,EAAK,aAAa,CAAC,CAAE,CACnCmmB,SAAU,CACRnW,OAAO,EACPnB,QAASogC,GAAwC1qC,EAAE,eAAtB0qC,WAC/B,CACF,EAAE,WAEDD,EACC,UAACjB,SAAAA,CAA2B/9B,MAAM,GAAGb,QAAQ,aAC1C5K,EAAE,mCADO,iBAGV,KACH8qC,KAGH,UAACpoB,QAAAA,CACC4mB,aAAc/C,GAAaF,GAAG,CAC9B9oC,KAD0BgpC,MAE1B7nC,UAAWmC,IAAG,gBAADA,qCAAuD,CAClE,gBAAiB2pC,EACjB,aAAc,CAAC,CAACI,EAChB,CAACN,EAAoB,CAAE,CAAC,CAACA,CAC3B,GACA3nB,eAAc,CAAC,CAACioB,EAChBpmC,mBAAkB,GAAG4d,EAAQ,CAAC,EAAEuoB,EAAAA,CAAe,CAC/CjkC,cAAY,oBACZgjC,UAAW,GACV,GAAGpnB,EAAS,GAAG7mB,EAAK,YAAY,CAAC,CAAE,CAClCmmB,SAAU,CAAEnW,OAAO,EAAMnB,QAAStK,EAAE,yBAA0B,EAC9DgrC,QAAS,CAAEv/B,MAAOw/B,GAAO3gC,EAAF2gC,MAAWjrC,EAAE,yBAA0B,CAChE,EAAE,CACF4K,SAAUyH,SAIfw4B,GAA0B,UAAC1qB,GAAAA,EAASA,CAAAA,CAAC/O,GAAIgR,EAAS/nB,MAAOwwC,IACzDD,GAAyB,UAACzqB,GAAAA,EAASA,CAAAA,CAAC/O,GAAIgR,EAAS/nB,MAAOuwC,IACzD,UAACrpB,GAAAA,EAAeA,CAAAA,CAACnQ,GAAIiR,EAAUb,QAASA,IACxC,UAACD,GAAAA,EAAeA,CAAAA,CACdnQ,GAAIu5B,EACJnpB,QAASA,EACTlX,QAAStF,GAAShF,EAAE,eACpBtB,UAAU,iBAKpB,EAAE,gBClOF,IAAMwsC,GAAY,CAAC,UAAEvnC,CAAQ,CAA2B,GAAK,UAAC+d,IAAAA,CAAEhjB,UAAU,gBAAQiF,IAC5EwnC,GAAc,CAAC,MAAE7iC,CAAI,CAAE,GAAG5L,EAAwB,GAAK,UAAC85B,EAAAA,EAAIA,CAAAA,CAAC/8B,IAAK6O,EAAO,GAAG5L,CAAI,GAChF0uC,GAA4B,CAAC,CAAEznC,UAAQ,CAA2B,GACtE,UAAC+d,IAAAA,CAAEhjB,UAAU,8BAAsBiF,IAGxB0nC,GAAmB,CAAC,iBAC/BC,CAAe,4BACfC,CAA0B,UAC1BpjC,CAAQ,QACRjK,CAAM,CAMP,IACC,IAAMstC,EAAiBF,GAAiBE,eAClCC,EAAQD,GAAgBE,mBAAmB,CAAC,EAAE,CAC9CC,EAAS5e,CAAAA,EAAAA,EAAAA,OAAAA,CAAOA,CACpB,IAAM0e,GAAOE,OAAO5xC,OAAO,GAAW,CAAC6xC,GAAOC,YAAc,EAAE,CAC9D,CAACJ,GAAOE,OAAO,EAEXG,EAAqB/e,CAAAA,EAAAA,EAAAA,OAAAA,CAAOA,CAChC,IACE0e,GAAOE,OAAOhwC,KAAK,GAAWiwC,GAAOG,yBAAyBA,wBAA0B,GAC1F,CAACN,GAAOE,OAAO,EAGXK,EAA6B,CACjCtuC,EACAmV,KAEA04B,EAA2B,GACP7tC,EAAMwL,EACpB+iC,IAD0B,EAAEC,KACjB,GACN,IAAIC,EAAct5B,EAAM,CAExBs5B,EAAapyC,MAAM,CAAEob,GAAMA,IAAMtC,GAG9C,EAEA,MACE,iCACG84B,GACCA,EAAOnlC,GAAG,CAAC,CAAColC,EAAO/4B,KACjB,GAAM,WAAEg5B,CAAS,sBAAEO,CAAoB,MAAE3wC,CAAI,CAAE,CAAGmwC,SAC9CC,EACK,KAGP,IAJa,CAIb,MAAChS,UAAAA,WACC,UAACjoB,GAAAA,EAASA,CAAAA,CACRnW,KAAM,CAAC,UAAU,EAAEoX,EAAAA,CAAO,CAC1B7N,MAAOvJ,EACP8B,KAAK,WACLuU,eAAe,SACf+P,UAAU,EACVrd,mBAAkB,CAAC,UAAU,EAAEqO,EAAAA,CAAO,CACtCqP,gBAAiB,CACfmqB,SAAU,GAAWL,EAA2BtuC,EAAOmV,EACzD,IAEDu5B,GACC,UAACE,GAAAA,CAAQA,CAAAA,CACPnkC,SAAUA,EACVjK,OAAQA,EACR9B,QAAS,CACPmwC,YAAY,EACZC,UAAW,CACT9qB,EAAG0pB,GACH7nB,EAAG,CACDkpB,UAAWtB,GACXlmC,MAAO,CACLvG,UAAW,0DACX43B,aAAa,CACf,CACF,CACF,CACF,WAEC8V,MA9BOR,EAAMc,GAAG,CAmC3B,GACF,UAACJ,GAAAA,CAAQA,CAAAA,CACPpuC,OAAQA,EACRiK,SAAUA,EACV/L,QAAS,CACPmwC,YAAY,EACZC,UAAW,CACT9qB,EAAGwpB,GACH3nB,EAAG,CACDkpB,UAAWtB,GACXlmC,MAAO,CACLvG,UAAW,0DACX43B,aAAa,CACf,CACF,CACF,CACF,WAECwV,MAIT,EAAE,GCjG8B,CAAC,OAC/Ba,CAAK,CACLC,SAAO,YAFoBvB,KAG3BC,CAAe,4BACfuB,CAA0B,+BAC1BC,CAA6B,UAC7B3kC,CAAQ,QACRjK,CAAM,CACA,IACN,GAAM,CAAC8B,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,sBACrBmhB,EAAOlL,CAAAA,EAAAA,GAAAA,EAAAA,CAAcA,UAE3B,GACMo1B,GAAiByB,CADX,gBAC8B,sBAgGxC,CAhG+D,EAgG/D,8BACGzB,GAAiB0B,sBAChB,iCACE,UAACp7B,GAAAA,EAASA,CAAAA,CACRnW,KAAK,0BACLuJ,MAAOhF,EAAE,kCACTzC,KAAK,WACLuU,eAAe,SACf+P,UAAU,EACVrd,mBAAiB,6BAEnB,UAACkd,IAAAA,CAAEtQ,GAAG,2BAA2B1S,UAAU,8BACzC,UAACuuC,EAAAA,EAAKA,CAAAA,CAACjtC,EAAGA,EAAGktC,QAAQ,8CACnB,UAAC1W,EAAAA,EAAIA,CAAAA,CAAC/8B,IAAI,8DAA8D68B,WAAW,UAGvF,UAAC5U,IAAAA,UAAG1hB,EAAE,gBAGV,UAAC0hB,IAAAA,UACC,WAACurB,EAAAA,EAAKA,CAAAA,CAACjtC,EAAGA,EAAGktC,QAASP,EAAQ,eAAiB,sBAC7C,UAACnW,EAAAA,EAAIA,CAAAA,CACH/8B,IAAK,CAAC,CAAC,EAAE0O,EAAS,qBAAqB,CAAC,CACxCzJ,UAAU,gDACV43B,WAAW,MAEb,UAACE,EAAAA,EAAIA,CAAAA,CACH/8B,IAAK,GAAGyE,EAAO,CAAC,EAAEiK,EAAS,4BAA4B,CAAC,CACxDzJ,UAAU,gDACV43B,WAAW,MAEb,UAACE,EAAAA,EAAIA,CAAAA,CACH/8B,IAAK,GAAGyE,EAAO,CAAC,EAAEiK,EAAS,6CAA6C,CAAC,CACzEzJ,UAAU,gDACV43B,WAAW,cAhIf,iCACE,UAAC1kB,GAAAA,EAASA,CAAAA,CACRnW,KAAK,mBACLuJ,MAAOhF,EAAE,mBACTzC,KAAK,WACLuU,eAAe,SACf+P,UAAU,EACVrd,mBAAiB,cAEnB,UAACkd,IAAAA,CAAEtQ,GAAG,YAAY1S,UAAU,8BAC1B,UAACuuC,EAAAA,EAAKA,CAAAA,CAACjtC,EAAGA,EAAGktC,QAASN,EAAU,4BAA8B,+BAC5D,UAACpW,EAAAA,EAAIA,CAAAA,CAAC/8B,IAAK,GAAGyE,EAAO,CAAC,EAAEiK,EAAS,4BAA4B,CAAC,CAAEmuB,WAAW,UAI9E,EAyDG,KAxDF,iCACE,UAAC1kB,GAAAA,EAASA,CAAAA,CACRnW,KAAK,kBACLuJ,MAAOhF,EAAE,0BACTzC,KAAK,WACLuU,eAAe,SACf+P,UAAU,EACVrd,mBAAiB,qBAEnB,UAACkd,IAAAA,CAAEtQ,GAAG,mBAAmB1S,UAAU,8BACjC,UAACuuC,EAAAA,EAAKA,CAAAA,CAACjtC,EAAGA,EAAGktC,QAAQ,sCACnB,UAAC1W,EAAAA,EAAIA,CAAAA,CAAC/8B,IAAK,GAAGyE,EAAO,CAAC,EAAEiK,EAAS,4BAA4B,CAAC,CAAEmuB,WAAW,UAG/E,UAAC1kB,GAAAA,EAASA,CAAAA,CACRnW,KAAK,0BACLuJ,MAAOhF,EAAE,kCACTzC,KAAK,WACLuU,eAAe,SACf+P,UAAU,EACVrd,mBAAiB,6BAEnB,UAACkd,IAAAA,CAAEtQ,GAAG,2BAA2B1S,UAAU,8BACzC,UAACuuC,EAAAA,EAAKA,CAAAA,CAACjtC,EAAGA,EAAGktC,QAAQ,8CACnB,UAAC1W,EAAAA,EAAIA,CAAAA,CACH/8B,IAAI,8DACJ68B,WAAW,UAIjB,WAAC1vB,EAAAA,EAAYA,CAAAA,CACXX,cAAe,CACbd,OAAQ,CACNH,MAAOhF,EAAE,iBACX,EACAoF,QAAS,CACPJ,MAAOhF,EAAE,eACX,CACF,EACAsF,UAAW,IAAMwnC,GAA8B,GAC/CznC,SAAU,KACRynC,GAA8B,GAC9B1rB,EAAKnL,QAAQ,CAAC,mBAAmB,EACnC,EACAzZ,MAAOwD,EAAE,gBACTQ,OAAQqsC,EACRpsC,UAAW,KACTqsC,EAA8B,CAACD,GAC/BzrB,EAAKnL,QAAQ,CAAC,mBAAmB,EACnC,EACAvV,KAAK,eAEL,UAACghB,IAAAA,UAAG1hB,EAAE,iBACN,UAAC0hB,IAAAA,CAAEhjB,UAAU,wBAAgBsB,EAAE,6BAIrC,UAAC0hB,IAAAA,UAAG1hB,EAAE4sC,EAAU,gBAAkB,aAClC,UAAClrB,IAAAA,UACC,WAACurB,EAAAA,EAAKA,CAAAA,CAACjtC,EAAGA,EAAGktC,QAASN,EAAU,kBAAoB,sBAClD,UAACpW,EAAAA,EAAIA,CAAAA,CACH/8B,IAAK,CAAC,CAAC,EAAE0O,EAAS,qBAAqB,CAAC,CACxCzJ,UAAU,gDACV43B,WAAW,MAEb,UAACE,EAAAA,EAAIA,CAAAA,CACH/8B,IAAK,GAAGyE,EAAO,CAAC,EAAEiK,EAAS,4BAA4B,CAAC,CACxDzJ,UAAU,gDACV43B,WAAW,aAkD3B,EAAE,gBCtKK,IAAM6W,GAAqB,CAChCC,EACAC,EACAC,KAEAF,EAAQG,WAAW,CAAC,eAAgBF,GACpCD,EAAQI,UAAU,CAAC,gBACnBJ,EAAQK,aAAa,CAAC,CAAC,CAAEzsB,OAAQqsB,EAAWlzC,IAAI,CAAC,IAAK,EAAE,EACxDizC,EAAQM,oBAAoB,CAACJ,EAAmBnzC,IAAI,CAAC,MACrDizC,EAAQO,WAAW,CAAC,+BAAgC,aACpDP,EAAQI,UAAU,CAAC,iBACrB,EAAE,uCCwBF,IAAMI,GAAe,CAMnBC,uBAAwB,IACxBC,6CAA8C,GAChD,EAEMC,GAAoB,CACxBC,oBAAqB,OACrBC,iBAAkB,QAClBC,gBAAiB,OACjBC,cAAe,MAEjB,EAEMC,GAAmB,CACvBC,qBAAsB,CACpBN,GAAkBI,aAAa,CAC/BJ,GAAkBE,gBAAgB,CAClCF,GAAkBC,mBAAmB,CACrCD,GAAkBG,eAAe,CAClC,CACDI,QAAS,CAAC,CACZ,EAIMC,GAAwB,CAAC,eAAgB,YAAa,mBAAmB,CAEzEC,GAAS,CACb,QACA,QACA,QACA,QACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACD,CAmCM,SAASC,GAAS,CACvBC,6BAA4B,CAAK,CACjCvmC,UAAQ,OACRwmC,CAAK,WACLC,CAAS,SACTxB,CAAO,UACPyB,CAAQ,QACR3wC,CAAM,CACA,EACN,GAAM,CAAC8B,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,sBACrB,CAAED,EAAG8uC,CAAK,CAAE,CAAG7uC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,sBAC9B,CAAC8uC,EAAeC,EAAiB,CAAGhzB,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,CAAgB,MAC5D,CAACizB,EAAyB1D,EAA2B,CAAGvvB,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,CAAW,EAAE,EAC7E,CAAC6wB,EAA4BC,EAA8B,CAAG9wB,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GACvE,CAAE3e,KAAM6xC,CAAsB,CAAE,CXsH/BznC,CAAAA,CWtHkC0nC,CXsHlC1nC,EAAAA,CAAAA,CAAQA,CAAyD,CACtEC,SAAU,CAAC0nC,GWvHiE,UAC5EjnC,CACF,EXqH6D,GWvHgBgnC,EAIzC,OAAbhnC,EAEjBiZ,EAAO5R,CAAAA,EAAAA,GAAAA,EAAAA,CAAOA,CAAY,CAC9BE,KAAM,YACNiR,aAAc,MACdlR,cAAe,CACbw5B,QAAS,CAAC,EACVoG,QAASH,GAAwBnf,WAAW,CAAC,EAAE,EAAEuf,oBAAsB,KACvErE,MAAO,CACLsE,aAAc,CAAC,GAAG,CAAC,CAEvB,CACF,GAEM,OAAEtI,CAAK,WAAElmB,CAAS,UAAE9K,CAAQ,cAAEpF,CAAY,CAAE,CAAGuQ,EAC/C,QAAEJ,CAAM,aAAEC,CAAW,CAAE,CAAGF,EAE1BG,EAAYnkB,OAAOC,IAAI,CAACgkB,GAAQ/jB,MAAM,CAAG,EAE/C2F,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACJssC,GAAwBnf,WAAW,CAAC,EAAE,EAAEuf,oBAAoB,EACrD,UAAWJ,GAAwBnf,WAAW,CAAC,EAAE,EAAEuf,oBAE1DE,GACFv5B,EAAS,WADS,UACa,OAEnC,EAAG,CAACi5B,EAAwBM,EAAgBv5B,EAAS,EAErD,IAAMw5B,EAAuBxI,EAAM,mBACnCrkC,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACR,GAAI6sC,EACF,OAAO3C,GAA8B,EAEzC,EAAG,CAAC2C,EAAqB,EAEzB,CAL4B,GAKtBC,EAAoBlB,IAAQv0C,SAAS00C,GAErC,CAACgB,EAAgB7I,EAAkB,CAAG9qB,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GAE/C,MAAE3e,CAAI,CAAEuY,UAAWg6B,CAAkB,CAAE,CXCtCnoC,CAAAA,CWDyCooC,CXCzCpoC,EAAAA,CAAAA,CAAQA,CAA4C,CACzDC,SAAU,CAACooC,GWF2D,GAADD,OACrE1nC,EACA4nC,aAAc,GACdC,gBAAiBtB,EACjBuB,cAAe,CAAEC,YAAY,CAAM,CACrC,EXHgD,GWK1CC,EXgCD,SACL/zC,EAKI,CAAC,CAAC,EAEN,MAAOg0C,CAAAA,EAAAA,GAAAA,CAAAA,CAAWA,CAKhB,CACA,GAAGh0C,CAAO,EAEd,IW9CQksC,EACJ,IAAKjrC,GAAMirC,WAAa,EAAE,CAAE,CAAC/T,IAAI,CAAC,CAAChR,EAAGuK,IAAM1Z,KAAKi8B,QAAQ,CAACloC,GAAUmoC,OAAO,CAAC/sB,EAAE9nB,IAAI,CAAEqyB,EAAEryB,IAAI,IAC1F,EAAE,CAEE6vC,EAAkBhD,EAAU3sC,IAAI,CAAC,CAAC,MAAEsW,CAAI,CAAE,GAAKA,IAASg1B,EAAM,YAC9DsJ,EAAkBjF,GAAiBE,gBAAgBE,qBAAqB,CAAC,EAAE,EAAEC,OAE7EiB,EAAUtB,GAAiBr5B,OAAS,KACpC06B,EAAQrB,GAAiBr5B,OAAS,KAqBlCu+B,EAA4B,CAAC,SACjCvH,CAAO,OACPwH,CAAK,MACLh1C,CAAI,UACJi1C,CAAQ,OACRzF,CAAK,SACLoE,CAAO,yBACPsB,CAAuB,iBACvBC,CAAe,kBACfC,CAAgB,CACN,IACV,IAAIxC,EAAiC,EAAE,CACvC,GAAIK,EAA2B,CAC7B,IAAMoC,EAA4BP,GAAiBx2C,OAAO,GAAWg3C,GAAOlF,WACxEiF,GAA6BA,EAA0B7zC,MAAM,EAAE,GAC1C6zC,EAA0BllC,OAAO,CACtD,GAAWmlC,EAAMC,kBAAiB,EAGlC/B,EAAwBhyC,MAAM,EAAIszC,GAAmBA,EAAgBtzC,MAAM,EAAE,EACvDtC,OAAO,CAAC,IAC9B,IAAMs2C,EAAQV,CAAe,CAACp7B,EAAE,EAAE67B,mBAAqB,EAAE,CAEzD3C,EAAuB,IADNA,KAAyB4C,EACV,EAGtC,MACgC3F,CADzB,EAC0CyB,iBAAmB,uBAEhEsB,EAAuB,IAClBA,EACHN,GAAkBC,mBAAmB,CACrCD,GAAkBE,gBAAgB,CACnC,CACG3C,GAAiB0B,qBACnB2D,CADyC,EACdtC,EAAqBnrC,IAAI,CAAC6qC,GAAkBG,eAAe,EAEtFG,EAAqBnrC,IAAI,CAAC6qC,GAAkBG,eAAe,IAG7D0C,GAAmBvC,EAAqBnrC,IAAI,CAAC6qC,GAAkBC,mBAAmB,EAClF6C,GAAoBxC,EAAqBnrC,IAAI,CAAC6qC,GAAkBE,gBAAgB,EAChF0C,GAA2BtC,EAAqBnrC,IAAI,CAAC6qC,GAAkBG,eAAe,GAExFG,EAAqBnrC,IAAI,CAAC6qC,GAAkBI,aAAa,EAE3DlF,EAAQoG,OAAO,CAAGA,EAClB,IAAM3sB,EAA+C,CACnDumB,QAAS,CACP,GAAGA,CAAO,CACV,GAAsB,YAAlBA,EAAQf,KAAK,EAAkB,CAAEA,MAAOe,EAAQf,KAAK,CAAE,CAC3DgJ,YAAa,MACf,QACAT,EACAU,iBAAkBxC,EAClBlzC,OACAi1C,WACAzF,MAAO,CACLmG,YAAanG,GAAOmG,aAAe,GACnC7B,aAActE,GAAOsE,cAAcvlC,QAAQ,MAAO,IAClDqnC,UAAW,MACb,EACAC,kBAAgC,OAAbnpC,EAAoB,KAAOA,EAC9CopC,kBAAkB,EAClBC,cACE,CAAC9C,GAA6B/B,EAC1ByB,GACA,sBAAEC,EAAsBC,QAAS,CAAC,CAAE,CAC5C,EAEA,OAAO,IAAImD,QAAQ,IACjBtB,GAAauB,OAAO,CAACC,GAAqB,UAAExpC,MAAJwpC,EAAcjvB,CAAM,EAAE,CAAE,CAC9DksB,UAAW,IACT,IAAMgD,EAAYv0C,GAAM8yC,aAAa91C,OAAO4X,KAC5C,GAAI2/B,EACF,OAAQA,EADK,CAEX,KAAKhE,GAAaE,4CAA4C,CAC9D,KAAKF,GAAaC,sBAAsB,CACtC,OAAOmB,EAAiB,CACtB1kC,QAAStK,EAAE,CAAC,cAAc,EAAE4xC,EAAAA,CAAW,EACvCr0C,KAAM,OACR,EACF,MAAK,IACH,GACEiyC,GACAnyC,GAAM8yC,aAAa91C,OAAOw3C,eAAezmC,KAAK,CAAC,CAAE6G,MAAI,CAAE,GAAc,MAATA,GAE5D,OAAO+8B,EAAiB,CACtB1kC,QAAStK,EAAE,CAAC,iBAAiB,CAAC,EAC9BzC,KAAM,OACR,GAEF,OAAOyxC,EAAiB,CACtB1kC,QAAStK,EAAE,CAAC,iBAAiB,CAAC,EAC9BzC,KAAM,OACR,EACF,SACE,OAAOyxC,EAAiB,CACtB1kC,QAAStK,EAAE,CAAC,iBAAiB,CAAC,EAC9BzC,KAAM,OACR,EACJ,CAGF,IAAMu0C,EAAgBz0C,GAAM8yC,aAAa9yC,MAAMy+B,cACzCiW,EAAcj0C,OAAOk0C,IAAI,CAACC,mBAAmBx2C,EAAKy2C,SAAS,GAC3DC,EAAar0C,OAAOk0C,IAAI,CAACF,GAAiB,IAC1CM,EAAet0C,OAAOk0C,IAAI,CAACC,mBAAmBxB,GAAO4B,cAAgB,KACrEC,EAAgBx0C,OAAOk0C,IAAI,CAAC,QAElCO,eAAeC,OAAO,CAAC,aAAcT,GACrCQ,eAAeC,OAAO,CAAC,UAAWL,GAClCI,eAAeC,OAAO,CAAC,QAASJ,GAChCG,eAAeC,OAAO,CAAC,cAAeF,GACtC1D,EAAUvxC,EACZ,EACAo1C,QAAS,IACPzD,EAAiB,CACf1kC,QAAStK,EAAE,qBACXzC,KAAM,OACR,GACAhD,EAAAA,EAAAA,CAAQA,YAAcm4C,GAAAA,CAAAA,CAAaA,GACrC,CACF,EACF,EACF,EA2BA,MACE,WAACj0C,MAAAA,CAAIC,UAAU,sBACZqwC,EACC,UAACxJ,GAAkBA,CAAC9nC,OAAQsxC,GAAexxC,IAAxBgoC,UACjB,UAAC7jB,IAAAA,CAAEhjB,UAAU,gCAAwBqwC,GAAezkC,YAEpD,KACJ,WAAC7L,MAAAA,CAAIC,UAAU,mCACZmwC,EACA3tB,GAAaD,GACZ,WAACxiB,MAAAA,CACCW,KAAK,QACLsH,cAAY,cACZhI,UAAWmC,IAAG,gBAADA,mBAAqC,CAChD,WAAYqgB,GAAaD,CAC3B,aAEA,WAACE,KAAAA,CAAGziB,UAAU,sFACZ,UAACihB,GAAAA,EAAaA,CAAAA,CAAAA,GACd,UAAC1e,OAAAA,UAAMjB,EAAE,mBAEX,UAACkV,KAAAA,CAAGxW,UAAU,iDAAyCi0C,CAhM/C,KAChB,IAAM7d,EAAwB,EAAE,CAehC,OAdA/3B,OAAO61B,OAAO,CAAC5R,GAAQrmB,OAAO,CAAC,CAAC,CAAC8L,EAAKgF,EAAM,IAC1C,GAAIA,EAAMnB,OAAO,CAAE,CACjB,IAAMA,EAAUmB,EAAMnB,OAAO,CAC7BwqB,EAAS5xB,IAAI,CAAC,UAACmS,KAAAA,UAAmC/K,GAA3B,CAAC,gBAAgB,EAAE7D,EAAAA,CAAK,EACjD,CAGA1J,OAAO61B,OAAO,CAACnnB,GAAO9Q,OAAO,CAAC,CAAC,CAACi4C,EAAUC,EAAW,IACnD,GAAI,EAA2BvoC,OAAO,CAAE,CACtC,IAAMA,EAAU,EAA2BA,OAAO,CAClDwqB,EAAS5xB,IAAI,CAAC,UAACmS,KAAAA,UAAwC/K,GAAhC,CAAC,gBAAgB,EAAEsoC,EAAAA,CAAU,EACtD,CACF,EACF,GACO9d,CACT,UAkLM,UAAChlB,GAAAA,EAAYA,CAAAA,CAAE,GAAGsR,CAAI,UACpB,WAACA,OAAAA,CACCC,UAAU,IACVR,OAAO,OACP5R,SAAU4B,EArDK,IACnB/S,OAAOC,WAAW,EAAE+0C,KAoDyBC,CApDnBC,UAAU,GAChBr4C,OAAO,CAAC,GAASs4C,KAAMn1C,QAAQC,EAATk1C,WAAsBH,MAAME,SAAUvsC,IAEpF+pC,EAA0B0C,GACvBC,IAAI,CAAC,GAASC,GACdC,KAAK,CAAC,IACL,MAAMh5C,CACR,EACJ,EAEyD,IAGhC0C,OAAOC,IAAI,CAACs2C,GAAar2C,MAAM,CAAG,GAOvDkwC,GAAmBC,EALArwC,OAKSswC,IALE,CAACrsB,CAKbmsB,EALqBvhC,IAKC0hC,GALM,CAAC,GAAS7mC,GAC7B,OAAQzJ,IAAI,CAACgkB,GACrCpV,OAAO,CAAC,GAASoV,CAAM,CAACva,EAAI,EAAE6D,SAC9BvQ,MAAM,CAAC,IAAwB0iB,CAAQ8C,GAI9C,GA+BU7gB,UAAU,2CAEV,UAACgjB,IAAAA,UAAGotB,EAAM,oBACTU,EAAiB,UAAC9tB,IAAAA,UAAGotB,EAAM,6BAAkC,KAC9D,UAACl9B,GAAAA,EAASA,CAAAA,CACRnW,KAAK,iBACL6tC,aAAc/C,GAAaN,SAADM,CAC1BvhC,MAAO8pC,EAAM,mBACbh9B,eAAe,SACf+P,UAAU,EACV6nB,UAAW,GACXxnB,gBAAiB,CACfN,SAAU,CAAEnW,OAAO,EAAMnB,QAASwkC,EAAM,kBAAmB,EAC3DyE,UAAW,CAAE9nC,MAAO,EAAGnB,QAASwkC,EAAM,4BAA6B,EACnE9D,QAAS,CAAEv/B,MAAO,QAASnB,QAASwkC,EAAM,2BAA4B,CACxE,IAEF,UAACl9B,GAAAA,EAASA,CAAAA,CACRnW,KAAK,gBACL6tC,aAAc/C,GAAaP,SAADO,CAAW,CACrCvhC,MAAO8pC,EAAM,kBACbh9B,eAAe,SACf+P,UAAU,EACV6nB,UAAW,GACXxnB,gBAAiB,CACfN,SAAU,CAAEnW,OAAO,EAAMnB,QAASwkC,EAAM,iBAAkB,EAC1DyE,UAAW,CAAE9nC,MAAO,EAAGnB,QAASwkC,EAAM,2BAA4B,EAClE9D,QAAS,CAAEv/B,MAAO,QAASnB,QAASwkC,EAAM,0BAA2B,CACvE,IAGF,UAAC0E,GAAcA,CACbp3C,QAASksC,EADIkL,aAEA,MACbhyB,QAASouB,EACT99B,eAAe,WAGjB,UAACF,GAAAA,EAASA,CAAAA,CACRnW,KAAK,qBACL6tC,aAAc/C,GAAaR,KAAK,CAChC/gC,GAD0BuhC,GACnBuI,EAAM,eACbvxC,KAAK,QACLuU,eAAe,SACf+P,SAAU,GACV6nB,UAAW,GACXxnB,gBAAiB,CACfN,SAAU,CAAEnW,OAAO,EAAMnB,QAASwkC,EAAM,cAAe,EACvD9D,QAAS,CAAEv/B,MAAOglC,GAAOnmC,EAAFmmC,MAAW3B,EAAM,cAAe,CACzD,IAGF,UAAClsB,GAAAA,EAAUA,CAAAA,CACT0mB,aAAc/C,GAAaT,OAAO,CAClCh0B,CAD0By0B,cACX,SACfvhC,MAAO8pC,EAAM,yBACbrzC,KAAK,UACL+lB,QAASouB,EACThlC,SAAUglC,WAETtH,EAAU9hC,GAAG,CAAC,CAAC,CAAE/K,MAAI,MAAEwW,CAAI,CAAE,GAC5B,UAACu3B,SAAAA,CAEC/9B,MAAOwG,EACN,GAAIA,IAASg1B,EAAM,WAAa,CAAE3iB,UAAU,CAAK,EAAI,CAAC,CAAC,UAEvD7oB,GAJI,CAAC,OAAO,EAAEwW,EAAAA,CAAM,KAS3B,UAAC00B,GAAaA,CACZ10B,KAAMg1B,EAAM,EADAN,SAEZC,UAAU,UACVE,kBAAmBA,IAGpB4I,GACC,iCACE,UAAC/F,GAAiBA,CAChBL,aADgBK,GACWzD,SAADK,EAAY,CACtChpC,KAAK,WACL9B,KAAK,WACLuJ,MAAO8pC,EAAM,kBACbh9B,eAAe,WAEjB,UAACF,GAAAA,EAASA,CAAAA,CACR03B,aAAc/C,GAAaL,SAADK,EAAY,CACtChpC,KAAK,WACL9B,KAAK,kBACLuJ,MAAO8pC,EAAM,yBACbh9B,eAAe,SACf+P,UAAU,EACVzL,mBAAmB,SACnB8L,gBAAiB,CACfqnB,SAAU,CACRkK,YAAa,GACX,CAAE,CAAChoC,GAASA,IAAUw7B,EAAM,aAAgB6H,EAAM,wBACtD,CACF,OAIN,WAACrwC,MAAAA,CAAIC,UAAU,uBACZgwC,EACC,UAACgF,GAAmBA,CAClBpI,YADkBoI,IACDpI,EACjBC,2BAA4BA,EAC5BpjC,SAAUA,EACVjK,OAAQA,IAGV,UAACmtC,GAAgBA,CACfsB,MAAOA,EACPC,QAASA,EACTtB,YAHeD,IAGEC,EACjBuB,2BAA4BA,EAC5BC,8BAA+BA,EAC/B3kC,SAAUA,EACVjK,OAAQA,IAIZ,UAAC0C,SAAAA,CACCrD,KAAK,SACLmB,UAAU,iCACVkM,SAAU+kC,GAAkBQ,EAAYwD,SAAS,UAEhDxD,EAAYwD,SAAS,CACpB,iCACG7E,EAAM,cAAc,IAAC,UAACrtB,GAAAA,CAAOA,CAAAA,CAAC/iB,UAAU,cAAcgC,KAAK,UAG9DV,EAAE,SAAU,CAAE02B,QAAS,IAAK,KAIhC,UAAChV,IAAAA,CAAEhjB,UAAU,mBACX,UAACuuC,EAAAA,EAAKA,CAAAA,CAACjtC,EAAGA,EAAGktC,QAAQ,yCACnB,UAAC1W,EAAAA,EAAIA,CAAAA,CACH/8B,IAAK,CAAC,CAAC,EAAE0O,EAAS,qCAAqC,CAAC,CACxDzJ,UAAU,8CACV43B,WAAW,UAIjB,UAAC5U,IAAAA,CAAEhjB,UAAU,yBAAiBsB,EAAE,qBAC9BsrC,CAAAA,GAAiBuF,kBAAoBvF,GAAiByB,cAAAA,CAAa,EACnE,iCACE,UAACrrB,IAAAA,CAAEhjB,UAAU,iCAAyBsB,EAAE,kBACxC,UAAC0hB,IAAAA,CAAEhjB,UAAU,uCAA+BsB,EAAE,mCAShE,CG7iBO,SAAS4zC,GAAgB,UAC9BjwC,CAAQ,WACRjF,CAAS,UACTyJ,CAAQ,gBACR0rC,CAAc,SACdzG,CAAO,UACPyB,CAAQ,OACRF,EAAQ,OAAO,mBACfmF,CAAiB,CACjBC,kBAAgB,CAChBjzC,SAAO,CAcR,EACC,GAAM,CAACoO,EAAa8kC,EAAe,CAAGh4B,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GACzC,CAACi4B,EAAqBC,EAAuB,CAAGl4B,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GACzD,CAACm4B,EAAiBC,EAAmB,CAAGp4B,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GACjD,CAACq4B,EAAiBC,EAAmB,CAAGt4B,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,CAAC,IACjD,OAAEu4B,CAAK,CAAE,CAAG5R,CAAAA,EAAAA,EAAAA,EAAAA,CAAOA,GACnBvD,EAAYp9B,CAAAA,EAAAA,EAAAA,MAAAA,CAAMA,CAAoB,MACtCwyC,EAAoBxyC,CAAAA,EAAAA,EAAAA,MAAAA,CAAMA,CAAuB,MACjD,GAAEhC,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,yBACvB/B,EAASu2C,SAyFRA,EACP,GAAM,CAACv2C,EAAQw2C,EAAU,CAAG14B,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,CAAC,0BAQrC,MAPApZ,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACR,GAAItE,EAAAA,CAASA,EAAIR,OAAOM,QAAQ,CAAE,CAChC,GAAM,CAAEu2C,UAAQ,UAAEC,CAAQ,MAAEC,CAAI,CAAE,CAAG/2C,OAAOM,QAAQ,CAEpDs2C,EADe,GAAGC,EAAS,EAAE,CACnBz2C,CADqB02C,EAAAA,EAAWC,EAAO,CAAC,CAAC,EAAEA,EAAAA,CAAM,CAAG,IAAI,CAEpE,CACF,EAAG,EAAE,EACE32C,CACT,IA3FQ42C,EAAwB,KAC5BV,EAAmB,GACrB,EAEMW,EAAmB,KACvBf,GAAe,GACfI,GAAmB,EACrB,EAEA,MACE,WAAC7zC,EAAAA,EAAMA,CAAAA,CACLE,UAAWs0C,EACXv0C,OAAQ0O,EACRxO,KAAMyzC,EAAkB,KAAO,MAC/B33C,KAAAA,CAAyBwD,EAAlBm0C,EAAoB,SAAc,GAAFn0C,YACvCW,cACE,UAACC,SAAAA,CAAOrD,KAAK,SAASmB,UAAWA,EAAWoC,QAtB1B,CAsBmCk0C,IArBzDhB,GAAe,GACfE,GAAuB,GACvBpzC,KACF,EAkB4EjC,IAAKugC,WACxEz7B,cAIJswC,EACC,UAACxF,GAAQA,CACPtmC,IADOsmC,KACGtmC,EACVwmC,MAAOA,EACPzwC,OAAQA,EACR2wC,SACEA,GACE,UAACoG,KAAAA,CAAGv2C,UAAU,mDAA2CsB,EAAE,sBAG/D4uC,UAAYvxC,IACV,IAAM63C,EAAe73C,GAAM8yC,aAAa9yC,MAAMy+B,cAC1CoZ,IACFnB,MACAO,EAAmBY,EAFH,CAGhBhB,GAAuB,GACvBY,IAEJ,EACA1H,QAASA,IAET,KACH+G,EACC,iCACE,WAAC11C,MAAAA,CAAII,IAAK21C,EAAmB91C,UAAU,sDACrC,UAACsS,EAAAA,EAAIA,CAAAA,CAACvV,KAAK,eAAek9B,QAAQ,UAClC,UAACjX,IAAAA,CAAEhjB,UAAU,gBAAQsB,EAAE,uBAExBq0C,EACC,UAACnzC,EAAAA,EAAWA,CAAAA,CACV/E,SAAU03C,EACVr3C,MAAOwD,EAAE,UACT5D,QAAS,CACPu/B,SAAU0Y,CACZ,EACA/3C,eAAiB64C,IACXA,EAAO93C,IAAI,EAAE,EACT83C,GACHhC,IAAI,CAAC,KACJ4B,IACAX,GAAmB,GACnBN,KACF,GACCT,KAAK,CAAC,IACL94C,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CACN,wBACAF,EACA,yCAEJ,EAEN,IAEA,QAEJ,OAGV,CE5GA,IAAM+6C,GAEF,IACF,GAAM,CAACp1C,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,cAC3B,MACE,UAACo1C,EAAAA,EAAiB,EAAC9wC,QAAS,YAC1B,WAACgf,IAAAA,CACCjb,KAAMqF,EAAKlU,GAAG,CACdqH,QAAS6M,EAAK7M,OAAO,CACrBpC,UAAWmC,IACT,gBADWA,sDAEX8M,EAAKjP,SAAS,EAEf,GAAIiP,EAAK5H,cAAc,EAAI,CAC1B,aAAc,GAAG4H,EAAK5H,cAAc,GAAG4H,EAAK2oB,WAAW,CAAG,CAAC,EAAE,EAAEt2B,EAAE,WAAW,CAAG,IAAI,CACpF,CACA,GAAI2N,EAAK2oB,WAAW,EAAI,CAAEptB,OAAQ,SAAU0E,IAAK,qBAAsB,CAAC,CACzEwsB,wBAAuBzsB,EAAKusB,4BAA4B,EAAEG,KAC1DC,yBAAwB3sB,EAAKusB,4BAA4B,EAAEzuB,gBAE1DkC,EAAK3I,KAAK,CACV2I,EAAK2oB,WAAW,EAAI,CAAC3oB,EAAK5H,cAAc,CACvC,WAAC9E,OAAAA,CAAKvC,UAAU,oBAAU,KACtB,UAACuC,OAAAA,UAAMjB,EAAE,eAEX,SAIZ,EAEMs1C,GAAgC,iBACtC,SAASC,KACFC,CAAAA,EAAAA,EAAAA,CAAAA,CAAyBA,CAACF,GACjC,CAEO,IAAMG,GAAS74C,EAAAA,UAAgB,CACpC,CACE,cACE84C,CAAY,OACZ1c,CAAK,SACLqI,CAAO,cACPF,CAAY,WACZ5F,CAAS,iBACTkE,CAAe,CACf6B,gBAAe,CAAK,kCACpBhG,CAAgC,wBAChCqE,CAAsB,6BACtBC,CAA2B,mCAC3BvE,CAAiC,MACjCF,CAAI,WACJC,CAAS,cACToE,CAAY,UACZ77B,CAAQ,yBACR+7B,CAAuB,eACvBiW,CAAa,OACb5kB,CAAK,CACLoI,SAAO,WACP0K,EAAY,QAAQ,MACpBnL,CAAI,CACJ,GAAGh8B,EACJ,CACD0H,KAEA,GAAM,CAACpE,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,CAAC,aAAc,YAAY,EAChD6/B,EAAiB,CACrB3jC,SAAUi/B,GAAW2E,YAAYtmC,KAAO,GACxC+C,MAAOwD,EAAE,oBACT1D,eAAgBmjC,CAClB,EACMmW,EAAwB,OAC5B5c,UACAqI,eACAF,YACA5F,kBACAkE,eACA6B,OACAnG,YACAC,eACAoE,WACA77B,UACAw1B,CACF,EAGM0c,EAAgBC,SA6WjBA,EACP,GAAM,WAAEzV,CAAS,UAAEtS,CAAQ,CAAE,CAAGuS,CAAAA,EAAAA,EAAAA,EAAAA,CAAuBA,CACrDgV,GACA/U,EAAAA,EAAMA,CAACwV,OAAO,EAEhB,OAAOhoB,GAAYsS,GAAWI,SAAW,GAC3C,WAjXQrF,GAAW0F,YAAY,CACzB1F,EAAU0F,UAAU,CAACkV,WAAW,CAAGT,GACnCna,EAAU0F,UAAU,CAACrpB,SAAS,CAAG,SAASA,CAAe,GACrC,UAAd/Z,EAAM+I,GAAG,EAA8B,MAAd/I,EAAM+I,GAAQ,GAAK,IAGlD,GAqCA,iCACE,UAAC8c,IAAAA,CAAEjb,KAAK,WAAW5J,UAAU,6DAC1BsB,EAAE,mBAEL,UAACumB,SAAAA,CACC7nB,UAAWmC,IAAG,gBAADA,sBAAwC,CACnD,aApDiB,CAoDH04B,QApDPxI,CAqDT,GACArqB,cAAY,gBACZ7H,IAAKuF,EACJ,GAAG1H,CAAI,UAEPg5C,GAAgBC,EACf,UAACM,GAAeA,CACdxU,UAAWiU,CADGO,CAEdjd,MAAOA,EACPyG,gBAAiBA,EACjBlE,UAAWA,EACXsI,UAAWA,EACX1I,KAAMA,EACN0E,gBAAiBgW,EAtDH,CAAC,UACvBlyC,CAAQ,CACRjF,CAoDyCmhC,UApDhC,mBACTkB,CAAiB,CAKlB,GAEG,UAAC6S,GAAeA,CACd9yC,QAASy0C,GADK3B,UAEHl1C,EACXyJ,SAAUu3B,GAAyBryB,QAAU,KAC7CwmC,eAAgBzY,GAAW2E,YAAYtmC,KAAO,GAC9Cs6C,iBAAkB,IAAM/yC,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,gBACnC8yC,kBAAmB,KACjB9yC,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,gBACXijB,WAAW,IAAM8c,GAAmBpjC,SAASsf,QAAS,IACxD,EACAmwB,QAAS,CACPG,YAAa,KAAO,EACpBC,WAAY,KAAO,EACnBC,cAAe,KAAO,EACtBE,YAAa,KAAO,EACpBD,qBAAsB,KAAO,CAC/B,WAEC/pC,SA0BsDc,EACnD+6B,aAAcA,EACdE,wBAAyBA,EACzB2B,QAASA,EACTC,aAAcA,EACdhG,iCAAkCA,EAClCqE,uBAAwBA,EACxBC,4BAA6BA,EAC7BvE,kCAAmCA,EACnClC,QAASA,EACTpI,MAAOA,EACP2H,KAAMA,IAENgH,EACF,UAACwW,GAAAA,CACE,GAAGN,CAAqB,CACzB9V,eAAgBA,EAChBJ,wBAAyBA,IAG3B,UAACyW,GAAAA,CAAe,GAAGP,CAAqB,CAAE9V,eAAgBA,MAG7Dn8B,EACD,UAAClF,MAAAA,CAAI2S,GAAG,UAAUmG,SAAU,CAAC,MAGnC,GACA,SAqBO4+B,GAAc,OACrBnd,CAAK,SACLqI,CAAO,CACPF,cAAY,WACZ5F,CAAS,cACT+F,CAAY,MACZnG,CAAI,WACJC,CAAS,cACToE,CAAY,gBACZM,CAAc,SACd3G,CAAO,CACG,EACV,MACE,WAAC16B,MAAAA,CACCC,UAAWmC,IAAG,gBAADA,2BAA6C,CACxD,kBAAmBwgC,EACnB3C,UAAW,CAAC2C,CACd,aAECC,EAAe,KAAO,UAACsD,EAAcA,CAAC5L,MAAOA,EAAOG,GAAfyL,KAAwBzL,IAC7DgI,GAAclkC,OAAS,UAACikC,GAAOA,CAACkV,MAAOjV,EAAcG,EAAtBJ,WAAoCI,IAAmB,KACvF,UAAC/B,GAAOA,CACNpE,KAAMA,EACNC,GAFMmE,OAEKnE,EACXG,UAAWA,EACXiE,aAAcA,EACdM,eAAgBA,MAIxB,CAEA,SAASoW,GAAc,OACrBld,CAAK,SACLqI,CAAO,cACPF,CAAY,CACZ5F,WAAS,cACT+F,CAAY,MACZnG,CAAI,WACJC,CAAS,cACToE,CAAY,gBACZM,CAAc,yBACdJ,CAAuB,SACvBvG,CAAO,CAGR,EACC,MACE,WAAC16B,MAAAA,CACCC,UAAWmC,IAAG,gBAADA,QAA0B,CACrC,kBAAmBwgC,EACnB3C,UAAW,CAAC2C,CACd,aAEA,WAAC5iC,MAAAA,CAAIC,UAAU,uHACb,UAAC+xB,EAAgBA,CAAE,GAAGiP,CAAuB,GAC7C,MADiBjP,EACjB,EAAChyB,MAAAA,CAAIC,UAAU,kFACb,UAAC6gC,GAAOA,CACNpE,KAAMA,EACNC,GAFMmE,OAEKnE,EACXG,UAAWA,EACXiE,aAAcA,EACdM,eAAgBA,SAItB,WAACrhC,MAAAA,CAAIC,UAAU,gDACZ4iC,EAAe,KAAO,UAACsD,EAAcA,CAAC5L,MAAOA,EAAOG,GAAfyL,KAAwBzL,IAC7DgI,GAAclkC,OAAS,UAACikC,GAAOA,CAACkV,MAAOjV,EAAcG,EAAtBJ,WAAoCI,IAAmB,UAI/F,CAEA,SAAS/B,GAAQ,MACfpE,CAAI,IADUoE,OAEdnE,CAAS,WACTG,CAAS,cACTiE,CAAY,CACZM,gBAAc,CAC0E,EACxF,GAAM,MAAEuW,CAAI,GAAEr2C,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,cAC7B,QAAEoN,EAAS,IAAI,CAAE,CAAGwH,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,GAC7B2mB,EAA6BC,CAAAA,EAAAA,GAAAA,EAAAA,CAAwBA,CAACN,GAAMO,aAAc,QAAEruB,CAAO,GACzF,MACE,UAACqzB,MAAAA,CAAI57B,aAAW,gBAAgBpG,UAAU,4BACvCy8B,EACC,WAACka,EAAAA,EAAiB,EAACiB,IAAKD,EAAKC,GAAG,GAAIC,OAAO,YACzC,UAAClB,EAAAA,EAAoB,EAAC9wC,OAAO,aAC3B,WAAC3D,SAAAA,CACCE,QAAS,KACPo3B,IACAl3B,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,QADUk3B,aAEvB,EACAx5B,UAAU,yCACVnB,KAAK,mBAEL,UAAC0D,OAAAA,CAAKvC,UAAU,gCACbsB,EAAE,YAAa,CAAE27B,SAAUR,EAAK1/B,IAAI,KAEvC,UAACuV,EAAAA,EAAIA,CAAAA,CAACvV,KAAK,cAAciF,KAAK,KAAKi4B,QAAQ,QAAQj6B,UAAU,cAGjE,UAAC22C,EAAAA,EAAmB,WAClB,WAACA,EAAAA,EAAoB,EACnBlyB,MAAM,MACNzkB,UAAU,uIAEV,UAACD,MAAAA,CAAIC,UAAU,mCACb,WAACgjB,IAAAA,CAAEhjB,UAAU,0BACX,UAACuC,OAAAA,CAAKvC,UAAU,2BAAmBy8B,EAAKS,UAAU,GAClD,UAAC36B,OAAAA,UACEjB,EAAE,SAAU,CACXiR,MAAOkqB,EAAKO,YAAY,CACxBvnB,OAAQqnB,CACV,UAILJ,GAAWW,aAAatiC,IACvB,UAAC27C,GAAAA,CACCt0C,QAAS,IACPs6B,EAAUW,WAAW,EAAEj7B,UAAUqI,GACjC+uB,GACF,EACC,GAAGkD,EAAUW,WAFS7D,CAGvBlzB,MAAOhF,EAAE,aAET,KAEHo7B,GAAWob,iBAAiBv5C,OACzBm+B,EAAUob,eAAe,CAAChwC,GAAG,CAAC,GAC5B,UAAC4uC,GAAAA,CACCt0C,QAAS,IACP6M,EAAK7M,OAAO,GAAGqI,GACf+uB,GACF,EAEC,GAAGvqB,CAAI,EADHA,EAAK3I,KAAK,GAFQkzB,KAO/B,UAACt3B,SAAAA,CACClC,UAAWmC,IACT,gBADWA,mEAGbC,QAASy6B,EACTnqB,GAAG,WACH7T,KAAK,kBAEJyC,EAAE,qBAKTo7B,GAAW2E,YAAc3E,GAAW0F,WACtC,WAAC5rB,KAAAA,CAAGxW,UAAU,4EACX08B,EAAU0F,UAAU,CACnB,UAACzrB,KAAAA,CAAG3W,UAAU,6CACZ,UAAC83B,EAAAA,EAAIA,CAAAA,CACF,GAAG4E,EAAU0F,UAAU,CACxBF,mBAAmB,EACnBh8B,mBAAiB,qBACjBu1B,WAAW,EACXz7B,UAAU,qFACVoC,QAAS,IACPs6B,EAAU0F,UAAU,EAAEhgC,UAAUqI,GAChCnI,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,kBACXk3B,GACF,WAECl4B,EAAE,KAHoBk4B,SAMzB,KACHkD,EAAU2E,UAAU,CACnB,UAAC1qB,KAAAA,CAAG3W,UAAU,6CACZ,UAACiB,EAAAA,EAAKA,CAAAA,CAACI,OAAQm4B,EAA6B,GAAG4H,CAAc,CAAE,GAAGN,CAAY,KAE9E,KAFoCtH,GAIxC,MAGV,CAEA,SAASgJ,GAAQ,OACfkV,CAAK,GADSlV,WAEdI,CAAY,CAIb,EACC,IAAMmV,EAAS75C,EAAAA,MAAY,CAA0B,MAC/C,CAAC85C,EAAiBC,EAAiB,CAAG/5C,EAAAA,QAAc,EAAC,GACrD,CAACg6C,EAAgBC,EAAgB,CAAGj6C,EAAAA,QAAc,EAAC,GAEnDyvC,EAAWzvC,EAAAA,WAAiB,CAAC,IACjC,IAAMqc,EAAaw9B,EAAO94C,OAAO,EAAEsb,YAAc,EAG3CQ,EAAYC,CAFE+8B,EAAO94C,OAAO,EAAE+b,EAEJo9B,YAFmB,GAClCl9B,GAAM7a,QAAS,EAIhC43C,EAFkB19B,EAAa,GAAKQ,EAAY,GAGhDo9B,EAFiBp9B,EAAY,CACZs9B,EADiBt9B,EAAYR,EAAa,EAG7D,EAAG,CADe+9B,CACb,EACCC,EAAUl9B,CAAAA,EAAAA,GAAAA,CAAAA,CAAOA,CAAC,CAAElb,IAAK43C,EAAQ59B,SAAUwzB,CAAS,GACpD6K,EAAct6C,EAAAA,WAAiB,CAAC,IAAMq6C,GAAW5K,EAAS4K,GAAU,CAAC5K,EAAU4K,EAAQ,EAC7F,MACE,UAACvW,MAAAA,CACChiC,UAAWmC,IACT,gBADWA,gNAEX,CACE,UAAWygC,EACX,oBAAqBoV,EACrB,mBAAoBE,CACtB,YAGF,UAACn4C,MAAAA,CACCI,IAAK43C,EACLz7B,SAAUk8B,EACVx4C,UAAU,uEAEV,UAACwW,KAAAA,CAAGxW,UAAU,uEACX03C,EAAM5vC,GAAG,CAAC,CAAC,OAAExB,CAAK,8BAAEk1B,CAA4B,CAAE,GAAG7D,EAAW,GAC/D,UAAChhB,KAAAA,CAEC3W,UAAU,oEAEV,UAAC83B,EAAAA,EAAIA,CAAAA,CACF,GAAGH,CAAS,CACb8D,WAAW,EACXz7B,UAAU,6DACVoC,QAAS,IACPu1B,EAAUv1B,OAAO,GAAGqI,GACpB+uB,GACF,EACAkC,gBAFuBlC,QAEAgC,GAA8BG,KACrDC,yBAAwBJ,GAA8BzuB,eAErDzG,KAdE,CAAC,cAAc,EAAEA,EAAAA,CAAO,QAsB3C,CASAywC,GAAOz2C,WAAW,CAAG,sEG9cd,IAAMm4C,GAAe,CAAC,WAAEnrC,CAAS,SAAEq1B,CAAO,CAAqB,IACpE,GAAM,CAAClG,EAAMic,EAAQ,CAAGp7B,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,GAC1BoxB,EAAUiK,CAAAA,EAAAA,GAAAA,EAAAA,CAAUA,GACpBx1C,EAASgT,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,GAClB,CAAElT,gBAAiBC,CAAe,CAAE,CAAGE,CAAAA,EAAAA,GAAAA,EAAAA,CAAgBA,GACvD,WAAER,CAAS,OAAEizC,CAAK,QAAE+C,CAAM,CAAE,CAAG3U,CAAAA,EAAAA,EAAAA,EAAAA,CAAOA,GACtC,iBAAE4U,CAAe,kBAAE/3B,CAAgB,UAAEg4B,CAAQ,CAAE,CAAGC,CAAAA,EAAAA,GAAAA,EAAAA,CAAWA,GAC7Dt6B,EAAqBu6B,CAAAA,EAAAA,GAAAA,EAAAA,CAAcA,GAEzC90C,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACRw0C,EACE91C,EACI,CACE7F,KAAMk8C,CAAAA,EAAAA,EAAAA,EAAAA,CAAiBA,CAAC,WAAEr2C,CAAU,GACpCs6B,WAAYt6B,GAAW6B,SAASC,SAASw0C,UAAY,GACrDlc,aAAcp6B,GAAW6B,SAASC,SAASy0C,aAAe,EAC1DC,gBAAiBx2C,GAAW6B,SAASC,SAAS20C,gBAAkB,GAChEjc,cAAex6B,GAAW6B,SAAS24B,eAAiB,EACtD,OACAr3B,EAER,EAAG,CAACnD,EAAU,EAEd,IAAMm+B,EAAkDmI,CAAAA,EAAAA,EAAAA,WAAAA,CAAWA,CACjE,MAAOoQ,IACLC,CAAAA,EAAAA,GAAAA,EAAAA,CAAmBA,CAAC,iBAClBV,mBACA/3B,WACAg4B,qBACAr6B,CACF,GACI66B,GAAM36C,MACR,MAAMk3C,EAAMyD,EAEhB,EACA,CAAC76B,EAAoBo3B,EAAO/0B,EAAkB+3B,EAAiBC,EAAS,EAGpEjc,EAAsCqM,CAAAA,EAAAA,EAAAA,WAAAA,CAAWA,CAAC,UACtDwF,EAAQ8K,iBAAiB,GACzB,MAAMZ,IAASnE,IAAI,CAAC,KAElB,IAAMgF,EAAwB3+C,CAAAA,EAAAA,GAAAA,EAAAA,CAAiBA,CAACsE,OAAOM,QAAQ,CAACkK,IAAI,EAC9D8vC,EAAeC,CAAAA,EAAAA,GAAAA,EAAAA,CAAwBA,CAACF,GAE9C,OAAOt2C,EAAOqB,IAAI,CAACk1C,EAAa9vC,IAAI,CACtC,EAEF,EAAG,CAACgvC,EAAQlK,EAASxrC,GAAiB1H,YAAY,EAE5CkB,EAAOyG,EAAOwL,MAAM,CAGpB2rB,EAAQsf,CAAAA,EAAAA,GAAAA,EAAAA,CAAeA,CAAC,CAAEtsC,UAAWA,GAAa,IAAK,GAEvDusC,EAAgBzrC,EAAAA,EAAGA,CAAC0rC,wBAAwB,CAACxuC,OAAO,CAAC,aAAc,CAAC,CAAC,EAAE5O,EAAK,CAAC,CAAC,EAEpF,MACE,UAACq6C,GAAMA,CACLzc,EADKyc,IACEzc,EACPqI,QAASA,EACT7B,aAAc,CACZpjC,QAAS,CACPq8C,oBAAoB,EACpBC,eAAgB,CAAEj/C,IAAK8+C,CAAc,EACrCI,eAAgB,CAAEl/C,IAAKqT,EAAAA,EAAGA,CAAC8rC,kBAAkB,EAC7CC,SAAU,CAAEp/C,IAAKq/C,CAAAA,EAAAA,GAAAA,EAAAA,CAAiBA,GAAI3e,WAAW,CAAM,CACzD,CACF,EACAsF,gBAAiBA,EACjBlE,UAAWA,EACXJ,KAAMA,EACNwa,cAAe,GACfjW,wBAAyB,CACvB1O,oBAAqB,IACnBinB,CAAAA,EAAAA,GAAAA,EAAAA,CAAmBA,CAAC,iBAAEV,mBAAiB/3B,WAAkBg4B,qBAAUr6B,CAAmB,GACxF/U,QAAS0E,EAAAA,EAAGA,CAACisC,QAAQ,CACrB1rC,OAAQjS,EACRu1B,aAAc,CACZjyB,UAAW,SACb,EACAuH,cAAe,CACbvH,UAAW,SACb,CACF,EACA28B,iCAAiC,KAGvC,EAAE,gHE1EK,IAAM2d,EAASp8C,EAAAA,UAAgB,CACpC,CACE,qBACEq8C,CAAmB,SACnB5X,GAAU,CAAK,YACf6X,CAAU,CACV9C,MAAO+C,EAAc,EAAE,kBACvBC,CAAgB,aAChBC,CAAW,OACXtoB,CAAK,CACL,GAAGr0B,EACJ,CACD0H,KAEA,IAAM+tB,EAAWC,CAAAA,EAAAA,EAAAA,EAAAA,CAAWA,GACtBknB,EAAe18C,EAAAA,MAAY,CAAiB,MAC5C,GAAEoD,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,cACvBm2C,EAAQx5C,EAAAA,OAAa,CACzB,IACE,IACKu8C,EACHhnB,EACK,CACC/gB,GAAI,YACJ3X,IAAK,GACLoF,IAAKy6C,CACP,EACA,KACL,CAACv/C,MAAM,CAAC0iB,SACX,CAAC08B,EAAahnB,EAAS,EAGnBonB,EAAkBnD,EAAMn5C,MAAM,CAC9Bu8C,EAAqBD,EAAkB,EAAIE,KAAKC,IAAI,CAAmB,GAAlBH,GAAyB,EAC9EI,EAAqBvD,EAAMwD,KAAK,CAAC,EAAGJ,GACpCK,EAAsBzD,EAAMwD,KAAK,CAACJ,EAAoBD,GAEtDhgB,EAAmB,SAAVxI,EAiBf,OAfAn0B,EAAAA,SAAe,CAAC,KACd,GAAI,CAACu1B,GACD,CAACmnB,EAAa37C,OAAO,CADV,CACY,MAQ3B,IAAMkgC,EAAW,IAAIC,iBAAiBgc,IANpC,IAAK,IAAM/b,KAAYgc,EACC,WADa,EACA,CAA/Bhc,EAASxgC,IAAI,EACf+7C,EAAa37C,OAAO,EAAE0L,eAAeyuB,gBAAgB,cAG3D,GAGA,OADA+F,EAASQ,OAAO,CAACib,EAAa37C,OAAO,CAAE,CAAE2gC,WAAW,EAAMC,SAAS,CAAK,GACjE,IAAMV,EAASW,UAAU,EAClC,EAAG,CAACrM,EAAS,EAGX,UAAC6nB,SAAAA,CACCt7C,UAAWmC,IAAG,gBAADA,sBAAwC,CACnD,+BAAgC04B,CAClC,GACA7yB,cAAY,aACZ7H,IAAKuF,EACJ,GAAG1H,CAAI,UAER,WAAC+B,MAAAA,CACCC,UAAWmC,IAAG,YAAa,CACzB,GADWA,eACQwgC,EACnB3C,UAAW,CAAC2C,CACd,aAEA,WAAC5iC,MAAAA,CAAIC,UAAU,4CACb,WAACD,MAAAA,CAAIC,UAAU,qBACb,UAACyiB,KAAAA,CAAGvc,mBAAiB,oBAAoBlG,UAAU,mBAChDsB,EAAE,iBAEL,WAACvB,MAAAA,CAAIC,UAAU,2EACZ,CAAC,CAAC06C,GACD,WAAC36C,MAAAA,CACCC,UAAWmC,IACT,gBADWA,oDAEX,CACE,wVACE04B,CACJ,GAED,GAAIpH,GAAY,CAAE/gB,GAAI,gBAAiB,CAAC,WAEzC,WAAColB,EAAAA,EAAIA,CAAAA,CACF,GAAG4iB,CAAgB,CACpBjf,WAAW,EACXz7B,UAAWmC,IAAG,gBAADA,sBAAwC,CACnD,sCAAuC,CAACkwB,EACxC,sCAAuCwI,CACzC,aAEA,UAACt4B,OAAAA,CAAKvC,UAAU,mBAAWsB,EAAE,WAC7B,UAACvB,MAAAA,CAAIC,UAAU,qBAAa06C,EAAiBp0C,KAAK,MAEpD,UAACvG,MAAAA,UACC,UAAC+3B,EAAAA,EAAIA,CAAAA,CACH/8B,IAAI,6GACJ68B,aAAa,EACb53B,UAAWmC,IAAG,UAAW,CACvB,KADWA,iCAC4B,CAACkwB,EACxC,oBAAqBwI,CACvB,YAECv5B,EAAE,sBAKV,CAAC,CAACi5C,GACD,WAACx6C,MAAAA,CAAIC,UAAU,iCACb,UAAC83B,EAAAA,EAAIA,CAAAA,CACF,GAAGyiB,CAAmB,CACvB9e,WAAW,EACXz7B,UAAU,mFAETu6C,EAAoBj0C,KAAK,EAAIhF,EAAE,qBAElC,UAAC0hB,IAAAA,CAAEhjB,UAAU,iCAAyBsB,EAAE,sBAI7Cq5C,GAAeA,GAAap8C,OAAS,GACpC,UAACwB,MAAAA,CAAIC,UAAU,wBACb,UAACwW,KAAAA,CAAGxW,UAAU,2DACX26C,EAAY7yC,GAAG,CAAC,CAAC,SAAEyzC,CAAO,KAAExgD,CAAG,CAAE,GAE9B,UAAC4b,KAAAA,UACC,WAACkO,IAAAA,CACCjb,KAAM7O,EACNiF,UAAU,QACVwK,OAAO,SACP0E,IAAI,sBACJ9I,aAAY,GAAGm1C,EAAQ,EAAE,EAAEj6C,EAAE,WAAW,WAExC,UAACk5B,MAAAA,CACC/mB,IAAK8nC,EACLv7C,UAAU,SACVI,IAAK,CAAC,4BAA4B,EAAEm7C,EAAQ,IAAI,CAAC,GAEnD,WAACh5C,OAAAA,CAAKvC,UAAU,oBAAU,KAAGsB,EAAE,iBAb1B,CAAC,cAAc,EAAEi6C,EAAAA,CAAS,UAsB/C,WAACx7C,MAAAA,CAAIC,UAAU,+GACZi7C,EAAmB18C,MAAM,CAAG,GAC3B,UAACiY,KAAAA,UACEykC,EAAmBnzC,GAAG,CACrB,CAAC,gBACCT,CAAc,CACduwB,aAAW,OACXtxB,CAAK,8BACLk1B,CAA4B,CAC5B,GAAGj1B,EACJ,GACC,UAACoQ,KAAAA,CACC3W,UAAU,OAET,GAAGw7C,EAA2Bj1C,EAAM,UAErC,UAACuxB,EAAAA,EAAIA,CAAAA,CACF,GAAGvxB,CAAK,CACTg2B,gBAAiBp6B,IAAGoE,EAAMg2B,cAAPp6B,CAAsB,CAAE,CACzC,yCAA0C04B,CAC5C,GACAxzB,eAAgBA,EAChBuwB,YAAaA,EACb8D,wBAAuBF,GAA8BG,KACrDC,yBAAwBJ,GAA8BzuB,eAErDzG,KAbEA,GAASC,GAAOmM,IAAMnM,GAAOxL,QAoB3CogD,EAAoB58C,MAAM,CAAG,GAC5B,UAACiY,KAAAA,UACE2kC,EAAoBrzC,GAAG,CACtB,CAAC,gBACCT,CAAc,CACduwB,aAAW,OACXtxB,CAAK,8BACLk1B,CAA4B,CAC5B,GAAGj1B,EACJ,GACC,UAACoQ,KAAAA,CACC3W,UAAU,OAET,GAAGw7C,EAA2Bj1C,EAAM,UAErC,UAACuxB,EAAAA,EAAIA,CAAAA,CACF,GAAGvxB,CAAK,CACTvG,UAAWmC,IAAG,gBAADA,8BAAgD,CAC3D,iBAAkB,CAACkwB,EACnB,sBAAuBwI,CACzB,GACA0B,gBAAiBp6B,IAAG,CAClB,eADiBA,0BACyB04B,CAC5C,GACAxzB,eAAgBA,EAChBuwB,YAAaA,EACb8D,wBAAuBF,GAA8BG,KACrDC,yBAAwBJ,GAA8BzuB,eAErDzG,KAjBEA,GAASC,EAAMxL,GAAG,EAAIwL,GAAOmM,aA0B/C8nC,GAAcA,EAAWj8C,MAAM,CAAG,GACjC,UAACwB,MAAAA,UACC,UAACyW,KAAAA,CAAGxW,UAAU,sEACXw6C,EAAW1yC,GAAG,CAAC,CAAC,gBAAET,CAAc,OAAEf,CAAK,aAAEsxB,CAAW,CAAE,GAAGrxB,EAAO,GAC/D,UAACoQ,KAAAA,CACC3W,UAAU,iEAGV,UAAC83B,EAAAA,EAAIA,CAAAA,CACF,GAAGvxB,CAAK,CACTvG,UAAWmC,IAAG,CACZ,eADWA,KACU04B,CACvB,GACAxzB,eAAgBA,EAChBuwB,YAAaA,WAEZtxB,KAVEA,GAASC,EAAMxL,GAAG,EAAIwL,GAAOmM,SAiB5C,WAACsQ,IAAAA,CACChjB,UAAWmC,IAAG,gBAADA,QAA0B,CACrC,OAAQq4C,GAAcA,EAAWj8C,MAAM,CAAG,EAC1C,oBAAqBs8B,CACvB,GACA4gB,wBAAwB,cACzB,OACQ,IAAIl3C,OAAOm3C,WAAW,GAAG,iBAK1C,GACA,SAEOF,EAA2Bj1C,CAAW,EAC7C,GAAiB,aAAa,CAA1BA,EAAMmM,EAAE,CACV,MAAO,CACL,eAAe,CACjB,CAEJ,CAEA4nC,EAAOh6C,WAAW,CAAG,mCGnSd,IAAMq7C,EAAe,CAACr6C,EAAwBqN,IACnD,CACE,CACEipB,aAAa,EACbtxB,MAAOhF,EAAE,0BACTvG,IAAK,GAAGqT,EAAAA,EAAGA,CAACC,YAAY,GAAGM,EAAO,4BAA4B,CAChE,EACA,CACEipB,aAAa,EACbtxB,MAAOhF,EAAE,WACTvG,IAAK,yBACP,EACA,CACE68B,aAAa,EACbtxB,MAAOhF,EAAE,eACTvG,IAAK,kDACP,EACA4T,SACI,CACEipB,YAAa,GACbtxB,MAAOhF,EAAE,eACTvG,IAAK,GAAGqT,EAAAA,EAAGA,CAACC,YAAY,GAAGM,EAAO,2GAA2G,CAAC,EAEhJ,KACJ,CACEipB,aAAa,EACbtxB,MAAOhF,EAAE,SACTvG,IAAK,4BACP,EACA,CACE68B,aAAa,EACbtxB,MAAOhF,EAAE,oBACTvG,IAAK,GAAGqT,EAAAA,EAAGA,CAACC,YAAY,GAAGM,EAAO,iBAAiB,CAAC,EAEtD,CACEipB,aAAa,EACbtxB,MAAOhF,EAAE,sBACTvG,IAAK,GAAGqT,EAAAA,EAAGA,CAACC,YAAY,GAAGM,EAAO,wBAAwB,CAAC,EAE7D,CACEipB,aAAa,EACbtxB,MAAOhF,EAAE,yBACTvG,IAAK,GAAGqT,EAAAA,EAAGA,CAACC,YAAY,GAAGM,EAAO,gCAAgC,CAAC,EAErE,CACEipB,aAAa,EACbtxB,MAAOhF,EAAE,oCACTvG,IAAK,oGACP,EACA,CACE68B,aAAa,EACbtxB,MAAOhF,EAAE,gCACTvG,IAAK,GAAGqT,EAAAA,EAAGA,CAACC,YAAY,GAAGM,EAAO,qCAAqC,CAAC,EAE1E,CACEipB,aAAa,EACbtxB,MAAOhF,EAAE,mBACTvG,IAAK,GAAGqT,EAAAA,EAAGA,CAACC,YAAY,GAAGM,EAAO,sBAAsB,CAAC,EAE3D,CACEipB,aAAa,EACbtxB,MAAOhF,EAAE,aACTvG,IAAK,kCACP,EACD,CAACM,MAAM,CAAC0iB,SAAmB,ECrEf,CAAC,SAAE4kB,CAAO,CAAyB,IAChD,GAiBa2X,GAjBLh5C,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,UACvB,QAAEoN,CAAM,CAAE,CAAGwH,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,GAE5B,MACE,UAACylC,EAASA,CACRlB,GADQkB,cACU,CAAE7gD,IAAK,sBAAuBuL,MAAO,gBAAiB,EACxEi0C,oBAAqB,CACnBx/C,IAAK,6BACLyP,OAAQ,SACR0E,IAAK,qBACP,EACAyzB,QAASA,EACT+U,MAAOiE,EAAar6C,EAAGqN,GAAU,KAAdgtC,EAGzB,+yBCnBO,IAAME,EAAsB,CACjCC,eAAgB,EAChBxuC,UAAW,KACX+e,MAAO,CACLvpB,YAAa,KACbyd,WAAW,EACXw7B,cAAe,IACjB,EACAt3C,QAAS,KACTu3C,UAAW,KACXC,SAAU,KACVC,aAAc,KACdC,QAAS,GACTC,MAAO,GACPC,MAAO,CACL,CACEC,OAAQ,EACRr3C,SAAU,EAAE,EAEf,CACDs3C,aAAc,GACdC,aAAc,CACZC,SAAS,EACTC,UAAU,EACVC,cAAe,GACfC,cAAc,EACdC,sBAAsB,EACtBC,0BAA0B,EAC1BC,UAAW,GACXC,QAAS,KACTC,cAAc,EACdC,cAAc,EACdC,IAAK,KACLC,UAAW,GACXC,WAAW,EACXC,oBAAoB,EACpBC,4BAA6B,GAC7BC,WAAY,GACZC,SAAS,EACTC,cAAe,GACfC,YAAY,EACZC,QAAQ,EACRC,uBAAuB,EACvBC,iBAAiB,CACnB,CACF,EAAE,6CC1CK,IAAMlZ,EAAe,IAC1B7mB,EAAQtZ,GAASmgC,cAAgBngC,GAASsgC,oBAAsBtgC,GAASygC,cAAAA,EAE9D6Y,CAF8E,CAEzD,IAChChgC,EAAQtZ,GAASugC,oBAAsBvgC,GAASwgC,cAAAA,EAErCN,CAFqD,CAE1ClgC,IAAsBsZ,EAAQtZ,GAASkgC,SAAWlgC,GAASogC,UAAAA,EAEtEJ,CAFkF,CAEvE,IAAuB1mB,CAAQtZ,GAASigC,cAEnDsZ,CAFkE,CAE5C,GACjCpZ,EAAangC,IAAYs5C,EAAmBt5C,IAAYkgC,EAAQlgC,GAErDw5C,EAAc,IAAuBlgC,CAAQtZ,GAASy5C,YAEtDC,CAFmE,CAE9C,IAChCpgC,CAAQy+B,GAAcI,eACtB7+B,CAAQy+B,GAAcK,uBACtB9+B,CAAQy+B,GAAcU,aAEXkB,CAFyB,CAED5B,IACnCz+B,CAAQy+B,GAAcS,cAAc,yBCuC/B,IAAMoB,EAAe,CAAC,qBAC3BC,GAAsB,CAAK,CAC3BC,oCAAmC,CAAK,mBACxCC,GAAoB,CAAK,CAO1B,IACC,GAAM,CAACl9C,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,qBACrB,OAAEgnC,CAAK,CAAE,CAAG/wB,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,GAC1B,YAAEinC,CAAU,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,CAAAA,CAAyBA,CAACH,GAE3CnB,EAAY7U,EAAM,0BAClBwU,EAAYxU,EAAM,0BAClBoU,EAAgBpU,EAAM,8BACtBoW,EAAoBpW,EAAM,2BAC1BqW,EAAgBrW,EAAM,uBACtBkV,EAAUlV,EAAM,wBAChB9jC,EAAU8jC,EAAM,WAChByU,EAAUzU,EAAM,wBAChB4U,EAAM5U,EAAM,oBACZgV,EAA8BhV,EAAM,4CACpC+U,EAAqB/U,EAAM,mCAC3BsW,EAA6BtW,EAAM,sCACnCuW,EAAqC,aAAfL,EACtBM,GAAoBR,GAAmCO,EAEvDE,EACJ,CACE,CAAC,CAAC5B,EACF,CAAC,CAACL,EACF,CAAC,CAACJ,EACF,CAAC,CAACiC,EACF,CAAC,CAACD,EACF,CAAC,CAACE,EACH,CAACxjD,MAAM,CAAC0iB,SAASxf,MAAM,CAAG,EAEvB0gD,EAAkBhB,EAAYx5C,IAAYs6C,EAC1CG,EACJ,CAAC,CAACN,GACD,IAAY,CAAC,CAACnB,CAAAA,CAAM,EAAM,CAACd,GAC3B4B,GAAoCO,EAEvC,MACE,WAAC/+C,MAAAA,CAAIC,UAAU,mBAAmBgI,cAAY,0BAC5C,WAACjI,MAAAA,CACCmG,mBAAiB,qBACjBlG,UAAU,4DAEV,UAACkT,EAAAA,EAASA,CAAAA,CACRhH,SAAUoyC,EACVz/C,KAAK,WACLyH,MAAOhF,EAAE,aACTvE,KAAK,2BAEP,UAACmW,EAAAA,EAASA,CAAAA,CAACrU,KAAK,WAAWyH,MAAOhF,EAAE,gBAAiBvE,KAAK,iCAC1D,UAACmW,EAAAA,EAASA,CAAAA,CAACrU,KAAK,WAAWyH,MAAOhF,EAAE,WAAYvE,KAAK,yBACpDyhD,EAAoB,KACnB,UAACtrC,EAAAA,EAASA,CAAAA,CAACrU,KAAK,WAAWyH,MAAOhF,EAAE,YAAavE,KAAK,0BAExD,UAACmW,EAAAA,EAASA,CAAAA,CAACrU,KAAK,WAAWyH,MAAOhF,EAAE,cAAevE,KAAK,4BACxD,UAACmW,EAAAA,EAASA,CAAAA,CACRrU,KAAK,WACLyH,MAAOhF,EAAE,aACTvE,KAAK,0CAEL4nC,CAAAA,EAAQlgC,IAAYmgC,CAAbD,CAA0BlgC,EAAAA,CAAO,EACxC,UAACyO,EAAAA,EAASA,CAAAA,CAACrU,KAAK,WAAWyH,MAAOhF,EAAE,gBAAiBvE,KAAK,8BAE1D4nC,CAAAA,EAAQlgC,IAAYmgC,CAAbD,CAA0BlgC,IAAYs5C,EAAmBt5C,EAAAA,CAAO,CAAvCmgC,CAChC,UAAC1xB,CAD8D6qC,CAC9D7qC,EAASA,CAAAA,CACRrU,KAAK,WACLyH,MAAOhF,EAAE,wBACTvE,KAAK,sCAGR4nC,EAAQlgC,IACP,CADMkgC,EACN,OAACzxB,EAAAA,EAASA,CAAAA,CAACrU,KAAK,WAAWyH,MAAOhF,EAAE,gBAAiBvE,KAAK,8BAE3D0nC,EAAShgC,IACR,EADOggC,CACP,OAACvxB,EAAAA,EAASA,CAAAA,CAACrU,KAAK,WAAWyH,MAAOhF,EAAE,cAAevE,KAAK,8BAEzDkiD,EACC,UAAC34C,QAAAA,CAAMtG,UAAU,iBACf,UAACkT,EAAAA,EAASA,CAAAA,CAACrU,KAAK,WAAWyH,MAAOhF,EAAE,WAAYvE,KAAK,2BAErD,QAEN,WAACgD,MAAAA,CAAIC,UAAU,sBACZg9C,GAASjgD,MAAQogD,GAAKpgD,MAAQugD,EAC7B,WAACv9C,MAAAA,CAAIC,UAAU,qDACZg9C,GAASjgD,MAAQugD,EAChB,WAACh3C,QAAAA,CAAMtG,UAAU,kBACf,UAACuC,OAAAA,CAAKvC,UAAU,oBAAYsB,EAAE,eAC9B,UAAC4R,EAAAA,EAASA,CAAAA,CACRrU,KAAK,WACLyH,MACEi3C,IAEID,EACAh8C,EAAE,gBACF07C,GAASjgD,GAHTwgD,CAGSxgD,EAEfA,KACEugD,EACI,qCACA,+BAIR,KACHH,GAAKpgD,KACJ,WAACuJ,QAAAA,CAAMtG,UAAU,kBACf,UAACuC,OAAAA,CAAKvC,UAAU,oBAAYsB,EAAE,iBAC9B,UAAC4R,EAAAA,EAASA,CAAAA,CAACrU,KAAK,WAAWyH,MAAO62C,GAAKpgD,KAAMA,KAAK,2BAElD,QAEJ,KACJ,WAACgD,MAAAA,CACCmG,mBAAiB,sBACjBlG,UAAU,qDAET,GAAUjD,MAASugD,EAAD,KACjB,UAACpqC,EAAAA,EAASA,CAAAA,CACR5M,MAAOhF,EAAE,aACT8R,eAAe,SACfrW,KAAK,yBACLmP,SAAU,CAAC,CAACyyC,GAAsBK,GAAW,CAAC5B,EAC9CpS,UAAW,EACXxnB,gBAAiB,CACf8oB,QAAS,CACPv/B,MAAO,qBACPnB,QAAStK,EAAE,iBACb,CACF,IAGJ,UAAC4R,EAAAA,EAASA,CAAAA,CACR5M,MAAOhF,EAAE,aACT8R,eAAe,SACfrW,KAAK,yBACLmP,SAAU8yC,GAAW,CAACjC,EACtB/R,UAAW,EACXxnB,gBAAiB,CACf8oB,QAAS,CACPv/B,MAAO,qBACPnB,QAAStK,EAAE,iBACb,CACF,IAEF,UAACvB,MAAAA,UACE,GAAMhD,KAcH,KAbF,UAACmW,EAAAA,EAASA,CAAAA,CACR5M,MAAOhF,EAAE,eACT8R,eAAe,SACfrW,KAAK,6BACLmP,SAAUgzC,EACVlU,UAAW,GACXxnB,gBAAiB,CACf8oB,QAAS,CACPv/B,MAAO,sBACPnB,QAAStK,EAAE,mBACb,CACF,YAMV,UAACvB,MAAAA,CAAIC,UAAU,gBAAgBiI,YAAU,kBACtC+2C,GACC,WAACj/C,MAAAA,CAAIC,UAAU,uBACb,WAACS,MAAAA,CACC0+C,MAAM,6BACNv+C,QAAQ,YACRD,cAAY,OACZy+C,UAAU,QACVp/C,UAAU,+CAEV,UAACkhB,SAAAA,CAAOpgB,KAAK,OAAOqB,GAAG,KAAKgf,GAAG,KAAKC,EAAE,SACtC,UAACF,SAAAA,CAAOpgB,KAAK,eAAeqB,GAAG,KAAKgf,GAAG,KAAKC,EAAE,OAC9C,UAACrgB,OAAAA,CACCD,KAAK,OACLE,EAAE,+KAEJ,UAACD,OAAAA,CAAKD,KAAK,OAAOE,EAAE,6DACf,IACNM,EAAE,uBAMf,EAAE,0BE5PK,IAAMynC,EAAyB,CACpC1gC,cAAe,gCACfC,gBAAiB,CAAC;;;;;;;;;;CAUnB,CAAC,CACAC,eAAgB,gBAClB,EAAE,SAUc82C,EACd/1C,CAAwB,CACxB2pB,CAA6C,CAC7Cv1B,CAAsD,EAEtD,OAAO4L,EAAYC,UAAU,CAA4B,CACvDP,SAAU,CAAC+/B,EAAwB9V,EAAU,CAC7C,GAAGv1B,CAAO,EAEd,CAEO,IAAM0sC,EAAkB,CAC7B/hC,cAAe,UACfC,gBAAiB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCnB,CAAC,CACAC,eAAgB,SAClB,EAAE,8CCtCF,IAAM+2C,EAAmB,GACvB,MAAUxyC,OAAO,CAAC5Q,GAAeA,EAAMT,GAAb,CAAiB,CAAC,MACxCqZ,OAAOyqC,QAAQ,CAACrjD,GACb6kB,KADqB,EACd7kB,IAGVsjD,CAJ+Bz+B,CAId,MAJqB7kB,WAK1CujD,EAAYC,OAAOC,UAAU,EAAE,YAC/BC,CAAU,KACVC,CAAG,CACH,GAAGC,EACe,IAClB,IAAM/kD,EAAM,IAAIE,IAAI4kD,EAAKzgD,OAAOM,QAAQ,CAACF,MAAM,EAEzCugD,EAAkB,IAAIC,gBAAgB,CAC1C,GAAIF,GAAQ97B,OAAS,CAAEA,MAAO87B,EAAO97B,KAAK,CAAE,CAC5C,GAAI87B,GAAQr2C,UAAY,CAAEA,SAAUq2C,EAAOr2C,QAAQ,CAAE,CACrD,GAAIq2C,GAAQjhD,MAAQ,CAAEA,KAAMygD,EAAiBQ,GAAQjhD,KAAM,CAAC,CAC5D,GAAIihD,GAAQvtC,OAAS,CAAEA,MAAO+sC,EAAiBQ,EAAOvtC,KAAK,CAAE,CAAC,CAC9D,GAAIutC,GAAQG,iBAAmB,CAAEA,gBAAiBX,EAAiBQ,EAAOG,eAAe,CAAE,CAAC,CAC5F,GAAIL,GAAc,CAChBlgD,SAAU4/C,EAAiB,GAAGM,EAAWM,QAAQ,CAAC,CAAC,EAAEN,EAAWO,SAAS,EAAE,CAC7E,CAAC,GAGH,GAAI,CACF,IAAMv+C,EAAW,MAAMw+C,MAAMrlD,EAAI6O,IAAI,CAAG,CAAC,CAAC,EAAEm2C,EAAgBrkD,QAAQ,IAAI,CAAE,CACxEymB,OAAQ,MACRk+B,QAAS,CACP,uBAAwBZ,CAC1B,CACF,GACMa,EAAsB,MAAM1+C,EAAS2+C,IAAI,GAM/C,OAJID,GAAqBvhD,SAAW,sBAAsB,EACxDyhD,EAASA,EAAEC,sBAAsB,CAAEC,YAAa,CAAEC,iBAAkB,IAAK,CAAE,GAGtEL,CACT,CAAE,KAAM,CACN,OAAO,IACT,CACF,EAKaM,EAAwB,CAAC,CACpCh5C,aAAY,CAAI,WAChBitC,EAAY,CAAC,gBACbgM,CAAc,CACa,IAC3B,IAAMC,EAAiB,CAAC,CAACD,GAAgB78B,OAAS68B,EAAe78B,KAAK,EAAEzlB,QAAUs2C,EAE5E,YAAE1hB,CAAU,CAAEx0B,KAAMoiD,CAAoB,CAAE,CAAGh4C,CAAAA,EAAAA,EAAAA,CAAAA,CAAQA,CAA8B,CACvFC,SAAU,CAAC,eAAgB63C,EAAe,CAC1CG,QAAS,IAAMxB,EAAeqB,GAC9B1jD,QAASyK,GAAak5C,EACtBG,gBAAiBC,EAAAA,EAAgBA,GAGnC,MAAO,CACLC,YAAaJ,GAAsBI,aAAe,KAClDr+B,QAASqQ,EACTp0B,OAAQgiD,GAAsBhiD,QAAU,IAC1C,CACF,EAAE,EClF0B,GAED,EACzBqiD,QADyB,CACfC,EAAWC,SAAS,CAC9BC,cAAeF,EAAWG,cAAc,CAC1C,EAEaC,EAAqC,CAAC,aAAEN,CAAW,CAAE,IAChE,GAAM,CAACO,EAAaC,EAAe,CAAGrkC,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,CAAiC,EAAE,EAsBjF,MApBApZ,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACR,GAAI,CAACi9C,GAAsC,IAAvBA,EAAY5iD,MAAM,CAAQ,CAC5CojD,EAAe,EAAE,EACjB,MACF,CAaAA,EAZgBR,EAAYr5C,GAAG,CAAC,CAACkb,EAAGpQ,IAYrBgvC,CAZ8B,CAC3ClvC,GAAIsQ,EAAE6+B,QAAQ,CACdp0C,YAAauV,EAAEvV,WAAW,CAC1B0uC,QAASn5B,EAAE6+B,QAAQ,CACnBxpC,QAAQ,EACRlE,MAAOvB,EACPkvC,oBAAqBA,EAAoB9+B,EAAE++B,qBAAqB,EAChEC,kBAAmBh/B,EAAEi/B,kBAAkB,CACvCC,MAAOl/B,EAAEk/B,KAAK,CACdrjD,KAAMmkB,EAAEnkB,IAAI,CACZ8iB,MAAOqB,EAAErB,KAAK,CAChB,GAEF,EAAG,CAACw/B,EAAY,EAET,aAAEO,CAAY,CACvB,EAAE,eGNF,MAlDmC,CAAC,aAClCS,CAAW,CAIZ,IACC,GA4CaC,GA5CL9gD,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,WA4CU6gD,EAAC,GA3ClCC,EAAWF,GAAa7X,OAAOC,SAAShB,MAAQ,GAElD+Y,EAAeH,GAAa7X,OAAOC,SAASgY,UAUhD,OATID,EACFA,GAAgBH,GAAa7X,OAAOC,SAASoG,QACzC,CAAC,EAAE,EAAEwR,GAAa7X,OAAOC,SAASoG,QAAAA,CAAS,CAC3C,GAAGwR,GAAa7X,OAAOC,SAASoG,QAAAA,CAAS,CAE7C2R,GAAgBH,GAAa7X,OAAOC,SAASoG,QACzC,CAAC,CAAC,EAAEwR,GAAa7X,OAAOC,SAASoG,QAAAA,CAAS,CAC1C,EAAE,CAEDwR,GAAeE,EACpB,WAACtiD,MAAAA,WACC,UAACA,MAAAA,CAAIC,UAAU,2DACb,UAACuC,OAAAA,CAAKvC,UAAU,yBAAiBsB,EAAE,kCAErC,UAACkhD,EAAAA,EAAcA,CAAAA,CAEbz1C,MAAOs1C,EACPriD,UAAU,sGACVyiD,eAAc,EACdC,gBAAe,WAEf,WAAC3iD,MAAAA,CAAIC,UAAU,+BACb,UAACD,MAAAA,CAAIC,UAAU,sBAAsBW,aAAW,aAC9C,UAAC65B,MAAAA,CACCx6B,UAAU,wBACVyT,IAAI,gBACJrT,IAAI,sDAGR,WAACL,MAAAA,CAAIC,UAAU,0DACb,UAACuC,OAAAA,CAAKvC,UAAU,qBAAaqiD,IAC7B,UAAC9/C,OAAAA,CAAKvC,UAAU,iCAAyBsiD,WAhBxCD,MAqBP,IACN,gBClCO,SAASM,IACd,GAAM,CAAC51C,EAAOwK,EAAS,CAAGqrC,CAAAA,EAAAA,EAAAA,EAAAA,CAAeA,CAAiC,iBAAkB,EAAE,CAAE,CAC9FC,qBAAqB,EAErBC,WAAY,GACV5jD,KAAKC,SAAS,CAAC,UACb4jD,EACAC,WAAY,IAAIz+C,OAAOglB,OAAO,GA3BZ,EA2BiB05B,KACrC,EA5B6B,CA8B/BC,GA9BmC,UA8BrB,IACZ,GAAI,CACF,IAAMriC,EAAe3hB,KAAKsrC,KAAK,CAAC2Y,GAChC,GACEtiC,GACe,UAAf,OAAOA,GACP,eAAgBA,GACU,UAA1B,OAAOA,EAAImiC,UAAU,EACrB,aAAcniC,EACd,CACA,GAAM,CAAEmiC,YAAU,UAAED,CAAQ,CAAE,CAAGliC,EAGjC,GAAIuiC,IAFY7+C,KAAKy+C,GAAYz5B,OAAO,GAAK,IAAIhlB,OAAOglB,OAAO,IAEpD,EACT,CADY,KACL,EAAE,CAGX,GAAIw5B,GAAYl2C,MAAMC,OAAO,CAACi2C,GAC5B,OAAOA,CADgC,CAI3C,MAAO,EAAE,CACT,KAAM,CACN,MAAO,EAAE,CAEb,CACF,GAIA,MAAO,CAFoB,CAACh2C,GAAS,IAAImuC,KAAK,CAAC,EAzD3B,CAyD8BmI,EAEtB9rC,EAAS,CC5DhC,IAAM+rC,EAAwE,CACnF/Y,QAAS,WACTgZ,QAAS,UACTlZ,QAAS,WACTmZ,gBAAiB,oBACjBl0C,SAAU,OACZ,EAAE,eCIF,IAAMm0C,EAAsC,CAAC,CAC3C/B,aAAW,QACX75B,EAAS,EAAE,CAIZ,GACC,EAEE,EAFE,CAEF,OAAC9nB,CAFe,KAEfA,UACE2hD,EAAY55C,GAAG,CAAC,CAAC47C,EAAYvvC,IAE1B,UAACquC,EAAAA,EAAcA,CAAAA,CAEbz1C,MAAO22C,EAAWj2C,WAAW,CAC7BzN,UAAU,sGACVyiD,eAAcf,EAAYnjD,MAAM,CAChCmkD,gBAAevuC,EAAQ,EACvBnM,cAAa6f,QAAkB9hB,CAAT8hB,UAEtB,UAAC87B,EAAAA,CACCC,SAAUF,GAAY7kD,KACtBgpB,OAAQA,GAAY65B,EAAYnjD,KAAd,CAAC,EAAuB4V,MAAc0T,OAAS9hB,WAEjE,iCACE,UAACxD,OAAAA,CAAKvC,UAAU,YAAYgI,cAAY,6BACrC07C,EAAW5B,mBAAmB,CAACV,QAAQ,GAE1C,UAAC7+C,OAAAA,CAAKvC,UAAU,iCACb0jD,EAAW5B,mBAAmB,CAACP,aAAa,SAhB9CmC,EAAWj2C,WAAW,KANZ,KAiCrBk2C,EAAuC,CAAC,QAC5C97B,CAAM,UACN+7B,CAAQ,UACR3+C,CAAQ,CAKT,IACC,IAAM4+C,EACJD,GAAYA,KAAYN,EAAgBA,CAAa,CAACM,EAA0B,CAAG,MAA9CN,KACvC,MACE,iCACGz7B,EACC,UAAC9nB,MAAAA,CAAIC,UAAU,+DACb,UAACuC,OAAAA,CAAKvC,UAAU,yBAAiB6nB,MAEjC,KACJ,WAAC9nB,MAAAA,CAAIC,UAAU,+BACb,UAACD,MAAAA,CAAIC,UAAU,+BAA+BW,aAAW,aACvD,UAAC2R,EAAAA,EAAIA,CAAAA,CAACvV,KAAM8mD,EAAkB7hD,KAAK,SAErC,UAACjC,MAAAA,CAAIC,UAAU,4CAAoCiF,SAI3D,ECpCA,EAhC0C,CAAC,iBACzC6+C,CAAe,GA+BFC,kBA9BbC,CAAmB,cA8B2BD,EAAC,UA7B/CE,EAA2B,CAAC,wBAC5BC,EAAyB,EAAK,CAM/B,IACC,GAAM,GAAE5iD,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,gBACvB4iD,EAAuBxB,IAIvByB,EAA6BJ,GAAqB9I,MACtD,EAL4CyH,CAM5C0B,CAJqC,EAAIJ,GAS3C,OAAOK,CAF4B,GADPJ,EAAyBC,EAAuB,KACO5lD,MAAK,CAOpF,KAJF,UAACklD,EAAmCA,CAClC57B,OAAQvmB,EAAE,mBADwBmiD,kBAElC/B,YAAa0C,GAGnB,ECdA,EAhBqC,CAAC,gBAgBvBG,CAhByBT,CAAe,CAAiC,IACtF,GAAM,GAAExiD,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,GAeYgjD,EAAC,WAbpC,CAACC,EAAoB,CAAG7B,IAExB8B,EAAiBD,GAAqBtJ,MAAM,EAFHyH,CAEM0B,CADd,EAAI,GAG3C,MACE,UAACZ,EAAmCA,CAClC57B,OAAQvmB,EAAE,uBADwBmiD,SAElC/B,YAAa+C,GAGnB,ECbaC,EAAyC,CACpDr8C,cAAe,iBACfC,gBAAiB,CAAC;;;;;CAKnB,CAAC,CACAC,eAAgB,gCAClB,EAAE,EA2BuC,CACvCF,cAAe,UACfC,gBAAiB,CAAC;;;;;;;;;;CAUnB,CAAC,CACAC,eAAgB,mBAClB,EAAE,ECAiB,GACV,8BAA8B4hC,IAAI,CAACwa,GAG/BC,EAAkE,CAAC,YAC9EhF,CAAU,CACViF,sBAAqB,CAAK,sBAC1BC,GAAuB,CAAK,MAC5B/nD,CAAI,aACJokD,CAAW,UACXj+B,CAAQ,UACRC,CAAQ,SACRL,CAAO,OACPxc,CAAK,gBACL8M,CAAc,UACd3J,CAAQ,WACRzJ,CAAS,iBACTwjB,CAAe,WACfi8B,CAAS,oBACTsF,EAAqB,CAAC,kBACtBC,EAAmB,SAAS,QAC5BjmD,CAAM,yBACNkmD,EAA0B,EAAI,2BAC9BC,CAAyB,CACzB,GAAGlnD,EACJ,IACC,GAAM,GAAEsD,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,gBACvBmiB,EAAU,CAAC,oBAAoB,CAAC,CAChC,eACJ+kB,CAAa,SACb0c,CAAO,CACP5tC,UAAQ,SACR6tC,CAAO,CACP/iC,UAAW,QAAEC,CAAM,CAAE,CACtB,CAAG9K,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,GAEZ,CAAC6tC,EAAmBC,EAAqB,CAC7CpnD,EAAAA,QAAc,CAAsC,MAChD,CAACumD,EAAgBc,EAAkB,CAAG5C,IACtC,aADuDA,CACrD6C,CAAY,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAYA,GAErCvnD,EAAAA,SAAe,CAAC,KACVsnD,GAAgBH,GAClBE,EAAkB,GNjGjB,SAASG,CACdC,CAAsC,EAEtC,IAAMC,EAAoB,IAAIC,IAE9B,OAAOF,EACJtqD,CM4FwCqqD,KN5FlC,CAAC,GACN,CAAIE,EAAkBE,GAAG,CAACC,EAAMt4C,WAAW,GAAG,CAG5Cm4C,EAAkBI,GAAG,CAACD,EAAMt4C,WAAW,GAChC,IAGVytC,KAAK,CAAC,GAAGmI,EACd,EMmF8C,CAACgC,KAAsBZ,EAAe,EAGlF,EAAG,CAACY,EAAmBG,EAAcD,EAAkB,EAEvD,GAAM,CAACU,EAAeC,EAAiB,CAAGhoD,EAAAA,QAAc,CAAC,IACnD,aAAEwjD,CAAW,CAAE,CAAGD,EAAe,YAADA,CAAGN,CAAY,GAE/CgF,GAAaC,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAC,CAAEjB,eAASpoD,CAAK,GACtC8mB,GAAaxN,CAAAA,EAAAA,EAAAA,EAAAA,CAAGA,CAACiM,EAAQvlB,GACzB8kB,GAAW,CAAC,CAACgC,GACbwiC,GAAgB,CAAC,CAACF,IAAcA,GAAW5nD,MAAM,EAAIwmD,EACrDuB,GAAiB5E,EAAYnjD,MAAM,CAAG,EACtCgoD,GAA2C,uBAAXxnD,GAAmCkmD,EAEnE,CAAEtmD,OAAI,CAAEw0B,WAAYqzB,EAAiB,CAAE,CDtDtCz9C,CAAAA,CCsDyC09C,CDtDzC19C,EAAAA,CAAAA,CAAQA,CAA8C,CAC3DC,SAAU,CAAC09C,ECsDX,MADuED,IACrEh9C,EAAU/J,SAAUkgD,EAAYrD,aAAckD,CAAU,EDtDV,CCuDhD,QAAW,CAAC,CAACG,GAAciF,CDrD7B,GCwDM1C,GAAcxjD,IAAM0rC,QACpBsc,GAA4B,CAAC,CAACzB,EAC9B0B,GAAkC,CACtC/B,CAAAA,GACA8B,IACA7B,CAAAA,CAAmB,CAEf,CAAC+B,GAAiBC,GAAmB,CAAG5oD,EAAAA,QAAc,CAAC,CAAC0oD,IACxD34B,GAAU,IACA,SAAS,CAAnBxjB,EAAE1C,GAAG,EAEP++C,GAAmB,CAACC,CADIH,IAAmC,CAACP,EAAAA,GAI9D9uC,EACEytC,EACAtD,EAAYzkD,IAAI,CAAC,GAAgBymD,EAAWj2C,WAAW,GAAKhD,EAAEC,aAAa,CAACqC,KAAK,GAAGovC,SAClF,GAEN,EAEM6K,GAAmB,CAAC,CAAEnC,CAAAA,GAAsB,CAACwB,IAAiBlE,EAAAA,CAAU,CACxEmC,GAA0BqC,IAA6B,CAACN,GACxDY,GAAqBnC,GAAwB,CAACuB,IAAiB5B,EAAelmD,MAAM,CAAG,EAEvF2oD,GAA8B,CAClCF,CAAAA,IACA1C,IACA2C,EAAAA,CAAiB,CAEbE,GACJN,IAAmBG,IAAoB1C,IAA2B2C,GAC9DG,GACJP,IACCP,KAAkBU,IAAoB1C,IAA2B2C,EAAjEX,CAAkF,CAE/Ee,GAAW,MAAOC,IACtB/vC,EAlDgBxa,EAkDIuqD,GACpB,EADSC,EACHC,EAAqBC,GAAsBH,GAEjD/vC,EAASytC,EAAkBwC,GAAoBrL,SAAW,IAC1D2K,IAAmB,GACfhC,GAAwB0C,GAC1BlC,EAAqBkC,GAEvB,MAAMpC,KAEFmB,CAL4C,EAGlCgB,CAEqB,MAAMnC,IAC3C,EAEMzoC,EAH6C4qC,CAGnC,KACd,GAAIX,IAAmC,CAACP,GACtCS,IAAmB,OACd,CAFgD,IAG/CY,EAAqBjf,EAAc1rC,GACZ2qD,GAAoB/rD,OAAOiQ,SAChCk7C,IAAmB,EAC7C,CACAZ,GAAiB,EACnB,EAEMuB,GAAwB,GAC5B,IAA0BhD,GAAgBlmD,OACjCkmD,CADyC,CAC1BxnD,IAAI,CAAC,GAAgBymD,EAAWj2C,WAAW,GAAK65C,GAC7DhD,GACFY,GAA2BjoD,KAChC,GAAgBymD,GAAYj2C,QAFI,MAEY65C,GAElC5F,GAAazkD,KAAK,GAAgBymD,EAAWj2C,WAAW,GAAK65C,GAgCvEK,GAAczpD,EAAAA,MAAY,CAAC,IAC3B0pD,GACJ,CAAc,OAAbn+C,GAAqB,QAAQ0gC,IAAI,CAAC1gC,EAAAA,CAAQ,EACtB,aAArB,OAAOo+C,WACPC,EAAWD,UAAUlD,SAAS,EAC1BoD,GAAuB,KAC3BJ,GAAY1oD,OAAO,EAAG,CACxB,EACM+oD,GAAyB,KAC7BL,GAAY1oD,OAAO,EAAG,CACxB,EACMgpD,GAAc,CAACrB,IAAmC,CAAC/kC,GAEnDqmC,GAAqB/B,IAAc,GAEzC,MACE,WAACpmD,MAAAA,CAAIC,UAAU,kBAAkBkG,mBAAiB,+BAChD,UAACiiD,EAAAA,EAAUA,CAAAA,CACTprD,MAAMwqD,CACNpC,QAASA,EACTpY,MAAO,CACL,GAAGvpB,CAAe,CAClBN,WAAUA,GAAY,CAACqjC,IAAgCjlD,EAAE,cACzDupC,EADyE,OAEvE,KAhCkB,GACA6W,EAAYh1C,IAAI,CAAEg3C,GAAeA,EAAWj2C,WAAW,EA+BvC26C,CA/B4Cr7C,IAC1DzL,EAAE,mBAChC,GA6BoEkiB,GAAiBqnB,SAC7Ewd,OAAQ,IAAMnC,GAAiB,EACjC,EACAoC,OAAQ,CAAC,OAAEnf,CAAK,CAAE,GAEd,WAACof,EAAAA,CAAKA,CAAAA,WACJ,UAAChlC,EAAAA,EAASA,CAAAA,CACRjd,MAAOA,EACP4c,SAAUA,EACVC,SAAUA,EACVtB,SAAUA,GACV7hB,UAAWmC,IAAG,gBAADA,qCAAuDiR,GACpEo1C,QAAQ,mBAEV,WAACC,EAAAA,EAAQA,CAAAA,CACP1rD,KAAK,WACLgQ,MAAO66C,IAAeD,GAAY1oD,OAAO,MAAG8G,EAAYmiD,GACxDQ,UAAWT,GACXta,SAAU0Z,aAEV,UAACsB,EAAAA,EAAaA,CAAAA,CACX,GAAGxf,CAAK,CACR,GAAGnrC,CAAI,CACRmC,IAAKgpC,EAAMhpC,GAAG,CACduS,GAAG,iBACHk2C,aAAchB,IAAeD,GAAY1oD,OAAO,CAAG8G,OAAYmiD,GAC/DloD,UAAWmC,IACT,gBADWA,4JAEXnC,EACA,CACE,aAAc6hB,EAChB,GAEFoM,QAASA,GACTtR,QAASA,GACTksC,iBAAkBd,GAClBe,mBAAoBd,GACpBpd,aAAa,MACbme,YAAY,MACZC,eAAe,MACfC,YAAY,EACZ7iD,aAAY9E,EAAE,YAAa,OAAEgF,CAAM,GACnC2d,eAAcpC,GACd/b,mBAAkB4d,EAClBxd,mBAAiB,2BACjBgd,SAAUA,IAEZ,WAACgmC,EAAAA,EAAeA,CAAAA,CAEdrR,OAAO,EACP73C,UAAWmC,IACT,gBADWA,sGAEX,CAAEqa,OAAQ,CAAC2qC,EAAuB,aAGnCZ,GACC,UAACxmD,MAAAA,CAAIC,UAAU,iCACb,UAAC2jD,EAAoCA,CAACC,SAAS,iBAC7C,OADmCD,CACnC,EAACphD,OAAAA,CAAKvC,UAAU,sBAAsBW,aAAW,aAC9C2lD,GAAiBhlD,EAAE,oBAAsBA,EAAE,6BAIhD,KAEH8lD,GACC,iCACGJ,IAAoB,CAACR,GACpB,UAAC2C,EAAkBA,CACjBhH,YAAaA,IACR,CAAC,CAFWgH,aAEG,EAAE,CAAC,CAAChH,GAAAA,CAAa,EAErC,KACHmC,GACC,UAAC8E,EAA0BA,CACzBtF,gBAAiBkD,CADQoC,EAEzBpF,oBAAqBkB,EACrBhB,uBAAwB+C,KAExB,KACHA,GACC,UAACoC,EAAqBA,CAACvF,YAADuF,IAAkBrC,KACtC,KACHE,GACC,UJ1PTzD,EI0P6CA,CAAC/B,YAAaA,IAChD,QAEJ,IAAoB7/B,GAIpB,CJjQ4B4hC,EAAC,EI8P/B,MADqB,EACrB,EAAC1jD,MAAAA,CAAIC,UAAU,MAAMW,aAAW,aAC7BmiB,EAAU,UAACC,EAAAA,CAAOA,CAAAA,CAAC/gB,KAAK,KAAKmjB,MAAO,IAAQ7jB,EAAE,8BAS/D,UAAC0hB,IAAAA,CAAEhjB,UAAU,UAAUiI,YAAU,qBAC9BqhD,CAxJa,KAClB,GAAI,CAACjD,IAAiB,CAACJ,EACrB,MAAO,GAET,IAHsC,IAG9B,GACN,KAAKnjC,EACH,OAAOxhB,EAAE,UACX,MAAKilD,IAAiCD,GACpC,OAAOhlD,EAAE,yBAA0B,CACjCioD,uBAAwBjoD,EAAE,oBAC1BkoD,gBAAiBloD,EAAE,kBAAmB,CAAEiR,MAAOmvC,EAAYnjD,MAAM,EACnE,EACF,MAAK+nD,GACH,OAAOhlD,EAAE,kBAAmB,CAAEiR,MAAOmvC,EAAYnjD,MAAM,EACzD,MAAKgoD,IAAiC,CAACD,GACrC,OAAOhlD,EAAE,sBACX,SACE,OAAOA,EAAE,gBACb,CACF,OAuII,UAACmgB,EAAAA,EAASA,CAAAA,CAAC/O,GAAIgR,EAAS/nB,MAAOkmB,IAAYgC,GAAY7jB,UAAU,kBAGvE,EAAE,EAEYM,WAAW,CAAG,gCC9UrB,IAAMmpD,GAAwD,CAAC,YACpE7J,CAAU,MACV/gD,CAAI,OACJ0T,CAAK,WACLktC,CAAS,OACTn5C,CAAK,CACLmD,SAAUkF,CAAM,iBAChBsxC,CAAe,MACfljD,EAAO,OAAO,CACd2sD,kBAAkB,2BAA2B,oBAC7C3E,EAAqB,CAAC,CACtB,GAAG/mD,EACJ,IACC,GAAM,SAAEmnD,CAAO,CAAE,CAAG3tC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,GAC5B2uC,EAAaC,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAC,SAAEjB,OAASpoD,CAAK,GACtC0M,EAAWssB,CAAAA,EAAAA,GAAAA,EAAAA,CAAeA,CAACpnB,GAC3B,CAACg7C,EAAoB,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAgBA,CAASzD,EAAY,KAC7D0D,EACJ,CAAC,CAACF,GAAuBA,EAAoBprD,MAAM,EAAIwmD,EACnD,MAAEpmD,CAAI,CAAEmrD,UAAWC,CAA+B,CAAE,CFTnDhhD,CAAAA,CEULihD,CFVKjhD,EAAAA,CAAAA,CAAQA,CAA2D,CACxEC,SAAU,CAAC07C,OAPbzxB,EASA,GEQMg3B,EAAkBtrD,EFjBsC,CEiBhCuK,CFhB9BxL,GEewCssD,IFZvC,QEa6C,CAAC,EAAE,EAAE7gD,QAAQkoB,UACrD64B,EACJH,GACA,CAAC,CAACE,GAAiB1rD,QACnB0rD,EAAgB1uD,QAAQ,CAACkO,GAErB,SAAEqZ,CAAO,CAAEq+B,aAAW,QAAEpiD,CAAM,CAAE,CAAG6hD,EAAsB,CAC7Dh5C,UAAWiiD,GAA4BE,EACvClV,GAF4D+L,OAEjDmE,EACXlE,eAAgB,YACdjB,EACAC,IAAK6J,EACL1lC,MAAO2lC,OACP9qD,kBACAohD,QACA1tC,EACA9I,SAAUygD,EAAsBzgD,EAAW,eAC3Cg2C,CACF,CACF,GAEA,MACE,UAACmF,EAAaA,CACZhF,UADYgF,CACAhF,EACZ7iD,KAAMA,EACNokD,YAAaA,EACbr+B,QAASA,EACT/jB,OAAQA,EACRuH,MAAOA,EACPmD,SAAUA,EACVs7C,mBAAoBA,EACpBtF,UAAWA,EACV,GAAGzhD,CAAI,EAGd,EAAE,GAEOsC,WAAW,CAAG,WE9EhB,IAAM6pD,GAAiB,yCAAyC,GAC7B,2BCoC7BC,GAAgB,CAC3BC,oBAAqB,SACrBC,KAAM,QACNC,OAAQ,SACRC,IAAK,QACLC,WAAY,OACd,EAAW,GAEkB,CAC3B9rD,EACA+rD,KAEA,GAAIvM,EAAmBx/C,GAAM69C,aAAP2B,EAAwBH,EAAoBr/C,EAAK8F,OAAO,EAAG,CAC/E,GAAsB,EADyCu5C,QAC/B,CAA5B0M,EACF,MAAO,YACF,GAAsB,eAAe,CAAjCA,EACT,MAAO,uBAEX,MAAO,GAAIjmB,EAAS9lC,EAAK8F,IAANggC,GAAa,GAAK2Z,EAAqBz/C,GAAM69C,cAAe,CAC7E,GAAsB,UAAU,CAA5BkO,EACF,MAAO,UACF,GAAIjmB,EAAS9lC,EAAK8F,IAANggC,GAAa,GAAuB,eAAe,CAAjCimB,EACnC,MAAO,qBAEX,MAAO,GAAsB,UAAU,CAA5BA,EACT,MAAO,cACF,GAAsB,mBAAmB,CAArCA,EACT,MAAO,eAET,MAAO,aACT,EA0BaC,GAAiE,CAC5E,oBACA,sBACA,YACA,MACA,UACA,kBACA,eACA,iBACA,eACA,UACA,uBACA,SACA,YACA,YACA,qBACA,SACA,WACA,qBACA,QACD,CAAC,SAEcC,GACdC,CAAkB,EAElB,OAAO9sC,CAAQ4sC,GAA0B1tD,IAAI,CAAC,GAAS4tD,IAAe9iD,EACxE,CAEA,IAAM+iD,GAAc,GACC,MAAZ7O,GAAoB8O,MAAM9O,GAAY,KAAOA,EAGzC+O,GAAsB,MAAO,wBACxCC,CAAsB,UACtBzW,CAAQ,yBACR0W,CAAuB,CACvBv8C,QAAM,eACN+7C,CAAa,6BACbS,GAA8B,CAAK,aACnChJ,CAAW,QACXiJ,CAAM,CAUP,IACC,IAAMC,EAAQJ,GAAwBI,MAgBtC,GAV8BC,CAU1BC,EAVkD,CACpD5sD,KAAM61C,EACNhqC,OAAQkgD,EACRc,IAOyB,eAPLL,EACpBhJ,aACF,GAME,OAAO,MAAMsJ,GAAkC,UAC7CjX,EACA/qC,SAAUkF,EACVs8C,qCACA9I,SACAiJ,CACF,GAEF,GACoB,WAAlBV,GACkB,gBAAlBA,GACkB,oBAAlBA,EACA,CACA,IAAMgB,EAAiBT,GAAwB39C,UAC/C,MAAOq+C,CAAAA,EAAAA,EAAAA,EAAAA,CAAgBA,CAAC,CACtBr+C,UAAWo+C,GAAmBlX,EAASlnC,SAAS,CAChDqB,OAAQA,EACR5N,KAAM6qD,GAAcpX,EAAUkW,GAC9BmB,UAAU,EACVC,UAAW,CACTC,kBAAmBd,GAAwBc,kBAC3C38C,QAAS67C,GAAwB77C,QACjCid,MAAO,CACLvpB,YAAa0xC,GAAUnoB,OAAOvpB,YAC9Bi5C,cAAevH,GAAUnoB,OAAO0vB,cAChCiQ,cAAexX,GAAUnoB,OAAO9L,SAClC,EACA0rC,gBAAiBhB,GAAwBgB,gBACzC9P,QAAS3H,GAAU2H,QACnBC,MAAO5H,GAAU4H,MACjB8P,UAAW1X,GAAUgI,cAAca,UAAY4N,GAAwBiB,UAAY,KACnFhQ,aAAc1H,GAAUsH,eACxBqQ,oBAAqBlB,GAAwBkB,oBAC7CC,aAAcnB,GAAwBmB,aACtCC,eAAgBpB,GAAwBoB,eACxCC,aAAcrB,GAAwBqB,aACtCC,QAAStB,GAAwBsB,QACjCC,qBAAsBvB,GAAwBuB,qBAC9CC,OAAQxB,GAAwBwB,OAEhCxQ,SACoB,oBAAlByO,GAAwClW,GAAUyH,UAAYzH,GAAUyH,SAAW,GAC/EzH,GAAUyH,SACVzH,GAAU6H,OAAO99C,OACvBmuD,MAAO,CACLC,KAAMzB,OAA0BnlD,EAAYyuC,GAAUgI,cAAcE,SACpEkQ,iBAAkBpY,GAAUgI,cAAcG,cAC1CC,aAAcpI,GAAUgI,cAAcI,aACtCC,qBAAsBrI,GAAUgI,cAAcK,qBAC9CgQ,OAAQ5B,GAAwB4B,OAChCC,WAAYtY,GAAUgI,cAAcM,yBACpCC,UAAWvI,GAAUgI,cAAcO,UACnCC,QAASxI,GAAUgI,cAAcmB,WAAanJ,GAAUgI,cAAcQ,SAAStqC,GAAK,KACpFuqC,aAAczI,GAAUgI,cAAcS,aACtCC,aAAc1I,GAAUgI,cAAcU,aACtCC,IAAK3I,GAAUgI,cAAcoB,OAASpJ,GAAUgI,cAAcW,KAAKA,IAAM,KACzEC,UAAW5I,GAAUgI,cAAcY,UACnCE,mBAAoB2N,GAAwB3N,mBAC5CyP,OAAQvY,GAAUgI,cAAcgB,WAChCC,QAASjJ,GAAUgI,cAAciB,QACjCuP,aAAcxY,GAAUgI,cAAcsB,gBACtCmP,QAASzY,GAAUgI,cAAcC,QACjCyQ,UAAWjC,GAAwBkC,UAAU1xD,KAAK,KAElD2xD,UACE/B,GAAO9vD,SAAS6uD,GAAcK,UAAU,GACxCjW,GAAUgI,cAAca,WACxB4N,GAAwB5N,SAC5B,EACAhB,MAAO7H,GAAU6H,MACjBE,aAAc/H,GAAU+H,aACxB8Q,kBAAmBpC,GAAwBqC,oBAAoBlyD,MAAM,KACrEmyD,IAAKtC,GAAwBsC,GAC/B,CACF,EACF,CAIA,MAAOC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,CACpB7+C,OAAQA,EACRylC,KAAMI,GAAUnoB,OAAO9L,UAAY,gBAAkB,QACrDsrC,UAAU,EACVC,UAAW,CACT2B,aAAc,CACZxB,gBAAiBhB,GAAwBgB,gBACzC3O,mBAAoB2N,GAAwB3N,mBAC5C4P,UAAWjC,GAAwBkC,UAAU1xD,KAAK,KAClD4xD,kBAAmBpC,GAAwBqC,mBAC3CI,QAASzC,GAAwBqC,kBACnC,EACAvB,kBAAmBd,GAAwBc,kBAC3C/5B,QAASwiB,EAAS4H,KAAK,EAAI,GAC3B/vB,MAAO,CACLvpB,YAAa0xC,GAAUnoB,OAAOvpB,YAC9Bi5C,cAAevH,GAAUnoB,OAAO0vB,cAChCiQ,cAAexX,GAAUnoB,OAAO9L,SAClC,EACAmsC,MAAO,CACLjQ,QAASjI,GAAUgI,cAAcC,QACjCC,SAAUwO,OAA0BnlD,EAAYyuC,GAAUgI,cAAcE,SACxEC,cAAenI,GAAUgI,cAAcG,cACvCC,aAAcpI,GAAUgI,cAAcI,aACtCC,qBAAsBrI,GAAUgI,cAAcK,qBAC9CgQ,OAAQ5B,GAAwB4B,OAChCc,eAAgBnZ,GAAUgI,cAAcM,yBACxCC,UAAWvI,GAAUgI,cAAcO,UACnCC,QAASxI,GAAUgI,cAAcQ,SAAStqC,GAC1CuqC,aAAczI,GAAUgI,cAAcS,aACtCC,aAAc1I,GAAUgI,cAAcU,aACtCC,IAAK3I,GAAUgI,cAAcW,KAAKA,IAClCyQ,cAAepZ,GAAUgI,cAAcY,UACvCC,UAAW7I,GAAUgI,cAAca,UACnCG,WAAYhJ,GAAUgI,cAAcgB,WACpCC,QAASjJ,GAAUgI,cAAciB,QACjCoQ,YAAarZ,GAAUgI,cAAcsB,gBACrCJ,cAAelJ,GAAUgI,cAAckB,aACzC,EACArB,MAAO7H,GAAU6H,MACjBJ,SAAU6O,GAAYtW,EAASyH,QAAQ,EACvCC,aAAc1H,GAAU0H,YAC1B,CACF,EACF,EAAE,GAE4C,IAC5C,IAAM4R,EAAgCC,IAAM,CAAC,EAAGlS,EAAqB9qC,GA4BrE,GA5B2Cg9C,IAEvCD,GAAezhC,IAFgDwvB,GAEzC/4C,aAAa,CACrCgrD,EAAczhC,KAAK,CAACvpB,WAAW,CAAGgmB,CAAAA,EAAAA,EAAAA,CAAAA,CAAUA,CAACglC,EAAczhC,KAAK,CAACvpB,YAAW,EAE1EgrD,GAAezhC,OAAO0vB,eAAe,CACvC+R,EAAczhC,KAAK,CAAC0vB,aAAa,CAAGjzB,CAAAA,EAAAA,EAAAA,CAAAA,CAAUA,CAACglC,EAAczhC,KAAK,CAAC0vB,aAAa,GAI7EtX,EAASqpB,GAAerpD,GAAhBggC,OAA0B,CACrCqpB,EAAc,WAAD,CAAgB,CAAC,YAAe,EAAG,GAI7CnpB,EAAQmpB,GAAerpD,EAAhBkgC,QAA0B,CAChCC,EAAakpB,GAAerpD,OAAhBmgC,EACdkpB,CADwC,CAC1B,WAAD,CAAgB,CAAC,YAAe,EAAG,EACvC/P,EAAmB+P,GAAerpD,UAAU,EACvC,CADas5C,UACd,CAAgB,CAAC,YAAe,EAAG,EAChD+P,EAAc,WAAD,CAAgB,CAAC,YAAe,EAAG,IAEhDA,EAAc,WAAD,CAAgB,CAAC,YAAe,EAAG,EAChDA,EAAc,WAAD,CAAgB,CAAC,YAAe,EAAG,EAChDA,EAAc,WAAD,CAAgB,CAAC,oBAAuB,CAAG,KAIrDA,CACT,EAAE,GAEqC,CAAC,MACtCnvD,CAAI,CACJ6L,QAAM,oBACNghD,CAAkB,aAClBrJ,CAAW,CAMZ,IAcC,IAAM6L,EAAa,CAAErvD,CAAAA,GAAM0tB,OAAOvpB,aAAenE,GAAM0tB,OAAO0vB,aAAAA,CAAY,CAC1E,OACE,GAIA,CAAC,CAACoG,GACF,CAAC,CAACA,GAAa9X,SAHf,OAG+B4jB,GALC,QAMpB,CAAXzjD,UAAAA,GAAkC,gBAAXA,CAAW,CAAY,EAC/C0jD,CAtB4C1R,KAExC,GAAwE,IAAvDn+C,OAAOkT,MAAM,CAACirC,GAAcnhD,MAAM,CAAC0iB,SAASxf,MAAM,EAAW,CAACi+C,KAIjFA,MACAn+C,GAJA,IAIOkT,GAJA,GAIM,CAACirC,GAAcnhD,MAAM,CAAC0iB,SAASxf,MAAM,EAAG,KACrDi+C,EAAaa,SAAS,EAEtB,GAYyCb,IAZlC,YAcRwR,CADD,EAEG,CAAC,CAACrvD,GAAM0tB,OAAOvpB,aACdnE,GAAM0tB,OAAO9L,WAC6C,IAA1D4tC,CAAAA,EAAAA,EAAAA,CAAAA,CAAgBA,CAACxvD,GAAM0tB,OAAOvpB,YAAa,IAAIyB,KAAW,CAAE,EAElE,GAC+C,MAAO,UACtDiwC,CAAQ,UACR/qC,CAAQ,wBACRwhD,CAAsB,aACtB9I,CAAW,QACXiJ,CAAM,CAOP,IACC,IAAIgD,GAA+B,EACnC,GAAI,CACF,GAAIhD,EAAQ,CACV,GAAM,gBAAEpuD,CAAc,CAAE,CAAG,MAAMqiD,EAA8B+L,EAAQ,CACrE1iD,MAAOyhD,EACT,GACAiE,EACEpxD,EAAeC,IAAI,CAHEktD,CAGA,GAJuC9K,GAIrCtiD,CAAI,CAAE,GAAKotD,KAAmBptD,IAAOI,KAAZgtD,IAAuB,EAC3E,CACF,CAAE,MAAOxuD,EAAO,CAEd66B,QAAQ76B,KAAK,CAACA,EAChB,CAEA,IAAM0yD,EAAsB,CAC1BlS,QAASgG,GAAa9X,SAASC,OAAO53B,GACtChT,SAAUyiD,GAAa9X,SAASC,OAAOgkB,UAAU5uD,SACjD6uD,OAAQpM,GAAa9X,SAASC,OAAOgkB,UAAUC,OAC/CC,YAAarM,GAAa9X,SAASC,OAAOzrC,KAC1Cu9C,MAAO5H,GAAU4H,KACnB,EACM0P,EAA+B,CACnCG,gBAAiBhB,GAAwBgB,gBACzCF,kBAAmBd,GAAwBc,kBAC3CU,OAAQxB,GAAwBwB,OAChCL,aAAcnB,GAAwBmB,aACtCE,aAAcrB,GAAwBqB,aACtCC,QAAStB,GAAwBsB,QACjCC,qBAAsBvB,GAAwBuB,qBAC9CnP,UAAW7I,GAAUgI,cAAca,WAAa4N,GAAwB5N,UACxE4Q,SAAU9L,GAAa9X,SAASC,OAAO2jB,SACvCV,IAAKtC,GAAwBsC,IAC7Bn+C,QAAS67C,GAAwB77C,QACjC,GAAIg/C,GAAgCC,CAAmB,EAEnD3C,EAAiBT,GAAwB39C,UAO/C,MAN0BmhD,CAAAA,EAAAA,EAAAA,EAAAA,CAAkBA,CAAC,CAC3C9/C,OAAQlF,EACR6D,UAAWo+C,GAAmBlX,GAAUlnC,oBACxCw+C,EACAD,UAAU,CACZ,EAEF,EAAE,GAEyC,CACzCzjD,EAAAA,EAAkCA,CAACG,cAAc,CACjDm8C,EAAuCn8C,cAAc,CACrDwgC,EAAuBxgC,cAAc,CACtC,CAAC,GAFsCm8C,CAChB3b,EAK6CrrC,EAAU,CAAC,CAAC,IAC/E,GAAM,CAAEgxD,2BAA2B,EAAK,CAAE,CAAGhxD,EACvCixD,EAAyBtlD,CAAAA,EAAAA,EAAAA,EAAAA,CAAyBA,CAACC,GAAaqrC,KAAK,CAAElqC,IAE3E+rB,QAAQ76B,KAAK,CAAC,uCAAwC8O,EACxD,GAYA,OAVIikD,GLxYGplD,EAAYC,UAAU,CAA4C,CACvEP,SAAU,CAAC07C,OAJbzxB,EAI+D,GKwYF0hB,IL5YC,CK4YI,CAAC,GAApBia,CAC3Cp4B,GL5YkE,KK4Y1D76B,KAAK,CAAC,2CAA4C8O,EAC5D,EADgE,CAGlE40C,EAA8B/1C,EAAa,CAAEZ,MAAO,CAACmmD,GAA2B,GAAIla,KAAK,CAAC,IAExFne,CAF2B6oB,GAHsE,IAKzF1jD,EAFqEkzD,GAEhE,CAAC,yDAA0DpkD,EAC1E,GAEOkkD,CACT,EAAE,eC9aF,IAAMG,GAAmB,CAACC,EAAkBztD,IAC1CytD,MAAiBztD,EAAE,oBAAsBytD,EAE9BC,GAAyB,CAAC,aACrClsD,CAAW,eACXi5C,CAAa,UACbtyC,CAAQ,eACRwlD,CAAa,OACb5S,CAAK,CAQN,IACC,GAAM,GAAE/6C,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,aACvB,oBAAE2tD,CAAkB,CAAEC,uBAAqB,cAAEC,CAAY,CAAE,CAAGC,SA2FtDA,CACd5lD,UAAQ,aACR3G,CAAW,eACXi5C,CAAa,CAKd,EACC,IAAMptC,EAAS2gD,SAwDDA,UAAY7lD,CAAQ,CAAwB,EAC1D,OAAO,GAzDiB6lD,CAyDb55C,KAAK65C,GADOD,GACD,CAAC7lD,EAAU,CAC/B,GAAG23B,EAAc,CACjB,GAAGouB,EAAa,CAAC/lD,EAAS,EAE9B,EA7D2B,UAAEA,CAAS,GAC9B,GAAEnI,CAAC,CAAEmuD,MAAOC,CAAS,CAAE,CAAGnuD,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,aAE/C,MAAO,CACL2tD,mBACE,CAAC,EAAkBnT,GAAmBptC,EAClCghD,GAAY7sD,EAAai5C,EADZ,CAAC,EAEd,EAFgC,CAAC,sBAIrC,CAAC,EAAkBA,GAAmBptC,EAClCrN,EAAE,KADW,CAAC,IAAkB,CAAC,cACL,CAC1BwB,YAAaA,EAAYinB,kBAAkB,CAACpb,EAAQ,CAClD0c,UAAW,MACb,GACA0wB,cAAeA,EAAchyB,kBAAkB,CAACpb,EAAQ,CAAE0c,UAAW,MAAO,EAC9E,GACA,GACN+jC,aACItsD,CAAD,EAAkBi5C,EAAgBoS,CAAAA,EAAAA,EAAAA,CAAAA,CAAgBA,CAACpS,EAAnC,CAAC,EAAgE,YACpF2T,CACF,CACF,EAzH4F,aACxF5sD,gBACAi5C,WACAtyC,CACF,GACMwyC,EAAWI,EAAM99C,MAAM,CACvB,WAAEqxD,CAAS,aAAEC,CAAW,cAAEC,CAAY,CAAE,CAAGzT,EAAM7qC,MAAM,CAC3D,CAACqjB,EAAKk7B,KACJl7B,EAAI+6B,SAAS,CAAG/6B,EAAI+6B,SAAS,CAAGG,EAAKzT,MAAM,CAC3CznB,EAAIg7B,WAAW,CAAGh7B,EAAIg7B,WAAW,CAAGE,EAAK9qD,QAAQ,CAAC1G,MAAM,CACxDs2B,EAAIi7B,YAAY,CAAG,IACdj7B,EAAIi7B,YAAY,IAChBC,EAAK9qD,QAAQ,CAAC5J,MAAM,CAAC,GAAwB,UAAjB,OAAO20D,EAAEC,GAAG,EAAenoD,GAAG,CAAC,GAAOkoD,EAAEC,GAAG,EAC3E,CACMp7B,GAET,CAAE+6B,UAAW,EAAGC,YAAa,EAAGC,aAAc,EAAE,GAE5CI,EAAsBJ,GAAchoD,IAAKinD,GAAaD,GAAiBC,EAAUztD,IACjF6uD,EAAY7uD,EAAE,kBAAmB,CAAEiR,MAAO0pC,CAAS,GACnDmU,EAAa9uD,EAAE,kBAAmB,CAAEiR,MAAOq9C,GAAa7pD,MAAU,GAClEsqD,EAAU,CAACR,IAAe,EAAK,EAC/BS,EAAWD,EAAU/uD,EAAE,iBAAkB,CAAEiR,MAAOs9C,QAAe9pD,CAAU,GAAK,GAElFwqD,EAA8B,KAElC,GAAItB,GAAiBoB,GAAWH,GAAqB3xD,OAAQ,CAC3D,IAAMiyD,EAAeN,GAAqBhV,MAAM,EAAG,CAAC,GAAGz/C,KAAK,MAE5D80D,EAAejvD,EAAE,wBAAyB,CACxCiR,MAAO29C,EAAoB3xD,MAAM,CACjCiyD,aAAcN,EAAoB3xD,MAAM,CAAG,EAAIiyD,EAAeA,EAAe,IAC7EC,WAAYP,GAAqBhV,MAAM,CAAC,EAAE,CAAC,EAAE,CAC7CwV,OAAQR,CAAmB,CAAC,EAAE,EAElC,CAEA,IAAMS,EAAsBzB,EAAqB5tD,EAAE,qBAAuBA,EAAE,sBAE5E,MAAO,CACL+qB,MAAO6iC,EACP0B,SAAUzB,eACVoB,EACAM,UAAWvvD,EAAEgvD,EAAW,8BAAgC,sBAAuB,CAC7EhU,OAAQ8T,EACRU,KAAMR,EACNjU,MAAO8T,CACT,GACAf,aACmB,IAAjBA,EACIuB,EACArvD,EAAE,+BAAgC,CAAEiR,MAAO68C,CAAa,EAChE,CACF,EAAE,GAEyB,CAACtsD,EAAmBi5C,EAAqBptC,KAClE,IAAMoiD,EAAWC,CAAAA,EAAAA,GAAAA,CAAAA,CAAUA,CAACluD,EAAai5C,GACnCkV,EAAQnpC,GAAQnZ,GAKhBjR,EAAsC,CAC1C6qB,QAJc,QAKdnC,MANY8qC,GAAUviD,GAAW,OAAoB,QAOrDqX,IALU,SAMZ,EACMmrC,EAA8C,CAAE,GAAGzzD,CAAO,CAAEqqB,KANrD,SAM0D,EAEjEqpC,EAAoBtuD,EAAYinB,kBAAkB,CACtDpb,EACA,CAACoiD,GAAYE,EAAQE,EAAkBzzD,GAEnC2zD,EAAsBtV,EAAchyB,kBAAkB,CAC1Dpb,EACAoiD,GAAYE,EAAQvzD,EAAUyzD,GAGhC,MAAO,GAAGC,EAAkB,QAAQ,EAAEC,EAAAA,CAAqB,EA6ChDvpC,GAAU,GAEd,CAAC,KAAM,KAAM,UAAW,UAAU,CAACvsB,QAAQ,CADjC+1D,GAAiB3iD,IAIvBuiD,GAAY,GAEhB,CAAC,KAAK,CAAC31D,QAAQ,CAACkO,GADWkF,IAIpC,SAAS2iD,GAAiB3iD,CAA4B,MAMpCA,EALhB,IAKwD,EALjD,IACIA,EAKNA,GAAwB4iD,UALP5iD,GAAQ4iD,QAAAA,EAAW5iD,EAAO4iD,QAAQ,CAAI5iD,CAAAA,CAAgB,CAC1EhS,WAAW,EACf,CASA,IAAMykC,GAA6C,CACjDowB,SAAU,SACZ,EAEMhC,GAA4D,CAChEx/B,GAAI,CACFyhC,gBAAiB,MACnB,CACF,ECjKO,SAASC,GAAgB,aAC9B5uD,CAAW,WACX9C,CAAS,eACT+7C,CAAa,eACb4V,CAAa,YACbC,CAAU,CACV16C,UAAW26C,CAAa,UACxBpoD,CAAQ,UACR/J,CAAQ,aACRoyD,CAAW,OACXzV,CAAK,eACL4S,CAAa,aACb8C,CAAW,iBACXC,CAAe,CACM,EACrB,IAAMC,EAAc5kC,CAAAA,EAAAA,EAAAA,EAAAA,CAAaA,CAAC,uBAE5B,GAAE/rB,CAAC,OAAEmuD,CAAK,CAAE,CAAGluD,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,iBAC9B,OAAE8qB,CAAK,UAAEukC,CAAQ,cAAEL,CAAY,WAAEM,CAAS,cAAEzB,CAAY,CAAE,CAAGJ,GAAuB,aACxFlsD,MADuFksD,UAEvFjT,WACAtyC,QACA4yC,gBACA4S,CACF,GACMiD,EAAuC5wD,EAAX,WAAhBywD,EAA6B,sBAA2B,GAAFzwD,kBAClE6wD,EAAsC7wD,EAA3BywD,aAA6B,aAAkB,GAAFzwD,kBACxD8wD,EAAmB9wD,EAAE,YACrB+wD,EACY,WAAhBN,EACIzwD,EAAE,oBAAqB,CAAE5B,WAAU2sB,MAAOukC,YAAUC,CAAU,GAC9DvvD,EAAE,kBAAmB,CAAE5B,SAAUA,QAAYqG,EAAWsmB,MAAOukC,YAAUC,CAAU,GAEnF35C,EAAY26C,GAAiB,CAACpC,EAE9B6C,EACJ,UAACpwD,SAAAA,CACC/B,IAAKwxD,EACL3xD,UAAU,mBACVnB,KAAK,SACLmlC,gBAAe4tB,EACfxrD,aAAYisD,EACZjwD,QAAS0vD,EACT9pD,cAAY,8BAEXmqD,IAIL,MACE,WAACpyD,MAAAA,CACCC,UAAWmC,IACT,gBADWA,wFAEXnC,GAEFgI,cAAY,2BAEZ,UAACjI,MAAAA,CAAIC,UAAU,iCACZkX,EAAY,UAACq7C,GAAAA,CAAevyD,UAAU,aAAgBkyD,IAExDh7C,EACC,UAACq7C,GAAAA,CAAevyD,UAAU,uBACxBwyD,EAEA,KADFF,EAEF,WAACvyD,MAAAA,CAAIC,UAAU,8MACZkX,EACC,UAACq7C,GAAAA,CAAevyD,UAAU,4BAE1B,WAACD,MAAAA,CAAIC,UAAU,mDACb,UAACsS,EAAAA,EAAIA,CAAAA,CAACvV,KAAK,iBAAiBk9B,QAAQ,QAAQj6B,UAAU,WACtD,UAACuC,OAAAA,CACCvC,UAAU,oCACVlC,MAAO4B,GAAY0yD,WAElB1yD,GAAY0yD,OAInB,WAACryD,MAAAA,CAAIC,UAAU,0CAA0CgI,cAAY,iCACnE,UAACsK,EAAAA,EAAIA,CAAAA,CAACvV,KAAK,WAAWk9B,QAAQ,QAAQj6B,UAAU,WAC/CkX,EACC,UAACq7C,GAAAA,CAAevyD,UAAU,aAE1B,iCACE,WAACuC,OAAAA,CAAK5B,eAAa,YAChB0rB,EACAA,EAAQ,IAAM,KACf,UAAC9pB,OAAAA,CACCvC,UAAWmC,IAAG,gBAADA,uCAAyD,CACpE,gBAAiBkqB,CACnB,GACArkB,cAAY,iCAEXqkB,EAAQ,CAAC,CAAC,EAAE+iC,EAAa,CAAC,CAAC,CAAGA,OAGnC,WAAC7sD,OAAAA,CAAKvC,UAAU,oBACb4wD,EAAS,IAAExB,WAKnB4C,EAAkB,KACjB,WAACjyD,MAAAA,CAAIC,UAAU,mDACb,UAACsS,EAAAA,EAAIA,CAAAA,CAACvV,KAAK,QAAQiD,UAAU,WAC5BkX,EACC,UAACq7C,GAAAA,CAAevyD,UAAU,aAE1B,WAACuC,OAAAA,CACCvC,UAAU,cACVlC,MAAO,GAAG+yD,EAAAA,EAAYN,GAA8B,IAAI,QAAnBA,GAEpCM,EACAN,EAAe,WAAChuD,OAAAA,CAAKvC,UAAU,0BAAgB,IAAEuwD,KAAuB,cAMlFr5C,EACC,UAACq7C,GAAAA,CAAevyD,UAAU,6BACxBiyD,EACFK,EACE,OAGV,CAEA,SAASC,GAAe,WACtBvyD,CAAS,CACT,GAAGhC,EAC6E,EAChF,MACE,UAACuE,OAAAA,CACCvC,UAAWmC,IAAG,gBAADA,oCAAsDnC,GAClE,GAAGhC,CAAI,EAGd,qDEhKO,IAAMy0D,GAAmB,CAAC,gBAC/BC,CAAc,mBACdC,CAAiB,eACjB1wD,CAAa,CAKd,IACC,GAAM,GAAEX,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,iBAE7B,MACE,WAACM,GAAAA,EAAMA,CAAAA,CACLC,OAAQ4wD,EACR1wD,KAAK,KACLD,UAAW,IAAM4wD,GAAkB,GACnC70D,MAAOwD,EAAE,yBACTW,cAAeA,YAEf,UAAClC,MAAAA,CAAIC,UAAU,4BACb,UAACD,MAAAA,UAAKuB,EAAE,+BAEV,UAACvB,MAAAA,CAAIC,UAAU,+EACb,UAACkC,SAAAA,CACClC,UAAU,yBACVoC,QAAS,IAAMuwD,GAAkB,GACjC9zD,KAAK,kBAEJyC,EAAE,gCAKb,EAAE,4BChCK,SAASsxD,KACd,GAAM,MAAEj0D,CAAI,CAAE,CrBwBPoK,CAAAA,CqBxBU+/B,CrBwBV//B,EAAAA,CAAAA,CAAQA,CAA2C,CACxDC,SAAU,CAAC+/B,EqBzB2B,CACtCrgC,EADqCogC,IAC9B,CAAC+lB,GAA2B,ErBwBU,GqBrB/C,MAAO,CACL3D,WAJkC2D,aAIThyD,CAAAA,EAAAA,GAAAA,CAAAA,CAAyBA,CAAC,CACjDC,kBAAmB6B,EACnB5B,KAAM8xD,EACR,EACF,CACF,CCmGO,IAAMgE,GAA0B,CACrC,YACA,WACA,OACA,YACA,YACA,iBACA,QACA,WACA,iBACD,CAAC,GAEiD,IAAIA,GAAyB,UAAU,CAAC,GAetB,CAAC,wBACpE5H,CAAsB,iBACtB9pD,CAAe,UACf8D,CAAQ,KACR6tD,CAAG,CACH/hD,eAAa,iBACbgiD,CAAe,CACf77C,UAAW26C,CAAa,UACxBpoD,CAAQ,SACR9L,CAAO,CACP4S,UAAQ,qBACRyiD,GAAsB,CAAK,eAC3BC,CAAa,iBACbC,GAAkB,CAAK,mBACvBC,CAAiB,gBACjBC,CAAc,eACd1I,CAAa,CACb5sD,OAAK,CACLq0B,kBAAgB,6BAChBg5B,GAA8B,CAAK,yBACnCkI,CAAuB,gCACvBC,GAAiC,CAAK,gBACtCpxC,CAAc,cACdF,CAAY,CACZ,GAAGhkB,EACJ,IACC,IAAMotD,EAASmI,CAAAA,EAAAA,GAAAA,EAAAA,CAAcA,GACvBC,EAAiBt1D,EAAAA,MAAY,CAAwB,MACrDyzD,EAAgBzzD,EAAAA,MAAY,CAA2B,MACvD,CACJ,kBACEu1D,CAAgB,gBAChBC,CAAc,uBACdC,CAAqB,mBACrBC,CAAiB,uBACjBC,CAAqB,CACtB,CACDC,EACD,CAAG51D,EAAAA,QAAc,CAAqC61D,GAAgBP,EAAev0D,OAAO,GACvF,GAAEqC,CAAC,CAAEmuD,OAAK,CAAE,CAAGluD,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,CAAC,WAAY,gBAAgB,EAC3D2V,EAAY,CAACu4C,GAASoC,EACtB,CAACD,EAAYoC,EAAc,CAAG91D,EAAAA,QAAc,CAChD,CAAC,CAACk1D,GAAgBa,mBAAqB,CAACb,GAEpC,CAACV,EAAgBC,EAAkB,CAAGz0D,EAAAA,QAAc,EAAC,GACrDg2D,EAAW,CAAC,CAACd,GAAgBc,UAAYtC,EACzCjjD,EAASzQ,EAAAA,OAAa,CAAC,IAAM63B,CAAAA,EAAAA,GAAAA,EAAAA,CAAeA,CAACtsB,GAAW,CAACA,EAAS,EAClE,oBACJ0qD,CAAkB,sBAClBC,CAAoB,yBACpBC,CAAuB,qBACvBC,CAAmB,kBACnBC,EAAgB,eAChBC,EAAa,qBACbC,EAAmB,CACpB,CH1LI,SAASC,QACd/lD,CAAM,EGyLkB+lD,QHxLxBnkD,CAAQ,eACRm6C,CAAa,CAGd,EACC,GAAM,QAAE1mD,CAAM,CAAE,CAAGmS,CAAAA,EAAAA,GAAAA,SAAAA,CAASA,GACtB,GAAE7U,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,CAAC,gBAAiB,YAAY,EAErD,CAACozD,EAAeJ,EAAiB,CAAGr2D,EAAAA,QAAc,CAG9C,MACJ,CAACs2D,EAAeI,EAAiB,CAAG12D,EAAAA,QAAc,CAAiC,MACnF,gBAAE+K,CAAc,CAAE,CAAGN,CAAAA,EAAAA,EAAAA,EAAAA,CAAqBA,CAAC,CAAEf,UAAW,CAAC,CAAC8iD,CAAc,GAGxEmK,EAAiB,KACrBN,EAAiB,KACnB,EA4BMO,EAA8B,IAClC,GAAI/5D,GAAO4T,UAAUA,EACnB,GAAI,CACF,IAAM0lB,CAFsBnqB,CAET,IAAIF,GAAAA,UAFuB,CAEZf,GAElC,OAAOorB,GAAYE,IAAI,CAAE9qB,SAAUkF,MAAQ5T,CAAI,MAAgB,CACjE,CAAE,MAAO0P,EAAG,CAEV,OADA+rB,QAAQC,IAAI,CAAC,yDAA0DhsB,IAChE,CACT,CAEJ,EAqCA,MAAO,CACL0pD,mBAhF2C,GAsCqE,IAtCvFQ,EAiFzBP,qBA5E2B,KAC3BS,GACF,EA2EER,wBA1E8B,KAC9B,IAAIt5D,EAAM45D,GAAe55D,KAAO,KAIhC,GAHsB,YAAY,CAA9By5D,IACFz5D,EAAM45D,GAAe55D,KAAKuQ,QAAQ,CAAC,CAAC,EAAEqD,EAAO,CAAC,CAAC,CAAE,CAAC,CAAC,EAAEzE,KAAwB,MAG7EyqD,GAAengB,GAHuD,CAAC,CAAC,KAItD,aAAlBggB,GACAM,EAA4B/5D,GAC5B,CACAw5D,EAAiB,CAAE/f,SAAUmgB,GAAengB,aAAUz5C,CAAI,GAC1D65D,EAAiB,YACjB,MACF,CACAD,GACEpkD,IAAW,CACTikC,SAAUmgB,EAAcngB,QAAQ,KAChCz5C,EACA4T,OAA0B,aAAlB6lD,EA7CS,KA6CyC7lD,OAC5D,GADsEzE,GAG1E,EAsDEoqD,oBAxC0B,CAACv5D,EAAqBy5C,IAE9CxwC,EAAOzI,EAKLw5D,MALa,CAAC,aAChBvgB,GAAUyH,UACkB,GAA5BnnC,CAGuC,EAFtC,IADM0/B,EAASyH,QAAQ,GACvB,EAACzH,GAAU0H,kBAAgBpnC,OAAO0/B,GAAU0H,aAAkB,GAG/D0Y,EAAiB,aACV,KAELE,EAA4B/5D,KAC9B65D,CADoC,CACnB,aACV,oBA4BTL,gBACAC,EACAC,oBAzB0B,KAC1B,OAAQD,GACN,IAAK,WACH,MAAO,CACL12D,MAAOwD,EAAE,sBACX,CACF,KAAK,WACH,MAAO,CACLxD,MAAOwD,EAAE,0DACTsK,QAAStK,EAAE,4DACXuK,mBAAoBvK,EAAE,8DACtBwK,kBAAmBxK,EAAE,2DACvB,CAIJ,CACF,CASA,CACF,EGiF2B,QAAEqN,WAAQ4B,gBAAUm6C,CAAc,GAErD,yBAAEQ,EAAuB,CAAE,CAAG0H,KAG9BoC,GAA4B92D,EAAAA,GAHe00D,IAGF,CAC7C,IAAMqC,GAA+BlkD,GACrC,CAACA,EAAc,EAGX,CAACmkD,GAAsBC,GAAwB,CACnDj3D,EAAAA,QAAc,CAAiB82D,IAC3BI,GAAehC,GAAgB5pB,OAAS0rB,GAExCtyC,GAAe,MAAOjkB,IAC1B,IAAM61C,EAAW,CACf,GAAG71C,CAAI,CACP09C,MAAO19C,EAAK09C,KAAK,CAACv0C,GAAG,CAAC,GAAW,EAC/Bw0C,EAD+B,KACvByT,EAAKzT,MAAM,CACnBr3C,SAAU8qD,EAAK9qD,QAAQ,CAAC6C,GAAG,CAAC,GACnB,EAAEmoD,IAAKn7C,OAAOi2C,KAAK,CAACiF,EAAEC,GAAG,EAAI,KAAOD,EAAEC,GAAG,CAAC,GAErD,EACF,EACAkF,GAAwB3gB,GAExB,IAAM6gB,EAAkB7gB,EAAS4H,KAAK,EAAI5H,EAAS2H,OAAO,CACpDmZ,EAAe9gB,EAASnoB,KAAK,CAAC9L,SAAS,EAAI4qC,EAI7ChJ,EAA4B,CAAC,EAEjC,GAJEkT,CAIEE,EAJkBD,IAAgBhC,CAAAA,CAA6B,CAKjE,GAAI,MALgBgC,CAalB,GAPAnT,EAFwB,MAEJqT,CtBlI1BviC,EsBkIyD,CACjDsX,MtBnI8B,EACtC7sC,GsBkI2B0+C,ItBlIoB,EsBmIvCD,CAFwCqZ,OAE/BhhB,GAAU2H,QACnBI,aAAc/H,GAAU+H,aACxB9yC,SAAUkF,GAAU,IACtB,EAL2Cy8C,EtB/H9B7hD,UAAU,CAAqB,CAChDP,SAAU,CAACohC,EAAiBnX,EAE9B,IsBmIU,CAACkvB,GAAa9X,SAAWipB,EAAgC,OAAOX,EAAkB,GACxF,CAAE,MAAOh3D,EAAO,CAGd,IAFIA,aAAiBC,OAA0B,UAAjB,OAAOD,CAAU,GAC7CE,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAC,gBAAiBF,EAAO,gCAC/B23D,EACF,OAAOX,GAAkB,EAE7B,CAEF,GAAIpiD,EAAU,CACZ,IAAMxV,EAAM2vD,EACR,GAPkC,GAO5BM,GAAoB,gBAADA,QACvBC,WACAzW,SACA7lC,0BACAu8C,iBACAR,8BACAS,cACAhJ,SACAiJ,CACF,GACA,KACJ,GAAIkJ,EAAoBv5D,EAAKy5C,GAAW,CACtC+f,GAAiB,UAAE/f,MAAUz5C,CAAI,GACjC,MACF,CACAwV,EAAS,CAAEikC,eAAUz5C,SAAK4T,CAAO,EACnC,CACF,EAOA,SAAS8mD,KACPzB,GAAc,GACdr2D,MACAg0D,GAAe1yD,SAASsf,OAC1B,CAVArgB,EAAAA,SAAe,CAAC,KACV,CAACgZ,GAAag9C,GAChBJ,EAAgBC,GAAgBP,EADN,OAC4B,EAE1D,EAAG,CAACU,EAAUh9C,EAAU,EAOxB,IAAMw+C,GACJ,UAACC,EAAAA,EAAaA,CAAAA,UACX,CAAC,WAAEtzC,CAAS,UAAE9K,CAAQ,CAAE,IACvB,GAAM,SAAEq+C,CAAO,SAAEC,CAAO,CAAE,CAAGxzC,EACvByzC,EACJ5C,IAAoBE,GAAkBJ,EAAsB4C,GAAWC,EAAUD,CAAAA,CAAM,CAEzF,EAFsBxC,IAGpB,WAACrzD,MAAAA,WACC,UAAC0yD,GAAgBA,CACfC,YADeD,GACCC,EAChBC,kBAAmBA,IAEpBS,EACC,UAACrzD,MAAAA,CACCC,UAAWmC,IAAGixD,EAAe2C,cAAhB5zD,SAAuC,CAAE,CACpD,8BAA+B+xD,CACjC,YAEA,UAACxC,GAAeA,CACd1xD,UAAWozD,CADG1B,CACYsE,gBAAgB,EAAI,YAC9ClzD,YAAasyD,GAAa/oC,KAAK,CAACvpB,WAAW,CAC3Ci5C,cAAeqZ,GAAa/oC,KAAK,CAAC0vB,aAAa,CAC/C7kC,UAAWA,EACXzN,SAAUA,EACV/J,SAAU01D,GAAahZ,KAAK,CAC5B0V,YAAa,KACXsB,GAAgBtB,gBACZsB,GAAgBc,gBAAanuD,GAC/BiuD,GAAc,EAElB,EACA3X,CAJ8C,KAIvC+Y,GAAa/Y,KAAK,CACzB4S,cAAemE,EAAenE,aAAa,CAC3C8C,YAAaqB,EAAev0D,IAAI,CAChCmzD,gBAAiBoB,EAAepB,eAAe,CAC/CJ,WAAYsC,EACZvC,cAAeA,MAGjB,KACH,CAACz6C,GAAag9C,EACb,WAACn0D,MAAAA,CAAIC,UAAWmC,IAAG,CAAE,OAAQixD,CAAe,OAA1BjxD,MACf,CAAC,CAACrE,GACD,UAAC2kB,KAAAA,CAAGziB,UAAU,uDAA+ClC,IAE/D,WAACiC,MAAAA,CACCI,IAAKqzD,EACLxzD,UACEmyB,GACAhwB,OAAM0wD,GAAyB,CAC7B,SADA1wD,QAEE,CAACuxD,GACD,CAACC,GACD,CAACC,GACD,CAACC,CACL,aAGDT,IAAmBA,EAAe6C,YAAhB,EAA8B,EAAKxC,EAAD,KACnD,UAAC5rC,SAAAA,CACC7nB,UAAU,uCACV0S,GAAG,mBACH1K,cAAY,mBACZ6Q,SAAU,CAAC,WAEc,WAAxBu6C,EAAev0D,IAAI,CAChByC,EAAE,4BACFA,EAAE,qCAGT2D,EACD,UAAClF,MAAAA,CACCmG,mBAAiB,+BACjBlG,UAAU,2CAEV,WAACkC,SAAAA,CACCgE,mBAAiB,mBACjB8B,cAAY,uBACZkE,SAAU,CAAC4pD,EACV,GAAI7C,GAAiB,CAAE7wD,QAAS,IAAM6wD,EAAc5wC,EAAW,CAAC,CACjEriB,UACEmB,GACA,yFAEFtC,KAAK,mBAEJi0D,GAAOxxD,EAAE,2BACT6xD,EACC,UAAC5wD,OAAAA,CAAKvC,UAAU,mBAAWsB,EAAE,qBAC3B,UAGP+xD,EACAD,EACC,UAAC/sD,GAAAA,CAAYA,CAAAA,CACXjE,QAASqzD,GACTz1D,UAAU,iEACVgC,KAAK,KACLsE,MAAOhF,EAAE,yBAET,WAGN,KACH6yD,EACC,UAAC5oD,EAAAA,EAASA,CAAAA,CACRC,WAAW,EACXG,iBAAkB8oD,KAClB92D,QAAS,KACPy2D,IACsB,aAAlBI,IAA8Bj9C,EAAS,yBAAyB,EACtE,EACAnM,WAAYipD,IAEZ,OAGV,WAIJ,EAEI,UAACsB,EAAAA,EAAaA,CAAAA,UACX,CAAC,cAAExjD,CAAY,CAAE,GAChB,UAACuQ,OAAAA,CAAKP,OAAO,OAAQ,GAAGnkB,CAAI,CAAE2kB,UAAU,IAACpS,SAAU4B,EAAayQ,aAC7D8yC,OAQT,UAAC5zC,EAAAA,EAAIA,CAAAA,CACHvR,SAAUqS,GACVZ,aAAc,CACZ,GAAGA,CAAY,CACfjR,cAAeikD,EACjB,EACC,GAAGh3D,CAAI,CACRkkB,eAAgBA,WAEfwzC,IAGP,EAAE,SAEO3B,GAAgBmC,CAAyC,EAChE,MAAO,CACLzC,iBAAkByC,GAAoBpqC,cACpC,iDAEF4nC,eAAgBwC,GAAoBpqC,cAAc,4CAClD6nC,sBAAuBuC,GAAoBpqC,cACzC,4CAEF8nC,kBAAmBsC,GAAoBpqC,cAAc,uBACrD+nC,sBAAuBqC,GAAoBpqC,cAAc,0BAC3D,CACF,4BItaO,SAASqqC,GAAiB,UAAElxD,CAAQ,CAAE,GAAGmxD,EAAmC,EACjF,IAAMpB,EAA4B3mC,CAAAA,EAAAA,EAAAA,OAAAA,CAAOA,CACvC,IAAM4mC,GAA+BmB,EAAUrlD,aAAa,EAC5D,CAACqlD,EAAUrlD,OADyBkkD,MACZ,CAAC,EAErBoB,EHpBR,SAASC,CAAsC,EAC7C,IGmB8CA,EHnBlChzD,CAAAA,EAAAA,EAAAA,MAAAA,CAAMA,CAAIyJ,GAMtB,MAJA7I,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACR/D,EAAIlB,OAAO,CAAG8N,CAChB,EAAG,CAACA,EAAM,EAEH5M,EAAIlB,OAAO,EGa6B+1D,GACzCnkD,EAAUC,CAAAA,EAAAA,EAAAA,EAAAA,CAAOA,CAAiB,CACtCE,KAAM,YACNiR,aAAc,MACd,GAAGm0C,CAAS,CACZrlD,cAAeikD,CACjB,GACMttD,EAAQmJ,EAAQnJ,KAAK,CACrB,eAAEqJ,CAAa,0BAAEwlD,CAAwB,CAAE,CAAGC,KAiBpD,MAfAtyD,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACHooB,KAAQvb,EAAeikD,IAC1BuB,EAAyBvB,GAEtB1oC,CAHOA,IAGC+pC,EAAuBrB,IAClCttD,EAAMstD,EAEV,EAAG,CACDjkD,CAPwD,CAQxDikD,EACAttD,EACA2uD,EACAE,EACD,EAEM,KAX2D,GAW3D,EAACnlD,EAAAA,EAAYA,CAAAA,CAAE,GAAGP,CAAO,UAAG5L,GACrC,CAEO,SAASuxD,KACd,IAAMltD,EAAciqD,CAAAA,EAAAA,GAAAA,EAAAA,CAAcA,GAC5BvqD,EAAW,CAAC,2BAA2B,CACvC,CAAErK,KAAMoS,CAAa,CAAE,CAAGhI,CAAAA,EAAAA,EAAAA,CAAAA,CAAQA,CAAiB,UAAEC,EAAU7L,SAAS,CAAM,GAIpF,MAAO,eACL4T,EACAwlD,yBALgCxlD,IAChCzH,EAAYmtD,YAAY,CAACztD,EAAU+H,EACrC,CAIA,CACF,CCtDO,IAAM2lD,GAET,CAAC,OAAEpwD,CAAK,UAAEmD,CAAQ,aAAEktD,CAAW,CAAE,GAAG34D,EAAM,IAC5C,GAAM,CAACsD,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,gBAC3B,MACE,UAACxB,MAAAA,CAAIC,UAAU,yCACb,UAACypD,GAAQA,CACPnjD,IADOmjD,EACAnjD,GAAShF,EAAE,SAClBmI,SAAUA,EACVktD,YAAaA,GAAer1D,EAAE,eAC9BvE,KAAK,QACJ,GAAGiB,CAAI,IAIhB,EAAE,4BC0GF,OAjHwF,CAAC,WACvFgC,CAAS,UACTiF,CAAQ,CA+GK2xD,IA9Gb5wC,CAAG,gBA8G+B4wC,EAAC,KA7GnCC,EAAwB,cAAc,UACtCptD,CAAQ,eACRqtD,CAAa,CACd,IACC,IAAMnoD,EAAS2gD,CAAAA,EAAAA,GAAAA,EAAAA,CAASA,CAAC,UAAE7lD,CAAS,GAC9BwnD,EAAQnpC,CAAAA,EAAAA,GAAAA,EAAAA,CAAOA,CAACnZ,GAEhBooD,EAAkBtvC,CAAAA,EAAAA,GAAAA,EAAAA,CAAaA,CAAC,CAAEN,KAAMnB,EAAKrX,SAAQjR,QAD3CuzD,EAAQ,CAAE1oC,QAAS,MAAgD,EAAI,CAAC,CACrB,GAC7DkL,EAAWC,CAAAA,EAAAA,EAAAA,EAAAA,CAAWA,GAEtBsjC,EAAqB,CACzB,UAAWF,EACX,YAAa,CAACA,CAChB,SAEA,EAaKrjC,EAbD,CAAM,CAsBR,MATa,GASb,EAAClxB,OAAAA,CACC5B,aAAW,IACXX,UAAWmC,IACT,gBADWA,mEAEXnC,aAGF,UAACuC,OAAAA,CAAKvC,UAAU,kCACd,WAACuC,OAAAA,CAAKvC,UAAWmC,IAAG,gBAADA,4BAA8C60D,aAC9DD,EAAgB3wC,KAAK,CAAC4B,OAAO,CAC7B+uC,EAAgB3wC,KAAK,CAAC9C,IAAI,MAG/B,WAAC/gB,OAAAA,CAAKvC,UAAU,mCACd,WAACuC,OAAAA,CACCvC,UAAWmC,IAAG,gBAADA,2BAA6C00D,EAAuB,CAC/E,mCAAoCC,EACpC,mCAAoC,CAACA,CACvC,aAECC,EAAgB/wC,GAAG,CAACgC,OAAO,CAC5B,UAACzlB,OAAAA,CAAKvC,UAAU,kCAA0B+2D,EAAgB/wC,GAAG,CAAC1C,IAAI,MAEpE,UAAC/gB,OAAAA,CAAKvC,UAAWmC,IAAG,gBAADA,4BAA8C60D,YAC9DD,EAAgBxuC,OAAO,SAK9B,WAAChmB,OAAAA,CACC5B,aAAW,IACXX,UAAWmC,IACT,gBADWA,6DAEXnC,EACA,CACE,MAAO82D,EACP,OAAQ,CAACA,CACX,aAGF,UAACv0D,OAAAA,CACCvC,UAAWmC,IACT,gBADWA,+NAEX00D,EACA,CACE,WAAYC,EACZ,WAAY,CAACA,CACf,YAGDC,EAAgB/wC,GAAG,CAACgC,OAAO,GAE9B,WAACzlB,OAAAA,CAAKvC,UAAU,0BACd,UAACuC,OAAAA,CACCvC,UAAWmC,IACT,gBADWA,wGAEX60D,YAGDD,EAAgB3wC,KAAK,CAAC9C,IAAI,GAE7B,UAAC/gB,OAAAA,CACCvC,UAAWmC,IAAG,gBAADA,qCAAuD60D,YAEnED,EAAgBxuC,OAAO,SAvE5B,UAAChmB,OAAAA,CAAKvC,UAAU,2GACd,UAACuC,OAAAA,CAAKvC,UAAWmC,IAAG,gBAADA,SAA2B8uD,EAAQ,OAAS,YAdjE,WAAC1uD,OAAAA,CAAKvC,UAAU,4GACd,UAACsS,EAAAA,EAAIA,CAAAA,CAACvV,KAAK,WAAWiF,KAAK,KAAKi4B,QAAQ,QAAQj6B,UAAU,iBACzDiF,EACC,UAAC1C,OAAAA,CAAK2D,mBAAiB,sBAAsBlG,UAAU,sCACpDiF,IAED,OAmFZ,8BC7FO,IAAMgyD,GAAqB,CAAC,eACjC9wC,CAAa,cACb+D,CAAY,CACZlE,KAAG,cACHkxC,CAAY,UACZzwC,CAAQ,UACR0wC,CAAQ,QACRlxC,CAAM,iBACNmxC,CAAe,cACfvwC,CAAY,UACZpd,CAAQ,SACRyc,CAAO,4BACPsE,CAA0B,CACF,IACxB,GAAM,GAAElpB,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,mBACvB,CAACqK,EAASyrD,EAAW,CAAG/5C,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,CAAC,IACjC,UAAE/F,CAAQ,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,GAC7B7I,EAAS2gD,CAAAA,EAAAA,GAAAA,EAAAA,CAASA,CAAC,UAAE7lD,CAAS,GA2BpC,MACE,UAACwgB,GAAAA,EAAQA,CAAAA,CACPI,OAAO,uBACPC,MAAM,cACNC,SAAS,gBACTpE,cAAeA,EACf+D,aAAcA,EACdhE,QAASA,EACTvX,OAAQA,EACRqX,IAAKA,EACLC,OAAQA,EACRK,YArCgB,CAqCHA,GApCXtlB,GAAG,CACLuW,EAAS2/C,EAAcl2D,EAAG,CAAEs2D,aAAa,EAAMC,gBAAgB,CAAK,GAEpEhgD,EAAS6/C,EADaD,EAAWn2D,EAAIilB,GAAU4C,CAAAA,EAAAA,GAAAA,CAAAA,CACrBkzB,CAD8B91B,EAAQjlB,GAAKgoB,CAAAA,EAAAA,GAAAA,CAAAA,CAAOA,CAAChoB,EAAG,GAAKilB,EAC5C,CAAEqxC,aAAa,EAAMC,gBAAgB,CAAK,GACnFF,EACE/1D,EAAE61D,EAAW,wBAA0B,sBAAuB,CAC5DK,SAAUx2D,EAAE+oB,kBAAkB,CAACpb,EAAQ,CAAE0c,UAAW,MAAO,EAC7D,IAGN,EA2BIlB,eA1BmB,CA0BHA,GAzBlB5S,EAAS6/C,EAAiBp2D,EAAG,CAAEs2D,aAAa,EAAMC,gBAAgB,CAAK,GACnEv2D,GAAG,EAEHM,EAAE,yBAA0B,CAC1Bk2D,SAAUxxC,GAAK+D,mBAAmBpb,EAAQ,CACxC0c,UAAW,MACb,GACAosC,OAAQz2D,EAAE+oB,kBAAkB,CAACpb,EAAQ,CAAE0c,UAAW,MAAO,EAC3D,GAGN,EAeIjB,aAAc9oB,EAAE,gBAChBsK,QAASA,EACTib,aAAcA,EACdJ,SAAUA,EACV+D,2BAA4BA,GAGlC,EAAE,2BCxCK,IAAMktC,GAAa,CAAC,sBACzBC,CAAoB,4BACpBntC,CAA0B,sBAC1BotC,CAAoB,eACpBzxC,CAAa,cACb+D,GAAe,CAAI,sBACnB2tC,GAAuB,CAAK,UAC5BV,EAAW,EAAK,qBAChBW,EAAsB,OAAO,eAC7BC,CAAa,cACb9lC,CAAY,UACZxoB,CAAQ,SACRyc,EAAU,GAAG,CACb8xC,qBAAoB,CAAI,cACxBnxC,EAAe,EAAE,CACjB5hB,UAAQ,CACR2B,WAAS,iBACTqxD,CAAe,QACf52D,CAAM,WACNU,CAAS,cACTm2D,CAAY,CACZp2D,OAAQq2D,CAAQ,gBAChBC,CAAc,CACE,IAChB,GAAM,GAAE92D,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,mBACvBoN,EAAS2gD,CAAAA,EAAAA,GAAAA,EAAAA,CAASA,CAAC,UAAE7lD,CAAS,GAC9B,CAACpH,EAAMg2D,EAAQ,CAAGn6D,EAAAA,QAAc,CAACi6D,GACjCz3B,EAAYxiC,EAAAA,MAAY,CAAoB,MAC5C,UAAEqZ,CAAQ,OAAE7P,CAAK,WAAEuJ,CAAS,CAAE,CAAGuG,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,GAC/C0/C,EAAe,GAAGY,EAAoB,YAAY,CAAC,CACnDV,EAAkB,GAAGU,EAAoB,cAAc,CAAC,CAExD9xC,EAAMogC,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAC,CAAErpD,KAAMm6D,CAAa,GACpCjxC,EAASmgC,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAC,CAAErpD,KAAMq6D,CAAgB,GAE1C,CAACtJ,EAAewK,EAAiB,CAAGp6D,EAAAA,QAAc,CAI9C,MAEJq6D,EAAiB,CAACP,GAAqB,CAAEhyC,CAAAA,GAAOC,CAAAA,CAAK,CAC3D/nB,EAAAA,SAAe,CAAC,KACd,GAAI,CAAC8nB,GAAOgyC,EAAmB,CAC7B,IAAMQ,EAAa1vC,CAAAA,EAAAA,EAAAA,CAAAA,CAAUA,CAAC,IAAIvkB,MAC5Bk0D,EAAgBtB,EAAWqB,EAAaxvC,CAAAA,EAAAA,GAAAA,CAAAA,CAAOA,CAACwvC,EAAY,GAElEjhD,EAAS2/C,EAAcsB,EAAY,CAAElB,aAAa,CAAK,GACvD//C,EAAS6/C,EAAiBqB,EAAe,CAAEnB,YAAa,EAAK,EAC/D,CACF,EAAG,CAACtxC,EAAKkxC,EAAcC,EAAUC,EAAiB7/C,EAAUygD,EAAkB,EAE9E,IAAMvxC,EAAWT,EAAMA,EAAI+D,kBAAkB,CAACpb,EAAQ,CAAE0c,UAAW,MAAO,GAAK,GACzEqtC,EAAcvB,EAChB1wC,EACAR,EACAA,EAAO8D,kBAAkB,CAACpb,EAAQ,CAAE0c,UAAW,MAAO,GACtD,GAEEL,EAAUhF,EAAMgD,CAAAA,EAAAA,GAAAA,CAAAA,CAAOA,CAAChD,EAAK,GAAKA,EAElC2yC,EAAYlxC,CAAAA,EAAAA,GAAAA,EAAAA,CAAaA,CAAC,CAAEN,KAAMnB,SAAKrX,CAAO,GAC9CiqD,EAAenxC,CAAAA,EAAAA,GAAAA,EAAAA,CAAaA,CAAC,CAAEN,KAAMlB,SAAQtX,CAAO,GAQpDkqD,EAAiC,KACrCR,GAAQ,GACR3wD,EAAM,CAAE,GAAGuJ,GAAW,CAAEob,MAAO,CAAE,GAAGyhC,CAAc,CAAE,EAAG,CAAE38C,mBAAmB,CAAK,GACjFpP,KACF,EAcM,CAAC+2D,EAAeC,EAAiB,CAAG76D,EAAAA,QAAc,EAAC,GASnD86D,EAAiB,CACrBpxD,UAAW,CAACowD,EACZ1xD,MAAOhF,EAAE,cACT23D,UAAWH,EAAgBx3D,EAAE,sBAAwByE,MACvD,EAEM0tB,EAAWC,CAAAA,EAAAA,EAAAA,EAAAA,CAAWA,GAE5B,MACE,WAAC3zB,MAAAA,CAAIC,UAAU,6BACZiyB,GAAcinC,WAAaX,EAC1B,UAACh1C,EAAAA,EAASA,CAAAA,CACRjd,MAAOhF,EAAE,QACT4hB,SAAU+O,GAAcknC,cACxBn5D,UAAU,yHACVkG,mBAAiB,uBAEjB,KACJ,WAACgC,GAAAA,EAAYA,CAAAA,CACXzC,qBAAqB,uBACrBzF,UAAU,SACVlC,MAAOkoB,EAAM1kB,EAAE,UAAYA,EAAE,YAC7BQ,OAAQO,EACRN,UAAW82D,EACXlyD,SAAUkyD,EACV72D,KAAK,MACL4E,UAhDuB,CAgDZwyD,IA/Cff,GAAQ,GAEJryC,GAAO,CAACC,GACV1O,EAAS6/C,EAAiBD,CADR,CACmBnxC,EAAMgD,CAAAA,EAAAA,GAAAA,CAAAA,CAAOA,CAAChD,EAAK,GAAI,CAC1DsxC,YAAa,GACbC,gBAAgB,CAClB,GAEF3wD,KACF,EAuCMY,QAnCa,CAmCJ6xD,IAlCbN,GAAiB,GACjBxhD,EAAS,oBAAqB,KAAM,CAAE+/C,aAAa,CAAK,GACxD//C,EAAS,sBAAuB,KAAM,CAAE+/C,aAAa,CAAK,GAC1D//C,EAAS,mBAAmB,EAAO,CAAE+/C,aAAa,CAAK,GACvD/xC,WAAW,IAAMwzC,GAAiB,GAAQ,KACtCb,GAAcA,GACpB,EA6BM3wD,cAAe,CAAEG,MAAOsxD,CAAe,EACvC/2D,cACE,UAACC,SAAAA,CACClC,UAAU,gKACVkG,mBAAiB,kBACjBwM,GAAG,kBACHvS,IAAKugC,EACL7hC,KAAK,SACLuH,aAAY,GAAG9E,EAAE,WAAW,CAAC,EAAEmlB,GAAsBnlB,EAAE,MAAbmlB,MAAyB,EAAE,EAAEnlB,EAAE,YAAY,CAAC,EACpFo3D,GAA4Bp3D,EAAE,SAAhBo3D,GAAgB,CAC9B,CACFt2D,QAxEQ,CAwECk3D,IAvEjBjB,GAAQ,GACRC,EAAiB1nD,KAAUK,IAAYob,KAAK,GAC5ChrB,EAD0BuP,GAE5B,EAqEU5I,cAAY,sBAGZkE,SAAU,CAACunB,WAEVxuB,EACCA,EAAS,CAAE+gB,IAAK2yC,EAAW1yC,OAAQ2yC,CAAa,GAEhD,iCACE,WAAChC,GAAqBA,CAAC5wC,IAAKA,EAAKvc,SAAUA,KAArBmtD,OACpB,UAACr0D,OAAAA,CAAKvC,UAAU,iDAAyCsB,EAAE,aAC3D,UAACiB,OAAAA,CAAKvC,UAAU,+CAAuCsB,EAAE,iBAE1D,EAKG,KAJF,WAACs1D,GAAqBA,CAAC5wC,IAAKC,GAAU+E,EAASvhB,SAAUA,EAAnCmtD,UACpB,UAACr0D,OAAAA,CAAKvC,UAAU,iDAAyCsB,EAAE,cAC3D,UAACiB,OAAAA,CAAKvC,UAAU,+CAAuCsB,EAAE,gCAQrE,UAACvB,MAAAA,CACCmG,mBAAiB,eACjBlG,UAAU,0DAEV,UAACi3D,GAAkBA,CACjB9wC,cADiB8wC,EAEjB/sC,aAAcA,EACdlE,IAAKA,EACLkxC,aAAcA,EACdC,SAAUA,EACVlxC,OAAQkxC,EAAWnxC,EAAMC,EACzBmxC,gBAAiBA,EACjBlxC,QAASA,EACTW,aAAcA,EACdJ,SAAU,CAACzlB,EAAGu4D,IACZj4D,EAAE,WAAY,CACZ6lB,KAAMnmB,EAAE+oB,kBAAkB,CAACpb,EAAQ,CAAE0c,UAAW,MAAO,GACvDxsB,KAAMyC,EAAEi4D,EAAU,UAAY,WAChC,GAEF9vD,SAAUA,EACV+gB,2BAA4BA,MAG/BotC,EACC,UAAC73D,MAAAA,CAAIC,UAAU,wEACb,UAAC43D,EAAAA,CAAqB5xC,IAAKA,EAAKC,OAAQA,MAExC,KACH,CAAC8xC,GAAiBJ,GAAwBC,EACzC,WAAC73D,MAAAA,CAAIC,UAAU,2CACZ,EAQG,KAPF,UAACkT,EAAAA,EAASA,CAAAA,CACR5M,MAAO8xD,GAAkB92D,EAAE,qBAC3BzC,KAAK,WACL9B,KAAK,kBACLmP,SAAU2rD,EACVz1D,QAAS61D,IAGZN,GAA8C,KAC9CC,EACC,UAAC73D,GAFqB43D,GAErB53D,CAAIC,UAAU,2BACb,UAAC43D,EAAAA,CAAqB5xC,IAAKA,EAAKC,OAAQA,MAExC,QAEJ,UAIZ,EAAE,GG9P2B,GAA4B,UAACyxC,GAAUA,CAAE,GAAGnxD,CAAK,EAAVmxD,CAAe,GCRrD,CAAC,UAAEzyD,CAAQ,CAAiC,GAAKA,EAE/Eu0D,GAAsBl5D,WAAW,CAAG,wCCL7B,IAAMm5D,GAAqB,IAAMjiD,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,GAAmB,GCAqB,CAAC,OAC7F7b,CAAK,MACL+9D,CAAI,CACJ,GAAG17D,EACJ,GACC,GAAsB,MAAM,CAAf07D,EAET,UAAC35D,MAAAA,CACCC,UAAWmC,IACT,gBADWA,8EAEX,CACE,YAAa,CAAC,CAACxG,EACf,aAAc,CAAC,CAAC+9D,GAAQ,CAAC/9D,CAC3B,GAED,GAAIqC,GAAM,CAAC,cAAc,EAAI,CAAE,cAAe,GAAGA,GAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAE,UAEhF,UAACuE,OAAAA,CAAK5B,cAAY,gBAAQhF,EAAQ,IAAe,OAAT+9D,EAAgBA,EAAO,SAK9D,KAWIC,GAAiBz7D,EAAAA,UAAgB,CAC5C,CAAC,SAAE07D,CAAO,UAAE30D,CAAQ,OAAEqB,CAAK,UAAEub,CAAQ,MAAE63C,EAAO,IAAI,CAAE,GAAGnzD,EAAO,CAAEpG,IAE5D,WAACJ,MAAAA,CAAImG,mBAAkB0zD,EAAS55D,UAAU,wBACxC,WAACkC,SAAAA,CACCgE,mBAAiB,6BACjBlG,UAAWmC,IACT,gBADWA,+DAEXoE,EAAMvG,SAAS,EAEjBG,IAAKA,EACLtB,KAAK,SACJ,GAAG0H,CAAK,WAET,UAAChE,OAAAA,UAAM+D,IACP,UAACuzD,GAAAA,CAAWl+D,MAAOkmB,EAAU63C,KAAMA,EAAM1xD,cAAazB,GAAO,CAAC,cAAc,MAE7EtB,MAMT00D,GAAer5D,WAAW,CAAG,wDCxBtB,IAAMw5D,GAAkE,CAAC,eAC9EC,CAAa,WACbnzD,CAAS,CACTvE,KAAM81D,CAAQ,kBACd6B,CAAgB,QAChB34D,CAAM,CACNU,WAAS,CACT,GAAG/D,EACJ,IACC,GAAM,GAAEsD,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,CAAC,YAAa,gBAAgB,EACrD,CAACc,EAAMg2D,EAAQ,CAAGn6D,EAAAA,QAAc,EAAC,GACjC,CACJmkB,UAAW,QAAEC,CAAM,CAAE,WACrBrR,CAAS,OACTvJ,CAAK,CACN,CAAG+xD,KACE,QAAEQ,CAAM,CAAE,CAAGC,CAAAA,CADGT,CACHS,EAAAA,EAAAA,CAAaA,CAAC,CAAEn9D,KAAM,OAAQ,GAC3C8kB,GAAW9D,CAAQuE,EAAO+5B,KAAK,CAC/B8d,EAAa/T,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAC,CAAErpD,KAAM,OAAQ,GACtCk/C,EAAWke,GAAY57D,QAAU,EAEjC67D,EAAY,CAACD,GAAc,IAAI3oD,MAAM,CACzC,CAACe,EAAe,QAAE+pC,CAAM,CAAEr3C,UAAQ,CAA0C,GAC1EsN,EAAQ+pC,EAASr3C,EAAS1G,MAAM,CAClC,GAEI,CAACuvD,EAAewK,EAAiB,CAAGp6D,EAAAA,QAAc,CAAiB,CACvE,CACEo+C,OAAQ,EACRr3C,SAAU,EAAE,EAEf,EAED/G,EAAAA,SAAe,CAAC,KACVi8D,GAAoC,GAAG,CAAzBA,EAAW57D,MAAM,EACjC07D,EAAO,CAAE,GAAGI,GAAAA,EAAO,EAGvB,EAAG,CAACF,EAAW,EAEfj8D,EAAAA,SAAe,CAAC,KACVi6D,GACFG,EAAiB1nD,KADL,GAIhB,EAAG,CAACunD,EAAS,EAYb,IAf8BvnD,EAea,KACrCk9C,GACFpmD,EAAM,CAAE,GAAGuJ,GAAW,CAAEorC,EADP,IACc,IAAIyR,EAAc,EAAI,CAAE38C,kBAAmB,EAAK,GAEjFknD,GAAQ,GACRt2D,KACF,EAGMuL,EAAY84C,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAiC,CAAErpD,KAAM,WAAY,GACzE+F,EAAcsjD,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAyC,CACnErpD,KAAM,mBACR,GACMg/C,EAAgBqK,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAA2C,CACvErpD,KAAM,qBACR,GACMo/C,EAAUiK,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAA+B,CAAErpD,KAAM,SAAU,GACnEq/C,EAAQgK,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAA6B,CAAErpD,KAAM,OAAQ,GAC7Du9D,EAAgBlU,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAsC,CAAErpD,KAAM,gBAAiB,GAEvFw9D,EAAa5O,CAAAA,EAAAA,EAAAA,EAAAA,CAAgBA,CAAC,CAClCr+C,UAAWA,EACXqB,OAAQ,KACRm9C,UAAW,CACTz/B,MAAO,aACLvpB,gBACAi5C,CACF,EACAG,aAAcoe,UACdne,QACAC,EACAH,SAAU,EACZ,EACA4P,UAAU,CACZ,GAEMvlD,EAAQ,GAAGhF,EAAE,qBAAsB,CAAEiR,MAAO0pC,CAAS,GAAG,EAAE,EAAE36C,EAAE,sBAAuB,CACzFiR,MAAO6nD,CACT,IAAI,CACEp1D,EAAY,GAAG1D,EAAE,qBAAsB,CAAEiR,MAAO0pC,CAAS,GAAG,EAAE,EAAE36C,EAAE,sBAAuB,CAC7FiR,MAAO6nD,CACT,GAAG,EAAE,EAAE94D,EAAE,yBAAyB,CAAC,EACjCugB,EAAWvgB,EAAE,4BAA6B,CAAEiR,MAAO,CAAE,GAAK,IAC1D,CAEF,MACE,WAACrK,GAAAA,EAAYA,CAAAA,CACXlI,UAAU,SACVlC,MAAOwD,EAAE,mBACTQ,OAAQq2D,GAAY91D,EACpBN,UAAWy4D,EACX7zD,SAAU6zD,EACV5zD,UAxDyB,CAwDdwyD,IAvDbf,GAAQ,GACRzxD,KACF,EAsDI5E,KAAK,KACLuF,cAAe,CACbb,QAAS,CACPwF,SAAU2V,CACZ,CACF,EACApc,qBAAqB,2BACrBxD,cACE,UAACw4D,GAAYA,CACXb,QAAQ,IADGa,kBAEXr4D,QAzEU,CAyEDk3D,IAxEfhB,EAAiB1nD,KAAUupD,IAC3B9B,GAAQ,GACRh3D,IAF0BuP,CAG5B,EAsEQiR,SAAUA,EACVvb,MAAOA,EACPF,aAAYpB,EACZgD,cAAY,kCAIhB,UAAC0yD,GAAAA,EAAKA,CAAAA,CAAE,GAAGC,KAAK38D,EAAM,OAAP28D,OAAqB,GACnCZ,EAAgB,KACf,UAACh6D,MAAAA,CAAIC,UAAU,2DACb,UAAC83B,GAAAA,EAAIA,CAAAA,CACH/8B,IAAKw/D,EACLv6D,UAAU,mDACT,GAAGg6D,CAAgB,UAEnB14D,EAAE,6BAMf,EAAE,eCtKF,IAAMs5D,GAOD,CAAC,IAAEloD,CAAE,OAAEpM,CAAK,MAAEozD,CAAI,CAAE/9D,OAAK,YAAEk/D,CAAU,UAAE51D,CAAQ,CAAE,GAElD,UAAClF,MAAAA,CAAIC,UAAU,kBACb,WAACD,MAAAA,CACCC,UAAWmC,IAAG,gBAADA,0BAA4C,CACvD,cAAe,CAAC04D,EAChB,kBAAmBA,EACnB,cAAel/D,EACf,WAAY,CAAC,CAAC2K,EACd,iBAAkB,CAACA,CACrB,aAEA,WAACvG,MAAAA,CAAIC,UAAU,8BACZsG,EACC,UAACA,QAAAA,CACCJ,mBAAiB,mBACjBsiD,QAAS91C,EACT1S,UAAU,kCAETsG,IAED,KACHozD,EAAO,UAACrmD,GAAAA,CAASA,CAAAA,UAAEqmD,IAAoB,QAEzCz0D,OASI61D,GAAgB,IAC3B,GAAM,GAAEx5D,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,aACvB,UACJqiB,CAAQ,UACRrM,CAAQ,CACR8K,UAAW,QAAEC,CAAM,CAAE,SACrB8iC,CAAO,UACP/c,CAAQ,aACRC,CAAW,CACZ,CAAG9wB,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,GACZykC,EAAWmK,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAC,CAAErpD,KAAM,UAAW,GACvCm/C,EAAekK,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAC,CAAErpD,KAAM,cAAe,GAC/Cg+D,EAAwB3U,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAC,CAAErpD,KAAM,uBAAwB,GACjEi+D,EAAgB13D,CAAAA,EAAAA,EAAAA,MAAAA,CAAMA,CAA0B,MAEtDY,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACJ62D,GAAyBC,EAAc/7D,OAAO,EAAE+7D,EAAc/7D,OAAO,CAACsf,KAAK,EACjF,EAAG,CAACw8C,EAAsB,EAE1B,IAAME,EAAiC,CAAC/e,EAAsBD,IAE1D,CAA6B,GAG3Bif,CAHAnmD,SAASmnC,IAAuB6O,MAAMh2C,SAASmnC,GAAAA,CAGd,EAFV,IAAvBnnC,SAASknC,IACX8O,MAAMh2C,SAASknC,KAEf5T,EAAS,qBAAsB,CAC7BxpC,KAAM,SACN+M,QAAStK,EAAE,4CACb,GACA+mC,EAAS,yBAA0B,CACjCxpC,KAAM,SACN+M,QAAStK,EAAE,4CACb,GACOA,EAAE,gDAGRghB,GAAQ45B,cAAgB55B,GAAQ25B,QAAAA,CAAO,EACvC,UAAWC,IAAmBnnC,SAASknC,EAAAA,CAAQ,CAAnB,CAG7B3T,EAAY,CAAC,WAAY,eAAgB,qBAAsB,yBAAyB,GAEnF,GAGT,MACE,WAACvoC,MAAAA,WACC,WAACA,MAAAA,CAAIC,UAAU,+DACb,UAAC46D,GAAAA,CACCloD,GAAG,qBACHpM,MAAOhF,EAAE,2BACT3F,MAAO2mB,GAAQ25B,UAAY35B,GAAQ45B,sBAEnC,UAACl4B,QAAAA,CACCtR,GAAG,qBACH7T,KAAK,SACLs8D,IAAK,EACLn7D,UAAWmC,IAAG,gBAADA,WAA6B,CACxC,aAAcmgB,GAAQ25B,UAAY35B,GAAQ45B,YAC5C,GACC,GAAGt4B,EAAS,WAAY,CACvB7W,MAvGM,CAuGCquD,EACPztB,SAAU,IAAMyX,EAAQ,YACxBva,SAAU,CACRwwB,mBAAqBpf,GACnBgf,EAA+B/e,EAAcD,EACjD,EACAqf,eAAe,CACjB,EAAE,CACFn7D,IAAK,IACHyjB,EAAS,YAAYzjB,GAAG,CAACsK,GACzBuwD,EAAc/7D,OAAO,CAAGwL,CAC1B,EACAkS,QAAS,KACHo+C,GAAuBxjD,EAAS,yBAAyB,EAC/D,MAGHhR,EAAMg1D,gBAAgB,CACrB,UAACX,GAAAA,CACCloD,GAAG,yBACH/W,MAAO2mB,GAAQ45B,cAAgB55B,GAAQ25B,SACvC31C,MAAOhF,EAAE,wCAET,UAAC0iB,QAAAA,CACCtR,GAAG,yBACH7T,KAAK,SACLmB,UAAWmC,IAAG,gBAADA,WAA6B,CACxC,aAAcmgB,GAAQ45B,cAAgB55B,GAAQ25B,QAChD,GACAkf,IAAK,EACJ,GAAGv3C,EAAS,eAAgB,CAC3B+pB,SAAU,IAAMyX,EAAQ,gBACxBva,SAAU,CACR2wB,uBAAwB,GACtBP,EAA+B/e,EAAcD,EACjD,CACF,EAAE,KAGJ,QAEN,UAACx6B,EAAAA,EAASA,CAAAA,CAAC9lB,MAAO2mB,GAAQ25B,UAAY35B,GAAQ45B,aAAcl8C,UAAU,mBAG5E,EC7Hay7D,GAAqF,CAAC,kCACjGld,CAAgC,eAChCmd,CAAa,CACbr5D,KAAM81D,CAAQ,CACdvxD,WAAS,QACTvF,CAAM,WACNU,CAAS,qBACTu8C,CAAmB,CACpB,IACC,GAAM,CAACh9C,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,CAAC,gBAAiB,oBAAoB,EAC3D,CAACc,EAAMg2D,EAAQ,CAAGn6D,EAAAA,QAAc,EAAC,GACjCwiC,EAAYxiC,EAAAA,MAAY,CAAoB,MAC5C,CACJmkB,UAAW,QAAEC,CAAM,CAAE,OACrB5a,CAAK,WACLuJ,CAAS,CACV,CAAGwoD,KACE,aADgBA,YACdvO,CAAuB,CAAE,CAAG0H,KAC9B/wC,EAAW,CAAC,CAACS,EAAOk6B,EADuBoW,UACX,CAChC+I,EAAavV,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAC,CAAErpD,KAAM,cAAe,GAC7C4hD,EAAoByH,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAC,CAAErpD,KAAM,yBAA0B,GAC/D6hD,EAAgBwH,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAC,CAAErpD,KAAM,qBAAsB,GACvD6+D,EAAgBxV,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAC,CAAErpD,KAAM,sBAAuB,GACxDmhD,EAAckI,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAC,CAAErpD,KAAM,qBAAsB,GACrDigD,EAAUoJ,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAC,CAAErpD,KAAM,sBAAuB,GAClDogD,EAAMiJ,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAC,CAAErpD,KAAM,kBAAmB,GAC1C4/C,EAAgByJ,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAC,CAAErpD,KAAM,4BAA6B,GAC9D,CAAC+wD,EAAewK,EAAiB,CAAGp6D,EAAAA,QAAc,GAClD29D,EAAgBx9D,OAAOC,IAAI,CAACq9D,GAAc,CAAC,GAAGnqD,MAAM,CAAC,CAACe,EAAOxK,IAUjE,CATqB,CACnB,MACA,SACA,UACA,aACA,qBACA,8BACA,gBACD,CAEgBxM,QAAQ,CAACwM,IAAgB4zD,CAAU,CAAC5zD,EAAnBgW,EACvB,WAARhW,CAAoBgW,EAAQ49C,CAAU,CAAC5zD,EAAI,EAAK4zD,GAAYxe,KAAKpgD,MACzD,eAARgL,CAAwBgW,EAAQ49C,CAAU,CAAC5zD,EAAI,EAAK4zD,GAAY3e,SAASjgD,KAEnEwV,CADP,CACe,EAEVA,EACN,GAaGupD,EAAgC,KAChChO,GACFpmD,EAAM,CAAE,GAAGuJ,GAAW,CAAEurC,EADP,WACqB,CAAE,GAAGsR,CAAc,CAAE,EAAG,CAAE38C,mBAAmB,CAAK,GAE1FpP,MACAs2D,GAAQ,EACV,EA2BA,OAzBAn6D,EAAAA,SAAe,CAAC,KACV0gD,GAAiB,CAACzB,GAAKpgD,MAAM,EACzB,CAAE,GAAGkU,GAAW,CAAEurC,aAAc,CAAE,GAAGvrC,IAAYurC,YAAY,CAAEoB,QAAQ,CAAM,CAAE,GAEnFe,GAAqB,CAAC3B,GAASjgD,MAAM,EACjC,CAAE,GAAGkU,GAAW,CAAEurC,aAAc,CAAE,GAAGvrC,IAAYurC,YAAY,CAAEmB,YAAY,CAAM,CAAE,GAEvFie,GAAiB,CAAC1d,GACpBx2C,EAAM,CAAE,GAAGuJ,GAAW,CADW,aACK,CAAE,GAAGA,IAAYurC,YAAY,CAAEiB,QAAS,EAAM,CAAE,GAEpFme,GAAiBjf,GACnBj1C,EAAM,CAAE,GAAGuJ,GAAW,CAAEurC,EADU,WACI,CAAE,GAAGvrC,IAAYurC,YAAY,CAAEG,cAAe,EAAG,CAAE,EAE7F,EAAG,CACDA,EACA1rC,EACA0tC,EACAC,EACAV,EACA0d,EACA5e,GAASjgD,KACTogD,GAAKpgD,KACL2K,EACD,EAGC,UAACQ,GAAAA,EAAYA,CAAAA,CACXlI,UAAU,SACVlC,MAAOwD,EAAE,4BACTQ,OAAQq2D,GAAY91D,EACpBN,UAAW+5D,EACXn1D,SAAUm1D,EACVl1D,UA7CyB,CA6CdwyD,IA5Cbf,GAAQ,GACRzxD,KACF,EA2CI5E,KAAK,KACLuF,cAAe,CACbb,QAAS,CACPwF,SAAU,CAAC,CAACwvD,GAAiB75C,CAC/B,CACF,EACApc,qBAAqB,mCACrBxD,cACE,UAACw4D,GAAYA,CACXb,QAAQ,IADGa,kBAEXt6D,IAAKugC,EACLt+B,QA/DU,CA+DDk3D,IA9DfhB,EAAiB1nD,KAAU+qD,IAC3BtD,GAAQ,GACRh3D,IAF0BuP,CAG5B,EA4DQiR,SAAUA,EACV63C,KAAwB,IAAlBmC,EAAsB,KAAOA,EAAgB,GACnDv1D,MAAOhF,EAAE,4BACT8E,aAAY,GAAG9E,EAAE,iCAAiC,CAAC,EACjDghB,EAAOk6B,YAAY,CACfl7C,EAAE,4BAA6B,CAAEiR,MAAO,CAAE,GAC1CspD,EAAgB,EAChBv6D,EAAE,qCAAsC,CAAEiR,MAAOspD,CAAc,GAC/D,IACJ,CACF7zD,cAAY,iCAIhB,UAACq2C,EAAYA,CACXE,SADWF,wBACuBE,EAClCD,oBAAqBA,EACrBE,kBAAmB0M,KAI3B,EAAE,2BCjJF,IAAM6Q,GAAyE,CAAC,KAC9EZ,EAAM,CAAC,KACPa,EAAM,EAAE,CACT,IACC,GAAM,CAAC16D,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,aACrB,CAACc,EAAMg2D,EAAQ,CAAGn6D,EAAAA,QAAc,EAAC,GACjCwiC,EAAYxiC,EAAAA,MAAY,CAAoB,MAC5C,CACJmkB,UAAW,QAAEC,CAAM,CAAE,UACrB/K,CAAQ,CACRtG,WAAS,OACTvJ,CAAK,CACN,CAAG+xD,KACEzd,EAAYoK,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAA8B,CAAErpD,CADpC08D,IAC0C,WAAY,GACtE1d,EAAgBqK,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAwC,CACpErpD,KAAM,qBACR,GACM,CAACk/D,EAAkBC,EAAoB,CAAGh+D,EAAAA,QAAc,GACxD,CAACi+D,EAAsBC,EAAwB,CACnDl+D,EAAAA,QAAc,GAUVm+D,EAAe,KAEnB,GADAhE,GAAQ,GACJ4D,GAAoBE,EAAsB,CAC5C,IAAM3nB,EAAWvjC,IACjBvJ,EACE,CACE,GAAG8sC,CAAQ,CACXwH,UAAWigB,EACX5vC,MAAO,CAAE,GAAGmoB,EAASnoB,KAAK,CAAE0vB,cAAeogB,CAAqB,CAClE,EACA,CAAEhrD,mBAAmB,CAAK,EAE9B,CACF,EAEA,GAAkB,OAAd6qC,GAAsB,CAACD,EACzB,OAAO,KAGT,CAJ0C,GAIpCz1C,EACU,IAAd01C,EACI16C,EAAE,kBAAmB,CAAEiR,MAAO,CAAE,GAChCjR,EAAE,qBAAsB,CAAEiR,MAAOypC,CAAU,GAC3CsgB,EAAch7D,EAAE,wBAEtB,MACE,UAAC4G,GAAAA,EAAYA,CAAAA,CACXlI,UAAU,SACVlC,MAAOw+D,EACPx6D,OAAQO,EACRN,UAAWs6D,EACX11D,SAAU01D,EACVz1D,UAnCyB,CAmCdwyD,IAlCbf,GAAQ,EACV,EAkCIr2D,KAAK,KACLC,cACE,UAACw4D,GAAYA,CACXb,QAAQ,EJvBWD,EAAC,mBIwBpBx5D,IAAKugC,EACLt+B,QA/CU,CA+CDk3D,IA9Cf4C,EAAoBlgB,GACpBogB,EAAwBrgB,GACxBsc,GAAQ,EACV,EA4CQx2C,UAAU9D,CAAQuE,EAAO05B,SAAS,CAClC11C,MAAOA,EACPF,aAAYE,EACZ0B,cAAY,kCAIhB,UAACu0D,GAAAA,CAAOA,CAAAA,CACNC,aAAc,KACZjlD,EAAS,YAAaykC,EAAY,EAAG,CAAEsb,aAAa,CAAK,GACzD//C,EAAS,sBAAuBkS,CAAAA,EAAAA,GAAAA,CAAAA,CAAOA,CAACsyB,EAAe,GAAI,CACzDub,aAAa,CACf,EACF,EACAmF,YAAa,KACXllD,EAAS,YAAaykC,EAAY,EAAG,CAAEsb,aAAa,CAAK,GACzD//C,EAAS,sBAAuByR,CAAAA,EAAAA,GAAAA,CAAAA,CAAOA,CAAC+yB,EAAe,GAAI,CACzDub,aAAa,CACf,EACF,EACA6D,IAAKA,EACLa,IAAKA,EACLjvD,MAAOivC,EACP0gB,WAAYp2D,EACZq2D,UAAWr7D,EAAE,mBACbs7D,WAAW,mBACXC,WAAYv7D,EAAE,sBACdw7D,YAAY,sBACZ98D,UAAU,YAIlB,mHEzFA,IAAM+8D,EAAgE,CAAC,UACrE93D,CAAQ,MACR+3D,CAAI,UACJvzD,CAAQ,QACRjK,CAAM,MACNoK,CAAI,CACJ,GAAGrD,EACJ,IACC,GAAM,QAAEgE,CAAM,QAAEY,CAAM,WAAEhB,CAAS,YAAEiB,CAAU,WAAExD,CAAS,CAAE,CAAG4B,CAAAA,EAAAA,EAAAA,EAAAA,CAAYA,CAACC,GAC1E,GAAI,CAACG,EACH,IADS,GACF,KAET,IAAM+tB,EAAkB,CAAE58B,IAAK6O,CAAK,EACpC,GAAIozD,EAAM,CACR,IAAM3oC,EAAa,IAAIrqB,EAAAA,CAAUA,CAACgzD,GAC5Br+D,EAAOmM,CAAAA,EAAAA,EAAAA,CAAAA,CAAYA,CAACupB,EAAYzqB,EAAMpK,EAAQiK,GACpDkuB,EAAU58B,GAAG,CAAG4D,EAAK5D,GAAG,CACpB4D,EAAKsM,SAAS,EAAE,CAClB0sB,EAAUv1B,OAAO,CAAGmI,CAAAA,CAExB,CACA,MACE,iCACE,UAACutB,EAAAA,EAAIA,CAAAA,CAAE,GAAGH,CAAS,CAAG,GAAGpxB,CAAK,UAC3BtB,IAEF2C,GAAa,UAAC2D,EAAAA,EAASA,CAAAA,CAACC,UAAWrB,EAAWiB,WAAYA,EAAYzN,QAASwN,MAGtF,EAQayiC,EAA+B,CAAC,UAC3C3oC,CAAQ,SACRvH,CAAO,UACP+L,CAAQ,QACRjK,CAAM,MACNw9D,CAAI,CACJ,GAAGz2D,EACJ,IAcC,IAAM02D,EAAgBlP,IAbC,CACrBjgB,UAAW,CACTjpB,EAAG,CACDkpB,UAAWgvB,EACXx2D,MAAO,MACLy2D,WACAvzD,EACAjK,SACAQ,UAAW,YACb,CACF,CACF,CACF,EAC4CtC,GAC5C,MACE,UAACw/D,EAAAA,CAAaA,CAAAA,CAACx/D,QAASu/D,EAAgB,GAAG12D,CAAK,UAC7CtB,GAGP,EAAE,6EE5FK,IAAM0M,EAAUoT,IAAQ,IAAM,SAAPA,IAAO,iBAA0C,0CAC7EC,KAAK,IACJ,EACyBD,IAAQ,IAAM,SAAPA,EAAO,oEAAmD,0CAC3FC,KAAK,IACJ,EAGqBD,IAAQ,IAAM,SAAPA,MAAO,wBAA8B,CAAC0vB,IAAI,CAAC,GAAS0oB,EAAIC,QAAQ,2CAC7Fp4C,KAAK,IACJ,kIELI,IAAMq4C,EAAqC,CAAC,WAAEC,CAAS,UAAEr4D,CAAQ,CAAE,GAAGsB,EAAO,GAC3Eg3D,CAAAA,EAAAA,EAAAA,aAAAA,CAAaA,CAACD,EAAW/2D,EAAOtB,kBCAzC,IAAMyW,EAAc,CAClB8hD,IAAK,IACLC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,KACJC,GAAI,KACJC,IAAK,KACLC,KAAM,KACNC,MAAO,KACPC,OAAQ,IACV,EAEA,SAASC,EAAgC79D,CAAa,CAAE89D,CAAwB,EAC9E,IAAMC,EAAmBD,EAAY/iE,KAAK,CAAC,KACrCijE,EAAeD,GAAkB,CAAC,EAAE,EAAI,EAG9C,OAAOrjB,KAAKujB,KAAK,CAACx/D,GAFEs/D,GAAkB,CAAC,CACfG,CADiB,GAAI,EACPF,EAExC,CAEA,SAASG,EAAen+D,CAAa,CAAEvB,CAAc,CAAE2/D,CAAiB,EACtE,IAAMN,EAAc99D,EAAQvB,SAE5B,OAAYygD,QAAQ,CAAC4e,IAAgC,GAAG,CAAnBA,EAU9BA,GATLO,CAAAA,EAAAA,EAAAA,EAAAA,CAAOA,CACL,iCACA,MAAU,wBACV,CAAC,aAAa,EAAEP,EAAY,SAAS,EAAE99D,EAAM,UAAU,EAAEvB,EAAO,aAAa,EAAE2/D,EAAU,CAAC,CAAC,EAGtF,IAIX,CAEA,SAASE,EAAcC,CAAmB,CAAE72D,CAAW,CAAE8jC,CAAoB,EAE3E,IAAMgzB,EAAM9jB,KAAK+jB,GAAG,CAAChqD,OADT8pD,EAAGvoD,GAAG,CAACtO,IAAQ8jC,EAAanwC,QAAQ,YAGhD,IAAI,GAAQ6jD,QAAQ,CAACsf,GAIdA,EAHEhzB,CADkB,CAW7B,SAASkzB,EAAiBN,CAAiB,CAAEO,CAAoB,CAAEC,CAAmB,EACpF,IAAMC,EAAaT,EAAU3/C,OAAO,CAAC,KACrC,GAAmB,CAAC,GAAG,CAAnBogD,EACF,OAAOT,EAGT,IAAMU,EAAS,IAAInf,gBAAgBye,EAAUvjB,KAAK,CAACgkB,IAAe,IAI5DE,EAAoBZ,EAFNG,EAAcQ,EAAQ,KAAM,GAC3BR,CACoBU,CADNF,EAAQ,KAAM,GACmBV,EAAda,CAYtD,OAV0Bd,EAAeS,EAAaD,EAAcP,GAE5C,GAAG,EAClBryD,GAAG,CAAC,KAAM2U,OAAqD,EAA9Cg6B,KAAKujB,KAAK,CAACW,EAAcG,KACjDD,EAAO/yD,GAAG,CAAC,KAAM2U,OAAqB,EAAdk+C,MAExBE,EAAO/yD,GAAG,CAAC,KAAM2U,OAAsD,EAA/Cg6B,KAAKujB,KAAK,CAACU,EAAeI,KAClDD,EAAO/yD,GAAG,CAAC,KAAM2U,OAAsB,EAAfi+C,KAGnBP,EAAUvjB,KAAK,CAAC,EAAGgkB,GAAc,IAAMC,EAAOzjE,QAAQ,EAC/D,CAMA,IAAM6jE,EAAgB,CAACl/D,EAAem/D,KACpC,IAAMC,EAAcphE,OAAOkT,MAAM,CAACmK,GAC5BgkD,EAAgBD,CAAW,CAACA,EAAYlhE,MAAM,CAAG,EAAE,EAAI,EAC7D,OAAO8B,EAAQq/D,EACXA,EACAF,EAAY,GACZC,EAAYxiE,IAAI,CAAC,GAAgB0iE,GAAct/D,GAC/Cqb,EAAY8hD,GAAG,EAORoC,EAA8C,CACzD,MAAO,eACP,MAAO,gBACP,MAAO,eACP,MAAO,eACP,MAAO,eACP,OAAQ,gBACR,OAAQ,gBACR,OAAQ,gBACR,OAAQ,gBACR,UAAW,kBACb,EAAE,EAEiC,GACjCA,CAAc,CAACzB,EAAY,EAAI,eAAe,EAEjB,CAAC,IAC9BzrD,CAAE,SACF6nB,CAAO,aACP4jC,CAAW,UACX0B,CAAQ,WACR7/D,EAAY,EAAE,kBACdmyB,CAAgB,YAChB2tC,CAAU,aACVC,CAAW,WACXP,EAAY,GAAG,aACfQ,CAAW,UACXC,EAAW,EAAK,OAChB5/D,CAAK,OACL6/D,GAAQ,CAAK,WACb3oC,CAAS,SACTn1B,CAAO,CACU,IACjB,GAAM,CAAC+9D,EAAQC,EAAU,CAAG9iD,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,CAAC,IAE/B+iD,EAAad,EAAcl/D,EAAOm/D,IAAc,EAEhDc,EAAcpC,EAAgCmC,EAAYlC,GAC1DoC,EAAkBV,EAAWd,EAAiBc,EAAUS,EAAaD,GAAc,GACnFG,EACmB,UAAvB,OAAOT,GAA4B1hE,OAAOC,IAAI,CAACyhE,GAAaxhE,MAAM,CAAG,GAAKwhE,EAAYz7C,OAAO,CAEzFm8C,EAAoBV,EAAc,SAAW,MAGnD,MACE,WAAC1C,EAAeA,CACdC,UAAWwC,EADGzC,CACWoD,EACzBzgE,UAAWmC,IACTgwB,EACA,CAAC,aAFUhwB,uCAE0C,CAAC,CACtD,CACE,SAAU+9D,CACZ,EACA/B,EAAcuC,EAAoBvC,GAAe,MAEnDtnC,MAAO,CACLU,UAAWA,QAAwBxxB,CACrC,GADyBwxB,SAGxBgpC,GACC,UAAC/sD,EAAAA,KAAKA,CAAAA,CACJd,GAAIA,EACJ1S,UAAWmC,IAAGnC,EAAW,CACvB,aADWmC,SACY,CAACg+D,EACxB,cAAeA,CACjB,GACA1sD,IAAK8mB,EACLn6B,IAAKmgE,EACL1pC,MAAO,CACL8pC,UAAW,OACb,EACA7/D,IAAI,IACJZ,OAAQ,KACNkgE,GAAU,GAENJ,GAEFA,GAEJ,EACAh4D,KALmB,SAKP,qBACZ44D,aAAa,EACbX,SAAUA,EACV79D,QAASA,IAIZ,EAKG,KAJF,UAACrC,MAAAA,CACCiI,cAAY,uBACZhI,UAAWmC,IAAG,gBAADA,iDAKfq+D,EAAgB,UAACn8C,EAAAA,CAAOA,CAAAA,CAAE,GAAG07C,CAAW,CAAEr7C,eAAgBtiB,IAAc,OAIhF,EAAE,wBC5LF,IAAMs+D,EAAsB,CAAC,aAC3BvC,CAAW,CACX0C,mBAAiB,CAFMH,kBAGvBI,CAAiB,CAKlB,IACC,IAAMC,EAAqB,eAE3B,MAAO,CACLD,GACIlB,CAAc,CAACkB,EAAkB,EAAIC,EAEzCF,EAAoB,CAAC,GAAG,EAAEjB,CAAc,CAACiB,EAAkB,EAAIE,EAAAA,CAAoB,CAAG,CADlFA,EAEHD,CAAAA,GAAqBD,CAAAA,CAAgB,EAAM1C,EACxC,CAAC,GAAG,EAAEyB,CAAc,CAACzB,EAAY,EAAI4C,EAAAA,CAAoB,CACzDnB,CAAc,CAACzB,EAAY,EAAI4C,EACpC,CACE1lE,MAAM,CAAC0iB,SACPtiB,IAAI,CAAC,IACV,EAEaulE,EAAoB,CAAC,IAChCtuD,CAAE,SACF6nB,CAAO,WACPv6B,EAAY,EAAE,kBACdmyB,CAAgB,YAChB2tC,CAAU,aACVC,CAAW,WACXP,EAAY,GAAG,aACfQ,CAAW,UACXC,GAAW,CAAK,OAChB5/D,CAAK,SACL+B,CAAO,UACPy9D,CAAQ,aACR1B,CAAW,gBACX8C,CAAc,mBACdH,CAAiB,gBACjBI,CAAc,mBACdL,CAAiB,CACE,IACnB,GAAM,CAACV,EAAQC,EAAU,CAAG9iD,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GAC/B+iD,EAAad,EAAcl/D,EAAOm/D,IAAc,EAGhD2B,EAAqBjD,CAHKqB,CAG2Bc,EAAYlC,GACjEiD,EAAyBvB,EAC3Bd,EAAiBc,EAAUsB,EAAoBd,GAC/C,GAEEgB,EACJR,EAJkB9B,CAIGmC,EACjBnC,CAPoDb,CAQlDgD,EACAhD,EAAgCmC,EAAYQ,GAC5CR,GAEF,EALgBtB,CAOhBuC,EACJR,GAAqBG,EACjBlC,EACEkC,EACA/C,EAAgCmC,EAAYS,GATb5C,GAYjC,EALgBa,CAOhByB,EAAgBT,GAAe1hE,OAAOC,IAAI,CAACyhE,CALV7B,EAKuB3/D,MAAM,CAAG,GAAKwhE,EAAYz7C,OAAO,CACzFm8C,EAAoBV,EAAc,SAAW,MAEnD,MACE,WAAC1C,EAAeA,CACdr1D,YADcq1D,EACF,2BACZC,UAAWwC,GAAcW,EACzBzgE,UAAWmC,IACTgwB,EACA,cAFWhwB,yCAGXu+D,EAAoB,CAClBvC,gCACA0C,GAFiBH,iBAGjBI,CACF,cAGDM,GACC,WAACG,UAAAA,CAAQv5D,cAAY,8BAClBi5D,GACC,UAACO,SAAAA,CACCx5D,cAAY,eACZwH,MAAO,CAAC,YAAY,EAAEkM,EAAYgiD,EAAE,CAAC,GAAG,CAAC,CACzC+D,CADiC/lD,MACzB4lD,IAGXJ,GACC,UAACM,SAAAA,CACCx5D,cAAY,eACZwH,MAAO,CAAC,YAAY,EAAEkM,EAAYmiD,EAAE,CAAC,GAAG,CAAC,CACzC4D,CADiC/lD,MACzB2lD,IAGZ,UAAC7tD,IAAKA,CACJd,GAAIA,EACJ1S,MAFIwT,IAEOrR,IAAG,eAAgBnC,CAAjBmC,CAA4B,CACvC,sBAAuB,CAACg+D,EACxB,cAAeA,CACjB,GACA1sD,IAAK8mB,EACLn6B,IAAKghE,EACLtgE,IAAI,IACJZ,OAAQ,KACNkgE,GAAU,GACVJ,KACF,EACAY,aAAa,EACbX,SAAUA,EACV79D,QAASA,OAKd,CAAC+9D,GACA,UAACpgE,MAAAA,CACCiI,cAAY,uBACZhI,UAAU,gEAGbwgE,GAAiB,UAACn8C,EAAAA,CAAOA,CAAAA,CAAE,GAAG07C,CAAW,CAAEr7C,eAAgBtiB,MAGlE,EAAE,ECvHyC,CAAC,OAC1C/B,CAAK,gBACLqhE,CAAc,gBACdC,CAAc,iBACdC,CAAe,mBACfC,CAAiB,CACjBC,mBAAiB,oBACjBC,CAAkB,CACI,IACtB,IAAMC,EAAW3hE,EAAQqb,EAAY,EAAK,CAEpCumD,EAAY5hE,EAAQqb,EAAY,EAAK,OAAN,CAErC,GAAgBgmD,GAAkBG,EACzB,CAAEhC,SAAU6B,EAAgBvD,KADgB,OACH0D,CAAkB,EAGhEI,GAAaL,GAAmBG,EAC3B,CAAElC,SAAU+B,EAAiBzD,MADkB,MACL4D,CAAmB,EAGlE,CAACE,GAAa,CAACD,GAAYL,GAAkBG,EACxC,CAAEjC,SAAU8B,EAAgBxD,KAD+B,OAClB2D,CAAkB,EAG7D,CAAEjC,SAAU,GAAI1B,YAAa,MAAO,CAC7C,EAAE,kLGxCK,IAAMj0D,EAAmB,KAA0B,EAEpB,CACpCsnD,SAAU,SACZ,EAAE,EAIE,CACFxhC,GAAI,CACFyhC,gBAAiB,MACnB,CACF,EAAE,EAE0B,IAC1B,IAAM1pD,EAAM,GAAG4G,EAAOlF,QAAQ,GAAGkF,EAAOG,MAAM,CAAG,CAAC,CAAC,EAAEH,EAAOG,MAAM,CAACozD,iBAAiB,IAAI,CAAG,IAAI,CAC/F,OAAOn6D,EAAMo6D,CAAkB,CAACp6D,EAAI,CAAG,CACzC,EAEO,SAASsf,EAAoB,MAClCF,CAAI,QACJxY,CAAM,CAIP,EACC,IAAMyzD,EAAW/9D,CAAAA,EAAAA,EAAAA,CAAAA,CAAwBA,CACvC8iB,EACAuC,CAAAA,EAAAA,EAAAA,CAAAA,CAAWA,CAACvC,EAAM,CAAEk7C,aAAcA,EAAa1zD,EAAQ,IAEnD2zD,EAAOC,CAAAA,EAAAA,EAAAA,CAAAA,CAAiBA,CAAC,CAC7Br5C,MAAOO,CAAAA,EAAAA,EAAAA,CAAAA,CAAOA,CAACtC,EAAMi7C,GACrBj5C,IAAKH,CAAAA,EAAAA,EAAAA,CAAAA,CAAOA,CAACw5C,CAAAA,EAAAA,EAAAA,CAAAA,CAAUA,CAACr7C,GAAOs7C,GAlCC,CAkCoBC,CAAAA,EAAAA,EAAAA,CAAAA,CAAMA,CAACv7C,GAAQw7C,CAAAA,EAAAA,EAAfD,CAAeC,CAAcA,CAACx7C,EAAAA,CAAI,CACxF,GACMsB,EAAc,EAAE,CACtB,KAAO65C,EAAK/jE,EArC+D,IAqCzD,CAAG,EAAG,CACtBkqB,EAAEjkB,IAAI,CAAC89D,EAAKvjD,MAAM,CAAC,EAAG,IAExB,OAAO0J,CACT,CAEO,IAAMX,EAAWnZ,GACtBA,GAAQlF,UAAY,CAAC,KAAM,KAAM,KAAK,CAAClO,QAAQ,CAACoT,GAAQlF,UAAU,EAG5C,GACtBkF,GAAQlF,UAAY,CAAC,KAAK,CAAClO,QAAQ,CAACoT,GAAQlF,UAAU,EAC5B,GAC1BkF,GAAQlF,UAAY,CAAC,KAAK,CAAClO,QAAQ,CAACoT,GAAQlF,UAAU,EAEc,CACpE4mB,GAAI,EACJL,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJI,GAAI,EACJC,GAAI,EACJ9d,GAAI,EACJke,GAAI,EACJR,GAAI,EACJK,GAAI,EACJC,GAAI,EACJC,GAAI,EACJE,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJX,GAAI,EACJY,GAAI,EACJ7I,GAAI,EACJD,GAAI,EACJ,UAAW,EACX,UAAW,CACb,iBC3DO,IAAMb,EAAgB,CAAC,QAC5B5Y,CAAM,CACNiH,SAAS,OAAO,UAChB0f,GAAW,CAAI,CACD,GACdjH,CAAAA,EAAAA,EAAAA,OAAAA,CAAOA,CAAC,SAOFi0C,EANJ,GAAI,CAAC3zD,EACH,MADW,EACF,CAEX,IAAMjR,EAAU,CACd6qB,QAASq6C,EAASj0D,GAAU,GAAXi0D,IAAoBhtD,CACvC,EAKA,GAHe,UAAXA,GAAsB0f,IACxBgtC,EAAO3zD,EAAO4iD,EADoB,MACZ,CAAGsR,CAAsB,CAACl0D,EAAO4iD,QAAQ,CAAC,MAAGxrD,CAAAA,EAEjE,CAACu8D,EAAM,CACT,IAAM91C,EAAY9C,CAAAA,EAAAA,EAAAA,CAAAA,CAAWA,CAAC,IAAInlB,KAAQ,CACxC89D,aAAcA,EAAa1zD,EAC7B,GACA2zD,EAAO,GAFqBD,CAEjBx1D,MAAM,GAAG,CAAC/E,GAAG,CAAC,CAACg7D,EAAGrsD,IACfuS,CAAAA,EAAAA,EAAAA,CAAAA,CAAOA,CAACwD,EAAW/V,GAGpBsT,kBAAkB,CAACpb,EAAQjR,GAE1C,CACA,OAAO4kE,CACT,EAAG,CAAC3zD,EAAQiH,EAAQ0f,EAAS,EAGzButC,EAAwD,CAC5D5yC,GAAI,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAM,CACrDgB,GAAI,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAM,CACrD5I,GAAI,CAAC,UAAW,SAAU,SAAU,MAAO,WAAY,QAAS,QAAQ,0BCjDnE,IAAM06C,EAA+C,CAC1D/8C,IAAK,UACLI,MAAO,UACP2B,KAAM,UACNQ,QAAS,QACTb,UAAW,OACb,EAAE,SA2Bcs7C,EACd77C,CAAiB,CACjBxY,CAAmB,CACnBs0D,CAA4B,CAC5BvlE,CAA6B,MAUzBsqB,EACA1E,EATJ,IAAMna,EAAS,CACb,GAAG+5D,CAAsB,CACzB,GAAGC,CAAc,CAACx0D,EAAO4iD,QAAQ,EAAI,GAAG,CACxC,GAAG7zD,CACL,EACM0lE,EAAY,IAAI1tD,KAAK2tD,cAAc,CAAC10D,EAAOjT,QAAQ,GAAIyN,GACvDm6D,EAAQn8C,GAAQi8C,EAAUG,aAAa,CAACp8C,GAI9C,GAHoC,CAGhCq8C,WAHc9lE,CAAO,CAACulE,EAAK,CAGhB,CACbj7C,EAAUs7C,GAAOrmE,KAAK,CAAC,CAAE4B,MAAI,CAAE,GAAKA,IAASokE,IAAOl2D,OAAS,GAC7D,IAAMA,EAAQu2D,GAAOrmE,KAAK,CAAC,MAAE4B,CAAI,CAAE,GAAc,YAATA,IAAqBkO,OAAO02D,QAAU,GAC9EngD,EAAOvW,EAAMu9B,KAAK,CAAC,UAAY,GAAKv9B,CACtC,MACEib,CADK,CACK,GACV1E,EAAOggD,GAAOrmE,KAAK,CAAC,MAAE4B,CAAI,CAAE,GAAKA,IAASokE,IAAOl2D,OAAO02D,QAAU,GAEpE,MAAO,SAAEz7C,OAAS1E,CAAK,CACzB,CAeO,IAAMmE,EAAgB,CAAC,MAC5BN,CAAI,QACJxY,CAAM,SACNjR,EAAUqlE,CAAsB,CACf,IACjB,IAAM55D,EAASklB,CAAAA,EAAAA,EAAAA,OAAAA,CAAOA,CACpB,IAAO,EACL,GAAG00C,CAAsB,CACzB,GAAGrlE,CAAO,CACZ,EACA,CAACA,EAAQ,EAEPoqB,EAAQnZ,KAADmZ,EACFS,EADY,KACL,CAAG,QAEnB,IAAMm7C,EAAan8C,EAAc,CAAE5Y,SAAQiH,CAAX2R,MAAmBpe,EAAOof,OAAO,GACjE,MAAO8F,CAAAA,EAAAA,EAAAA,OAAAA,CAAOA,CAAC,KACb,GAAI,CAAClH,EACH,IADS,EACF,CACLnB,IAAK,CAAEgC,QAAS,GAAI1E,KAAM,EAAG,EAC7B8C,MAAO,CAAE4B,QAAS,GAAI1E,KAAM,EAAG,EAC/ByE,KAAM,CAAEC,QAAS,GAAI1E,KAAM,EAAG,EAC9BiF,QAAS,EACX,EAGF,IAAMvC,EAAMg9C,EAAkB77C,EAAMxY,EAAQ,MAAO,CAAEqX,IAAK7c,EAAO6c,GAAG,GAC9DI,EAAQ48C,EAAkB77C,EAAMxY,EAAQ,QAAS,CACrDyX,MAAOjd,EAAOid,KAAK,GAEf2B,EAAOi7C,EAAkB77C,EAAMxY,EAAQ,OAAQ,CAAEoZ,KAAM5e,EAAO4e,IAAI,GAElE47C,EAAWjB,CAAAA,EAAAA,EAAAA,CAAAA,CAAMA,CAACv7C,GAElBy8C,EAAYvB,EAAa1zD,IAAW,EAEpC4Z,EAAUm7C,EAFcrB,EAED,CADfsB,EAAWC,IACe,GAsBxC,MAnB0B,IAAI,CAA1Bx9C,EAAM9C,IAAI,CAACmgD,IAAI,KACjBr9C,EAAM9C,IAAI,CAAG0/C,EAAkB77C,EAAMxY,EAAQ,QAAS,CACpDyX,MAAOjd,EAAOue,SAAS,GACtBpE,IAAI,CAGiB,MAAM,CAA1B3U,EAAO4iD,QAAQ,GAKjBnrC,EAAM9C,IAAI,CAAG0/C,EAAkB77C,EAAMxY,EAAQ,QAJzB,CAClB,GAAGxF,CAAM,CACJid,MAAOjd,EAAOue,SAAS,CAAEa,QAAS,MACzC,GACmEjF,IAAAA,GAInE,CAAC,KAAM,KAAK,CAAC/nB,QAAQ,CAACoT,EAAO4iD,QAAQ,GAAG,CAC1CnrC,EAAM9C,IAAI,CAAGugD,IAAWz9C,EAAM9C,KAAI,EAG7B,KACL0C,EAJuB69C,MAKvBz9C,OACA2B,UACAQ,CACF,CACF,EAAG,CAACpf,EAAQge,EAAMu8C,EAAY/0D,EAAO,CACvC,EAAE,EC3IuB,CAAC,UACxBlF,EAAWS,CAAgB,SAC3BxM,EAAUwlE,CAAsB,CACtB,GACV70C,CAAAA,EAAAA,EAAAA,OAAAA,CAAOA,CACL,IACE,IAAI3Y,KAAK65C,MAAM,CAAC9lD,EAAU,CACxB,GAAGy5D,CAAsB,CACzB,GAAGC,CAAc,CAAC15D,EAAS,CAC3B,GAAG/L,CAAO,GAEd,CAAC+L,EAAU/L,EAAQ,EACnB,yUGnBG,IAAMomE,EAAmB,KAC9B,GAAM,GAAExiE,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,0BAavB,UAAEgW,CAAQ,OAAEgxB,CAAK,CAAE,CAAG/wB,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,GACpCqhC,EAAkBtQ,EAAM,0BACxBw7B,EAAiB,IACrBxsD,EAAS,yBAAoC,wBAAVysD,GACnCzsD,EAAS,cAAe,aACV,uBAAuB,CAAjCysD,GACF1hE,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC2hE,EAAAA,EAAKA,CAACC,oBAAoB,CAEzC,EACA,MACE,WAAClnD,EAAAA,EAAIA,CAAAA,WACH,WAAC/D,EAAAA,EAAOA,CAAAA,CAACjZ,UAAU,iBACjB,UAACiY,EAAAA,EAASA,CAAAA,CACRvF,GAAG,oBACH1S,UAAU,sJACVkY,gBAAgB,2CAChBC,kBAAkB,gBAClBC,cAAe,IAAM2rD,EAAe,8BAEnCziE,EAAE,+BAEL,UAACvB,MAAAA,CAAIC,UAAU,wCACf,UAACiY,EAAAA,EAASA,CAAAA,CACRvF,GAAG,sBACH1S,UAAU,sJACVkY,gBAAgB,2CAChBC,kBAAkB,gBAClBC,cAAe,IAAM2rD,EAAe,gCAEnCziE,EAAE,oCAGP,WAACwb,EAAAA,EAASA,CAAAA,WACP,EAKG,KAJF,WAACD,EAAAA,EAAQA,CAAAA,CAACnK,GAAG,8BACX,WAAC3S,MAAAA,CAAIC,UAAU,qCAA2B,IAAEsB,EAAE,sCAC9C,UAACuU,EAAAA,EAA0BA,CAAAA,CAACjB,aAAa,MAAMoB,UAhDtC,CACjB,CAAE5B,UAAW,IAAKC,eAAgB,GAAI,EACtC,CAAED,UAAW,IAAKC,eAAgB,GAAI,EACtC,CAAED,UAAW,IAAKC,eAAgB,GAAI,EACtC,CAAED,UAAW,IAAKC,eAAgB,GAAI,EACvC,MA8CMwkC,EACC,WAACh8B,EAAAA,EAAQA,CAAAA,CAACnK,GAAG,gCACX,UAAC3S,MAAAA,CAAIC,UAAU,oCAA4BsB,EAAE,qCAC7C,UAACuU,EAAAA,EAA0BA,CAAAA,CAACjB,aAAa,MAAMoB,UAhDrC,CAClB,CAAE5B,UAAW,IAAOC,eAAgB,GAAM,EAC1C,CAAED,UAAW,IAAOC,eAAgB,GAAM,EAC1C,CAAED,UAAW,KAAOC,eAAgB,IAAM,EAC1C,CAAED,UAAW,KAAOC,eAAgB,IAAM,EAC3C,CA2CgF0B,cAAc,SAErF,UAIZ,EC7CMouD,EAAa,CACjB,CAAE/vD,UAAW,IAAKC,eAAgB,GAAI,EACtC,CAAED,UAAW,IAAKC,eAAgB,GAAI,EACtC,CAAED,UAAW,IAAKC,eAAgB,GAAI,EACtC,CAAED,UAAW,IAAKC,eAAgB,GAAI,EACvC,CAEK+vD,EAAY,CAAC,eAAgB,QAAS,WAAY,OAAQ,SAAU,SAAS,CAEtEC,EAAoB,CAAC,QAAEviE,CAAM,WAAEC,CAAS,CAA8B,IACjF,GAAM,CAAET,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,CAAC,yBAA0B,eAAe,EACjE,YAAEq+C,CAAU,CAAE,CAAG0kB,CAAAA,EAAAA,EAAAA,EAAAA,CAAWA,GAC5B,CAAErhE,gBAAiBC,CAAe,QAAEC,CAAM,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAgBA,GAC/DkG,EAAciqD,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,GAE5B1iD,EAAUC,CAAAA,EAAAA,EAAAA,EAAAA,CAAOA,CAAoB,CACzCC,cAAe,CAAEhB,YAAa,WAAY,EAC1CiB,KAAM,WACR,GACM,CAAEC,WAAS,CAAEvJ,OAAK,CAAE,CAAGmJ,EAEvB0zD,EAAmB,KACvB78D,IACI3F,GAAWA,GACjB,EACMyiE,EAAwB,MAAOhwB,IACnC,IAAMiwB,EAAkBjwB,GAAU4H,MAC5BD,EAAU3H,GAAU2H,QACtB8R,EAAW,MACf,GAAI,CAAC,EAAsB9R,EAAS,CAClC,IAAIgG,EAA4B,CAAC,EACjC,GAAI,CACFA,CAHsB,CAGR,MAAMqT,CAAAA,EAAAA,EAAAA,EAAAA,CAAsBA,CAAClsD,EAAa,CACtDihC,QAASk6B,UACTtoB,EACAI,aAAcr5C,GAAiBq5C,aAC/B9yC,SAAUtG,GAAQwL,QAAU,IAC9B,GACAs/C,EAAW9L,GAAa9X,SAASC,OAAO2jB,UAAY,KACtD,CAAE,MAAOtyD,EAAO,EACVA,aAAiBC,OAA0B,UAAjB,OAAOD,CAAU,GAC7CE,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAC,eAAgBF,EAAO,+BACpC,CACF,CAEA,IAAM+oE,EACJlwB,GAAUzkC,aAAeykC,GAAUzkC,cAAgB,YAC9C,CAACykC,GAAUzkC,YAAaykC,GAAUzkC,YAAY,MAC/ChK,EAEA+lD,EAA+B,CACnCM,aAAc5X,EAAS7kC,SAAS,CAChC48C,QAASmY,EACTzW,WACA5Q,UAAW7I,GAAUgI,cAAca,SACrC,EACMsnB,EAAoBlW,CAAAA,EAAAA,EAAAA,EAAAA,CAAkBA,CAAC,CAC3C9/C,OAAQxL,EAAOwL,MAAM,EAAI,eACzBm9C,EACAD,UAAU,CACZ,GACAvpD,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC2hE,EAAAA,EAAKA,CAACW,0BAA0B,EAC3CL,IACAnlE,OAAOM,QAAQ,CAACmlE,MAAM,CAACF,EACzB,EACM,CAACG,EAA6BC,EAA+B,CAAGznD,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GAE/EpZ,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACJpC,GAAQijE,GAA+B,EAC7C,EAAG,CAACjjE,EAAO,EAEX,GAAM,CACJutB,UAAQ,CACRF,aAAc,CAAEC,EAAG41C,CAAsB,CAAE,CAC5C,CAAG11C,CAAAA,EAAAA,EAAAA,EAAAA,CAAmBA,CAAC,CACtBC,QAAS01C,EAAAA,EAAiCA,CAAC11C,OAAO,CAClDE,cAAeq1C,CACjB,GAEA,MACE,UAAC1zD,EAAAA,EAAYA,CAAAA,CAAE,GAAGP,CAAO,UACvB,WAAChP,EAAAA,EAAMA,CAAAA,CACLC,OAAQA,EACRC,UAAWwiE,EACXviE,KAAK,KACLlE,MAAOwD,EAAE,uCAER4jE,GATuCF,EAUtC,UAAClB,EAAgBA,CAAAA,GAEjB,UAFiBA,CAEjB,sBACE,WAAC/jE,MAAAA,CAAIC,UAAU,qCAA2B,IAAEsB,EAAE,sCAC9C,UAACuU,EAAAA,EAA0BA,CAAAA,CAACjB,aAAa,MAAMoB,UAAWmuD,OAG9D,WAACpkE,MAAAA,WACC,UAACA,MAAAA,CAAIC,UAAU,gBACb,UAAC02D,EAAAA,EAAgBA,CAAAA,CACf9W,WAAYA,EAEZn2C,SAAUtG,EAAOwL,MAAM,EAAI,KAC3BwU,UAAU,EACVwzC,YAAar1D,EAAE,4BACfm+C,UAAWv8C,GAAiBq5C,cAJxB,wBAOR,WAACx8C,MAAAA,WACC,WAACA,MAAAA,CAAIC,UAAU,qCACZsB,EAAE,iCAAkC,IACrC,WAACiB,OAAAA,CAAKvC,UAAU,sCAA4B,IAAEsB,EAAE,yBAAyB,UAE3E,UAACvB,MAAAA,CAAIC,UAAU,0EACZokE,EAAUt8D,GAAG,CAAC,GACb,UAAC/H,MAAAA,CAAkBC,UAAU,qCAC3B,UAACkT,EAAAA,EAASA,CAAAA,CACRR,GAAIG,EACJvM,MACE,UAACvG,MAAAA,CAAIC,UAAU,4BACb,UAACuC,OAAAA,CAAKvC,UAAU,oBAAYsB,EAAE,CAAC,UAAU,EAAEuR,EAAAA,CAAS,MAGxDO,eAAe,mBACfrW,KAAK,YACL8B,KAAK,WACLkO,MAAO8F,KAXDA,SAiBhB,UAAC3Q,SAAAA,CACCrD,KAAK,SACLmB,UAAU,gCACVoC,QAAS,IAAMoiE,EAAsBvzD,cAEpC3P,EAAE,6CAMf,ECjKa6jE,EAA+B,KAC1C,GAAM,GAAE7jE,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,CAAC,yBAAyB,EACjD,CAAC6jE,EAA2BC,EAA6B,CAAG/nD,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GAQ3E,MACE,iCACE,UAACvd,MAAAA,CAAIC,UAAU,mHACb,UAACD,MAAAA,CAAIC,UAAU,yDACb,UAACkC,SAAAA,CACClC,UAAU,0DACVoC,QAZwB,CAYfkjE,IAXjBD,GAA6B,EAC/B,EAWUxmE,KAAK,kBAEJyC,EAAE,0CAIT,UAAC+iE,EAAiBA,CAChBviE,OAAQsjE,EACRrjE,KAFgBsiE,KAhBa,CAkBlBkB,IAjBfF,GAA6B,EAC/B,MAoBF,EAAE,qCCMK,IAAMG,EAAe,CAAC,WAC3Bl4D,CAAS,SACTm4D,CAAO,0BACPC,CAAwB,iBACxBC,CAAe,SACfC,CAAO,CACW,IAClB,IAAMxa,EAASmI,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,GACvB7kB,EAAUiK,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,GACpBj5C,EAAW4kE,CAAAA,EAAAA,EAAAA,EAAAA,CAAWA,GACtBuB,EAAWC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,GACzB,GAAExkE,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,CAAC,wBAAyB,gBAAiB,kBAAkB,EACpFkI,EAAW0M,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,GAAGxH,MAAM,EAAI,KACjC8kB,EAAWC,CAAAA,EAAAA,EAAAA,EAAAA,CAAWA,GACtB,sBAAEqyC,CAAoB,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,CAAAA,CAAmBA,GAC9C,WAAEpjE,CAAS,CAAE,CAAGqhC,CAAAA,EAAAA,EAAAA,EAAAA,CAAOA,GAEvB,QAAE9gC,CAAM,CAAEF,gBAAiBgjE,CAAqB,CAAE,CAAG7iE,CAAAA,EAAAA,EAAAA,EAAAA,CAAgBA,GAErE,oBACJ8iE,CAAkB,kBAClBplD,EAAmB,EAAE,UACrBg4B,CAAQ,UACRqtB,CAAQ,iBACRttB,CAAe,CAChB,CAAGE,CAAAA,EAAAA,EAAAA,EAAAA,CAAWA,GACTt6B,EAAqBu6B,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,GAEnC,CACJp1C,mBAAoBwiE,CAAoB,CACxCziE,eAAgB0iE,CAAgB,UAChCxiE,CAAQ,CACT,CAAGE,CAAAA,EAAAA,EAAAA,EAAAA,CAAWA,CAACZ,EAAOa,MAAM,EACvBsiE,EACJH,EAASviE,kBAAkB,EAC3ByiE,GACAD,GACAD,EAASI,QAAQ,EACjBJ,EAASriE,SAAS,EAClBqiE,EAASK,iBAAiB,CAEtB,mBAAEC,CAAiB,YAAEtzC,CAAU,CAAE,CAAGuzC,CAAAA,EAAAA,EAAAA,EAAAA,CAAmBA,CAAC7iE,GAExD,SACJuL,CAAO,WACPmR,CAAS,CACTssC,SAAM,WACNX,EAAS,SACT/P,EAAO,UACPgR,EAAQ,WACR9P,EAAS,oBACTC,EAAkB,cAClBf,EAAY,mBACZ8Q,EAAiB,OACjBhC,EAAK,OACLjP,EAAK,KACLmR,EAAG,CACJ,CAAG0Y,GAAyB,CAAC,EAExBhU,GAAc5kC,CAAAA,EAAAA,EAAAA,EAAAA,CAAaA,CAAC,uBAE5Bs5C,GAAsE,MAAO,CACjFnyB,UAAQ,KACRz5C,CAAG,CACH4T,OAAQi4D,CAAc,CACvB,IAMC,GAJInzC,GAAUogB,eAAegzB,UAAU,CAAC,iBACxCvkE,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC,gBACXA,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAAC2hE,EAAAA,EAAKA,CAAC6C,YAAY,EAEzB/rE,EAAK,CAKP,GAHA8qE,EAAS,CAAEhnE,KAAM,wBAAyBkoE,QAAS,EAAE,GAGjDvyB,GAAUnoB,OAAOvpB,aAAe0xC,GAAUnoB,OAAO0vB,eAAe,KAKlE,CAJIoqB,EAASa,gBAAgB,EAAE,EAEpB,CAAEnoE,KAAM,iBAAkBkoE,QADb,CAAE,GAAGZ,CAAQ,CAAEa,kBAAkB,CAAM,CACH,GAExDJ,IAAmBzjE,EAAOwL,MAAM,EAAE,OACtBjP,QAAQ,CAACmlE,MAAM,CAAC9pE,GAEzB,MAAMoI,EAAOqB,IAAI,CAACzJ,GAE3B,IAAMksE,EAAkBzyB,GAAU2H,UAAY,OAAS3H,GAAU2H,aAAUp2C,EAC3E,GAAI,CACF,IAAMo8C,EAAc,MAAMqT,CAAAA,EAAAA,EAAAA,EAAAA,CAAsBA,CAACpK,EAAQ,CACvD7gB,QAASiK,GAAU4H,MACnBD,QAAS8qB,EACT1qB,aAAc/H,GAAU+H,aACxB9yC,SAAUtG,GAAQwL,QAAU,IAC9B,GACKy3D,GACH13B,EAAQw4B,qBAAqB,CAAC,CAC5BC,mBAAoBhlB,GAAa9X,SAASC,OAAOvtC,MAAQ,EAC3D,EACJ,CAAE,MAAOpB,EAAO,EACVA,aAAiBC,OAA0B,UAAjB,OAAOD,CAAU,GAC7CE,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAC,kBAAmBF,EAAO,+BACvC,CACA,MAAMwH,EAAOqB,IAAI,CACfzJ,OACAgL,EAEA,CAAEqhE,QADF,CACoC,EAExC,CACF,EAEMC,GACJtB,GAAwB3pB,GAAQA,GAAQqqB,GAAqBd,EAEzD50D,GAAgB7S,EAAAA,OAAa,CACjC,IAAO,EACLoP,EAX8C,QAWnC64D,GAAUmB,yBAA2Bh6D,EAAY,KAC5D7I,QAAS7B,GAAW6B,QACpB4nB,MAAO,WACL9L,CACF,EACA47B,QAASA,IAAWypB,GAAW,GAC/BxpB,MAAOjpB,EAAa,GAAKk0C,GACzB7qB,aAAc,WACZa,EACF,EACF,EAEA,CACE/vC,CAFF,CAGEiT,EACA47B,GACAypB,EACAzyC,EACAk0C,GACAhqB,GACAz6C,GAAW6B,QACZ,EAGG8iE,GAAcC,UAAUtoE,KAAKC,QAbsB,CAab,CAAC4R,KAGvC,CAAE4e,wBAAqB,uBAAEC,EAAqB,CAAE,CAAG63C,CAAAA,EAAAA,EAAAA,CAAAA,CAAeA,GACxE,OAAOh0C,GAAYtwB,EAAOJ,OAAO,CAC/B,WAAChD,MAAAA,CACCC,UAAWmC,IAAG,QAAS,CACrB,OADWA,2BACwB,CAACikE,EACpC,MAAOC,EACP,wBAAyBD,EACzB,QAASA,GAAwB,CAACnU,GAClC,aAAcmU,GAAwBnU,EACxC,aAEA,UAAClyD,MAAAA,CAAIC,UAAWmC,IAAG,CAAE,eAAHA,SAA4B8vD,EAAY,YACxD,WAACmL,EAAAA,EAAQA,CAAAA,CACPnS,uBAAwB,CACtBc,kBAAmBma,EACnB54D,UAAW64D,GAAUmB,yBAA2Bh6D,EAAY,aAC5D8B,EACA68C,gBAAiBnrC,SACjB+rC,GACAJ,OAAQ3T,EACRsT,aAAcnsC,CAAAA,EAAAA,EAAAA,EAAAA,CAAeA,CAACxB,GAAoBG,gBAClD0tC,aAAcrsC,CAAAA,EAAAA,EAAAA,EAAAA,CAAeA,CAACxB,GAAoBW,cAClDmtC,QAASzsC,CAAAA,EAAAA,EAAAA,EAAAA,CAAiBA,CAACrB,GAAoB1O,aAC3C0O,GAAoB1O,iBACpBhK,EACJymD,qBAAsBrsC,CAAAA,EAAAA,EAAAA,EAAAA,CAAgBA,CAAC1B,GAAoBU,yBAC3D+sC,sBACA5O,YACA6P,GACAG,mBAAoBD,IAAmB5xD,KAAK,WAC5C4vD,GACAhO,UAAWxE,MACX0U,EACF,EACA2F,gBAAiBkT,EACjBtT,IAAK2S,EACL10D,cAAeA,GAEftH,SAAUA,EACV0hD,6BAA6B,EAC7B56C,SAAUo2D,GACVjc,cAAc,SACdv4B,iBAAkBhwB,IAAGulE,EAAAA,EAAmCA,CAACxsB,KAAK,CAAC,GAAI,EAA/C/4C,kBACpBmxD,gCAAgC,EAChCpxC,gBAAgB,EACf,GAAI,CAACkkD,GAAwB,CAC5BhT,eAAgB,CACda,mBAAmB,EACnBp1D,KAAM,SACNmzD,iBAAiB,EACjBgE,iBAAkB,cACpB,CACF,CAAC,WAED,UAACU,EAAAA,EAAgBA,CAAAA,CACf9W,WAAYlgD,EAASioE,oBAAoB,CAEzCl+D,SAAUA,EACVktD,YAAa2P,OAAyBvgE,EAAYzE,EAAE,+BACpD4hB,QAAQ,IACRu8B,UAAWlD,IAJN,CAAC,UAAU,EAAEkqB,EAAAA,CAAmB,EAOvC,UAACmB,EAAAA,EAAaA,CAAAA,CACZ5P,kBAAmB,GACnBvuD,SAAUA,EAEVpI,OAAQ,KACNsuB,IACF,EACAyoC,eAAgB92D,EAAE,+BACjB,GAAGsuB,EAAqB,GAE3B,UAACzD,EAAAA,CAAcA,CAAAA,CAACrpB,YAAY,eAC3BsjE,EACC,iCACE,UAACtM,EAAAA,EAAaA,CAAAA,CACZ+N,SAAU,CAAE1M,IAAK,EAAGa,IAAK,EAAG,EAC5B8L,sBAAuBxmE,EAAE,+CAE3B,UAACm6D,EAAAA,EAAoBA,CAAAA,CAAAA,MAErB,OA7CC8L,MAgDRnB,EAAuB,UAACjB,EAA4BA,CAAAA,GAAM,QAE3D,IACN,EAAE,QAHyDA,yGE7PpD,IAAM4C,EAAsD,CAAC,UAClE9iE,CAAQ,WACRjF,CAAS,SACT4L,CAAO,gBACPo8D,CAAc,CACd,GAAGhqE,EACJ,IACC,GAAM,CAAEsD,GAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,eACvBmR,EAAKxU,EAAAA,KAAW,GAChB+pE,EAAQ,CAAC,QAAQ,EAAEv1D,EAAAA,CAAI,CACvB,CAACw1D,EAAcC,EAAgB,CAAGjqE,EAAAA,QAAc,CAAe,WAC/D,CAACioC,EAASiiC,EAAW,CAAGlqE,EAAAA,QAAc,EAAC,GAEvCwiC,EAAYxiC,EAAAA,MAAY,CAAC,MACzBmqE,EAAanqE,EAAAA,MAAY,CAAC,MAC1BoqE,EAAcjtD,CAAAA,EAAAA,EAAAA,CAAAA,CAAOA,CAAC,CAAElb,IAAKkoE,CAAW,GACxCE,EAAaltD,CAAAA,EAAAA,EAAAA,CAAAA,CAAOA,CAAC,CAAElb,IAAKugC,CAAU,GACtC5J,EAAS0xC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAACD,EAAYD,GAEpCG,EAAOvqE,EAAAA,WAAiB,CAC5B,KACgB,WAAVwqE,GAAsBR,IAAiBQ,CAAAA,GAAO,CAChDN,GAAW,GACXD,EAAgB,WAEpB,EACA,CAACD,EAAa,EAEVS,EAAQD,IACS,SAAS,CAA1BR,IACJE,GAAW,GACXD,EAAgBO,GAClB,EAcA,OAZAxqE,EAAAA,SAAe,CAAC,KACd,IAAM6a,EAAY,IACZotB,GAAqB,UAAU,CAApB17B,EAAE1C,GAAG,EAClB0gE,EAAK,SAET,EAEA,OADArpE,OAAOS,gBAAgB,CAAC,UAAWkZ,GAC5B,KACL3Z,OAAOU,mBAAmB,CAAC,UAAWiZ,EACxC,CACF,EAAG,CAAC0vD,EAAMtiC,EAAQ,EAGhB,WAAC5jC,OAAAA,CAAKvC,UAAU,qBACd,UAACkC,SAAAA,CACCrD,KAAK,SACLmB,UAAWA,EACXG,IAAKugC,EACL56B,mBAAkBmiE,EAClB5f,OAAQ,IAAMogB,EAAK,SACnB9rD,QAAS,IAAMgsD,EAAK,SACpBC,YAAa,IAAMD,EAAK,SACxBE,WAAY,IAAMJ,EAAK,SACtB,GAAGzqE,CAAI,UAEPiH,IAEH,UAAC1C,OAAAA,CACCmQ,GAAIu1D,EACJ9nE,IAAKkoE,EACL3nE,KAAK,UACLC,cAAa,CAACwlC,EACdnmC,UAAWmC,IACT,gBADWA,kFAEX6lE,EACA,CAAEh5C,MAAOmX,EAAS3pB,OAAQ,CAAC2pB,CAAQ,GAErCtP,MAAOC,EACP1wB,aAAY9E,EAAE,kBAEbsK,MAIT,EAAE,4JEvDF,IAAMk9D,EAA0D,CAAC,CAC/DC,SAAUC,CAAY,cACtBC,CAAY,cACZC,CAAY,UACZrB,CAAQ,OACR1zD,CAAK,cACLg1D,CAAY,cACZC,EAAe,CAAC,CACjB,IACC,GAAM,CAAC9nE,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,aACrB,UAAEgW,CAAQ,OAAEgxB,CAAK,SAAE4c,CAAO,SAAEC,CAAO,CAAE,CAAG5tC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,GACtD6xD,GAAqBtrD,CAAQ8pD,EAC7ByB,EAAW,CAAC,MAAM,EAAEn1D,EAAM,OAAO,CAAC,CAClCo1D,EAAa,CAAC,MAAM,EAAEp1D,EAAM,SAAS,CAAC,CACtC40D,EAAWC,GAAgBnB,GAAU7L,IACrCwN,EAAYT,EAAWznE,EAAE,sBAAuB,UAAEynE,CAAS,GAAK,GAChE,QAAEr+B,CAAM,QAAEzL,CAAM,QAAEg7B,CAAM,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAaA,CAAC,SAC/C/U,EACApoD,KAAMwsE,CACR,GACMpP,EAAa5xB,EAAM,SACnB0T,EAAWke,GAAY57D,QAAU,EACjC+9C,EAAS/T,EAAM+gC,GACfrkE,EAAWsjC,EAAMghC,IAAe,EAAE,CAClCE,EAAUt1D,EAAQ,EAClBu1D,EAAa,CAAC,WAAW,EAAED,EAAAA,CAAS,CAgB1C,OAdAvrE,EAAAA,SAAe,CAAC,KASdyrE,CARsC,UACpC,GAAIj/B,EAAOnsC,MAAM,CAAG,GAAK2qE,EAAc,CAErC,IAAMxgE,EAAQgiC,EAAO5iC,GAAG,CAAC,CAACqhC,EAAO1yB,IAAM,GAAG8yD,EAAW,CAAC,EAAE9yD,EAAE,IAAI,CAAC,CAE/D,OAAM2uC,EAAQ18C,EAChB,EACF,IACgCisC,KAAK,CAAC,GACpC94C,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAC,YAAaF,EAAO,oCAGjC,EAAG,CAAC+uC,EAAQw+B,EAAa,EAEvB,WAACnpE,MAAAA,CAAIiI,cAAa0hE,YAChB,UAAC3pE,MAAAA,CAAIC,UAAU,UAAUiI,YAAU,kBACjC,UAAC1F,OAAAA,UAAM,GAAG05C,EAAW,EAAI,GAAG36C,EAAE,oBAAqB,CAAEu9D,IAAK4K,CAAQ,GAAG,CAAC,CAAC,CAAG,GAAG,CAAC,EAAEnoE,EAC9E,kBACA,CACEiR,MAAO+pC,CACT,GACA,EAAE,EAAEh7C,EAAE,kBAAmB,CAAEiR,MAAOtN,EAAS1G,MAAM,GAAC,CAAI,KAE1D,WAACwB,MAAAA,CAAIC,UAAU,wCACb,WAACD,MAAAA,CAAIC,UAAU,oCACZi8C,EAAW,GACV,WAAC/5C,SAAAA,CACC8F,cAAa,GAAG0hE,EAAW,OAAO,CAAC,CACnC7qE,KAAK,SACLmB,UAAU,+FACVoC,QAAS,IAAM+mE,EAAah1D,aAE5B,UAAC5R,OAAAA,CAAKvC,UAAU,mBAAWsB,EAAE,uBAAwB,CAAEu9D,IAAK4K,CAAQ,KACpE,UAAChpE,MAAAA,CAAIC,KAAK,MAAMC,aAAW,IAACC,QAAQ,YAAYZ,UAAU,iCACxD,WAACa,IAAAA,CAAEC,KAAK,OAAOo3B,SAAS,UAAU7W,UAAU,iCAC1C,UAACuoD,UAAAA,CACCvoD,UAAU,2BACVlf,GAAG,SACHgf,GAAG,SACH0oD,GAAG,OACHC,GAAG,WAEL,UAAC/oE,OAAAA,CAAKC,EAAE,8DAKhB,UAACuB,OAAAA,UAAMjB,EAAE,iBAAkB,CAAEu9D,IAAK4K,CAAQ,QAE5C,UAAC1pE,MAAAA,CAAIC,UAAU,iBACb,UAACu8D,EAAAA,CAAOA,CAAAA,CACNC,aAAc,KACZjlD,EAAS+xD,EAAUhtB,EAAS,EAAG,CAAEgb,aAAa,EAAMC,gBAAgB,CAAK,EAC3E,EACAkF,YAAa,KACXllD,EAAS+xD,EAAUhtB,EAAS,EAAG,CAAEgb,aAAa,EAAMC,gBAAgB,CAAK,EAC3E,EACA4D,IAAK,EACLa,IAAKoN,EAAenkE,EAAS1G,MAAM,CACnCwO,MAAOuvC,EACPogB,WAAYp7D,EAAE,kBAAmB,CAAEiR,MAAO+pC,CAAO,GACjDqgB,UAAWr7D,EAAE,qBAAsB,CAAEu9D,IAAK4K,YAASD,CAAU,GAC7D3M,WAAYv7D,EAAE,wBAAyB,CAAEu9D,IAAK4K,YAASD,CAAU,OAGrE,UAACzpE,MAAAA,CAAIC,UAAU,iBACb,UAACu8D,EAAAA,CAAOA,CAAAA,CACNC,aAAc,KACZv9B,EAAOyL,EAAOnsC,MAAM,CAAG,EACzB,EACAk+D,YAAa,KAEXxC,EAAO,CAAEhK,IAAK,IAAK,EAAG,CAAE8Z,aAAa,CAAM,EAC7C,EACA5O,IAAK,EACLa,IAAKiN,EAAe,EAAIG,EAAe9sB,EACvCvvC,MAAO9H,EAAS1G,MAAM,CACtBm+D,WAAYp7D,EAAE,kBAAmB,CAAEiR,MAAOtN,EAAS1G,MAAM,GACzDo+D,UAAWr7D,EAAE,qBAAsB,CAAEu9D,IAAK4K,CAAQ,GAClD5M,WAAYv7D,EAAE,wBAAyB,CAAEu9D,IAAK4K,CAAQ,UAK3DJ,GAAsBpkE,EAAS1G,MAAM,CAAG,GACvC,WAACwB,MAAAA,CAAIC,UAAU,OAAOgI,cAAY,4BAChC,WAACya,KAAAA,CAAGziB,UAAU,+DACZ,UAACuC,OAAAA,UAAMjB,EAAE,yBACT,UAACymE,EAAAA,CAAOA,CAAAA,CAACn8D,QAAStK,EAAE,0BAA2BtB,UAAU,uCACvD,UAACsS,EAAAA,EAAIA,CAAAA,CAACvV,KAAK,cAAck9B,QAAQ,UAAUj4B,KAAK,YAGpD,UAACjC,MAAAA,CAAIC,UAAU,iDACZ0qC,EAAO5iC,GAAG,CAAC,CAACqhC,EAAO1yB,KAClB,IAAMuzD,EAAY,GAAGT,EAAW,CAAC,EAAE9yD,EAAE,IAAI,CAAC,CACpCwzD,EAAQxzD,EAAI,EAEZ+M,EAAmC,CACvC83C,eAAe,EACf3tB,SAAU,UACR,MAAMyX,EAAQ4kB,EAChB,CACF,EAIA,OAHId,IACF1lD,EAAgBN,QADA,CACW5hB,EAAE,4BAG7B,WAAC4iB,EAAAA,EAAUA,CAAAA,CAETlc,cAAa,GAAG0hE,EAAW,UAAU,EAAEO,EAAAA,CAAO,CAC9CltE,KAAMitE,EACN52D,eAAe,0BACfsE,mBAAmB,aACnBpR,MAAOhF,EAAE,qBAAsB,CAAEu9D,IAAKoL,CAAM,GAC5CzmD,gBAAiBA,YAEjB,UAACsnB,SAAAA,CAAO5+B,QAAQ,IAACa,MAAM,KACtBF,MAAMiK,IAAI,CAAC,CAAEvY,OAAQspE,EAAU7L,GAAG,CAAG6L,EAAU1M,GAAG,GAAIrzD,GAAG,CAAC,CAACoiE,EAAIC,KAC9D,IAAMp9D,EAAQo9D,EAAItC,EAAU1M,GAAG,CAC/B,MACE,UAACrwB,SAAAA,CAA2D/9B,MAAOA,WACtD,IAAVA,EAAczL,EAAE,sBAAwByL,GADpB,IAAVA,EAAczL,EAAE,sBAAwByL,EAIzD,KAhBKo8B,EAAMz2B,EAAE,CAmBnB,UAMZ,EC9Ka2nD,EAAUh8D,OAAOqoC,MAAM,CAAC,CAAE4V,OAAQ,EAAGr3C,SAAU,EAAE,GAAI,EACH,CAAC,CAC9D8jE,SAAUC,CAAY,cACtBE,CAAY,UACZrB,CAAQ,UACRuC,EAAW,CAAC,cACZhB,EAAe,CAAC,uBAChBtB,CAAqB,CACrBmB,cAAY,CACb,IACC,IAAMF,EAAWC,GAAgBnB,GAAU7L,IACrC,CAAC16D,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,aACrBm/B,EAAYxiC,EAAAA,MAAY,CAAoB,MAC5C,QAAEwsC,CAAM,QAAEuvB,CAAM,CAAEh7B,QAAM,CAAE,CAAGi7B,CAAAA,EAAAA,EAAAA,EAAAA,CAAaA,CAAC,CAAEn9D,KAAM,OAAQ,GAC3Ds/C,EAAwB+J,CAAAA,EAAAA,EAAAA,EAAAA,CAAQA,CAAC,CAAErpD,KAAM,OAAQ,GACjDstE,EACJvC,GACAzrB,GAAO3vC,KAAK,GAAUqjD,EAAKzT,MAAM,CAAGyT,EAAK9qD,QAAQ,CAAC1G,MAAM,GAAK6qE,GAGzDkB,EAAmB,IACvBrrC,EAAOpe,GACH6f,EAAUzhC,OAAO,EAAE,EACXA,OAAO,CAACsf,KAAK,EAE3B,EAEA,MACE,iCACE,UAACxe,MAAAA,CAAIC,UAAU,kBACb,WAACD,MAAAA,CAAIC,UAAU,OAAOW,aAAW,cAC/B,UAAC4B,OAAAA,CAAKvC,UAAU,wDACbsB,EAAE,0BAEL,WAACiB,OAAAA,CAAKvC,UAAU,wCACbsB,EAAE,yBACFynE,GAAY,WAACxmE,OAAAA,CAAKvC,UAAU,qCAA2B,IAAE+oE,EAAS,WAErE,UAACxmE,OAAAA,CAAKvC,UAAU,uCAA+BsB,EAAE,gCAGrD,UAACvB,MAAAA,CAAImG,mBAAiB,QAAQlG,UAAU,wBAAwBgI,cAAY,iBACzE0iC,EAAO5iC,GAAG,CAAC,CAACqhC,EAAOh1B,IAClB,UAAC20D,EAASA,CAER30D,MAFQ20D,EAGRjB,SAAUA,EACVsB,aAAcmB,EACdpB,aAAcA,EACdE,aAAcA,EACdH,aAAcA,EACdF,SAAUA,GAPL5/B,EAAMz2B,EAAE,KAWlBu2D,GAAgBF,EACf,UAAC/lD,IAAAA,CAAEhjB,UAAU,wBAAgBsB,EAAE,2BAA4B,UAAEynE,CAAS,KACpE,KACHsB,EACC,UAACtqE,MAAAA,CAAIC,UAAU,0CACb,UAACgjB,IAAAA,CAAEhjB,UAAU,sBAAsBiI,YAAU,YAAYvH,KAAK,iBAC3DonE,MAGH,KACJ,UAAC/nE,MAAAA,CAAIC,UAAU,8DACZuqE,IAhDuBH,EAiDtB,UAACpnD,IAAAA,CAAEhjB,UAAU,mBAAWsB,EAAE,8BAE1B,WAACY,SAAAA,CACCrD,KAAK,SACLmJ,cAAY,iBACZ7H,IAAKugC,EACL1gC,UAAU,mKACVoC,QAAS,KACP63D,EAAO,CAAE,GAAGI,CAAO,EACrB,EACAnuD,SAAUw+B,EAAOnsC,MAAM,EAAI6rE,YAE3B,UAAC3pE,MAAAA,CAAIC,KAAK,MAAMC,aAAW,IAACC,QAAQ,YAAYZ,UAAU,oCACxD,WAACa,IAAAA,CAAEC,KAAK,OAAOo3B,SAAS,UAAU7W,UAAU,6BAC1C,UAACuoD,UAAAA,CAAQznE,GAAG,OAAOgf,GAAG,SAAS0oD,GAAG,OAAOC,GAAG,WAC5C,UAAC/oE,OAAAA,CAAKwgB,cAAc,SAASvgB,EAAE,8CAGlCM,EAAE,4BAMf,EAAE,eCrGF,IAAMkpE,EAA4D,CAAC,CACjE3C,UAAQ,CACRqB,cAAY,cACZlnD,CAAY,UACZooD,CAAQ,uBACRtC,CAAqB,UACrBv3D,CAAQ,QACRzO,CAAM,CACP,IACC,GAAM,CAACR,EAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,aACrB6gB,EAAoBlkB,EAAAA,OAAa,CAAC,IAAM8jB,EAAc,CAACA,EAAa,EACpEyoD,EAAmBvsE,EAAAA,MAAY,CAAoB,MAEnD2S,EAAUC,CAAAA,EAAAA,EAAAA,EAAAA,CAAOA,CAAoB,CACzCE,KAAM,YACNiR,aAAc,MACd,GAAGG,CAAiB,GAEhB,UAAE7K,CAAQ,aAAE+wB,CAAW,WAAEr3B,CAAS,CAAE,CAAGJ,EACvCwrC,EAAwBprC,IAAYorC,KAAK,CACzCquB,EAAiCruB,GAAO3vC,KAAK,GAAUqjD,GAAM9qD,UAAU1G,QAU7E,MACE,UAAC6S,EAAAA,EAAYA,CAAAA,CAAE,GAAGP,CAAO,UACvB,WAAC3I,EAAAA,EAAYA,CAAAA,CACXpG,OAAQA,EACRE,KAAK,KACLuD,oBAAoB,IACpByC,cAAY,cACZrB,SAfa,CAeHgkE,IAddriC,IACA+T,GAAOpgD,QAAQ,CAAC2uE,EAAOz2D,KACrBoD,EAAS,CAAC,MAAM,EAAEpD,EAAM,SAAS,CAAC,CAAE,EAAE,CACxC,GACAs2D,GAAkBxrE,SAASsf,OAC7B,EAUM3X,UAAW,IAAM2J,IAAWU,KAC5B1J,cAAe,CACbd,OAAQ,CACNH,MAAOhF,EAAE,4BACT4K,SAAU,CAACw+D,CACb,EACAhkE,QAAS,CAAEvG,IAAKsqE,CAAiB,CACnC,YAEA,WAAC1qE,MAAAA,CAAIC,UAAU,kCACb,UAAC8E,EAAAA,EAAWA,CAAAA,CAAC9E,UAAU,6BAAqBsB,EAAE,6BAC9C,UAAC0hB,IAAAA,UAAG1hB,EAAE,sCAGR,UAACo5D,EAAKA,CACJmN,EADInN,OACMmN,EACVuC,SAAUA,EACVlB,aAAcA,EACdpB,sBAAuBA,QAKjC,uDG1EO,IAAMvuC,EAAqB,IAC8B,IAAjC,QAAI,OAAOn6B,OAAOyrE,UAAU,EACrDzrE,OAAOyrE,UAAU,CAAC,oCAAoCC,OAAO,CAGtD30C,EAFP,CAGsB,CACxBC,GAJO,OAIC,CACRE,eAAa,iBACby0C,CAAe,aACfC,CAAW,CAMZ,GACD,IAiBE,IAAMC,EAAsB,YAAVxgE,EAAE1C,GAAG,CACjBmjE,EAAwB,cAAVzgE,EAAE1C,GAAG,CACnBojE,EAAc1gE,gBAAE1C,GAAG,CACnBqjE,EAAyB,eAAV3gE,EAAE1C,GAAG,CACtBkjE,IAAaE,CAAAA,GAAa,CAC5B1gE,EAAEvD,cAAc,GAChBmkE,CAtBqBz8C,IACrB,IAAMhR,EAAewY,EAAS1Y,SAAS,CAAC,GAAc0Y,IAAaxH,GACnE,GAAqB,IAAjBhR,EAAoB,CACtB0Y,GAAer3B,SAASsf,QACxB,MACF,CACA,IAAMsN,EAAUuK,EAASk1C,EAAE,CAAC1tD,EAAe,IAAM,KACjDiO,GAAStN,QACTwsD,IAAkBl/C,GACpB,EAagBphB,EAAED,MAAM,IAEpB0gE,GAAeE,CAAAA,GAAc,CAC/B3gE,EAAEvD,cAAc,GAChBqkE,CAhBgB,IAChB,IAAM3tD,EAAewY,EAAS1Y,SAAS,CAAC,GAAc0Y,IAAaxH,GAC7D/C,EAAUuK,EAASk1C,EAAE,CAAC1tD,EAAe,IAAM,KACjDiO,GAAStN,QACTysD,IAAcn/C,GAChB,EAWYphB,EAAED,MAAM,EAEtB,EAAE,gFEQG,IAAM+xD,EAAsD,CAAC,WAClEv8D,CAAS,SACTwrE,CAAO,WACPjkB,CAAS,KACTyU,CAAG,KACHb,CAAG,cACHqB,CAAY,aACZC,CAAW,CACX1vD,QAAQ,CAAC,YACT2vD,EAAa,EAAE,YACfG,CAAU,aACVC,CAAW,WACXH,CAAS,YACTC,CAAU,WACV6O,CAAS,CACTC,mBAAiB,CACjB,GAAG1tE,EACJ,IACC,IAAM2tE,EAAgB5+D,IAAUouD,EAC1ByQ,EAAe7+D,IAAUivD,EACzB,GAAE16D,CAAC,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAcA,CAAC,eAC7B,MACE,WAACxB,MAAAA,CAAIC,UAAWmC,IAAG,gBAADA,mBAAqCnC,GAAa,GAAGhC,CAAI,WACxE,CAAC,CAACwtE,GAAW,CAAC,CAACjkB,GACd,UAACvjC,QAAAA,CAAMtR,GAAI84D,EAAS3sE,KAAK,SAAS9B,KAAMwqD,EAAWx6C,MAAOA,IAE5D,WAAC7K,SAAAA,CACCrD,KAAK,SACLmB,UAAU,kDACVoC,QAASo6D,EACTtwD,SAAUy/D,EACVvlE,aAAYy2D,GAAcv7D,EAAE,cAC5B0G,cAAa80D,YAEb,UAACv6D,OAAAA,CAAKvC,UAAU,mBAAW68D,GAAcv7D,EAAE,gBAC3C,UAACb,MAAAA,CACCC,KAAK,MACLC,aAAW,IACXC,QAAQ,YACRZ,UAAWmC,IAAG,SAAU,CACtB,MADWA,iBACawpE,EACxB,iBAAkB,CAACA,CACrB,GACA90C,MAAO,CAAEvV,OAAQqqD,EAAgBD,EAAoBD,CAAU,WAE/D,WAAC5qE,IAAAA,CAAEC,KAAK,OAAOo3B,SAAS,UAAU7W,UAAU,6BAC1C,UAACuoD,UAAAA,CAAQznE,GAAG,OAAOgf,GAAG,SAAS0oD,GAAG,OAAOC,GAAG,WAC5C,UAAC/oE,OAAAA,CAAKwgB,cAAc,SAASvgB,EAAE,2CAIrC,WAACuB,OAAAA,CAAKvC,UAAU,qDACd,UAACuC,OAAAA,CAAKvC,UAAU,UAAUiI,YAAU,kBACjCy0D,GAAc3vD,IAEjB,UAACxK,OAAAA,CAAK5B,aAAW,aAAEoM,OAErB,WAAC7K,SAAAA,CACCrD,KAAK,SACLmB,UAAU,kDACVoC,QAASq6D,EACTvwD,SAAU0/D,EACVxlE,aAAYu2D,GAAar7D,EAAE,aAC3B0G,cAAa40D,YAEb,UAACr6D,OAAAA,CAAKvC,UAAU,mBAAW28D,GAAar7D,EAAE,eAC1C,UAACb,MAAAA,CACCC,KAAK,MACLC,aAAW,IACXC,QAAQ,YACRZ,UAAWmC,IAAG,SAAU,CACtB,MADWA,iBACaypE,EACxB,iBAAkB,CAACA,CACrB,GACA/0C,MAAO,CAAEvV,OAAQsqD,EAAeF,EAAoBD,CAAU,WAE9D,WAAC5qE,IAAAA,CAAEC,KAAK,OAAOo3B,SAAS,UAAU7W,UAAU,6BAC1C,UAACuoD,UAAAA,CAAQznE,GAAG,OAAOgf,GAAG,SAAS0oD,GAAG,OAAOC,GAAG,WAC5C,UAAC/oE,OAAAA,CAAKwgB,cAAc,SAASvgB,EAAE,mDAM3C,EAAE","sources":["webpack://_N_E/./components/search-header/header-constants.ts","webpack://_N_E/./components/search-header/header-utils.ts","webpack://_N_E/../../libs/utilities/get-language-direction/src/lib/get-language-direction.ts","webpack://_N_E/./components/osc-search-form/search-form-inputs.tsx","webpack://_N_E/../../libs/utilities/feature-toggles-configs/src/lib/getFeatureToggleConfig.ts","webpack://_N_E/../../libs/osc/login/src/lib/login.types.ts","webpack://_N_E/../../libs/osc/login/src/lib/frame.tsx","webpack://_N_E/../../libs/osc/login/src/lib/login.icon.tsx","webpack://_N_E/../../libs/osc/login/src/lib/login.tsx","webpack://_N_E/../../libs/osc/login/src/index.ts","webpack://_N_E/./hooks/use-initialize-conductrics.ts","webpack://_N_E/../../libs/osc/dialog-v2/src/lib/dialog.base.tsx","webpack://_N_E/../../libs/osc/dialog-v2/src/lib/dialog.tsx","webpack://_N_E/../../libs/osc/dialog-v2/src/lib/dialog-alert.tsx","webpack://_N_E/../../libs/osc/dialog-v2/src/lib/dialog-action-buttons.tsx","webpack://_N_E/../../libs/osc/dialog-v2/src/lib/dialog-action.tsx","webpack://_N_E/../../libs/osc/dialog-v2/src/lib/index.ts","webpack://_N_E/../../libs/osc/dialog-v2/src/index.ts","webpack://_N_E/../../libs/osc/speedbump/src/lib/gql/queries.ts","webpack://_N_E/../../libs/osc/speedbump/src/lib/hooks/useFeatureConfigs.ts","webpack://_N_E/../../libs/osc/speedbump/src/lib/use-speedbump.tsx","webpack://_N_E/../../libs/osc/speedbump/src/lib/speedbump.tsx","webpack://_N_E/../../libs/osc/speedbump/src/lib/index.ts","webpack://_N_E/../../libs/osc/speedbump/src/index.ts","webpack://_N_E/./components/meta-data/meta-data-utils.ts","webpack://_N_E/./components/meta-data/meta-data.tsx","webpack://_N_E/./components/meta-data/index.ts","webpack://_N_E/../../libs/osc/filters/src/lib/filters.modal.tsx","webpack://_N_E/../../libs/osc/filters/src/lib/filters.utilities.ts","webpack://_N_E/../../libs/osc/filters/src/lib/filters.tsx","webpack://_N_E/../../libs/osc/filters/src/lib/amenity-filters.tsx","webpack://_N_E/../../libs/osc/filters/src/lib/brand-filters.tsx","webpack://_N_E/../../libs/osc/filters/src/lib/show-available-hotels-only-filters.tsx","webpack://_N_E/../../libs/osc/filters/src/lib/trip-advisor-filters/trip-advisor-filters.constants.ts","webpack://_N_E/../../libs/osc/filters/src/lib/trip-advisor-filters/trip-advisor-filters.tsx","webpack://_N_E/../../libs/osc/filters/src/lib/trip-advisor-filters/index.tsx","webpack://_N_E/../../libs/osc/filters/src/lib/pricing-filter/utils/pricing-filter-constants.ts","webpack://_N_E/../../libs/osc/filters/src/lib/pricing-filter/utils/pricing-filter-utils.ts","webpack://_N_E/../../libs/osc/filters/src/lib/pricing-filter/filter-max-price-radio-buttons.tsx","webpack://_N_E/../../libs/osc/filters/src/lib/pricing-filter/price-filter-skeleton.tsx","webpack://_N_E/../../libs/osc/filters/src/lib/pricing-filter/pricing-filter.tsx","webpack://_N_E/../../libs/osc/filters/src/lib/pricing-filter/index.ts","webpack://_N_E/../../libs/osc/filters/src/lib/index.ts","webpack://_N_E/../../libs/osc/filters/src/index.ts","webpack://_N_E/../../libs/osc/tabs/src/lib/tabs.context.tsx","webpack://_N_E/../../libs/osc/tabs/src/lib/tabs.utils.ts","webpack://_N_E/../../libs/osc/tabs/src/lib/tab.button.tsx","webpack://_N_E/../../libs/osc/tabs/src/lib/tab.list.button.tsx","webpack://_N_E/../../libs/osc/tabs/src/lib/tab.list.tsx","webpack://_N_E/../../libs/osc/tabs/src/lib/scrollable/tab.list.tsx","webpack://_N_E/../../libs/osc/tabs/src/lib/tab.panel.tsx","webpack://_N_E/../../libs/osc/tabs/src/lib/tab.panels.tsx","webpack://_N_E/../../libs/osc/tabs/src/lib/tabs.tsx","webpack://_N_E/../../libs/osc/tabs/src/lib/util/icon-mapper.tsx","webpack://_N_E/../../libs/osc/tabs/src/lib/index.ts","webpack://_N_E/../../libs/osc/tabs/src/index.ts","webpack://_N_E/./components/filters/filter-utils.ts","webpack://_N_E/../../libs/osc/form/src/lib/form.error-icon.tsx","webpack://_N_E/../../libs/osc/form/src/lib/form.error.tsx","webpack://_N_E/../../libs/osc/form/src/lib/form.tsx","webpack://_N_E/../../libs/osc/form/src/lib/form.connector.tsx","webpack://_N_E/../../libs/osc/form/src/lib/form.help-message.tsx","webpack://_N_E/../../libs/osc/form/src/lib/form.label-helper.tsx","webpack://_N_E/../../libs/osc/form/src/lib/form.label.tsx","webpack://_N_E/../../libs/osc/form/src/lib/form.input.tsx","webpack://_N_E/../../libs/osc/form/src/lib/form.legend.tsx","webpack://_N_E/../../libs/osc/form/src/lib/form.card-number-input.tsx","webpack://_N_E/../../libs/osc/form/src/lib/form.select.tsx","webpack://_N_E/../../libs/osc/form/src/lib/form.textarea.tsx","webpack://_N_E/../../libs/osc/form/src/index.ts","webpack://_N_E/../../libs/osc/caption/src/lib/caption.tsx","webpack://_N_E/../../libs/osc/caption/src/lib/index.ts","webpack://_N_E/../../libs/osc/caption/src/index.ts","webpack://_N_E/./components/view-transactions/transactions-view-wrapper.tsx","webpack://_N_E/../../libs/osc/spinner/src/lib/spinner.tsx","webpack://_N_E/../../libs/osc/spinner/src/lib/spinner-dialog.tsx","webpack://_N_E/../../libs/osc/spinner/src/lib/index.ts","webpack://_N_E/../../libs/osc/spinner/src/index.ts","webpack://_N_E/../../libs/osc/calendar/src/lib/calendar.day.tsx","webpack://_N_E/../../libs/osc/calendar/src/lib/calendar.month.tsx","webpack://_N_E/../../libs/osc/calendar/src/lib/calendar.tsx","webpack://_N_E/../../libs/osc/calendar/src/index.ts","webpack://_N_E/./components/osc-search-form/month-tabs-mvt/arrival-date-spy.tsx","webpack://_N_E/./components/osc-search-form/month-tabs-mvt/search-month-date-selector.utils.ts","webpack://_N_E/./components/osc-search-form/month-tabs-mvt/search-month-date-selector.tsx","webpack://_N_E/./components/osc-search-form/month-tabs-mvt/use-month-tabs-mvt.ts","webpack://_N_E/../../libs/queries/osc-language-selector/src/generated/queries.ts","webpack://_N_E/../../libs/queries/osc-language-selector/src/index.ts","webpack://_N_E/../../libs/osc/language-selector/src/lib/osc-language-code-names.tsx","webpack://_N_E/../../libs/osc/language-selector/src/lib/hooks/useLanguageSelectorLanguages.ts","webpack://_N_E/../../libs/osc/language-selector/src/lib/osc-language-selector.tsx","webpack://_N_E/../../libs/osc/language-selector/src/index.ts","webpack://_N_E/../../libs/osc/drawer/src/lib/drawer.tsx","webpack://_N_E/../../libs/osc/drawer/src/index.ts","webpack://_N_E/../../libs/osc/header/src/lib/gql/queries.ts","webpack://_N_E/../../libs/osc/header/src/lib/header.utilities.tsx","webpack://_N_E/../../libs/osc/header/src/lib/header.logo.tsx","webpack://_N_E/../../libs/osc/header/src/lib/brand-header-body/nav-items.tsx","webpack://_N_E/../../libs/osc/header/src/lib/brand-header-body/mvtest-nhcbp-5758/nav-item-glow.tsx","webpack://_N_E/../../libs/osc/header/src/lib/brand-header-body/popup-contents.tsx","webpack://_N_E/../../libs/osc/header/src/lib/brand-header-body/mvtest-nhcbp-5758/speech-bubble.tsx","webpack://_N_E/../../libs/osc/header/src/lib/brand-header-body/mvtest-nhcbp-5758/nav-item-speech-bubble.tsx","webpack://_N_E/../../libs/osc/header/src/lib/brand-header-body/mega-menu.tsx","webpack://_N_E/../../libs/osc/header/src/lib/brand-header-body/nav-drawer-list.tsx","webpack://_N_E/../../libs/osc/header/src/lib/hooks/useActiveUserLinks.ts","webpack://_N_E/../../libs/osc/header/src/lib/brand-header-body/brand-header-body.tsx","webpack://_N_E/../../libs/osc/banner-notification/src/lib/banner-notification.tsx","webpack://_N_E/../../libs/osc/banner-notification/src/index.ts","webpack://_N_E/../../libs/osc/join-form/src/lib/queries/generated/queries.ts","webpack://_N_E/../../libs/osc/join-form/src/lib/auto-complete.ts","webpack://_N_E/../../libs/osc/join-form/src/lib/constants/featureToggles.ts","webpack://_N_E/../../libs/osc/join-form/src/lib/hooks/use-disable-addresses-toggle.ts","webpack://_N_E/../../libs/osc/join-form/src/lib/address-fields.tsx","webpack://_N_E/../../libs/osc/join-form/src/lib/password-fields.tsx","webpack://_N_E/../../libs/osc/join-form/src/lib/form-validation-regex.ts","webpack://_N_E/../../libs/osc/join-form/src/lib/phone-fields.tsx","webpack://_N_E/../../libs/osc/join-form/src/lib/marketing-content-css.tsx","webpack://_N_E/../../libs/osc/join-form/src/lib/marketing-content.tsx","webpack://_N_E/../../libs/osc/join-form/src/lib/utils/join-form-analytics.ts","webpack://_N_E/../../libs/osc/join-form/src/lib/join-form.tsx","webpack://_N_E/../../libs/osc/join-form/src/lib/index.ts","webpack://_N_E/../../libs/osc/join-form/src/index.ts","webpack://_N_E/../../libs/osc/join-modal-button/src/lib/osc-join-modal-button.tsx","webpack://_N_E/../../libs/osc/join-modal-button/src/index.ts","webpack://_N_E/../../libs/osc/header/src/lib/header.tsx","webpack://_N_E/../../libs/osc/header/src/lib/hooks/use-filter-mega-nav-experiments.ts","webpack://_N_E/../../libs/osc/header/src/index.ts","webpack://_N_E/./components/search-header/search-header.tsx","webpack://_N_E/./components/search-header/index.ts","webpack://_N_E/../../libs/osc/footer/src/lib/footer.tsx","webpack://_N_E/../../libs/osc/footer/src/lib/index.ts","webpack://_N_E/../../libs/osc/footer/src/index.ts","webpack://_N_E/./components/footer/footer-information.ts","webpack://_N_E/./components/footer/index.tsx","webpack://_N_E/../../libs/osc/shop-form/src/lib/shop-form.constants.ts","webpack://_N_E/../../libs/osc/special-rates/src/lib/utils.ts","webpack://_N_E/../../libs/osc/special-rates/src/lib/special-rates.tsx","webpack://_N_E/../../libs/osc/special-rates/src/index.ts","webpack://_N_E/../../libs/osc/shop-form/src/lib/gql/queries.ts","webpack://_N_E/../../libs/framework/places-autocomplete/src/lib/use-places-autocomplete.tsx","webpack://_N_E/../../libs/framework/places-autocomplete/src/lib/use-suggestions.tsx","webpack://_N_E/../../libs/framework/places-autocomplete/src/lib/index.ts","webpack://_N_E/../../libs/framework/places-autocomplete/src/index.ts","webpack://_N_E/../../libs/osc/location/src/lib/location-options/hotels-near-me-option.tsx","webpack://_N_E/../../libs/osc/location/src/lib/location-options/location-options-utils.ts","webpack://_N_E/../../libs/osc/location/src/lib/icons.constant.ts","webpack://_N_E/../../libs/osc/location/src/lib/autoComplete-suggestion-options.tsx","webpack://_N_E/../../libs/osc/location/src/lib/location-options/popular-destinations.tsx","webpack://_N_E/../../libs/osc/location/src/lib/location-options/recent-searches.tsx","webpack://_N_E/../../libs/osc/location/src/lib/gql/queries.ts","webpack://_N_E/../../libs/osc/location/src/lib/location.input.tsx","webpack://_N_E/../../libs/osc/location/src/lib/location.tsx","webpack://_N_E/../../libs/osc/location/src/index.ts","webpack://_N_E/../../libs/osc/shop-form/src/lib/constants/featureToggles.ts","webpack://_N_E/../../libs/osc/shop-form/src/lib/shop-form.utils.ts","webpack://_N_E/../../libs/osc/shop-form/src/lib/shop-form.summary.utils.tsx","webpack://_N_E/../../libs/osc/shop-form/src/lib/shop-form.summary.tsx","webpack://_N_E/../../libs/osc/shop-form/src/lib/hooks/use-shop-form-speedbump.ts","webpack://_N_E/../../libs/osc/shop-form/src/lib/shop-form.geocode-fail-modal.tsx","webpack://_N_E/../../libs/osc/shop-form/src/lib/hooks/use-aarp-toggle.ts","webpack://_N_E/../../libs/osc/shop-form/src/lib/shop-form.tsx","webpack://_N_E/../../libs/utilities/use-previous-value/src/lib/use-previous-value.tsx","webpack://_N_E/../../libs/utilities/use-previous-value/src/lib/index.ts","webpack://_N_E/../../libs/utilities/use-previous-value/src/index.ts","webpack://_N_E/../../libs/osc/shop-form/src/lib/shop-form.provider.tsx","webpack://_N_E/../../libs/osc/shop-form/src/lib/shop-form.location.tsx","webpack://_N_E/../../libs/osc/date-picker/src/lib/date-picker.dates-button.tsx","webpack://_N_E/../../libs/osc/date-picker/src/lib/date-picker.calendar.tsx","webpack://_N_E/../../libs/osc/date-picker/src/lib/date-picker.tsx","webpack://_N_E/../../libs/osc/date-picker/src/lib/date-picker.screenreader.tsx","webpack://_N_E/../../libs/osc/date-picker/src/index.ts","webpack://_N_E/../../libs/osc/shop-form/src/lib/shop-form.dates.tsx","webpack://_N_E/../../libs/osc/shop-form/src/lib/shop-form.info-container.tsx","webpack://_N_E/../../libs/osc/shop-form/src/lib/use-shop-form-context.tsx","webpack://_N_E/../../libs/osc/shop-form/src/lib/shop-form.button.tsx","webpack://_N_E/../../libs/osc/shop-form/src/lib/shop-form.rooms.tsx","webpack://_N_E/../../libs/osc/shop-form/src/lib/shop-form.group.tsx","webpack://_N_E/../../libs/osc/shop-form/src/lib/shop-form.special-rates.tsx","webpack://_N_E/../../libs/osc/shop-form/src/lib/shop-form.nights.tsx","webpack://_N_E/../../libs/osc/shop-form/src/index.ts","webpack://_N_E/../../libs/osc/markdown/src/lib/markdown.tsx","webpack://_N_E/../../libs/osc/markdown/src/index.ts","webpack://_N_E/./components/dynamic-components/dynamic-components.tsx","webpack://_N_E/./components/dynamic-components/index.ts","webpack://_N_E/../../libs/osc/responsive-image/src/lib/utils/element-selector.tsx","webpack://_N_E/../../libs/osc/responsive-image/src/lib/responsive-image.tsx","webpack://_N_E/../../libs/osc/responsive-image/src/lib/responsive-picture.tsx","webpack://_N_E/../../libs/osc/responsive-image/src/lib/utils/get-current-aspect-ratio-and-url.ts","webpack://_N_E/../../libs/osc/responsive-image/src/lib/index.ts","webpack://_N_E/../../libs/osc/responsive-image/src/index.ts","webpack://_N_E/../../libs/utilities/dates/src/lib/utils.tsx","webpack://_N_E/../../libs/utilities/dates/src/lib/use-days-of-week.tsx","webpack://_N_E/../../libs/utilities/dates/src/lib/use-date-format.tsx","webpack://_N_E/../../libs/utilities/dates/src/lib/use-locale.tsx","webpack://_N_E/../../libs/utilities/dates/src/lib/index.ts","webpack://_N_E/../../libs/utilities/dates/src/index.ts","webpack://_N_E/./components/default-locations-page/price-planner/price-planner-tabs.tsx","webpack://_N_E/./components/default-locations-page/price-planner/plan-your-stay-modal.tsx","webpack://_N_E/./components/default-locations-page/price-planner/book-within-budget-cta.tsx","webpack://_N_E/./components/places-search/places-search.tsx","webpack://_N_E/./components/places-search/index.ts","webpack://_N_E/../../libs/osc/tooltip/src/lib/tooltip.tsx","webpack://_N_E/../../libs/osc/tooltip/src/index.ts","webpack://_N_E/../../libs/osc/rooms/src/lib/rooms.room.tsx","webpack://_N_E/../../libs/osc/rooms/src/lib/rooms.tsx","webpack://_N_E/../../libs/osc/rooms/src/lib/rooms.modal.tsx","webpack://_N_E/../../libs/osc/rooms/src/index.ts","webpack://_N_E/../../libs/utilities/accessibility/src/lib/use-has-user-modified-font-defaults.ts","webpack://_N_E/../../libs/utilities/accessibility/src/lib/index.ts","webpack://_N_E/../../libs/utilities/accessibility/src/index.ts","webpack://_N_E/../../libs/osc/stepper/src/lib/stepper.tsx","webpack://_N_E/../../libs/osc/stepper/src/lib/index.ts","webpack://_N_E/../../libs/osc/stepper/src/index.ts"],"sourcesContent":["import type { Link } from '@dx-ui/osc-link';\nimport { env } from '../../constants';\nimport type { TFunction } from 'i18next';\n\nexport const HGV_MEMBER_PROGRAM_LINKS = (t: TFunction<'header'>): Link[] => [\n  {\n    url: env.EXTERNAL_HGV_PROGRAM_DETAILS_URL,\n    label: t('programDetails', { for: 'HGV Max' }),\n    isNewWindow: true,\n  },\n];\n\nexport const TMTP_NON_TEAM_MEMBER_PROGRAM_LINKS = (t: TFunction<'header'>): Link[] => [\n  {\n    url: env.EXTERNAL_TMTP_PROGRAM_DETAILS_URL,\n    label: t('programDetails', { for: 'Go Hilton' }),\n    isNewWindow: true,\n  },\n];\n\nexport const TMTP_ELIGIBLE_TEAM_MEMBER_PROGRAM_LINKS = (t: TFunction<'header'>): Link[] => [\n  {\n    url: env.TMTP_MANAGE_FAMILY_AND_FRIENDS_LINK,\n    label: t('manageFF'),\n    isNewWindow: true,\n  },\n];\n","import type { Link } from '@dx-ui/osc-link';\nimport { OHW_SEARCH_PRIMARYSLUGS } from '../../constants';\nimport type { TFunction } from 'i18next';\nimport {\n  HGV_MEMBER_PROGRAM_LINKS,\n  TMTP_ELIGIBLE_TEAM_MEMBER_PROGRAM_LINKS,\n  TMTP_NON_TEAM_MEMBER_PROGRAM_LINKS,\n} from './header-constants';\nimport { logError } from '@dx-ui/framework-logger';\n\nexport function getAdditionalLinks(\n  isTMTPTeamMember: boolean | undefined,\n  isTPHMember: boolean | undefined,\n  isTMTPEligibleMember: boolean | undefined,\n  t: TFunction<'header'>,\n  isHGVOwner: boolean | undefined\n) {\n  const additionalLinks: Link[] = [];\n  if (isTMTPTeamMember || isTMTPEligibleMember || isTPHMember)\n    additionalLinks.push(...TMTP_NON_TEAM_MEMBER_PROGRAM_LINKS(t));\n  if (isHGVOwner) additionalLinks.push(...HGV_MEMBER_PROGRAM_LINKS(t));\n  if (isTMTPTeamMember && !isTMTPEligibleMember)\n    additionalLinks.push(...TMTP_ELIGIBLE_TEAM_MEMBER_PROGRAM_LINKS(t));\n  return additionalLinks;\n}\n\nexport const removePrimarySlug = (url: string) => {\n  try {\n    const urlObj = new URL(url);\n    const filteredPath = urlObj.pathname\n      .split('/')\n      .filter((primarySlug) => !OHW_SEARCH_PRIMARYSLUGS.includes(primarySlug))\n      .join('/');\n    urlObj.pathname = filteredPath;\n    return urlObj.toString();\n  } catch (error) {\n    if (error instanceof Error || typeof error === 'string')\n      logError('Search_UI Header', error, 'Invalid URL');\n    return url;\n  }\n};\nconst AUTHENTICATED_ONLY_PARAMS = [\n  'smbRate',\n  'employeeRate',\n  'ownerVIPRate',\n  'friendsAndFamilyRate',\n  'ownerHGVRate',\n];\nexport const hasAuthenticatedParam = (url: string) => {\n  let hasParam = false;\n  AUTHENTICATED_ONLY_PARAMS.forEach((param) => {\n    if (url.includes(`${param}=`)) hasParam = true;\n  });\n  return hasParam;\n};\n\nexport const hasPrimarySlug = (url: string) => {\n  let hasSlug = false;\n  OHW_SEARCH_PRIMARYSLUGS.forEach((param) => {\n    if (url.includes(`/${param}/`)) hasSlug = true;\n  });\n  return hasSlug;\n};\nexport const sanitizedSearchUrlParams = (originalUrl: string) => {\n  const url = new URL(originalUrl);\n  AUTHENTICATED_ONLY_PARAMS.forEach((param) => {\n    url.searchParams.delete(param);\n  });\n  return url;\n};\n","const RTL_LANGUAGES = ['ar', 'he'];\n\n/**\n * Returns whether a locale is LTR (left to right) or RTL (right to left)\n *\n * Currently arabic (ar) is only supported RTL locale\n * @param lang - ISO code for locale\n */\nexport const getLanguageDirection = (lang?: string) =>\n  !!lang && RTL_LANGUAGES.includes(lang.toLowerCase()) ? 'rtl' : 'ltr';\n\n/**\n * Returns a boolean as to whether a locale is LTR (left to right) or RTL (right to left)\n *\n * Currently arabic (ar) is only supported RTL locale\n * @param lang\n */\nexport const isRtl = (lang?: string) => getLanguageDirection(lang) === 'rtl';\n","export * from '@dx-ui/osc-shop-form';\n","import type { FeatureConfig, FeatureToggle } from '@dx-ui/gql-types';\n\nexport type FeatureTogglesQueryData = {\n  featureToggles: Pick<FeatureToggle, 'name' | 'enabled'>[];\n};\n\nexport type FeatureConfigsQueryData = FeatureTogglesQueryData & {\n  featureConfigs: Pick<FeatureConfig, 'name' | 'conditions' | 'config'>[];\n};\n\nexport function getIsFeatureToggleEnabled({\n  featureToggleData,\n  name,\n}: {\n  featureToggleData: FeatureTogglesQueryData | null | undefined;\n  name: string;\n}) {\n  return (\n    featureToggleData?.featureToggles?.find((toggle) => toggle.name === name)?.enabled || false\n  );\n}\n\nexport function getFeatureConfig<T = Record<string, unknown>>({\n  featureToggleData,\n  name,\n}: {\n  featureToggleData: FeatureConfigsQueryData | undefined;\n  name: string;\n}): T | null {\n  const toggleEnabled = getIsFeatureToggleEnabled({ featureToggleData, name });\n  const allConfigs = featureToggleData?.featureConfigs || [];\n  const searchedConfig = allConfigs.find((toggle) => toggle.name === name);\n  return toggleEnabled ? searchedConfig?.config : null;\n}\n","import type { Link } from '@dx-ui/osc-link';\nimport type { LoginResponse } from '@dx-ui/framework-auth-provider';\n\nexport type { LoginResponse };\n\nexport type GuestLoginState = {\n  password: {\n    status: string;\n    value: string;\n  };\n  remember: { value: boolean };\n  recaptcha?: string;\n  username: {\n    override: string;\n    status: string;\n    value: string;\n  };\n};\n\n/** @deprecated - @see AuthUserInfo */\nexport type GuestUserInfo = {\n  keyIdentifier: number;\n  guestId: number;\n  domainUserName: string;\n  userRealm: string;\n  hhonorsNumber: number;\n  username: string;\n};\n\n/**\n * Thes are the login event types in the message body passed from the login form\n * @see [Window.postMessage](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage)\n */\nexport const LoginFormEventType = {\n  /** Used when requesting app's digitalData object */\n  DIGITALDATA: 'digitalData',\n  /** Used when there is a login attempt */\n  LOGIN: 'onLogin',\n  /**\n   * **deprecated** - used to clear prefilled username\n   * @deprecated\n   */\n  CLEAR: 'clearUser',\n  /** Used to indicate closing of the login form */\n  CLOSE: 'onClose',\n  /** Used when login form is ready */\n  READY: 'onReady',\n  /** Used when login form height changes */\n  HEIGHT: 'onHeightChange',\n  /** Used when the login process is finished */\n  COMPLETE: 'onComplete',\n} as const;\n\nexport type GuestLoginResponse = LoginResponse & {\n  /**\n   * **deprecated** - use `type`\n   * @deprecated\n   */\n  handler?: ValuesOf<typeof LoginFormEventType>;\n  /** Login form event type. This  */\n  type?: ValuesOf<typeof LoginFormEventType>;\n  /**\n   * **deprecated** - The active state of parent window\n   * @deprecated\n   */\n  status?: string;\n  /** The height of login page */\n  height?: number;\n};\n\n/** @deprecated - @see AuthTokenInfo */\nexport type TokenInfo = {\n  scope: string;\n  token_type: string;\n  expires_in: number;\n  iat: number;\n  exp: number;\n  access_token: string;\n};\n\nexport type GuestLoginConfigOptions = {\n  /** Display the create password text. must be set with `forgetInfoLink` */\n  showCreatePassword?: boolean;\n  /** Displays the forgot password link on the login form */\n  forgetInfoLink?: Omit<Link, 'icon'>;\n  /** Displays the secure info link on the login form */\n  secureInfoLink?: Omit<Link, 'icon'>;\n  /** Displays the Join link on the login form */\n  joinLink?: Omit<Link, 'icon'>;\n  /** Displays the parent window's digitalData object */\n  digitalData?: string;\n  /** Default username **/\n  username?: string;\n};\n","import * as React from 'react';\nimport { isBrowser } from '@dx-ui/utilities-is-browser';\nimport type { GuestLoginConfigOptions, LoginResponse, GuestLoginResponse } from './login.types';\nimport { LoginFormEventType } from './login.types';\n\ntype LoginIFrame = React.IframeHTMLAttributes<HTMLIFrameElement> & {\n  /** Title of the iframe */\n  title: string;\n  /** The source for the iframe to use */\n  frameSrc: string;\n  /**\n   * Callback for login attempts. Handles both success and error.\n   *\n   * > NOTE: `onLogin` and `onLoginError` are **DEPRECATED** in favor of this prop\n   * */\n  onLoginAttempt: (response: LoginResponse<any>) => void; // eslint-disable-line @typescript-eslint/no-explicit-any\n  /** Options for the iframe */\n  options?: GuestLoginConfigOptions;\n  /** Handler for closing, if used in a modal */\n  onClose?: () => void;\n  /**\n   * **deprecated** - Do not use - use `onLoginAttempt`\n   * @deprecated\n   */\n  onLogin?: (data: NonNullable<LoginResponse['data']>) => void;\n  /**\n   * **deprecated** - Do not use - use `onLoginAttempt`\n   * @deprecated\n   */\n  onLoginError?: (error: NonNullable<LoginResponse['error']>) => void;\n};\n\n/**\n * This component can be used separately and provides the communication logic between the parent windown and the iframe.\n *\n * `import { LoginIFrame } from '@dx-ui/osc-login'`\n */\nexport const LoginIFrame: React.FC<React.PropsWithChildren<LoginIFrame>> = ({\n  frameSrc,\n  options = {},\n  onClose,\n  onLoginAttempt,\n  onLogin,\n  title,\n  onLoginError,\n  ...rest\n}: LoginIFrame) => {\n  const readyCount = React.useRef(0);\n  const iframeRef = React.useRef<HTMLIFrameElement>(null);\n  const noOptions = Object.keys(options).length === 0;\n  const [frameHeight, setFrameHeight] = React.useState(291.25);\n\n  const handleMessage = React.useCallback(\n    (event: MessageEvent<GuestLoginResponse>) => {\n      const {\n        data: { handler, type, height, data, error, status },\n      } = event;\n      // @todo remove - Keeping status, handler for backwards compatibility\n      if (\n        (status === 'ready' ||\n          type === LoginFormEventType.HEIGHT ||\n          handler === LoginFormEventType.HEIGHT) &&\n        height\n      ) {\n        readyCount.current += 1;\n        if (noOptions || readyCount.current > 1) {\n          setFrameHeight(height);\n        }\n      }\n\n      if (type === LoginFormEventType.DIGITALDATA) {\n        options.digitalData = JSON.stringify(window.digitalData);\n        sendMessageToIframe();\n      }\n\n      // @todo remove - Keeping handler for backwards compatibility\n      if (type === LoginFormEventType.CLOSE || handler === LoginFormEventType.CLOSE) {\n        onClose?.();\n      }\n\n      // @todo remove - Keeping handler for backwards compatibility\n      if (type === LoginFormEventType.LOGIN || handler === LoginFormEventType.LOGIN) {\n        if (error) {\n          onLoginError?.(error);\n          onLoginAttempt({ error });\n        }\n        if (data) {\n          onLogin?.(data);\n          onLoginAttempt({ data });\n        }\n      }\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    []\n  );\n\n  const sendMessageToIframe = () => {\n    if (iframeRef.current && iframeRef.current.contentWindow) {\n      // if framesrc is a relative url, then the origin will be the same as the parent window, otherwise use the frameSrc origin\n      const origin = frameSrc.startsWith('/') ? window.location.origin : new URL(frameSrc).origin;\n      iframeRef.current.contentWindow.postMessage(options, origin);\n    }\n  };\n\n  React.useEffect(() => {\n    if (isBrowser) {\n      window.addEventListener('message', handleMessage);\n    }\n    return () => {\n      window.removeEventListener('message', handleMessage);\n    };\n  }, [handleMessage]);\n\n  return (\n    <div className=\"w-full py-2\">\n      <iframe\n        onLoad={sendMessageToIframe}\n        ref={iframeRef}\n        src={frameSrc}\n        title={title}\n        height={frameHeight}\n        width=\"100%\"\n        {...rest}\n      />\n    </div>\n  );\n};\n\nLoginIFrame.displayName = 'LoginIFrame';\n\nexport default LoginIFrame;\n","import { forwardRef } from 'react';\n\nconst AccountIcon = forwardRef<SVGSVGElement, React.SVGProps<SVGSVGElement>>(\n  ({ width = 20, height = 20, ...rest }, ref) => (\n    <svg\n      ref={ref}\n      role=\"img\"\n      aria-hidden\n      height={height}\n      width={width}\n      viewBox=\"2 3 20 17\"\n      {...rest}\n    >\n      <g fill=\"#666\" className=\"fill-current\">\n        <path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\" />\n        <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n      </g>\n    </svg>\n  )\n);\n\nAccountIcon.displayName = 'AccountIcon';\n\nexport { AccountIcon };\nexport default AccountIcon;\n","import * as React from 'react';\nimport { LoginIFrame } from './frame';\nimport { Dialog } from '@dx-ui/osc-dialog-v2';\nimport type { GuestLoginConfigOptions, LoginResponse } from './login.types';\nimport { useTranslation } from 'next-i18next';\nimport { AccountIcon } from './login.icon';\nimport cx from 'classnames';\nimport { sendReward } from '@dx-ui/framework-conductrics';\n\nexport type LoginBaseProps = {\n  /** Source url for the login page */\n  frameSrc: string;\n  /** Name of the button to display */\n  buttonName?: string;\n  /**\n   * Set the classNames for the button element\n   */\n  buttonClassName?: string;\n  /** Specify the title for the iframe element */\n  title: string;\n  /** Display options for the login page */\n  options?: GuestLoginConfigOptions;\n  /** Provides additional styling to the iframe */\n  className?: string;\n  /** Provides a parameter for disabling the icon */\n  hideIcon?: boolean;\n  /** callback to run after login attempt */\n  onLoginAttempt: (response: LoginResponse) => Promise<void>;\n  /** function to run on open */\n  onOpen?: () => void;\n};\n\nexport type LoginProps = LoginBaseProps & React.HTMLAttributes<HTMLIFrameElement>;\n\n/**\n * A modal that wraps the LoginIFrame component.\n *\n * `import { Login } from '@dx-ui/osc-login'`\n */\nexport const Login: React.FC<React.PropsWithChildren<LoginBaseProps>> = ({\n  options = {},\n  className = '',\n  title,\n  frameSrc,\n  buttonName,\n  buttonClassName,\n  hideIcon,\n  onLoginAttempt,\n  onOpen,\n}) => {\n  const [t] = useTranslation('osc-login');\n  const [showDialog, setShowDialog] = React.useState<boolean>(false);\n  const open = () => {\n    onOpen?.();\n    sendReward('nav-sign-in-click');\n    setShowDialog(true);\n  };\n  const close = () => setShowDialog(false);\n  const handleLogin = async (response: LoginResponse) => {\n    await onLoginAttempt?.(response);\n    if (!response.error) {\n      close();\n    }\n  };\n\n  return (\n    <Dialog\n      title={title}\n      isOpen={showDialog}\n      onDismiss={close}\n      size=\"md\"\n      dialogTrigger={\n        <button\n          type=\"button\"\n          className={cx(buttonClassName, {\n            'btn btn-text-text sm:btn-xl flex items-center brand-wa:!font-normal': !buttonClassName,\n          })}\n          onClick={open}\n        >\n          <span>{buttonName || t('signIn')}</span>\n          {!hideIcon ? (\n            <span\n              aria-hidden\n              className=\"ms-2 flex size-5 items-center justify-center rounded-full bg-text text-text-inverse\"\n            >\n              <AccountIcon className=\"size-3\" />\n            </span>\n          ) : null}\n        </button>\n      }\n    >\n      <LoginIFrame\n        frameSrc={frameSrc}\n        options={options}\n        data-e2e=\"loginIframe\"\n        onLoginAttempt={handleLogin}\n        onClose={close}\n        title={title}\n        className={className}\n      />\n    </Dialog>\n  );\n};\n\nLogin.displayName = 'Login';\n\nexport default Login;\n","export * from './lib/login';\nexport * from './lib/login.icon';\nexport * from './lib/frame';\nexport * from './lib/login.types';\n","import { useRef, useEffect } from 'react';\nimport { differenceInCalendarDays, parseISO } from 'date-fns';\nimport { getGuestInfo, getPageType } from '../utils';\nimport { useInitConductrics } from '@dx-ui/framework-conductrics';\nimport type { GuestQuery } from '@dx-ui/framework-auth-provider';\nimport { useWrappedRouter } from './use-wrapped-router';\n\ntype UseInitializeConductrics = {\n  authLoading: boolean;\n  guestInfo?: GuestQuery['guest'] | null;\n  isAuthenticated: boolean;\n  arrivalDate?: string | undefined;\n  isReady?: boolean;\n  isTwentyPlusResults?: boolean;\n};\n\nexport const useInitializeConductrics = ({\n  authLoading,\n  guestInfo,\n  isAuthenticated,\n  arrivalDate,\n  isReady = true,\n  //NHCSEARCH-4194 List 10\n  isTwentyPlusResults,\n}: UseInitializeConductrics) => {\n  const { safeQueryParams: queryParameters, router } = useWrappedRouter();\n  // Initialize conductrics (may or may not be needed for all tests, general information)\n  const conductricsInitPath = useRef<string>();\n  const initConductrics = useInitConductrics();\n\n  const { isSearch, isSearchZero, isHotelsNearMe, isDefaultLocations, isDreams, isResorts } =\n    getPageType(router.asPath, queryParameters);\n\n  const routerPath = router.asPath?.split('?')?.[0];\n\n  useEffect(() => {\n    if (!authLoading && isReady && routerPath !== conductricsInitPath.current) {\n      const traits = [`login:${isAuthenticated ? 'yes' : 'no'}`];\n\n      const inputs = {\n        ...(arrivalDate && {\n          'lead-time': differenceInCalendarDays(parseISO(arrivalDate), new Date()),\n        }),\n      };\n\n      if (isSearch || isSearchZero) {\n        traits.push('shop-entry:search');\n      } else if (isHotelsNearMe || isDefaultLocations) {\n        traits.push('shop-entry:default-locations');\n      } else if (isDreams || isResorts) {\n        traits.push('shop-entry:locations');\n      }\n\n      const { hhonors } = guestInfo || {};\n\n      if (hhonors?.summary?.tier) {\n        traits.push(`tier:${hhonors.summary.tier.toLowerCase()}`);\n      }\n      // populate teammember status\n      const { isTMTPTeamMember } = getGuestInfo(guestInfo);\n\n      traits.push(`teamMember:${isTMTPTeamMember ? 'yes' : 'no'}`);\n      traits.push(`20-results:${isTwentyPlusResults ? 'yes' : 'no'}`);\n\n      initConductrics({ traits, inputs });\n      conductricsInitPath.current = routerPath;\n    }\n  }, [\n    isAuthenticated,\n    isReady,\n    authLoading,\n    guestInfo,\n    arrivalDate,\n    isTwentyPlusResults,\n    initConductrics,\n    routerPath,\n    isSearch,\n    isSearchZero,\n    isHotelsNearMe,\n    isDefaultLocations,\n    isDreams,\n    isResorts,\n  ]);\n};\n","import * as React from 'react';\nimport * as Dialog from '@radix-ui/react-dialog';\nimport { useTranslation } from 'next-i18next';\nimport { ControlClose } from '@dx-ui/osc-controls';\nimport cx from 'classnames';\n\nexport type DialogSizes =\n  | 'xs'\n  | 'sm'\n  | 'md'\n  | 'lg'\n  | 'xl'\n  | '2xl'\n  | '3xl'\n  | '4xl'\n  | '5xl'\n  | '6xl'\n  | 'full'\n  | 'container';\n\nexport type DialogBaseProps = {\n  /** The className for the CloseButton to support custom curated sites */\n  closeButtonClassName?: string;\n  /** The className for the dialog tag */\n  dialogClassName?: string;\n  /** The className for the dialog overlay tag */\n  dialogOverlayClassName?: string;\n  /** The className for the dialog title tag */\n  dialogTitleClassName?: string;\n  /** The element that opens the dialog that focus should return to */\n  dialogTrigger?: React.ReactNode;\n  /** The size of the modal. */\n  size?: DialogSizes;\n  /** Allows passing of additional JSX to dialog. */\n  bottomContent?: React.ReactNode;\n  /** Whether the overlay is open by default (controlled). */\n  isOpen?: boolean;\n  /** Handler that is called when the overlay is dismissed. */\n  onDismiss?: () => void;\n  /** Sets whether header should be sticky in overflow scroll situations when a title is passed. Defaults to false */\n  stickyHeader?: boolean;\n  /** Optional data attribute to apply to the outer content wrapper */\n  contentDataAttribute?: string;\n} & React.ComponentProps<'div'>;\n\nexport type DialogOptionalProps =\n  | { ariaLabel?: never; title: string; hasChildrenWithTitle?: never }\n  | { ariaLabel: string; title?: never; hasChildrenWithTitle?: never }\n  | { ariaLabel?: never; title?: never; hasChildrenWithTitle: boolean };\n\nexport const DialogTitle = Dialog.Title;\n\nexport const DialogBase = React.forwardRef<\n  HTMLDivElement,\n  React.PropsWithChildren<DialogBaseProps & DialogOptionalProps>\n>(\n  (\n    {\n      ariaLabel,\n      children,\n      className,\n      closeButtonClassName,\n      dialogClassName,\n      dialogOverlayClassName,\n      dialogTitleClassName,\n      dialogTrigger,\n      isOpen,\n      title,\n      size = 'md',\n      bottomContent,\n      onDismiss,\n      hasChildrenWithTitle,\n      stickyHeader = false,\n      contentDataAttribute,\n    },\n    forwardedRef\n  ) => {\n    const innerRef = React.useRef<React.ElementRef<'div'>>(null);\n    const dialogRef = React.useRef<React.ElementRef<'div'>>(null);\n\n    React.useImperativeHandle(forwardedRef, () => dialogRef.current as HTMLDivElement);\n\n    return (\n      <Dialog.Root open={isOpen}>\n        {dialogTrigger ? <Dialog.Trigger asChild>{dialogTrigger}</Dialog.Trigger> : null}\n        <Dialog.Portal>\n          <Dialog.Overlay className={cx('dialog-overlay sm:py-4 lg:py-12', dialogOverlayClassName)}>\n            <Dialog.Content\n              /* This is disabled on purpose because we don't use radix-ui/dialog description. See https://www.radix-ui.com/primitives/docs/components/dialog#description */\n              aria-describedby={undefined}\n              className={cx(\n                'dialog-content-v2 max-h-full rounded-lg sm:max-h-[95vh] md:max-h-[90vh]',\n                {\n                  'max-w-xs': size === 'xs',\n                  'max-w-sm': size === 'sm',\n                  'max-w-md': size === 'md',\n                  'max-w-lg': size === 'lg',\n                  'max-w-xl': size === 'xl',\n                  'max-w-2xl': size === '2xl',\n                  'max-w-3xl': size === '3xl',\n                  'max-w-4xl': size === '4xl',\n                  'max-w-5xl': size === '5xl',\n                  'max-w-6xl': size === '6xl',\n                  'max-w-full': size === 'full',\n                  'w-full lg:max-w-[min(90%,calc(1440px-5rem))]': size === 'container',\n                  'pt-0': stickyHeader,\n                  'pb-0': bottomContent,\n                },\n                dialogClassName\n              )}\n              onInteractOutside={onDismiss}\n              onEscapeKeyDown={onDismiss}\n              {...(contentDataAttribute ? { [contentDataAttribute]: true } : null)}\n            >\n              <div className=\"h-full\" ref={innerRef}>\n                {hasChildrenWithTitle ? null : title ? (\n                  <div\n                    className={cx('relative mb-2 border-b border-border pb-3.5', {\n                      'sticky top-0 bg-bg z-10 pt-4': stickyHeader,\n                    })}\n                  >\n                    <Dialog.Title\n                      className={cx(\n                        'mx-4 text-center font-bold brand-ou:text-primary brand-wa:text-xl brand-wa:font-light brand-wa:text-text brand-wa:md:text-2xl',\n                        dialogTitleClassName\n                      )}\n                      data-osc-product=\"osc-dialog-title\"\n                    >\n                      {title}\n                    </Dialog.Title>\n                    {onDismiss && (\n                      <CloseButton\n                        className={closeButtonClassName}\n                        onDismiss={onDismiss}\n                        stickyHeader={stickyHeader}\n                      />\n                    )}\n                  </div>\n                ) : (\n                  <Dialog.Title aria-label={ariaLabel} className=\"hidden\" />\n                )}\n                {!title && onDismiss ? (\n                  <div className=\"relative py-1\">\n                    <CloseButton onDismiss={onDismiss} stickyHeader={stickyHeader} />\n                  </div>\n                ) : null}\n                <div className={cx('p-1', className)}>{children}</div>\n                {bottomContent}\n              </div>\n            </Dialog.Content>\n          </Dialog.Overlay>\n        </Dialog.Portal>\n      </Dialog.Root>\n    );\n  }\n);\n\nDialogBase.displayName = 'DialogBase';\n\nfunction CloseButton({\n  onDismiss,\n  stickyHeader,\n  className,\n}: Pick<DialogBaseProps, 'onDismiss' | 'stickyHeader'> & { className?: string }) {\n  const { t } = useTranslation('osc-dialog');\n  return (\n    <Dialog.Close asChild>\n      <ControlClose\n        onClick={onDismiss}\n        className={cx(\n          'absolute -end-2',\n          {\n            '-top-0.5': !stickyHeader,\n            'top-3': stickyHeader,\n          },\n          className\n        )}\n        label={t('close')}\n      />\n    </Dialog.Close>\n  );\n}\n","import * as React from 'react';\nimport type { DialogBaseProps, DialogOptionalProps } from './dialog.base';\nimport { DialogBase } from './dialog.base';\n\n/**\n * A modal is an overlay element which blocks interaction with elements outside it.\n *\n * Dialogs are windows containing contextual information, tasks, or workflows that appear over the user interface. Depending on the kind of Dialog, further interactions may be blocked until the Dialog is acknowledged.\n *\n * [Radix <Dialog /> Primitive](https://www.radix-ui.com/primitives/docs/components/dialog)\n */\nexport const Dialog: React.FC<React.PropsWithChildren<DialogBaseProps & DialogOptionalProps>> = (\n  props\n) => {\n  const dialogRef = React.useRef<React.ElementRef<'div'>>(null);\n  return <DialogBase {...props} ref={dialogRef} />;\n};\n\nexport default Dialog;\n","import * as React from 'react';\nimport { useTranslation } from 'next-i18next';\nimport cx from 'classnames';\nimport * as AlertDialog from '@radix-ui/react-alert-dialog';\nimport type { DialogBaseProps, DialogOptionalProps } from './dialog.base';\n\nexport type DialogAlertProps = Omit<DialogBaseProps, 'onDismiss' | 'onCancel'> & {\n  /**\n   * The text of the cancel button\n   */\n  cancel?: string | null;\n  /**\n   * The text of the confirm button\n   */\n  confirm?: string | null;\n  /** The element that opens the dialog that focus should return to */\n  dialogTrigger?: React.ReactNode;\n  /**\n   * Callback for when the cancel button is clicked.\n   * If this is not provided, the cancel button will not show.\n   */\n  onCancel?: (event: React.SyntheticEvent<HTMLButtonElement>) => void;\n  /**\n   * Callback for when the confirm button is clicked.\n   */\n  onConfirm: (event: React.SyntheticEvent<HTMLButtonElement>) => void;\n  /**\n   * Whether or not to stack the buttons vertically\n   */\n  stackedButtons?: boolean;\n} & DialogOptionalProps;\n\n/**\n * A dialog meant for a user to confirm an action. Escape will not close this dialog.\n */\nconst DialogAlert: React.FC<React.PropsWithChildren<DialogAlertProps>> = ({\n  ariaLabel,\n  children,\n  cancel,\n  confirm,\n  dialogTrigger,\n  isOpen,\n  onCancel,\n  onConfirm,\n  stackedButtons = true,\n  title,\n  ...rest\n}) => {\n  const { t } = useTranslation('osc-dialog');\n  const dialogRef = React.useRef<React.ElementRef<'div'>>(null);\n  const cancelText = cancel ?? t('cancel');\n  const confirmText = confirm ?? t('ok');\n\n  const handleCancel = (event: React.SyntheticEvent<HTMLButtonElement>) => {\n    onCancel?.(event);\n  };\n\n  const handleConfirm = (event: React.SyntheticEvent<HTMLButtonElement>) => {\n    onConfirm(event);\n  };\n\n  return (\n    <AlertDialog.Root open={isOpen}>\n      {dialogTrigger ? <AlertDialog.Trigger asChild>{dialogTrigger}</AlertDialog.Trigger> : null}\n      <AlertDialog.Portal>\n        <AlertDialog.Overlay className=\"dialog-overlay sm:py-4 lg:py-12\">\n          <AlertDialog.Content\n            className={cx('dialog-content-v2 max-w-sm rounded-lg md:max-h-[90vh]', {\n              'flex flex-col': isOpen,\n            })}\n            {...rest}\n            onEscapeKeyDown={(event) => event.preventDefault()}\n            ref={dialogRef}\n          >\n            <div className=\"text-center\">\n              {title ? (\n                <AlertDialog.Title className=\"mb-3 text-xl font-bold leading-tight\">\n                  {title}\n                </AlertDialog.Title>\n              ) : (\n                <AlertDialog.Title aria-label={ariaLabel} className=\"hidden\" />\n              )}\n              <AlertDialog.Description>{children}</AlertDialog.Description>\n            </div>\n            <div\n              className={cx('flex items-center justify-center gap-2 pt-4', {\n                'flex-col': stackedButtons,\n              })}\n            >\n              {!onCancel ? (\n                <AlertDialog.Cancel asChild>\n                  <button\n                    type=\"button\"\n                    className=\"btn btn-lg btn-primary w-full\"\n                    onClick={handleConfirm}\n                  >\n                    {confirmText}\n                  </button>\n                </AlertDialog.Cancel>\n              ) : (\n                <AlertDialog.Action asChild>\n                  <button\n                    type=\"button\"\n                    className=\"btn btn-lg btn-primary w-full\"\n                    onClick={handleConfirm}\n                  >\n                    {confirmText}\n                  </button>\n                </AlertDialog.Action>\n              )}\n              {onCancel ? (\n                <AlertDialog.Cancel asChild>\n                  <button\n                    type=\"button\"\n                    className=\"btn btn-lg btn-primary-outline w-full\"\n                    onClick={handleCancel}\n                  >\n                    {cancelText}\n                  </button>\n                </AlertDialog.Cancel>\n              ) : null}\n            </div>\n          </AlertDialog.Content>\n        </AlertDialog.Overlay>\n      </AlertDialog.Portal>\n    </AlertDialog.Root>\n  );\n};\n\nexport { DialogAlert };\nexport default DialogAlert;\n","import { forwardRef } from 'react';\nimport * as Dialog from '@radix-ui/react-dialog';\nimport { useTranslation } from 'next-i18next';\nimport cx from 'classnames';\n\ntype ActionButton = {\n  adaDescription?: string;\n  label?: string;\n} & React.ComponentPropsWithRef<'button'>;\n\ntype ShouldEnableActionButton = ActionButton & { isEnabled?: boolean };\n\nexport type ActionButtonProps = {\n  /** Props passed to each button type. */\n  buttonOptions?: {\n    cancel?: ActionButton;\n    confirm?: ActionButton;\n    reset?: ShouldEnableActionButton;\n  };\n  /** Hander called when cancel button is blurred */\n  onCancel?: (event: React.SyntheticEvent<HTMLButtonElement>) => void;\n  /** Handler called when done button is blurred. */\n  onConfirm?: (event: React.SyntheticEvent<HTMLButtonElement>) => void;\n  /** Handler called when reset is activated */\n  onReset?: () => void;\n  /** stacks action buttons in viewport widths md and up */\n  shouldStackButtons?: boolean;\n};\n\nconst Button = forwardRef<HTMLButtonElement, ActionButton>(\n  ({ label, adaDescription, className, ...rest }, forwardedRef) => {\n    return (\n      <button {...rest} className={cx('btn btn-lg', className)} ref={forwardedRef} type=\"button\">\n        {label}\n        {adaDescription ? <span className=\"sr-only\">{adaDescription}</span> : null}\n      </button>\n    );\n  }\n);\n\nButton.displayName = 'Button';\n\nexport function ActionButtons({\n  buttonOptions = {},\n  onReset,\n  onConfirm,\n  onCancel,\n  shouldStackButtons = false,\n}: ActionButtonProps) {\n  const { t } = useTranslation('osc-dialog');\n  const { cancel, confirm, reset } = buttonOptions;\n  const resetBtnEnabled = reset?.isEnabled && reset?.label;\n\n  const buttons = [\n    {\n      ...confirm,\n      onClick: onConfirm,\n      label: confirm?.label ?? t('done'),\n      className: 'btn-primary',\n      'data-testid': 'shop-modal-done-cta',\n      ref: confirm?.ref,\n    },\n    {\n      ...cancel,\n      onClick: onCancel,\n      label: cancel?.label ?? t('cancel'),\n      className: 'btn-primary-outline',\n      ref: cancel?.ref,\n    },\n  ].map((props) => (\n    <Dialog.Close key={props.label} asChild>\n      <Button {...props} key={props.label} />\n    </Dialog.Close>\n  ));\n\n  return (\n    <div\n      className={cx('sticky bottom-0 flex flex-col gap-4 bg-bg px-1 pb-4 pt-2', {\n        'md:justify-between': resetBtnEnabled,\n        'md:justify-end': !resetBtnEnabled,\n        'md:flex-row': !shouldStackButtons,\n      })}\n    >\n      {resetBtnEnabled ? (\n        <div className=\"md:self-center\">\n          <button\n            className=\"btn btn-xl btn-primary-link w-full rounded-none\"\n            data-testid=\"shop-modal-reset-cta\"\n            onClick={() => onReset?.()}\n            ref={reset?.ref}\n            type=\"button\"\n          >\n            {reset?.label}\n            {reset?.adaDescription ? (\n              <span className=\"sr-only\" aria-live=\"assertive\" role=\"alert\">\n                {reset?.adaDescription}\n              </span>\n            ) : null}\n          </button>\n        </div>\n      ) : null}\n      <div\n        className={cx('flex flex-col gap-3', {\n          'md:flex-row': !shouldStackButtons,\n        })}\n      >\n        {buttons}\n      </div>\n    </div>\n  );\n}\n","import * as React from 'react';\nimport { ActionButtons, type ActionButtonProps } from './dialog-action-buttons';\nimport { DialogBase, type DialogBaseProps, type DialogOptionalProps } from './dialog.base';\n\nexport type ActionDialogProps = React.PropsWithChildren<\n  DialogBaseProps & ActionButtonProps & DialogOptionalProps\n>;\n\n/**\n * A dialog with two buttons for the user to take an action to cancel or accept.\n */\nexport function ActionDialog({\n  buttonOptions,\n  onCancel,\n  onConfirm,\n  onDismiss,\n  onReset,\n  shouldStackButtons,\n  ...dialogProps\n}: ActionDialogProps) {\n  const dialogRef = React.useRef<React.ElementRef<'div'>>(null);\n\n  const handleCancel = (event: React.SyntheticEvent<HTMLButtonElement>) => {\n    onCancel?.(event);\n  };\n\n  const handleConfirm = (event: React.SyntheticEvent<HTMLButtonElement>) => {\n    onConfirm?.(event);\n  };\n\n  const bottomContent = (\n    <ActionButtons\n      buttonOptions={buttonOptions}\n      onReset={onReset}\n      onCancel={handleCancel}\n      onConfirm={handleConfirm}\n      shouldStackButtons={shouldStackButtons}\n    />\n  );\n  return (\n    <DialogBase\n      {...dialogProps}\n      onDismiss={onDismiss}\n      bottomContent={bottomContent}\n      ref={dialogRef}\n    />\n  );\n}\n","export * from './dialog';\nexport * from './dialog-alert';\nexport * from './dialog-action';\nexport * from './dialog-action-buttons';\nexport * from './dialog.base';\n","export * from './lib';\n","import type * as Types from './types';\n\nimport {\n  useQuery,\n  type QueryClient,\n  type FetchQueryOptions,\n  type UseQueryOptions,\n} from '@tanstack/react-query';\nimport type { DXError } from '@dx-ui/types-graphql';\n\nexport const GetSpeedBumpFeatureConfigsDocument = {\n  operationName: 'featureConfigs',\n  operationString: `query featureConfigs($names: [String!]!) {\n  featureConfigs(names: $names) {\n    name\n    config\n    conditions\n  }\n}`,\n  originalOpName: 'getSpeedBumpFeatureConfigs',\n};\nexport function useGetSpeedBumpFeatureConfigsQuery<\n  TData = Types.GetSpeedBumpFeatureConfigsQuery,\n  TError = DXError\n>(\n  variables: Types.GetSpeedBumpFeatureConfigsQueryVariables,\n  options?: Omit<UseQueryOptions<Types.GetSpeedBumpFeatureConfigsQuery, TError, TData>, 'queryKey'>\n) {\n  return useQuery<Types.GetSpeedBumpFeatureConfigsQuery, TError, TData>({\n    queryKey: [GetSpeedBumpFeatureConfigsDocument, variables],\n    ...options,\n  });\n}\nexport function serverSideGetSpeedBumpFeatureConfigsQuery(\n  queryClient: QueryClient,\n  variables: Types.GetSpeedBumpFeatureConfigsQueryVariables,\n  options?: FetchQueryOptions<Types.GetSpeedBumpFeatureConfigsQuery>\n) {\n  return queryClient.fetchQuery<Types.GetSpeedBumpFeatureConfigsQuery>({\n    queryKey: [GetSpeedBumpFeatureConfigsDocument, variables],\n    ...options,\n  });\n}\n","import type { QueryClient } from '@tanstack/react-query';\nimport {\n  serverSideGetSpeedBumpFeatureConfigsQuery,\n  useGetSpeedBumpFeatureConfigsQuery,\n} from '../gql/queries';\nimport type { OneLinkConfig } from '@dx-ui/framework-i18n';\nimport { CDN_STALE_TIME } from '@dx-ui/framework-react-query';\n\nconst TRANSLATE_RULES_CONFIG_NAME = 'rule-ui-translate-urls';\nconst ONELINK_CONFIG_NAME = 'config-ui-translate-onelink';\n\nexport const names = [TRANSLATE_RULES_CONFIG_NAME, ONELINK_CONFIG_NAME];\n\nexport function useTranslationsConfig({ isEnabled }: { isEnabled?: boolean } = {}) {\n  const { data } = useGetSpeedBumpFeatureConfigsQuery(\n    {\n      names,\n    },\n    {\n      enabled: isEnabled,\n      staleTime: CDN_STALE_TIME,\n    }\n  );\n  const translateRules =\n    data?.featureConfigs?.find((config) => config.name === TRANSLATE_RULES_CONFIG_NAME) || null;\n  const oneLinkConfig =\n    (data?.featureConfigs?.find((config) => config.name === ONELINK_CONFIG_NAME)\n      ?.config as OneLinkConfig) || null;\n\n  return { oneLinkConfig, translateRules };\n}\n\nexport const getSpeedBumpFeatureConfig = (queryClient: QueryClient) => {\n  return serverSideGetSpeedBumpFeatureConfigsQuery(queryClient, { names });\n};\n","import * as React from 'react';\nimport type { Rule } from '@dx-ui/utilities-url-config';\nimport { RuleEngine, getUrlConfig } from '@dx-ui/utilities-url-config';\nimport { isBrowser } from '@dx-ui/utilities-is-browser';\nimport { useTranslationsConfig } from './hooks/useFeatureConfigs';\nimport { getOneLinkProps } from '@dx-ui/framework-i18n';\n\ntype SpeedbumpAttributes = {\n  isEnabled: boolean;\n  isVisible: boolean;\n  onShow: (e: React.SyntheticEvent<HTMLAnchorElement>) => boolean;\n  onHide: () => void;\n  onContinue: () => void;\n};\n\ntype UseSpeedbumpProps = {\n  /** Used to determine whether to show or hide the speedbump.\n   * Also used to determine the destination language code to use in the target url\n   */\n  language: string;\n  appName: string;\n};\n\n/**\n *  Can be used to act as an anchor event target when using the useSpeedbump hook without a link\n */\nexport function makeAnchorEventTarget(absoluteUrl: string) {\n  const url = new URL(absoluteUrl);\n  return {\n    preventDefault: () => undefined,\n    stopPropagation: () => undefined,\n    currentTarget: {\n      href: absoluteUrl,\n      origin: url.origin,\n      pathname: url.pathname,\n    } as unknown as HTMLAnchorElement,\n    target: {\n      href: absoluteUrl,\n    } as unknown as HTMLAnchorElement,\n  } as unknown as React.ChangeEvent<HTMLAnchorElement>;\n}\n\nexport const DocUseSpeedbump: React.FC<React.PropsWithChildren<UseSpeedbumpProps>> = () => null;\n\nfunction transformUrl({\n  href,\n  pathname,\n  language,\n}: {\n  href: string;\n  pathname: string;\n  language: string;\n}) {\n  if (pathname.startsWith('/zh/') && (language === 'zh-hans' || language === 'zh-hant')) {\n    return href.replace('/zh/', `/${language}/`);\n  }\n  return href;\n}\n/**\n * This hook provides the ability to replace in language urls with english only urls.\n * It only works for HTMLAnchorElement links and will not work with other elements as\n * it will look for a `href` attribute on the target or parent element.\n *\n * It will replace the in-language code with `en` and open the location on the window.\n */\nconst useSpeedbump = (\n  language: string,\n  appName?: string,\n  bypassOneLink?: boolean\n): SpeedbumpAttributes => {\n  const DEFAULT_LANGUAGE = 'en';\n  const { oneLinkConfig, translateRules } = useTranslationsConfig();\n  const url = isBrowser ? window.location.href : '';\n  const oneLinkProps = getOneLinkProps(language, appName || '', url, oneLinkConfig);\n  const translateRuleEngine = React.useMemo(\n    () => (translateRules ? new RuleEngine(translateRules as Rule) : null),\n    [translateRules]\n  );\n  const [isEnabled] = React.useState(language !== DEFAULT_LANGUAGE);\n  const [targetLanguage] = React.useState(language);\n  const [isVisible, setIsVisible] = React.useState<boolean>(false);\n  const [eventTarget, setEventTarget] = React.useState<HTMLAnchorElement>();\n  const onShow = (e: React.SyntheticEvent<HTMLAnchorElement>) => {\n    const { target } = e as React.ChangeEvent<HTMLAnchorElement>;\n    setEventTarget(target);\n    const { href, origin, pathname } =\n      e.currentTarget || (target.parentElement as HTMLAnchorElement);\n    if (!translateRuleEngine) {\n      return false;\n    }\n    const url = transformUrl({ href, pathname, language });\n    if (href !== url) {\n      e.currentTarget.href = url;\n    }\n    const urlConfig = getUrlConfig(translateRuleEngine, url, origin, language);\n    const shouldShowSpeedbump = (!oneLinkProps.isOneLink || bypassOneLink) && urlConfig.speedbump;\n    if (isEnabled && shouldShowSpeedbump) {\n      e.preventDefault();\n      e.stopPropagation();\n      setIsVisible(true);\n      return true;\n    }\n    return false;\n  };\n  const onHide = () => {\n    setIsVisible(false);\n  };\n  const onContinue = () => {\n    setIsVisible(false);\n    if (isBrowser && eventTarget) {\n      // hack, will need to revisit. Looks for current element or parent to find the href\n      const href =\n        eventTarget.href ||\n        (eventTarget.parentElement as HTMLAnchorElement).href ||\n        (eventTarget.parentElement?.parentElement as HTMLAnchorElement).href;\n      const enUri = href?.replace(`/${targetLanguage}/`, `/${DEFAULT_LANGUAGE}/`);\n      enUri &&\n      (eventTarget.target === '_blank' ||\n        (eventTarget.parentElement as HTMLAnchorElement)?.target === '_blank' ||\n        (eventTarget.parentElement?.parentElement as HTMLAnchorElement)?.target === '_blank')\n        ? window.open(enUri, eventTarget.target)\n        : (window.location.href = enUri);\n    }\n  };\n  return {\n    isEnabled,\n    isVisible,\n    onShow,\n    onHide,\n    onContinue,\n  };\n};\n\nexport { useSpeedbump };\nexport default useSpeedbump;\n","import type * as React from 'react';\nimport { useTranslation } from 'next-i18next';\nimport { ActionDialog, DialogTitle } from '@dx-ui/osc-dialog-v2';\nimport set from 'lodash/set';\nimport FocusLock from 'react-focus-lock';\n\nexport type SpeedbumpProps = {\n  /**\n   * Configures speed bump content\n   */\n  speedbumpOptions?: {\n    title: string;\n    message?: string;\n    confirmButtonLabel?: string;\n    cancelButtonLabel?: string;\n  };\n  /**\n   * displays the speeedbump or not\n   */\n  isShowing: boolean;\n  /**\n   * handler to close the speedbump\n   */\n  onClose: () => void;\n  /**\n   * handler used to proceed if chosen\n   */\n  onContinue: (event: React.SyntheticEvent<HTMLButtonElement>) => void;\n};\n\n/**\n * Used to display a speedbump when transitioning to a non translated page\n */\nexport const Speedbump: React.FC<React.PropsWithChildren<SpeedbumpProps>> = ({\n  isShowing,\n  onClose: onCloseProp,\n  onContinue: onContinueProp,\n  speedbumpOptions,\n}) => {\n  const [t] = useTranslation('osc-speedbump');\n  const { title, message, confirmButtonLabel, cancelButtonLabel } = speedbumpOptions ?? {};\n  const handleConfirm = (e: React.SyntheticEvent<HTMLButtonElement>) => {\n    if (window?.digitalData && window?._satellite) {\n      set(window.digitalData, 'click.clickID', 'speedbump_continue');\n      window._satellite?.track?.('global_click');\n    }\n    onContinueProp?.(e);\n  };\n  const handleCancel = () => {\n    if (window?.digitalData && window?._satellite) {\n      set(window.digitalData, 'click.clickID', 'speedbump_return');\n      window._satellite?.track?.('global_click');\n    }\n    onCloseProp?.();\n  };\n\n  const handleDismiss = () => {\n    onCloseProp?.();\n  };\n  const titleOptions = !!(title && message)\n    ? { ...{ title } }\n    : { ...{ hasChildrenWithTitle: true } };\n\n  return (\n    <FocusLock as=\"span\" disabled={!isShowing}>\n      <ActionDialog\n        buttonOptions={{\n          cancel: { label: cancelButtonLabel ?? t('back') },\n          confirm: { label: confirmButtonLabel ?? t('continue') },\n        }}\n        isOpen={isShowing}\n        onCancel={handleCancel}\n        onConfirm={handleConfirm}\n        onDismiss={handleDismiss}\n        size=\"sm\"\n        shouldStackButtons={true}\n        {...titleOptions}\n      >\n        <div data-testid=\"speedbumpDialog\" className=\"mt-3\">\n          {message ? (\n            message\n          ) : (\n            <DialogTitle className=\"mb-4 text-center text-xl font-bold\">\n              {title ?? t('title')}\n            </DialogTitle>\n          )}\n        </div>\n      </ActionDialog>\n    </FocusLock>\n  );\n};\n\nexport default Speedbump;\n","export * from './hooks/useFeatureConfigs';\nexport * from './gql/queries';\nexport * from './gql/types';\nexport * from './use-speedbump';\nexport * from './speedbump';\n","export * from './lib';\n","import type { Facts } from '@dx-shared/rule-engine';\n\nconst BASE_LOCALE = 'en';\n\nexport const handleAllArray = (allArray: Facts[]): string | undefined => {\n  const hasUrl = allArray?.some(\n    (item) =>\n      item.fact === 'url' &&\n      Array.isArray(item.value) &&\n      item.value.includes('*/locations/*') &&\n      item.value.includes('*/search/*')\n  );\n  if (hasUrl) {\n    const languageObj = allArray?.find((item) => item.fact === 'language');\n    return languageObj?.value as string;\n  }\n  return undefined;\n};\nexport type AnyType =\n  | {\n      any: {\n        all: Facts[];\n      }[];\n    }\n  | undefined\n  | null;\nexport const getSearchLanguagesFromRuleUiTranslateConfig = (data: AnyType) => {\n  const supportedLocales = (data?.any || [])\n    ?.flatMap((condition) => {\n      return handleAllArray(condition.all);\n    })\n    ?.filter((value) => value !== undefined);\n  return [BASE_LOCALE, ...supportedLocales];\n};\n","import Head from 'next/head';\nimport { env } from '../../constants';\nimport { useWrappedRouter } from '../../hooks';\nimport type { GeocodePlaceType } from '@dx-ui/queries-dx-shop-search-ui';\nimport { useFeatureConfigsQuery } from '@dx-ui/queries-dx-shop-search-ui';\nimport { getSearchLanguagesFromRuleUiTranslateConfig } from './meta-data-utils';\n\nexport type IMetaDataProps = {\n  brandCode: string | undefined;\n  seoSchema?: string;\n  pageTitle: string;\n  path: string;\n  description: string;\n  configRules?: string[];\n  isGlobalBounds?: boolean;\n  locationPageMatchType?: GeocodePlaceType;\n};\n\nexport const MetaData = ({\n  brandCode,\n  seoSchema,\n  pageTitle,\n  path,\n  description,\n  configRules,\n  isGlobalBounds,\n  locationPageMatchType,\n}: IMetaDataProps) => {\n  const { data: featureConfigData } = useFeatureConfigsQuery({\n    names: ['rule-ui-translate-search'],\n  });\n  const ruleUiTranslateSearchData = featureConfigData?.featureConfigs?.find(\n    (config) => config.name === 'rule-ui-translate-search'\n  );\n  const searchLanguages = getSearchLanguagesFromRuleUiTranslateConfig(\n    ruleUiTranslateSearchData?.conditions\n  );\n  const { router } = useWrappedRouter();\n  const baseUrl = env.OHW_BASE_URL;\n  const faviconSrc = `${env.HILTON_ASSETS_URI}/modules/assets/img/brand/${brandCode}/favicon_${brandCode}`;\n  /**\n   * Using the larger apple-touch-icon for the og:Image since open graph\n   * does not support SVG's. Previously in DX-Categories no images were used.\n   */\n  const ogImageSrc = `${env.HILTON_ASSETS_URI}/modules/assets/img/brand/WW/open-graph-image-1137x422.png`;\n  const cleanPath = path.replace(/[?#].*$/, ''); // canonical url should not include query or hash values\n  const canonicalHref = `${baseUrl}${router.locale}${cleanPath}${\n    cleanPath[cleanPath.length - 1] !== '/' ? '/' : ''\n  }`;\n  const isLocationsPage = path.includes('/locations');\n\n  const getLocationCategory = () => {\n    if (cleanPath === '/locations') return 'default';\n    if (isGlobalBounds) return 'global';\n    return locationPageMatchType;\n  };\n\n  return (\n    <Head>\n      {!!seoSchema && (\n        <script\n          key=\"seo-schema\"\n          dangerouslySetInnerHTML={{ __html: seoSchema }}\n          type=\"application/ld+json\"\n        />\n      )}\n      <link rel=\"canonical\" href={canonicalHref} />\n      <title>{pageTitle}</title>\n      <meta content={description} name=\"description\" />\n      <meta content=\"\" name=\"keywords\" />\n      <meta name=\"og:title\" content={pageTitle} />\n      <meta name=\"og:site_name\" content=\"Hilton\" />\n      <meta name=\"og:type\" content=\"website\" />\n      <meta name=\"og:description\" content={description} />\n      <meta name=\"og:image\" content={ogImageSrc} />\n      <meta name=\"og:url\" content={canonicalHref} />\n      <meta content={configRules?.join('/') || ''} name=\"dx-page-url-suffix\" />\n      {/* dynatrace logging for page categories only on locations for now */}\n      {isLocationsPage ? (\n        <>\n          <meta content={getLocationCategory()} name=\"locations-category\" />\n          <meta content={cleanPath} name=\"locations-path\" />\n        </>\n      ) : null}\n      <meta content=\"summary_large_image\" name=\"twitter:card\" />\n      <meta content=\"hilton.com\" property=\"twitter:domain\" />\n      <meta content={canonicalHref} property=\"twitter:url\" />\n      <meta content={pageTitle} name=\"twitter:title\" />\n      <meta content={description} name=\"twitter:description\" />\n      <meta content={ogImageSrc} name=\"twitter:image\" />\n      <link\n        data-testid=\"favicon\"\n        href={`${faviconSrc}.svg`}\n        rel=\"icon\"\n        type=\"image/svg+xml\"\n        sizes=\"any\"\n        media=\"(prefers-color-scheme: light)\"\n      />\n      <link\n        href={`${faviconSrc}-dark.svg`}\n        rel=\"icon\"\n        type=\"image/svg+xml\"\n        sizes=\"any\"\n        media=\"(prefers-color-scheme: dark)\"\n      />\n      <link\n        rel=\"icon\"\n        href={`${faviconSrc}.png`}\n        type=\"image/png\"\n        media=\"(prefers-color-scheme: light)\"\n      />\n      <link\n        rel=\"icon\"\n        href={`${faviconSrc}-dark.png`}\n        type=\"image/png\"\n        media=\"(prefers-color-scheme: dark)\"\n      />\n      <link\n        href={`${baseUrl}en${cleanPath}${cleanPath[cleanPath.length - 1] !== '/' ? '/' : ''}`}\n        hrefLang=\"x-default\"\n        rel=\"alternate\"\n      />\n      {searchLanguages?.map((locale) => {\n        const href = `${baseUrl}${locale}${cleanPath}${\n          cleanPath[cleanPath.length - 1] !== '/' ? '/' : ''\n        }`;\n        return <link href={href} hrefLang={locale} key={locale} rel=\"alternate\" />;\n      })}\n      ;\n    </Head>\n  );\n};\n","export * from './meta-data';\n","import * as React from 'react';\nimport { useForm, type FieldValues, FormProvider } from 'react-hook-form';\nimport type { FormDataStructure } from '@dx-ui/osc-form';\nimport { ActionDialog } from '@dx-ui/osc-dialog-v2';\nimport { useTranslation } from 'next-i18next';\nimport type { DefaultFilters } from './filters';\nimport cloneDeep from 'lodash/cloneDeep';\n\nexport type FiltersModal = {\n  applyBtnAccessibleLabel?: string;\n  applyBtnLabel?: string;\n  children?: React.ReactNode;\n  contentClassName?: string;\n  defaultFilters?: DefaultFilters;\n  title?: string;\n  isModalOpen: boolean;\n  onCloseModal?: () => void;\n  onSubmit?: (data: FieldValues) => void;\n  resetBtnLabel?: string;\n  dialogTrigger?: React.ReactNode;\n};\n\nconst resetDefaults: DefaultFilters = {\n  amenities: [],\n  brands: [],\n  saleFilter: false,\n  showAvailableHotelsOnly: false,\n  priceFilter: '',\n  tripAdvisorRating: 'allRatings',\n};\nexport const FiltersModal = ({\n  applyBtnAccessibleLabel,\n  applyBtnLabel,\n  children,\n  contentClassName,\n  defaultFilters,\n  onCloseModal,\n  onSubmit,\n  title,\n  isModalOpen,\n  resetBtnLabel,\n  dialogTrigger,\n}: FiltersModal) => {\n  const { t } = useTranslation('osc-filters');\n  const [initialValue, setInitialValue] = React.useState<DefaultFilters | undefined>();\n\n  React.useEffect(() => {\n    if (isModalOpen) setInitialValue(cloneDeep(defaultFilters));\n    reset(defaultFilters);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [isModalOpen]);\n\n  const methods = useForm<FormDataStructure>({\n    defaultValues: defaultFilters,\n    mode: 'onTouched',\n  });\n  const { getValues, reset } = methods;\n\n  const resetFilters = () => {\n    reset(resetDefaults);\n  };\n  const dismissFilters = () => {\n    reset(initialValue, { keepDefaultValues: true });\n    onCloseModal?.();\n  };\n  return (\n    <FormProvider {...methods}>\n      <ActionDialog\n        className={contentClassName}\n        isOpen={isModalOpen}\n        onConfirm={() => onSubmit?.(getValues())}\n        onDismiss={dismissFilters}\n        onCancel={dismissFilters}\n        onReset={resetFilters}\n        size=\"3xl\"\n        title={title ?? t('filters')}\n        stickyHeader\n        buttonOptions={{\n          confirm: {\n            label: applyBtnLabel ?? t('applyFiltersLabel'),\n            adaDescription: applyBtnAccessibleLabel ?? t('andClose'),\n          },\n          reset: { isEnabled: true, label: resetBtnLabel ?? t('resetFiltersLabel') },\n        }}\n        dialogTrigger={dialogTrigger}\n      >\n        <div className=\"divide-y divide-border-alt\">{children}</div>\n      </ActionDialog>\n    </FormProvider>\n  );\n};\n","import { isBrowser } from '@dx-ui/utilities-is-browser';\nimport type { FieldValues } from 'react-hook-form';\n\n/**\n * Utility to provide proper offset for mobile browsers to prevent browser navbar from interfering\n * @returns string\n */\nexport const setBottomPadding = () => {\n  if (isBrowser) {\n    if (window.navigator.userAgent.match(/iPhone/i)) return '4.0rem';\n    if (window.navigator.userAgent.match(/Android/i)) return '3.5rem';\n  }\n  return '0.25rem';\n};\n\n/**\n * Parses data (or defaultFilters) and returns count of active filters. Assumes length of an array as active filter. Booleans are counted if filter returns true.\n * @param data\n * @returns Number\n */\nexport const getActiveFilterCount = (data: FieldValues) => {\n  return Object.values(data ?? {}).reduce((sum, currFilterGroup) => {\n    // Case 1. Is an array of filters. Just count total filters\n    if (Array.isArray(currFilterGroup)) return sum + (currFilterGroup as unknown[]).length;\n    // Case 2. Is a boolean filter. Just add 1 if it's true\n    if (currFilterGroup) return sum + 1;\n    return sum;\n  }, 0);\n};\n","import * as React from 'react';\nimport type { FieldValues } from 'react-hook-form';\nimport { useTranslation } from 'next-i18next';\nimport { FiltersModal } from './filters.modal';\nimport cx from 'classnames';\nimport { getActiveFilterCount } from './filters.utilities';\nimport type { TripAdvisorRatings } from './trip-advisor-filters';\nimport Icon from '@dx-ui/osc-icon';\nimport type { FilterPriceListOptions } from './pricing-filter';\n\nexport type DefaultFilters = {\n  amenities?: string[];\n  brands?: string[];\n  priceFilter?: string | number | number[] | FilterPriceListOptions | undefined;\n  saleFilter?: boolean;\n  showAvailableHotelsOnly?: boolean;\n  tripAdvisorRating?: TripAdvisorRatings;\n};\n\ntype Filters = {\n  /** applyBtnAccessibleLabel Defaults to \"and close\" */\n  applyBtnAccessibleLabel?: string;\n  /** Custom label for apply button in filters modal. Defaults to \"Apply Filters\"  */\n  applyBtnLabel?: string;\n  /** custom className for filter button */\n  buttonClassName?: string;\n  /** Label for filters button. Default to \"Filters\" */\n  buttonLabel?: React.ReactNode;\n  /** Children elements for filters modal. Can use pre-built components or custom as long as they follow react hook form patterns. */\n  children: React.ReactNode;\n  /** Filter selections to initialize with. Follows react hook form defaultValues pattern */\n  defaultFilters?: DefaultFilters;\n  /** Optional filters modal title */\n  filtersModalTitle?: string;\n  /** custom className for modal dialog content */\n  modalContentClassName?: string;\n  /** Callback to hook into filter button click event*/\n  onFiltersClick?: () => void;\n  /** Callback to hook into submission event on filters. Returns state of filters */\n  onSubmit?: (data: FieldValues) => void;\n  /** Custom label for reset button in filters modal. Defaults to \"Reset Filters\"  */\n  resetBtnLabel?: string;\n  /** Hide filter Icon, by default filter Icon is displayed */\n  showFilterIcon?: boolean;\n} & React.HTMLAttributes<HTMLButtonElement>;\n\n/**\n * A shared filters implementation that is intended to used across OHW UI apps to give a consistent filters experience.\n */\nconst Filters = React.forwardRef<HTMLButtonElement, Filters>(\n  (\n    {\n      applyBtnAccessibleLabel,\n      applyBtnLabel,\n      buttonClassName,\n      buttonLabel,\n      children,\n      defaultFilters,\n      filtersModalTitle,\n      modalContentClassName,\n      onFiltersClick,\n      onSubmit,\n      resetBtnLabel,\n      showFilterIcon = true,\n      ...rest\n    },\n    ref\n  ) => {\n    const [t] = useTranslation('osc-filters');\n    const [isOpen, setIsOpen] = React.useState(false);\n    const activeFilterCount = getActiveFilterCount(defaultFilters || {});\n\n    const handleOpenFilters = () => {\n      if (onFiltersClick) {\n        onFiltersClick();\n      }\n      setIsOpen((isOpen) => !isOpen);\n    };\n\n    const handleCloseFilters = () => {\n      setIsOpen((isOpen) => !isOpen);\n    };\n\n    const handleSubmit = (data: FieldValues) => {\n      if (onSubmit) onSubmit(data);\n      /** Close filters modal when apply button is pressed */\n      setIsOpen(false);\n    };\n\n    return (\n      <FiltersModal\n        applyBtnAccessibleLabel={applyBtnAccessibleLabel}\n        applyBtnLabel={applyBtnLabel}\n        contentClassName={modalContentClassName}\n        defaultFilters={defaultFilters}\n        isModalOpen={isOpen}\n        onSubmit={handleSubmit}\n        onCloseModal={handleCloseFilters}\n        resetBtnLabel={resetBtnLabel}\n        title={filtersModalTitle}\n        dialogTrigger={\n          <button\n            {...rest}\n            className={cx('btn btn-primary-outline flex content-center gap-0.5', buttonClassName)}\n            onClick={handleOpenFilters}\n            type=\"button\"\n            ref={ref}\n          >\n            {showFilterIcon ? <Icon name=\"filters\" size=\"sm\" /> : null}\n            {/* Show filters text if there are no active filters, otherwise show filters text + active filter count */}\n            {activeFilterCount === 0\n              ? buttonLabel || t('filters')\n              : buttonLabel || t('openFilterPanelText', { count: activeFilterCount })}\n          </button>\n        }\n      >\n        {children}\n      </FiltersModal>\n    );\n  }\n);\n\nFilters.displayName = 'Filters';\n\nexport { Filters };\nexport default Filters;\n","import type { HotelAmenityId } from '@dx-ui/gql-types';\nimport { FormInput } from '@dx-ui/osc-form';\nimport Icon, { AmenityIcons } from '@dx-ui/osc-icon';\nimport { InfoPopup } from '@dx-ui/osc-info-popup';\nimport { useTranslation } from 'next-i18next';\n\nexport type AmenityFiltersProps = {\n  amenities?: { id: string; name: string; hint?: string | null }[];\n  amenityCategories?: { id?: string | null; name?: string | null; amenityIds: string[] | null }[];\n};\n\nconst AmenityFilters = ({ amenities, amenityCategories }: AmenityFiltersProps) => {\n  const { t } = useTranslation('osc-filters');\n\n  return (\n    <div className=\"mt-4 divide-y divide-border-alt\" id=\"amenities-list\">\n      {amenityCategories?.map(({ name, amenityIds }, idx) => {\n        //do not return category if has no children\n        return amenities?.some((amenity) => amenityIds?.includes(amenity?.id)) ? (\n          <div key={name ?? idx}>\n            <h3 className=\"label label-inline-reverse p-4 pt-3\">{name}</h3>\n            <div className=\"grid items-start gap-6 px-4 pb-4 sm:grid-cols-1 md:grid-cols-2\">\n              {amenityIds?.map((amenityId) => {\n                const amenity = amenities?.find((amenity) => amenity.id === amenityId);\n                const amenityName = amenity?.name;\n                const hint = amenity?.hint;\n                return amenityName ? (\n                  <div className=\"flex items-center\" key={amenityId}>\n                    <FormInput\n                      id={amenityId}\n                      label={\n                        <div className=\"flex items-start\">\n                          <div className=\"-mt-1 shrink-0 ltr:mr-2\">\n                            <Icon name={AmenityIcons[amenityId as HotelAmenityId]} size=\"lg\" />\n                          </div>\n                          <span className=\"rtl:px-2\">{amenityName}</span>\n                        </div>\n                      }\n                      labelClassName=\"flex items-start\"\n                      name=\"amenities\"\n                      type=\"checkbox\"\n                      value={amenityId}\n                    />\n                    {hint ? (\n                      <div className=\"pl-2\">\n                        <InfoPopup label={t('amenityInformation', { amenityName })}>\n                          <span className=\"flex w-40 lg:w-60\">{hint}</span>\n                        </InfoPopup>\n                      </div>\n                    ) : null}\n                  </div>\n                ) : null;\n              })}\n            </div>\n          </div>\n        ) : null;\n      })}\n    </div>\n  );\n};\n\nexport { AmenityFilters };\n","import { FormInput } from '@dx-ui/osc-form';\nimport { useTranslation } from 'next-i18next';\nimport Image from 'next/legacy/image';\n\nexport type BrandFiltersProps = {\n  brands?: { code: string; name: string }[];\n};\n\nconst BrandFilters = ({ brands }: BrandFiltersProps) => {\n  const { t } = useTranslation('osc-filters');\n  return brands?.length ? (\n    <div id=\"brands-list\">\n      <h3 className=\"label label-inline-reverse p-4 pt-3\">{t('ourBrands')}</h3>\n      <div className=\"grid gap-6 px-4 sm:grid-cols-1 md:grid-cols-2\">\n        {brands?.map(({ code, name }) => (\n          <div key={code}>\n            <FormInput\n              id={name}\n              label={\n                <div className=\"flex flex-row items-center align-middle\" key={code}>\n                  <span className=\"inline-block size-6 ltr:mr-2\">\n                    <Image\n                      alt={code}\n                      aria-hidden={true}\n                      src={`/modules/assets/svgs/logos/bug/${code}.svg`}\n                      width={24}\n                      height={24}\n                    />\n                  </span>\n                  <span className=\"flex-wrap rtl:px-2\">{name}</span>\n                </div>\n              }\n              name=\"brands\"\n              type=\"checkbox\"\n              value={code}\n            />\n          </div>\n        ))}\n      </div>\n    </div>\n  ) : null;\n};\n\nexport { BrandFilters };\n","import { FormInput } from '@dx-ui/osc-form';\nimport { useTranslation } from 'next-i18next';\n\nexport type ShowAvailableHotelsOnlyFilterProps = {\n  isDisabled?: boolean;\n  isVisible?: boolean;\n} & React.HTMLAttributes<HTMLInputElement>;\n\nconst ShowAvailableHotelsOnlyFilter = ({\n  isDisabled = false,\n  isVisible = true,\n}: ShowAvailableHotelsOnlyFilterProps) => {\n  const { t } = useTranslation('osc-filters');\n\n  return isVisible ? (\n    <div className=\"p-3 pt-1.5\">\n      <FormInput\n        disabled={isDisabled}\n        id=\"showAvailableHotelsOnly\"\n        label={<span className=\"rtl:px-2\">{t('showAvailableText')}</span>}\n        labelClassName=\"flex\"\n        name=\"showAvailableHotelsOnly\"\n        type=\"checkbox\"\n      />\n    </div>\n  ) : null;\n};\n\nexport { ShowAvailableHotelsOnlyFilter };\n","import type { TFunction } from 'i18next';\n\nexport type TripAdvisorRatings =\n  | 'fiveAndUp'\n  | 'fourAndUp'\n  | 'threeAndUp'\n  | 'twoAndUp'\n  | 'allRatings';\n\ntype ImageLabelValue = {\n  altOrLabel: string;\n  value: TripAdvisorRatings;\n  onlyRatingImgSrc: string;\n  logoWithRatingImgSrc: string;\n};\n\nexport const GET_TRIP_ADVISOR_RATINGS_INFO = (t: TFunction<'osc-filters'>): ImageLabelValue[] => [\n  {\n    altOrLabel: t('fiveRatingsAltText'),\n    value: 'fiveAndUp',\n    onlyRatingImgSrc: 'https://www.tripadvisor.com/img/cdsi/img2/ratings/traveler/s5.0-26025-5.svg',\n    logoWithRatingImgSrc:\n      'https://www.tripadvisor.com/img/cdsi/img2/ratings/traveler/5.0-26025-5.svg',\n  },\n  {\n    altOrLabel: t('ratingAndUpAltText', { rating: 4 }),\n    value: 'fourAndUp',\n    onlyRatingImgSrc: 'https://www.tripadvisor.com/img/cdsi/img2/ratings/traveler/s4.0-26025-5.svg',\n    logoWithRatingImgSrc:\n      'https://www.tripadvisor.com/img/cdsi/img2/ratings/traveler/4.0-26025-5.svg',\n  },\n  {\n    altOrLabel: t('ratingAndUpAltText', { rating: 3 }),\n    value: 'threeAndUp',\n    onlyRatingImgSrc: 'https://www.tripadvisor.com/img/cdsi/img2/ratings/traveler/s3.0-26025-5.svg',\n    logoWithRatingImgSrc:\n      'https://www.tripadvisor.com/img/cdsi/img2/ratings/traveler/3.0-26025-5.svg',\n  },\n  {\n    altOrLabel: t('ratingAndUpAltText', { rating: 2 }),\n    value: 'twoAndUp',\n    onlyRatingImgSrc: 'https://www.tripadvisor.com/img/cdsi/img2/ratings/traveler/s2.0-26025-5.svg',\n    logoWithRatingImgSrc:\n      'https://www.tripadvisor.com/img/cdsi/img2/ratings/traveler/2.0-26025-5.svg',\n  },\n  {\n    altOrLabel: t('allRatingsText'),\n    value: 'allRatings',\n    onlyRatingImgSrc: '',\n    logoWithRatingImgSrc: '',\n  },\n];\n","import { useTranslation } from 'next-i18next';\nimport { GET_TRIP_ADVISOR_RATINGS_INFO } from './trip-advisor-filters.constants';\nimport Image from 'next/legacy/image';\nimport { FormInput } from '@dx-ui/osc-form';\n\nexport const TripAdvisorFilters = () => {\n  const { t } = useTranslation('osc-filters');\n  const tripAdvisorRatingsInfo = GET_TRIP_ADVISOR_RATINGS_INFO(t);\n  return (\n    <fieldset id=\"trip-advisor-list\">\n      <h3 className=\"label label-inline-reverse px-4 py-3\">{t('tripAdvisorRatingsLabel')}</h3>\n      <div className=\"space-y-2 px-4 pb-4\">\n        {tripAdvisorRatingsInfo?.map(({ altOrLabel, value, onlyRatingImgSrc }, index) => (\n          <FormInput\n            className=\"ltr:!ml-0\"\n            key={value}\n            labelClassName=\"label label-inline-reverse\"\n            id={value}\n            label={\n              <>\n                {onlyRatingImgSrc ? (\n                  <div className=\"-ml-3 flex items-center rtl:-mr-3\">\n                    <Image\n                      alt={altOrLabel}\n                      aria-hidden\n                      src={onlyRatingImgSrc}\n                      height={32}\n                      width={100}\n                    />\n                    <span aria-hidden className=\"-ml-2 rtl:-mr-2\">\n                      {index === 0 ? t('onlyText') : t('andUpText')}\n                    </span>\n                  </div>\n                ) : (\n                  <span aria-hidden>{altOrLabel}</span>\n                )}\n                <span className=\"sr-only\">{`${t('tripAdvisorRatingsLabel')} ${altOrLabel}`}</span>\n              </>\n            }\n            name=\"tripAdvisorRating\"\n            type=\"radio\"\n            value={value}\n          />\n        ))}\n      </div>\n    </fieldset>\n  );\n};\n","export * from './trip-advisor-filters';\nexport * from './trip-advisor-filters.constants';\n","//max pricing filter price should not exceed 12 chars\nexport const MAX_PRICE_FILTER_INPUT_CHARS = 12;\nexport const NO_MAX_PILL = { basePrice: undefined, convertedPrice: undefined };\n","import type { FieldValues } from 'react-hook-form';\nimport type { ConversionCurrencyOptions } from '@dx-ui/osc-currency-converter';\nimport { formatAndConvertPrice } from '@dx-ui/osc-currency-converter';\nimport type { FilterPriceListOptions } from '../filter-max-price-radio-buttons';\n\n//Recommended to use in filters form onSubmit to transform pricing filter value to price object\nexport const transformPricingFilterData = ({\n  data,\n  isCurrenciesLoading,\n  priceListOptions,\n  toCurrency,\n  fromCurrency,\n  language = 'en',\n}: {\n  data: FieldValues;\n  isCurrenciesLoading: boolean;\n  priceListOptions: FilterPriceListOptions[];\n  toCurrency?: ConversionCurrencyOptions;\n  fromCurrency?: ConversionCurrencyOptions;\n  language?: string;\n}) => {\n  //if no priceList filter data, return undefined\n  if (!data?.priceFilter) return undefined;\n  //if currencies not found, return undefined\n  if (isCurrenciesLoading) return undefined;\n  let convertedBasePrice = data?.priceFilter;\n  // convert priceFieldValue, basePrice is always in USD\n  if (fromCurrency?.currencyCode !== 'USD') {\n    convertedBasePrice = formatAndConvertPrice({\n      language,\n      fromCurrency,\n      toCurrency,\n      basePrice: data?.priceFilter?.convertedPrice\n        ? data?.priceFilter?.convertedPrice\n        : Number.parseInt(data?.priceFilter, 10),\n    });\n    convertedBasePrice = convertedBasePrice?.replace(/\\$/g, '');\n  }\n  const priceListMatch = priceListOptions.find(\n    (priceData) =>\n      priceData?.basePrice === data?.priceFilter ||\n      priceData?.basePrice === convertedBasePrice?.basePrice\n  );\n  //if converted price matches price values, return value object\n  //if there is only an input value match, assign to converted price and undefined base\n  return (\n    priceListMatch ?? {\n      basePrice: convertedBasePrice || data.priceFilter || '',\n      convertedPrice: data.priceFilter,\n    }\n  );\n};\n\nexport const getCurrencySymbol = (currency?: ConversionCurrencyOptions) =>\n  currency?.currencySymbolFormat?.replace(/\\{0\\}/, '') || currency?.currencyCode || '$';\n\nexport const getFormattedPrice = (price?: number, currency?: ConversionCurrencyOptions) => {\n  const formattedPrice = price?.toLocaleString();\n  let displayPrice = `$${formattedPrice}`;\n  if (currency?.currencySymbolFormat)\n    displayPrice = currency?.currencySymbolFormat?.replace(/\\{0\\}/, `${formattedPrice}`);\n  else if (currency?.currencyCode) displayPrice = `${formattedPrice} ${currency?.currencyCode}`;\n\n  return displayPrice;\n};\n","import { useTranslation } from 'next-i18next';\nimport { NO_MAX_PILL } from './utils/pricing-filter-constants';\nimport { useCurrencyConversion } from '@dx-ui/osc-currency-converter';\nimport { getFormattedPrice } from './utils/pricing-filter-utils';\nimport { FormInput } from '@dx-ui/osc-form';\nimport { useRouter } from 'next/router';\nimport { DEFAULT_LANGUAGE } from '@dx-ui/utilities-dates';\n\nexport type FilterPriceListOptions = {\n  basePrice?: number;\n  convertedPrice?: number;\n};\n\nexport type FilterPriceRadioButtonsProps = {\n  currencyCode: string;\n  hidePriceRadioButtons?: boolean;\n  isPointsFilter?: boolean;\n  priceList: FilterPriceListOptions[];\n};\nconst formatPoints = (points?: number, lang = DEFAULT_LANGUAGE) =>\n  points ? new Intl.NumberFormat(lang).format(points) : '';\n\nexport const FilterMaxPriceRadioButtons = ({\n  currencyCode,\n  hidePriceRadioButtons = false,\n  isPointsFilter = false,\n  priceList,\n}: FilterPriceRadioButtonsProps) => {\n  const { t } = useTranslation('osc-filters');\n  const { currenciesMap } = useCurrencyConversion();\n  const { locale } = useRouter();\n  const currencyDetails = currenciesMap.get(currencyCode);\n\n  const prices = [...priceList, NO_MAX_PILL];\n\n  return (\n    <ul className=\"space-y-3\">\n      {prices.map((price, i) => {\n        const isFinalPrice = i === prices.length - 1;\n        const value = isFinalPrice ? 'noMaximum' : price.convertedPrice;\n        const getLabelText = () => {\n          let pointsPriceLabelText = '';\n          if (isFinalPrice) return t('noMaximum');\n\n          if (isPointsFilter)\n            pointsPriceLabelText = formatPoints(price?.basePrice, locale || DEFAULT_LANGUAGE);\n          else if (currencyDetails)\n            pointsPriceLabelText = getFormattedPrice(price.convertedPrice, currencyDetails);\n\n          return pointsPriceLabelText;\n        };\n        return (\n          <li key={value}>\n            <FormInput\n              labelClassName=\"label label-inline-reverse\"\n              className=\"ltr:!ml-0\"\n              disabled={hidePriceRadioButtons}\n              name=\"priceFilter\"\n              type=\"radio\"\n              label={getLabelText()}\n              value={value}\n            />\n          </li>\n        );\n      })}\n    </ul>\n  );\n};\n","import cx from 'classnames';\nexport const PriceFilterSkeleton = () => (\n  <div>\n    <div aria-hidden className=\"mt-4\" data-testid=\"priceRange-currency-loading\">\n      <div className=\"ml-4\">\n        <div className=\"mt-3 h-4 w-32 animate-pulse rounded-2xl bg-bg-alt\" />\n        <div className=\"mt-3 h-3.5 w-48 animate-pulse rounded-2xl bg-bg-alt\" />\n\n        <div className=\"mt-3\">\n          {Array.from({ length: 5 }, (_, i) => {\n            const isEnd = i === 0 || i === 4;\n            return (\n              <span key={`price-pill-${i}`}>\n                <div\n                  className={cx(\n                    'mx-1 mt-3 inline-block h-8 w-14 animate-pulse rounded-2xl bg-bg-alt',\n                    {\n                      'w-28': isEnd,\n                      'ml-0': i === 0,\n                    }\n                  )}\n                />\n              </span>\n            );\n          })}\n        </div>\n        <div className=\"mb-3 ml-3 mt-2 flex h-10 w-96 animate-pulse rounded-2xl bg-bg-alt\" />\n      </div>\n    </div>\n  </div>\n);\n","import { useTranslation } from 'next-i18next';\nimport { FormInput } from '@dx-ui/osc-form';\nimport { useFormContext } from 'react-hook-form';\nimport { PriceFilterSkeleton } from './price-filter-skeleton';\nimport * as React from 'react';\nimport Icon from '@dx-ui/osc-icon';\nimport type { FilterPriceListOptions } from './filter-max-price-radio-buttons';\nimport { FilterMaxPriceRadioButtons } from './filter-max-price-radio-buttons';\n\nexport type PricingFilterProps = {\n  /**Currency symbol to label input field and description for accessibility */\n  currency: { symbol: string; description: string; code: string };\n  /**Disable price filter elements   */\n  hidePriceFilter?: boolean;\n  /**Price filter loading state, will active shimmer if true*/\n  isLoading?: boolean;\n  /**\n   * Array of price consideration messages that will appear under the price filter header.<br/>\n   * Suggested values from OSC filters resource bundle:<br/>\n   * <code>osc-filters: perNightPriceFilterMessage - \"You are filtering on a per night price\"</code><br/>\n   * <code>osc-filters: daytimeUsePriceMessage - \"You are filtering a daytime use price.\"</code>\n   */\n  priceConsiderationMessage?: string[];\n  /**Active price filter state converted price value to set input value on reopen<br/>\n   * recommend value: <code>[filterstate].priceFilter.convertedPrice</code>\n   */\n  priceFilter?: string;\n  /**Object array for filter options display and numerical values <br/>\n   * <code>[{ basePrice: number; convertedPrice: number;}]</code>\n   */\n  priceListOptions: FilterPriceListOptions[];\n  /**Sale filter active */\n  isSaleFilter?: boolean;\n  /**Toggle sale filter checkbox */\n  showSaleFilter?: boolean;\n  /** max points filter active */\n  isPointsFilter?: boolean;\n  /** Subheading element that appears below filter h3 heading*/\n  subHeading?: React.ReactNode;\n};\nexport const PricingFilter = ({\n  currency,\n  hidePriceFilter = false,\n  isLoading,\n  priceConsiderationMessage,\n  priceFilter = 'noMaximum',\n  priceListOptions,\n  isSaleFilter,\n  showSaleFilter = true,\n  isPointsFilter = false,\n  subHeading,\n}: PricingFilterProps) => {\n  const { t } = useTranslation('osc-filters');\n  const { setValue } = useFormContext();\n  React.useEffect(() => {\n    if (priceFilter) setValue('priceFilter', priceFilter);\n    if (showSaleFilter && isSaleFilter) setValue('saleFilter', true);\n  }, [isSaleFilter, priceFilter, setValue, showSaleFilter]);\n\n  if (isLoading) return <PriceFilterSkeleton />;\n  return (\n    <div className=\"px-4\">\n      <h3 className=\"label label-inline-reverse text-base font-semibold\">\n        {isPointsFilter ? t('maxPointsPerNight') : t('maxPriceRangeLabel')}\n      </h3>\n      {subHeading}\n      {!!priceConsiderationMessage &&\n        priceConsiderationMessage.map((message) =>\n          message ? (\n            <div className=\"text-sm text-text-alt\" key={message}>\n              {message}\n            </div>\n          ) : null\n        )}\n      <div className=\"mt-3 flex w-auto flex-col items-start space-y-3\">\n        <FilterMaxPriceRadioButtons\n          currencyCode={currency.code}\n          isPointsFilter={isPointsFilter}\n          hidePriceRadioButtons={hidePriceFilter}\n          priceList={priceListOptions}\n        />\n        {showSaleFilter ? (\n          <div>\n            <FormInput\n              type=\"checkbox\"\n              containerClassName=\"flex items-center\"\n              label={\n                <div className=\"flex items-center\">\n                  <span className=\"flex size-6 shrink-0 items-center\">\n                    <Icon name=\"sale\" size=\"md\" />\n                  </span>\n                  <span className=\"px-2\">{t('showSaleRates')}</span>\n                </div>\n              }\n              labelClassName=\"flex items-start\"\n              name=\"saleFilter\"\n            />\n          </div>\n        ) : null}\n      </div>\n    </div>\n  );\n};\n","export * from './filter-max-price-radio-buttons';\nexport * from './pricing-filter';\nexport * from './utils/pricing-filter-constants';\nexport * from './utils/pricing-filter-utils';\n","export * from './filters';\nexport * from './amenity-filters';\nexport * from './brand-filters';\nexport * from './filters.modal';\nexport * from './show-available-hotels-only-filters';\nexport * from './trip-advisor-filters';\nexport * from './pricing-filter';\n","export * from './lib';\n","import type * as React from 'react';\nimport { createContext, useContext } from 'react';\n\ntype TabsContext = {\n  active?: string;\n  activeIndex: number;\n  addRef: (ref: HTMLButtonElement | null) => void;\n  count: number;\n  onTabKeyDown: (e: React.KeyboardEvent<HTMLButtonElement>, value?: string) => void;\n  onTabSelect: (value?: string) => void;\n  setCount: (value: number) => void;\n};\n\nconst TabsContext = createContext<TabsContext>({\n  activeIndex: 0,\n  count: 0,\n} as TabsContext);\n\nconst useTabs = () => useContext(TabsContext);\n\nexport { TabsContext, useTabs };\nexport default TabsContext;\n","export function sanitizeId(id?: string) {\n  return id?.replace(/\\s/g, '-');\n}\n","import type * as React from 'react';\nimport { useTabs } from './tabs.context';\nimport cx from 'classnames';\nimport { sanitizeId } from './tabs.utils';\n\ntype TabButton = {\n  activeClassName?: string;\n  inactiveClassName?: string;\n  handleOnClick?: (value: React.MouseEvent<HTMLButtonElement>) => void;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\n/**\n * The `TabButton` component is used to setup the a11y attributes for the tab button. it accepts `className` and `activeClassName`/`inactiveClassName` props that are applied when the tab is active/inactive.\n */\nconst TabButton: React.FC<React.PropsWithChildren<TabButton>> = ({\n  activeClassName,\n  inactiveClassName,\n  id,\n  className,\n  handleOnClick,\n  ...rest\n}) => {\n  const { active, addRef, onTabKeyDown, onTabSelect } = useTabs();\n  const safeId = sanitizeId(id);\n  const isActive = active === safeId;\n\n  const handleOnTabClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n    handleOnClick?.(event);\n    onTabSelect(safeId);\n  };\n\n  return (\n    <button\n      id={safeId}\n      aria-controls={`tab-panel-${safeId}`}\n      role=\"tab\"\n      aria-selected={isActive}\n      tabIndex={isActive ? 0 : -1}\n      onClick={handleOnTabClick}\n      onKeyDown={(e) => onTabKeyDown(e, safeId)}\n      ref={(ref) => addRef(ref)}\n      className={cx('appearance-none', className, {\n        [activeClassName as string]: isActive && !!activeClassName,\n        [inactiveClassName as string]: !isActive && !!inactiveClassName,\n      })}\n      type=\"button\"\n      {...rest}\n    />\n  );\n};\n\nexport { TabButton };\nexport default TabButton;\n","import type * as React from 'react';\nimport type { TabButton as TabButtonType } from './tab.button';\nimport { TabButton } from './tab.button';\n\n/**\n * The `TabListButton` component extends the `TabButton` component and is used as the default styles for the OSC component, but doesn't need to be used and the developer can provide their own `TabButton` component if they wish.\n */\nconst TabListButton: React.FC<React.PropsWithChildren<TabButtonType>> = ({ ...rest }) => (\n  <TabButton\n    className=\"grow cursor-pointer appearance-none whitespace-nowrap border-b-4 border-transparent px-4 py-2 font-bold hover:text-primary focus:text-primary md:whitespace-normal\"\n    activeClassName=\"!border-primary text-primary brand-es:!border-secondary\"\n    inactiveClassName=\"border-transparent text-text-alt\"\n    {...rest}\n  />\n);\n\nexport { TabListButton };\nexport default TabListButton;\n","import * as React from 'react';\nimport cx from 'classnames';\n\ntype TabList = React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * The `TabList` component is used to render the tab buttons. It sets up a11y properties for the best compliance with the WCAG 2.0 accessibility guidelines.\n */\nconst TabList = React.forwardRef<HTMLDivElement, TabList>(\n  ({ className, ...rest }, forwardedRef) => (\n    <div\n      role=\"tablist\"\n      className={cx('flex justify-start overflow-x-auto px-1 pt-2', className)}\n      ref={forwardedRef}\n      {...rest}\n    />\n  )\n);\n\nTabList.displayName = 'TabList';\n\nexport { TabList };\nexport default TabList;\n","import * as React from 'react';\nimport cx from 'classnames';\nimport type { Argument } from 'classnames';\nimport { useWindowSize, useResizeObserver } from 'usehooks-ts';\nimport { BREAKPOINTS } from '@dx-ui/osc-responsive-image';\nimport { useTranslation } from 'next-i18next';\nimport { TabListButton } from '../tab.list.button';\nimport { useForkedRef } from '@dx-ui/utilities-use-forked-ref';\nimport { Icon } from '@dx-ui/osc-icon';\nimport { isRtl as isRTL } from '@dx-ui/utilities-get-language-direction';\nimport { useRect } from '@dx-ui/utilities-use-rect';\nimport { useRouter } from 'next/router';\n\ntype TabListScrollable = React.HTMLAttributes<HTMLDivElement> & {\n  leftArrowWrapperClassName?: Argument;\n  rightArrowWrapperClassName?: Argument;\n};\n\nconst TabListScrollable = React.forwardRef<HTMLDivElement, TabListScrollable>(\n  (\n    { className, leftArrowWrapperClassName, rightArrowWrapperClassName, children, id, ...rest },\n    forwardedRef\n  ) => {\n    const arrayChildren = React.Children.toArray(children);\n    const { width = 0 } = useWindowSize();\n    const { t } = useTranslation('osc-scrollable-tabs');\n    const { locale = 'en' } = useRouter();\n    const isRtl = isRTL(locale);\n    const tablistRef = React.useRef<React.ElementRef<'div'>>(null);\n    const ref = useForkedRef(forwardedRef, tablistRef);\n    const [isBackwardArrowVisible, setBackwardArrowVisible] = React.useState(false);\n    const [isForwardArrowVisible, setForwardArrowVisible] = React.useState(false);\n\n    const [focusedTabId, setFocusedTabId] = React.useState<string | null>(null);\n\n    //The purpose of this is to adjust the scroll position of the selected tab when switching between tabs adds vertical scrollbar to the screen.\n    useResizeObserver({\n      ref: tablistRef,\n      box: 'border-box',\n      onResize: () => {\n        if (tablistRef.current && focusedTabId) {\n          const focusedTab = document.getElementById(focusedTabId);\n\n          if (focusedTab) {\n            const { scrollLeft } = tablistRef.current;\n            //excluding padding of the Scrollable Div\n            //The distance from the beginning of the tablist div to the left border of the focused button\n            const distanceFromButtonToBeginningOfTabListDiv =\n              focusedTab.offsetLeft - tablistRef.current.scrollLeft;\n            const buttonWidth = focusedTab.offsetWidth;\n            //excluding scrollable tabs\n            const tablistWidth = tablistRef.current.offsetWidth;\n\n            tablistRef.current.scrollLeft = adjustScrollPosition(\n              distanceFromButtonToBeginningOfTabListDiv,\n              buttonWidth,\n              tablistWidth,\n              scrollLeft\n            );\n          }\n        }\n      },\n    });\n\n    const updateArrowVisibility = React.useCallback(\n      (rect: DOMRect | undefined) => {\n        //number of pixels that an element's content is scrolled from its left edge\n        const scrollLeft = tablistRef.current?.scrollLeft ?? 0;\n        // measurement of the width of an element's content, including content not visible on the screen due to overflow\n        const scrollWidth = tablistRef.current?.scrollWidth ?? 0;\n        //width of the tablist div excluding hidden tabs due to scroll\n        const tabListWidth = rect?.width || 0;\n        //indicates whether we need a scroll or not\n        const widthDiff = scrollWidth - tabListWidth;\n        //widthDiff > 0 means we need arrows\n        //for LTR, checking if scrollLeft value is more than 5 pixels, that means we need to let the user scroll backwards using arrows.\n        //similar is being checked for RTL.\n        const showScrollBackwardArrow = isRtl\n          ? scrollLeft < -5 && widthDiff > 0\n          : scrollLeft > 5 && widthDiff > 0;\n        //widthDiff > 0 means we need arrows\n        //for LTR, once widthDiff is almost the same as scrollLeft that means we are close to the end of the scroll.\n        //For the last 5 pixels of the scroll the arrow dissapears.\n        //similar is being checked for RTL.\n        const showScrollForwardArrow = isRtl\n          ? widthDiff > 0 && widthDiff > -scrollLeft + 5\n          : widthDiff > 0 && widthDiff - scrollLeft > 5;\n\n        setBackwardArrowVisible(showScrollBackwardArrow);\n        setForwardArrowVisible(showScrollForwardArrow);\n      },\n      [isRtl]\n    );\n\n    const tabListRect = useRect({ ref: tablistRef, onResize: updateArrowVisibility });\n    const onTabListScroll = React.useCallback(\n      () => tabListRect && updateArrowVisibility(tabListRect),\n      [updateArrowVisibility, tabListRect]\n    );\n\n    const threeItems = arrayChildren.length === 3;\n    const fourItems = arrayChildren.length === 4;\n\n    const getScrollMultiplier = () => {\n      //Checking if there are 3 or 4 tabs or the device is tablet or mobile.\n      if (threeItems || fourItems || width <= BREAKPOINTS['lg']) {\n        // scroll 50% of the offset width when there are less items or on smaller screens\n        return 0.5;\n      } else {\n        // at 40% of the offset width, each click scrolls a smaller distance. This works better for larger screens or higher item counts\n        return 0.4;\n      }\n    };\n\n    const scrollForward = (scrollLeft: number, offsetWidth: number) => {\n      return scrollLeft + offsetWidth * getScrollMultiplier();\n    };\n    const scrollBackward = (scrollLeft: number, offsetWidth: number) => {\n      return scrollLeft - offsetWidth * getScrollMultiplier();\n    };\n\n    const rightArrowHandler = () => {\n      if (tablistRef.current) {\n        const { scrollLeft, offsetWidth } = tablistRef.current;\n        if (isRtl) {\n          tablistRef.current.scrollLeft = scrollBackward(scrollLeft, offsetWidth);\n        } else {\n          tablistRef.current.scrollLeft = scrollForward(scrollLeft, offsetWidth);\n        }\n      }\n    };\n\n    const leftArrowhandler = () => {\n      if (tablistRef.current) {\n        const { scrollLeft, offsetWidth } = tablistRef.current;\n        if (isRtl) {\n          tablistRef.current.scrollLeft = scrollForward(scrollLeft, offsetWidth);\n        } else {\n          tablistRef.current.scrollLeft = scrollBackward(scrollLeft, offsetWidth);\n        }\n      }\n    };\n\n    function adjustScrollPosition(\n      distanceFromButtonToBeginningOfTabListDiv: number,\n      buttonWidth: number,\n      tablistWidth: number,\n      scrollLeft: number\n    ) {\n      //the padding value in rems\n      const paddingLeft = 0.25; //the \"px-1\" class. paddingLeft = paddingRight\n      const leftPaddingOfScrollableDiv =\n        paddingLeft * parseFloat(getComputedStyle(document.documentElement).fontSize);\n      //Adjusting the scroll position if the focused button is not fully visible to the user\n      //This if statement checks if the focused button overflows to the right(forwards) of the tablist div\n      //if it is, the scroll position is adjusted to make focused button fully visible.\n      if (\n        distanceFromButtonToBeginningOfTabListDiv + buttonWidth >=\n        tablistWidth - leftPaddingOfScrollableDiv\n      ) {\n        return (\n          scrollLeft +\n          (distanceFromButtonToBeginningOfTabListDiv +\n            buttonWidth +\n            leftPaddingOfScrollableDiv -\n            tablistWidth)\n        );\n      }\n      //Adjusting the scroll position if the focused button is not fully visible to the user\n      //This if statement checks if the focused button overflows to the left(backwards) of the tablist div\n      //if it is, the scroll position is adjusted to make focused button fully visible.\n      if (distanceFromButtonToBeginningOfTabListDiv < leftPaddingOfScrollableDiv) {\n        return (\n          scrollLeft - (leftPaddingOfScrollableDiv - distanceFromButtonToBeginningOfTabListDiv)\n        );\n      }\n\n      return scrollLeft;\n    }\n\n    const scrollToFocusedItem = (e: React.FocusEvent<HTMLButtonElement>) => {\n      setFocusedTabId(e.target.id);\n      if (tablistRef.current) {\n        const { scrollLeft } = tablistRef.current;\n        //excluding padding of the Scrollable Div\n        //The distance from the beginning of the tablist div to the left border of the focused button\n        const distanceFromButtonToBeginningOfTabListDiv =\n          e.target.offsetLeft - tablistRef.current.scrollLeft;\n        const buttonWidth = e.target.offsetWidth;\n        //excluding scrollable tabs\n        const tablistWidth = tablistRef.current.offsetWidth;\n\n        tablistRef.current.scrollLeft = adjustScrollPosition(\n          distanceFromButtonToBeginningOfTabListDiv,\n          buttonWidth,\n          tablistWidth,\n          scrollLeft\n        );\n      }\n    };\n\n    if (arrayChildren.length < 1) return null;\n    const lessOrEqual5 = arrayChildren.length <= 5;\n    const lessOrEqual2 = arrayChildren.length <= 2;\n\n    return (\n      //28px is the width of the svg arrow icon\n      <div\n        className={cx('relative', {\n          'mx-[28px] 2xl:m-0': !lessOrEqual5,\n          'mx-[28px] lg:m-0': lessOrEqual5 && !lessOrEqual2,\n          'm-0': lessOrEqual2,\n        })}\n      >\n        <div\n          role=\"tablist\"\n          className={cx(\n            'flex justify-start overflow-x-auto px-1 pt-2 motion-safe:scroll-smooth',\n            className\n          )}\n          ref={ref}\n          onScroll={onTabListScroll}\n          aria-labelledby={id}\n          {...rest}\n        >\n          {isBackwardArrowVisible ? (\n            <div\n              className={cx(\n                'pointer-events-none absolute start-0 z-10 flex h-full w-1/5 translate-x-[-28px] justify-start bg-gradient-to-r from-bg pb-3 lg:w-80 rtl:translate-x-[28px] rtl:bg-gradient-to-l',\n                { 'block lg:hidden': lessOrEqual5 && !lessOrEqual2, hidden: lessOrEqual2 },\n                leftArrowWrapperClassName\n              )}\n            >\n              <button\n                className=\"pointer-events-auto\"\n                onClick={leftArrowhandler}\n                aria-hidden\n                tabIndex={-1}\n                data-testid=\"scrollBackward\"\n                type=\"button\"\n              >\n                {isRtl ? (\n                  <Icon name=\"arrowhead-right\" size=\"md\" />\n                ) : (\n                  <Icon name=\"arrowhead-left\" size=\"md\" />\n                )}\n                <span className=\"sr-only\">{t('scrollBackward')}</span>\n              </button>\n            </div>\n          ) : null}\n\n          {React.Children.map(arrayChildren, (child) => {\n            if (React.isValidElement(child) && child.type === TabListButton)\n              return React.cloneElement(child as React.ReactElement, {\n                onFocus: (e: React.FocusEvent<HTMLButtonElement>) => {\n                  child.props?.onFocus?.();\n                  scrollToFocusedItem(e);\n                },\n              });\n          })}\n\n          {isForwardArrowVisible ? (\n            <div\n              className={cx(\n                'pointer-events-none absolute end-0 flex h-full w-1/5 translate-x-[28px] justify-end bg-gradient-to-l from-bg pb-3 lg:w-80 rtl:translate-x-[-28px] rtl:bg-gradient-to-r',\n                { 'block lg:hidden': lessOrEqual5 && !lessOrEqual2, hidden: lessOrEqual2 },\n                rightArrowWrapperClassName\n              )}\n            >\n              <button\n                onClick={rightArrowHandler}\n                className=\"pointer-events-auto\"\n                aria-hidden\n                tabIndex={-1}\n                data-testid=\"scrollForward\"\n                type=\"button\"\n              >\n                {isRtl ? (\n                  <Icon name=\"arrowhead-left\" size=\"md\" />\n                ) : (\n                  <Icon name=\"arrowhead-right\" size=\"md\" />\n                )}\n                <span className=\"sr-only\">{t('scrollForward')}</span>\n              </button>\n            </div>\n          ) : null}\n        </div>\n      </div>\n    );\n  }\n);\n\nTabListScrollable.displayName = 'TabListScrollable';\n\nexport { TabListScrollable };\nexport default TabListScrollable;\n","import cx from 'classnames';\nimport type * as React from 'react';\nimport { forwardRef } from 'react';\nimport { useTabs } from './tabs.context';\nimport { sanitizeId } from './tabs.utils';\n\ntype TabPanel = React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * The `TabPanel` component is used to render the content of the `Tab` component. It sets up a11y properties for the best compliance with the WCAG 2.0 accessibility guidelines.\n */\nconst TabPanel = forwardRef<HTMLDivElement, TabPanel>(\n  ({ id, className, ...rest }, forwardedRef) => {\n    const { active } = useTabs();\n    const safeId = sanitizeId(id);\n    const isActive = active === safeId;\n\n    return (\n      <div\n        id={`tab-panel-${safeId}`}\n        aria-labelledby={safeId}\n        aria-hidden={!isActive}\n        role=\"tabpanel\"\n        tabIndex={0}\n        className={cx('w-full', className, {\n          hidden: !isActive,\n        })}\n        ref={forwardedRef}\n        {...rest}\n      />\n    );\n  }\n);\n\nTabPanel.displayName = 'TabPanel';\n\nexport { TabPanel };\nexport default TabPanel;\n","import { useTabs } from './tabs.context';\nimport * as React from 'react';\nimport { useEffect } from 'react';\nimport cx from 'classnames';\n\ntype TabPanels = React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * The `TabPanels` component is used as a wrapper for the `TabPanel` components. It is important to use as it sets the count of components that helps set the focuse correctly.\n */\nconst TabPanels: React.FC<React.PropsWithChildren<TabPanels>> = ({\n  children,\n  className,\n  ...rest\n}) => {\n  const { setCount } = useTabs();\n  useEffect(() => {\n    setCount(React.Children.count(children));\n  }, [children, setCount]);\n\n  return (\n    <div className={cx('relative flex w-full', className)} {...rest}>\n      {children}\n    </div>\n  );\n};\n\nTabPanels.displayName = 'TabPanels';\n\nexport { TabPanels };\nexport default TabPanels;\n","import cx from 'classnames';\nimport * as React from 'react';\nimport { forwardRef, useEffect, useState } from 'react';\nimport type { TabsContext as TabsContextType } from './tabs.context';\nimport { TabsContext } from './tabs.context';\nimport { isRtl as isRTL } from '@dx-ui/utilities-get-language-direction';\nimport { sanitizeId } from './tabs.utils';\nimport { useRouter } from 'next/router';\n\nexport type TabsBaseProps = {\n  /** change the tabpanel on arrow key */\n  changeWithArrow?: boolean;\n  /** change the tabpanel on Up and Down keys. Works only if changeWithArrow is also true.   */\n  useUpDownArrows?: boolean;\n  /** id of tab that should be active by default */\n  defaultActive?: string;\n  /** callback with the id of the active tab */\n  onTabChange?: (id?: string) => void;\n};\n\ntype Tabs = TabsBaseProps & React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * `Tabs` is a container component that holds the tabs and their content. The set of Tab components are composed inside the Tabs component and have their own context. There should be a `TabButton` or a component that extends `TabButton` with an `id` prop that correlates to a `TabPanel` component.\n *\n * For a11y, there is a `changeWithArrow` prop that will change the tabpanel on arrow key, changing the default behavior to change the tab on enter key.\n *\n * ```jsx\n * <Tabs>\n *  <TabList>\n *    <TabButton id=\"tab1\">Tab 1</TabButton>\n *    <TabButton id=\"tab2\">Tab 2</TabButton>\n *  </TabList>\n *  <TabPanels>\n *    <TabPanel id=\"tab1\">\n *      <p>Tab 1 content</p>\n *    </TabPanel>\n *    <TabPanel id=\"tab2\">\n *      <p>Tab 2 content</p>\n *    </TabPanel>\n *  </TabPanels>\n * </Tabs>\n * ```\n */\nexport const Tabs = forwardRef<HTMLDivElement, Tabs>(\n  (\n    { changeWithArrow, useUpDownArrows, defaultActive, onTabChange, className, children, ...rest },\n    forwardedRef\n  ) => {\n    const [active, setActive] = useState(sanitizeId(defaultActive));\n    const [activeIndex, setActiveIndex] = useState<number>(0);\n    const [count, setCount] = useState<number>(0);\n    const { locale = 'en' } = useRouter();\n    const isRtl = isRTL(locale);\n    const refs: HTMLButtonElement[] = React.useMemo(() => [], []);\n    const addRef: TabsContextType['addRef'] = (ref) =>\n      ref ? (refs.includes(ref) ? refs : refs.push(ref)) : refs;\n\n    const changeActiveTab = React.useCallback(\n      (id?: string) => {\n        setActive(id);\n        setActiveIndex(refs.findIndex((ref) => ref.id === id));\n\n        if (onTabChange) {\n          onTabChange(id);\n        }\n      },\n      [onTabChange, refs]\n    );\n\n    const nextTabIndex = (currentIndex: number) =>\n      currentIndex + 1 <= count - 1 ? currentIndex + 1 : 0;\n    const previousTabIndex = (currentIndex: number) =>\n      currentIndex - 1 >= 0 ? currentIndex - 1 : count - 1;\n\n    const isModifiedKeyStroke = (e: React.KeyboardEvent<HTMLButtonElement>) =>\n      Boolean(e.shiftKey || e.altKey || e.ctrlKey || e.metaKey);\n\n    const onTabKeyDown: TabsContextType['onTabKeyDown'] = (e, id) => {\n      if (isModifiedKeyStroke(e)) {\n        return false;\n      }\n\n      const index = refs.findIndex((ref) => ref.id === id);\n      let tabRef = 0;\n      switch (e.key) {\n        case 'ArrowUp':\n        case 'ArrowLeft':\n          if (e.key === 'ArrowUp' && !useUpDownArrows) {\n            break;\n          }\n          e.preventDefault();\n          tabRef = isRtl ? nextTabIndex(index) : previousTabIndex(index);\n          if (changeWithArrow) {\n            changeActiveTab(refs[tabRef]?.getAttribute('id') || id);\n          }\n          refs[tabRef]?.focus();\n          break;\n        case 'ArrowDown':\n        case 'ArrowRight':\n          if (e.key === 'ArrowDown' && !useUpDownArrows) {\n            break;\n          }\n          e.preventDefault();\n          tabRef = isRtl ? previousTabIndex(index) : nextTabIndex(index);\n          if (changeWithArrow) {\n            changeActiveTab(refs[tabRef]?.getAttribute('id') || id);\n          }\n          refs[tabRef]?.focus();\n          break;\n        case 'Enter':\n        case ' ':\n          changeActiveTab(id);\n          break;\n        case 'End':\n          e.preventDefault();\n          refs[count - 1]?.focus();\n          break;\n        case 'Home':\n          e.preventDefault();\n          refs[0]?.focus();\n          break;\n        // no default\n      }\n    };\n    const onTabSelect: TabsContextType['onTabSelect'] = (id) => changeActiveTab(id);\n\n    useEffect(() => {\n      if (!defaultActive) {\n        refs.length > 0 && changeActiveTab(refs[0]?.id);\n      }\n    }, [changeActiveTab, defaultActive, refs]);\n\n    return (\n      <TabsContext.Provider\n        value={{\n          active,\n          activeIndex,\n          addRef,\n          count,\n          onTabKeyDown,\n          onTabSelect,\n          setCount,\n        }}\n      >\n        <div ref={forwardedRef} className={cx('relative', className)} {...rest}>\n          {children}\n        </div>\n      </TabsContext.Provider>\n    );\n  }\n);\n\nTabs.displayName = 'Tabs';\n\nexport default Tabs;\n","import type { IconNames, EYIconNames, ESIconNames, HPIconNames } from '@dx-ui/osc-icon';\n\nexport const brandIconMapper: {\n  [key: string]:\n    | { brandCode: 'EY'; name: (typeof EYIconNames)[number] }\n    | {\n        brandCode: 'ES';\n        name: (typeof ESIconNames)[number];\n        invertedName: (typeof ESIconNames)[number];\n      }\n    | {\n        brandCode: 'HP';\n        name: (typeof HPIconNames)[number];\n        invertedName: (typeof HPIconNames)[number];\n      };\n} = {\n  livsmartBreakfast: { brandCode: 'EY', name: 'breakfast' },\n  livsmartFitness: { brandCode: 'EY', name: 'fitness' },\n  livsmartGrill: { brandCode: 'EY', name: 'grill' },\n  livsmartKitchen: { brandCode: 'EY', name: 'kitchen' },\n  livsmartLaundry: { brandCode: 'EY', name: 'laundry' },\n  livsmartPetFriendly: { brandCode: 'EY', name: 'pet-friendly' },\n  livsmartStudio: { brandCode: 'EY', name: 'studio' },\n  embassyBreakfast: { brandCode: 'ES', name: 'breakfast', invertedName: 'breakfast_inverted' },\n  embassyFitness: { brandCode: 'ES', name: 'fitness', invertedName: 'fitness_inverted' },\n  embassyReception: { brandCode: 'ES', name: 'drink', invertedName: 'drink_inverted' },\n  hamptonHexagon: { brandCode: 'HP', name: 'hex', invertedName: 'hex_inverted' },\n} as const;\n\nexport const iconMapper: {\n  [key: string]: (typeof IconNames)[number];\n} = {\n  twentyFourHourMemberService: 'clock',\n  access: 'access',\n  account: 'user',\n  airlineMiles: 'airport',\n  amazonBox: 'amazon',\n  americanExpress: 'credit-card',\n  benefitsStar: 'star-circle',\n  carRental: 'car-rental',\n  chooseYourRoom: 'choose-your-room',\n  complimentaryBreakfast: 'hot-breakfast',\n  deviceApp: 'mobile',\n  diamond: 'diamond',\n  digitalCheckin: 'app',\n  digitalKey: 'digital-key',\n  dining: 'dining',\n  eliteRolloverNights: 'award',\n  fifthNightFree: 'free-nights',\n  freeWifi: 'wifi',\n  giftPoints: 'gift',\n  honorsDiscount: 'price',\n  honorsOffers: 'event',\n  lateCheckout: 'check-out',\n  loungeAccess: 'lounge',\n  lyftRides: 'lyft',\n  onPropertyRewards: 'rewards',\n  orderAhead: 'order-ahead',\n  points: 'points',\n  pointsMoney: 'points-and-money',\n  poolPoints: 'pool-points',\n  pointsPromotions: 'points-promotions',\n  premiumWifi: 'wifi',\n  roomGuarantee: 'check-in',\n  roomUpgrade: 'room-upgrade',\n  secondGuest: 'users',\n  transferPoints: 'transfer',\n  waterBottle: 'water-bottle',\n  hotelStays: 'hotel',\n  convertPoints: 'convert-points',\n  buyPoints: 'buy-points',\n  meetingEvents: 'meeting',\n  hgv: 'keys',\n  allInclusiveSpaDiscount: 'spa',\n  cookie: 'cookie',\n};\n","export * from './tab.button';\nexport * from './tab.list.button';\nexport * from './tab.list';\nexport * from './scrollable/tab.list';\nexport * from './tab.panel';\nexport * from './tab.panels';\nexport * from './tabs.context';\nexport * from './tabs.utils';\nexport * from './tabs';\nexport * from './util/icon-mapper';\n","export * from './lib/index';\n","import type { ActiveFiltersState, FilterType, TripAdvisorRatings } from './filter.constants';\nimport type { LocationCategory, Maybe } from '@dx-ui/queries-dx-shop-search-ui';\nimport { HotelAttributeIds, PRICE_SILDER_MAX, defaultActiveFiltersState } from './filter.constants';\nimport type { ConversionCurrencyOptions } from '@dx-ui/osc-currency-converter';\nimport type { QueryParameters } from '../../constants';\nimport { DEFAULT_LANGUAGE } from '@dx-ui/utilities-dates';\n\nexport function updateFilters(\n  activeFiltersState: ActiveFiltersState,\n  filter: string,\n  type: FilterType\n) {\n  let newActiveFilterState: ActiveFiltersState = defaultActiveFiltersState;\n\n  if (type === 'AMENITIES') {\n    const amenityFilters = [...activeFiltersState.amenityFilters];\n    const amenityIndex = amenityFilters.indexOf(filter);\n    if (amenityIndex !== -1) amenityFilters.splice(amenityIndex, 1);\n    newActiveFilterState = {\n      ...activeFiltersState,\n      amenityFilters,\n    };\n  } else if (type === 'ATTRIBUTES') {\n    const attributeFilters = [...activeFiltersState.attributeFilters];\n    const attributeIndex = attributeFilters.indexOf(filter);\n    if (attributeIndex !== -1) attributeFilters.splice(attributeIndex, 1);\n    newActiveFilterState = {\n      ...activeFiltersState,\n      attributeFilters,\n    };\n  } else if (type === 'OPTIONAL') {\n    newActiveFilterState = {\n      ...activeFiltersState,\n      showAvailableHotels: !activeFiltersState.showAvailableHotels,\n    };\n  } else if (type === 'PRICE' || type === 'POINTS') {\n    newActiveFilterState = {\n      ...activeFiltersState,\n      priceFilter: undefined,\n    };\n  } else if (type === 'RATINGS') {\n    newActiveFilterState = {\n      ...activeFiltersState,\n      ratingsFilter: filter as TripAdvisorRatings,\n    };\n  } else if (type === 'BRANDS') {\n    const brandFilters = [...activeFiltersState.brandFilters];\n    const brandIndex = brandFilters.indexOf(filter);\n    if (brandIndex !== -1) brandFilters.splice(brandIndex, 1);\n    newActiveFilterState = {\n      ...activeFiltersState,\n      brandFilters,\n    };\n  }\n\n  return { newActiveFilterState };\n}\n\nexport const getFiltersDataForAnalytics = (\n  activeFiltersState: ActiveFiltersState,\n  initalTAValue?: boolean\n) => {\n  const selectedFiltersList = activeFiltersState.amenityFilters.concat(\n    activeFiltersState.brandFilters\n  );\n  if (activeFiltersState.showAvailableHotels) selectedFiltersList.push('showAvailableHotels');\n  let selectedFilters = selectedFiltersList.join(':');\n  const priceSliderValue = activeFiltersState.priceFilter\n    ? activeFiltersState.priceFilter.join(':')\n    : undefined;\n  if (priceSliderValue)\n    selectedFilters = selectedFilters ? selectedFilters.concat(':priceSlider') : 'priceSlider';\n  const selectedTAFilter =\n    initalTAValue && activeFiltersState.ratingsFilter === 'allRatings'\n      ? undefined\n      : activeFiltersState.ratingsFilter;\n  return { selectedFilters, priceSliderValue, selectedTAFilter };\n};\n\nexport const getActiveFiltersCount = (activeFiltersState: ActiveFiltersState) =>\n  activeFiltersState?.amenityFilters?.filter(Boolean).length +\n  activeFiltersState?.attributeFilters?.filter(Boolean).length +\n  activeFiltersState?.brandFilters?.filter(Boolean).length +\n  (activeFiltersState?.showAvailableHotels ? 1 : 0) +\n  (isPriceValid(activeFiltersState?.priceFilter?.[0]) ? 1 : 0) +\n  (activeFiltersState?.ratingsFilter\n    ? activeFiltersState.ratingsFilter === 'allRatings'\n      ? 0\n      : 1\n    : 0);\n\nconst isPriceValid = (priceFilter?: number) => Boolean(priceFilter && !(priceFilter === 0));\n\nexport const isPriceRangeValid = (priceFilter?: Tuple<2, number>, maxPriceLimit?: number) =>\n  Boolean(\n    priceFilter &&\n      !(\n        priceFilter[0] === 0 &&\n        priceFilter[1] === (maxPriceLimit ? maxPriceLimit : PRICE_SILDER_MAX)\n      )\n  );\n\nexport function getValidFilters(filters?: string[]): string[] | undefined {\n  return filters && filters?.filter(Boolean)?.length > 0 ? filters?.filter(Boolean) : undefined;\n}\nexport function getTARatingValue(filter?: TripAdvisorRatings) {\n  return filter && filter !== 'allRatings' ? filter : undefined;\n}\n\nexport function initializeActiveFiltersState({\n  category,\n  queryParameters,\n  brandCode,\n  showSaleFilter,\n  sessionFiltersState,\n}: {\n  queryParameters: QueryParameters;\n  category?: Maybe<LocationCategory | 'resort'>;\n  brandCode?: string;\n  showSaleFilter?: boolean;\n  sessionFiltersState?: Partial<ActiveFiltersState>;\n  isMvtVariant?: boolean;\n}): ActiveFiltersState {\n  const { activeFiltersState, datesFlex } = queryParameters;\n\n  const amenityFilters = sessionFiltersState?.amenityFilters?.length\n    ? sessionFiltersState.amenityFilters\n    : activeFiltersState?.amenityFilters || [];\n  const attributeFilters = sessionFiltersState?.attributeFilters?.length\n    ? sessionFiltersState?.attributeFilters\n    : activeFiltersState?.attributeFilters || [];\n  const brandFilters = sessionFiltersState?.brandFilters?.length\n    ? sessionFiltersState.brandFilters\n    : activeFiltersState?.brandFilters || [];\n\n  if (category && !amenityFilters.includes(category)) {\n    amenityFilters.push(category);\n  }\n\n  if (!showSaleFilter && attributeFilters.includes(HotelAttributeIds.sale)) {\n    attributeFilters.splice(attributeFilters.indexOf(HotelAttributeIds.sale), 1);\n  }\n\n  if (brandCode && brandCode !== 'WW' && !brandFilters.includes(brandCode)) {\n    brandFilters.push(brandCode);\n  }\n  const priceFilterState =\n    sessionFiltersState?.priceFilter !== undefined\n      ? sessionFiltersState?.priceFilter\n      : activeFiltersState?.priceFilter;\n  const priceFilter = datesFlex ? undefined : priceFilterState;\n  const ratingsFilter = sessionFiltersState?.ratingsFilter\n    ? sessionFiltersState?.ratingsFilter\n    : activeFiltersState?.ratingsFilter;\n  const showAvailableHotelsState =\n    sessionFiltersState?.showAvailableHotels !== undefined\n      ? sessionFiltersState.showAvailableHotels\n      : activeFiltersState?.showAvailableHotels;\n  const showAvailableHotels = datesFlex ? false : showAvailableHotelsState;\n\n  return {\n    ...activeFiltersState,\n    amenityFilters,\n    attributeFilters,\n    brandFilters,\n    priceFilter,\n    ratingsFilter,\n    showAvailableHotels,\n  };\n}\n\nexport const getDisplayPrice = (price?: number, currency?: ConversionCurrencyOptions) => {\n  const formattedPrice = price?.toLocaleString();\n  let displayPrice = `$${formattedPrice}`;\n  if (currency?.currencySymbolFormat)\n    displayPrice = currency?.currencySymbolFormat?.replace(/\\{0\\}/, `${formattedPrice}`);\n  else if (currency?.currencyCode) displayPrice = `${formattedPrice} ${currency?.currencyCode}`;\n\n  return displayPrice;\n};\nexport const invalidPriceRange = (minimum: number, maximum: number) =>\n  Number.isFinite(minimum) && Number.isFinite(maximum) && minimum > maximum;\n\nconst replaceNonDigits = (val: string) => {\n  let value = val?.replace(/[\\D\\s._-]+/i, '');\n  value = value?.replace(/,/g, '');\n  return value;\n};\nexport const getNumericPriceValue = (price: string) => {\n  const priceVal = price || '';\n  return parseFloat(replaceNonDigits(priceVal));\n};\n\nexport function isNumeric(num: string) {\n  return Number.isFinite(+num) && !isNaN(parseFloat(replaceNonDigits(num)));\n}\n\nexport const formatPoints = (points?: number, lang?: string) =>\n  points ? new Intl.NumberFormat(lang || DEFAULT_LANGUAGE).format(points) : '';\n\nexport const getConvertedMaxPrice = (\n  activeFiltersState: Partial<ActiveFiltersState> | null = null,\n  selectedCurrency = 'USD'\n): string => {\n  const priceFilter = activeFiltersState?.priceFilter ?? [];\n  const priceIndex = !selectedCurrency || selectedCurrency === 'USD' ? 0 : 1;\n\n  return String(priceFilter[priceIndex] ?? 'noMaximum');\n};\n","import { forwardRef } from 'react';\n\nconst FormErrorIcon = forwardRef<SVGSVGElement, React.SVGProps<SVGSVGElement>>(\n  ({ width = 16, height = 16, ...rest }, ref) => (\n    <svg\n      ref={ref}\n      role=\"img\"\n      aria-hidden\n      height={height}\n      width={width}\n      viewBox=\"0 0 24 24\"\n      {...rest}\n    >\n      <g fill=\"currentcolor\">\n        <circle cx=\"12\" cy=\"12\" r=\"12\" />\n      </g>\n      <g transform=\"translate(8.000000, 8.000000)\" stroke=\"#FFFFFF\" strokeLinecap=\"square\">\n        <path d=\"M1,1 L7.00679887,7.00679887\" strokeWidth=\"2\" />\n        <path d=\"M1,7 L7.00679887,0.993201131\" strokeWidth=\"2\" />\n      </g>\n    </svg>\n  )\n);\n\nFormErrorIcon.displayName = 'FormErrorIcon';\n\nexport { FormErrorIcon };\nexport default FormErrorIcon;\n","import cx from 'classnames';\nimport * as React from 'react';\nimport type { FieldError } from 'react-hook-form';\nimport { FormErrorIcon } from './form.error-icon';\n\ntype FormError = {\n  error?: Partial<FieldError>;\n} & React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * The standard error message to be used for forms and form inputs\n */\nconst FormError = React.forwardRef<HTMLDivElement, FormError>(\n  ({ error, className, ...rest }, ref) => {\n    const messages = (error?.types ? Object.values(error.types) : [error?.message]).filter(\n      (v) => typeof v === 'string'\n    );\n    const hasError = messages.length > 0;\n\n    return (\n      <div\n        ref={ref}\n        className={cx(className, {\n          hidden: !hasError,\n          '!mt-0 block': hasError,\n        })}\n        {...rest}\n      >\n        {hasError && (\n          <div className=\"flex flex-col space-y-2\">\n            {messages.map((message) => (\n              <div\n                key={String(message)}\n                className=\"mt-1 flex gap-1 text-sm leading-tight text-danger rtl:space-x-reverse\"\n              >\n                <FormErrorIcon />\n                <span>{message}</span>\n              </div>\n            ))}\n          </div>\n        )}\n      </div>\n    );\n  }\n);\n\nFormError.displayName = 'FormError';\n\nexport { FormError };\nexport default FormError;\n","import * as React from 'react';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport { useTranslation } from 'next-i18next';\nimport cx from 'classnames';\n\nimport { FormError } from './form.error';\n\nimport type { SubmitHandler, UseFormProps, UseFormReturn } from 'react-hook-form';\nimport type { FormDataStructure } from './form.types';\n\ntype FormProps = {\n  /**\n   * This is an override to the main form error message, used to notify the user that there are errors that need to be fixed. This is not for individual field error messages.\n   */\n  errorMessage?: string;\n  /**\n   * This will return an object with key/value pairs for each input in the form\n   */\n  onSubmit?: (data: any, methods: UseFormReturn) => void;\n  /**\n   * Please reference the [react-hook-form `useForm()` API documentation](https://react-hook-form.com/api/useform)\n   */\n  useFormProps?: UseFormProps<FormDataStructure>;\n  /** Override for the Error Banner Defaults to displaying */\n  hasErrorBanner?: boolean | undefined;\n} & Omit<React.FormHTMLAttributes<HTMLFormElement>, 'onSubmit'>;\n\n/**\n * This is the Form Component that sets up `react-hook-form` with a `<FormProvider/>` and a general error message. All inputs in the form should `useFormContext()` either using `FormInput, FormSelect, FormTextarea, FormConnector` or some other custom component.\n */\nexport const Form: React.FC<React.PropsWithChildren<FormProps>> = ({\n  errorMessage,\n  onSubmit,\n  children,\n  useFormProps = { mode: 'onTouched', criteriaMode: 'all' },\n  hasErrorBanner = true,\n  method = 'POST',\n  ...rest\n}) => {\n  const [t] = useTranslation('osc-form');\n  const memoizedFormProps = React.useMemo(() => useFormProps, [useFormProps]);\n\n  const methods = useForm<FormDataStructure>({\n    mode: 'onTouched',\n    criteriaMode: 'all',\n    ...memoizedFormProps,\n  });\n  const {\n    formState: { errors, isSubmitted },\n  } = methods;\n  const hasErrors = Object.keys(errors).length > 0;\n\n  const onFormSubmit: SubmitHandler<FormDataStructure> = (data) => {\n    if (onSubmit) {\n      onSubmit(data, methods);\n    }\n  };\n\n  return (\n    <FormProvider {...methods}>\n      {hasErrorBanner && (\n        <div\n          role=\"alert\"\n          className={cx('bg-danger-alt text-danger', {\n            'mb-4 p-4': hasErrors && isSubmitted,\n          })}\n        >\n          {hasErrors && isSubmitted && (\n            <h2>\n              <FormError\n                className=\"mt-0 font-semibold\"\n                error={{ message: errorMessage || t('errorMessage') }}\n              />\n            </h2>\n          )}\n        </div>\n      )}\n      <form method={method} {...rest} noValidate onSubmit={methods.handleSubmit(onFormSubmit)}>\n        {children}\n      </form>\n    </FormProvider>\n  );\n};\n\nexport type { FormProps };\n","import type { FieldValues, UseFormReturn } from 'react-hook-form';\nimport { useFormContext } from 'react-hook-form';\n\ntype FormConnector<T extends FieldValues> = {\n  children: JSX.Element | ((props: UseFormReturn<T>) => JSX.Element);\n};\n\nconst FormConnector = <T extends FieldValues>({ children }: FormConnector<T>) => {\n  const methods = useFormContext<T>();\n  return typeof children === 'function' ? children(methods) : children;\n};\n\nexport { FormConnector };\nexport default FormConnector;\n","import cx from 'classnames';\nimport * as React from 'react';\nimport { useTranslation } from 'next-i18next';\nimport { Spinner } from '@dx-ui/osc-spinner';\n\ntype FormHelpMessage = {\n  loading?: boolean;\n  message?: string | string[];\n} & React.HTMLAttributes<HTMLDivElement>;\n\nconst FormHelpMessage = React.forwardRef<HTMLDivElement, FormHelpMessage>(\n  ({ className, message, loading, id, ...rest }, ref) => {\n    const { t } = useTranslation('osc-form');\n    const messages = Array.isArray(message) ? message : [message];\n\n    return (\n      <div id={id} className=\"grid gap-1 pt-1\">\n        {loading ? (\n          <div className=\"flex gap-2\">\n            <Spinner size=\"sm\" />\n            <p>{t('loading')}</p>\n          </div>\n        ) : (\n          messages &&\n          messages?.map((value, index) => (\n            <div\n              ref={ref}\n              className={cx('items-center space-x-2 text-sm text-text-alt', className)}\n              key={`help-message-${index + 1}`}\n              {...rest}\n            >\n              <p>{value}</p>\n            </div>\n          ))\n        )}\n      </div>\n    );\n  }\n);\n\nFormHelpMessage.displayName = 'FormHelpMessage';\n\nexport { FormHelpMessage };\nexport default FormHelpMessage;\n","import type * as React from 'react';\nimport { useTranslation } from 'next-i18next';\nimport type { FormLabelBase } from './form.types';\n\ntype FormLabelHelper = Pick<FormLabelBase, 'required' | 'optional'>;\n\nconst FormLabelHelper: React.FC<React.PropsWithChildren<FormLabelHelper>> = ({\n  required,\n  optional,\n}) => {\n  const [t] = useTranslation('osc-form');\n\n  const requiredText = required && t('required');\n  const optionalText = optional && t('optional');\n\n  const text = requiredText || optionalText;\n\n  return text ? (\n    <>\n      {' '}\n      <span className=\"font-normal text-text-alt\">({text})</span>\n    </>\n  ) : null;\n};\n\nexport { FormLabelHelper };\nexport default FormLabelHelper;\n","import cx from 'classnames';\nimport type * as React from 'react';\nimport { FormLabelHelper } from './form.label-helper';\nimport type { FormLabelBase } from './form.types';\n\ntype FormLabel = FormLabelBase<HTMLLabelElement>;\n\nconst FormLabel: React.FC<React.PropsWithChildren<FormLabel>> = ({\n  label,\n  required,\n  optional,\n  hasError,\n  className,\n  children,\n  ...rest\n}) => {\n  return (\n    <label\n      className={cx('label', className, {\n        'text-danger': hasError,\n      })}\n      {...rest}\n    >\n      <span>\n        {label}\n        <FormLabelHelper required={required} optional={optional} />\n      </span>\n      {children}\n    </label>\n  );\n};\n\nexport { FormLabel };\nexport default FormLabel;\n","import cx from 'classnames';\nimport * as React from 'react';\nimport { get, useFormContext } from 'react-hook-form';\nimport { useTranslation } from 'next-i18next';\nimport { FormError } from './form.error';\nimport { FormHelpMessage } from './form.help-message';\nimport { FormLabel } from './form.label';\nimport type { FormInputBase } from './form.types';\n\n/**\n * This component is to be used in place of all `<input>` elements including checkbox and radio\n */\nexport const FormInput: React.FC<\n  React.PropsWithChildren<FormInputBase<React.InputHTMLAttributes<HTMLInputElement>>>\n> = ({\n  label,\n  name,\n  required,\n  optional,\n  registerOptions,\n  labelClassName,\n  helpMessage,\n  loading,\n  className,\n  containerClassName,\n  ...rest\n}) => {\n  const id = React.useId();\n  const errorId = `input-error-${id}`;\n  const helperId = `input-helper-${id}`;\n  const [t] = useTranslation('osc-form');\n  const {\n    register,\n    formState: { errors },\n  } = useFormContext();\n  const fieldError = get(errors, name);\n  const hasError = !!fieldError;\n\n  let inputClassName = '';\n  let labelClass = '';\n  switch (rest.type) {\n    case 'checkbox':\n      inputClassName = 'form-checkbox';\n      labelClass = 'label-inline-reverse';\n      break;\n    case 'radio':\n      inputClassName = 'form-radio';\n      labelClass = 'label-inline';\n      break;\n    default:\n      inputClassName = 'form-input w-full';\n      break;\n  }\n\n  return (\n    <div className={containerClassName}>\n      <FormLabel\n        label={label}\n        required={required}\n        optional={optional}\n        hasError={hasError}\n        className={cx('self-start', labelClass, labelClassName)}\n      >\n        <input\n          type=\"text\"\n          {...rest}\n          className={cx(inputClassName, className, {\n            'form-error': hasError,\n          })}\n          aria-invalid={hasError}\n          required={required}\n          aria-describedby={`${errorId} ${helperId} ${rest?.['aria-describedby'] || ''}`}\n          {...register(name, {\n            required: required ? t('requiredError') : false,\n            ...registerOptions,\n          })}\n        />\n      </FormLabel>\n      <FormError id={errorId} error={fieldError} />\n      <FormHelpMessage id={helperId} message={helpMessage} loading={loading} />\n    </div>\n  );\n};\n\nexport default FormInput;\n","import cx from 'classnames';\nimport type * as React from 'react';\nimport { FormLabelHelper } from './form.label-helper';\nimport type { FormLabelBase } from './form.types';\n\ntype FormLegend = FormLabelBase<HTMLLegendElement>;\n\nconst FormLegend: React.FC<React.PropsWithChildren<FormLegend>> = ({\n  label,\n  required,\n  optional,\n  hasError,\n  className,\n  ...rest\n}) => {\n  return (\n    <legend\n      className={cx('label', className, {\n        'text-danger': hasError,\n      })}\n      {...rest}\n    >\n      <span>\n        {label}\n        <FormLabelHelper required={required} optional={optional} />\n      </span>\n    </legend>\n  );\n};\n\nexport { FormLegend };\nexport default FormLegend;\n","import * as React from 'react';\nimport { get, useFormContext } from 'react-hook-form';\nimport { useTranslation } from 'next-i18next';\nimport cardValidator from 'card-validator';\nimport cx from 'classnames';\n\nimport type { FormInputBase } from './form.types';\nimport FormError from './form.error';\nimport FormLabel from './form.label';\n\ntype Validator = typeof cardValidator;\n\nconst formatCardNumber = (cardNumber: string, cardValidator: Validator) => {\n  const cardData = cardValidator.number(cardNumber);\n  if (!cardData.isPotentiallyValid || !cardData?.card) return cardNumber;\n  const cardNumberArray = [...cardNumber];\n  if (cardData?.isPotentiallyValid && cardData?.card?.type) {\n    const validGapIndices = cardData?.card?.gaps?.filter(\n      (gapIndex: number) => cardNumber?.length > gapIndex\n    );\n    validGapIndices?.forEach((gap: number, index: number) => {\n      if (cardNumberArray[gap + index] !== ' ') {\n        cardNumberArray.splice(gap + index, 0, ' ');\n      }\n    });\n  }\n  return cardNumberArray.join('').trim();\n};\n\nconst FormCardNumberInput: React.FC<FormInputBase<React.InputHTMLAttributes<HTMLInputElement>>> = ({\n  className,\n  containerClassName,\n  label,\n  labelClassName,\n  name,\n  registerOptions,\n  required = true,\n  ...rest\n}) => {\n  const {\n    formState: { errors },\n    register,\n    setValue,\n  } = useFormContext();\n  const [cardType, setCardType] = React.useState<string | null>(null);\n  const [t] = useTranslation('osc-form');\n  const id = React.useId();\n  const errorId = `input-error-${id}`;\n  const errorMessage = get(errors, name);\n  const MAX_NUMBER_OF_DIGITS = 19;\n  const MAX_NUMBER_OF_GAPS = 3;\n  return (\n    <div className={containerClassName}>\n      <FormLabel label={label} required={required} className={cx('self-start', labelClassName)}>\n        <div\n          className={cx(\n            'form-input flex before:mr-3 before:inline-block before:h-auto before:w-9 before:bg-cover before:rtl:ml-3',\n            className,\n            {\n              'form-error': !!errorMessage,\n              'before:content-none': !cardType,\n              'before:bg-card-amex': cardType === 'american-express',\n              'before:bg-card-diners-club': cardType === 'diners-club',\n              'before:bg-card-discover': cardType === 'discover' || cardType === 'elo',\n              'before:bg-card-jcb': cardType === 'jcb',\n              'before:bg-card-maestro': cardType === 'maestro',\n              'before:bg-card-mastercard': cardType === 'mastercard',\n              'before:bg-card-unionpay': cardType === 'unionpay',\n              'before:bg-card-visa': cardType === 'visa',\n            }\n          )}\n        >\n          <input\n            {...rest}\n            aria-invalid={!!errorMessage}\n            aria-describedby={errorId}\n            autoComplete=\"cc-number\"\n            className=\"outline-none\"\n            inputMode=\"numeric\"\n            {...register(name, {\n              onChange: ({ target: { value: cardNumber } }) => {\n                setValue(name, formatCardNumber(cardNumber, cardValidator));\n                setCardType(cardValidator.number(cardNumber)?.card?.type ?? null);\n              },\n              required: required ? t('invalidCardNumberError') : false,\n              setValueAs: (value) => value?.replace(/\\s/g, ''),\n              validate: (cardNumber) =>\n                !cardNumber ||\n                cardValidator.number(cardNumber).isValid ||\n                t('invalidCardNumberError'),\n              ...registerOptions,\n            })}\n            required={required}\n            size={MAX_NUMBER_OF_DIGITS + MAX_NUMBER_OF_GAPS}\n          />\n        </div>\n      </FormLabel>\n      {errorMessage ? <FormError id={errorId} error={errorMessage} /> : null}\n    </div>\n  );\n};\n\nexport { FormCardNumberInput };\nexport default FormCardNumberInput;\n","import cx from 'classnames';\nimport * as React from 'react';\nimport { get, useFormContext } from 'react-hook-form';\nimport { useTranslation } from 'next-i18next';\nimport { FormError } from './form.error';\nimport { FormHelpMessage } from './form.help-message';\nimport { FormLabel } from './form.label';\nimport type { FormInputBase } from './form.types';\n\n/**\n * This component is to be used in place of all `<select>` elements including checkbox and radio\n */\nconst FormSelect: React.FC<\n  React.PropsWithChildren<FormInputBase<React.SelectHTMLAttributes<HTMLSelectElement>>>\n> = ({\n  label,\n  name,\n  optional,\n  required,\n  registerOptions,\n  labelClassName,\n  helpMessage,\n  loading,\n  className,\n  containerClassName,\n  children,\n  ...rest\n}) => {\n  const id = React.useId();\n  const errorId = `input-error-${id}`;\n  const helperId = `input-helper-${id}`;\n  const [t] = useTranslation('osc-form');\n  const {\n    register,\n    formState: { errors },\n  } = useFormContext();\n  const fieldError = get(errors, name);\n  const hasError = !!fieldError;\n\n  return (\n    <div className={containerClassName}>\n      <FormLabel\n        label={label}\n        required={required}\n        optional={optional}\n        hasError={hasError}\n        className={cx('self-start', labelClassName)}\n      >\n        <select\n          {...rest}\n          className={cx(className, {\n            'form-select': !rest.multiple,\n            'form-multiselect': rest.multiple,\n            'form-error': hasError,\n          })}\n          required={required}\n          aria-invalid={hasError}\n          aria-describedby={`${errorId} ${helperId}`}\n          {...register(name, {\n            required: required ? t('requiredError') : false,\n            ...registerOptions,\n          })}\n        >\n          {children}\n        </select>\n      </FormLabel>\n      <FormError id={errorId} error={fieldError} />\n      <FormHelpMessage id={helperId} message={helpMessage} loading={loading} />\n    </div>\n  );\n};\n\nexport { FormSelect };\nexport default FormSelect;\n","import cx from 'classnames';\nimport * as React from 'react';\nimport { get, useFormContext } from 'react-hook-form';\nimport { useTranslation } from 'next-i18next';\nimport { FormError } from './form.error';\nimport { FormHelpMessage } from './form.help-message';\nimport { FormLabel } from './form.label';\nimport type { FormInputBase } from './form.types';\n\n/**\n * This component is to be used in place of all `<textarea>` elements\n */\nconst FormTextarea: React.FC<\n  React.PropsWithChildren<FormInputBase<React.TextareaHTMLAttributes<HTMLTextAreaElement>>>\n> = ({\n  label,\n  name,\n  optional,\n  required,\n  registerOptions,\n  labelClassName,\n  helpMessage,\n  loading,\n  className,\n  containerClassName,\n  maxLength,\n  ...rest\n}) => {\n  const id = React.useId();\n  const errorId = `input-error-${id}`;\n  const helperId = `input-helper-${id}`;\n  const [t] = useTranslation('osc-form');\n  const {\n    register,\n    watch,\n    formState: { errors },\n  } = useFormContext();\n  const inputName = name;\n  const inputValue = watch(inputName);\n  const fieldError = get(errors, inputName);\n  const hasError = !!fieldError;\n\n  const length = inputValue?.length || 0;\n  const percent = (maxLength && length / maxLength) || 0;\n  const remaining = maxLength && maxLength - length;\n\n  return (\n    <div className={containerClassName}>\n      <FormLabel\n        label={label}\n        required={required}\n        optional={optional}\n        hasError={hasError}\n        className={cx('self-start', labelClassName)}\n      >\n        <div className=\"relative\">\n          <textarea\n            {...rest}\n            maxLength={maxLength}\n            required={required}\n            className={cx('form-textarea w-full', className, {\n              'form-error': hasError,\n            })}\n            aria-invalid={hasError}\n            aria-describedby={`${errorId} ${helperId}`}\n            {...register(inputName, {\n              required: required ? t('requiredError') : false,\n              ...registerOptions,\n            })}\n          />\n          {!!maxLength && (\n            <p\n              aria-live=\"polite\"\n              className={cx(\n                'pointer-events-none absolute bottom-2 select-none bg-bg/70 px-1 pt-1 text-xs font-normal ltr:right-0.5 rtl:left-0.5',\n                {\n                  'text-text-alt': percent < 0.8,\n                  'text-warn': percent >= 0.8 && percent < 1,\n                  'text-danger': percent >= 1,\n                }\n              )}\n              data-testid=\"form-textarea-counter\"\n            >\n              <span aria-hidden>\n                {length}/{maxLength}\n              </span>\n              <span className=\"sr-only\">{t('remaining', { count: remaining })}</span>\n            </p>\n          )}\n        </div>\n      </FormLabel>\n      <FormError id={errorId} error={fieldError} />\n      <FormHelpMessage id={helperId} message={helpMessage} loading={loading} />\n    </div>\n  );\n};\n\nexport { FormTextarea };\nexport default FormTextarea;\n","export * from './lib/form';\nexport * from './lib/form.connector';\nexport * from './lib/form.error';\nexport * from './lib/form.error-icon';\nexport * from './lib/form.help-message';\nexport * from './lib/form.input';\nexport * from './lib/form.label';\nexport * from './lib/form.label-helper';\nexport * from './lib/form.legend';\nexport * from './lib/form.card-number-input';\nexport * from './lib/form.select';\nexport * from './lib/form.textarea';\nexport * from './lib/form.types';\n","import type * as React from 'react';\nimport cx from 'classnames';\n\nexport type CaptionProps = {\n  /**\n   * Optional, provides the text content for the caption\n   */\n  caption?: string;\n  /**\n   * Optional link url\n   */\n  captionLink?: string;\n  /**\n   * Optional link target\n   */\n  captionLinkTarget?: string;\n  /**\n   * Optional metrics data\n   */\n  metricsOnClick?: () => void;\n  /*\n   * Optional alignment, default is end\n   */\n  align?: 'start' | 'end';\n};\n\n/**\n * Image caption is an optional prop that is consumed by other components, this cheese does not stand alone. Can be text only or a clickable link.\n */\nexport const Caption: React.FC<CaptionProps> = ({\n  caption,\n  captionLink,\n  captionLinkTarget,\n  align = 'end',\n  metricsOnClick,\n}) => {\n  const captionClasses =\n    'flex absolute top-0 items-center justify-center flex-auto text-xs mx-4 mt-4 mb-0 py-2 px-4 bg-bg-inverse text-text-overlay opacity-80 p-2 no-underline caption-main-text';\n\n  if (!caption && !captionLink) {\n    return null;\n  }\n\n  return (\n    <figcaption data-testid=\"caption-container\">\n      {captionLink ? (\n        <a\n          data-e2e=\"linkedCaption\"\n          data-testid=\"img-caption-link\"\n          className={cx(captionClasses, 'cursor-pointer', {\n            'end-0': align === 'end',\n            'start-0': align === 'start',\n          })}\n          href={captionLink}\n          onClick={() => metricsOnClick?.()}\n          target={captionLinkTarget}\n        >\n          {caption}\n        </a>\n      ) : (\n        <div\n          data-osc-product=\"osc-caption\"\n          className={cx(captionClasses, 'pointer-events-none cursor-default', {\n            'end-0': align === 'end',\n            'start-0': align === 'start',\n          })}\n        >\n          {caption}\n        </div>\n      )}\n    </figcaption>\n  );\n};\n","export * from './caption';\n","export * from './lib';\n","import dynamic from 'next/dynamic';\nimport { isBrowser } from '@dx-ui/utilities-is-browser';\nimport { useWrappedRouter } from '../../hooks';\n\nconst TransactionComponent = dynamic(\n  () => import('../../components/view-transactions/view-transactions'),\n  {\n    ssr: false,\n  }\n);\n\nexport function TransactionViewWrapper() {\n  const { safeQueryParams: queryParameters } = useWrappedRouter();\n  if (!isBrowser || !queryParameters?.viewTxns) {\n    return null;\n  }\n  return <TransactionComponent />;\n}\n","import cx from 'classnames';\nimport * as React from 'react';\n\ntype SpinnerSizes = 'sm' | 'md' | 'lg' | 'xl';\n\nexport type SpinnerProps = {\n  /** The size of the spinner */\n  size?: SpinnerSizes;\n  /** The time in milliseconds to delay until spinner starts */\n  delay?: number;\n} & React.HTMLAttributes<SVGElement>;\n\n/**\n * Displays an icon that indicates something is loading\n */\nexport const Spinner = React.forwardRef<SVGSVGElement, SpinnerProps>(\n  ({ className, size = 'md', delay, ...rest }, forwardedRef) => {\n    const [showSpinner, setShowSpinner] = React.useState(false);\n\n    React.useEffect(() => {\n      if (delay) {\n        const timer = setTimeout(() => setShowSpinner(true), delay);\n        return () => clearTimeout(timer);\n      }\n      return setShowSpinner(true);\n    }, [delay]);\n\n    return (\n      <svg\n        role=\"img\"\n        aria-hidden=\"true\"\n        className={cx(\n          'motion-safe:animate-spin',\n          {\n            'w-5': size === 'sm',\n            'w-10': size === 'md',\n            'w-16': size === 'lg',\n            'w-20': size === 'xl',\n            hidden: !showSpinner,\n          },\n          className\n        )}\n        viewBox=\"0 0 100 100\"\n        fill=\"none\"\n        ref={forwardedRef}\n        {...rest}\n      >\n        <circle className=\"opacity-25\" cx=\"10\" cy=\"10\" stroke=\"currentColor\" strokeWidth=\"10\" />\n        <path\n          fill=\"currentColor\"\n          d=\"M10,50c0,0,0,0.5,0.1,1.4c0,0.5,0.1,1,0.2,1.7c0,0.3,0.1,0.7,0.1,1.1c0.1,0.4,0.1,0.8,0.2,1.2c0.2,0.8,0.3,1.8,0.5,2.8 c0.3,1,0.6,2.1,0.9,3.2c0.3,1.1,0.9,2.3,1.4,3.5c0.5,1.2,1.2,2.4,1.8,3.7c0.3,0.6,0.8,1.2,1.2,1.9c0.4,0.6,0.8,1.3,1.3,1.9 c1,1.2,1.9,2.6,3.1,3.7c2.2,2.5,5,4.7,7.9,6.7c3,2,6.5,3.4,10.1,4.6c3.6,1.1,7.5,1.5,11.2,1.6c4-0.1,7.7-0.6,11.3-1.6 c3.6-1.2,7-2.6,10-4.6c3-2,5.8-4.2,7.9-6.7c1.2-1.2,2.1-2.5,3.1-3.7c0.5-0.6,0.9-1.3,1.3-1.9c0.4-0.6,0.8-1.3,1.2-1.9 c0.6-1.3,1.3-2.5,1.8-3.7c0.5-1.2,1-2.4,1.4-3.5c0.3-1.1,0.6-2.2,0.9-3.2c0.2-1,0.4-1.9,0.5-2.8c0.1-0.4,0.1-0.8,0.2-1.2 c0-0.4,0.1-0.7,0.1-1.1c0.1-0.7,0.1-1.2,0.2-1.7C90,50.5,90,50,90,50s0,0.5,0,1.4c0,0.5,0,1,0,1.7c0,0.3,0,0.7,0,1.1 c0,0.4-0.1,0.8-0.1,1.2c-0.1,0.9-0.2,1.8-0.4,2.8c-0.2,1-0.5,2.1-0.7,3.3c-0.3,1.2-0.8,2.4-1.2,3.7c-0.2,0.7-0.5,1.3-0.8,1.9 c-0.3,0.7-0.6,1.3-0.9,2c-0.3,0.7-0.7,1.3-1.1,2c-0.4,0.7-0.7,1.4-1.2,2c-1,1.3-1.9,2.7-3.1,4c-2.2,2.7-5,5-8.1,7.1 c-0.8,0.5-1.6,1-2.4,1.5c-0.8,0.5-1.7,0.9-2.6,1.3L66,87.7l-1.4,0.5c-0.9,0.3-1.8,0.7-2.8,1c-3.8,1.1-7.9,1.7-11.8,1.8L47,90.8 c-1,0-2-0.2-3-0.3l-1.5-0.2l-0.7-0.1L41.1,90c-1-0.3-1.9-0.5-2.9-0.7c-0.9-0.3-1.9-0.7-2.8-1L34,87.7l-1.3-0.6 c-0.9-0.4-1.8-0.8-2.6-1.3c-0.8-0.5-1.6-1-2.4-1.5c-3.1-2.1-5.9-4.5-8.1-7.1c-1.2-1.2-2.1-2.7-3.1-4c-0.5-0.6-0.8-1.4-1.2-2 c-0.4-0.7-0.8-1.3-1.1-2c-0.3-0.7-0.6-1.3-0.9-2c-0.3-0.7-0.6-1.3-0.8-1.9c-0.4-1.3-0.9-2.5-1.2-3.7c-0.3-1.2-0.5-2.3-0.7-3.3 c-0.2-1-0.3-2-0.4-2.8c-0.1-0.4-0.1-0.8-0.1-1.2c0-0.4,0-0.7,0-1.1c0-0.7,0-1.2,0-1.7C10,50.5,10,50,10,50z\"\n        />\n      </svg>\n    );\n  }\n);\n\nSpinner.displayName = 'Spinner';\n\nexport default Spinner;\n","import { Spinner } from './spinner';\nimport { Dialog, DialogTitle } from '@dx-ui/osc-dialog-v2';\nimport { useTranslation } from 'next-i18next';\n\ntype SpinnerDialogProps = {\n  /* Whether the dialog is open or closed */\n  isOpen: boolean;\n  /* Loading text provided to the dialog, defaults to Please wait... */\n  text?: string;\n};\n\nexport function SpinnerDialog({ isOpen, text }: SpinnerDialogProps) {\n  const { t } = useTranslation('osc-spinner');\n  return (\n    <Dialog isOpen={isOpen} hasChildrenWithTitle dialogClassName=\"w-48\">\n      <div className=\"flex flex-col items-center justify-center gap-4\">\n        <Spinner size=\"xl\" />\n        <DialogTitle>{text || t('loadingText')}</DialogTitle>\n      </div>\n    </Dialog>\n  );\n}\n\nSpinnerDialog.displayName = 'SpinnerDialog';\n\nexport default SpinnerDialog;\n","export * from './spinner';\nexport * from './spinner-dialog';\n","export * from './lib';\n","import * as React from 'react';\nimport cx from 'classnames';\n\ntype CalendarDay = {\n  /**\n   * is a date within the selected range\n   */\n  inRange?: boolean;\n  /**\n   * applies UI to denote that it is the current date\n   */\n  isToday?: boolean;\n  /**\n   * is either the `day` or `endDay`\n   */\n  selected?: boolean;\n  /**\n   * applies UI for a highlighted date\n   */\n  highlighted?: boolean;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\n/**\n * Displays a calendar day as a button\n */\nconst CalendarDay = React.forwardRef<HTMLButtonElement, CalendarDay>(\n  ({ className, inRange, isToday, selected, highlighted, ...rest }, forwardedRef) => (\n    <button\n      className={cx(\n        'block h-[37px] w-full min-w-[37px] appearance-none border border-bg text-center uppercase ring-inset hover:border-primary focus:border-primary focus:!shadow-none disabled:cursor-default disabled:text-text-disabled',\n        'brand-hi-refresh:hover:border-none brand-hi-refresh:hover:bg-primary-alt brand-hi-refresh:hover:text-text-inverse',\n        {\n          'bg-bg-alt text-text': !selected && inRange,\n          'bg-bg-alt': !selected && !inRange && isToday,\n          'bg-primary text-text-inverse focus:ring-bg focus:border-primary hover:border-primary hover:ring-bg hover:ring-1 focus:ring-1':\n            selected,\n          'font-bold': isToday,\n          'ring-primary ring-1': highlighted,\n          className,\n        }\n      )}\n      {...rest}\n      type=\"button\"\n      ref={forwardedRef}\n    />\n  )\n);\n\nCalendarDay.displayName = 'CalendarDay';\n\nexport { CalendarDay };\nexport default CalendarDay;\n","import {\n  getDaysSplitByWeeks,\n  useDaysOfWeek,\n  isKanji,\n  useDateFormat,\n  DEFAULT_LANGUAGE,\n  isVietnamese,\n} from '@dx-ui/utilities-dates';\nimport cx from 'classnames';\nimport {\n  addDays,\n  format,\n  isAfter,\n  isBefore,\n  isFirstDayOfMonth,\n  isSameDay,\n  isSameMonth,\n  isWithinInterval,\n  lastDayOfWeek,\n  startOfDay,\n  startOfMonth,\n  startOfWeek,\n  subDays,\n} from 'date-fns';\nimport * as React from 'react';\nimport { CalendarDay } from './calendar.day';\n\ntype CalendarMonth = {\n  /**\n   * selected day or start day when a range is allowed\n   */\n  day?: Date;\n  /**\n   * selected end day when a range is allowed\n   */\n  endDay?: Date;\n  /**\n   * furthest date available to book\n   */\n  maxDays?: number;\n  /**\n   * allow ability to select previous months\n   */\n  allowPrevious?: boolean;\n  /**\n   * month to display, should be passed as the first day of the month, can use `startOfMonth(someDate)` from the date-fns lib\n   */\n  month?: Date;\n  /**\n   * locale for i18n\n   */\n  locale: Intl.Locale;\n  /**\n   * callback when a day is selected\n   */\n  onDayChange: (day?: Date) => void;\n  focusedDay?: number;\n  onFocusedDayChange: (d: number, newD?: number) => void;\n  isVisibleMonth?: boolean;\n  dayLabel?: (d: Date, isStartDay?: boolean) => string;\n  /**\n   * marked as current date, can be set to any date\n   */\n  today?: Date;\n  /**\n   * If using a string, it must be in the `yyyy-MM-dd` format\n   */\n  highlightedDates?: Array<Date | string>;\n  /**\n   * If using a string, it must be in the `yyyy-MM-dd` format\n   */\n  enabledDates?: Array<Date | string>;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nconst FORMAT = 'yyyy-MM-dd';\n\n/**\n * displays a calendar month\n */\nconst CalendarMonth = React.forwardRef<HTMLDivElement, CalendarMonth>(\n  (\n    {\n      day,\n      endDay,\n      maxDays = 730,\n      allowPrevious,\n      month: passedMonth,\n      onDayChange,\n      locale,\n      className,\n      onFocusedDayChange,\n      isVisibleMonth,\n      dayLabel,\n      today = new Date(),\n      highlightedDates: passedHighlightedDates = [],\n      enabledDates: passedEnabledDates = [],\n    },\n    forwardedRef\n  ) => {\n    const month = passedMonth || startOfMonth(today);\n\n    const dateToString = (d: Date | string) => {\n      const isDate = d instanceof Date;\n      const parsedDate = isDate ? ['', '', ''] : d.split('-');\n      const date: Date = isDate\n        ? d\n        : new Date(\n            parseInt(parsedDate[0] ?? '', 10),\n            parseInt(parsedDate[1] ?? '', 10) - 1,\n            parseInt(parsedDate[2] ?? '', 10)\n          );\n      return format(date, FORMAT);\n    };\n\n    const highlightedDates = React.useMemo(\n      () => passedHighlightedDates.map(dateToString),\n      [passedHighlightedDates]\n    );\n\n    const enabledDates = React.useMemo(\n      () => passedEnabledDates.map(dateToString),\n      [passedEnabledDates]\n    );\n\n    const weeks: Date[][] = React.useMemo(\n      () => getDaysSplitByWeeks({ date: month, locale }),\n      [month, locale]\n    );\n    const week = useDaysOfWeek({ locale });\n    const formattedDate = useDateFormat({\n      date: month,\n      locale,\n      options: { monthName: 'long' },\n    });\n    const yearText = isVietnamese(locale) ? 'năm ' : '';\n    const header = isKanji(locale)\n      ? `${formattedDate.year.numeric}${formattedDate.year.text} ${formattedDate.month.numeric}${formattedDate.month.text}`\n      : `${formattedDate.month.text} ${yearText}${formattedDate.year.numeric}`;\n    const id = React.useId();\n    const monthId = `calendar-month-${id}`;\n\n    return (\n      <div ref={forwardedRef} className={cx('w-full max-w-6xl select-none', className)}>\n        <h2\n          className=\"mb-2 block text-center text-lg font-extrabold\"\n          id={monthId}\n          data-testid=\"calendar-month-header\"\n          aria-live=\"polite\"\n        >\n          {header}\n        </h2>\n        <table role=\"grid\" className=\"w-full\" aria-labelledby={monthId}>\n          <thead>\n            <tr>\n              {week.map((weekday) => (\n                <th scope=\"col\" key={weekday} className=\"text-center text-xs uppercase\">\n                  <span aria-hidden>{weekday}</span>\n                </th>\n              ))}\n            </tr>\n          </thead>\n          <tbody>\n            {weeks.map((w, i) => (\n              <tr key={w[0]?.getTime() ?? i}>\n                {w.map((d) => {\n                  if (d) {\n                    const selected = (day && isSameDay(d, day)) || (endDay && isSameDay(d, endDay));\n                    const tab0 =\n                      selected || isSameDay(d, today) || (isVisibleMonth && isFirstDayOfMonth(d));\n                    const disabled = enabledDates.length\n                      ? !enabledDates.includes(format(d, FORMAT))\n                      : allowPrevious\n                      ? false\n                      : isBefore(d, startOfDay(today)) || isAfter(d, addDays(today, maxDays));\n                    const inRange =\n                      day && endDay ? isWithinInterval(d, { start: day, end: endDay }) : false;\n                    const highlighted = highlightedDates.includes(format(d, FORMAT));\n\n                    const selectDay = () => onDayChange(d);\n                    const onKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n                      let flag = false;\n                      switch (e.key) {\n                        case ' ':\n                        case 'Enter':\n                          selectDay();\n                          flag = true;\n                          break;\n                        case 'ArrowRight':\n                          onFocusedDayChange(d.getTime(), addDays(d, 1).getTime());\n                          break;\n                        case 'ArrowLeft':\n                          onFocusedDayChange(d.getTime(), subDays(d, 1).getTime());\n                          flag = true;\n                          break;\n                        case 'ArrowDown':\n                          onFocusedDayChange(d.getTime(), addDays(d, 7).getTime());\n                          flag = true;\n                          break;\n                        case 'ArrowUp':\n                          onFocusedDayChange(d.getTime(), subDays(d, 7).getTime());\n                          flag = true;\n                          break;\n                        case 'Home':\n                          onFocusedDayChange(d.getTime(), startOfWeek(d).getTime());\n                          flag = true;\n                          break;\n                        case 'End':\n                          onFocusedDayChange(d.getTime(), lastDayOfWeek(d).getTime());\n                          flag = true;\n                          break;\n                        default:\n                          break;\n                      }\n                      if (flag) {\n                        e.stopPropagation();\n                        e.preventDefault();\n                      }\n                    };\n\n                    return (\n                      <td key={d.getTime()} className=\"p-0\">\n                        {isSameMonth(d, month) ? (\n                          <CalendarDay\n                            id={`day-${d.getTime()}`}\n                            disabled={disabled}\n                            selected={selected}\n                            inRange={inRange}\n                            highlighted={highlighted}\n                            isToday={isSameDay(d, today)}\n                            onKeyDown={onKeyDown}\n                            onClick={(evt: React.MouseEvent<HTMLButtonElement>) => {\n                              if (evt.clientX && evt.clientY) {\n                                selectDay();\n                              }\n                            }}\n                            onFocus={() => onFocusedDayChange(d.getTime())}\n                            tabIndex={tab0 ? 0 : -1}\n                          >\n                            <span className=\"sr-only\">{dayLabel ? dayLabel(d) : ''}</span>\n                            <span aria-hidden>\n                              {d.toLocaleDateString(DEFAULT_LANGUAGE, {\n                                day: 'numeric',\n                              })}\n                            </span>\n                          </CalendarDay>\n                        ) : null}\n                      </td>\n                    );\n                  }\n                  return null;\n                })}\n              </tr>\n            ))}\n          </tbody>\n        </table>\n      </div>\n    );\n  }\n);\n\nCalendarMonth.displayName = 'CalendarMonth';\n\nexport { CalendarMonth };\nexport default CalendarMonth;\n","import {\n  addMonths,\n  format,\n  isAfter,\n  isBefore,\n  isSameDay,\n  isSameMonth,\n  startOfMonth,\n  subMonths,\n  addDays,\n} from 'date-fns';\nimport * as React from 'react';\nimport { useTranslation } from 'next-i18next';\nimport cx from 'classnames';\nimport { ControlBack, ControlNext } from '@dx-ui/osc-controls';\nimport type { CalendarMonth as CalendarMonthType } from './calendar.month';\nimport { CalendarMonth } from './calendar.month';\nimport { sendReward } from '@dx-ui/framework-conductrics';\n\nconst INPUT_FORMAT = 'yyyy-MM-dd';\n\nexport type Calendar = {\n  /**\n   * Used for giving unique ids based on the form in which it is used\n   */\n  formId?: string;\n  /**\n   * When used in a form this will be the key of the `day` i.e. `arrivalDate`\n   */\n  dayId?: string;\n  /**\n   * When used in a form this will be the key of the `endDay` i.e. `departureDate`\n   */\n  endDayId?: string;\n  /**\n   * Whether or not to allow selecting the same day for both `day` and `endDay`\n   */\n  allowSameDay?: boolean;\n  onEndDayChange?: (day?: Date) => void;\n  /**\n   * the a11y instructions for the calendar\n   */\n  instructions?: string;\n  /**\n   * used in a live region to possibly give context to the selected date(s)\n   */\n  message?: string;\n  /** to display the content of a month tab selector component before the calendar dates view */\n  MonthDateSelectorComponent?: ({\n    selectedCalendarDate,\n    onMonthUpdate,\n  }: {\n    selectedCalendarDate: Date;\n    onMonthUpdate: (d: Date) => void;\n  }) => React.ReactNode;\n} & React.HTMLAttributes<HTMLDivElement> &\n  Pick<\n    CalendarMonthType,\n    | 'day'\n    | 'endDay'\n    | 'onDayChange'\n    | 'maxDays'\n    | 'locale'\n    | 'dayLabel'\n    | 'allowPrevious'\n    | 'today'\n    | 'highlightedDates'\n    | 'enabledDates'\n  >;\n\n/**\n * A component to display calendars for selection of a date or date range. can be used in conjunction with a popup or inline.\n */\nexport const Calendar: React.FC<React.PropsWithChildren<Calendar>> = ({\n  allowSameDay,\n  allowPrevious,\n  children,\n  locale,\n  day,\n  endDay,\n  maxDays,\n  onDayChange,\n  onEndDayChange,\n  dayLabel,\n  instructions,\n  message,\n  formId,\n  dayId,\n  endDayId,\n  highlightedDates,\n  enabledDates,\n  today = new Date(),\n  MonthDateSelectorComponent,\n  ...rest\n}) => {\n  const ref = React.useRef<HTMLDivElement>(null);\n  const month0Ref = React.useRef<HTMLDivElement>(null);\n  const month1Ref = React.useRef<HTMLDivElement>(null);\n  const [focusedDay, setFocusedDay] = React.useState<number>();\n  const previousMonthRef = React.useRef<HTMLButtonElement>(null);\n  const nextMonthRef = React.useRef<HTMLButtonElement>(null);\n  const [month, setMonth] = React.useState(startOfMonth(day || today));\n  const [t] = useTranslation('osc-calendar');\n  const nextDay = day ? addDays(day, 1) : day;\n  const prevDisabled = allowPrevious ? false : isSameMonth(month, today);\n  const selectedDateRef = React.useRef(day || today);\n\n  const onChangeDay = (d?: Date) => {\n    if (onEndDayChange && d) {\n      if (day && !endDay) {\n        if (allowSameDay) {\n          /**\n           * Handle cases where `allowSameDay` is true\n           */\n          if (isSameDay(d, day) || isAfter(d, day)) {\n            onEndDayChange(d);\n          } else if (isBefore(d, day)) {\n            onDayChange(d);\n          }\n        } else {\n          /**\n           * Handle cases where `allowSameDay` is false\n           */\n\n          if (isAfter(d, day)) {\n            onEndDayChange(d);\n          } else if (isBefore(d, day)) {\n            onDayChange(d);\n          }\n        }\n      } else {\n        onDayChange(d);\n        onEndDayChange(undefined);\n      }\n    } else {\n      onDayChange(d);\n    }\n    if (MonthDateSelectorComponent && d) {\n      selectedDateRef.current = d;\n    }\n    sendReward('g-date-selector-interaction-total');\n  };\n\n  const getDayLabel = (d: Date) => {\n    if (dayLabel) {\n      if (onEndDayChange && d) {\n        if (day && !endDay) {\n          if (allowSameDay) {\n            if (isSameDay(d, day) || isAfter(d, day)) {\n              return dayLabel(d, false);\n            }\n            if (isBefore(d, day)) {\n              return dayLabel(d, true);\n            }\n          } else {\n            if (isAfter(d, day)) {\n              return dayLabel(d, false);\n            }\n            if (isBefore(d, day)) {\n              return dayLabel(d, true);\n            }\n          }\n        } else {\n          return dayLabel(d, true);\n        }\n      } else {\n        return dayLabel(d, true);\n      }\n      return dayLabel(d);\n    }\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    return d.toLocaleDateString(locale, { dateStyle: 'full' });\n  };\n\n  const onMonthChange = (d: Date) => {\n    setMonth(d);\n  };\n\n  const onFocusedDayChange = (d: number, newD?: number, monthNumber?: number) => {\n    if (newD) {\n      setFocusedDay(newD);\n      const monthInFocus = monthNumber === 0 ? month : addMonths(month, 1);\n      if (!isSameMonth(monthInFocus, newD)) {\n        if (newD > d) {\n          if (monthNumber === 0 && !!month1Ref.current?.offsetParent) return;\n          onMonthChange(addMonths(month, 1));\n        }\n        if (newD < d && monthNumber === 0) {\n          onMonthChange(subMonths(month, 1));\n        }\n      }\n    }\n  };\n\n  React.useEffect(() => {\n    if (ref.current) {\n      requestAnimationFrame(() => {\n        const element = ref.current?.querySelector<HTMLButtonElement>(`#day-${focusedDay}`);\n        if (element) {\n          element.focus();\n        }\n      });\n    }\n  }, [focusedDay, ref]);\n\n  return (\n    <div ref={ref} className=\"w-full max-w-6xl\" data-testid=\"calendar-container\">\n      {!!day && (\n        <>\n          <input\n            type=\"hidden\"\n            name={dayId}\n            id={`${formId}-${dayId}`}\n            value={day && format(day, INPUT_FORMAT)}\n          />\n          <input\n            type=\"hidden\"\n            name={endDayId}\n            id={`${formId}-${endDayId}`}\n            value={\n              endDay ? format(endDay, INPUT_FORMAT) : day && format(addDays(day, 1), INPUT_FORMAT)\n            }\n          />\n        </>\n      )}\n      {MonthDateSelectorComponent ? (\n        <MonthDateSelectorComponent\n          selectedCalendarDate={selectedDateRef.current}\n          onMonthUpdate={onMonthChange}\n        />\n      ) : null}\n      <div\n        className={cx('flex justify-between', {\n          hidden: !!MonthDateSelectorComponent,\n        })}\n      >\n        <ControlBack\n          onClick={() => onMonthChange(subMonths(month, 1))}\n          ref={previousMonthRef}\n          disabled={prevDisabled}\n          label={t('previousMonth')}\n        />\n        <ControlNext\n          onClick={() => onMonthChange(addMonths(month, 1))}\n          ref={nextMonthRef}\n          label={t('nextMonth')}\n        />\n      </div>\n\n      {}\n      <div className=\"max-w-6xl\" role=\"application\" aria-label={instructions} {...rest}>\n        <div aria-live=\"polite\" className=\"sr-only\">\n          {message}\n        </div>\n        <div className=\"flex w-full ltr:space-x-6\">\n          <CalendarMonth\n            ref={month0Ref}\n            onDayChange={onChangeDay}\n            locale={locale}\n            day={day}\n            endDay={endDay || nextDay}\n            month={month}\n            maxDays={maxDays}\n            focusedDay={focusedDay}\n            onFocusedDayChange={(d, newD) => onFocusedDayChange(d, newD, 0)}\n            isVisibleMonth\n            dayLabel={getDayLabel}\n            allowPrevious={allowPrevious}\n            today={today}\n            highlightedDates={highlightedDates}\n            enabledDates={enabledDates}\n          />\n          <CalendarMonth\n            ref={month1Ref}\n            onDayChange={onChangeDay}\n            locale={locale}\n            day={day}\n            endDay={endDay || nextDay}\n            maxDays={maxDays}\n            month={addMonths(month, 1)}\n            className=\"hidden md:block\"\n            focusedDay={focusedDay}\n            onFocusedDayChange={(d, newD) => onFocusedDayChange(d, newD, 1)}\n            dayLabel={getDayLabel}\n            allowPrevious={allowPrevious}\n            today={today}\n            highlightedDates={highlightedDates}\n            enabledDates={enabledDates}\n          />\n          {children}\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default Calendar;\n","export * from './lib/calendar';\nexport * from './lib/calendar.day';\nexport * from './lib/calendar.month';\n","import { sendReward } from '@dx-ui/framework-conductrics';\nimport { format, isEqual } from 'date-fns';\nimport { useFormContext } from 'react-hook-form';\n\nexport const ArrivalDateSpy = ({ arrivalDate }: { arrivalDate?: string }) => {\n  const { getValues } = useFormContext();\n  const formArrivalDate = format(getValues()?.dates?.arrivalDate, 'yyyy-MM-dd');\n\n  if ((arrivalDate && !isEqual(arrivalDate, formArrivalDate)) || (!arrivalDate && formArrivalDate))\n    sendReward('g-edit-dates');\n  return null;\n};\n","import { addYears, eachMonthOfInterval, parseISO } from 'date-fns';\n\nexport const getMonthRangeBetweenDates = (startDate?: string, endDate?: string): Date[] | [] => {\n  if (!startDate || !endDate) {\n    return [];\n  }\n  const formattedStartDate = parseISO(startDate).toISOString();\n  const formattedEndDate = parseISO(endDate).toISOString();\n\n  const interval = {\n    start: new Date(formattedStartDate),\n    end: new Date(formattedEndDate),\n  };\n\n  return eachMonthOfInterval(interval);\n};\nexport const getMinAndMaxArrivalDate = () => {\n  const minArrivalDate = new Date().toISOString();\n  const maxArrivalDate = addYears(minArrivalDate, 2).toISOString();\n  return { minArrivalDate, maxArrivalDate };\n};\nexport const transformTrackingId = (id?: string) => {\n  if (!id) {\n    return '';\n  }\n\n  const transformed_id = id\n    .replace(/\\-+/g, ' ')\n    .replace(/[^a-zA-Z0-9 ]/g, '')\n    .replace(/\\s+/g, '_')\n    .replace(/\\_+/g, '_')\n    .toLowerCase();\n\n  return transformed_id;\n};\n","import type { FC, KeyboardEvent } from 'react';\nimport { useState, useMemo, useEffect } from 'react';\nimport { useMediaQuery } from 'usehooks-ts';\nimport cx from 'classnames';\nimport { startOfMonth, isEqual, parseISO } from 'date-fns';\nimport { sendReward } from '@dx-ui/framework-conductrics';\nimport {\n  getMinAndMaxArrivalDate,\n  getMonthRangeBetweenDates,\n  transformTrackingId,\n} from './search-month-date-selector.utils';\n\ntype TSearchMonthDateSelectorProps = {\n  locale: string;\n  minArrivalDate: string;\n  maxArrivalDate: string;\n  selectedCalendarDate?: Date;\n  onMonthUpdate?: (d: Date) => void;\n};\n\nexport const SearchMonthDateSelector: FC<TSearchMonthDateSelectorProps> = ({\n  locale,\n  minArrivalDate,\n  maxArrivalDate,\n  selectedCalendarDate,\n  onMonthUpdate,\n}) => {\n  const isLargeScreen = useMediaQuery('(min-width: 1024px)');\n  const monthTabRefs: HTMLButtonElement[] = [];\n  const formattedMinArrivalDate = minArrivalDate && parseISO(minArrivalDate);\n  const [focussedMonthTab, setFocussedMonthTab] = useState(\n    (formattedMinArrivalDate && startOfMonth(formattedMinArrivalDate)) || startOfMonth(new Date())\n  );\n  const [userSelectedDate, setUserSelectedDate] = useState(formattedMinArrivalDate || new Date());\n  const [tabAutoFocus, setTabAutoFocus] = useState(false);\n  const [isFirstMonthSelected, setFirstMonthSelected] = useState(false);\n  const monthsRange = getMonthRangeBetweenDates(minArrivalDate, maxArrivalDate);\n\n  const onKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n    switch (e.key) {\n      case 'End':\n        e.preventDefault();\n        monthTabRefs[monthTabRefs.length - 1]?.focus();\n        break;\n      case 'Home':\n        e.preventDefault();\n        monthTabRefs[0]?.focus();\n        break;\n    }\n  };\n\n  const onKeyUp = (e: KeyboardEvent<HTMLButtonElement>, index: number) => {\n    let tabRef = 0;\n    switch (e.key) {\n      case 'ArrowLeft':\n        tabRef = index - 1 >= 0 ? index - 1 : monthTabRefs.length - 1;\n        monthTabRefs[tabRef]?.focus();\n        break;\n      case 'ArrowRight':\n        tabRef = index + 1 <= monthTabRefs.length - 1 ? index + 1 : 0;\n        monthTabRefs[tabRef]?.focus();\n        break;\n      case 'Enter':\n      case 'Space':\n        break;\n    }\n  };\n\n  useEffect(() => {\n    if (selectedCalendarDate) {\n      const currentSelectionDateMonth = startOfMonth(selectedCalendarDate);\n      const prevSelectionDateMonth = startOfMonth(userSelectedDate);\n      if (!isEqual(currentSelectionDateMonth, prevSelectionDateMonth)) {\n        setFocussedMonthTab(currentSelectionDateMonth);\n        !tabAutoFocus && setTabAutoFocus(true);\n        setUserSelectedDate(selectedCalendarDate);\n      }\n    }\n  }, [selectedCalendarDate, tabAutoFocus, userSelectedDate]);\n\n  const monthsData = useMemo(() => {\n    if (!monthsRange) {\n      return [];\n    }\n    return monthsRange?.map((monthStartDate) => {\n      const isSelected = isEqual(monthStartDate, focussedMonthTab);\n      const monthYear = monthStartDate.toLocaleDateString(locale, {\n        month: 'short',\n        year: 'numeric',\n      });\n      const unabbreviatedMonthYear = monthStartDate.toLocaleDateString(locale, {\n        month: 'long',\n        year: 'numeric',\n      });\n      return {\n        monthStartDate,\n        isSelected,\n        monthYear,\n        unabbreviatedMonthYear,\n      };\n    });\n  }, [locale, monthsRange, focussedMonthTab]);\n\n  const sendConductricsRewards = () => {\n    if (!isFirstMonthSelected) {\n      sendReward('g-month-tab-engagement');\n      setFirstMonthSelected(true);\n    }\n    sendReward('g-month-tab-engagement-total');\n  };\n\n  return (\n    <div\n      className=\"m-1 flex snap-x snap-mandatory scroll-ps-8 overflow-x-scroll px-1 scrollbar-hide sm:mx-2\"\n      role=\"tablist\"\n      data-testid=\"search-month-tab-selector\"\n    >\n      {monthsData.map(\n        ({ monthStartDate, monthYear, isSelected, unabbreviatedMonthYear }, index) => (\n          <button\n            className={cx(\n              'my-1 flex snap-start flex-col items-center px-8 py-2 text-center md:px-5',\n              {\n                'border-primary border-b-2': isSelected,\n              }\n            )}\n            id={transformTrackingId(`tab-${index + 1}-${monthYear}`)}\n            key={monthYear}\n            tabIndex={!isSelected ? -1 : 0}\n            ref={(el) => {\n              if (!el) {\n                return;\n              }\n              if (isSelected) {\n                el.scrollIntoView({\n                  inline: isLargeScreen ? 'center' : 'start',\n                  behavior: 'smooth',\n                  block: 'nearest',\n                });\n                if (tabAutoFocus) {\n                  el.focus();\n                  setTabAutoFocus(false);\n                }\n              }\n              monthTabRefs.push(el);\n            }}\n            onClick={() => {\n              onMonthUpdate?.(monthStartDate);\n              setFocussedMonthTab(monthStartDate);\n              setTabAutoFocus(true);\n              sendConductricsRewards();\n            }}\n            onKeyDown={onKeyDown}\n            onKeyUp={(e) => onKeyUp(e, index)}\n            aria-selected={isSelected}\n            aria-label={unabbreviatedMonthYear}\n            role=\"tab\"\n            type=\"button\"\n          >\n            <span\n              className={cx('text-xs font-bold', {\n                'text-primary': isSelected,\n                'text-text-alt': !isSelected,\n              })}\n            >\n              {monthYear}\n            </span>\n          </button>\n        )\n      )}\n    </div>\n  );\n};\n\nexport const MonthDateSelectorComponent = ({ language }: { language: string }) => {\n  const { minArrivalDate, maxArrivalDate } = getMinAndMaxArrivalDate();\n\n  const MonthDateSelector = ({\n    selectedCalendarDate,\n    onMonthUpdate,\n  }: {\n    selectedCalendarDate: Date;\n    onMonthUpdate: (d: Date) => void;\n    minArrivalDate: string;\n    maxArrivalDate: string;\n    language: string;\n  }) => {\n    return (\n      <SearchMonthDateSelector\n        minArrivalDate={minArrivalDate}\n        maxArrivalDate={maxArrivalDate}\n        locale={language}\n        onMonthUpdate={onMonthUpdate}\n        selectedCalendarDate={selectedCalendarDate}\n      />\n    );\n  };\n  return MonthDateSelector;\n};\n","import { useMemo, useState } from 'react';\nimport { MONTH_TABS_IN_DATES_MODAL } from '../../../constants';\nimport { useGetMVTSelections, useWrappedRouter } from '../../../hooks';\nimport { MonthDateSelectorComponent } from './search-month-date-selector';\n\nexport const useMonthTabsMVT = () => {\n  const {\n    router: { locale },\n  } = useWrappedRouter();\n  const language = locale ?? 'en';\n  const [enableMonthTabs, setEnableMonthTabs] = useState(false);\n  const setEnableMonthTabsMVT = () => {\n    setEnableMonthTabs(true);\n  };\n  const {\n    isMVTVariant: { b: isMVTVariant },\n    isLoaded,\n  } = useGetMVTSelections({\n    agentId: MONTH_TABS_IN_DATES_MODAL.agentId,\n    isProvisional: enableMonthTabs,\n  });\n\n  const isMonthTabsMVT = isLoaded && isMVTVariant;\n\n  const monthDateSelectorProp = useMemo(\n    () =>\n      isMonthTabsMVT\n        ? {\n            ...{\n              MonthDateSelectorComponent: MonthDateSelectorComponent({ language }),\n            },\n          }\n        : {},\n    [isMonthTabsMVT, language]\n  );\n\n  return {\n    setEnableMonthTabsMVT,\n    monthDateSelectorProp,\n  };\n};\n","import type * as Types from './types';\n\nimport {\n  useQuery,\n  type QueryClient,\n  type FetchQueryOptions,\n  type UseQueryOptions,\n} from '@tanstack/react-query';\nimport type { DXError } from '@dx-ui/types-graphql';\n\nexport const GetLanguageSelectorOneLinkConfigDocument = {\n  operationName: 'featureConfigs',\n  operationString: `query featureConfigs {\n  featureConfigs(names: [\"config-ui-translate-onelink\"]) {\n    config\n    name\n  }\n}`,\n  originalOpName: 'getLanguageSelectorOneLinkConfig',\n};\nexport function useGetLanguageSelectorOneLinkConfigQuery<\n  TData = Types.GetLanguageSelectorOneLinkConfigQuery,\n  TError = DXError\n>(\n  variables?: Types.GetLanguageSelectorOneLinkConfigQueryVariables,\n  options?: Omit<\n    UseQueryOptions<Types.GetLanguageSelectorOneLinkConfigQuery, TError, TData>,\n    'queryKey'\n  >\n) {\n  return useQuery<Types.GetLanguageSelectorOneLinkConfigQuery, TError, TData>({\n    queryKey: [GetLanguageSelectorOneLinkConfigDocument, variables],\n    ...options,\n  });\n}\nexport function serverSideGetLanguageSelectorOneLinkConfigQuery(\n  queryClient: QueryClient,\n  variables?: Types.GetLanguageSelectorOneLinkConfigQueryVariables,\n  options?: FetchQueryOptions<Types.GetLanguageSelectorOneLinkConfigQuery>\n) {\n  return queryClient.fetchQuery<Types.GetLanguageSelectorOneLinkConfigQuery>({\n    queryKey: [GetLanguageSelectorOneLinkConfigDocument, variables],\n    ...options,\n  });\n}\n\nexport const GetLanguageSelectorHotelDataDocument = {\n  operationName: 'hotel',\n  operationString: `query hotel($ctyhocn: String!) {\n  hotel(ctyhocn: $ctyhocn, language: \"en\") {\n    localization {\n      languageSupport {\n        label\n        bookingUrl\n        code\n        siteUrl\n      }\n    }\n  }\n}`,\n  originalOpName: 'getLanguageSelectorHotelData',\n};\nexport function useGetLanguageSelectorHotelDataQuery<\n  TData = Types.GetLanguageSelectorHotelDataQuery,\n  TError = DXError\n>(\n  variables: Types.GetLanguageSelectorHotelDataQueryVariables,\n  options?: Omit<\n    UseQueryOptions<Types.GetLanguageSelectorHotelDataQuery, TError, TData>,\n    'queryKey'\n  >\n) {\n  return useQuery<Types.GetLanguageSelectorHotelDataQuery, TError, TData>({\n    queryKey: [GetLanguageSelectorHotelDataDocument, variables],\n    ...options,\n  });\n}\nexport function serverSideGetLanguageSelectorHotelDataQuery(\n  queryClient: QueryClient,\n  variables: Types.GetLanguageSelectorHotelDataQueryVariables,\n  options?: FetchQueryOptions<Types.GetLanguageSelectorHotelDataQuery>\n) {\n  return queryClient.fetchQuery<Types.GetLanguageSelectorHotelDataQuery>({\n    queryKey: [GetLanguageSelectorHotelDataDocument, variables],\n    ...options,\n  });\n}\n","import {\n  GetLanguageSelectorHotelDataDocument,\n  GetLanguageSelectorOneLinkConfigDocument,\n} from './generated/queries';\n\nexport * from './generated/queries';\nexport * from './generated/types';\n\nexport const GET_HOTEL_LANGUAGE_SELECTOR_DATA_ORIGINAL_OP_NAME =\n  GetLanguageSelectorHotelDataDocument.originalOpName;\nexport const GET_LANGUAGE_SELECTOR_ONE_LINK_CONFIG_DOCUMENT_ORIGINAL_OP_NAME =\n  GetLanguageSelectorOneLinkConfigDocument.originalOpName;\n\nexport const LANGUAGE_SELECTOR_ORIGINAL_OP_NAMES = [\n  GET_HOTEL_LANGUAGE_SELECTOR_DATA_ORIGINAL_OP_NAME,\n  GET_LANGUAGE_SELECTOR_ONE_LINK_CONFIG_DOCUMENT_ORIGINAL_OP_NAME,\n];\n","export const LANGUAGE_CODE_NAMES = {\n  ar: 'العربية',\n  bg: 'Български',\n  cs: 'Česky',\n  da: 'Dansk',\n  de: 'Deutsch',\n  en: 'English',\n  es: 'Español',\n  fi: 'Suomi',\n  fr: 'Français',\n  id: 'Bahasa Indonesia',\n  it: 'Italiano',\n  ja: '日本語',\n  ko: '한국어',\n  nl: 'Nederlands',\n  no: 'Norsk',\n  pl: 'Polski',\n  pt: 'Português',\n  ro: 'Română',\n  ru: 'Pусский',\n  sv: 'Svenska',\n  th: 'ไทย',\n  tr: 'Türkçe',\n  vi: 'Tiếng Việt',\n  'zh-hans': '简体中文',\n  'zh-hant': '繁體中文',\n} as const;\n","import { useMemo } from 'react';\nimport type { OneLinkConfig } from '@dx-ui/framework-i18n';\nimport { isBrowser } from '@dx-ui/utilities-is-browser';\nimport { useIsClient } from 'usehooks-ts';\nimport {\n  useGetLanguageSelectorOneLinkConfigQuery,\n  useGetLanguageSelectorHotelDataQuery,\n} from '@dx-ui/queries-osc-language-selector';\nimport type { GetLanguageSelectorHotelDataQuery } from '@dx-ui/queries-osc-language-selector';\nimport { LANGUAGE_CODE_NAMES } from '../osc-language-code-names';\nimport type { LanguageSelectorPropsBase } from '../osc-language-selector';\nimport { isRtl } from '@dx-ui/utilities-get-language-direction';\nimport { RuleEngine } from '@dx-shared/rule-engine';\nimport { logWarning } from '@dx-ui/framework-logger';\n\ntype LanguagesDict = { label: string; value: string; href: string; opensNewTab: boolean }[];\n\ntype SupportedLanguages = NonNullable<\n  NonNullable<GetLanguageSelectorHotelDataQuery['hotel']>['localization']\n>['languageSupport'];\n\nexport function useLanguageSelectorLanguages({\n  appName,\n  ctyhocn,\n  removeUrlParams,\n  urlOverrides,\n}: {\n  appName: string;\n  ctyhocn: string;\n  removeUrlParams?: boolean;\n  urlOverrides?: LanguageSelectorPropsBase['urlOverrides'];\n}) {\n  const { data: featureConfigsData, isFetching: featureConfigsLoading } =\n    useGetLanguageSelectorOneLinkConfigQuery();\n  const { data: hotelData, isFetching: hotelDataLoading } = useGetLanguageSelectorHotelDataQuery(\n    {\n      ctyhocn: ctyhocn.toUpperCase(),\n    },\n    {\n      enabled: !!ctyhocn,\n    }\n  );\n  const isClient = useIsClient();\n  const loading = !isClient || featureConfigsLoading || hotelDataLoading;\n\n  const oneLinkLanguagesConfig: OneLinkConfig = featureConfigsData?.featureConfigs?.find(\n    (fc) => fc.name === 'config-ui-translate-onelink'\n  )?.config;\n\n  let oneLinkLanguages: string[] = [];\n\n  // begin old config logic - Deprecated\n  const appWhitelist = oneLinkLanguagesConfig?.whitelist?.[appName];\n  const languagesObj = oneLinkLanguagesConfig?.languages;\n  const languagesToExclude = appWhitelist\n    ? (Object.keys(appWhitelist) as (keyof typeof appWhitelist)[]).filter(\n        (language) => !appWhitelist?.[language]?.includes(ctyhocn.toUpperCase())\n      )\n    : [];\n  const supportsLanguagesObjConfig = !!appName && !!languagesObj;\n  if (supportsLanguagesObjConfig) {\n    oneLinkLanguages = Object.entries(languagesObj)\n      .filter(\n        ([lang, appsArray]) => appsArray?.includes(appName) && !languagesToExclude.includes(lang)\n      )\n      .map(([lang]) => lang);\n  }\n  // end old config logic\n\n  // begin new config logic\n  const conditions = oneLinkLanguagesConfig?.conditions;\n  const supportedLanguages = oneLinkLanguagesConfig?.supportedLanguages;\n  const ruleEngine = conditions\n    ? new RuleEngine({ name: 'onelink-language-selector', conditions })\n    : null;\n  const supportsRuleEngineConfig = !!appName && !!conditions && !!supportedLanguages && ruleEngine;\n  const url = isBrowser ? window.location.href : '';\n  if (supportsRuleEngineConfig) {\n    oneLinkLanguages = supportedLanguages.filter((language) =>\n      ruleEngine.run({ appName, language, url })\n    );\n  }\n  // end new config logic\n\n  const cmsLanguages = hotelData?.hotel?.localization?.languageSupport\n    ? hotelData?.hotel?.localization?.languageSupport.reduce((acc, language) => {\n        if (\n          !oneLinkLanguages?.includes(getI18nSafeLangCode(language?.code || '')) &&\n          getI18nSafeLangCode(language?.code || '') !== 'en'\n        ) {\n          acc.push({\n            ...language,\n            code: getI18nSafeLangCode(language?.code || ''),\n          });\n        }\n        return acc;\n      }, [] as SupportedLanguages)\n    : ([] as SupportedLanguages);\n\n  const cmsFullSiteLanguages = cmsLanguages.filter((lang) => lang?.siteUrl);\n  const cmsResOnlyLanguages = cmsLanguages.filter((lang) => lang?.bookingUrl);\n  const ENOverride = urlOverrides?.fullSite?.['en'];\n  const fullSiteLanguages: LanguagesDict = [\n    {\n      label: LANGUAGE_CODE_NAMES['en'],\n      value: 'en',\n      href: (ENOverride || makeLanguageUrl('en', removeUrlParams)) ?? '',\n      opensNewTab: !!ENOverride,\n    },\n    ...oneLinkLanguages.map((lang) => {\n      const override = urlOverrides?.fullSite?.[lang as keyof typeof LANGUAGE_CODE_NAMES];\n      const hasOverride = !!override;\n      return {\n        label: LANGUAGE_CODE_NAMES[lang as keyof typeof LANGUAGE_CODE_NAMES],\n        value: lang,\n        href: (override || makeLanguageUrl(lang, removeUrlParams)) ?? '',\n        opensNewTab: hasOverride,\n      };\n    }),\n    ...cmsFullSiteLanguages.map((lang) => ({\n      label: LANGUAGE_CODE_NAMES[lang?.code as keyof typeof LANGUAGE_CODE_NAMES] || lang.label,\n      value: lang?.code || '',\n      href:\n        urlOverrides?.fullSite?.[lang?.code as keyof typeof LANGUAGE_CODE_NAMES] ||\n        lang?.siteUrl ||\n        '',\n      opensNewTab: true,\n    })),\n  ];\n  const resOnlyLanguages: LanguagesDict = [\n    ...cmsResOnlyLanguages.map((lang) => ({\n      label: LANGUAGE_CODE_NAMES[lang?.code as keyof typeof LANGUAGE_CODE_NAMES] || lang.label,\n      value: lang?.code || '',\n      href:\n        urlOverrides?.resOnly?.[lang.code as keyof typeof LANGUAGE_CODE_NAMES] ||\n        lang?.bookingUrl ||\n        '',\n      opensNewTab: true,\n    })),\n  ];\n\n  const supportedFullSiteLanguages = fullSiteLanguages.map((lang) => lang.value);\n  const netNewFullSiteLanguages = Object.keys(urlOverrides?.fullSite || {}).filter(\n    (lang) => !supportedFullSiteLanguages.includes(lang)\n  );\n\n  if (netNewFullSiteLanguages.length) {\n    fullSiteLanguages.push(\n      ...netNewFullSiteLanguages.map((lang) => ({\n        label: LANGUAGE_CODE_NAMES[lang as keyof typeof LANGUAGE_CODE_NAMES],\n        value: lang,\n        href: urlOverrides?.fullSite?.[lang as keyof typeof LANGUAGE_CODE_NAMES] || '',\n        opensNewTab: true,\n      }))\n    );\n  }\n\n  const supportedResOnlyLanguages = resOnlyLanguages.map((lang) => lang.value);\n  const netNewResOnlyLanguages = Object.keys(urlOverrides?.resOnly || {}).filter(\n    (lang) =>\n      !supportedResOnlyLanguages.includes(lang) && !supportedFullSiteLanguages.includes(lang)\n  );\n\n  if (netNewResOnlyLanguages.length) {\n    resOnlyLanguages.push(\n      ...netNewResOnlyLanguages.map((lang) => ({\n        label: LANGUAGE_CODE_NAMES[lang as keyof typeof LANGUAGE_CODE_NAMES],\n        value: lang,\n        href: urlOverrides?.resOnly?.[lang as keyof typeof LANGUAGE_CODE_NAMES] || '',\n        opensNewTab: true,\n      }))\n    );\n  }\n\n  const sortedFullSiteLanguages = sortRtlFirst(\n    filterLanguagesWithLabel(fullSiteLanguages).sort((a, b) => a.label.localeCompare(b.label))\n  );\n  const sortedResOnlyLanguages = sortRtlFirst(\n    filterLanguagesWithLabel(resOnlyLanguages).sort((a, b) => a.label.localeCompare(b.label))\n  );\n  const allLanguages = useMemo(\n    () => [...sortedFullSiteLanguages, ...sortedResOnlyLanguages],\n    [sortedFullSiteLanguages, sortedResOnlyLanguages]\n  );\n\n  return {\n    allLanguages,\n    loading,\n    sortedFullSiteLanguages,\n    sortedResOnlyLanguages,\n  };\n}\n\nexport function filterLanguagesWithLabel(languages: LanguagesDict) {\n  return languages.filter((lang) => {\n    if (!lang.label) {\n      logWarning(\n        'useLanguageSelectorLanguages',\n        `Language selector label missing for ${lang.value}`\n      );\n    }\n    return lang.label;\n  });\n}\n\nexport function getI18nSafeLangCode(code: string) {\n  if (code === 'zh_CN') {\n    return 'zh-hans';\n  }\n  if (code === 'zh_HK') {\n    return 'zh-hant';\n  }\n  const safeLangCode = code.split('_')[0];\n  return safeLangCode?.toLowerCase() ?? 'en';\n}\n\nexport function makeLanguageUrl(newLocale: string, removeUrlParams?: boolean) {\n  const languageUrl = isBrowser\n    ? window.location.href.replace(\n        RegExp(`/${window.location.pathname.split('/')[1]}/`),\n        `/${newLocale}/`\n      )\n    : '';\n  return removeUrlParams ? languageUrl.split('?')[0] : languageUrl;\n}\n\nexport function sortRtlFirst(languages: LanguagesDict) {\n  const rtlLangs = languages.filter((lang) => isRtl(lang.value));\n  const ltrLangs = languages.filter((lang) => !isRtl(lang.value));\n  return [...rtlLangs, ...ltrLangs];\n}\n","import type { ElementRef } from 'react';\nimport { useEffect, useRef } from 'react';\nimport * as React from 'react';\nimport { useTranslation } from 'next-i18next';\nimport { useLanguageSelectorLanguages } from './hooks/useLanguageSelectorLanguages';\nimport type { PopupContext } from '@dx-ui/osc-popup';\nimport { Popup, PopupButton, PopupContent, usePopup } from '@dx-ui/osc-popup';\nimport { LANGUAGE_CODE_NAMES } from './osc-language-code-names';\nimport { Link } from '@dx-ui/osc-link';\nimport classnames from 'classnames';\nimport { sendReward } from '@dx-ui/framework-conductrics';\nimport set from 'lodash/set';\nimport { isRtl } from '@dx-ui/utilities-get-language-direction';\nimport { getKeyDownNavigation } from '@dx-ui/utilities-accessibility';\nimport { getSafeLanguage } from '@dx-ui/framework-react-query';\n\ntype UrlOverride = {\n  [locale in keyof typeof LANGUAGE_CODE_NAMES]?: string;\n};\n\nexport type LanguageSelectorPropsBase = {\n  appName: string;\n  buttonOptions?: {\n    className?: string;\n    styles?: React.CSSProperties;\n    hoverStyles?: React.CSSProperties;\n  };\n  ctyhocn?: string;\n  labelOptions?: {\n    className?: string;\n    styles?: React.CSSProperties;\n  };\n  locale: string;\n  theme?: Exclude<CmsBrandComponentTheme, 'light'>;\n  onLanguageSelection?: (languageValue: string) => void;\n  popupOptions?: {\n    removeUrlParams?: boolean;\n    includeTitles?: boolean;\n  };\n  urlOverrides?: {\n    fullSite?: UrlOverride;\n    resOnly?: UrlOverride;\n  };\n  wrapperClassName?: string;\n};\n\nexport type LanguageSelectorProps = LanguageSelectorPropsBase & React.ComponentProps<'div'>;\n\nexport function LanguageSelector({\n  appName = '',\n  buttonOptions,\n  ctyhocn = '',\n  locale = 'en',\n  labelOptions,\n  popupOptions,\n  wrapperClassName,\n  urlOverrides,\n  theme,\n  onLanguageSelection,\n  ...rest\n}: LanguageSelectorProps) {\n  const [selectedLanguage, setSelectedLanguage] = React.useState<{\n    code: string;\n    href: string;\n  }>();\n  const [buttonHover, setButtonHover] = React.useState(false);\n  const { t } = useTranslation('osc-language-selector');\n  const popupButtonRef = useRef<ElementRef<'button'>>(null);\n  const linksContainerRef = useRef<ElementRef<'div'>>(null);\n  const { loading, allLanguages, sortedFullSiteLanguages, sortedResOnlyLanguages } =\n    useLanguageSelectorLanguages({\n      appName,\n      ctyhocn,\n      removeUrlParams: popupOptions?.removeUrlParams,\n      urlOverrides,\n    });\n\n  useEffect(() => {\n    if (!loading && !selectedLanguage?.code) {\n      const getSelectedLanguage = (locale: string) => ({\n        code: locale,\n        href: allLanguages.find((lang) => lang.value === locale)?.href || '',\n      });\n\n      setSelectedLanguage(getSelectedLanguage(getSafeLanguage(locale) ?? ''));\n    }\n  }, [allLanguages, loading, locale, selectedLanguage?.code]);\n\n  const focusFirstLink = React.useCallback(() => {\n    linksContainerRef.current?.querySelector('a')?.focus();\n  }, []);\n\n  const handleLinkKeyDown = getKeyDownNavigation({\n    elements: Array.from(linksContainerRef.current?.querySelectorAll('a') || []),\n    initiatingRef: popupButtonRef,\n  });\n\n  const trackLinkClick = React.useCallback((language: string) => {\n    if (window?.digitalData && window?._satellite) {\n      set(window.digitalData, 'action.clickID', 'languageswitch');\n      set(window.digitalData, 'page.pageInfo.language', language);\n      window._satellite?.track?.('global_click');\n    } else {\n      console.warn('digitalData or _satellite not found'); // eslint-disable-line no-console\n    }\n  }, []);\n\n  return (\n    <div className={classnames('flex gap-2 text-sm sm:text-base', wrapperClassName)} {...rest}>\n      <Popup>\n        <PopupContextState>\n          {({ isOpen }) => (\n            <>\n              <div className=\"flex items-baseline gap-2\">\n                <span\n                  className={classnames('flex font-semibold', labelOptions?.className, {\n                    'text-text-inverse': theme === 'dark',\n                  })}\n                  style={labelOptions?.styles}\n                  aria-hidden=\"true\"\n                >\n                  {t('language')}\n                </span>\n                {loading ? (\n                  <div className=\"h-6 w-24 animate-pulse self-center bg-border\" />\n                ) : (\n                  <PopupButton\n                    ref={popupButtonRef}\n                    className={classnames('inline-flex items-center', buttonOptions?.className, {\n                      'text-text-inverse': theme === 'dark',\n                    })}\n                    onClick={() => sendReward('engaged-language-selector')}\n                    onArrowDownWhenOpen={focusFirstLink}\n                    style={{\n                      ...buttonOptions?.styles,\n                      ...(buttonHover ? buttonOptions?.hoverStyles : null),\n                    }}\n                    onMouseEnter={() => setButtonHover(true)}\n                    onMouseLeave={() => setButtonHover(false)}\n                  >\n                    <span className=\"sr-only\">{t('language')}</span>\n                    {selectedLanguage?.code\n                      ? LANGUAGE_CODE_NAMES[\n                          selectedLanguage.code as keyof typeof LANGUAGE_CODE_NAMES\n                        ]\n                      : null}{' '}\n                    <DownArrowIcon\n                      className={classnames('size-6 transition-all', {\n                        '-scale-y-100': isOpen,\n                        'text-text-inverse': theme === 'dark',\n                      })}\n                    />\n                  </PopupButton>\n                )}\n              </div>\n              {loading ? null : (\n                <PopupContent popupStyles={{ maxHeight: '80%', overflowY: 'auto' }}>\n                  <div\n                    ref={linksContainerRef}\n                    className=\"OneLinkKeepLinks flex min-w-[192px] flex-col gap-2\"\n                  >\n                    {sortedFullSiteLanguages.length ? (\n                      <div>\n                        {popupOptions?.includeTitles ? (\n                          <p className=\"mb-1 border-b border-border pb-2 font-bold\">\n                            {t('hotelSite')}\n                          </p>\n                        ) : null}\n                        <ul className=\"divide-y divide-border\">\n                          {sortedFullSiteLanguages.map((lang) => (\n                            <ListItem\n                              key={lang.value}\n                              label={lang.label}\n                              language={lang.value}\n                              linkProps={{\n                                onClick: () => {\n                                  trackLinkClick(lang.value);\n                                  onLanguageSelection?.(lang.value);\n                                },\n                                onKeyDown: handleLinkKeyDown,\n                                isNewWindow: lang.opensNewTab,\n                                url: lang.href,\n                              }}\n                            />\n                          ))}\n                        </ul>\n                      </div>\n                    ) : null}\n                    {sortedResOnlyLanguages.length ? (\n                      <div>\n                        {popupOptions?.includeTitles ? (\n                          <p className=\"mb-1 border-b border-border pb-2 font-bold\">\n                            {t('bookingOnly')}\n                          </p>\n                        ) : null}\n                        <ul>\n                          {sortedResOnlyLanguages.map((lang) => (\n                            <ListItem\n                              key={lang.value}\n                              label={lang.label}\n                              language={lang.value}\n                              linkProps={{\n                                onClick: () => trackLinkClick(lang.value),\n                                onKeyDown: handleLinkKeyDown,\n                                isNewWindow: lang.opensNewTab,\n                                url: lang.href,\n                              }}\n                            />\n                          ))}\n                        </ul>\n                      </div>\n                    ) : null}\n                  </div>\n                </PopupContent>\n              )}\n            </>\n          )}\n        </PopupContextState>\n      </Popup>\n    </div>\n  );\n}\n\nfunction ListItem({\n  label,\n  language,\n  linkProps,\n}: {\n  label: string;\n  language: string;\n  linkProps: React.ComponentProps<typeof Link>;\n}) {\n  return (\n    <li\n      key={`popup-${language}`}\n      className={classnames('flex py-2', {\n        'justify-end': isRtl(language),\n      })}\n      lang={language}\n    >\n      <bdi>\n        <Link rel=\"noopener noreferrer\" {...linkProps}>\n          {label}{' '}\n        </Link>\n      </bdi>\n    </li>\n  );\n}\n\nfunction PopupContextState({ children }: { children: (args0: PopupContext) => React.ReactNode }) {\n  const context = usePopup();\n  return children(context);\n}\n\nfunction DownArrowIcon(props: React.ComponentProps<'svg'>) {\n  return (\n    <svg viewBox=\"0 0 31 31\" version=\"1.1\" {...props}>\n      <g stroke=\"none\" strokeWidth=\"1\" fill=\"transparent\" fillRule=\"evenodd\">\n        <g transform=\"translate(1, 1)\" strokeWidth=\"2\" stroke=\"currentColor\">\n          <polyline strokeLinecap=\"round\" points=\"9,12 14.5,18 20,12\" />\n        </g>\n      </g>\n    </svg>\n  );\n}\n\nexport default LanguageSelector;\n","export * from './lib/osc-language-selector';\n","import { useEffect, useRef, useState } from 'react';\nimport FocusLock from 'react-focus-lock';\nimport cx from 'classnames';\nimport { getIsReducedMotion } from '@dx-ui/utilities-accessibility';\n\nexport type DrawerPanelProps = {\n  isOpen: boolean;\n  children: React.ReactNode;\n  alignment: 'left' | 'right';\n  /**\n   *  Id of the body of your entire app, used to select for all dom elements within app without affecting elements that sit outside the app\n   */\n  appWrapperId: string;\n  /**\n   *  Id of the wrapper element you want to keep interactive while the panel is open. Example: Navigation header while nav menu is open\n   */\n  interactiveElementWrapperId: string;\n  panelProps?: React.ComponentProps<'div'>;\n  /**\n   * Allows you to choose a specific point to return focus to or allow for default returnFocus\n   */\n  returnFocus?: () => boolean;\n};\n\nexport const DrawerPanel = ({\n  isOpen,\n  children,\n  alignment,\n  appWrapperId,\n  interactiveElementWrapperId,\n  panelProps,\n  returnFocus,\n}: DrawerPanelProps) => {\n  const [isRightPanelVisible, setIsRightPanelVisible] = useState(false);\n  useEffect(() => {\n    if (!isOpen) {\n      if (alignment === 'right') setIsRightPanelVisible(false);\n      document.body.style.overflow = 'auto';\n      if (nonInteractiveElements.current)\n        nonInteractiveElements.current.forEach((nonInteractiveElement) => {\n          if (nonInteractiveElement) {\n            nonInteractiveElement.removeAttribute('aria-hidden');\n          }\n        });\n    } else {\n      document.body.style.overflow = 'hidden';\n      const nonInteractiveElems = document?.querySelectorAll(\n        // children of element with interactiveElementWrapperId will not have aria-hidden=\"true\" applied\n        `#${appWrapperId} *:not(#${interactiveElementWrapperId}, #${interactiveElementWrapperId} *):not([aria-hidden=\"true\"])`\n      );\n      nonInteractiveElems.forEach((nonInteractiveElement) => {\n        if (nonInteractiveElement) {\n          nonInteractiveElement.setAttribute('aria-hidden', 'true');\n        }\n      });\n      /** interactiveElementWrapper should always be available in the accessibility tree,\n       *  the selector above will also set aria-hidden on any parents of the interactiveElementWrapper in between it and element with appWrapperId\n       * This function removes aria hidden from the drawer's parents */\n      let drawerWrapper: Element | null = document?.querySelector(\n        `#${interactiveElementWrapperId}`\n      );\n      const els: Element[] = [];\n      while (drawerWrapper) {\n        els.push(drawerWrapper);\n        drawerWrapper = drawerWrapper.parentElement;\n      }\n      els?.forEach((navParentElement) => {\n        if (navParentElement) {\n          navParentElement.removeAttribute('aria-hidden');\n        }\n      });\n      nonInteractiveElements.current = nonInteractiveElems;\n    }\n  }, [isOpen, alignment, appWrapperId, interactiveElementWrapperId]);\n\n  const nonInteractiveElements = useRef<NodeListOf<Element> | undefined>();\n\n  return (\n    <FocusLock disabled={!isOpen} returnFocus={returnFocus ? returnFocus : true}>\n      <div\n        className={cx(\n          'absolute top-0 z-50 h-screen w-80 overflow-y-scroll border-t border-border bg-bg transition-all brand-ou:bg-secondary',\n          {\n            'ltr:motion-safe:animate-slideInLeft rtl:motion-safe:animate-slideInRight':\n              isOpen && alignment === 'left',\n            'ltr:motion-safe:animate-slideInRight rtl:motion-safe:animate-slideInLeft':\n              isOpen && alignment === 'right',\n            'end-0': alignment === 'right',\n            'hidden -translate-x-full': !isOpen,\n          }\n        )}\n        onAnimationEnd={() => {\n          if (alignment === 'right') setIsRightPanelVisible(true);\n        }}\n        hidden={!isOpen}\n        data-testid={`panelWindow-${alignment}`}\n        {...panelProps}\n      >\n        {/* Right side drawer panel needs to be faded in after animation is completed to avoid focus jump. */}\n        {alignment === 'right' ? (\n          isRightPanelVisible || (getIsReducedMotion() && isOpen) ? (\n            <div className=\"animate-fadein\">{children}</div>\n          ) : null\n        ) : (\n          children\n        )}\n      </div>\n    </FocusLock>\n  );\n};\n","export * from './lib/drawer';\n","import type * as Types from './types';\n\nimport {\n  useQuery,\n  type QueryClient,\n  type FetchQueryOptions,\n  type UseQueryOptions,\n} from '@tanstack/react-query';\nimport type { DXError } from '@dx-ui/types-graphql';\n\nexport const Smb_MemberIdAndStatusDocument = {\n  operationName: 'programAccounts',\n  operationString: `query programAccounts($guestId: BigInt!, $language: String!) {\n  programAccounts(guestId: $guestId, language: $language) {\n    accountId\n    accountName\n    accountStatus\n    memberId\n    memberStatus\n  }\n}`,\n  originalOpName: 'smb_MemberIdAndStatus',\n};\nexport function useSmb_MemberIdAndStatusQuery<\n  TData = Types.Smb_MemberIdAndStatusQuery,\n  TError = DXError\n>(\n  variables: Types.Smb_MemberIdAndStatusQueryVariables,\n  options?: Omit<UseQueryOptions<Types.Smb_MemberIdAndStatusQuery, TError, TData>, 'queryKey'>\n) {\n  return useQuery<Types.Smb_MemberIdAndStatusQuery, TError, TData>({\n    queryKey: [Smb_MemberIdAndStatusDocument, variables],\n    ...options,\n  });\n}\nexport function serverSideSmb_MemberIdAndStatusQuery(\n  queryClient: QueryClient,\n  variables: Types.Smb_MemberIdAndStatusQueryVariables,\n  options?: FetchQueryOptions<Types.Smb_MemberIdAndStatusQuery>\n) {\n  return queryClient.fetchQuery<Types.Smb_MemberIdAndStatusQuery>({\n    queryKey: [Smb_MemberIdAndStatusDocument, variables],\n    ...options,\n  });\n}\n\nexport const Smb_ProgramAccountMemberDocument = {\n  operationName: 'programAccountMember',\n  operationString: `query programAccountMember($guestId: BigInt!, $language: String!, $input: ProgramAccountsSmbMemberInput!) {\n  programAccountMember(guestId: $guestId, language: $language, input: $input) {\n    accountId\n    guestId\n    emailAddress: emailAddressMasked\n    emailLastVerifiedDateFmt(language: $language, format: \"short\")\n    memberId\n    status\n    role\n  }\n}`,\n  originalOpName: 'smb_ProgramAccountMember',\n};\nexport function useSmb_ProgramAccountMemberQuery<\n  TData = Types.Smb_ProgramAccountMemberQuery,\n  TError = DXError\n>(\n  variables: Types.Smb_ProgramAccountMemberQueryVariables,\n  options?: Omit<UseQueryOptions<Types.Smb_ProgramAccountMemberQuery, TError, TData>, 'queryKey'>\n) {\n  return useQuery<Types.Smb_ProgramAccountMemberQuery, TError, TData>({\n    queryKey: [Smb_ProgramAccountMemberDocument, variables],\n    ...options,\n  });\n}\nexport function serverSideSmb_ProgramAccountMemberQuery(\n  queryClient: QueryClient,\n  variables: Types.Smb_ProgramAccountMemberQueryVariables,\n  options?: FetchQueryOptions<Types.Smb_ProgramAccountMemberQuery>\n) {\n  return queryClient.fetchQuery<Types.Smb_ProgramAccountMemberQuery>({\n    queryKey: [Smb_ProgramAccountMemberDocument, variables],\n    ...options,\n  });\n}\n","import { sendReward } from '@dx-ui/framework-conductrics';\nimport set from 'lodash/set';\n\nimport { useAuth } from '@dx-ui/framework-auth-provider';\n\nimport {\n  useSmb_MemberIdAndStatusQuery,\n  useSmb_ProgramAccountMemberQuery,\n} from '../lib/gql/queries';\nimport { env } from '@dx-ui/framework-env';\nimport type { Mvts, UserLinks } from './types';\nimport { useRouter } from 'next/router';\n\nconst navigationInteractionGoal = 'g-6gRqwMh3Pt';\n\nexport const sendInteractionReward = () => {\n  sendReward(navigationInteractionGoal);\n};\n\nexport function removeSpacesAndAmpersands(str: string) {\n  return str.replace(/\\s+|&/g, '').toLowerCase();\n}\n\nexport function trackNavClickBasedOnLabel(label: string, dropdownLabel?: string) {\n  const value = removeSpacesAndAmpersands(`gh_${dropdownLabel ? `${dropdownLabel}_` : ''}${label}`);\n\n  trackNavClick(value);\n}\n\nexport function trackNavClick(value: string) {\n  if (window?.digitalData && window?._satellite && value) {\n    set(window.digitalData, 'click.clickID', value);\n    window._satellite?.track?.('global_click');\n  }\n}\n\nconst replaceLang = (stringValue: string, lang: string) => stringValue?.replace('__LANG__', lang);\n\nconst DEFAULT_OCODE = 'JHTNW';\n\n/** Returns the full set of potential nav links, including optional links like SMB and Go Hilton */\nexport function getBaseNavLinksFromEnv(lang: string, isAuthenticated: boolean) {\n  const signInUrl = replaceLang(\n    env('DX_AUTH_UI', 'https://www.hilton.com/__LANG__/auth2/guest/login/'),\n    lang\n  );\n\n  const signUpUrl = replaceLang(\n    `${env('OHW_BASE_URL')}__LANG__/hilton-honors/join/?ocode=${DEFAULT_OCODE}`,\n    lang\n  );\n  const environmentBaseUrl = env('OHW_BASE_URL', 'https://www.hilton.com/');\n\n  return {\n    signInLink: { url: signInUrl },\n    signUpLink: { url: signUpUrl },\n    accountLink: { url: `${environmentBaseUrl}${lang}/hilton-honors/guest/my-account/` },\n    honorsActivityLink: { url: `${environmentBaseUrl}${lang}/hilton-honors/guest/activity/` },\n    smbMemberLink: { url: `${environmentBaseUrl}${lang}/business/manage/` },\n    honorsPointsLink: { url: `${environmentBaseUrl}${lang}/hilton-honors/guest/points/` },\n    honorsProfileLink: { url: `${environmentBaseUrl}${lang}/hilton-honors/guest/profile/` },\n    friendsAndFamilyLink: {\n      url: env('TMTP_MANAGE_FAMILY_AND_FRIENDS_LINK', 'https://tmtp.hilton.com/tmtp/main.html'),\n    },\n    hgvMaxLink: {\n      url: env(\n        'EXTERNAL_HGV_PROGRAM_DETAILS_URL',\n        'https://help.hilton.com/s/article/HGV-Max-rate'\n      ),\n    },\n    goHiltonLink: {\n      url: env(\n        'EXTERNAL_TMTP_PROGRAM_DETAILS_URL',\n        'https://help.hilton.com/s/article/What-is-the-Go-Hilton-employee-program'\n      ),\n    },\n    findStayLink: {\n      url: isAuthenticated\n        ? `${environmentBaseUrl}${lang}/hilton-honors/guest/activity/`\n        : `${environmentBaseUrl}${lang}/book/reservation/find/`,\n    },\n  } as const satisfies UserLinks;\n}\n\nexport function useProgramMember({\n  programAccountId,\n  shouldFetchSmbMemberIdAndStatus = false,\n}: Partial<{\n  programAccountId: number | null | undefined;\n  shouldFetchSmbMemberIdAndStatus: boolean;\n}> = {}) {\n  const { guestId, guestInfo } = useAuth();\n  const { locale = 'en', query } = useRouter();\n\n  const programAccountIdParam = isNaN(Number(query?.programAccountId))\n    ? undefined\n    : Number(query?.programAccountId);\n\n  const accountId = programAccountId || programAccountIdParam;\n\n  const { data, isLoading } = useSmb_MemberIdAndStatusQuery(\n    { guestId: guestId as number, language: locale },\n    {\n      enabled: !!guestId && (!!guestInfo?.hhonors?.isSMBMember || shouldFetchSmbMemberIdAndStatus),\n    }\n  );\n\n  let mostRelevantProgramAccount = data?.programAccounts?.[0];\n\n  if ((data?.programAccounts?.length || 0) > 1 && accountId) {\n    mostRelevantProgramAccount = data?.programAccounts.filter(\n      (programAccount) => programAccount?.accountId === accountId\n    )?.[0];\n  }\n\n  const { data: programAccountData, isLoading: memberDataLoading } =\n    useSmb_ProgramAccountMemberQuery(\n      {\n        guestId: guestId as number,\n        language: locale,\n        input: {\n          accountId: accountId || (mostRelevantProgramAccount?.accountId as number),\n          memberId: mostRelevantProgramAccount?.memberId as number,\n        },\n      },\n      {\n        enabled:\n          !!guestId &&\n          !!mostRelevantProgramAccount?.memberId &&\n          Boolean(accountId || mostRelevantProgramAccount?.accountId),\n      }\n    );\n\n  const member = {\n    accountId,\n    ...programAccountData?.programAccountMember,\n    memberDataLoading,\n    isLoading,\n  };\n  return member;\n}\n\nexport function getNHCBP5758MVTVariant(mvts?: Mvts) {\n  const variant = mvts?.['5758']?.variant || 'A';\n\n  const isDefaultVariant = variant === 'A';\n  const isGlowVariant = variant === 'E';\n  const isSpeechBubble = variant === 'B' || variant === 'C' || variant === 'D';\n\n  return { variant, isDefaultVariant, isGlowVariant, isSpeechBubble };\n}\n","import type { HeaderProps } from './types';\nimport { useTranslation } from 'next-i18next';\n\nexport const Logo: React.FC<Pick<HeaderProps, 'brand' | 'theme'>> = ({ brand, theme }) => {\n  const { t } = useTranslation('osc-header');\n  const altText =\n    brand.code === 'WW'\n      ? t('hiltonForTheStay')\n      : brand.code === 'OU'\n      ? `${t('hiltonForTheStay')}, ${brand.name}`\n      : brand.code === 'LX'\n      ? `${t('hiltonForTheStay')}, SLH`\n      : brand.name;\n\n  return (\n    <img\n      src={\n        theme === 'dark'\n          ? `/modules/assets/svgs/logos/${brand.code}_inverted.svg`\n          : `/modules/assets/svgs/logos/${brand.code}.svg`\n      }\n      //Logo for worldwide has marketing text. So only when WW is passed use custom alt text override\n      alt={altText}\n      className=\"header-logo\"\n    />\n  );\n};\n\nexport const HeaderLogoLink: React.FC<\n  Pick<HeaderProps, 'brand' | 'theme' | 'heading'> & Pick<React.ComponentProps<'a'>, 'className'>\n> = ({ brand, className, theme, heading }) => {\n  const { t } = useTranslation('osc-header');\n\n  const Wrapper = heading ? 'h1' : 'span';\n\n  return (\n    <Wrapper aria-label={heading ? heading : undefined} className={className}>\n      <a\n        data-testid=\"brand-logo-link\"\n        href={brand.url}\n        className=\"relative block h-14 w-28 overflow-hidden brand-lx:lg:w-44 brand-ou:lg:w-72\"\n        {...(!!brand.onClick && { onClick: brand.onClick })}\n        {...(!!brand.target && { target: brand.target })}\n        {...(brand?.target === '_blank' && { rel: 'noreferrer' })}\n      >\n        <Logo theme={theme} brand={brand} />\n        <span className=\"sr-only\">{brand?.target === '_blank' ? `, ${t('newTab')}` : ''}</span>\n      </a>\n    </Wrapper>\n  );\n};\n","import * as React from 'react';\nimport { PopupButton, PopupContent, usePopup } from '@dx-ui/osc-popup';\nimport { sendInteractionReward } from '../header.utilities';\nimport { Dialog } from '@dx-ui/osc-dialog-v2';\nimport { useTranslation } from 'next-i18next';\nimport type { LoginResponse } from '@dx-ui/osc-login';\nimport { LoginIFrame } from '@dx-ui/osc-login';\nimport { Link } from '@dx-ui/osc-link';\nimport cx from 'classnames';\nimport type { HeaderProps } from '../types';\nimport Icon, { type IconNames } from '@dx-ui/osc-icon';\n\ntype IconName = (typeof IconNames)[number];\n\ntype NavItemSection = 'navigation' | 'user';\n\ntype NavItemProps = Omit<React.ComponentProps<'li'>, 'className' | 'children'> &\n  Pick<HeaderProps, 'theme'> & {\n    isOpen?: boolean;\n    children: React.ReactElement;\n  };\n\nexport function NavItem({ children, theme, isOpen = false, ...listItemProps }: NavItemProps) {\n  const isDark = theme === 'dark';\n\n  const spacedChild = React.cloneElement(children, {\n    className: cx(children.props.className, 'flex-1 self-stretch'),\n  });\n\n  return (\n    <li\n      {...listItemProps}\n      className={cx('group flex h-full items-center px-1 pt-1 text-sm', {\n        'nav-list-item': !theme,\n        'nav-list-item-dark': isDark,\n        'nav-list-item-active': isOpen && !theme,\n        'nav-list-item-active-dark': isOpen && isDark,\n      })}\n    >\n      {spacedChild}\n    </li>\n  );\n}\n\nexport function NavItemVisual({\n  label,\n  icon,\n  indicator,\n  hasRotatedIndicator,\n  theme,\n  section,\n}: {\n  label: string;\n  theme: 'light' | 'dark' | undefined;\n  icon?: IconName;\n  indicator?: IconName;\n  section: NavItemSection;\n  hasRotatedIndicator?: boolean;\n}) {\n  const isDark = theme === 'dark';\n\n  return (\n    <>\n      <span className={cx('block min-h-5', section === 'user' ? 'nav-item-text' : null)}>\n        {label}\n      </span>\n\n      {icon ? (\n        <div className={cx('ps-2')}>\n          <Icon\n            name={icon}\n            className={cx(\n              isDark ? 'nav-icon-dark' : 'nav-icon',\n              'group-focus-within:hidden group-hover:hidden'\n            )}\n            wrapper=\"span\"\n          />\n          <Icon\n            name={icon}\n            variant=\"solid\"\n            className={cx(\n              isDark ? 'nav-icon-active-dark' : 'nav-icon-active',\n              'hidden group-focus-within:block group-hover:block'\n            )}\n            wrapper=\"span\"\n          />\n        </div>\n      ) : null}\n\n      {indicator ? (\n        <div>\n          <Icon\n            name={indicator}\n            className={cx(\n              hasRotatedIndicator ? 'rotate-180' : null,\n              'group-focus-within:hidden group-hover:hidden'\n            )}\n            wrapper=\"span\"\n          />\n          <Icon\n            name={indicator}\n            className={cx(\n              hasRotatedIndicator ? 'rotate-180' : null,\n              'hidden group-focus-within:block group-hover:block'\n            )}\n            wrapper=\"span\"\n          />\n        </div>\n      ) : null}\n    </>\n  );\n}\n\ntype NavItemWithLinkProps = Omit<Link, 'className' | 'children' | 'icon'> & {\n  theme: 'dark' | undefined;\n  section: NavItemSection;\n  label: string;\n  icon?: React.ReactElement;\n  namedIcon?: IconName;\n  isWide?: boolean;\n  experimentationConfiguration?: CmsExperimentationConfiguration;\n};\n\n//TODO: make the focus ring here take up the full box, like with the dropdowns. Also check ItemWithModal\nexport const NavItemWithLink: React.FC<NavItemWithLinkProps> = ({\n  theme,\n  namedIcon,\n  section,\n  label,\n  isWide,\n  experimentationConfiguration,\n  ...rest\n}) => {\n  return (\n    <NavItem theme={theme} data-testid=\"with-link\">\n      <Link\n        underline={false}\n        {...rest}\n        data-conductrics-goal={experimentationConfiguration?.goal}\n        data-conductrics-value={experimentationConfiguration?.value}\n        className={cx('flex items-center whitespace-nowrap', isWide ? 'p-2' : 'p-1', {\n          'nav-main-link': section === 'navigation',\n        })}\n      >\n        <NavItemVisual section={section} theme={theme} label={label} icon={namedIcon} />\n      </Link>\n    </NavItem>\n  );\n};\n\nexport type TNavItemWithModal = {\n  /** Specify the title for the Dialog */\n  title: string;\n  /** callback to run after login attempt */\n  onLoginAttempt: React.ComponentProps<typeof LoginIFrame>['onLoginAttempt'];\n  /** Name of the button to display */\n  buttonName?: string;\n  /** aria-label of the button */\n  buttonLabel: string;\n  buttonIcon?: IconName;\n  onClick?: () => void;\n  theme: 'dark' | undefined;\n  section: NavItemSection;\n};\n\nexport const NavItemWithModal: React.FC<React.PropsWithChildren<TNavItemWithModal>> = ({\n  theme,\n  section,\n  buttonLabel,\n  buttonIcon,\n  onClick,\n  title,\n  onLoginAttempt,\n  children,\n}) => {\n  const [showDialog, setShowDialog] = React.useState<boolean>(false);\n  const open = () => {\n    sendInteractionReward();\n    onClick?.();\n    setShowDialog(true);\n  };\n  const close = () => setShowDialog(false);\n\n  const handleLogin = (response: LoginResponse) => {\n    onLoginAttempt?.(response);\n    if (!response.error) {\n      close();\n    }\n  };\n\n  const arrayChildren = React.Children.toArray(children);\n\n  const [t] = useTranslation('osc-login');\n\n  return (\n    <>\n      <NavItem theme={theme} data-testid=\"with-modal\">\n        <button\n          data-testid=\"with-modal\"\n          type=\"button\"\n          className=\"group flex h-full items-center whitespace-nowrap px-1 text-sm\"\n          onClick={open}\n        >\n          <NavItemVisual\n            label={buttonLabel ?? t('signIn')}\n            icon={buttonIcon}\n            theme={theme}\n            section={section}\n          />\n        </button>\n      </NavItem>\n      <Dialog isOpen={showDialog} onDismiss={close} size=\"md\" title={title}>\n        {React.Children.map(arrayChildren, (child) => {\n          if (React.isValidElement(child) && child.type === LoginIFrame) {\n            return React.cloneElement(\n              child as React.ReactElement<React.ComponentProps<typeof LoginIFrame>>,\n              {\n                onLoginAttempt: handleLogin,\n                onClose: close,\n              }\n            );\n          }\n          return child;\n        })}\n      </Dialog>\n    </>\n  );\n};\n\ntype TNavItemWithPopup = {\n  section: NavItemSection;\n  onClick?: () => void;\n  theme: 'dark' | undefined;\n  popupButtonRef?: React.RefObject<HTMLButtonElement>;\n  label: string;\n  icon?: IconName;\n  indicator?: IconName;\n  rotateOnOpen?: boolean;\n  experimentationConfiguration?: CmsExperimentationConfiguration;\n};\n\nexport const NavItemWithPopup: React.FC<React.PropsWithChildren<TNavItemWithPopup>> = ({\n  children,\n  label,\n  icon,\n  rotateOnOpen,\n  onClick,\n  theme,\n  popupButtonRef,\n  section,\n  indicator,\n  experimentationConfiguration,\n}) => {\n  const { isOpen } = usePopup();\n\n  return (\n    <>\n      <NavItem theme={theme} isOpen={isOpen} data-testid=\"with-popup\">\n        <PopupButton\n          ref={popupButtonRef}\n          data-conductrics-goal={experimentationConfiguration?.goal}\n          data-conductrics-value={experimentationConfiguration?.value}\n          onClick={() => {\n            sendInteractionReward();\n            onClick?.();\n          }}\n          className={cx('flex items-center whitespace-nowrap p-2', {\n            'nav-main-link': section === 'navigation',\n          })}\n        >\n          <NavItemVisual\n            theme={theme}\n            label={label}\n            section={section}\n            indicator={indicator}\n            icon={icon}\n            hasRotatedIndicator={!isOpen && rotateOnOpen}\n          />\n        </PopupButton>\n      </NavItem>\n      <PopupContent\n        className=\"!popup-margin !w-screen !p-0 motion-safe:animate-fadein\"\n        popupStyles={{ left: 0 }}\n      >\n        {children}\n      </PopupContent>\n    </>\n  );\n};\n","import * as React from 'react';\nimport { sendInteractionReward } from '../../header.utilities';\nimport { Dialog } from '@dx-ui/osc-dialog-v2';\nimport { useTranslation } from 'next-i18next';\nimport type { LoginResponse } from '@dx-ui/osc-login';\nimport { LoginIFrame } from '@dx-ui/osc-login';\nimport { NavItemVisual } from '../nav-items';\nimport type { TNavItemWithModal } from '../nav-items';\nimport cx from 'classnames';\nimport { Link } from '@dx-ui/osc-link';\nimport type { HeaderProps } from '../../types';\nimport { type IconNames } from '@dx-ui/osc-icon';\n\ntype IconName = (typeof IconNames)[number];\n\ntype NavItemSection = 'navigation' | 'user';\n\nexport const NavItemWithModalAndGlow: React.FC<React.PropsWithChildren<TNavItemWithModal>> = ({\n  theme,\n  section,\n  buttonLabel,\n  buttonIcon,\n  onClick,\n  title,\n  onLoginAttempt,\n  children,\n}) => {\n  const [showDialog, setShowDialog] = React.useState(false);\n\n  const open = () => {\n    sendInteractionReward();\n    onClick?.();\n    setShowDialog(true);\n  };\n  const close = () => setShowDialog(false);\n\n  const handleLogin = (response: LoginResponse) => {\n    onLoginAttempt?.(response);\n    if (!response.error) {\n      close();\n    }\n  };\n\n  const arrayChildren = React.Children.toArray(children);\n\n  const [t] = useTranslation('osc-login');\n\n  return (\n    <>\n      <li className=\"flex items-center justify-center\">\n        <button\n          className=\"btn btn-primary-outline flex items-center py-1 pe-3 ps-4 shadow-[0_0_15px_rgb(0,144,147)] transition-shadow duration-300 ease-in-out hover:shadow-none\"\n          data-testid=\"with-modal\"\n          type=\"button\"\n          onClick={open}\n        >\n          <NavItemVisual\n            label={buttonLabel ?? t('signIn')}\n            icon={buttonIcon}\n            theme={theme}\n            section={section}\n          />\n        </button>\n      </li>\n      <Dialog isOpen={showDialog} onDismiss={close} size=\"md\" title={title}>\n        {React.Children.map(arrayChildren, (child) => {\n          if (React.isValidElement(child) && child.type === LoginIFrame) {\n            return React.cloneElement(\n              child as React.ReactElement<React.ComponentProps<typeof LoginIFrame>>,\n              {\n                onLoginAttempt: handleLogin,\n                onClose: close,\n              }\n            );\n          }\n          return child;\n        })}\n      </Dialog>\n    </>\n  );\n};\n\ntype NavItemWithLinkProps = Omit<Link, 'className' | 'children' | 'icon'> & {\n  theme: 'dark' | undefined;\n  section: NavItemSection;\n  label: string;\n  icon?: React.ReactElement;\n  namedIcon?: IconName;\n  isWide?: boolean;\n  experimentationConfiguration?: CmsExperimentationConfiguration;\n};\n\ntype NavItemProps = Omit<React.ComponentProps<'li'>, 'className' | 'children'> &\n  Pick<HeaderProps, 'theme'> & {\n    isOpen?: boolean;\n    children: React.ReactElement;\n  };\n\nexport function NavItem({ children, ...listItemProps }: NavItemProps) {\n  const spacedChild = React.cloneElement(children, {\n    className: cx(children.props.className, 'flex-1 self-stretch'),\n  });\n\n  return (\n    <li\n      {...listItemProps}\n      className=\"group flex h-full items-center border-b-8 border-transparent px-1 pt-1 text-sm hover:text-primary hover:underline\"\n    >\n      {spacedChild}\n    </li>\n  );\n}\n\nexport const NavItemWithLinkGlow: React.FC<NavItemWithLinkProps> = ({\n  theme,\n  namedIcon,\n  section,\n  label,\n  isWide,\n  experimentationConfiguration,\n  ...rest\n}) => {\n  return (\n    <NavItem theme={theme} data-testid=\"with-link\">\n      <Link\n        underline={false}\n        {...rest}\n        data-conductrics-goal={experimentationConfiguration?.goal}\n        data-conductrics-value={experimentationConfiguration?.value}\n        className={cx('flex items-center whitespace-nowrap', isWide ? 'p-2' : 'p-1', {\n          'nav-main-link': section === 'navigation',\n        })}\n      >\n        <NavItemVisual section={section} theme={theme} label={label} icon={namedIcon} />\n      </Link>\n    </NavItem>\n  );\n};\n","import { useTranslation } from 'next-i18next';\nimport cx from 'classnames';\nimport { Link } from '@dx-ui/osc-link';\n\nimport Icon from '@dx-ui/osc-icon';\nimport type { HeaderProps, TDrawerLink } from '../types';\nimport { trackNavClick, trackNavClickBasedOnLabel } from '../header.utilities';\nimport { getLocaleFormattedNumber, replaceLang } from '@dx-ui/framework-i18n';\nimport { useRouter } from 'next/router';\n\nexport function NavigationPopupContents({\n  subMenu,\n  label,\n}: {\n  subMenu: TDrawerLink[];\n  label: string;\n}) {\n  const { locale = 'en' } = useRouter();\n\n  return (\n    <div className=\"container flex-1 py-5\">\n      <MenuList>\n        {subMenu.map(\n          ({ label: subMenuLabel, link: { experimentationConfiguration, ...link }, onClick }) => (\n            <MenuListItem key={subMenuLabel}>\n              <Link\n                {...link}\n                url={replaceLang(link?.url, locale)}\n                data-conductrics-goal={experimentationConfiguration?.goal}\n                data-conductrics-value={experimentationConfiguration?.value}\n                underline={false}\n                className=\"nav-drawer-link-text\"\n                anchorClassName=\"nav-drawer-link p-3 hover:nav-drawer-link-active focus:nav-drawer-link-active brand-ey:focus:font-normal brand-ey:focus:bg-tertiary-alt brand-ey:focus:border-b-primary-alt brand-ou:focus:bg-bg-light\"\n                onClick={(event) => {\n                  trackNavClickBasedOnLabel(subMenuLabel, label);\n                  onClick?.();\n                  link?.onClick?.(event);\n                }}\n              >\n                {subMenuLabel}\n              </Link>\n            </MenuListItem>\n          )\n        )}\n      </MenuList>\n    </div>\n  );\n}\n\nexport type UserPopupContentsProps = Pick<\n  HeaderProps,\n  | 'userLinks'\n  | 'shouldOpenAccountLinksInNewWindow'\n  | 'shouldSuppressHonorsAccountLinks'\n  | 'onSignOut'\n> & {\n  user: Exclude<HeaderProps['user'], undefined>;\n};\n\nexport default function UserPopupContents({\n  user,\n  userLinks,\n  shouldOpenAccountLinksInNewWindow,\n  shouldSuppressHonorsAccountLinks,\n  onSignOut,\n}: UserPopupContentsProps) {\n  const { locale = 'en' } = useRouter();\n  const [t] = useTranslation('osc-header');\n\n  const formattedHonorsPointsTotal = getLocaleFormattedNumber(user?.honorsPoints, { locale });\n\n  return (\n    <div className=\"container flex py-5\">\n      <div className=\"flex items-center\">\n        <div className=\"flex size-20 shrink-0 items-center justify-center rounded-full bg-hilton-alt\">\n          <Icon name=\"user\" size=\"4xl\" />\n        </div>\n        <div className=\"ms-5\">\n          <p className=\"mb-1 text-sm font-bold brand-ey:font-normal\">\n            {t('greetings', { username: user.name })}\n          </p>\n          <p className=\"mb-1 capitalize\">\n            <span className=\"text-sm font-bold underline brand-ey:font-normal\">\n              {user.honorsTier}\n            </span>{' '}\n            {t('status')}\n          </p>\n          <p className=\"mb-1 text-sm brand-ey:font-normal\">\n            {t('honorsPointsTotal', { honorsPointsTotal: formattedHonorsPointsTotal })}\n          </p>\n          {user.hhonorsNumber ? (\n            <p className=\"mb-1 text-sm brand-ey:font-normal\">\n              {t('hiltonHonorsNumber', { hhonorsNumber: user.hhonorsNumber })}\n            </p>\n          ) : null}\n        </div>\n      </div>\n      <div className=\"ms-5 flex-1 xl:ms-10\">\n        <MenuList>\n          {userLinks?.accountLink ? (\n            <MegaUserLink\n              url={userLinks?.accountLink.url}\n              onClick={() => {\n                trackNavClick('gh_membername_hiltonhonorshome');\n              }}\n              isNewWindow={shouldOpenAccountLinksInNewWindow}\n            >\n              {t('hiltonHonorsHome')}\n            </MegaUserLink>\n          ) : null}\n          {userLinks?.honorsActivityLink && !shouldSuppressHonorsAccountLinks ? (\n            <MegaUserLink\n              url={userLinks?.honorsActivityLink.url}\n              onClick={() => {\n                trackNavClick('gh_membername_hiltonhonorsactivity');\n              }}\n              isNewWindow={shouldOpenAccountLinksInNewWindow}\n            >\n              {t('activity')}\n            </MegaUserLink>\n          ) : null}\n\n          {userLinks?.honorsPointsLink?.url && !shouldSuppressHonorsAccountLinks ? (\n            <MegaUserLink\n              url={userLinks.honorsPointsLink.url}\n              onClick={() => {\n                trackNavClick('gh_membername_hiltonhonorspoints');\n              }}\n              isNewWindow={shouldOpenAccountLinksInNewWindow}\n            >\n              {t('pointsLabel')}\n            </MegaUserLink>\n          ) : null}\n\n          {userLinks?.honorsProfileLink?.url && !shouldSuppressHonorsAccountLinks ? (\n            <MegaUserLink\n              url={userLinks.honorsProfileLink.url}\n              onClick={() => {\n                trackNavClick('gh_membername_hiltonhonorsprofile');\n              }}\n              isNewWindow={shouldOpenAccountLinksInNewWindow}\n            >\n              {t('profile')}\n            </MegaUserLink>\n          ) : null}\n\n          {userLinks?.goHiltonLink?.url ? (\n            <MegaUserLink\n              url={userLinks.goHiltonLink.url}\n              onClick={() => {\n                trackNavClick('gh_membername_gohiltonprogramdetails');\n              }}\n              isNewWindow={shouldOpenAccountLinksInNewWindow}\n            >\n              {t('goHiltonProgramDetails')}\n            </MegaUserLink>\n          ) : null}\n\n          {userLinks?.friendsAndFamilyLink?.url ? (\n            <MegaUserLink\n              url={userLinks.friendsAndFamilyLink.url}\n              onClick={() => {\n                trackNavClick('gh_membername_managefriendsandfamily');\n              }}\n              isNewWindow={shouldOpenAccountLinksInNewWindow}\n            >\n              {t('manageFriendsAndFamily')}\n            </MegaUserLink>\n          ) : null}\n\n          {userLinks?.hgvMaxLink?.url ? (\n            <MegaUserLink\n              url={userLinks.hgvMaxLink.url}\n              onClick={() => {\n                trackNavClick('gh_membername_hgvmaxratedetails');\n              }}\n              isNewWindow={shouldOpenAccountLinksInNewWindow}\n            >\n              {t('hgvMaxRateDetails')}\n            </MegaUserLink>\n          ) : null}\n\n          {userLinks?.smbMemberLink?.url ? (\n            <MegaUserLink\n              url={userLinks.smbMemberLink.url}\n              onClick={() => {\n                trackNavClick('gh_membername_managehiltonforbusiness');\n              }}\n              isNewWindow={shouldOpenAccountLinksInNewWindow}\n            >\n              {t('manageHiltonForBusiness')}\n            </MegaUserLink>\n          ) : null}\n          <MenuListItem>\n            <button\n              className=\"nav-drawer-link nav-drawer-link-text w-full whitespace-nowrap text-left hover:nav-drawer-link-active focus:nav-drawer-link-active brand-ey:focus:border-b-primary-alt brand-ey:focus:bg-tertiary-alt brand-ou:focus:bg-bg-light\"\n              onClick={async () => {\n                trackNavClick('gh_membername_signout');\n                await onSignOut();\n              }}\n              type=\"button\"\n            >\n              {t('signOut')}\n            </button>\n          </MenuListItem>\n        </MenuList>\n      </div>\n    </div>\n  );\n}\n\nfunction MenuList({ children, ...listProps }: React.ComponentProps<'ul'>) {\n  return (\n    <ul {...listProps} className={cx('columns-3 gap-6', listProps.className)}>\n      {children}\n    </ul>\n  );\n}\n\nfunction MenuListItem({ children, ...listItemProps }: React.ComponentProps<'li'>) {\n  return (\n    <li {...listItemProps} data-testid=\"menu-list-item\" className=\"py-3\">\n      <span className=\"block break-inside-avoid border-b-2 border-border py-3 hover:font-bold brand-ey:hover:border-b-primary-alt brand-ey:hover:bg-tertiary-alt brand-ey:hover:font-normal brand-ou:border-primary brand-ou:hover:bg-bg-light \">\n        {children}\n      </span>\n    </li>\n  );\n}\n\nfunction MegaUserLink({\n  url,\n  onClick,\n  children,\n  isNewWindow,\n}: {\n  url: string;\n  onClick: () => void;\n  children: React.ReactNode;\n  isNewWindow?: boolean;\n}) {\n  return (\n    <MenuListItem>\n      <Link\n        url={url}\n        underline={false}\n        className=\"nav-drawer-link-text whitespace-nowrap\"\n        anchorClassName=\"nav-drawer-link hover:nav-drawer-link-active focus:nav-drawer-link-active brand-ey:focus:bg-tertiary-alt brand-ey:focus:border-b-primary-alt brand-ou:focus:bg-bg-light\"\n        onClick={onClick}\n        isNewWindow={isNewWindow}\n      >\n        {children}\n      </Link>\n    </MenuListItem>\n  );\n}\n","import Icon from '@dx-ui/osc-icon';\nimport * as Popover from '@radix-ui/react-popover';\nimport cx from 'classnames';\nimport { sendReward } from '@dx-ui/framework-conductrics';\nimport { useEffect } from 'react';\ntype SpeechBubbleProps = {\n  showSpeechBubble: boolean;\n  variant: string;\n  closeSpeechBubble: () => void;\n  onInlineButtonClick: () => void;\n  containerRef?: Element | null;\n  contentStyles?: string;\n};\n//The internal radix's logic traps focus inside the popover. This is a workaround\nconst getDisplayedFocusableElements = () => {\n  const body = document.querySelector('body');\n\n  if (body) {\n    const focusableElements = body.querySelectorAll(\n      'a, button, input, textarea, select, details, summary, [tabindex]:not([tabindex=\"-1\"]), iframe, area'\n    );\n\n    const displayedFocusableElements = Array.from(focusableElements).filter((element) => {\n      const style = window.getComputedStyle(element);\n      return (\n        style.display !== 'none' &&\n        style.visibility !== 'hidden' &&\n        (element as HTMLElement).offsetWidth > 0 &&\n        (element as HTMLElement).offsetHeight > 0\n      );\n    });\n\n    return displayedFocusableElements as HTMLElement[];\n  }\n};\n\nexport const SpeechBubble: React.FC<React.PropsWithChildren<SpeechBubbleProps>> = ({\n  closeSpeechBubble,\n  showSpeechBubble,\n  contentStyles,\n  children,\n  variant,\n  containerRef,\n  onInlineButtonClick,\n}) => {\n  const onSpeechBubbleButtonClick = () => {\n    sendReward('g-JtxVq7s7u9');\n    onInlineButtonClick?.();\n  };\n  //The internal radix's logic traps focus inside the popover. This is a workaround\n  const onKeyDownCloseButton = (e: React.KeyboardEvent) => {\n    const displayedFocusableElements = getDisplayedFocusableElements();\n\n    if (e.shiftKey && e.key === 'Tab' && displayedFocusableElements) {\n      e.preventDefault();\n\n      //of the currently focused element\n      const currentIndex = Array.prototype.indexOf.call(\n        displayedFocusableElements,\n        document.activeElement\n      );\n      //in the list of displayed focusable items\n      const previousIndex =\n        (currentIndex - 1 + displayedFocusableElements.length) % displayedFocusableElements.length;\n\n      displayedFocusableElements[previousIndex]?.focus();\n    }\n  };\n  //The internal radix's logic traps focus inside the popover. This is a workaround\n  const onKeyDownInlineButton = (e: React.KeyboardEvent) => {\n    const displayedFocusableElements = getDisplayedFocusableElements();\n\n    if (!e.shiftKey && e.key === 'Tab' && displayedFocusableElements) {\n      e.preventDefault();\n      //of the currently focused element\n      const currentIndex = Array.prototype.indexOf.call(\n        displayedFocusableElements,\n        document.activeElement\n      );\n      //in the list of displayed focusable items\n      const nextIndex = (currentIndex + 1) % displayedFocusableElements.length;\n\n      displayedFocusableElements[nextIndex]?.focus();\n    }\n  };\n\n  //This is another workaround to remove the focus guards that radix injects under the hood\n  //This is not a good long term solution, and we might need to rethink using radix for a speech bubble\n  //This is for the MVT test only\n  useEffect(() => {\n    if (showSpeechBubble) {\n      //remove existing focus guards\n      const focusGuards = document.querySelectorAll('span[data-radix-focus-guard]');\n      focusGuards.forEach((el) => el.remove());\n\n      // Select the parent node where the focus guards are added\n      const parentNode = document.body;\n\n      const config: MutationObserverInit = { childList: true, subtree: false };\n\n      const callback: MutationCallback = (mutationsList) => {\n        for (const mutation of mutationsList) {\n          if (mutation.type === 'childList') {\n            mutation.addedNodes.forEach((node) => {\n              if (\n                node.nodeType === 1 &&\n                (node as HTMLElement).hasAttribute('data-radix-focus-guard')\n              ) {\n                (node as HTMLElement).remove();\n              }\n            });\n          }\n        }\n      };\n      const observer = new MutationObserver(callback);\n      observer.observe(parentNode, config);\n\n      return () => {\n        observer.disconnect();\n      };\n    }\n  }, [showSpeechBubble]);\n\n  return (\n    <div>\n      <Popover.Root open={showSpeechBubble}>\n        <Popover.Trigger asChild>{children}</Popover.Trigger>\n        <Popover.Portal container={containerRef}>\n          <Popover.Content\n            className={cx(\n              'z-10 flex w-[80vw] max-w-[178px] flex-col rounded-md bg-tertiary shadow-lg sm:max-w-[266px]',\n              contentStyles\n            )}\n            align=\"end\"\n            hideWhenDetached\n            onEscapeKeyDown={closeSpeechBubble}\n            aria-label=\"Sign in message\"\n            onOpenAutoFocus={(event) => event.preventDefault()}\n          >\n            <div className=\"flex justify-end\">\n              <Popover.Close\n                className=\"text-bg\"\n                aria-label=\"Close sign in message\"\n                onClick={closeSpeechBubble}\n                onKeyDown={onKeyDownCloseButton}\n              >\n                <Icon name=\"close\" size=\"md\" />\n              </Popover.Close>\n            </div>\n            <p className=\"px-4 pb-4 text-bg\" id=\"sign-in-note\">\n              {variant === 'B' ? (\n                <>\n                  Get exclusive rates and benefits with{' '}\n                  <button\n                    onClick={onSpeechBubbleButtonClick}\n                    onKeyDown={onKeyDownInlineButton}\n                    type=\"button\"\n                    className=\"underline\"\n                  >\n                    Hilton Honors.\n                  </button>\n                </>\n              ) : null}\n              {variant === 'C' ? (\n                <>\n                  <button\n                    onClick={onSpeechBubbleButtonClick}\n                    onKeyDown={onKeyDownInlineButton}\n                    type=\"button\"\n                    className=\"underline\"\n                  >\n                    Join or sign in\n                  </button>\n                  <span> to unlock Hilton Honors benefits.</span>\n                </>\n              ) : null}\n              {variant === 'D' ? (\n                <>\n                  <span>Check out faster—</span>\n                  <button\n                    onClick={onSpeechBubbleButtonClick}\n                    onKeyDown={onKeyDownInlineButton}\n                    type=\"button\"\n                    className=\"underline\"\n                  >\n                    join or sign in\n                  </button>\n                  <span> to Hilton Honors.</span>\n                </>\n              ) : null}\n            </p>\n            <Popover.Arrow\n              className=\"fill-tertiary lg:ml-[36px]\"\n              width={15}\n              height={10}\n              aria-hidden={true}\n            />\n          </Popover.Content>\n        </Popover.Portal>\n      </Popover.Root>\n    </div>\n  );\n};\n\nexport default SpeechBubble;\n","import { LoginIFrame } from '@dx-ui/osc-login';\nimport type { LoginResponse, LoginBaseProps } from '@dx-ui/osc-login';\nimport { Dialog } from '@dx-ui/osc-dialog-v2';\nimport * as React from 'react';\nimport { SpeechBubble } from './speech-bubble';\nimport { sendInteractionReward } from '../../header.utilities';\nimport { sendReward } from '@dx-ui/framework-conductrics';\n\ntype NavItemWithSpeechBubbleProps = {\n  title: LoginBaseProps['title'];\n  frameSrc: LoginBaseProps['frameSrc'];\n  options?: LoginBaseProps['options'];\n  onLoginAttempt: React.ComponentProps<typeof LoginIFrame>['onLoginAttempt'];\n  variant: string;\n  buttonClassName: LoginBaseProps['buttonClassName'];\n  onClick?: () => void;\n  onDialogOpen?: () => void;\n};\n\nexport const NavItemWithSpeechBubble = ({\n  onLoginAttempt,\n  title,\n  options = {},\n  frameSrc,\n  variant,\n  buttonClassName,\n  onClick,\n  onDialogOpen,\n  children,\n}: React.PropsWithChildren<NavItemWithSpeechBubbleProps>) => {\n  const [showDialog, setShowDialog] = React.useState(false);\n  const [showSpeechBubble, setShowSpeechBubble] = React.useState(true);\n\n  const [speechBubbleContainer, setSpeechBubbleContainer] = React.useState<\n    HTMLDivElement | undefined\n  >(undefined);\n\n  const buttonRef = React.useRef<React.ElementRef<'button'>>(null);\n\n  const onSignInClick = () => {\n    onClick?.();\n    onDialogOpen?.();\n    setShowDialog(true);\n    setShowSpeechBubble(false);\n    sendInteractionReward();\n    sendReward('nav-sign-in-click');\n  };\n\n  const close = () => setShowDialog(false);\n\n  const closeSpeechBubble = () => {\n    setShowSpeechBubble(false);\n    buttonRef?.current?.focus();\n  };\n\n  const setRef = (node: HTMLDivElement) => {\n    if (node) {\n      setSpeechBubbleContainer(node);\n    }\n  };\n\n  const handleLogin = async (response: LoginResponse) => {\n    // eslint-disable-next-line @typescript-eslint/await-thenable\n    await onLoginAttempt?.(response);\n    if (!response.error) {\n      close();\n    }\n  };\n  return (\n    <>\n      <Dialog\n        title={title}\n        isOpen={showDialog}\n        onDismiss={close}\n        size=\"md\"\n        dialogTrigger={\n          <SpeechBubble\n            closeSpeechBubble={closeSpeechBubble}\n            showSpeechBubble={showSpeechBubble}\n            variant={variant}\n            containerRef={speechBubbleContainer}\n            onInlineButtonClick={() => {\n              closeSpeechBubble?.();\n              setShowDialog(true);\n              onDialogOpen?.();\n            }}\n          >\n            <button\n              data-testid=\"with-modal\"\n              type=\"button\"\n              className={buttonClassName}\n              onClick={onSignInClick}\n              ref={buttonRef}\n              aria-describedby=\"sign-in-note\"\n            >\n              {children}\n            </button>\n          </SpeechBubble>\n        }\n      >\n        <LoginIFrame\n          frameSrc={frameSrc}\n          options={options}\n          data-e2e=\"loginIframe\"\n          onLoginAttempt={handleLogin}\n          onClose={close}\n          title={title}\n        />\n      </Dialog>\n      <div ref={setRef} />\n    </>\n  );\n};\n\nexport default NavItemWithSpeechBubble;\n","import { useTranslation } from 'next-i18next';\nimport cx from 'classnames';\nimport { Link } from '@dx-ui/osc-link';\nimport { Popup } from '@dx-ui/osc-popup';\nimport { LoginIFrame } from '@dx-ui/osc-login';\nimport type { MegaMenuProps } from '../types';\nimport {\n  sendInteractionReward,\n  trackNavClickBasedOnLabel,\n  trackNavClick,\n  getNHCBP5758MVTVariant,\n} from '../header.utilities';\nimport { LanguageSelector } from '@dx-ui/osc-language-selector';\nimport { sendReward, Status, useConductricsSelection } from '@dx-ui/framework-conductrics';\nimport { Logo } from '../header.logo';\nimport { useRef } from 'react';\nimport { NavItemVisual, NavItemWithLink, NavItemWithModal, NavItemWithPopup } from './nav-items';\nimport { NavItemWithModalAndGlow, NavItemWithLinkGlow } from './mvtest-nhcbp-5758/nav-item-glow';\nimport UserPopupContents, { NavigationPopupContents } from './popup-contents';\nimport { NavItemWithSpeechBubble } from './mvtest-nhcbp-5758/nav-item-speech-bubble';\nimport { useRouter } from 'next/router';\nimport { replaceLang } from '@dx-ui/framework-i18n';\n\nexport function MegaMenu({\n  isFluid,\n  suppressLogo = false,\n  shouldSuppressHonorsAccountLinks,\n  shouldSuppressFindStay,\n  shouldSuppressJoinAndSignIn,\n  shouldOpenAccountLinksInNewWindow,\n  brand,\n  mainNavLinks,\n  user,\n  languageSelectorOptions,\n  loginOptions,\n  onSignInAttempt,\n  userLinks,\n  onSignOut,\n  heading,\n  theme,\n  mvts,\n  SignUpComponent,\n}: MegaMenuProps) {\n  const userNavProps = {\n    user,\n    userLinks,\n    onSignInAttempt,\n    onSignOut,\n    loginOptions,\n    languageSelectorOptions,\n    theme,\n    mvts,\n    shouldSuppressHonorsAccountLinks,\n    shouldSuppressFindStay,\n    shouldSuppressJoinAndSignIn,\n    shouldOpenAccountLinksInNewWindow,\n    SignUpComponent,\n  };\n  const isDark = theme === 'dark';\n  const headingLevelProps = heading\n    ? {\n        role: 'heading',\n        'aria-level': 1,\n        'aria-label': heading,\n      }\n    : {};\n\n  return (\n    <div className=\"bg-transparent\">\n      <div\n        className={cx({\n          'container-fluid': isFluid,\n          container: !isFluid,\n        })}\n      >\n        <div className=\"relative flex flex-wrap\">\n          {suppressLogo ? null : (\n            <div className=\"flex min-h-[4.5rem] items-center\" {...headingLevelProps}>\n              <Link\n                url={brand.url}\n                target={brand.target}\n                onClick={sendInteractionReward}\n                // once nav is implemented on all pages for OHW make w-72 for all brands per UX/UI\n                anchorClassName=\"relative block h-14 w-28 brand-ou:lg:w-72 brand-lx:lg:w-72 me-1\"\n                showNewWindowIcon={false}\n              >\n                <Logo theme={theme} brand={brand} />\n              </Link>\n            </div>\n          )}\n          <div className=\"absolute end-0 top-0\">\n            <UserNav {...userNavProps} />\n          </div>\n        </div>\n      </div>\n      <div\n        className={cx({\n          'nav-bottom-link-area': !isDark,\n          'nav-bottom-link-area-dark': isDark,\n        })}\n      >\n        <div\n          className={cx({\n            'container-fluid': isFluid,\n            container: !isFluid,\n          })}\n        >\n          <div className=\"flex overflow-auto\" data-testid=\"header-links-container\">\n            {mainNavLinks?.length ? <MainNav theme={theme} mainNavLinks={mainNavLinks} /> : null}\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n\ntype UserNavProps = Pick<\n  MegaMenuProps,\n  | 'loginOptions'\n  | 'onSignInAttempt'\n  | 'onSignOut'\n  | 'user'\n  | 'userLinks'\n  | 'languageSelectorOptions'\n  | 'theme'\n  | 'shouldSuppressHonorsAccountLinks'\n  | 'shouldSuppressFindStay'\n  | 'shouldSuppressJoinAndSignIn'\n  | 'shouldOpenAccountLinksInNewWindow'\n  | 'SignUpComponent'\n  | 'mvts'\n>;\n\nfunction UserNav({\n  loginOptions,\n  onSignInAttempt,\n  onSignOut,\n  user,\n  languageSelectorOptions,\n  userLinks,\n  theme,\n  shouldSuppressHonorsAccountLinks,\n  shouldSuppressFindStay,\n  shouldSuppressJoinAndSignIn,\n  shouldOpenAccountLinksInNewWindow,\n  SignUpComponent,\n  mvts,\n}: UserNavProps) {\n  const [t] = useTranslation(['osc-header', 'osc-login']);\n  function useFindStayTest() {\n    const { selection, isLoaded } = useConductricsSelection('a-oWnxRSIvy6Dz', Status.OK);\n    return {\n      variant1: isLoaded && selection?.choice === 'B',\n      variant2: isLoaded && selection?.choice === 'C',\n      variant3: isLoaded && selection?.choice === 'D',\n    };\n  }\n\n  const defaultOptions: React.ComponentProps<typeof LoginIFrame> = {\n    frameSrc: userLinks?.signInLink?.url || '',\n    title: t('osc-login:signIn'),\n    onLoginAttempt: onSignInAttempt,\n  };\n\n  const userButtonLinkRef = useRef<HTMLButtonElement>(null);\n  const isDark = theme === 'dark';\n  const { variant1, variant2, variant3 } = useFindStayTest();\n\n  const { isDefaultVariant, isGlowVariant, isSpeechBubble, variant } = getNHCBP5758MVTVariant(mvts);\n\n  return (\n    <nav className=\"relative ms-auto flex min-h-[4.5rem]\" aria-label={t('hiltonHonors')}>\n      <ul className=\"flex\">\n        {languageSelectorOptions ? (\n          <li className=\"flex items-center pb-2 pe-2 pt-1\">\n            <LanguageSelector theme={theme} {...languageSelectorOptions} />\n          </li>\n        ) : null}\n        {userLinks?.findStayLink && !shouldSuppressFindStay && !isGlowVariant ? (\n          <NavItemWithLink\n            onClick={() => {\n              sendInteractionReward();\n              sendReward('find-stay-click');\n              trackNavClick('gh_findstay');\n            }}\n            url={userLinks?.findStayLink.url}\n            isNewWindow={shouldOpenAccountLinksInNewWindow}\n            showNewWindowIcon={false}\n            theme={theme}\n            section=\"user\"\n            isWide\n            {...(variant1\n              ? {\n                  namedIcon: 'calendar',\n                  label: t('yourStays'),\n                }\n              : variant2\n              ? {\n                  namedIcon: 'calendar-search',\n                  label: t('findStay'),\n                }\n              : variant3\n              ? {\n                  namedIcon: 'calendar-search',\n                  label: t('yourStays'),\n                }\n              : {\n                  namedIcon: 'calendar',\n                  label: t('findStay'),\n                })}\n          />\n        ) : null}\n\n        {userLinks?.findStayLink && !shouldSuppressFindStay && isGlowVariant ? (\n          <NavItemWithLinkGlow\n            onClick={() => {\n              sendInteractionReward();\n              sendReward('find-stay-click');\n              trackNavClick('gh_findstay');\n            }}\n            url={userLinks?.findStayLink.url}\n            isNewWindow={shouldOpenAccountLinksInNewWindow}\n            showNewWindowIcon={false}\n            theme={theme}\n            section=\"user\"\n            isWide\n            namedIcon=\"calendar\"\n            label={t('findStay')}\n          />\n        ) : null}\n\n        {user ? (\n          <Popup>\n            <NavItemWithPopup\n              section=\"user\"\n              theme={theme}\n              popupButtonRef={userButtonLinkRef}\n              onClick={() => {\n                trackNavClick('gh_membername');\n                sendReward('profile-name-click');\n              }}\n              label={t('greetings', { username: user.name })}\n              icon=\"user-circle\"\n            >\n              <UserPopupContents\n                user={user}\n                userLinks={userLinks}\n                shouldOpenAccountLinksInNewWindow={shouldOpenAccountLinksInNewWindow}\n                shouldSuppressHonorsAccountLinks={shouldSuppressHonorsAccountLinks}\n                onSignOut={onSignOut}\n              />\n            </NavItemWithPopup>\n          </Popup>\n        ) : (userLinks?.signInLink || userLinks?.signUpLink || SignUpComponent) &&\n          !shouldSuppressJoinAndSignIn ? (\n          <>\n            {userLinks?.signUpLink || SignUpComponent ? (\n              SignUpComponent ? (\n                <SignUpComponent\n                  loggedInButtonRef={userButtonLinkRef}\n                  className=\"nav-item-text mx-1\"\n                >\n                  {t('signUp')}\n                </SignUpComponent>\n              ) : userLinks?.signUpLink ? (\n                isGlowVariant ? (\n                  <NavItemWithLinkGlow\n                    section=\"user\"\n                    {...userLinks.signUpLink}\n                    underline={false}\n                    showNewWindowIcon={false}\n                    label={t('signUp')}\n                    theme={theme}\n                    onClick={() => {\n                      sendInteractionReward();\n                      sendReward('nav-join-click');\n                      trackNavClick('gh_join_signin');\n                    }}\n                  />\n                ) : (\n                  <NavItemWithLink\n                    section=\"user\"\n                    {...userLinks.signUpLink}\n                    underline={false}\n                    showNewWindowIcon={false}\n                    label={t('signUp')}\n                    theme={theme}\n                    onClick={() => {\n                      sendInteractionReward();\n                      sendReward('nav-join-click');\n                      trackNavClick('gh_join_signin');\n                    }}\n                  />\n                )\n              ) : null\n            ) : null}\n\n            {isGlowVariant ? <div className=\"w-4\" /> : null}\n\n            {(userLinks?.signUpLink || userLinks?.signUpComponent) &&\n            userLinks?.signInLink &&\n            !isGlowVariant ? (\n              <div\n                aria-hidden={true}\n                className=\"group nav-list-divider-container flex h-full items-center pt-1 text-sm\"\n              >\n                <div className={isDark ? 'nav-list-divider-dark' : 'nav-list-divider'} />\n              </div>\n            ) : null}\n\n            {userLinks?.signInLink && isDefaultVariant ? (\n              <NavItemWithModal\n                section=\"user\"\n                theme={theme}\n                onLoginAttempt={defaultOptions.onLoginAttempt}\n                title={defaultOptions.title}\n                onClick={() => {\n                  trackNavClick('gh_join_signin');\n                  sendReward('nav-sign-in-click');\n                }}\n                buttonIcon=\"user-circle\"\n                buttonLabel={t('osc-login:signIn')}\n              >\n                <LoginIFrame data-e2e=\"loginIframe\" {...defaultOptions} {...loginOptions} />\n              </NavItemWithModal>\n            ) : null}\n\n            {userLinks?.signInLink && isGlowVariant ? (\n              <NavItemWithModalAndGlow\n                section=\"user\"\n                theme={theme}\n                onLoginAttempt={defaultOptions.onLoginAttempt}\n                title={defaultOptions.title}\n                onClick={() => {\n                  trackNavClick('gh_join_signin');\n                  sendReward('nav-sign-in-click');\n                }}\n                buttonIcon=\"user-circle\"\n                buttonLabel={t('osc-login:signIn')}\n              >\n                <LoginIFrame data-e2e=\"loginIframe\" {...defaultOptions} {...loginOptions} />\n              </NavItemWithModalAndGlow>\n            ) : null}\n            {userLinks?.signInLink && isSpeechBubble ? (\n              <li className=\"nav-list-item flex h-full items-center px-1 pt-1 text-sm\">\n                <NavItemWithSpeechBubble\n                  {...defaultOptions}\n                  variant={variant}\n                  buttonClassName=\"flex h-full items-center whitespace-nowrap px-1 text-sm\"\n                  onClick={() => {\n                    trackNavClick('gh_join_signin');\n                  }}\n                  {...loginOptions}\n                >\n                  <NavItemVisual\n                    label={t('osc-login:signIn')}\n                    icon=\"user-circle\"\n                    theme={theme}\n                    section=\"user\"\n                  />\n                </NavItemWithSpeechBubble>\n              </li>\n            ) : null}\n          </>\n        ) : null}\n      </ul>\n    </nav>\n  );\n}\n\ntype MainNavProps = Required<Pick<MegaMenuProps, 'mainNavLinks'>> & {\n  theme?: Exclude<CmsBrandComponentTheme, 'light'>;\n};\n\nfunction MainNav({ mainNavLinks, theme }: MainNavProps) {\n  const { locale = 'en' } = useRouter();\n\n  return (\n    <div className=\"flex min-h-[4.5rem] items-center\">\n      <div className=\"size-full overflow-x-visible\">\n        <ul className=\"flex h-full items-center rtl:space-x-reverse\">\n          {mainNavLinks.map(({ label, subMenu, link, onClick }) => {\n            if (!subMenu?.length && link?.url) {\n              return (\n                <NavItemWithLink\n                  {...link}\n                  url={replaceLang(link?.url, locale)}\n                  section=\"navigation\"\n                  label={label}\n                  isWide\n                  key={label}\n                  theme={theme}\n                  onClick={(event) => {\n                    sendInteractionReward();\n                    trackNavClickBasedOnLabel(label);\n                    onClick?.();\n                    link?.onClick?.(event);\n                  }}\n                />\n              );\n            }\n            if (subMenu?.length) {\n              return (\n                <Popup key={label}>\n                  <NavItemWithPopup\n                    section=\"navigation\"\n                    label={label}\n                    indicator=\"arrowhead-small-up\"\n                    rotateOnOpen\n                    theme={theme}\n                    onClick={() => {\n                      trackNavClickBasedOnLabel(label);\n                    }}\n                    experimentationConfiguration={link?.experimentationConfiguration}\n                  >\n                    <NavigationPopupContents subMenu={subMenu} label={label} />\n                  </NavItemWithPopup>\n                </Popup>\n              );\n            }\n            return null;\n          })}\n        </ul>\n      </div>\n    </div>\n  );\n}\n\nexport default MegaMenu;\n","import { useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'next-i18next';\nimport type { TDrawerItem, TDrawerList } from '../types';\nimport { Link } from '@dx-ui/osc-link';\nimport Icon from '@dx-ui/osc-icon';\nimport { trackNavClickBasedOnLabel } from '../header.utilities';\nimport cx from 'classnames';\nimport { useRouter } from 'next/router';\nimport { replaceLang } from '@dx-ui/framework-i18n';\n\nexport const DrawerList = ({ menuItems, isOpen, onClose }: TDrawerList) => {\n  const [nextItem, setNextItem] = useState<TDrawerItem | undefined>();\n  const [nextItemIndex, setNextItemIndex] = useState<number>();\n  const [selectedItem, setSelectedItem] = useState<TDrawerItem | undefined>();\n  const [selectedItemIndex, setSelectedItemIndex] = useState<number>();\n  const backButtonRef = useRef<HTMLButtonElement>(null);\n  const [isFadingOut, setIsFadingOut] = useState(false);\n  const lastSelectedButton = useRef<HTMLButtonElement>(null);\n  const { t } = useTranslation('osc-header');\n  const { locale = 'en' } = useRouter();\n\n  useEffect(() => {\n    if (!isOpen) setSelectedItem(undefined);\n  }, [isOpen]);\n\n  const goBack = () => {\n    setIsFadingOut(true);\n    setNextItem(undefined);\n    setTimeout(() => {\n      lastSelectedButton?.current?.focus();\n    }, 350);\n  };\n\n  const focusOnBack = () => {\n    setTimeout(() => {\n      backButtonRef?.current?.focus();\n    }, 50);\n  };\n\n  const itemSelected = (menuItem: TDrawerItem, index: number) => {\n    setIsFadingOut(true);\n    setNextItem(menuItem);\n    setNextItemIndex(index);\n  };\n\n  return (\n    <div\n      className={isFadingOut ? 'animate-fadeout opacity-0' : 'animate-fadein'}\n      onAnimationEnd={() => {\n        if (isFadingOut) {\n          setIsFadingOut(false);\n          setSelectedItem(nextItem);\n          setSelectedItemIndex(nextItemIndex);\n          focusOnBack();\n        }\n      }}\n    >\n      <div className=\"relative border-b border-border px-4 py-3 brand-ey:border-b-primary-alt brand-ou:border-b-primary\">\n        <button onClick={onClose} type=\"button\" className=\"px-2\">\n          <Icon name=\"close\" className=\"m-auto\" />\n          <span className=\"text-xs font-semibold brand-ey:font-normal brand-wa:font-normal\">\n            {t('close')}\n            <span className=\"sr-only\">{t('menu')}</span>\n          </span>\n        </button>\n      </div>\n      {selectedItem ? (\n        <button\n          ref={backButtonRef}\n          onClick={goBack}\n          className={cx(\n            'nav-main-link flex h-12 w-full items-center border-s-8 border-primary bg-bg-alt pe-2 ps-4 text-left',\n            'brand-ey:border-b brand-ey:border-b-primary-alt brand-ey:bg-tertiary-alt',\n            'brand-hi-refresh:bg-bg-light',\n            'brand-lx:bg-bg-light',\n            'brand-ou:border-b brand-ou:border-b-primary brand-ou:bg-bg-light'\n          )}\n          aria-expanded=\"true\"\n          type=\"button\"\n        >\n          <Icon name=\"arrowhead-small-right\" className=\"me-3 rotate-180 rtl:rotate-0\" />\n          <span>{selectedItem.label}</span>\n        </button>\n      ) : null}\n\n      {selectedItem ? (\n        <ul>\n          {selectedItem.subMenu?.map((menuItem) =>\n            menuItem.link?.url ? (\n              <li key={menuItem.label}>\n                <Link\n                  anchorClassName=\"block nav-drawer-link brand-ey:focus:bg-tertiary-alt brand-lx:focus:bg-bg-light brand-ou:focus:bg-bg-light\"\n                  underline={false}\n                  className={cx(\n                    'flex h-12 items-center border-b border-border ps-4',\n                    'brand-ey:border-b-primary-alt brand-ey:hover:bg-tertiary-alt',\n                    'brand-hi-refresh:hover:bg-bg-light brand-hi-refresh:focus:bg-bg-light',\n                    'brand-lx:hover:bg-bg-light',\n                    'brand-ou:border-b-primary brand-ou:hover:bg-bg-light'\n                  )}\n                  url={replaceLang(menuItem.link.url, locale)}\n                  isNewWindow={menuItem.link.isNewWindow}\n                  onClick={(event) => {\n                    trackNavClickBasedOnLabel(menuItem.label, selectedItem.label);\n                    menuItem.onClick?.();\n                    menuItem.link?.onClick?.(event);\n                  }}\n                  data-conductrics-goal={menuItem.link.experimentationConfiguration?.goal}\n                  data-conductrics-value={menuItem.link.experimentationConfiguration?.value}\n                >\n                  {menuItem.label}\n                </Link>\n              </li>\n            ) : null\n          )}\n        </ul>\n      ) : (\n        // If no submenu is currently selected, show main set of menu items\n        <ul>\n          {menuItems.map((menuItem, index) => {\n            if (menuItem?.subMenu?.length) {\n              return (\n                <li key={menuItem.label}>\n                  <button\n                    ref={selectedItemIndex === index ? lastSelectedButton : null}\n                    onClick={() => {\n                      itemSelected(menuItem, index);\n                      trackNavClickBasedOnLabel(menuItem.label);\n                    }}\n                    className={cx(\n                      'nav-main-link flex h-12 w-full animate-fadein items-center justify-between border-b border-border ps-4 text-left',\n                      'brand-ey:border-b-primary-alt brand-ey:hover:bg-tertiary-alt brand-ey:focus:bg-tertiary-alt',\n                      'brand-hi-refresh:hover:bg-bg-light brand-hi-refresh:focus:bg-bg-light',\n                      'brand-lx:hover:bg-bg-light brand-lx:focus:bg-bg-light',\n                      'brand-ou:border-b-primary brand-ou:hover:bg-bg-light brand-ou:focus:bg-bg-light'\n                    )}\n                    aria-expanded=\"false\"\n                    type=\"button\"\n                    data-conductrics-goal={menuItem.link?.experimentationConfiguration?.goal}\n                    data-conductrics-value={menuItem.link?.experimentationConfiguration?.value}\n                  >\n                    <span>{menuItem.label}</span>\n                    <Icon name=\"arrowhead-small-right\" className=\"me-3 ms-auto rtl:rotate-180\" />\n                  </button>\n                </li>\n              );\n            } else if (menuItem.link?.url) {\n              return (\n                <li key={menuItem.label}>\n                  <Link\n                    anchorClassName=\"block brand-ey:focus:bg-tertiary-alt brand-ou:focus:bg-bg-light\"\n                    underline={false}\n                    className={cx(\n                      'nav-main-link flex h-12 items-center border-b border-border ps-4',\n                      'brand-ey:border-b-primary-alt brand-ey:hover:bg-tertiary-alt',\n                      'brand-hi-refresh:hover:bg-bg-light brand-hi-refresh:focus:bg-bg-light',\n                      'brand-ou:border-b-primary brand-ou:hover:bg-bg-light'\n                    )}\n                    url={replaceLang(menuItem.link.url, locale)}\n                    isNewWindow={menuItem.link.isNewWindow}\n                    onClick={(event) => {\n                      trackNavClickBasedOnLabel(menuItem.label);\n                      menuItem.onClick?.();\n                      menuItem.link?.onClick?.(event);\n                    }}\n                    data-conductrics-goal={menuItem.link.experimentationConfiguration?.goal}\n                    data-conductrics-value={menuItem.link.experimentationConfiguration?.value}\n                  >\n                    {menuItem.label}\n                  </Link>\n                </li>\n              );\n            }\n            return null;\n          })}\n        </ul>\n      )}\n    </div>\n  );\n};\n","import { getBaseNavLinksFromEnv } from '../header.utilities';\nimport { useAuth } from '@dx-ui/framework-auth-provider';\nimport type { UserLinks } from '../types';\nimport { useRouter } from 'next/router';\n\nexport const useActiveUserLinks = (): UserLinks => {\n  const { guestInfo, isAuthenticated } = useAuth();\n  const { locale, asPath } = useRouter();\n\n  const navLinks = getBaseNavLinksFromEnv(locale || 'en', isAuthenticated);\n\n  const isB2BMember = guestInfo?.hhonors?.isB2BMember;\n  const isHGVMax = Boolean(guestInfo?.hhonors?.isOwnerHGVNew) || asPath.includes('hgv-max');\n\n  const isTMTPTeamMember =\n    guestInfo?.hhonors?.isOwner ||\n    guestInfo?.hhonors?.isTeamMember ||\n    guestInfo?.hhonors?.isOwnerHGV;\n\n  const isTMTPNonTeamMember =\n    guestInfo?.hhonors?.isTeamMemberSpouse ||\n    guestInfo?.hhonors?.isFamilyAndFriends ||\n    guestInfo?.hhonors?.isLongTenure10 ||\n    guestInfo?.hhonors?.isLongTenure20;\n\n  return {\n    ...navLinks,\n    smbMemberLink: isB2BMember ? navLinks?.smbMemberLink : undefined,\n    friendsAndFamilyLink: isTMTPTeamMember ? navLinks?.friendsAndFamilyLink : undefined,\n    goHiltonLink: isTMTPNonTeamMember || isTMTPTeamMember ? navLinks?.goHiltonLink : undefined,\n    hgvMaxLink: isHGVMax ? navLinks?.hgvMaxLink : undefined,\n  };\n};\n","import { useRef, useState } from 'react';\nimport FocusLock from 'react-focus-lock';\nimport { Login } from '@dx-ui/osc-login';\nimport { useTranslation } from 'next-i18next';\nimport { Link } from '@dx-ui/osc-link';\nimport { DrawerPanel } from '@dx-ui/osc-drawer';\nimport cx from 'classnames';\nimport MegaMenu from './mega-menu';\nimport { DrawerList } from './nav-drawer-list';\nimport Icon from '@dx-ui/osc-icon';\nimport { getNHCBP5758MVTVariant, sendInteractionReward, trackNavClick } from '../header.utilities';\nimport { LanguageSelector } from '@dx-ui/osc-language-selector';\nimport { sendReward } from '@dx-ui/framework-conductrics';\nimport { HeaderLogoLink } from '../header.logo';\nimport type { TBrandHeaderBody } from '../types';\nimport { useRouter } from 'next/router';\nimport { getLocaleFormattedNumber } from '@dx-ui/framework-i18n';\nimport { useActiveUserLinks } from '../hooks/useActiveUserLinks';\nimport { NavItemWithSpeechBubble } from './mvtest-nhcbp-5758/nav-item-speech-bubble';\n\nexport const BrandHeaderBody = ({\n  menuItems,\n  brand,\n  loginOptions,\n  user,\n  SignUpComponent,\n  wrapperId,\n  onSignInAttempt,\n  languageSelectorOptions,\n  onSignOut,\n  isFluid,\n  suppressLogo,\n  shouldSuppressFindStay,\n  shouldSuppressJoinAndSignIn,\n  shouldOpenAccountLinksInNewWindow,\n  shouldSuppressHonorsAccountLinks,\n  heading,\n  theme,\n  mvts,\n}: TBrandHeaderBody) => {\n  const [isMenuOpen, setIsMenuOpen] = useState(false);\n  const [isAccountOpen, setIsAccountOpen] = useState(false);\n  const { t } = useTranslation(['osc-header', 'osc-login']);\n  const userLoggedInButtonRef = useRef<HTMLButtonElement>(null);\n\n  const activeUserLinks = useActiveUserLinks();\n\n  const closeMenus = () => {\n    setIsMenuOpen(false);\n    setIsAccountOpen(false);\n    document.removeEventListener('keydown', handleKeyDown);\n  };\n\n  const handleKeyDown = (e: KeyboardEvent) => {\n    if (e.key === 'Escape') {\n      closeMenus();\n    }\n  };\n\n  const addEscapeKeyListener = () => {\n    document.addEventListener('keydown', handleKeyDown);\n  };\n\n  const removeEscapeKeyListener = () => {\n    document.removeEventListener('keydown', handleKeyDown);\n  };\n\n  const menuPressed = () => {\n    sendInteractionReward();\n    if (isAccountOpen) setIsAccountOpen(false);\n    if (isMenuOpen) {\n      setIsMenuOpen(false);\n      removeEscapeKeyListener();\n    } else {\n      addEscapeKeyListener();\n      setIsMenuOpen(true);\n    }\n  };\n\n  const accountPressed = () => {\n    sendInteractionReward();\n    sendReward('profile-name-click');\n    setIsMenuOpen(false);\n    if (isAccountOpen) {\n      setIsAccountOpen(false);\n      removeEscapeKeyListener();\n    } else {\n      setIsAccountOpen(true);\n      addEscapeKeyListener();\n    }\n  };\n\n  const closeMainMenu = () => {\n    setIsMenuOpen(false);\n  };\n\n  const closeAccount = () => {\n    setIsAccountOpen(false);\n  };\n\n  const isDark = theme === 'dark';\n\n  const joinButtonClasses = cx(\n    'm-auto inline-block border-e border-border pe-2 text-xs font-semibold brand-ey:font-normal brand-lx:border-primary brand-wa:font-normal',\n    {\n      'text-text-inverse': isDark,\n    }\n  );\n\n  const { isGlowVariant, isSpeechBubble, variant } = getNHCBP5758MVTVariant(mvts);\n\n  return (\n    <>\n      <nav\n        id=\"drawer-nav\"\n        className={cx('z-50 bg-bg lg:hidden', {\n          'bg-bg brand-ou:bg-secondary': !theme,\n          'bg-bg-dark': isDark,\n        })}\n      >\n        <div\n          className={cx('flex content-center items-center p-2 md:px-8 lg:px-10', {\n            'sm:h-16': !!languageSelectorOptions,\n            'h-min px-2 py-1': !languageSelectorOptions,\n          })}\n        >\n          {menuItems && menuItems.length > 0 ? (\n            <button\n              className={cx('me-2 w-12', {\n                'self-end sm:self-center': !!languageSelectorOptions,\n              })}\n              onClick={menuPressed}\n              type=\"button\"\n              aria-expanded={isMenuOpen}\n              id=\"menu-open-button\"\n            >\n              <Icon\n                name=\"menu\"\n                size=\"md\"\n                className={cx('m-auto block', {\n                  'text-text-inverse': isDark,\n                })}\n              />\n              <span\n                className={cx('text-xs font-semibold brand-ey:font-normal brand-wa:font-normal', {\n                  'text-text-inverse': isDark,\n                })}\n              >\n                <span className=\"sr-only\">{t('open')}</span>\n                {t('menu')}\n              </span>\n            </button>\n          ) : null}\n          {!suppressLogo ? (\n            <HeaderLogoLink\n              theme={theme}\n              brand={brand}\n              className={cx({\n                'self-end sm:self-center': !!languageSelectorOptions,\n              })}\n              heading={heading}\n            />\n          ) : null}\n          <div className=\"ms-auto flex flex-col items-center gap-x-2 sm:flex-row\">\n            {languageSelectorOptions ? (\n              <div className=\"pb-5 sm:pb-0\">\n                <LanguageSelector theme={theme} {...languageSelectorOptions} />\n              </div>\n            ) : null}\n            <div className=\"ms-auto flex items-center gap-x-2\">\n              {activeUserLinks?.findStayLink && !shouldSuppressFindStay ? (\n                <Link\n                  className=\"mb-1\"\n                  anchorClassName=\"text-center min-w-16 w-min align-middle\"\n                  underline={false}\n                  url={activeUserLinks?.findStayLink.url}\n                  isNewWindow={shouldOpenAccountLinksInNewWindow}\n                  showNewWindowIcon={false}\n                  onClick={() => {\n                    sendInteractionReward();\n                    sendReward('find-stay-click');\n                    trackNavClick('gh_findstay');\n                  }}\n                >\n                  {isGlowVariant && !user ? (\n                    <span className=\"inline-block text-xs font-semibold hover:text-primary hover:underline brand-ey:font-normal brand-wa:font-normal\">\n                      {t('findStay')}\n                    </span>\n                  ) : (\n                    <>\n                      <Icon\n                        name=\"calendar\"\n                        size=\"md\"\n                        className={cx('m-auto block', {\n                          'nav-icon': !theme,\n                          'text-text-inverse': isDark,\n                        })}\n                      />\n                      <span\n                        className={cx(\n                          'inline-block text-xs font-semibold brand-ey:font-normal brand-wa:font-normal',\n                          {\n                            'text-text-inverse': isDark,\n                          }\n                        )}\n                      >\n                        {t('findStay')}\n                      </span>\n                    </>\n                  )}\n                </Link>\n              ) : null}\n              {isGlowVariant && !user ? <div className=\"h-7 w-px bg-border\" /> : null}\n              {user ? (\n                <button\n                  className=\"items-center\"\n                  onClick={() => {\n                    trackNavClick('gh_membername');\n                    accountPressed();\n                  }}\n                  aria-expanded={isAccountOpen}\n                  type=\"button\"\n                >\n                  <Icon\n                    name=\"user-circle\"\n                    size=\"md\"\n                    className={cx('m-auto block', {\n                      'nav-icon': !theme,\n                      'nav-icon-dark': isDark,\n                    })}\n                  />\n                  <span\n                    className={cx(\n                      'break-all text-xs font-semibold brand-ey:font-normal brand-wa:font-normal',\n                      {\n                        'text-text-inverse': isDark,\n                      }\n                    )}\n                  >\n                    {t('greetings', { username: user.name })}\n                  </span>\n                </button>\n              ) : (activeUserLinks?.signInLink || activeUserLinks?.signUpLink) &&\n                !shouldSuppressJoinAndSignIn ? (\n                <div className={cx('flex flex-col', { 'pt-7': !isGlowVariant })}>\n                  <div className=\"flex items-center\">\n                    {activeUserLinks?.signUpLink && !SignUpComponent ? (\n                      <div className={cx('h-fit', { 'ms-1': isGlowVariant })}>\n                        <Link\n                          {...activeUserLinks.signUpLink}\n                          showNewWindowIcon={false}\n                          underline={false}\n                          className={\n                            isGlowVariant\n                              ? 'inline-block pe-2 text-xs font-semibold hover:text-primary hover:underline'\n                              : joinButtonClasses\n                          }\n                          onClick={() => {\n                            sendInteractionReward();\n                            sendReward('nav-join-click');\n                            trackNavClick('gh_join_signin');\n                          }}\n                        >\n                          {t('signUp')}\n                        </Link>\n                      </div>\n                    ) : null}\n                    {SignUpComponent ? (\n                      <div className=\"h-fit\">\n                        <SignUpComponent\n                          className={joinButtonClasses}\n                          loggedInButtonRef={userLoggedInButtonRef}\n                        >\n                          {t('signUp')}\n                        </SignUpComponent>\n                      </div>\n                    ) : null}\n                    {activeUserLinks.signInLink && isSpeechBubble ? (\n                      <div\n                        className=\"ps-2\"\n                        onClick={() => {\n                          sendInteractionReward();\n                          trackNavClick('gh_join_signin');\n                        }}\n                      >\n                        <NavItemWithSpeechBubble\n                          frameSrc={activeUserLinks?.signInLink?.url || ''}\n                          title={t('osc-login:signIn')}\n                          onLoginAttempt={onSignInAttempt}\n                          variant={variant}\n                          buttonClassName={cx(\n                            'text-xs font-semibold brand-ey:font-normal brand-wa:!font-normal',\n                            {\n                              'text-text-inverse': isDark,\n                            }\n                          )}\n                          onDialogOpen={() => {\n                            setIsMenuOpen(false);\n                            setIsAccountOpen(false);\n                          }}\n                          {...loginOptions}\n                        >\n                          <Icon\n                            name=\"user-circle\"\n                            size=\"md\"\n                            className={cx('-ms-[22px] -mt-7 block', {\n                              'nav-icon': !theme,\n                              'nav-icon-dark': isDark,\n                            })}\n                          />\n                          <span>{t('osc-login:signIn')}</span>\n                        </NavItemWithSpeechBubble>\n                      </div>\n                    ) : null}\n                    {activeUserLinks.signInLink && !isSpeechBubble ? (\n                      <div\n                        className=\"ps-2\"\n                        onClick={() => {\n                          sendInteractionReward();\n                          trackNavClick('gh_join_signin');\n                        }}\n                      >\n                        {!isGlowVariant ? (\n                          <Icon\n                            name=\"user-circle\"\n                            size=\"md\"\n                            className={cx('-ms-[22px] -mt-7 block', {\n                              'nav-icon': !theme,\n                              'nav-icon-dark': isDark,\n                            })}\n                          />\n                        ) : null}\n                        <Login\n                          frameSrc={activeUserLinks?.signInLink?.url || ''}\n                          title={t('osc-login:signIn')}\n                          onLoginAttempt={onSignInAttempt}\n                          hideIcon={true}\n                          onOpen={() => {\n                            setIsMenuOpen(false);\n                            setIsAccountOpen(false);\n                          }}\n                          buttonClassName={\n                            isGlowVariant\n                              ? 'btn btn-primary-outline text-xs font-semibold transition-shadow duration-300 ease-in-out shadow-[0_0_15px_rgb(0,144,147)] hover:shadow-none'\n                              : cx(\n                                  'text-xs font-semibold brand-ey:font-normal brand-wa:!font-normal',\n                                  {\n                                    'text-text-inverse': isDark,\n                                  }\n                                )\n                          }\n                          {...loginOptions}\n                        />\n                      </div>\n                    ) : null}\n                  </div>\n                </div>\n              ) : null}\n            </div>\n          </div>\n        </div>\n        {(isMenuOpen || isAccountOpen) && (\n          <div\n            className=\"absolute top-0 z-50 h-screen w-full animate-fadein overflow-hidden bg-overlay backdrop-blur-[2px]\"\n            data-testid=\"backgroundOverlay\"\n            onClick={closeMenus}\n          />\n        )}\n        {menuItems && menuItems.length > 0 ? (\n          <div\n            data-testid=\"menuWindow\"\n            className={cx({ visible: isMenuOpen, invisible: !isMenuOpen })}\n          >\n            <DrawerPanel\n              isOpen={isMenuOpen}\n              alignment=\"left\"\n              appWrapperId={wrapperId}\n              interactiveElementWrapperId=\"drawer-nav\"\n              returnFocus={() => {\n                document.getElementById('menu-open-button')?.focus();\n                return false;\n              }}\n            >\n              <DrawerList isOpen={isMenuOpen} menuItems={menuItems} onClose={closeMainMenu} />\n            </DrawerPanel>\n          </div>\n        ) : null}\n        <DrawerPanel\n          isOpen={isAccountOpen}\n          alignment=\"right\"\n          appWrapperId={wrapperId}\n          interactiveElementWrapperId=\"drawer-nav\"\n        >\n          {user && isAccountOpen ? (\n            <AccountSection\n              user={user}\n              userLinks={activeUserLinks}\n              onClose={closeAccount}\n              onSignOut={onSignOut}\n              shouldSuppressHonorsAccountLinks={shouldSuppressHonorsAccountLinks}\n              shouldOpenAccountLinksInNewWindow={shouldOpenAccountLinksInNewWindow}\n            />\n          ) : null}\n        </DrawerPanel>\n      </nav>\n\n      <nav className=\"hidden lg:block\">\n        <MegaMenu\n          isFluid={isFluid}\n          suppressLogo={suppressLogo}\n          shouldSuppressHonorsAccountLinks={shouldSuppressHonorsAccountLinks}\n          shouldSuppressFindStay={shouldSuppressFindStay}\n          shouldSuppressJoinAndSignIn={shouldSuppressJoinAndSignIn}\n          shouldOpenAccountLinksInNewWindow={shouldOpenAccountLinksInNewWindow}\n          brand={brand}\n          onSignInAttempt={onSignInAttempt}\n          onSignOut={onSignOut}\n          user={user}\n          userLinks={activeUserLinks}\n          mainNavLinks={menuItems}\n          languageSelectorOptions={languageSelectorOptions}\n          loginOptions={loginOptions}\n          heading={heading}\n          theme={theme}\n          mvts={mvts}\n          SignUpComponent={SignUpComponent}\n        />\n      </nav>\n    </>\n  );\n};\n\nexport type TAccountSection = Pick<\n  TBrandHeaderBody,\n  | 'userLinks'\n  | 'onSignOut'\n  | 'shouldSuppressHonorsAccountLinks'\n  | 'shouldOpenAccountLinksInNewWindow'\n> &\n  Required<Pick<TBrandHeaderBody, 'user'>> & {\n    onClose: () => void;\n  };\n\nconst AccountUserLink = ({\n  url,\n  onClick,\n  children,\n  isNewWindow,\n}: {\n  url: string;\n  onClick: () => void;\n  children: React.ReactNode;\n  isNewWindow?: boolean;\n}) => {\n  return (\n    <Link\n      anchorClassName={cx(\n        'block border-border px-6 py-2',\n        'brand-ey:border-primary-alt brand-ey:hover:bg-tertiary-alt brand-ey:focus:bg-tertiary-alt',\n        'brand-hi-refresh:hover:bg-bg-light brand-hi-refresh:focus:bg-bg-light',\n        'brand-lx:hover:bg-bg-light brand-lx:focus:bg-bg-light',\n        'brand-ou:border-primary brand-ou:hover:bg-bg-light brand-ou:focus:bg-bg-light'\n      )}\n      className=\"font-bold text-text brand-ey:font-normal brand-gu:font-mono brand-gu:font-normal brand-hi-refresh:font-normal brand-nd:font-mono brand-nd:font-medium\"\n      underline={false}\n      url={url}\n      onClick={onClick}\n      isNewWindow={isNewWindow}\n    >\n      {children}\n    </Link>\n  );\n};\n\nconst AccountSection = ({\n  user,\n  userLinks,\n  onClose,\n  onSignOut,\n  shouldSuppressHonorsAccountLinks,\n  shouldOpenAccountLinksInNewWindow,\n}: TAccountSection) => {\n  const { locale = 'en' } = useRouter();\n\n  const { t } = useTranslation('osc-header');\n  const formattedHonorsPointsTotal = getLocaleFormattedNumber(user.honorsPoints, { locale });\n\n  return (\n    <FocusLock returnFocus>\n      <div className=\"relative mb-2 border-b border-border px-4 py-3 brand-ey:border-primary-alt brand-ou:border-primary\">\n        <button onClick={onClose} type=\"button\" className=\"px-2\">\n          <Icon name=\"close\" size=\"md\" className=\"m-auto\" />\n          <span className=\"text-xs font-semibold brand-ey:font-normal brand-wa:font-normal\">\n            {t('close')}\n            <span className=\"sr-only\">{t('closeAccountDetails')}</span>\n          </span>\n        </button>\n      </div>\n      <div className=\"flex\">\n        <div className=\"px-4\">\n          <div className=\"flex size-12 items-center justify-center rounded-full bg-hilton-alt p-2\">\n            <Icon name=\"user\" size=\"xl\" />\n          </div>\n        </div>\n        <div className=\"font-bold brand-ey:font-normal brand-gu:font-mono brand-gu:font-normal brand-hi-refresh:font-normal brand-nd:font-mono brand-nd:font-medium\">\n          <span>{t('greetings', { username: user.name })}</span>\n          <div className=\"capitalize\">\n            <span className=\"underline\">{user.honorsTier}</span> {t('status')}\n          </div>\n          <div>{t('honorsPointsTotal', { honorsPointsTotal: formattedHonorsPointsTotal })}</div>\n          {user.hhonorsNumber ? (\n            <div>{t('hiltonHonorsNumber', { hhonorsNumber: user.hhonorsNumber })}</div>\n          ) : null}\n        </div>\n      </div>\n      <div className=\"mt-4 divide-y divide-solid border-y border-border brand-ey:border-primary-alt brand-ou:border-primary\">\n        {userLinks?.accountLink?.url ? (\n          <AccountUserLink\n            url={userLinks.accountLink.url}\n            onClick={() => {\n              trackNavClick('gh_membername_hiltonhonorshome');\n            }}\n            isNewWindow={shouldOpenAccountLinksInNewWindow}\n          >\n            {t('hiltonHonorsHome')}\n          </AccountUserLink>\n        ) : null}\n        {userLinks?.honorsProfileLink?.url ? (\n          <AccountUserLink\n            url={userLinks.honorsProfileLink.url}\n            onClick={() => {\n              trackNavClick('gh_membername_hiltonhonorsprofile');\n            }}\n            isNewWindow={shouldOpenAccountLinksInNewWindow}\n          >\n            {t('profile')}\n          </AccountUserLink>\n        ) : null}\n\n        {userLinks?.honorsActivityLink?.url && !shouldSuppressHonorsAccountLinks ? (\n          <AccountUserLink\n            url={userLinks.honorsActivityLink.url}\n            onClick={() => {\n              trackNavClick('gh_membername_hiltonhonorsactivity');\n            }}\n            isNewWindow={shouldOpenAccountLinksInNewWindow}\n          >\n            {t('activity')}\n          </AccountUserLink>\n        ) : null}\n\n        {userLinks?.honorsPointsLink?.url && !shouldSuppressHonorsAccountLinks ? (\n          <AccountUserLink\n            url={userLinks.honorsPointsLink.url}\n            onClick={() => {\n              trackNavClick('gh_membername_hiltonhonorspoints');\n            }}\n            isNewWindow={shouldOpenAccountLinksInNewWindow}\n          >\n            {t('pointsLabel')}\n          </AccountUserLink>\n        ) : null}\n\n        {userLinks?.goHiltonLink?.url ? (\n          <AccountUserLink\n            url={userLinks.goHiltonLink.url}\n            onClick={() => {\n              trackNavClick('gh_membername_gohiltonprogramdetails');\n            }}\n            isNewWindow={shouldOpenAccountLinksInNewWindow}\n          >\n            {t('goHiltonProgramDetails')}\n          </AccountUserLink>\n        ) : null}\n\n        {userLinks?.friendsAndFamilyLink?.url ? (\n          <AccountUserLink\n            url={userLinks.friendsAndFamilyLink.url}\n            onClick={() => {\n              trackNavClick('gh_membername_managefriendsandfamily');\n            }}\n            isNewWindow={shouldOpenAccountLinksInNewWindow}\n          >\n            {t('manageFriendsAndFamily')}\n          </AccountUserLink>\n        ) : null}\n\n        {userLinks?.hgvMaxLink?.url ? (\n          <AccountUserLink\n            url={userLinks.hgvMaxLink.url}\n            onClick={() => {\n              trackNavClick('gh_membername_hgvmaxratedetails');\n            }}\n            isNewWindow={shouldOpenAccountLinksInNewWindow}\n          >\n            {t('hgvMaxRateDetails')}\n          </AccountUserLink>\n        ) : null}\n\n        {userLinks?.smbMemberLink?.url ? (\n          <AccountUserLink\n            url={userLinks.smbMemberLink.url}\n            onClick={() => {\n              trackNavClick('gh_membername_managehiltonforbusiness');\n            }}\n            isNewWindow={shouldOpenAccountLinksInNewWindow}\n          >\n            {t('manageHiltonForBusiness')}\n          </AccountUserLink>\n        ) : null}\n\n        <button\n          className={cx(\n            'block w-full border-border px-6 py-2 text-left font-bold text-text rtl:text-start',\n            'brand-ey:border-primary-alt brand-ey:font-normal brand-ey:hover:bg-tertiary-alt brand-ey:focus:bg-tertiary-alt',\n            'brand-gu:font-mono brand-gu:font-normal',\n            'brand-hi-refresh:font-normal brand-hi-refresh:hover:bg-bg-light brand-hi-refresh:focus:bg-bg-light',\n            'brand-lx:hover:bg-bg-light brand-lx:focus:bg-bg-light',\n            'brand-nd:font-mono brand-nd:font-medium',\n            'brand-ou:border-primary brand-ou:hover:bg-bg-light brand-ou:focus:bg-bg-light'\n          )}\n          onClick={async () => {\n            trackNavClick('gh_membername_signout');\n            onClose();\n            await onSignOut();\n          }}\n          type=\"button\"\n        >\n          {t('signOut')}\n        </button>\n      </div>\n    </FocusLock>\n  );\n};\n","import type * as React from 'react';\nimport cx from 'classnames';\nimport Icon from '@dx-ui/osc-icon';\nimport type { IconProps } from '@dx-ui/osc-icon';\n\nexport type BannerNotificationProps = {\n  /** Content to be displayed in banner notification. */\n  children: React.ReactNode;\n  /** The status to be use. */\n  status: 'error' | 'success' | 'normal';\n  customIcon?: IconProps;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nconst STATUS_ROLE_MAPPER = Object.freeze({\n  error: 'assertive',\n  success: 'polite',\n  normal: 'polite',\n});\n\n/**\n * Displays a banner notification message with an icon.\n */\nexport const BannerNotification = ({\n  status,\n  children,\n  className,\n  customIcon,\n  ...rest\n}: BannerNotificationProps) => {\n  return (\n    <div\n      className={cx(\n        'flex w-full items-center gap-x-2 p-4 sm:px-6',\n        {\n          'bg-danger-alt text-danger': status === 'error',\n          'bg-success-alt text-success': status === 'success',\n          'bg-bg-alt text-bg-inverse': status === 'normal',\n        },\n        className\n      )}\n      aria-live={STATUS_ROLE_MAPPER[status]}\n      aria-atomic={true}\n      data-testid=\"bannerNotification\"\n      {...rest}\n    >\n      {customIcon ? (\n        <Icon {...customIcon} />\n      ) : (\n        <>\n          {status === 'error' && <Icon name=\"close-circle\" variant=\"solid\" />}\n          {status === 'success' && <Icon name=\"check-circle\" variant=\"solid\" />}\n        </>\n      )}\n      {children}\n    </div>\n  );\n};\n","export * from './lib/banner-notification';\n","import type * as Types from './types';\n\nimport {\n  useQuery,\n  useMutation,\n  type QueryClient,\n  type FetchQueryOptions,\n  type UseQueryOptions,\n  type UseMutationOptions,\n} from '@tanstack/react-query';\nimport type { DXError } from '@dx-ui/types-graphql';\n\nexport const Countries_AddressOptionsDocument = {\n  operationName: 'countries_AddressOptions',\n  operationString: `query countries_AddressOptions($language: String!, $code: String, $type: AddressOptionsAddressType) {\n  countries(language: $language, filter: {code: $code}) {\n    code\n    name\n    addressOptions(type: $type) {\n      name\n      label\n      maxLength\n      required\n    }\n    states(sort: {by: name, order: asc}) {\n      value: code\n      name\n    }\n    enrollmentConfig {\n      isPostalCodeLookupEnabled\n      isShortenedEnrollmentEnabled\n      addressOptions {\n        disabled\n        label\n        maxLength\n        name\n        readOnly\n        required\n        selected\n        type\n        value\n      }\n    }\n  }\n}`,\n  originalOpName: 'countries_AddressOptions',\n};\nexport function useCountries_AddressOptionsQuery<\n  TData = Types.Countries_AddressOptionsQuery,\n  TError = DXError\n>(\n  variables: Types.Countries_AddressOptionsQueryVariables,\n  options?: Omit<UseQueryOptions<Types.Countries_AddressOptionsQuery, TError, TData>, 'queryKey'>\n) {\n  return useQuery<Types.Countries_AddressOptionsQuery, TError, TData>({\n    queryKey: [Countries_AddressOptionsDocument, variables],\n    ...options,\n  });\n}\nexport function serverSideCountries_AddressOptionsQuery(\n  queryClient: QueryClient,\n  variables: Types.Countries_AddressOptionsQueryVariables,\n  options?: FetchQueryOptions<Types.Countries_AddressOptionsQuery>\n) {\n  return queryClient.fetchQuery<Types.Countries_AddressOptionsQuery>({\n    queryKey: [Countries_AddressOptionsDocument, variables],\n    ...options,\n  });\n}\n\nexport const GeocodeDocument = {\n  operationName: 'geocode',\n  operationString: `query geocode($postalCode: String, $language: String!) {\n  geocode(language: $language, postalCode: $postalCode) {\n    match {\n      address {\n        city\n        state\n      }\n    }\n  }\n}`,\n  originalOpName: 'geocode',\n};\nexport function useGeocodeQuery<TData = Types.GeocodeQuery, TError = DXError>(\n  variables: Types.GeocodeQueryVariables,\n  options?: Omit<UseQueryOptions<Types.GeocodeQuery, TError, TData>, 'queryKey'>\n) {\n  return useQuery<Types.GeocodeQuery, TError, TData>({\n    queryKey: [GeocodeDocument, variables],\n    ...options,\n  });\n}\nexport function serverSideGeocodeQuery(\n  queryClient: QueryClient,\n  variables: Types.GeocodeQueryVariables,\n  options?: FetchQueryOptions<Types.GeocodeQuery>\n) {\n  return queryClient.fetchQuery<Types.GeocodeQuery>({\n    queryKey: [GeocodeDocument, variables],\n    ...options,\n  });\n}\n\nexport const FeatureTogglesDocument = {\n  operationName: 'featureToggles',\n  operationString: `query featureToggles($names: [String!]!) {\n  featureToggles(names: $names) {\n    enabled\n    name\n  }\n}`,\n  originalOpName: 'featureToggles',\n};\nexport function useFeatureTogglesQuery<TData = Types.FeatureTogglesQuery, TError = DXError>(\n  variables: Types.FeatureTogglesQueryVariables,\n  options?: Omit<UseQueryOptions<Types.FeatureTogglesQuery, TError, TData>, 'queryKey'>\n) {\n  return useQuery<Types.FeatureTogglesQuery, TError, TData>({\n    queryKey: [FeatureTogglesDocument, variables],\n    ...options,\n  });\n}\nexport function serverSideFeatureTogglesQuery(\n  queryClient: QueryClient,\n  variables: Types.FeatureTogglesQueryVariables,\n  options?: FetchQueryOptions<Types.FeatureTogglesQuery>\n) {\n  return queryClient.fetchQuery<Types.FeatureTogglesQuery>({\n    queryKey: [FeatureTogglesDocument, variables],\n    ...options,\n  });\n}\n\nexport const Brand_CountriesDocument = {\n  operationName: 'brand_countries',\n  operationString: `query brand_countries($after: String, $containsHotels: Boolean, $first: Int, $language: String!, $countryFilter: CountryFilterInput, $regionFilter: CountryStateFilterInput, $cityFilter: CountryCityFilterInput, $getStates: Boolean = false, $getCities: Boolean = false, $getMarketing: Boolean = false, $getCCSMarketing: Boolean = false) {\n  countries(\n    after: $after\n    containsHotels: $containsHotels\n    filter: $countryFilter\n    first: $first\n    language: $language\n    sort: {by: name}\n  ) {\n    code\n    callingCode\n    dataSubjectRights\n    marketingConsent @include(if: $getMarketing)\n    marketingOptIn @include(if: $getMarketing)\n    marketingOptInForHGV @include(if: $getMarketing)\n    marketingOptin @include(if: $getCCSMarketing) {\n      dataSubjectRights\n      marketingOptinRules {\n        category\n        optIns {\n          autoOptIn\n          _id\n          customerTextExternal\n          name\n          subscriptionCodes\n          termsAndConditionsBook\n          termsAndConditionsJoin\n        }\n      }\n    }\n    name: displayName\n    states(filter: $regionFilter) @include(if: $getStates) {\n      name\n      code\n      personalDataRequest\n      value: code\n      cities(filter: $cityFilter, sort: {by: name, order: asc}) @include(if: $getCities) {\n        name\n        value: name\n        brandCodes\n      }\n    }\n    cities(filter: $cityFilter, onlyIfNoStates: true, sort: {by: name, order: asc}) @include(if: $getCities) {\n      name\n      value: name\n      brandCodes\n    }\n  }\n}`,\n  originalOpName: 'brand_countries',\n};\nexport function useBrand_CountriesQuery<TData = Types.Brand_CountriesQuery, TError = DXError>(\n  variables: Types.Brand_CountriesQueryVariables,\n  options?: Omit<UseQueryOptions<Types.Brand_CountriesQuery, TError, TData>, 'queryKey'>\n) {\n  return useQuery<Types.Brand_CountriesQuery, TError, TData>({\n    queryKey: [Brand_CountriesDocument, variables],\n    ...options,\n  });\n}\nexport function serverSideBrand_CountriesQuery(\n  queryClient: QueryClient,\n  variables: Types.Brand_CountriesQueryVariables,\n  options?: FetchQueryOptions<Types.Brand_CountriesQuery>\n) {\n  return queryClient.fetchQuery<Types.Brand_CountriesQuery>({\n    queryKey: [Brand_CountriesDocument, variables],\n    ...options,\n  });\n}\n\nexport const CreateGuestDocument = {\n  operationName: 'createGuest',\n  operationString: `mutation createGuest($input: EnrollInput!, $language: String!, $recaptchaInput: RecaptchaInput) {\n  createGuest(input: $input, language: $language, recaptchaInput: $recaptchaInput) {\n    data {\n      guestId\n      hhonorsNumber\n    }\n    error {\n      code\n      context\n      message\n      notifications {\n        code\n        fields\n        message\n      }\n    }\n  }\n}`,\n  originalOpName: 'createGuest',\n};\nexport function useCreateGuestMutation<TError = DXError, TContext = unknown>(\n  options: UseMutationOptions<\n    Types.CreateGuestMutation,\n    TError,\n    [typeof CreateGuestDocument, Types.CreateGuestMutationVariables],\n    TContext\n  > = {}\n) {\n  return useMutation<\n    Types.CreateGuestMutation,\n    TError,\n    [typeof CreateGuestDocument, Types.CreateGuestMutationVariables],\n    TContext\n  >({\n    ...options,\n  });\n}\nexport const Languages_DefaultCountryCodeDocument = {\n  operationName: 'languages_defaultCountryCode',\n  operationString: `query languages_defaultCountryCode($language: String!) {\n  languages(language: $language, filter: {languageCodeOHW: $language}) {\n    defaultCountryCode\n  }\n}`,\n  originalOpName: 'languages_defaultCountryCode',\n};\nexport function useLanguages_DefaultCountryCodeQuery<\n  TData = Types.Languages_DefaultCountryCodeQuery,\n  TError = DXError\n>(\n  variables: Types.Languages_DefaultCountryCodeQueryVariables,\n  options?: Omit<\n    UseQueryOptions<Types.Languages_DefaultCountryCodeQuery, TError, TData>,\n    'queryKey'\n  >\n) {\n  return useQuery<Types.Languages_DefaultCountryCodeQuery, TError, TData>({\n    queryKey: [Languages_DefaultCountryCodeDocument, variables],\n    ...options,\n  });\n}\nexport function serverSideLanguages_DefaultCountryCodeQuery(\n  queryClient: QueryClient,\n  variables: Types.Languages_DefaultCountryCodeQueryVariables,\n  options?: FetchQueryOptions<Types.Languages_DefaultCountryCodeQuery>\n) {\n  return queryClient.fetchQuery<Types.Languages_DefaultCountryCodeQuery>({\n    queryKey: [Languages_DefaultCountryCodeDocument, variables],\n    ...options,\n  });\n}\n","export const AutoComplete = {\n  ADDRESSLINE1: 'address-line1',\n  ADDRESSLINE2: 'address-line2',\n  CITY: 'address-level2',\n  COUNTRY: 'country',\n  CURRENTPASSWORD: 'current-password',\n  EMAIL: 'email',\n  FAMILYNAME: 'family-name',\n  GIVENNAME: 'given-name',\n  NAME: 'name',\n  NEWPASSWORD: 'new-password',\n  OFF: 'off',\n  POSTALCODE: 'postal-code',\n  STATE: 'address-level1',\n  STREETADDRESS: 'street-address',\n  TEL: 'tel',\n  TELNATIONAL: 'tel-national',\n  USERNAME: 'username',\n  CREDITCARD: 'cc-number',\n} as const;\n","export const ENABLE_SHORTEN_ENROLLMENT = 'NHCGUEST-8086';\n","import { getIsFeatureToggleEnabled } from '@dx-ui/utilities-feature-toggles-configs';\nimport { useFeatureTogglesQuery } from '../queries/generated/queries';\nimport { ENABLE_SHORTEN_ENROLLMENT } from '../constants/featureToggles';\n\nexport function useShortenEnrollmentToggle() {\n  const { data } = useFeatureTogglesQuery({\n    names: [ENABLE_SHORTEN_ENROLLMENT],\n  });\n\n  return {\n    enabled: getIsFeatureToggleEnabled({\n      featureToggleData: data,\n      name: ENABLE_SHORTEN_ENROLLMENT,\n    }),\n  };\n}\n","import { useFormContext } from 'react-hook-form';\nimport { FormInput, FormSelect } from '@dx-ui/osc-form';\nimport { useCountries_AddressOptionsQuery, useGeocodeQuery } from './queries/generated/queries';\nimport type { AddressOptionsAddressType } from '@dx-ui/gql-types';\nimport { useCallback, useState, useEffect } from 'react';\nimport { useTranslation } from 'next-i18next';\nimport { AutoComplete } from './auto-complete';\nimport { useShortenEnrollmentToggle } from './hooks/use-disable-addresses-toggle';\n\nconst getAutoComplete = (name: string) => {\n  switch (name) {\n    case 'addressLine1':\n    case 'businessAddressLine1':\n      return AutoComplete.ADDRESSLINE1;\n    case 'addressLine2':\n    case 'businessAddressLine2':\n      return AutoComplete.ADDRESSLINE2;\n    case 'city':\n      return AutoComplete.CITY;\n    case 'state':\n      return AutoComplete.STATE;\n    case 'postalCode':\n      return AutoComplete.POSTALCODE;\n    default:\n      return '';\n  }\n};\n\nexport const Modes = {\n  Add: 'add',\n  Edit: 'edit',\n} as const;\n\nexport type ModesType = (typeof Modes)[keyof typeof Modes];\n\nexport function AddressFields({\n  code = 'US',\n  language = 'en',\n  type = 'nonBusiness',\n  groupName,\n  componentState = Modes.Add,\n  setLoadingGeocode,\n}: {\n  code: string;\n  groupName?: string;\n  language?: string;\n  type?: AddressOptionsAddressType;\n  componentState?: ModesType;\n  setLoadingGeocode?: React.Dispatch<React.SetStateAction<boolean>>;\n}) {\n  const [t] = useTranslation('osc-join-form-form');\n  const {\n    setError,\n    clearErrors,\n    setValue,\n    watch,\n    formState: { touchedFields },\n    register,\n    getFieldState,\n  } = useFormContext();\n\n  const [isZipInvalid, setIsZipInvalid] = useState(false);\n\n  const enableShortenEnrollmentFlowToggle = useShortenEnrollmentToggle().enabled;\n\n  const shouldHideCityAndStateFields =\n    code === 'US' && !isZipInvalid && componentState === Modes.Add;\n\n  const getFieldKey = useCallback(\n    (field: string): string => (groupName ? `${groupName}.${field}` : field),\n    [groupName]\n  );\n\n  const isPostalCodeTouched = getFieldState(getFieldKey('postalCode'))?.isTouched;\n\n  const zipCode = watch(getFieldKey('postalCode'));\n  const city = watch(getFieldKey('city'));\n  const state = watch(getFieldKey('state'));\n\n  const { data: addressFieldData } = useCountries_AddressOptionsQuery(\n    { language, code, type },\n    { enabled: !!code }\n  );\n  const states = addressFieldData?.countries?.[0]?.states || [];\n  const enrollmentConfig = addressFieldData?.countries?.[0]?.enrollmentConfig;\n  const enableShortenEnrollmentFlow =\n    enrollmentConfig?.isShortenedEnrollmentEnabled && enableShortenEnrollmentFlowToggle;\n\n  // Set 'Please select' option as default for state select element\n  useEffect(() => {\n    if (componentState === Modes.Add) {\n      if (!touchedFields[getFieldKey('state')]) {\n        setValue(getFieldKey('state'), states.length > 0 ? 'pleaseSelect' : '');\n      }\n    }\n  }, [getFieldKey, setValue, states, touchedFields, componentState]);\n\n  const {\n    data: geoLocationData,\n    isLoading,\n    error,\n  } = useGeocodeQuery(\n    {\n      language,\n      postalCode: watch(getFieldKey('postalCode')),\n    },\n    {\n      enabled:\n        !!/^(?!0{5,})\\d{5}(-\\d{4})?$/.test(zipCode) &&\n        code === 'US' &&\n        !(componentState === Modes.Edit && !isPostalCodeTouched),\n    }\n  );\n\n  useEffect(() => {\n    if (geoLocationData) {\n      if (\n        !geoLocationData?.geocode?.match?.address?.city ||\n        !geoLocationData?.geocode?.match?.address?.state\n      ) {\n        setIsZipInvalid(true);\n        setValue(getFieldKey('city'), '');\n        setValue(getFieldKey('state'), 'pleaseSelect');\n        setError(getFieldKey('postalCode'), {\n          type: 'validate',\n          message: t('address.zipCode.error_lookup'),\n        });\n      } else {\n        clearErrors(getFieldKey('postalCode'));\n        clearErrors(getFieldKey('city'));\n        setValue(getFieldKey('city'), geoLocationData?.geocode?.match?.address?.city);\n        setValue(getFieldKey('state'), geoLocationData?.geocode?.match?.address?.state);\n        setIsZipInvalid(false);\n      }\n    } else if (error) {\n      const errors = JSON.parse(JSON.stringify(error));\n      for (const error of errors.graphQLErrors) {\n        if (error?.message === 'Not Found') {\n          setIsZipInvalid(true);\n          setValue(getFieldKey('city'), '');\n          setValue(getFieldKey('state'), 'pleaseSelect');\n          setError(getFieldKey('postalCode'), {\n            type: 'validate',\n            message: t('address.zipCode.error_lookup'),\n          });\n        }\n      }\n    }\n  }, [geoLocationData, setValue, getFieldKey, setError, t, clearErrors, error]);\n\n  useEffect(() => {\n    // set state to enable/ disable submit button depending on geocode query\n    if (setLoadingGeocode) {\n      if (isLoading) setLoadingGeocode(true);\n      else setLoadingGeocode(false);\n    }\n  }, [isLoading, setLoadingGeocode]);\n\n  const fields = addressFieldData?.countries?.[0]?.addressOptions;\n  if (!fields || !/^\\w{2}$/.test(code)) {\n    return null;\n  }\n\n  return (\n    <>\n      {fields.map(({ name, label, required }) => {\n        if (shouldHideCityAndStateFields && (name === 'state' || name === 'city')) {\n          return <input key={getFieldKey(name)} type=\"hidden\" {...register(getFieldKey(name))} />;\n        }\n\n        if (name === 'state' && states.length > 0) {\n          return (\n            <FormSelect\n              label={label}\n              labelClassName=\"w-full\"\n              name={getFieldKey(name)}\n              key={getFieldKey(name)}\n              autoComplete={AutoComplete.STATE}\n              optional={!required}\n              registerOptions={{\n                validate: (value) => {\n                  if (!required) {\n                    return true;\n                  }\n                  return value === 'pleaseSelect' || !value\n                    ? code === 'US'\n                      ? t('address.state.error')\n                      : t('address.province.error')\n                    : true;\n                },\n              }}\n            >\n              <option disabled hidden value=\"pleaseSelect\">\n                {t('pleaseSelect')}\n              </option>\n              {states.map((state) => (\n                <option value={state.value} key={state.value}>\n                  {state.name}\n                </option>\n              ))}\n            </FormSelect>\n          );\n        }\n\n        if (enableShortenEnrollmentFlow) {\n          return enrollmentConfig?.addressOptions?.some((option) => option.name === name) ? (\n            <FormInput\n              label={label}\n              labelClassName=\"w-full flex-grow\"\n              name={getFieldKey(name)}\n              autoComplete={getAutoComplete(name)}\n              loading={name === 'postalCode' && isLoading}\n              optional={!required}\n              key={getFieldKey(name)}\n              registerOptions={{\n                validate: (value: string) => {\n                  if (!required || (!!value && name !== 'postalCode')) {\n                    return true;\n                  }\n                  switch (name) {\n                    case 'addressLine1':\n                    case 'businessAddressLine1':\n                      if (code === 'JP') {\n                        return t('address.district.error');\n                      }\n                      return t('address.addressLine1.error');\n                    case 'state':\n                      return t('address.province.error');\n                    case 'city':\n                      if (code === 'JP') {\n                        return t('address.ward.error');\n                      }\n                      return t('address.city.error');\n                    case 'postalCode':\n                      if (code === 'US') {\n                        if (/^(?!0{5,})\\d{5}(-\\d{4})?$/.test(value)) {\n                          if (type === 'nonBusiness') {\n                            if ((isZipInvalid || !geoLocationData?.geocode) && !state) {\n                              return t('address.zipCode.error_lookup');\n                            }\n                          } else if (\n                            (isZipInvalid || !geoLocationData?.geocode) &&\n                            (!city || !state)\n                          ) {\n                            return t('address.zipCode.error_lookup');\n                          }\n\n                          return true;\n                        }\n                        if (value === '' && !state && type === 'nonBusiness') {\n                          return t('address.zipCode.invalid');\n                        }\n                        return value === ''\n                          ? t('address.zipCode.error')\n                          : t('address.zipCode.invalid');\n                      }\n                      return required && value ? true : t('address.postalCode.error');\n                    default:\n                      if (name === 'businessAddressLine1') return t('address.addressLine1.error');\n                      if (name === 'businessAddressLine2') return t('address.addressLine2.error');\n                      return t(`address.${name}.error` as unknown as TemplateStringsArray);\n                  }\n                },\n              }}\n              {...(name === 'addressLine1' ||\n              name === 'businessAddressLine1' ||\n              name === 'addressLine2' ||\n              name === 'businessAddressLine2' ||\n              name === 'city'\n                ? { maxLength: 35 }\n                : {})}\n            />\n          ) : null;\n        }\n\n        //Non-shortened enrollment flow\n        return (\n          <FormInput\n            label={label}\n            labelClassName=\"w-full flex-grow\"\n            name={getFieldKey(name)}\n            autoComplete={getAutoComplete(name)}\n            loading={name === 'postalCode' && isLoading}\n            optional={!required}\n            key={getFieldKey(name)}\n            registerOptions={{\n              validate: (value: string) => {\n                if (!required || (!!value && name !== 'postalCode')) {\n                  return true;\n                }\n                switch (name) {\n                  case 'addressLine1':\n                  case 'businessAddressLine1':\n                    if (code === 'JP') {\n                      return t('address.district.error');\n                    }\n                    return t('address.addressLine1.error');\n                  case 'state':\n                    return t('address.province.error');\n                  case 'city':\n                    if (code === 'JP') {\n                      return t('address.ward.error');\n                    }\n                    return t('address.city.error');\n                  case 'postalCode':\n                    if (code === 'US') {\n                      if (/^(?!0{5,})\\d{5}(-\\d{4})?$/.test(value)) {\n                        if ((isZipInvalid || !geoLocationData?.geocode) && (!city || !state)) {\n                          return t('address.zipCode.error_lookup');\n                        }\n                        return true;\n                      }\n                      if (value === '' && (!city || !state) && type === 'nonBusiness') {\n                        return t('address.zipCode.invalid');\n                      }\n                      return value === ''\n                        ? t('address.zipCode.error')\n                        : t('address.zipCode.invalid');\n                    }\n                    return required && value ? true : t('address.postalCode.error');\n                  default:\n                    if (name === 'businessAddressLine1') return t('address.addressLine1.error');\n                    if (name === 'businessAddressLine2') return t('address.addressLine2.error');\n                    return t(`address.${name}.error` as unknown as TemplateStringsArray);\n                }\n              },\n            }}\n            {...(name === 'addressLine1' ||\n            name === 'businessAddressLine1' ||\n            name === 'addressLine2' ||\n            name === 'businessAddressLine2' ||\n            name === 'city'\n              ? { maxLength: 35 }\n              : {})}\n          />\n        );\n      })}\n    </>\n  );\n}\n","import { useId } from 'react';\nimport { get, useFormContext } from 'react-hook-form';\nimport { FormErrorIcon, FormLabel } from '@dx-ui/osc-form';\nimport cx from 'classnames';\nimport { useTranslation } from 'next-i18next';\n\nimport type { FormInputBase } from '@dx-ui/osc-form';\nimport type { FieldError } from 'react-hook-form';\nimport type { InputHTMLAttributes } from 'react';\n\ntype FormInputPasswordProps<T> = {\n  passwordCriteriaClassName?: string;\n} & Omit<T, 'name'>;\n\nexport const FormInputPassword: React.FC<\n  React.PropsWithChildren<\n    FormInputBase<FormInputPasswordProps<InputHTMLAttributes<HTMLInputElement>>>\n  >\n> = ({\n  label,\n  name,\n  required,\n  optional,\n  registerOptions,\n  labelClassName,\n  className,\n  containerClassName,\n  passwordCriteriaClassName,\n  ...rest\n}) => {\n  const id = useId();\n  const helperId = `input-helper-${id}`;\n  const [t] = useTranslation('osc-join-form-form');\n  const {\n    register,\n    formState: { errors, touchedFields },\n  } = useFormContext();\n\n  const fieldError: FieldError = get(errors, name);\n  const touchedField = get(touchedFields, name);\n  const hasError = !!fieldError;\n\n  const passRequirements = [\n    { type: 'mustBe', message: t('password.requirements.mustBe') },\n    { type: 'containUpper', message: t('password.requirements.containUpper') },\n    { type: 'containLower', message: t('password.requirements.containLower') },\n    { type: 'containOneNumber', message: t('password.requirements.containOneNumber') },\n  ];\n\n  return (\n    <div className={cx({ [containerClassName as string]: !!containerClassName })}>\n      <FormLabel\n        label={label}\n        required={required}\n        optional={optional}\n        hasError={hasError}\n        className={cx('self-start', {\n          [labelClassName as string]: !!labelClassName,\n        })}\n      >\n        <input\n          {...rest}\n          className={cx('form-input', {\n            [className as string]: !!className,\n            'form-error': hasError,\n          })}\n          aria-invalid={hasError}\n          aria-describedby={helperId}\n          {...register(name, {\n            validate: {\n              required: (value: string) =>\n                /^(?=.*[A-Z])(?=.*[a-z])((?=.*[0-9])|(?=.*[#?!@$%^&*-])).{8,32}$/.test(value) ||\n                t('password.error'),\n              mustBe: (value: string) => /.{8,32}/.test(value) || t('password.requirements.mustBe'),\n              containUpper: (value: string) =>\n                /(?=.*[A-Z])/.test(value) || t('password.requirements.containUpper'),\n              containLower: (value: string) =>\n                /(?=.*[a-z])/.test(value) || t('password.requirements.containLower'),\n              containOneNumber: (value: string) =>\n                /(?=.*[0-9])|(?=.*[#?!@$%^&*-])/.test(value) ||\n                t('password.requirements.containOneNumber'),\n            },\n            ...registerOptions,\n          })}\n        />\n      </FormLabel>\n      <ul\n        id={helperId}\n        className={cx('mt-2 grid gap-2 text-sm md:grid-cols-2', {\n          [passwordCriteriaClassName as string]: !!passwordCriteriaClassName,\n        })}\n      >\n        {passRequirements.map(({ message, type }) => {\n          const hasRequirementError = fieldError?.types?.[type];\n          return (\n            <li\n              key={`passRequirement-${type}`}\n              className={cx('flex items-center space-x-2 rtl:space-x-reverse', {\n                'text-danger': hasRequirementError,\n                'text-success': !hasRequirementError && touchedField,\n              })}\n            >\n              {hasRequirementError && <FormErrorIcon className=\"mt-0.5 shrink-0\" />}\n              {!hasRequirementError && !touchedField && (\n                <svg\n                  role=\"img\"\n                  aria-hidden\n                  viewBox=\"-2 0 8 8\"\n                  height=\"16\"\n                  width=\"16\"\n                  className=\"mt-0.5 shrink-0\"\n                >\n                  <circle cx=\"4\" cy=\"4\" r=\"1\" fill=\"#1D1D1D\" />\n                </svg>\n              )}\n              {!hasRequirementError && touchedField && (\n                <svg\n                  role=\"img\"\n                  aria-hidden\n                  viewBox=\"0 -1 8 7\"\n                  width=\"16\"\n                  height=\"16\"\n                  className=\"mt-0.5 shrink-0\"\n                >\n                  <path\n                    d=\"M1 3l2 2 4-5\"\n                    stroke=\"#1A9448\"\n                    fill=\"none\"\n                    fillRule=\"evenodd\"\n                    strokeLinecap=\"round\"\n                    strokeLinejoin=\"round\"\n                  />\n                </svg>\n              )}\n              <span>{message}</span>\n            </li>\n          );\n        })}\n      </ul>\n    </div>\n  );\n};\n","export const email =\n  /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z0-9-]{2,}$/;\nexport const phone = /^[0-9-()\\s]{7,15}$/;\nexport const postalCode =\n  /^(?!0{5,})(?:[ \\x2D0-9A-Za-z\\xA0\\xAA\\xB2\\xB3\\xB5\\xB9\\xBA\\xBC-\\xBE\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u0660-\\u0669\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07C0-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0966-\\u096F\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09E6-\\u09F1\\u09F4-\\u09F9\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A6F\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AE6-\\u0AEF\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71-\\u0B77\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0BE6-\\u0BF2\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D58-\\u0D61\\u0D66-\\u0D78\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DE6-\\u0DEF\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F20-\\u0F33\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F-\\u1049\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u1090-\\u1099\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1369-\\u137C\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B50-\\u1B59\\u1B83-\\u1BA0\\u1BAE-\\u1BE5\\u1C00-\\u1C23\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2000-\\u200A\\u202F\\u205F\\u2070\\u2071\\u2074-\\u2079\\u207F-\\u2089\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2150-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2CFD\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3000\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u3192-\\u3195\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA830-\\uA835\\uA840-\\uA873\\uA882-\\uA8B3\\uA8D0-\\uA8D9\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA900-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF-\\uA9D9\\uA9E0-\\uA9E4\\uA9E6-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD07-\\uDD33\\uDD40-\\uDD78\\uDD8A\\uDD8B\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE1-\\uDEFB\\uDF00-\\uDF23\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC58-\\uDC76\\uDC79-\\uDC9E\\uDCA7-\\uDCAF\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDCFB-\\uDD1B\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBC-\\uDDCF\\uDDD2-\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE40-\\uDE48\\uDE60-\\uDE7E\\uDE80-\\uDE9F\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDEEB-\\uDEEF\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF58-\\uDF72\\uDF78-\\uDF91\\uDFA9-\\uDFAF]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDCFA-\\uDD23\\uDD30-\\uDD39\\uDE60-\\uDE7E\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF27\\uDF30-\\uDF45\\uDF51-\\uDF54\\uDF70-\\uDF81\\uDFB0-\\uDFCB\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC52-\\uDC6F\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD03-\\uDD26\\uDD36-\\uDD3F\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDD0-\\uDDDA\\uDDDC\\uDDE1-\\uDDF4\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDEF0-\\uDEF9\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC50-\\uDC59\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEAA\\uDEB8\\uDEC0-\\uDEC9\\uDF00-\\uDF1A\\uDF30-\\uDF3B\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCF2\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDD50-\\uDD59\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC50-\\uDC6C\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD50-\\uDD59\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDDA0-\\uDDA9\\uDEE0-\\uDEF2\\uDFB0\\uDFC0-\\uDFD4]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDE70-\\uDEBE\\uDEC0-\\uDEC9\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF5B-\\uDF61\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE96\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD834[\\uDEE0-\\uDEF3\\uDF60-\\uDF78]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD40-\\uDD49\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB\\uDEF0-\\uDEF9]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDCC7-\\uDCCF\\uDD00-\\uDD43\\uDD4B\\uDD50-\\uDD59]|\\uD83B[\\uDC71-\\uDCAB\\uDCAD-\\uDCAF\\uDCB1-\\uDCB4\\uDD01-\\uDD2D\\uDD2F-\\uDD3D\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD83C[\\uDD00-\\uDD0C]|\\uD83E[\\uDFF0-\\uDFF9]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A]){2,10}$/;\nexport const country = /^[A-Z]{2}$/;\n","import { FormError, FormHelpMessage, FormLabel } from '@dx-ui/osc-form';\nimport cx from 'classnames';\nimport { useTranslation } from 'next-i18next';\nimport { useId, useMemo } from 'react';\nimport { get, useFormContext } from 'react-hook-form';\n\nimport { AutoComplete } from './auto-complete';\nimport { phone } from './form-validation-regex';\n\nimport type { FieldError } from 'react-hook-form';\nimport type { Brand_CountriesQuery } from './queries/generated/types';\n\ntype Options = Brand_CountriesQuery['countries'][number];\n\ntype Props = {\n  containerClassName?: string;\n  classname?: string;\n  defaultValue?: string;\n  label?: string;\n  labelClassName?: string;\n  loading?: boolean;\n  options: Options[];\n  required?: boolean;\n  personalInformationPage?: boolean;\n  name?: string;\n  addDefaultOption?: boolean;\n  isDisabled?: boolean;\n  phoneCountryError?: string;\n};\n\nexport const FormInputPhone: React.FC<React.PropsWithChildren<Props>> = ({\n  required,\n  options,\n  containerClassName,\n  classname,\n  labelClassName,\n  defaultValue,\n  label,\n  loading,\n  personalInformationPage,\n  name = 'phone',\n  addDefaultOption,\n  isDisabled,\n  phoneCountryError,\n}) => {\n  const id = useId();\n  const helperId = `input-helper-${id}`;\n  const helperPhoneId = `input-helper-phone-${id}`;\n  const errorId = `input-error-${id}`;\n  const [t] = useTranslation('osc-join-form-form');\n  const {\n    register,\n    formState: { errors },\n  } = useFormContext();\n\n  const phoneNumberFieldError: FieldError = get(errors, `${name}.phoneNumber`);\n  const phoneCountryFieldError: FieldError = get(errors, `${name}.phoneCountry`);\n  const hasError = !!phoneNumberFieldError || !!phoneCountryFieldError;\n\n  const getOptions = useMemo(\n    () =>\n      options?.map(({ name, code, callingCode }) => (\n        <option\n          key={`option-${code}`}\n          value={`${callingCode}${code}`}\n          {...(`${callingCode}${code}` === defaultValue ? { selected: true } : {})}\n        >{`+${callingCode} ${name}`}</option>\n      )),\n    [defaultValue, options]\n  );\n\n  return (\n    <div\n      className={cx({\n        [containerClassName as string]: !!containerClassName,\n      })}\n    >\n      <div\n        className={cx('flex flex-col gap-y-4', {\n          'lg:hidden': personalInformationPage,\n          hidden: !personalInformationPage,\n        })}\n      >\n        <FormLabel\n          label={t('phone.phoneCountryLabel')}\n          required={required}\n          hasError={!!phoneCountryFieldError}\n          className={cx({\n            [labelClassName as string]: !!labelClassName,\n          })}\n        >\n          <span className={cx('flex flex-col gap-y-4')}>\n            <select\n              defaultValue={defaultValue}\n              autoComplete={AutoComplete.COUNTRY}\n              className={cx('form-select w-1/3 overflow-hidden focus:relative focus:z-0', {\n                'w-1/3': !personalInformationPage,\n                'w-full lg:w-1/3': personalInformationPage,\n                'form-error': !!phoneCountryFieldError,\n                disabled: loading,\n                [classname as string]: !!classname,\n              })}\n              disabled={loading}\n              data-testid=\"phone.phoneCountry\"\n              aria-invalid={!!phoneCountryFieldError}\n              aria-describedby={helperId}\n              {...register(`${name}.phoneCountry`, {\n                required: { value: true, message: t('phone.phoneCountryError') },\n              })}\n            >\n              {addDefaultOption ? (\n                <option key=\"selectCountry\" value=\"\" disabled>\n                  {t('phone.phoneCountrySelectOption')}\n                </option>\n              ) : null}\n\n              {options?.map(({ name, code, callingCode }) => (\n                <option\n                  key={`option-${code}`}\n                  value={`${callingCode}${code}`}\n                >{`+${callingCode} ${name}`}</option>\n              ))}\n            </select>\n          </span>\n        </FormLabel>\n        {phoneCountryFieldError && <FormError id={errorId} error={phoneCountryFieldError} />}\n\n        <FormLabel\n          label={label || t('phone.label')}\n          required={required}\n          hasError={!!phoneNumberFieldError}\n          className={cx({\n            [labelClassName as string]: !!labelClassName,\n          })}\n        >\n          <span className={cx('flex flex-col gap-y-4 lg:flex-row')}>\n            <input\n              autoComplete={AutoComplete.TEL}\n              type=\"tel\"\n              className={cx('form-input -ml-0.5 -mt-2 flex-1 focus:relative focus:z-0 lg:mt-0', {\n                'form-error': !!phoneNumberFieldError,\n                [classname as string]: !!classname,\n              })}\n              aria-invalid={!!phoneNumberFieldError}\n              aria-describedby={`${errorId} ${helperId}`}\n              data-testid=\"phone.phoneNumber\"\n              maxLength={15}\n              {...register(`${name}.phoneNumber`, {\n                required: { value: true, message: t('phone.phoneNumberError') },\n                pattern: { value: phone, message: t('phone.phoneNumberError') },\n              })}\n            />\n          </span>\n        </FormLabel>\n        {phoneNumberFieldError && <FormError id={errorId} error={phoneNumberFieldError} />}\n        <FormHelpMessage id={helperId} loading={loading} />\n      </div>\n      <div className={cx({ 'hidden lg:block': personalInformationPage })}>\n        <FormLabel\n          label={label || t('phone.label')}\n          required={required}\n          hasError={hasError}\n          className={cx({\n            [labelClassName as string]: !!labelClassName,\n          })}\n        >\n          <span\n            className={cx('flex', {\n              'flex-row': !personalInformationPage,\n              'flex-col lg:flex-row gap-y-4': personalInformationPage,\n            })}\n          >\n            <select\n              defaultValue={defaultValue}\n              autoComplete={AutoComplete.COUNTRY}\n              className={cx('form-select w-1/3 overflow-hidden focus:relative focus:z-0', {\n                'w-1/3': !personalInformationPage,\n                'w-full lg:w-1/3': personalInformationPage,\n                'form-error': !!phoneCountryFieldError,\n                disabled: loading || isDisabled,\n                [classname as string]: !!classname,\n              })}\n              disabled={loading || isDisabled}\n              data-testid=\"phone.phoneCountry\"\n              aria-invalid={!!phoneCountryFieldError}\n              aria-describedby={helperId}\n              {...register(`${name}.phoneCountry`, {\n                required: {\n                  value: true,\n                  message: phoneCountryError ? phoneCountryError : t('phone.phoneCountryError'),\n                },\n              })}\n            >\n              {addDefaultOption ? (\n                <option key=\"selectCountry\" value=\"\" disabled>\n                  {t('phone.phoneCountrySelectOption')}\n                </option>\n              ) : null}\n              {getOptions}\n            </select>\n\n            <input\n              autoComplete={AutoComplete.TEL}\n              type=\"tel\"\n              className={cx('form-input -ml-0.5 flex-1 focus:relative focus:z-0', {\n                '-mt-2 lg:mt-0': personalInformationPage,\n                'form-error': !!phoneNumberFieldError,\n                [classname as string]: !!classname,\n              })}\n              aria-invalid={!!phoneNumberFieldError}\n              aria-describedby={`${errorId} ${helperPhoneId}`}\n              data-testid=\"phone.phoneNumber\"\n              maxLength={15}\n              {...register(`${name}.phoneNumber`, {\n                required: { value: true, message: t('phone.phoneNumberError') },\n                pattern: { value: phone, message: t('phone.phoneNumberError') },\n              })}\n              disabled={isDisabled}\n            />\n          </span>\n        </FormLabel>\n        {phoneCountryFieldError && <FormError id={errorId} error={phoneCountryFieldError} />}\n        {phoneNumberFieldError && <FormError id={errorId} error={phoneNumberFieldError} />}\n        <FormHelpMessage id={helperId} loading={loading} />\n        <FormHelpMessage\n          id={helperPhoneId}\n          loading={loading}\n          message={label || t('phone.label')}\n          className=\"!hidden\"\n        />\n      </div>\n    </div>\n  );\n};\n","import { Markdown } from '@dx-ui/osc-markdown';\nimport type { Brand_CountriesQuery } from './queries/generated/types';\nimport { Link } from '@dx-ui/osc-link';\nimport { FormInput } from '@dx-ui/osc-form';\nimport { useMemo } from 'react';\nimport type { ReactNode } from 'react';\n\nconst Paragraph = ({ children }: { children: ReactNode }) => <p className=\"mb-4\">{children}</p>;\nconst WrappedLink = ({ href, ...rest }: { href: string }) => <Link url={href} {...rest} />;\nconst CustomerExternalParagraph = ({ children }: { children: ReactNode }) => (\n  <p className=\"!mt-0 ml-8 text-sm\">{children}</p>\n);\n\nexport const MarketingContent = ({\n  selectedCountry,\n  setMarketingOptinsSelected,\n  language,\n  origin,\n}: {\n  selectedCountry: NonNullable<Brand_CountriesQuery>['countries'][0];\n  setMarketingOptinsSelected: React.Dispatch<React.SetStateAction<number[]>>;\n  language: string;\n  origin: string;\n}) => {\n  const marketingOptin = selectedCountry?.marketingOptin;\n  const rules = marketingOptin?.marketingOptinRules[0];\n  const optIns = useMemo(\n    () => rules?.optIns.filter((optIn) => !optIn?.autoOptIn) || [],\n    [rules?.optIns]\n  );\n  const termsAndConditions = useMemo(\n    () =>\n      rules?.optIns.find((optIn) => optIn?.termsAndConditionsJoin)?.termsAndConditionsJoin ?? '',\n    [rules?.optIns]\n  );\n\n  const handleMarketingOptinChange = (\n    event: React.ChangeEvent<HTMLInputElement>,\n    index: number\n  ) => {\n    setMarketingOptinsSelected((prevSelected) => {\n      const isChecked = event.target?.checked;\n      if (isChecked) {\n        return [...prevSelected, index];\n      } else {\n        return prevSelected.filter((i) => i !== index);\n      }\n    });\n  };\n\n  return (\n    <>\n      {optIns &&\n        optIns.map((optIn, index) => {\n          const { autoOptIn, customerTextExternal, name } = optIn;\n          if (autoOptIn) {\n            return null;\n          }\n          return (\n            <section key={optIn._id}>\n              <FormInput\n                name={`marketing.${index}`}\n                label={name}\n                type=\"checkbox\"\n                labelClassName=\"w-full\"\n                optional={true}\n                aria-describedby={`marketing-${index}`}\n                registerOptions={{\n                  onChange: (event) => handleMarketingOptinChange(event, index),\n                }}\n              />\n              {customerTextExternal && (\n                <Markdown\n                  language={language}\n                  origin={origin}\n                  options={{\n                    forceBlock: true,\n                    overrides: {\n                      p: CustomerExternalParagraph,\n                      a: {\n                        component: WrappedLink,\n                        props: {\n                          className: 'underline text-primary hover:text-primary-alt text-base',\n                          isNewWindow: true,\n                        },\n                      },\n                    },\n                  }}\n                >\n                  {customerTextExternal}\n                </Markdown>\n              )}\n            </section>\n          );\n        })}\n      <Markdown\n        origin={origin}\n        language={language}\n        options={{\n          forceBlock: true,\n          overrides: {\n            p: Paragraph,\n            a: {\n              component: WrappedLink,\n              props: {\n                className: 'underline text-primary hover:text-primary-alt text-base',\n                isNewWindow: true,\n              },\n            },\n          },\n        }}\n      >\n        {termsAndConditions}\n      </Markdown>\n    </>\n  );\n};\n","import { useFormContext } from 'react-hook-form';\nimport { ActionDialog } from '@dx-ui/osc-dialog-v2';\nimport { FormInput } from '@dx-ui/osc-form';\nimport { Link } from '@dx-ui/osc-link';\nimport { Trans, useTranslation } from 'next-i18next';\n\nimport type { Dispatch, SetStateAction } from 'react';\nimport type { Brand_CountriesQuery } from './queries/generated/types';\n\ntype Props = {\n  isUSA: boolean;\n  isChina: boolean;\n  selectedCountry: Brand_CountriesQuery['countries'][0];\n  isMarketingOffersModalOpen: boolean;\n  setIsMarketingOffersModalOpen: Dispatch<SetStateAction<boolean>>;\n  language: string;\n  origin: string;\n};\n\nexport const MarketingContent = ({\n  isUSA,\n  isChina,\n  selectedCountry,\n  isMarketingOffersModalOpen,\n  setIsMarketingOffersModalOpen,\n  language,\n  origin,\n}: Props) => {\n  const [t] = useTranslation('osc-join-form-join');\n  const form = useFormContext();\n\n  if (!isUSA) {\n    if (selectedCountry?.marketingOptIn !== 'greenMarketingOptIn') {\n      return (\n        <>\n          <FormInput\n            name=\"marketingConsent\"\n            label={t('marketing.label')}\n            type=\"checkbox\"\n            labelClassName=\"w-full\"\n            optional={true}\n            aria-describedby=\"marketing\"\n          />\n          <p id=\"marketing\" className=\"!mt-0 ml-8 text-sm\">\n            <Trans t={t} i18nKey={isChina ? 'marketing_china.agreement' : 'marketing.agreement'}>\n              <Link url={`${origin}/${language}/p/global-privacy-statement/`} isNewWindow />\n            </Trans>\n          </p>\n          {/* Hide Offers checkbox - China only */}\n          {!isChina ? (\n            <>\n              <FormInput\n                name=\"marketingOffers\"\n                label={t('marketing_offers.label')}\n                type=\"checkbox\"\n                labelClassName=\"w-full\"\n                optional={true}\n                aria-describedby=\"marketing_offers\"\n              />\n              <p id=\"marketing_offers\" className=\"!mt-0 ml-8 text-sm\">\n                <Trans t={t} i18nKey=\"marketing_offers.agreement\">\n                  <Link url={`${origin}/${language}/p/global-privacy-statement/`} isNewWindow />\n                </Trans>\n              </p>\n              <FormInput\n                name=\"marketingGrandVacations\"\n                label={t('marketing_grandVacations.label')}\n                type=\"checkbox\"\n                labelClassName=\"w-full\"\n                optional={true}\n                aria-describedby=\"marketing_grandVacations\"\n              />\n              <p id=\"marketing_grandVacations\" className=\"!mt-0 ml-8 text-sm\">\n                <Trans t={t} i18nKey=\"marketing_grandVacations.agreement\">\n                  <Link\n                    url=\"https://www.hiltongrandvacations.com/en/privacy-policy.html\"\n                    isNewWindow\n                  />\n                </Trans>\n              </p>\n              <ActionDialog\n                buttonOptions={{\n                  cancel: {\n                    label: t('dialog.decline'),\n                  },\n                  confirm: {\n                    label: t('dialog.agree'),\n                  },\n                }}\n                onConfirm={() => setIsMarketingOffersModalOpen(false)}\n                onCancel={() => {\n                  setIsMarketingOffersModalOpen(false);\n                  form.setValue('marketingOffers', false);\n                }}\n                title={t('dialog.title')}\n                isOpen={isMarketingOffersModalOpen}\n                onDismiss={() => {\n                  setIsMarketingOffersModalOpen(!isMarketingOffersModalOpen);\n                  form.setValue('marketingOffers', false);\n                }}\n                size=\"lg\"\n              >\n                <p>{t('dialog.body')}</p>\n                <p className=\"my-4 text-sm\">{t('dialog.disclaimer')}</p>\n              </ActionDialog>\n            </>\n          ) : null}\n          <p>{t(isChina ? 'consent_china' : 'consent')}</p>\n          <p>\n            <Trans t={t} i18nKey={isChina ? 'agreement_china' : 'agreement'}>\n              <Link\n                url={`/${language}/hilton-honors/terms/`}\n                className=\"text-base text-primary hover:text-primary-alt\"\n                isNewWindow\n              />\n              <Link\n                url={`${origin}/${language}/p/global-privacy-statement/`}\n                className=\"text-base text-primary hover:text-primary-alt\"\n                isNewWindow\n              />\n            </Trans>\n          </p>\n        </>\n      );\n    }\n  }\n\n  return (\n    <>\n      {selectedCountry?.marketingOptInForHGV && (\n        <>\n          <FormInput\n            name=\"marketingGrandVacations\"\n            label={t('marketing_grandVacations.label')}\n            type=\"checkbox\"\n            labelClassName=\"w-full\"\n            optional={true}\n            aria-describedby=\"marketing_grandVacations\"\n          />\n          <p id=\"marketing_grandVacations\" className=\"!mt-0 ml-8 text-sm\">\n            <Trans t={t} i18nKey=\"marketing_grandVacations.agreement\">\n              <Link url=\"https://www.hiltongrandvacations.com/en/privacy-policy.html\" isNewWindow />\n            </Trans>\n          </p>\n          <p>{t('consent')}</p>\n        </>\n      )}\n      <p>\n        <Trans t={t} i18nKey={isUSA ? 'agreement_US' : 'agreement'}>\n          <Link\n            url={`/${language}/hilton-honors/terms/`}\n            className=\"text-base text-primary hover:text-primary-alt\"\n            isNewWindow\n          />\n          <Link\n            url={`${origin}/${language}/p/global-privacy-statement/`}\n            className=\"text-base text-primary hover:text-primary-alt\"\n            isNewWindow\n          />\n          <Link\n            url={`${origin}/${language}/p/global-privacy-statement/#CaliforniaRights`}\n            className=\"text-base text-primary hover:text-primary-alt\"\n            isNewWindow\n          />\n        </Trans>\n      </p>\n    </>\n  );\n};\n","import type { JoinFormMetrics } from '../types/join-form-analytics';\n\nexport const sendErrorAnalytics = (\n  metrics: JoinFormMetrics,\n  formErrors: string[],\n  formErrorsMessages: string[]\n) => {\n  metrics.setPageInfo('alertBoxText', formErrors);\n  metrics.trackEvent('alertBoxText');\n  metrics.setFormErrors([{ errors: formErrors.join('|') }]);\n  metrics.setFormErrorMessages(formErrorsMessages.join('|'));\n  metrics.setProperty('page.attributes.actionDetail', 'formError');\n  metrics.trackEvent('formErrorEvent');\n};\n","import { BannerNotification } from '@dx-ui/osc-banner-notification';\nimport { FormErrorIcon, FormInput, FormSelect } from '@dx-ui/osc-form';\nimport { Link } from '@dx-ui/osc-link';\nimport cx from 'classnames';\nimport { Trans, useTranslation } from 'next-i18next';\nimport { useEffect, useState } from 'react';\nimport type { FieldError, SubmitErrorHandler } from 'react-hook-form';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport type { ReactNode } from 'react';\n\nimport { AddressFields } from './address-fields';\nimport { FormInputPassword } from './password-fields';\nimport { FormInputPhone } from './phone-fields';\nimport { MarketingContent as MarketingContentCCS } from './marketing-content-css';\nimport { MarketingContent } from './marketing-content';\n\nimport {\n  CreateGuestDocument,\n  useBrand_CountriesQuery,\n  useCreateGuestMutation,\n  useLanguages_DefaultCountryCodeQuery,\n} from './queries/generated/queries';\n\nimport { AutoComplete } from './auto-complete';\nimport type { CreateGuestMutation, CreateGuestMutationVariables } from './queries/generated/types';\nimport { email } from './form-validation-regex';\nimport { Spinner } from '@dx-ui/osc-spinner';\nimport type { PageInfo } from '@dx-ui/config-metrics';\nimport type { JoinFormMetrics } from './types/join-form-analytics';\nimport { sendErrorAnalytics } from './utils/join-form-analytics';\nimport { logError } from '@dx-ui/framework-logger';\nimport { generateError } from '@dx-ui/utilities-generate-error';\nimport unset from 'lodash/unset';\nimport type { DXError } from '@dx-ui/types-graphql';\n\ntype BannerContent = { message: string; type: 'success' | 'error' } | null;\n\nconst GRAPH_ERRORS = {\n  WANTS_TOTP: 996,\n  TOTP_REMOVED: 995,\n  COMMUNICATIONS_ERROR: 1002,\n  RESERVATION_LOGIN_ERROR: 22,\n  RESERVATIONWITH24HRS_LOGIN_ERROR: 16,\n  CONFLICT_WITH_RESOURCE: 409,\n  SUCCESSFULL_REGISRATION_DELAYED_CONFIRMATION: 1000,\n} as const;\n\nconst EmailSubscription = {\n  PERSONALIZED_OFFERS: 'SGMT',\n  HILTON_MARKETING: 'HHPRM',\n  GRAND_VACATIONS: 'HGVC',\n  HHONORS_EMAIL: 'CUST',\n  THIRD_PARTY_MARKETING: '3PROM',\n} as const;\n\nconst USMarketingOptIn = {\n  hhonorsSubscriptions: [\n    EmailSubscription.HHONORS_EMAIL,\n    EmailSubscription.HILTON_MARKETING,\n    EmailSubscription.PERSONALIZED_OFFERS,\n    EmailSubscription.GRAND_VACATIONS,\n  ],\n  optOuts: {},\n};\n\ntype PageInfoKeys = keyof PageInfo;\n\nconst FORM_ERRORS_TO_FILTER = ['alertBoxText', 'formError', 'formErrorMessage'] as PageInfoKeys[];\n\nconst oCodes = [\n  'ADAPW',\n  'ANDEW',\n  'BRDEW',\n  'CIHCW',\n  'CNMP',\n  'DSKEW',\n  'DTITW',\n  'ESHCW',\n  'HHHTW',\n  'HHPCW',\n  'HITEW',\n  'HPHCW',\n  'IOSEW',\n  'JNHHW',\n  'NHBHW',\n  'NMUPW',\n  'OHWBW',\n  'OHWE',\n  'OHWGW',\n  'PYHTW',\n  'QQHTW',\n  'RUHCW',\n  'WAHCW',\n  'WFPAW',\n  'JHTNW',\n  'ASPEW',\n  'SMBEW',\n  'PEPEW',\n];\n\nexport type JoinInput = Omit<\n  CreateGuestMutationVariables['input'],\n  'username, propCode, country'\n> & {\n  country: string;\n  marketingOffers: boolean;\n  marketingConsent?: boolean;\n  marketingGrandVacations?: boolean;\n};\n\nexport interface Props {\n  /*\n   * Feature toggle on guest, disabled by default\n   */\n  isMarketabilityCCSEnabled?: boolean;\n  language: string;\n  /**\n   * Enrollment OCode, required\n   */\n  oCode: string;\n  /**\n   * Called after successful enrollment\n   */\n  onSuccess: (enrollResult: CreateGuestMutation) => void;\n  /*\n   * Metrics object, at a minimum needed these functions\n   */\n  metrics: JoinFormMetrics;\n\n  headline: ReactNode;\n  origin: string;\n}\n\nexport function JoinForm({\n  isMarketabilityCCSEnabled = false,\n  language,\n  oCode,\n  onSuccess,\n  metrics,\n  headline,\n  origin,\n}: Props) {\n  const [t] = useTranslation('osc-join-form-join');\n  const { t: tForm } = useTranslation('osc-join-form-form');\n  const [bannerContent, setBannerContent] = useState<BannerContent>(null);\n  const [marketingOptinsSelected, setMarketingOptinsSelected] = useState<number[]>([]);\n  const [isMarketingOffersModalOpen, setIsMarketingOffersModalOpen] = useState(false);\n  const { data: defaultCountryCodeData } = useLanguages_DefaultCountryCodeQuery({\n    language,\n  });\n\n  const isJapanesePage = language === 'ja';\n\n  const form = useForm<JoinInput>({\n    mode: 'onTouched',\n    criteriaMode: 'all',\n    defaultValues: {\n      address: {},\n      country: defaultCountryCodeData?.languages?.[0]?.defaultCountryCode || 'US',\n      phone: {\n        phoneCountry: `1US`,\n      },\n    },\n  });\n\n  const { watch, formState, setValue, handleSubmit } = form;\n  const { errors, isSubmitted } = formState;\n\n  const hasErrors = Object.keys(errors).length > 0;\n\n  useEffect(() => {\n    if (defaultCountryCodeData?.languages?.[0]?.defaultCountryCode) {\n      setValue('country', defaultCountryCodeData?.languages?.[0]?.defaultCountryCode);\n    }\n    if (isJapanesePage) {\n      setValue('phone.phoneCountry', '81JP');\n    }\n  }, [defaultCountryCodeData, isJapanesePage, setValue]);\n\n  const marketingOffersValue = watch('marketingOffers');\n  useEffect(() => {\n    if (marketingOffersValue) {\n      return setIsMarketingOffersModalOpen(true);\n    }\n  }, [marketingOffersValue]);\n\n  const hasPasswordFields = oCodes?.includes(oCode);\n\n  const [loadingGeocode, setLoadingGeocode] = useState(false);\n\n  const { data, isLoading: isLoadingCountries } = useBrand_CountriesQuery({\n    language,\n    getMarketing: true,\n    getCCSMarketing: isMarketabilityCCSEnabled,\n    countryFilter: { prohibited: false },\n  });\n\n  const createGuest = useCreateGuestMutation();\n\n  const countries =\n    [...(data?.countries || [])].sort((a, b) => Intl.Collator(language).compare(a.name, b.name)) ||\n    [];\n\n  const selectedCountry = countries.find(({ code }) => code === watch('country'))!;\n  const marketingOptIns = selectedCountry?.marketingOptin?.marketingOptinRules?.[0]?.optIns;\n\n  const isChina = selectedCountry?.code === 'CN';\n  const isUSA = selectedCountry?.code === 'US';\n\n  const getErrors = () => {\n    const elements: ReactNode[] = [];\n    Object.entries(errors).forEach(([key, value]) => {\n      if (value.message) {\n        const message = value.message;\n        elements.push(<li key={`joinPageErrorMsg${key}`}>{message}</li>);\n      }\n\n      // need to go in one level deeper\n      Object.entries(value).forEach(([innerKey, innerValue]) => {\n        if ((innerValue as FieldError).message) {\n          const message = (innerValue as FieldError).message;\n          elements.push(<li key={`joinPageErrorMsg${innerKey}`}>{message}</li>);\n        }\n      });\n    });\n    return elements;\n  };\n\n  const updateCreateGuestMutation = ({\n    address,\n    email,\n    name,\n    password,\n    phone,\n    country,\n    marketingGrandVacations,\n    marketingOffers,\n    marketingConsent,\n  }: JoinInput) => {\n    let hhonorsSubscriptions: string[] = [];\n    if (isMarketabilityCCSEnabled) {\n      const marketgOptinsAutoEnrolled = marketingOptIns?.filter((optin) => optin?.autoOptIn);\n      if (marketgOptinsAutoEnrolled && marketgOptinsAutoEnrolled.length) {\n        hhonorsSubscriptions = marketgOptinsAutoEnrolled.flatMap(\n          (optin) => optin.subscriptionCodes\n        );\n      }\n      if (marketingOptinsSelected.length && marketingOptIns && marketingOptIns.length) {\n        marketingOptinsSelected.forEach((i) => {\n          const codes = marketingOptIns[i]?.subscriptionCodes || [];\n          const list = [...hhonorsSubscriptions, ...codes];\n          hhonorsSubscriptions = [...list];\n        });\n      }\n    } else {\n      const isGreenMarketingOptIn = selectedCountry?.marketingOptIn === 'greenMarketingOptIn';\n      if (isGreenMarketingOptIn) {\n        hhonorsSubscriptions = [\n          ...hhonorsSubscriptions,\n          EmailSubscription.PERSONALIZED_OFFERS,\n          EmailSubscription.HILTON_MARKETING,\n        ];\n        if (selectedCountry?.marketingOptInForHGV) {\n          marketingGrandVacations && hhonorsSubscriptions.push(EmailSubscription.GRAND_VACATIONS);\n        } else {\n          hhonorsSubscriptions.push(EmailSubscription.GRAND_VACATIONS);\n        }\n      } else {\n        marketingOffers && hhonorsSubscriptions.push(EmailSubscription.PERSONALIZED_OFFERS);\n        marketingConsent && hhonorsSubscriptions.push(EmailSubscription.HILTON_MARKETING);\n        marketingGrandVacations && hhonorsSubscriptions.push(EmailSubscription.GRAND_VACATIONS);\n      }\n      hhonorsSubscriptions.push(EmailSubscription.HHONORS_EMAIL);\n    }\n    address.country = country;\n    const input: CreateGuestMutationVariables['input'] = {\n      address: {\n        ...address,\n        ...(address.state !== 'address' && { state: address.state }),\n        addressType: 'home',\n      },\n      email,\n      enrollSourceCode: oCode,\n      name,\n      password,\n      phone: {\n        phoneNumber: phone?.phoneNumber || '',\n        phoneCountry: phone?.phoneCountry?.replace(/\\D+/, ''),\n        phoneType: 'home',\n      },\n      preferredLanguage: language === 'id' ? 'en' : language,\n      privacyRequested: false,\n      subscriptions:\n        !isMarketabilityCCSEnabled && isUSA\n          ? USMarketingOptIn\n          : { hhonorsSubscriptions, optOuts: {} },\n    };\n\n    return new Promise((_resolve) => {\n      createGuest?.mutate([CreateGuestDocument, { language, input }], {\n        onSuccess: (data: CreateGuestMutation) => {\n          const errorCode = data?.createGuest?.error?.code;\n          if (errorCode) {\n            switch (errorCode) {\n              case GRAPH_ERRORS.SUCCESSFULL_REGISRATION_DELAYED_CONFIRMATION:\n              case GRAPH_ERRORS.CONFLICT_WITH_RESOURCE:\n                return setBannerContent({\n                  message: t(`submit_errors.${errorCode}`),\n                  type: 'error',\n                });\n              case 997:\n                if (\n                  isJapanesePage &&\n                  data?.createGuest?.error?.notifications?.some(({ code }) => code === 512)\n                ) {\n                  return setBannerContent({\n                    message: t(`submit_errors.997`),\n                    type: 'error',\n                  });\n                }\n                return setBannerContent({\n                  message: t(`submit_errors.500`),\n                  type: 'error',\n                });\n              default:\n                return setBannerContent({\n                  message: t(`submit_errors.500`),\n                  type: 'error',\n                });\n            }\n          }\n\n          const hHonorsNumber = data?.createGuest?.data?.hhonorsNumber;\n          const encodedName = window.btoa(encodeURIComponent(name.firstName));\n          const encodedNum = window.btoa(hHonorsNumber || '');\n          const encodedEmail = window.btoa(encodeURIComponent(email?.emailAddress ?? ''));\n          const encodedEnroll = window.btoa('true');\n\n          sessionStorage.setItem('first_name', encodedName);\n          sessionStorage.setItem('hhonors', encodedNum);\n          sessionStorage.setItem('email', encodedEmail);\n          sessionStorage.setItem('firstEnroll', encodedEnroll);\n          onSuccess(data);\n        },\n        onError: (data) => {\n          setBannerContent({\n            message: t('submit_errors.500'),\n            type: 'error',\n          });\n          logError('JOIN_FORM', generateError(data));\n        },\n      });\n    });\n  };\n\n  const handleFormSubmit = (formData: JoinInput) => {\n    if (window.digitalData?.page?.pageInfo) {\n      FORM_ERRORS_TO_FILTER.forEach((key) => unset(window?.digitalData?.page?.pageInfo, key));\n    }\n    updateCreateGuestMutation(formData)\n      .then((res) => res)\n      .catch((error: DXError) => {\n        throw error;\n      });\n  };\n\n  const handleInvalidForm: SubmitErrorHandler<JoinInput> = (fieldErrors) => {\n    // hasErrors above reads errors before validation is completed, missing new errors on submit.\n    // Using onInvalid ensures we get the final, updated errors.\n    const hasFieldErrors = Object.keys(fieldErrors).length > 0;\n    if (hasFieldErrors) {\n      const formErrors = Object.keys(errors).flatMap((key) => key);\n      const formErrorsMessages = (Object.keys(errors) as (keyof typeof errors)[])\n        .flatMap((key) => errors[key]?.message)\n        .filter((val): val is string => Boolean(val));\n\n      sendErrorAnalytics(metrics, formErrors, formErrorsMessages);\n    }\n  };\n\n  return (\n    <div className=\"container\">\n      {bannerContent ? (\n        <BannerNotification status={bannerContent?.type}>\n          <p className=\"font-bold sm:text-lg\">{bannerContent?.message}</p>\n        </BannerNotification>\n      ) : null}\n      <div className=\"mx-auto my-10 max-w-xl\">\n        {headline}\n        {hasErrors && isSubmitted && (\n          <div\n            role=\"alert\"\n            data-testid=\"form-errors\"\n            className={cx('w-full bg-danger-alt text-danger', {\n              'mb-4 p-4': hasErrors && isSubmitted,\n            })}\n          >\n            <h2 className=\"flex items-center space-x-2 font-semibold text-danger rtl:space-x-reverse\">\n              <FormErrorIcon />\n              <span>{t('form_error')}</span>\n            </h2>\n            <ul className=\"ml-10 text-danger rtl:space-x-reverse\">{getErrors()}</ul>\n          </div>\n        )}\n        <FormProvider {...form}>\n          <form\n            noValidate\n            method=\"post\"\n            onSubmit={handleSubmit(handleFormSubmit, handleInvalidForm)}\n            className=\"flex w-full flex-col space-y-4\"\n          >\n            <p>{tForm('requiredFields')}</p>\n            {isJapanesePage ? <p>{tForm('enterHiraganaCharacters')}</p> : null}\n            <FormInput\n              name=\"name.firstName\"\n              autoComplete={AutoComplete.GIVENNAME}\n              label={tForm('firstName.label')}\n              labelClassName=\"w-full\"\n              optional={false}\n              maxLength={18}\n              registerOptions={{\n                required: { value: true, message: tForm('firstName.error') },\n                minLength: { value: 1, message: tForm('firstName.error_minLength') },\n                pattern: { value: /^\\D+$/, message: tForm('firstName.error_noDigits') },\n              }}\n            />\n            <FormInput\n              name=\"name.lastName\"\n              autoComplete={AutoComplete.FAMILYNAME}\n              label={tForm('lastName.label')}\n              labelClassName=\"w-full\"\n              optional={false}\n              maxLength={18}\n              registerOptions={{\n                required: { value: true, message: tForm('lastName.error') },\n                minLength: { value: 1, message: tForm('lastName.error_minLength') },\n                pattern: { value: /^\\D+$/, message: tForm('lastName.error_noDigits') },\n              }}\n            />\n\n            <FormInputPhone\n              options={countries}\n              defaultValue=\"1US\"\n              loading={isLoadingCountries}\n              labelClassName=\"w-full\"\n            />\n\n            <FormInput\n              name=\"email.emailAddress\"\n              autoComplete={AutoComplete.EMAIL}\n              label={tForm('email.label')}\n              type=\"email\"\n              labelClassName=\"w-full\"\n              optional={false}\n              maxLength={64}\n              registerOptions={{\n                required: { value: true, message: tForm('email.error') },\n                pattern: { value: email, message: tForm('email.error') },\n              }}\n            />\n\n            <FormSelect\n              autoComplete={AutoComplete.COUNTRY}\n              labelClassName=\"w-full\"\n              label={tForm('address.country.label')}\n              name=\"country\"\n              loading={isLoadingCountries}\n              disabled={isLoadingCountries}\n            >\n              {countries.map(({ name, code }) => (\n                <option\n                  key={`option-${code}`}\n                  value={code}\n                  {...(code === watch('country') ? { selected: true } : {})}\n                >\n                  {name}\n                </option>\n              ))}\n            </FormSelect>\n\n            <AddressFields\n              code={watch('country')}\n              groupName=\"address\"\n              setLoadingGeocode={setLoadingGeocode}\n            />\n\n            {hasPasswordFields && (\n              <>\n                <FormInputPassword\n                  autoComplete={AutoComplete.NEWPASSWORD}\n                  type=\"password\"\n                  name=\"password\"\n                  label={tForm('password.label')}\n                  labelClassName=\"w-full\"\n                />\n                <FormInput\n                  autoComplete={AutoComplete.NEWPASSWORD}\n                  type=\"password\"\n                  name=\"confirmPassword\"\n                  label={tForm('confirmPassword.label')}\n                  labelClassName=\"w-full\"\n                  optional={false}\n                  containerClassName=\"!mb-10\"\n                  registerOptions={{\n                    validate: {\n                      shouldMatch: (value) =>\n                        (!!value && value === watch('password')) || tForm('confirmPassword.error'),\n                    },\n                  }}\n                />\n              </>\n            )}\n            <div className=\"space-y-10\">\n              {isMarketabilityCCSEnabled ? (\n                <MarketingContentCCS\n                  selectedCountry={selectedCountry}\n                  setMarketingOptinsSelected={setMarketingOptinsSelected}\n                  language={language}\n                  origin={origin}\n                />\n              ) : (\n                <MarketingContent\n                  isUSA={isUSA}\n                  isChina={isChina}\n                  selectedCountry={selectedCountry}\n                  isMarketingOffersModalOpen={isMarketingOffersModalOpen}\n                  setIsMarketingOffersModalOpen={setIsMarketingOffersModalOpen}\n                  language={language}\n                  origin={origin}\n                />\n              )}\n\n              <button\n                type=\"submit\"\n                className=\"btn btn-2xl btn-primary w-full\"\n                disabled={loadingGeocode || createGuest.isPending}\n              >\n                {createGuest.isPending ? (\n                  <>\n                    {tForm('submitting')} <Spinner className=\"ml-2 inline\" size=\"sm\" />\n                  </>\n                ) : (\n                  t('submit', { context: null })\n                )}\n              </button>\n\n              <p className=\"text-xs\">\n                <Trans t={t} i18nKey=\"termsAndConditions_disclaimer\">\n                  <Link\n                    url={`/${language}/hilton-honors/honors-discount-terms/`}\n                    className=\"text-xs text-primary hover:text-primary-alt\"\n                    isNewWindow\n                  />\n                </Trans>\n              </p>\n              <p className=\"!mt-6 text-xs\">{t('wiFi_disclaimer')}</p>\n              {(selectedCountry?.marketingConsent || selectedCountry?.marketingOptIn) && (\n                <>\n                  <p className=\"text-xs text-text-alt\">{t('gdprFootnote')}</p>\n                  <p className=\"!mt-6 text-xs text-text-alt\">{t('gdprFootnote2')}</p>\n                </>\n              )}\n            </div>\n          </form>\n        </FormProvider>\n      </div>\n    </div>\n  );\n}\n","export * from './join-form';\n","export * from './lib';\n","import { useEffect, useRef, useState, type ReactNode } from 'react';\nimport { useAuth } from '@dx-ui/framework-auth-provider';\nimport { JoinForm, type Props } from '@dx-ui/osc-join-form';\nimport { Dialog } from '@dx-ui/osc-dialog-v2';\nimport { LoginIFrame } from '@dx-ui/osc-login';\nimport { useTranslation } from 'next-i18next';\nimport Icon from '@dx-ui/osc-icon';\nimport { logError } from '@dx-ui/framework-logger';\nimport { isBrowser } from '@dx-ui/utilities-is-browser';\n\n/** This is a generic button component that will launch a modal with the join form when clicked. */\nexport function JoinModalButton({\n  children,\n  className,\n  language,\n  loginIFrameSrc,\n  metrics,\n  headline,\n  oCode = 'OHWGW',\n  onSuccessfulLogin,\n  onSuccessfulJoin,\n  onClick,\n}: {\n  children: ReactNode;\n  /** Wrapper button classname */\n  className?: string;\n  language: string;\n  loginIFrameSrc: string;\n  /** Metrics object from join form */\n  metrics: Props['metrics'];\n  headline?: Props['headline'];\n  oCode?: Props['oCode'];\n  onSuccessfulLogin?: () => void;\n  onSuccessfulJoin?: () => void;\n  onClick?: () => void;\n}) {\n  const [isModalOpen, setIsModalOpen] = useState(false);\n  const [showJoinFormContent, setShowJoinFormContent] = useState(false);\n  const [showLoginIframe, setShowLoginIframe] = useState(false);\n  const [newHonorsNumber, setNewHonorsNumber] = useState('');\n  const { login } = useAuth();\n  const buttonRef = useRef<HTMLButtonElement>(null);\n  const successMessageRef = useRef<HTMLParagraphElement>(null);\n  const { t } = useTranslation('osc-join-modal-button');\n  const origin = useOrigin();\n\n  const handleOpenModal = () => {\n    setIsModalOpen(true);\n    setShowJoinFormContent(true);\n    onClick?.();\n  };\n\n  const handleOpenLoginIframe = () => {\n    setShowLoginIframe(true);\n  };\n\n  const handleCloseModal = () => {\n    setIsModalOpen(false);\n    setShowLoginIframe(false);\n  };\n\n  return (\n    <Dialog\n      onDismiss={handleCloseModal}\n      isOpen={isModalOpen}\n      size={showLoginIframe ? 'md' : '2xl'}\n      title={showLoginIframe ? t('signIn') : t('joinForFree')}\n      dialogTrigger={\n        <button type=\"button\" className={className} onClick={handleOpenModal} ref={buttonRef}>\n          {children}\n        </button>\n      }\n    >\n      {showJoinFormContent ? (\n        <JoinForm\n          language={language}\n          oCode={oCode}\n          origin={origin}\n          headline={\n            headline || (\n              <h1 className=\"mb-2 text-center font-headline text-3xl\">{t('joinHiltonHonors')}</h1>\n            )\n          }\n          onSuccess={(data) => {\n            const honorsNumber = data?.createGuest?.data?.hhonorsNumber;\n            if (honorsNumber) {\n              onSuccessfulJoin?.();\n              setNewHonorsNumber(honorsNumber);\n              setShowJoinFormContent(false);\n              handleOpenLoginIframe();\n            }\n          }}\n          metrics={metrics}\n        />\n      ) : null}\n      {showLoginIframe ? (\n        <>\n          <div ref={successMessageRef} className=\"mt-5 flex bg-success-alt p-2 text-success\">\n            <Icon name=\"check-circle\" variant=\"solid\" />\n            <p className=\"ml-2\">{t('welcomeMessage')}</p>\n          </div>\n          {newHonorsNumber ? (\n            <LoginIFrame\n              frameSrc={loginIFrameSrc}\n              title={t('signIn')}\n              options={{\n                username: newHonorsNumber,\n              }}\n              onLoginAttempt={(result) => {\n                if (result.data) {\n                  login(result)\n                    .then(() => {\n                      handleCloseModal();\n                      setShowLoginIframe(false);\n                      onSuccessfulLogin?.();\n                    })\n                    .catch((error) => {\n                      logError(\n                        'OSC_JOIN_MODAL_BUTTON',\n                        error,\n                        'Error logging in after successful join'\n                      );\n                    });\n                }\n              }}\n            />\n          ) : null}\n        </>\n      ) : null}\n    </Dialog>\n  );\n}\n\nfunction useOrigin() {\n  const [origin, setOrigin] = useState('https://www.hilton.com');\n  useEffect(() => {\n    if (isBrowser && window.location) {\n      const { protocol, hostname, port } = window.location;\n      const origin = `${protocol}//${hostname}${port ? `:${port}` : ''}`;\n      setOrigin(origin);\n    }\n  }, []);\n  return origin;\n}\n","export * from './lib/osc-join-modal-button';\n","import * as React from 'react';\nimport { Link } from '@dx-ui/osc-link';\nimport * as DropdownMenu from '@radix-ui/react-dropdown-menu';\nimport cx from 'classnames';\nimport { useTranslation } from 'next-i18next';\nimport { Login } from '@dx-ui/osc-login';\nimport Icon from '@dx-ui/osc-icon';\nimport { LanguageSelector } from '@dx-ui/osc-language-selector';\nimport type { HeaderProps, LinkWithExperimentationConfiguration } from './types';\nimport { BrandHeaderBody } from './brand-header-body/brand-header-body';\nimport { sendInteractionReward } from './header.utilities';\nimport {\n  Status,\n  sendReward,\n  setConductricsSelectionOK,\n  useConductricsSelection,\n} from '@dx-ui/framework-conductrics';\nimport { HeaderLogoLink } from './header.logo';\nimport { useRect } from '@dx-ui/utilities-use-rect';\nimport { JoinModalButton } from '@dx-ui/osc-join-modal-button';\nimport { useRouter } from 'next/router';\nimport { getLocaleFormattedNumber } from '@dx-ui/framework-i18n';\n\nconst HeaderMenuLink: React.FunctionComponent<\n  React.PropsWithChildren<LinkWithExperimentationConfiguration>\n> = (link) => {\n  const [t] = useTranslation('osc-header');\n  return (\n    <DropdownMenu.Item asChild={true}>\n      <a\n        href={link.url}\n        onClick={link.onClick}\n        className={cx(\n          'block px-2 py-3 text-text hover:text-text-alt highlighted:bg-bg-alt',\n          link.className\n        )}\n        {...(link.adaDescription && {\n          'aria-label': `${link.adaDescription}${link.isNewWindow ? `, ${t('newTab')}` : ''}`,\n        })}\n        {...(link.isNewWindow && { target: '_blank', rel: 'noopener noreferrer' })}\n        data-conductrics-goal={link.experimentationConfiguration?.goal}\n        data-conductrics-value={link.experimentationConfiguration?.value}\n      >\n        {link.label}\n        {link.isNewWindow && !link.adaDescription ? (\n          <span className=\"sr-only\">\n            , <span>{t('newTab')}</span>\n          </span>\n        ) : null}\n      </a>\n    </DropdownMenu.Item>\n  );\n};\n\nconst joinModalConductricsTestAgent = 'a-ZPwsLcHilZ0e';\nfunction onSignInLinkClick() {\n  void setConductricsSelectionOK(joinModalConductricsTestAgent);\n}\n\nexport const Header = React.forwardRef<HTMLElement, HeaderProps>(\n  (\n    {\n      megaNavLinks,\n      brand,\n      isFluid,\n      mainNavLinks,\n      onSignOut,\n      onSignInAttempt,\n      suppressLogo = false,\n      shouldSuppressHonorsAccountLinks,\n      shouldSuppressFindStay,\n      shouldSuppressJoinAndSignIn,\n      shouldOpenAccountLinksInNewWindow,\n      user,\n      userLinks,\n      loginOptions,\n      children,\n      languageSelectorOptions,\n      showNewHeader,\n      theme,\n      heading,\n      wrapperId = '__next',\n      mvts,\n      ...rest\n    },\n    forwardedRef\n  ) => {\n    const [t] = useTranslation(['osc-header', 'osc-login']);\n    const defaultOptions = {\n      frameSrc: userLinks?.signInLink?.url || '',\n      title: t('osc-login:signIn'),\n      onLoginAttempt: onSignInAttempt,\n    };\n    const commonHeaderBodyProps = {\n      brand,\n      isFluid,\n      mainNavLinks,\n      onSignOut,\n      onSignInAttempt,\n      suppressLogo,\n      user,\n      userLinks,\n      loginOptions,\n      children,\n      heading,\n    };\n\n    const isDark = theme === 'dark';\n    const joinFromModal = useJoinFromModalTest();\n\n    if (userLinks?.signUpLink) {\n      userLinks.signUpLink.onMouseDown = onSignInLinkClick;\n      userLinks.signUpLink.onKeyDown = function onKeyDown(event) {\n        if (event.key === 'Enter' || event.key === ' ') {\n          onSignInLinkClick();\n        }\n      };\n    }\n\n    const SignUpComponent = ({\n      children,\n      className,\n      loggedInButtonRef,\n    }: {\n      children: React.ReactNode;\n      className: string;\n      loggedInButtonRef: React.RefObject<HTMLButtonElement | null>;\n    }): React.ReactNode => {\n      return (\n        <JoinModalButton\n          onClick={onSignInLinkClick}\n          className={className}\n          language={languageSelectorOptions?.locale || 'en'}\n          loginIFrameSrc={userLinks?.signInLink?.url || ''}\n          onSuccessfulJoin={() => sendReward('g-XuedMeNnr5')}\n          onSuccessfulLogin={() => {\n            sendReward('g-bgQSVS0Q4h');\n            setTimeout(() => loggedInButtonRef?.current?.focus(), 1000);\n          }}\n          metrics={{\n            setPageInfo: () => {},\n            trackEvent: () => {},\n            setFormErrors: () => {},\n            setProperty: () => {},\n            setFormErrorMessages: () => {},\n          }}\n        >\n          {children}\n        </JoinModalButton>\n      );\n    };\n\n    return (\n      <>\n        <a href=\"#skipped\" className=\"btn-xl btn-primary-text sr-only focus:not-sr-only\">\n          {t('skipToContent')}\n        </a>\n        <header\n          className={cx('border-b border-solid border-border', {\n            'bg-bg-dark': isDark,\n          })}\n          data-testid=\"shared-header\"\n          ref={forwardedRef}\n          {...rest}\n        >\n          {megaNavLinks || showNewHeader ? (\n            <BrandHeaderBody\n              menuItems={megaNavLinks}\n              brand={brand}\n              onSignInAttempt={onSignInAttempt}\n              onSignOut={onSignOut}\n              wrapperId={wrapperId}\n              user={user}\n              SignUpComponent={joinFromModal ? SignUpComponent : undefined}\n              loginOptions={loginOptions}\n              languageSelectorOptions={languageSelectorOptions}\n              isFluid={isFluid}\n              suppressLogo={suppressLogo}\n              shouldSuppressHonorsAccountLinks={shouldSuppressHonorsAccountLinks}\n              shouldSuppressFindStay={shouldSuppressFindStay}\n              shouldSuppressJoinAndSignIn={shouldSuppressJoinAndSignIn}\n              shouldOpenAccountLinksInNewWindow={shouldOpenAccountLinksInNewWindow}\n              heading={heading}\n              theme={theme}\n              mvts={mvts}\n            />\n          ) : languageSelectorOptions ? (\n            <NewHeaderBody\n              {...commonHeaderBodyProps}\n              defaultOptions={defaultOptions}\n              languageSelectorOptions={languageSelectorOptions}\n            />\n          ) : (\n            <OldHeaderBody {...commonHeaderBodyProps} defaultOptions={defaultOptions} />\n          )}\n        </header>\n        {children}\n        <div id=\"skipped\" tabIndex={-1} />\n      </>\n    );\n  }\n);\n\ntype BodyProps = Pick<\n  HeaderProps,\n  | 'brand'\n  | 'isFluid'\n  | 'mainNavLinks'\n  | 'onSignOut'\n  | 'suppressLogo'\n  | 'user'\n  | 'userLinks'\n  | 'loginOptions'\n  | 'heading'\n> & {\n  defaultOptions: {\n    frameSrc: string;\n    title: string;\n    onLoginAttempt: HeaderProps['onSignInAttempt'];\n  };\n};\n\nfunction OldHeaderBody({\n  brand,\n  isFluid,\n  mainNavLinks,\n  onSignOut,\n  suppressLogo,\n  user,\n  userLinks,\n  loginOptions,\n  defaultOptions,\n  heading,\n}: BodyProps) {\n  return (\n    <div\n      className={cx('flex flex-wrap items-center pt-2 lg:py-2', {\n        'container-fluid': isFluid,\n        container: !isFluid,\n      })}\n    >\n      {suppressLogo ? null : <HeaderLogoLink brand={brand} heading={heading} />}\n      {mainNavLinks?.length ? <MainNav links={mainNavLinks} suppressLogo={suppressLogo} /> : null}\n      <UserNav\n        user={user}\n        userLinks={userLinks}\n        onSignOut={onSignOut}\n        loginOptions={loginOptions}\n        defaultOptions={defaultOptions}\n      />\n    </div>\n  );\n}\n\nfunction NewHeaderBody({\n  brand,\n  isFluid,\n  mainNavLinks,\n  onSignOut,\n  suppressLogo,\n  user,\n  userLinks,\n  loginOptions,\n  defaultOptions,\n  languageSelectorOptions,\n  heading,\n}: BodyProps & {\n  languageSelectorOptions: NonNullable<HeaderProps['languageSelectorOptions']>;\n}) {\n  return (\n    <div\n      className={cx('flex flex-wrap pt-1.5', {\n        'container-fluid': isFluid,\n        container: !isFluid,\n      })}\n    >\n      <div className=\"flex w-full flex-wrap items-center justify-between gap-x-5 gap-y-2 pb-2 sm:justify-end sm:gap-x-12 sm:pb-0\">\n        <LanguageSelector {...languageSelectorOptions} />\n        <div className=\"flex flex-wrap justify-end gap-x-2 gap-y-1.5 sm:flex-nowrap sm:gap-x-3\">\n          <UserNav\n            user={user}\n            userLinks={userLinks}\n            onSignOut={onSignOut}\n            loginOptions={loginOptions}\n            defaultOptions={defaultOptions}\n          />\n        </div>\n      </div>\n      <div className=\"w-full items-center lg:flex lg:pb-2\">\n        {suppressLogo ? null : <HeaderLogoLink brand={brand} heading={heading} />}\n        {mainNavLinks?.length ? <MainNav links={mainNavLinks} suppressLogo={suppressLogo} /> : null}\n      </div>\n    </div>\n  );\n}\n\nfunction UserNav({\n  user,\n  userLinks,\n  onSignOut,\n  loginOptions,\n  defaultOptions,\n}: Pick<BodyProps, 'user' | 'userLinks' | 'onSignOut' | 'loginOptions' | 'defaultOptions'>) {\n  const { i18n, t } = useTranslation('osc-header');\n  const { locale = 'en' } = useRouter();\n  const formattedHonorsPointsTotal = getLocaleFormattedNumber(user?.honorsPoints, { locale });\n  return (\n    <nav aria-label=\"Hilton Honors\" className=\"relative ms-auto\">\n      {user ? (\n        <DropdownMenu.Root dir={i18n.dir()} modal={false}>\n          <DropdownMenu.Trigger asChild>\n            <button\n              onClick={() => {\n                sendInteractionReward();\n                sendReward('profile-name-click');\n              }}\n              className=\"btn-xl btn-text-text flex items-center\"\n              type=\"button\"\n            >\n              <span className=\"brand-wa:font-normal\">\n                {t('greetings', { username: user.name })}\n              </span>\n              <Icon name=\"user-circle\" size=\"md\" variant=\"solid\" className=\"ms-2\" />\n            </button>\n          </DropdownMenu.Trigger>\n          <DropdownMenu.Portal>\n            <DropdownMenu.Content\n              align=\"end\"\n              className=\"absolute end-0 z-50 w-56 divide-y divide-border rounded border border-solid border-border bg-bg p-2 shadow-lg outline-none\"\n            >\n              <div className=\"flex flex-col px-2 py-3\">\n                <p className=\"leading-tight\">\n                  <span className=\"block font-bold\">{user.honorsTier}</span>\n                  <span>\n                    {t('points', {\n                      count: user.honorsPoints,\n                      points: formattedHonorsPointsTotal,\n                    })}\n                  </span>\n                </p>\n              </div>\n              {userLinks?.accountLink?.url ? (\n                <HeaderMenuLink\n                  onClick={(e) => {\n                    userLinks.accountLink?.onClick?.(e);\n                    sendInteractionReward();\n                  }}\n                  {...userLinks.accountLink}\n                  label={t('account')}\n                />\n              ) : null}\n              {/* Optional user links */}\n              {userLinks?.additionalLinks?.length\n                ? userLinks.additionalLinks.map((link) => (\n                    <HeaderMenuLink\n                      onClick={(e) => {\n                        link.onClick?.(e);\n                        sendInteractionReward();\n                      }}\n                      key={link.label}\n                      {...link}\n                    />\n                  ))\n                : null}\n              <button\n                className={cx(\n                  'w-full px-2 py-3 text-start text-text hover:text-text-alt highlighted:bg-bg-alt'\n                )}\n                onClick={onSignOut}\n                id=\"sign-out\"\n                type=\"button\"\n              >\n                {t('signOut')}\n              </button>\n            </DropdownMenu.Content>\n          </DropdownMenu.Portal>\n        </DropdownMenu.Root>\n      ) : userLinks?.signInLink || userLinks?.signUpLink ? (\n        <ul className=\"flex items-baseline divide-x divide-border rtl:divide-x-reverse\">\n          {userLinks.signUpLink ? (\n            <li className=\"px-2 first:ps-0 last:pe-0 sm:px-3\">\n              <Link\n                {...userLinks.signUpLink}\n                showNewWindowIcon={false}\n                data-osc-product=\"header-signup-link\"\n                underline={false}\n                className=\"btn btn-text-text flex items-center sm:btn-xl brand-wa:!font-normal sm:inline-flex\"\n                onClick={(e) => {\n                  userLinks.signUpLink?.onClick?.(e);\n                  sendReward('nav-join-click');\n                  sendInteractionReward();\n                }}\n              >\n                {t('signUp')}\n              </Link>\n            </li>\n          ) : null}\n          {userLinks.signInLink ? (\n            <li className=\"px-2 first:ps-0 last:pe-0 sm:px-3\">\n              <Login onOpen={sendInteractionReward} {...{ ...defaultOptions, ...loginOptions }} />\n            </li>\n          ) : null}\n        </ul>\n      ) : null}\n    </nav>\n  );\n}\n\nfunction MainNav({\n  links,\n  suppressLogo,\n}: {\n  links: LinkWithExperimentationConfiguration[];\n  suppressLogo: HeaderProps['suppressLogo'];\n}) {\n  const navRef = React.useRef<React.ElementRef<'div'>>(null);\n  const [isBeforeVisible, setBeforeVisible] = React.useState(false);\n  const [isAfterVisible, setAfterVisible] = React.useState(false);\n\n  const onChange = React.useCallback((rect: DOMRect | undefined) => {\n    const scrollLeft = navRef.current?.scrollLeft ?? 0;\n    const scrollWidth = navRef.current?.scrollWidth ?? 0;\n    const navWidth = rect?.width || 0;\n    const widthDiff = scrollWidth - navWidth;\n    const newBefore = scrollLeft > 5 && widthDiff > 0;\n    const newAfter = widthDiff > 0 && widthDiff - scrollLeft > 5;\n    setBeforeVisible(newBefore);\n    setAfterVisible(newAfter);\n  }, []);\n  const navRect = useRect({ ref: navRef, onResize: onChange });\n  const onNavScroll = React.useCallback(() => navRect && onChange(navRect), [onChange, navRect]);\n  return (\n    <nav\n      className={cx(\n        'relative order-last -mx-4 mt-2 overflow-hidden border-t border-solid border-border px-4 py-2 flex-basis-full sm:-mx-8 sm:px-8 lg:order-none lg:mx-0 lg:mt-0 lg:grow lg:overflow-auto lg:border-t-0 lg:px-4 lg:flex-basis-auto',\n        {\n          'lg:ps-0': suppressLogo,\n          'header-nav-before': isBeforeVisible,\n          'header-nav-after': isAfterVisible,\n        }\n      )}\n    >\n      <div\n        ref={navRef}\n        onScroll={onNavScroll}\n        className=\"w-full overflow-x-scroll py-1 lg:overflow-x-visible lg:py-0\"\n      >\n        <ul className=\"flex flex-nowrap items-center space-x-6 rtl:space-x-reverse\">\n          {links.map(({ label, experimentationConfiguration, ...linkProps }) => (\n            <li\n              key={`main-nav-link-${label}`}\n              className=\"text-text focus-within:text-text-alt hover:text-text-alt\"\n            >\n              <Link\n                {...linkProps}\n                underline={false}\n                className=\"whitespace-nowrap text-base font-bold brand-wa:font-normal\"\n                onClick={(e) => {\n                  linkProps.onClick?.(e);\n                  sendInteractionReward();\n                }}\n                data-conductrics-goal={experimentationConfiguration?.goal}\n                data-conductrics-value={experimentationConfiguration?.value}\n              >\n                {label}\n              </Link>\n            </li>\n          ))}\n        </ul>\n      </div>\n    </nav>\n  );\n}\nfunction useJoinFromModalTest() {\n  const { selection, isLoaded } = useConductricsSelection(\n    joinModalConductricsTestAgent,\n    Status.PENDING\n  );\n  return isLoaded && selection?.choice === 'B';\n}\n\nHeader.displayName = 'Header';\n\nexport default Header;\n","import type { Agent, ConductricsSelection } from '@dx-ui/framework-conductrics';\nimport { useConductricsSelection, useShouldRenderExperiment } from '@dx-ui/framework-conductrics';\nimport { filterMegaNavExperiments } from '../util/filter-mega-nav-experiments';\nimport type { TDrawerItem } from '../types';\n\n/**\n * Filters mega nav links by Conductrics agent(s).\n * Conductrics agents are automatically fetched by this hook if links have an agent defined.\n */\nexport function useFilterMegaNavExperiments(megaNavLinks: TDrawerItem[] | undefined) {\n  const agents = findAgentsToFetch(megaNavLinks);\n  const selections = useConsistentConductricsSelection(agents);\n  const shouldRenderExperiment = useShouldRenderExperiment();\n  return filterMegaNavExperiments(megaNavLinks, selections, shouldRenderExperiment);\n}\n\n/**\n * Loop over navigation drawer items to find agent IDs that need to be fetched via Conductrics\n */\nfunction findAgentsToFetch(megaNavLinks?: TDrawerItem[]): Agent[] {\n  if (!megaNavLinks) {\n    return [];\n  }\n\n  const agents = new Set<string>();\n\n  for (const item of megaNavLinks) {\n    if (item.link?.experimentationConfiguration?.agentId) {\n      agents.add(item.link.experimentationConfiguration.agentId);\n    }\n\n    if (Array.isArray(item.subMenu)) {\n      for (const subMenuItem of item.subMenu) {\n        if (subMenuItem.link?.experimentationConfiguration?.agentId) {\n          agents.add(subMenuItem.link.experimentationConfiguration.agentId);\n        }\n      }\n    }\n  }\n\n  return Array.from(agents).map((agentId) => ({ agentId }));\n}\n\n/**\n * Always returns a Record<string, ConductricsSelection>\n *\n * useConductricsSelection will return an object that is of type `ConductricsSelection` instead of\n * Record<AgentID, ConductricsSelection> when there is an array with a single agent ID passed to it.\n * We need to convert this to a record for the filter function.\n */\nfunction useConsistentConductricsSelection(agents: Agent[]) {\n  const isSingleAgent = agents.length === 1;\n  const selections = useConductricsSelection(agents);\n\n  if (isSingleAgent && isConductricsSingleSelection(selections)) {\n    const agentId = agents?.[0]?.agentId;\n\n    return {\n      [`${agentId}`]: selections,\n    };\n  }\n\n  return selections;\n}\n\nfunction isConductricsSingleSelection(value: unknown): value is ConductricsSelection {\n  return (\n    typeof value === 'object' &&\n    value !== null &&\n    'isLoaded' in value &&\n    'error' in value &&\n    'selection' in value\n  );\n}\n","export * from './lib/header';\nexport { getBaseNavLinksFromEnv } from './lib/header.utilities';\nexport * from './lib/types';\nexport * from './lib/util/filter-mega-nav-experiments';\nexport * from './lib/hooks/use-filter-mega-nav-experiments';\n","import { useState, useEffect, useCallback } from 'react';\nimport { env } from '../../constants';\nimport type { LoginResponse } from '@dx-ui/osc-login';\nimport { Header, type HeaderProps } from '@dx-ui/osc-header';\nimport { generateSignupUrl, persistSessionState } from '../../utils';\nimport { useRouter } from 'next/router';\nimport { useBrandDetails, useMetrics, useWrappedRouter } from '../../hooks';\nimport { useAuth, getGuestFirstName } from '@dx-ui/framework-auth-provider';\nimport type { Maybe } from '@dx-ui/queries-dx-shop-search-ui';\nimport { removePrimarySlug, sanitizedSearchUrlParams } from './header-utils';\nimport { useAppState } from '../../providers/app-provider';\nimport { useFilterState } from '../../providers/filter-provider';\n\ntype SearchHeaderProps = {\n  brandCode?: Maybe<string>;\n  brandName?: string;\n  isFluid?: boolean;\n};\n\nexport const SearchHeader = ({ brandCode, isFluid }: SearchHeaderProps) => {\n  const [user, setUser] = useState<HeaderProps['user']>();\n  const metrics = useMetrics();\n  const router = useRouter();\n  const { safeQueryParams: queryParameters } = useWrappedRouter();\n  const { guestInfo, login, logout } = useAuth();\n  const { shouldUsePoints, selectedCurrency, sortType } = useAppState();\n  const activeFiltersState = useFilterState();\n\n  useEffect(() => {\n    setUser(\n      guestInfo\n        ? {\n            name: getGuestFirstName({ guestInfo }),\n            honorsTier: guestInfo?.hhonors?.summary?.tierName || '',\n            honorsPoints: guestInfo?.hhonors?.summary?.totalPoints || 0,\n            honorsPointsFmt: guestInfo?.hhonors?.summary?.totalPointsFmt || '',\n            hhonorsNumber: guestInfo?.hhonors?.hhonorsNumber || '',\n          }\n        : undefined\n    );\n  }, [guestInfo]);\n\n  const onSignInAttempt: HeaderProps['onSignInAttempt'] = useCallback(\n    async (resp: LoginResponse) => {\n      persistSessionState({\n        shouldUsePoints,\n        selectedCurrency,\n        sortType,\n        activeFiltersState,\n      });\n      if (resp?.data) {\n        await login(resp);\n      }\n    },\n    [activeFiltersState, login, selectedCurrency, shouldUsePoints, sortType]\n  );\n\n  const onSignOut: HeaderProps['onSignOut'] = useCallback(async () => {\n    metrics.trackSignoutClick();\n    await logout().then(() => {\n      //TODO:NHCSEARCH-4988 refactor this function to use URL API to remove slugs/create new urls\n      const urlWithoutPrimarySlug = removePrimarySlug(window.location.href);\n      const sanitizedUrl = sanitizedSearchUrlParams(urlWithoutPrimarySlug);\n\n      return router.push(sanitizedUrl.href);\n    });\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [logout, metrics, queryParameters?.primarySlug]);\n\n  const lang = router.locale as string;\n\n  //HACK: PAUL. Actively asking core+ to add this to hotelsummaryoptions.brands array. Should not be held by UI...\n  const brand = useBrandDetails({ brandCode: brandCode || 'WW' });\n\n  const forgetInfoUrl = env.PARTNER_FORGET_INFO_LINK.replace('/__LANG__/', `/${lang}/`);\n\n  return (\n    <Header\n      brand={brand}\n      isFluid={isFluid}\n      loginOptions={{\n        options: {\n          showCreatePassword: true,\n          forgetInfoLink: { url: forgetInfoUrl },\n          secureInfoLink: { url: env.GLOBAL_PRIVACY_URL },\n          joinLink: { url: generateSignupUrl(), underline: false },\n        },\n      }}\n      onSignInAttempt={onSignInAttempt}\n      onSignOut={onSignOut}\n      user={user}\n      showNewHeader={true}\n      languageSelectorOptions={{\n        onLanguageSelection: () =>\n          persistSessionState({ shouldUsePoints, selectedCurrency, sortType, activeFiltersState }),\n        appName: env.APP_NAME,\n        locale: lang,\n        labelOptions: {\n          className: 'text-sm',\n        },\n        buttonOptions: {\n          className: 'text-sm',\n        },\n      }}\n      shouldOpenAccountLinksInNewWindow\n    />\n  );\n};\n","export * from './search-header';\n","import cx from 'classnames';\nimport * as React from 'react';\nimport { useTranslation } from 'next-i18next';\nimport { Link } from '@dx-ui/osc-link';\nimport type { SocialMediaLink } from './footer.types';\nimport { useIsClient } from 'usehooks-ts';\n\ntype LinkWithExperimentationConfiguration = Link & {\n  experimentationConfiguration?: CmsExperimentationConfiguration;\n};\n\nexport type Footer = {\n  /** Allows for a fluid width layout */\n  isFluid?: boolean;\n  /** The customer support link to use. */\n  customerSupportLink?: Link;\n  /** The contact number for the help desk */\n  contactPhoneLink?: Link;\n  /** The links displayed horizontally at bottom */\n  legalLinks?: Link[];\n  /** The main footer links to be displayed in vertical columns divided equally */\n  links?: LinkWithExperimentationConfiguration[];\n  /** Social media links to be displayed horizontally under contact information */\n  socialLinks?: SocialMediaLink[];\n  /** Theme choice for footer */\n  theme?: Exclude<CmsBrandComponentTheme, 'light'>;\n} & React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * A shared footer implementation that is intended to used across OHW UI apps to give a consistent experience for customers to navigate key links.\n *\n * All links within the footer are [Link](/docs/library-components-link--default-story) components.\n */\nexport const Footer = React.forwardRef<HTMLDivElement, Footer>(\n  (\n    {\n      customerSupportLink,\n      isFluid = false,\n      legalLinks,\n      links: footerLinks = [],\n      contactPhoneLink,\n      socialLinks,\n      theme,\n      ...rest\n    },\n    forwardedRef\n  ) => {\n    const isClient = useIsClient();\n    const teConsentRef = React.useRef<HTMLDivElement>(null);\n    const { t } = useTranslation('osc-footer');\n    const links = React.useMemo(\n      () =>\n        [\n          ...footerLinks,\n          isClient\n            ? ({\n                id: 'teconsent',\n                url: '',\n                ref: teConsentRef,\n              } as unknown as Link)\n            : null,\n        ].filter(Boolean) as LinkWithExperimentationConfiguration[],\n      [footerLinks, isClient]\n    );\n\n    const footerNavLength = links.length;\n    const footerNavHalfPoint = footerNavLength > 6 ? Math.ceil(footerNavLength * 0.5) : 0;\n    const footerNavFirstHalf = links.slice(0, footerNavHalfPoint);\n    const footerNavSecondHalf = links.slice(footerNavHalfPoint, footerNavLength);\n\n    const isDark = theme === 'dark';\n\n    React.useEffect(() => {\n      if (!isClient) return;\n      if (!teConsentRef.current) return;\n      const callback: MutationCallback = (mutationList) => {\n        for (const mutation of mutationList) {\n          if (mutation.type === 'childList') {\n            teConsentRef.current?.parentElement?.removeAttribute('aria-hidden');\n          }\n        }\n      };\n      const observer = new MutationObserver(callback);\n      observer.observe(teConsentRef.current, { childList: true, subtree: true });\n      return () => observer.disconnect();\n    }, [isClient]);\n\n    return (\n      <footer\n        className={cx('border-t border-solid border-border', {\n          'bg-bg-dark text-text-inverse': isDark,\n        })}\n        data-testid=\"osc-footer\"\n        ref={forwardedRef}\n        {...rest}\n      >\n        <div\n          className={cx('pb-8 pt-4', {\n            'container-fluid': isFluid,\n            container: !isFluid,\n          })}\n        >\n          <div className=\"mb-10 flex flex-col lg:flex-row\">\n            <div className=\"lg:w-1/2\">\n              <h2 data-osc-product=\"footer-help-label\" className=\"text-lg\">\n                {t('helpMessage')}\n              </h2>\n              <div className=\"mt-4 md:flex md:divide-x md:divide-border rtl:divide-x-reverse\">\n                {!!contactPhoneLink && (\n                  <div\n                    className={cx(\n                      'md:px-4 ltr:first:pl-0 ltr:last:pr-0 rtl:first:pr-0 rtl:last:pl-0',\n                      {\n                        '[&_button#call-me-modal-trigger]:!text-primary [&_#call-me-modal-trigger_span]:!text-primary [&_button#call-me-modal-trigger]:!bg-bg [&_button#call-me-modal-trigger]:hover:!bg-bg-alt [&_#call-me-number-link_span]:!text-text-inverse [&_#call-me-global-support-link]:!text-text-inverse [&_#call-me-global-support-link_+_svg]:!fill-text-inverse':\n                          isDark,\n                      }\n                    )}\n                    {...(isClient && { id: 'callme-wrapper' })}\n                  >\n                    <Link\n                      {...contactPhoneLink}\n                      underline={false}\n                      className={cx('whitespace-nowrap text-lg font-bold', {\n                        'text-primary hover:text-primary-alt': !theme,\n                        'text-text-inverse hover:text-bg-alt': isDark,\n                      })}\n                    >\n                      <span className=\"sr-only\">{t('phone')}</span>\n                      <div className=\"uppercase\">{contactPhoneLink.label}</div>\n                    </Link>\n                    <div>\n                      <Link\n                        url=\"https://help.hilton.com/s/article/Global-support-numbers?_gl=1*4wzil3*_gcl_au*MTQwMjAwODgzMi4xNzMzMjM3ODgw\"\n                        isNewWindow={true}\n                        className={cx('text-sm', {\n                          'text-primary hover:text-primary-alt': !theme,\n                          'text-text-inverse': isDark,\n                        })}\n                      >\n                        {t('callMessage')}\n                      </Link>\n                    </div>\n                  </div>\n                )}\n                {!!customerSupportLink && (\n                  <div className=\"mt-4 md:mt-0 md:px-4\">\n                    <Link\n                      {...customerSupportLink}\n                      underline={false}\n                      className=\"whitespace-nowrap text-lg font-bold text-primary hover:text-primary-alt\"\n                    >\n                      {customerSupportLink.label || t('customerSupport')}\n                    </Link>\n                    <p className=\"text-sm text-text-alt\">{t('assistance')}</p>\n                  </div>\n                )}\n              </div>\n              {socialLinks && socialLinks?.length > 0 && (\n                <div className=\"py-4 lg:pt-8\">\n                  <ul className=\"flex items-center space-x-4 rtl:space-x-reverse\">\n                    {socialLinks.map(({ channel, url }) => {\n                      return (\n                        <li key={`footer-social-${channel}`}>\n                          <a\n                            href={url}\n                            className=\"block\"\n                            target=\"_blank\"\n                            rel=\"noopener noreferrer\"\n                            aria-label={`${channel}, ${t('newTab')}`}\n                          >\n                            <img\n                              alt={channel}\n                              className=\"size-8\"\n                              src={`/modules/assets/svgs/social/${channel}.svg`}\n                            />\n                            <span className=\"sr-only\">, {t('newTab')}</span>\n                          </a>\n                        </li>\n                      );\n                    })}\n                  </ul>\n                </div>\n              )}\n            </div>\n            <div className=\"mt-8 w-full md:flex md:space-x-20 lg:mt-0 lg:w-2/4 lg:justify-end lg:space-x-8 rtl:space-x-reverse\">\n              {footerNavFirstHalf.length > 0 && (\n                <ul>\n                  {footerNavFirstHalf.map(\n                    ({\n                      adaDescription,\n                      isNewWindow,\n                      label,\n                      experimentationConfiguration,\n                      ...props\n                    }) => (\n                      <li\n                        className=\"mb-2\"\n                        key={label || props?.id || props?.url}\n                        {...handleTeconsentParentProps(props)}\n                      >\n                        <Link\n                          {...props}\n                          anchorClassName={cx(props.anchorClassName, {\n                            'text-text-inverse *:!text-text-inverse': isDark,\n                          })}\n                          adaDescription={adaDescription}\n                          isNewWindow={isNewWindow}\n                          data-conductrics-goal={experimentationConfiguration?.goal}\n                          data-conductrics-value={experimentationConfiguration?.value}\n                        >\n                          {label}\n                        </Link>\n                      </li>\n                    )\n                  )}\n                </ul>\n              )}\n              {footerNavSecondHalf.length > 0 && (\n                <ul>\n                  {footerNavSecondHalf.map(\n                    ({\n                      adaDescription,\n                      isNewWindow,\n                      label,\n                      experimentationConfiguration,\n                      ...props\n                    }) => (\n                      <li\n                        className=\"mb-2\"\n                        key={label || props.url || props?.id}\n                        {...handleTeconsentParentProps(props)}\n                      >\n                        <Link\n                          {...props}\n                          className={cx('text-sm text-primary hover:text-primary-alt', {\n                            '*:text-primary': !theme,\n                            '*:text-text-inverse': isDark,\n                          })}\n                          anchorClassName={cx({\n                            'text-text-inverse *:!text-text-inverse': isDark,\n                          })}\n                          adaDescription={adaDescription}\n                          isNewWindow={isNewWindow}\n                          data-conductrics-goal={experimentationConfiguration?.goal}\n                          data-conductrics-value={experimentationConfiguration?.value}\n                        >\n                          {label}\n                        </Link>\n                      </li>\n                    )\n                  )}\n                </ul>\n              )}\n            </div>\n          </div>\n          {legalLinks && legalLinks.length > 0 && (\n            <div>\n              <ul className=\"flex flex-wrap divide-x divide-border rtl:divide-x-reverse\">\n                {legalLinks.map(({ adaDescription, label, isNewWindow, ...props }) => (\n                  <li\n                    className=\"mt-2 px-4 ltr:first:pl-0 rtl:first:pr-0 rtl:last:px-0\"\n                    key={label || props.url || props?.id}\n                  >\n                    <Link\n                      {...props}\n                      className={cx({\n                        'text-text-inverse': isDark,\n                      })}\n                      adaDescription={adaDescription}\n                      isNewWindow={isNewWindow}\n                    >\n                      {label}\n                    </Link>\n                  </li>\n                ))}\n              </ul>\n            </div>\n          )}\n          <p\n            className={cx('text-sm text-text-alt', {\n              'pt-2': legalLinks && legalLinks.length > 0,\n              'text-text-inverse': isDark,\n            })}\n            suppressHydrationWarning\n          >\n            &copy;{new Date().getFullYear()} Hilton\n          </p>\n        </div>\n      </footer>\n    );\n  }\n);\n\nfunction handleTeconsentParentProps(props: Link) {\n  if (props.id === 'teconsent') {\n    return {\n      'aria-hidden': true,\n    };\n  }\n}\n\nFooter.displayName = 'Footer';\n\nexport default Footer;\n","export * from './footer';\nexport * from './footer.types';\n","export * from './lib/index';\n","import type { Link } from '@dx-ui/osc-link';\nimport { env } from '../../constants';\nimport type { TFunction } from 'i18next';\n\n/**\n * Hardcoded links are intended to be temporary until live CMS links are pulled in.\n * _id fields are carried over from a baseline query and are solely used to ensure\n * the footer implementation has something unique for the\n * key fields in the li elements.\n */\nexport const FOOTER_LINKS = (t: TFunction<'footer'>, locale: string): Link[] =>\n  [\n    {\n      isNewWindow: false,\n      label: t('globalPrivacyStatement'),\n      url: `${env.OHW_BASE_URL}${locale}/p/global-privacy-statement/`,\n    },\n    {\n      isNewWindow: false,\n      label: t('careers'),\n      url: 'https://jobs.hilton.com',\n    },\n    {\n      isNewWindow: false,\n      label: t('development'),\n      url: 'https://www.hilton.com/en/corporate/development/',\n    },\n    locale === 'en'\n      ? {\n          isNewWindow: false,\n          label: t('creditCards'),\n          url: `${env.OHW_BASE_URL}${locale}/hilton-honors/credit-cards/?cid=OH,,GlobalFooterCobrandAllCardsAcqAlwaysOn,MultiBR,,Home,SingleLink,i83471`,\n        }\n      : null,\n    {\n      isNewWindow: false,\n      label: t('media'),\n      url: 'https://stories.hilton.com',\n    },\n    {\n      isNewWindow: false,\n      label: t('webAccessibility'),\n      url: `${env.OHW_BASE_URL}${locale}/p/accessibility/`,\n    },\n    {\n      isNewWindow: false,\n      label: t('siteUsageAgreement'),\n      url: `${env.OHW_BASE_URL}${locale}/p/site-usage-agreement/`,\n    },\n    {\n      isNewWindow: false,\n      label: t('partnerAccommodations'),\n      url: `${env.OHW_BASE_URL}${locale}/p/partner-accommodations-terms/`,\n    },\n    {\n      isNewWindow: false,\n      label: t('modernSlaveryAndHumanTrafficking'),\n      url: 'https://cr.hilton.com/wp-content/uploads/2021/06/Hilton-Slavery-and-Trafficking-Statement-2020.pdf',\n    },\n    {\n      isNewWindow: false,\n      label: t('hhDiscountTermsAndConditions'),\n      url: `${env.OHW_BASE_URL}${locale}/hilton-honors/honors-discount-terms/`,\n    },\n    {\n      isNewWindow: false,\n      label: t('tourismMediator'),\n      url: `${env.OHW_BASE_URL}${locale}/p/tourism-and-travel/`,\n    },\n    {\n      isNewWindow: true,\n      label: t('adChoices'),\n      url: 'https://optout.aboutads.info/#!/',\n    },\n  ].filter(Boolean) as Link[];\n","import { Footer as OSCFooter } from '@dx-ui/osc-footer';\nimport { useTranslation } from 'next-i18next';\nimport { useRouter } from 'next/router';\nimport { FOOTER_LINKS } from './footer-information';\n\nconst Footer = ({ isFluid }: { isFluid?: boolean }) => {\n  const { t } = useTranslation('footer');\n  const { locale } = useRouter();\n\n  return (\n    <OSCFooter\n      contactPhoneLink={{ url: 'tel:+1-800-446-6677', label: '+1-800-4honors' }}\n      customerSupportLink={{\n        url: 'https://help.hilton.com/s/',\n        target: '_blank',\n        rel: 'noopener noreferrer',\n      }}\n      isFluid={isFluid}\n      links={FOOTER_LINKS(t, locale || 'en')}\n    />\n  );\n};\n\nexport default Footer;\n","import type { Child } from '@dx-ui/framework-uri-builder';\n\nexport const DEFAULT_FORM_VALUES = {\n  attendee_count: 0,\n  brandCode: 'HH',\n  dates: {\n    arrivalDate: null,\n    datesFlex: false,\n    departureDate: null,\n  },\n  hhonors: null,\n  numNights: null,\n  numRooms: null,\n  numAttendees: null,\n  placeId: '',\n  query: '',\n  rooms: [\n    {\n      adults: 1,\n      children: [] as Child[],\n    },\n  ],\n  sessionToken: '',\n  specialRates: {\n    aaaRate: false,\n    aarpRate: false,\n    corporateCode: '',\n    employeeRate: false,\n    friendsAndFamilyRate: false,\n    governmentOrMilitaryRate: false,\n    groupCode: '',\n    offerId: null,\n    ownerHGVRate: false,\n    ownerVIPRate: false,\n    pnd: null,\n    promoCode: '',\n    redeemPts: false,\n    requestedRatesOnly: false,\n    searchedRatePlanDescription: '',\n    seniorRate: false,\n    smbRate: false,\n    travelAgentId: '',\n    useOfferId: false,\n    usePnd: false,\n    useRequestedRatesOnly: false,\n    travelAgentRate: false,\n  },\n};\n","import type { GuestQuery } from '@dx-ui/framework-auth-provider';\nimport type SpecialRates from './special-rates';\n\nexport type Hhonors = NonNullable<GuestQuery['guest']>['hhonors'];\n\nexport const isTeamMember = (hhonors?: Hhonors) =>\n  Boolean(hhonors?.isTeamMember || hhonors?.isTeamMemberSpouse || hhonors?.isLongTenure20);\n\nexport const isFriendsAndFamily = (hhonors?: Hhonors) =>\n  Boolean(hhonors?.isFamilyAndFriends || hhonors?.isLongTenure10);\n\nexport const isOwner = (hhonors?: Hhonors) => Boolean(hhonors?.isOwner || hhonors?.isOwnerHGV);\n\nexport const isHGVMax = (hhonors?: Hhonors) => Boolean(hhonors?.isOwnerHGVNew);\n\nexport const isTMTPProgramMember = (hhonors?: Hhonors) =>\n  isTeamMember(hhonors) || isFriendsAndFamily(hhonors) || isOwner(hhonors);\n\nexport const isSmbMember = (hhonors?: Hhonors) => Boolean(hhonors?.isSMBMember);\n\nexport const isTMTPRateSelected = (specialRates?: SpecialRates) =>\n  Boolean(specialRates?.employeeRate) ||\n  Boolean(specialRates?.friendsAndFamilyRate) ||\n  Boolean(specialRates?.ownerVIPRate);\n\nexport const isHGVMaxRateSelected = (specialRates?: SpecialRates) =>\n  Boolean(specialRates?.ownerHGVRate);\n\nexport const isSMBRateSelected = (specialRates?: SpecialRates) => Boolean(specialRates?.smbRate);\n","import { FormInput } from '@dx-ui/osc-form';\nimport { useTranslation } from 'next-i18next';\nimport type { Hhonors } from './utils';\nimport { isOwner, isTeamMember, isFriendsAndFamily, isHGVMax, isSmbMember } from './utils';\nimport { useFormContext } from 'react-hook-form';\nimport { useSMBContextLocalStorage } from '@dx-ui/utilities-use-smb-context-local-storage';\n\nexport type SpecialRates = {\n  aaaRate: boolean;\n  aarpRate?: boolean;\n  corporateCode: string;\n  employeeRate: boolean;\n  friendsAndFamilyRate: boolean;\n  governmentOrMilitaryRate: boolean;\n  groupCode: string;\n  offerId: null | { id?: number; name?: string };\n  ownerHGVRate: boolean;\n  ownerVIPRate: boolean;\n  pnd: null | { pnd?: string; name?: string };\n  promoCode: string;\n  redeemPts: boolean;\n  requestedRatesOnly: boolean;\n  searchedRatePlanDescription: string;\n  seniorRate: boolean;\n  smbRate: boolean;\n  travelAgentId: string;\n  travelAgentRate: boolean;\n  useOfferId: boolean;\n  usePnd: boolean;\n  useRequestedRatesOnly: boolean;\n};\n\nexport type SpecialRatesKey = keyof SpecialRates;\n\nexport const specialRatesKeys: Array<SpecialRatesKey> = [\n  'aaaRate',\n  'aarpRate',\n  'corporateCode',\n  'employeeRate',\n  'friendsAndFamilyRate',\n  'governmentOrMilitaryRate',\n  'groupCode',\n  'offerId',\n  'ownerHGVRate',\n  'ownerVIPRate',\n  'pnd',\n  'promoCode',\n  'redeemPts',\n  'requestedRatesOnly',\n  'searchedRatePlanDescription',\n  'seniorRate',\n  'smbRate',\n  'travelAgentId',\n  'travelAgentRate',\n  'useOfferId',\n  'usePnd',\n  'useRequestedRatesOnly',\n] as const;\n\nexport function isSpecialRatesKey(someString: string): someString is keyof SpecialRates {\n  return Boolean(specialRatesKeys.find((value) => someString === value));\n}\n\nexport type SpecialRatesFormContext = { specialRates: SpecialRates; hhonors: Hhonors };\n\nexport const SpecialRates = ({\n  shouldDisablePoints = false,\n  shouldEnableSMBContextAwareRates = false,\n  shouldDisableAARP = false,\n}: {\n  /**  option to disable use points checkbox */\n  shouldDisablePoints?: boolean;\n  /** Are we checking SMB Context to determine whether to show SMB Rates */\n  shouldEnableSMBContextAwareRates?: boolean;\n  shouldDisableAARP?: boolean;\n}) => {\n  const [t] = useTranslation('osc-special-rates');\n  const { watch } = useFormContext<SpecialRatesFormContext>();\n  const { smbContext } = useSMBContextLocalStorage(shouldEnableSMBContextAwareRates);\n\n  const promoCode = watch('specialRates.promoCode');\n  const groupCode = watch('specialRates.groupCode');\n  const corporateCode = watch('specialRates.corporateCode');\n  const isOfferIdSelected = watch('specialRates.useOfferId');\n  const isPndSelected = watch('specialRates.usePnd');\n  const smbRate = watch('specialRates.smbRate');\n  const hhonors = watch('hhonors');\n  const offerId = watch('specialRates.offerId');\n  const pnd = watch('specialRates.pnd');\n  const searchedRatePlanDescription = watch('specialRates.searchedRatePlanDescription');\n  const requestedRatesOnly = watch('specialRates.requestedRatesOnly');\n  const requestedRatesOnlySelected = watch('specialRates.useRequestedRatesOnly');\n  const isOnBusinessProfile = smbContext === 'business';\n  const isSMBRatesEnabled = shouldEnableSMBContextAwareRates ? isOnBusinessProfile : true;\n\n  const oneCode =\n    [\n      !!promoCode,\n      !!groupCode,\n      !!corporateCode,\n      !!isPndSelected,\n      !!isOfferIdSelected,\n      !!requestedRatesOnlySelected,\n    ].filter(Boolean).length > 0;\n\n  const showSMBCheckbox = isSmbMember(hhonors) && isSMBRatesEnabled;\n  const isCorpFieldDisabled =\n    !!isPndSelected ||\n    ((oneCode || !!smbRate) && !corporateCode) ||\n    (shouldEnableSMBContextAwareRates && isOnBusinessProfile);\n\n  return (\n    <div className=\"w-full space-y-4\" data-testid=\"special-rates\">\n      <div\n        data-osc-product=\"search-rates-first\"\n        className=\"grid h-auto gap-4 md:grid-cols-1 lg:grid-cols-2\"\n      >\n        <FormInput\n          disabled={shouldDisablePoints}\n          type=\"checkbox\"\n          label={t('usePoints')}\n          name=\"specialRates.redeemPts\"\n        />\n        <FormInput type=\"checkbox\" label={t('travelAgents')} name=\"specialRates.travelAgentRate\" />\n        <FormInput type=\"checkbox\" label={t('aaaRate')} name=\"specialRates.aaaRate\" />\n        {shouldDisableAARP ? null : (\n          <FormInput type=\"checkbox\" label={t('aarpRate')} name=\"specialRates.aarpRate\" />\n        )}\n        <FormInput type=\"checkbox\" label={t('seniorRate')} name=\"specialRates.seniorRate\" />\n        <FormInput\n          type=\"checkbox\"\n          label={t('gvmtRates')}\n          name=\"specialRates.governmentOrMilitaryRate\"\n        />\n        {(isOwner(hhonors) || isTeamMember(hhonors)) && (\n          <FormInput type=\"checkbox\" label={t('employeeRate')} name=\"specialRates.employeeRate\" />\n        )}\n        {(isOwner(hhonors) || isTeamMember(hhonors) || isFriendsAndFamily(hhonors)) && (\n          <FormInput\n            type=\"checkbox\"\n            label={t('friendsAndFamilyRate')}\n            name=\"specialRates.friendsAndFamilyRate\"\n          />\n        )}\n        {isOwner(hhonors) && (\n          <FormInput type=\"checkbox\" label={t('ownerVIPRate')} name=\"specialRates.ownerVIPRate\" />\n        )}\n        {isHGVMax(hhonors) && (\n          <FormInput type=\"checkbox\" label={t('hgvMaxRate')} name=\"specialRates.ownerHGVRate\" />\n        )}\n        {showSMBCheckbox ? (\n          <label className=\"label\">\n            <FormInput type=\"checkbox\" label={t('smbRate')} name=\"specialRates.smbRate\" />\n          </label>\n        ) : null}\n      </div>\n      <div className=\"space-y-2\">\n        {offerId?.name || pnd?.name || requestedRatesOnly ? (\n          <div className=\"grid gap-4 md:grid-cols-1 lg:grid-cols-2\">\n            {offerId?.name || requestedRatesOnly ? (\n              <label className=\"label\">\n                <span className=\"rtl:pr-1\">{t('promoCode')}</span>\n                <FormInput\n                  type=\"checkbox\"\n                  label={\n                    searchedRatePlanDescription\n                      ? searchedRatePlanDescription\n                      : requestedRatesOnly\n                      ? t('specialOffer')\n                      : offerId?.name\n                  }\n                  name={\n                    requestedRatesOnly\n                      ? 'specialRates.useRequestedRatesOnly'\n                      : 'specialRates.useOfferId'\n                  }\n                />\n              </label>\n            ) : null}\n            {pnd?.name ? (\n              <label className=\"label\">\n                <span className=\"rtl:pr-1\">{t('corpAccount')}</span>\n                <FormInput type=\"checkbox\" label={pnd?.name} name=\"specialRates.usePnd\" />\n              </label>\n            ) : null}\n          </div>\n        ) : null}\n        <div\n          data-osc-product=\"search-rates-second\"\n          className=\"grid gap-4 md:grid-cols-1 lg:grid-cols-2\"\n        >\n          {!offerId?.name && !requestedRatesOnly ? (\n            <FormInput\n              label={t('promoCode')}\n              labelClassName=\"w-full\"\n              name=\"specialRates.promoCode\"\n              disabled={!!isOfferIdSelected || (oneCode && !promoCode)}\n              maxLength={6}\n              registerOptions={{\n                pattern: {\n                  value: /^[A-Za-z0-9]{2,6}$/,\n                  message: t('promoCodeError'),\n                },\n              }}\n            />\n          ) : null}\n          <FormInput\n            label={t('groupCode')}\n            labelClassName=\"w-full\"\n            name=\"specialRates.groupCode\"\n            disabled={oneCode && !groupCode}\n            maxLength={6}\n            registerOptions={{\n              pattern: {\n                value: /^[A-Za-z0-9]{2,6}$/,\n                message: t('groupCodeError'),\n              },\n            }}\n          />\n          <div>\n            {!pnd?.name ? (\n              <FormInput\n                label={t('corpAccount')}\n                labelClassName=\"w-full\"\n                name=\"specialRates.corporateCode\"\n                disabled={isCorpFieldDisabled}\n                maxLength={10}\n                registerOptions={{\n                  pattern: {\n                    value: /^[A-Za-z0-9]{2,10}$/,\n                    message: t('corpAccountError'),\n                  },\n                }}\n              />\n            ) : null}\n          </div>\n        </div>\n      </div>\n      <div className=\"text-text-alt\" aria-live=\"polite\">\n        {oneCode && (\n          <div className=\"flex gap-1\">\n            <svg\n              xmlns=\"http://www.w3.org/2000/svg\"\n              viewBox=\"0 0 24 24\"\n              aria-hidden=\"true\"\n              focusable=\"false\"\n              className=\"size-5 shrink-0 text-text-disabled\"\n            >\n              <circle fill=\"#FFF\" cx=\"12\" cy=\"12\" r=\"11.5\" />\n              <circle fill=\"currentColor\" cx=\"12\" cy=\"12\" r=\"10\" />\n              <path\n                fill=\"#FFF\"\n                d=\"m14 15.25h-1.25v-4.25c0-.41-.34-.75-.75-.75h-2c-.41 0-.75.34-.75.75s.34.75.75.75h1.25v3.5h-1.25c-.41 0-.75.34-.75.75s.34.75.75.75h4c.41 0 .75-.34.75-.75s-.34-.75-.75-.75z\"\n              />\n              <path fill=\"#FFF\" d=\"m12 9c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1z\" />\n            </svg>{' '}\n            {t('oneCodeError')}\n          </div>\n        )}\n      </div>\n    </div>\n  );\n};\n\nexport default SpecialRates;\n","export * from './lib/special-rates';\nexport * from './lib/utils';\n","import type * as Types from './types';\n\nimport {\n  useQuery,\n  type QueryClient,\n  type FetchQueryOptions,\n  type UseQueryOptions,\n} from '@tanstack/react-query';\nimport type { DXError } from '@dx-ui/types-graphql';\n\nexport const FeatureTogglesDocument = {\n  operationName: 'featureToggles_featureConfigs',\n  operationString: `query featureToggles_featureConfigs($names: [String!]!) {\n  featureToggles(names: $names) {\n    enabled\n    name\n  }\n  featureConfigs(names: $names) {\n    name\n    config\n    conditions\n  }\n}`,\n  originalOpName: 'featureToggles',\n};\nexport function useFeatureTogglesQuery<TData = Types.FeatureTogglesQuery, TError = DXError>(\n  variables: Types.FeatureTogglesQueryVariables,\n  options?: Omit<UseQueryOptions<Types.FeatureTogglesQuery, TError, TData>, 'queryKey'>\n) {\n  return useQuery<Types.FeatureTogglesQuery, TError, TData>({\n    queryKey: [FeatureTogglesDocument, variables],\n    ...options,\n  });\n}\nexport function serverSideFeatureTogglesQuery(\n  queryClient: QueryClient,\n  variables: Types.FeatureTogglesQueryVariables,\n  options?: FetchQueryOptions<Types.FeatureTogglesQuery>\n) {\n  return queryClient.fetchQuery<Types.FeatureTogglesQuery>({\n    queryKey: [FeatureTogglesDocument, variables],\n    ...options,\n  });\n}\n\nexport const GeocodeDocument = {\n  operationName: 'geocode',\n  operationString: `query geocode($address: String, $language: String!, $placeId: String, $sessionToken: String) {\n  geocode(\n    language: $language\n    address: $address\n    placeId: $placeId\n    sessionToken: $sessionToken\n  ) {\n    match {\n      _id\n      id\n      address {\n        _id\n        city\n        country\n        countryName\n        postalCode\n        state\n        stateName\n      }\n      geometry {\n        location {\n          latitude\n          longitude\n        }\n        bounds {\n          northeast {\n            latitude\n            longitude\n          }\n          southwest {\n            latitude\n            longitude\n          }\n        }\n      }\n      name\n      placeUri\n      type\n    }\n  }\n}`,\n  originalOpName: 'geocode',\n};\nexport function useGeocodeQuery<TData = Types.GeocodeQuery, TError = DXError>(\n  variables: Types.GeocodeQueryVariables,\n  options?: Omit<UseQueryOptions<Types.GeocodeQuery, TError, TData>, 'queryKey'>\n) {\n  return useQuery<Types.GeocodeQuery, TError, TData>({\n    queryKey: [GeocodeDocument, variables],\n    ...options,\n  });\n}\nexport function serverSideGeocodeQuery(\n  queryClient: QueryClient,\n  variables: Types.GeocodeQueryVariables,\n  options?: FetchQueryOptions<Types.GeocodeQuery>\n) {\n  return queryClient.fetchQuery<Types.GeocodeQuery>({\n    queryKey: [GeocodeDocument, variables],\n    ...options,\n  });\n}\n","import { dynatrace } from '@dx-ui/framework-logger';\nimport { keepPreviousData, useQuery } from '@tanstack/react-query';\nimport type { AutocompletePrediction } from './use-suggestions';\n\nexport type Predictions = AutocompletePrediction[] | null;\n\nexport type PredictionStatusTypes = 'OK' | 'SELECTION_REQUIRED';\n\nexport type AutoCompleteResponse = {\n  predictions: Predictions;\n  status: PredictionStatusTypes | null;\n};\n\nexport type Coordinate = {\n  latitude: number;\n  longitude: number;\n};\n\nexport type LocationTypes = 'geocode' | 'airport' | 'pointOfInterest' | 'property' | 'address';\n\nexport interface PredictionService {\n  /** The auto-complete service url */\n  uri: string;\n  /** The input text to use for searching locations */\n  input: string;\n  /** The language param to use for the search */\n  language: string;\n  /** The type of location to search for.\n   * Options: `'geocode' | 'airport' | 'pointOfInterest' | 'property' | 'address'`\n   * Can be provided in an array\n   */\n  type?: LocationTypes | LocationTypes[];\n  /** The number of results to limit the search to. * Can be provided in an array with each value corresponding to the `type` option. */\n  count?: number | number[];\n  /** The coordinates to use when making a search. This is used to bias the results based on location */\n  coordinate?: Coordinate;\n  /** Unique id to use when making a search. If one is not supplied one is created using crypto.randomUUID(). @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Crypto/randomUUID} */\n  sessionId?: string;\n  /** Toggle exclusion rules by country */\n  applyExclusions?: boolean;\n}\n\nexport type UsePlacesAutocompleteProps = {\n  /** Enabled autocomplete fetch */\n  isEnabled?: boolean;\n  /** Minimum charters needed to be entered before a search is attempted */\n  minLength?: number;\n  /** Query options that are used when making a search for locations */\n  serviceOptions: PredictionService;\n};\n\nconst mapParamToString = (param: unknown) => {\n  if (Array.isArray(param)) return param.join(',');\n  if (Number.isFinite(param)) return String(param);\n  return String(param);\n};\n\nconst getPredictions = async ({\n  sessionId = crypto.randomUUID(),\n  coordinate,\n  uri,\n  ...params\n}: PredictionService): Promise<AutoCompleteResponse | null> => {\n  const url = new URL(uri, window.location.origin);\n\n  const urlSearchParams = new URLSearchParams({\n    ...(params?.input && { input: params.input }),\n    ...(params?.language && { language: params.language }),\n    ...(params?.type && { type: mapParamToString(params?.type) }),\n    ...(params?.count && { count: mapParamToString(params.count) }),\n    ...(params?.applyExclusions && { applyExclusions: mapParamToString(params.applyExclusions) }),\n    ...(coordinate && {\n      location: mapParamToString(`${coordinate.latitude},${coordinate.longitude}`),\n    }),\n  });\n\n  try {\n    const response = await fetch(url.href + `?${urlSearchParams.toString()}`, {\n      method: 'GET',\n      headers: {\n        'dx-map-session-token': sessionId,\n      },\n    });\n    const autocompleteResults = await response.json();\n\n    if (autocompleteResults?.status === 'SELECTION_REQUIRED') {\n      dynatrace?.sendSessionProperties({ shortString: { searchdrawbridge: 'Up' } });\n    }\n\n    return autocompleteResults;\n  } catch {\n    return null;\n  }\n};\n\n/**\n * A search as you type hook that provides a list of predictions.\n */\nexport const usePlacesAutocomplete = ({\n  isEnabled = true,\n  minLength = 2,\n  serviceOptions,\n}: UsePlacesAutocompleteProps) => {\n  const hasSearchTerms = !!serviceOptions?.input && serviceOptions.input?.length >= minLength;\n\n  const { isFetching, data: autocompleteResponse } = useQuery<AutoCompleteResponse | null>({\n    queryKey: ['autocomplete', serviceOptions],\n    queryFn: () => getPredictions(serviceOptions),\n    enabled: isEnabled && hasSearchTerms,\n    placeholderData: keepPreviousData,\n  });\n\n  return {\n    predictions: autocompleteResponse?.predictions || null,\n    loading: isFetching,\n    status: autocompleteResponse?.status || null,\n  };\n};\n","/// <reference types=\"@types/google.maps\" />\n\nimport { useState, useEffect } from 'react';\n\nexport type FormattedSuggestion = {\n  mainText: string;\n  secondaryText: string;\n};\n\nexport type PlacesAutocompleteSuggestion = {\n  id?: string;\n  description: string;\n  placeId: string;\n  active?: boolean;\n  index?: number;\n  formattedSuggestion: FormattedSuggestion;\n  matchedSubstrings?: google.maps.places.PredictionSubstring[];\n  terms?: google.maps.places.PredictionTerm[];\n  type?: string;\n  types?: string[];\n};\n\nexport type AutocompletePrediction = google.maps.places.AutocompletePrediction & {\n  type: string;\n};\ntype SuggestionsProps = {\n  predictions: AutocompletePrediction[] | null;\n};\n\ntype SuggestionsRenderProps = {\n  suggestions: PlacesAutocompleteSuggestion[];\n};\n\ntype UseSuggestionsHook = (props: SuggestionsProps) => SuggestionsRenderProps;\n\nconst formattedSuggestion = (\n  formatting: google.maps.places.StructuredFormatting\n): FormattedSuggestion => ({\n  mainText: formatting.main_text,\n  secondaryText: formatting.secondary_text,\n});\n\nexport const useSuggestions: UseSuggestionsHook = ({ predictions }) => {\n  const [suggestions, setSuggestions] = useState<PlacesAutocompleteSuggestion[]>([]);\n\n  useEffect(() => {\n    if (!predictions || predictions.length === 0) {\n      setSuggestions([]);\n      return;\n    }\n    const results = predictions.map((p, idx) => ({\n      id: p.place_id,\n      description: p.description,\n      placeId: p.place_id,\n      active: false,\n      index: idx,\n      formattedSuggestion: formattedSuggestion(p.structured_formatting),\n      matchedSubstrings: p.matched_substrings,\n      terms: p.terms,\n      type: p.type,\n      types: p.types,\n    }));\n    setSuggestions(results);\n  }, [predictions]);\n\n  return { suggestions };\n};\n","export * from './use-places-autocomplete';\nexport * from './use-suggestions';\n","export * from './lib';\n","import type * as React from 'react';\nimport { ComboboxOption } from '@headlessui/react';\nimport type { FormInputBase } from '@dx-ui/osc-form';\nimport { useTranslation } from 'next-i18next';\nimport type { GeocodeCoordinateQuery } from '../gql/types';\n\ntype LocationHotelsNearMeOption = FormInputBase<\n  Omit<React.HTMLAttributes<HTMLInputElement>, 'value' | 'onSelect'>\n>;\n\nconst LocationHotelsNearMeOption = ({\n  geocodeData,\n}: {\n  geocodeData?: GeocodeCoordinateQuery['geocode'];\n  showNoResultsFound?: boolean;\n}) => {\n  const { t } = useTranslation('osc-location');\n  const userCity = geocodeData?.match?.address?.city || '';\n\n  let stateCountry = geocodeData?.match?.address?.stateName;\n  if (stateCountry)\n    stateCountry += geocodeData?.match?.address?.country\n      ? `, ${geocodeData?.match?.address?.country}`\n      : `${geocodeData?.match?.address?.country}`;\n  else\n    stateCountry += geocodeData?.match?.address?.country\n      ? ` ${geocodeData?.match?.address?.country}`\n      : ``;\n\n  return geocodeData && userCity ? (\n    <div>\n      <div className=\"flex pb-0 pt-1 ltr:pl-2 ltr:text-left rtl:pr-2 \">\n        <span className=\"text-text-alt\">{t('optionsHeader.hotelsNearBy')}</span>\n      </div>\n      <ComboboxOption\n        key={userCity}\n        value={userCity}\n        className=\"cursor-pointer px-4 py-2 data-[focus]:bg-bg-primary data-[selected]:bg-bg-alt highlighted:bg-bg-alt\"\n        aria-setsize={1}\n        aria-posinset={1}\n      >\n        <div className=\"flex min-w-[226px]\">\n          <div className=\"flex justify-center\" aria-hidden>\n            <img\n              className=\"size-6 object-contain\"\n              alt=\"location icon\"\n              src=\"/modules/assets/img/common/icon_location@2x.png\"\n            />\n          </div>\n          <div className=\"flex flex-col ltr:pl-2 ltr:text-left rtl:pr-2\">\n            <span className=\"text-base\">{userCity}</span>\n            <span className=\"text-xs text-text-alt\">{stateCountry}</span>\n          </div>\n        </div>\n      </ComboboxOption>\n    </div>\n  ) : null;\n};\n\nexport { LocationHotelsNearMeOption };\nexport default LocationHotelsNearMeOption;\n","import type { PlacesAutocompleteSuggestion } from '@dx-ui/framework-places-autocomplete';\nimport { useLocalStorage } from 'usehooks-ts';\n\nconst REFRESH_TTL_2WEEK = 604800 * 2 * 1000;\nconst DISPLAY_COUNT = 5;\n\nexport function sanitizePlacesAutocompleteSuggestions(\n  places: PlacesAutocompleteSuggestion[]\n): PlacesAutocompleteSuggestion[] {\n  const knownDescriptions = new Set();\n\n  return places\n    .filter((place) => {\n      if (knownDescriptions.has(place.description)) {\n        return false;\n      } else {\n        knownDescriptions.add(place.description);\n        return true;\n      }\n    })\n    .slice(0, DISPLAY_COUNT);\n}\n\nexport function useRecentSearches() {\n  const [value, setValue] = useLocalStorage<PlacesAutocompleteSuggestion[]>('RecentSearches', [], {\n    initializeWithValue: false,\n\n    serializer: (instance) =>\n      JSON.stringify({\n        instance,\n        expireDate: new Date().getTime() + REFRESH_TTL_2WEEK,\n      }),\n\n    deserializer: (s: string): PlacesAutocompleteSuggestion[] => {\n      try {\n        const val: unknown = JSON.parse(s);\n        if (\n          val &&\n          typeof val === 'object' &&\n          'expireDate' in val &&\n          typeof val.expireDate === 'number' &&\n          'instance' in val\n        ) {\n          const { expireDate, instance } = val;\n          const ttl = new Date(expireDate).getTime() - new Date().getTime();\n\n          if (ttl <= 0) {\n            return [];\n          }\n\n          if (instance && Array.isArray(instance)) {\n            return instance;\n          }\n        }\n        return [];\n      } catch {\n        return [];\n      }\n    },\n  });\n\n  const lengthLimitedValue = (value ?? []).slice(0, DISPLAY_COUNT);\n\n  return [lengthLimitedValue, setValue] as const;\n}\n","import type { LocationTypes } from '@dx-ui/framework-places-autocomplete';\nimport type { IconNames } from '@dx-ui/osc-icon';\n\nexport const LocationIcons: { [key in LocationTypes]: (typeof IconNames)[number] } = {\n  address: 'location',\n  airport: 'airport',\n  geocode: 'location',\n  pointOfInterest: 'point-of-interest',\n  property: 'hotel',\n};\n","import { ComboboxOption } from '@headlessui/react';\nimport type { FormInputBase } from '@dx-ui/osc-form';\nimport type {\n  LocationTypes,\n  PlacesAutocompleteSuggestion,\n} from '@dx-ui/framework-places-autocomplete';\nimport { LocationIcons } from './icons.constant';\nimport Icon from '@dx-ui/osc-icon';\n\ntype PlacesAutoCompleteSuggestionOptions = FormInputBase<\n  Omit<React.HTMLAttributes<HTMLInputElement>, 'value' | 'onSelect'>\n>;\n\nconst PlacesAutoCompleteSuggestionOptions = ({\n  suggestions,\n  header = '',\n}: {\n  header?: string;\n  suggestions?: PlacesAutocompleteSuggestion[];\n}) => {\n  if (!suggestions) return null;\n  return (\n    <div>\n      {suggestions.map((suggestion, index: number) => {\n        return (\n          <ComboboxOption\n            key={suggestion.description}\n            value={suggestion.description}\n            className=\"cursor-pointer px-4 py-2 data-[focus]:bg-bg-primary data-[selected]:bg-bg-alt highlighted:bg-bg-alt\"\n            aria-setsize={suggestions.length}\n            aria-posinset={index + 1}\n            data-testid={header ? header : undefined}\n          >\n            <AutoCompleteSuggestionOptionsWrapper\n              iconType={suggestion?.type}\n              header={header && !!suggestions.length && index === 0 ? header : undefined}\n            >\n              <>\n                <span className=\"text-base\" data-testid=\"autocomplete-text\">\n                  {suggestion.formattedSuggestion.mainText}\n                </span>\n                <span className=\"text-xs text-text-alt\">\n                  {suggestion.formattedSuggestion.secondaryText}\n                </span>\n              </>\n            </AutoCompleteSuggestionOptionsWrapper>\n          </ComboboxOption>\n        );\n      })}\n    </div>\n  );\n};\n\nconst AutoCompleteSuggestionOptionsWrapper = ({\n  header,\n  iconType,\n  children,\n}: {\n  header?: string;\n  iconType?: string;\n  children: React.ReactNode;\n}) => {\n  const locationIconName =\n    iconType && iconType in LocationIcons ? LocationIcons[iconType as LocationTypes] : 'location';\n  return (\n    <>\n      {header ? (\n        <div className=\"flex min-w-[226px] pb-2 pr-1 ltr:text-left rtl:ps-2\">\n          <span className=\"text-text-alt\">{header}</span>\n        </div>\n      ) : null}\n      <div className=\"flex min-w-[226px]\">\n        <div className=\"flex shrink-0 justify-center\" aria-hidden>\n          <Icon name={locationIconName} size=\"lg\" />\n        </div>\n        <div className=\"flex flex-col ps-2 ltr:text-left\">{children}</div>\n      </div>\n    </>\n  );\n};\n\nexport { PlacesAutoCompleteSuggestionOptions, AutoCompleteSuggestionOptionsWrapper };\nexport default PlacesAutoCompleteSuggestionOptions;\n","import type { FormInputBase } from '@dx-ui/osc-form';\nimport type * as React from 'react';\nimport { useRecentSearches } from './location-options-utils';\nimport type { PlacesAutocompleteSuggestion } from '@dx-ui/framework-places-autocomplete';\nimport PlacesAutoCompleteSuggestionOptions from '../autoComplete-suggestion-options';\nimport { useTranslation } from 'next-i18next';\n\ntype LocationPopularDestinationsOption = FormInputBase<\n  Omit<React.HTMLAttributes<HTMLInputElement>, 'value' | 'onSelect'>\n>;\n\nconst LocationPopularDestinationsOption = ({\n  isNearByEnabled,\n  popularDestinations,\n  popularDestinationsCount = 5,\n  showRecentDestinations = false,\n}: {\n  isNearByEnabled?: boolean;\n  popularDestinations?: PlacesAutocompleteSuggestion[];\n  popularDestinationsCount?: number;\n  showRecentDestinations?: boolean;\n}) => {\n  const { t } = useTranslation('osc-location');\n  const cachedRecentSearches = useRecentSearches();\n\n  const displayCount = isNearByEnabled ? 3 : popularDestinationsCount;\n\n  const popularDestinationsOptions = popularDestinations?.slice(\n    0,\n    displayCount\n  ) as unknown as PlacesAutocompleteSuggestion[];\n  const recentSearchOptions = showRecentDestinations ? cachedRecentSearches : [];\n  const showPopularDestinations = !(!!showRecentDestinations && recentSearchOptions?.length);\n\n  return showPopularDestinations ? (\n    <PlacesAutoCompleteSuggestionOptions\n      header={t('optionsHeader.popularDestinations')}\n      suggestions={popularDestinationsOptions}\n    />\n  ) : null;\n};\n\nexport { LocationPopularDestinationsOption };\nexport default LocationPopularDestinationsOption;\n","import type { FormInputBase } from '@dx-ui/osc-form';\nimport type * as React from 'react';\nimport { useRecentSearches } from './location-options-utils';\nimport { PlacesAutoCompleteSuggestionOptions } from '../autoComplete-suggestion-options';\nimport { useTranslation } from 'next-i18next';\n\ntype LocationRecentSearchesOption = FormInputBase<\n  Omit<React.HTMLAttributes<HTMLInputElement>, 'value' | 'onSelect'>\n>;\n\nconst LocationRecentSearchesOption = ({ isNearByEnabled }: { isNearByEnabled?: boolean }) => {\n  const { t } = useTranslation('osc-location');\n\n  const [recentSearchOptions] = useRecentSearches();\n  const displayCount = isNearByEnabled ? 3 : 5;\n  const recentSearches = recentSearchOptions?.slice(0, displayCount);\n\n  return (\n    <PlacesAutoCompleteSuggestionOptions\n      header={t('optionsHeader.recentSearches')}\n      suggestions={recentSearches}\n    />\n  );\n};\n\nexport { LocationRecentSearchesOption };\nexport default LocationRecentSearchesOption;\n","import type * as Types from './types';\n\nimport {\n  useQuery,\n  type QueryClient,\n  type FetchQueryOptions,\n  type UseQueryOptions,\n} from '@tanstack/react-query';\nimport type { DXError } from '@dx-ui/types-graphql';\n\nexport const GetTranslateAutocompleteConfigDocument = {\n  operationName: 'featureConfigs',\n  operationString: `query featureConfigs {\n  featureConfigs(names: [\"config-ui-translate-autocomplete\"]) {\n    config\n    name\n  }\n}`,\n  originalOpName: 'getTranslateAutocompleteConfig',\n};\nexport function useGetTranslateAutocompleteConfigQuery<\n  TData = Types.GetTranslateAutocompleteConfigQuery,\n  TError = DXError\n>(\n  variables?: Types.GetTranslateAutocompleteConfigQueryVariables,\n  options?: Omit<\n    UseQueryOptions<Types.GetTranslateAutocompleteConfigQuery, TError, TData>,\n    'queryKey'\n  >\n) {\n  return useQuery<Types.GetTranslateAutocompleteConfigQuery, TError, TData>({\n    queryKey: [GetTranslateAutocompleteConfigDocument, variables],\n    ...options,\n  });\n}\nexport function serverSideGetTranslateAutocompleteConfigQuery(\n  queryClient: QueryClient,\n  variables?: Types.GetTranslateAutocompleteConfigQueryVariables,\n  options?: FetchQueryOptions<Types.GetTranslateAutocompleteConfigQuery>\n) {\n  return queryClient.fetchQuery<Types.GetTranslateAutocompleteConfigQuery>({\n    queryKey: [GetTranslateAutocompleteConfigDocument, variables],\n    ...options,\n  });\n}\n\nexport const GeocodeCoordinateDocument = {\n  operationName: 'geocode',\n  operationString: `query geocode($location: GeocodeCoordinateInput, $language: String!, $sessionToken: String) {\n  geocode(language: $language, location: $location, sessionToken: $sessionToken) {\n    match {\n      address {\n        city\n        country\n        stateName\n      }\n    }\n  }\n}`,\n  originalOpName: 'geocodeCoordinate',\n};\nexport function useGeocodeCoordinateQuery<TData = Types.GeocodeCoordinateQuery, TError = DXError>(\n  variables: Types.GeocodeCoordinateQueryVariables,\n  options?: Omit<UseQueryOptions<Types.GeocodeCoordinateQuery, TError, TData>, 'queryKey'>\n) {\n  return useQuery<Types.GeocodeCoordinateQuery, TError, TData>({\n    queryKey: [GeocodeCoordinateDocument, variables],\n    ...options,\n  });\n}\nexport function serverSideGeocodeCoordinateQuery(\n  queryClient: QueryClient,\n  variables: Types.GeocodeCoordinateQueryVariables,\n  options?: FetchQueryOptions<Types.GeocodeCoordinateQuery>\n) {\n  return queryClient.fetchQuery<Types.GeocodeCoordinateQuery>({\n    queryKey: [GeocodeCoordinateDocument, variables],\n    ...options,\n  });\n}\n","import * as React from 'react';\nimport { Controller, get, useFormContext, useFormState, useWatch } from 'react-hook-form';\nimport { Combobox, ComboboxInput, ComboboxOptions, Field } from '@headlessui/react';\nimport type { FormInputBase } from '@dx-ui/osc-form';\nimport { useTranslation } from 'next-i18next';\nimport { useSuggestions } from '@dx-ui/framework-places-autocomplete';\nimport { FormError, FormLabel } from '@dx-ui/osc-form';\nimport { Spinner } from '@dx-ui/osc-spinner';\nimport cx from 'classnames';\nimport HotelsNearMeOption from './location-options/hotels-near-me-option';\nimport type {\n  PredictionService,\n  AutocompletePrediction,\n  PredictionStatusTypes,\n  PlacesAutocompleteSuggestion,\n} from '@dx-ui/framework-places-autocomplete';\nimport PopularDestinationsOptions from './location-options/popular-destinations';\nimport RecentSearchesOptions from './location-options/recent-searches';\nimport {\n  sanitizePlacesAutocompleteSuggestions,\n  useRecentSearches,\n} from './location-options/location-options-utils';\nimport PlacesAutoCompleteSuggestionOptions, {\n  AutoCompleteSuggestionOptionsWrapper,\n} from './autoComplete-suggestion-options';\nimport { useGeocodeCoordinateQuery } from './gql/queries';\n\ntype BaseLocationInputOptions = FormInputBase<\n  Omit<React.ComponentProps<'input'>, 'value' | 'onSelect'>\n>;\n\nexport interface LocationInput extends BaseLocationInputOptions {\n  /** minimum length to trigger a search */\n  autoCompleteLength?: number;\n  /** Set the lat/long bias for this search.\n   * PredictionService [coordinate](/?path=/docs/library-framework-places-autocomplete--page)\n   */\n  coordinate?: PredictionService['coordinate'];\n  /** Flag to ensure hotels near `coordinates` provided are displayed */\n  enableHotelsNearMe?: boolean;\n  /** language value passed from router */\n  language: string;\n  /** Flag to ensure recent searches are displayed */\n  enableRecentSearches?: boolean;\n  /** Need to provide context */\n  placeIdFieldName?: string;\n  /** List of predictions that are returned from the service */\n  predictions: AutocompletePrediction[] | null;\n  /**  popular destinations options */\n  popularDestinationOptions?: PlacesAutocompleteSuggestion[] | null;\n  /** Whether this input field is required */\n  required?: HTMLInputElement['required'];\n  /** Provide the sessionId to use with this search.\n   * PredictionService [sessionId](/?path=/docs/library-framework-places-autocomplete--page)\n   */\n  sessionId?: PredictionService['sessionId'];\n  status: PredictionStatusTypes | null;\n  checkAutocompleteStatus?: boolean;\n}\n\nconst isHandheld = (userAgent: string): boolean => {\n  return /mobile|tablet|ipad|android/i.test(userAgent);\n};\n\nexport const LocationInput: React.FC<React.PropsWithChildren<LocationInput>> = ({\n  coordinate,\n  enableHotelsNearMe = false,\n  enableRecentSearches = false,\n  name,\n  predictions,\n  required,\n  optional,\n  loading,\n  label,\n  labelClassName,\n  language,\n  className,\n  registerOptions,\n  sessionId,\n  autoCompleteLength = 2,\n  placeIdFieldName = 'placeId',\n  status,\n  checkAutocompleteStatus = true,\n  popularDestinationOptions,\n  ...rest\n}) => {\n  const { t } = useTranslation('osc-location');\n  const errorId = `input-error-location`;\n  const {\n    getFieldState,\n    control,\n    setValue,\n    trigger,\n    formState: { errors },\n  } = useFormContext();\n\n  const [currentSuggestion, setCurrentSuggestion] =\n    React.useState<PlacesAutocompleteSuggestion | null>(null);\n  const [recentSearches, setRecentSearches] = useRecentSearches();\n  const { isSubmitting } = useFormState();\n\n  React.useEffect(() => {\n    if (isSubmitting && currentSuggestion) {\n      setRecentSearches((recentSearches) =>\n        sanitizePlacesAutocompleteSuggestions([currentSuggestion, ...recentSearches])\n      );\n    }\n  }, [currentSuggestion, isSubmitting, setRecentSearches]);\n\n  const [showAriaLabel, setShowAriaLabel] = React.useState(false);\n  const { suggestions } = useSuggestions({ predictions });\n  const inputName = name;\n  const inputValue = useWatch({ control, name });\n  const fieldError = get(errors, name);\n  const hasError = !!fieldError;\n  const hasSearchTerm = !!inputValue && inputValue.length >= autoCompleteLength;\n  const hasSuggestions = suggestions.length > 0;\n  const autoCompleteSelectionRequired = status === 'SELECTION_REQUIRED' && checkAutocompleteStatus;\n\n  const { data, isFetching: isGeoCodeFetching } = useGeocodeCoordinateQuery(\n    { language, location: coordinate, sessionToken: sessionId },\n    { enabled: !!coordinate && enableHotelsNearMe }\n  );\n\n  const geocodeData = data?.geocode;\n  const enablePopularDestinations = !!popularDestinationOptions;\n  const isPlacesAutocompleteSuggestions = !(\n    enableHotelsNearMe ||\n    enablePopularDestinations ||\n    enableRecentSearches\n  );\n  const [showSuggestions, setShowSuggestions] = React.useState(!isPlacesAutocompleteSuggestions);\n  const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n    if (e.key !== 'Enter') {\n      const hideSuggestions = isPlacesAutocompleteSuggestions && !hasSearchTerm;\n      setShowSuggestions(!hideSuggestions);\n    }\n    //When customer freeform types still check autocomplete results to see whether a valid placeId is found\n    setValue(\n      placeIdFieldName,\n      suggestions.find((suggestion) => suggestion.description === e.currentTarget.value)?.placeId ||\n        ''\n    );\n  };\n\n  const showHotelsNearMe = !!(enableHotelsNearMe && !hasSearchTerm && geocodeData);\n  const showPopularDestinations = enablePopularDestinations && !hasSearchTerm;\n  const showRecentSearches = enableRecentSearches && !hasSearchTerm && recentSearches.length > 0;\n\n  const showAutoCompleteSuggestions = !(\n    showHotelsNearMe ||\n    showPopularDestinations ||\n    showRecentSearches\n  );\n  const showSuggestionsPopover =\n    showSuggestions || showHotelsNearMe || showPopularDestinations || showRecentSearches;\n  const showSuggestionOptions =\n    showSuggestions &&\n    (hasSuggestions || showHotelsNearMe || showPopularDestinations || showRecentSearches);\n\n  const onSelect = async (selectValue: string) => {\n    setValue(inputName, selectValue);\n    const selectedSuggestion = getSelectedSuggestion(selectValue);\n\n    setValue(placeIdFieldName, selectedSuggestion?.placeId ?? '');\n    setShowSuggestions(false);\n    if (enableRecentSearches && selectedSuggestion) {\n      setCurrentSuggestion(selectedSuggestion);\n    }\n    await trigger(inputName);\n\n    if (autoCompleteSelectionRequired) await trigger(inputName);\n  };\n\n  const onFocus = () => {\n    if (isPlacesAutocompleteSuggestions && !hasSearchTerm) {\n      setShowSuggestions(false);\n    } else {\n      const locationFieldState = getFieldState(name);\n      const locationFieldError = !!locationFieldState?.error?.message;\n      if (locationFieldError) setShowSuggestions(false);\n    }\n    setShowAriaLabel(true);\n  };\n\n  const getSelectedSuggestion = (selectValue: string) => {\n    if (showRecentSearches && recentSearches?.length) {\n      return recentSearches.find((suggestion) => suggestion.description === selectValue);\n    } else if (showPopularDestinations) {\n      return popularDestinationOptions?.find(\n        (suggestion) => suggestion?.description === selectValue\n      );\n    } else return suggestions?.find((suggestion) => suggestion.description === selectValue);\n  };\n\n  const getAriaText = () => {\n    if (!hasSearchTerm || !showAriaLabel) {\n      return '';\n    }\n    switch (true) {\n      case loading:\n        return t('loading');\n      case autoCompleteSelectionRequired && hasSuggestions:\n        return t('ariaSuggestionRequired', {\n          drawBridgeNotification: t('drawBridgeSelect'),\n          ariaSuggestions: t('ariaSuggestions', { count: suggestions.length }),\n        });\n      case hasSuggestions:\n        return t('ariaSuggestions', { count: suggestions.length });\n      case autoCompleteSelectionRequired && !hasSuggestions:\n        return t('drawBridgeNoResults');\n      default:\n        return t('noSuggestions');\n    }\n  };\n\n  const validatePredictions = (value: string) => {\n    const isValidPrediction = suggestions.some((suggestion) => suggestion.description === value);\n    return isValidPrediction || t('selectSuggestion');\n  };\n\n  // HACK: Temporarily switch ComboboxInput to uncontrolled while isComposing is true\n  // to prevent selections from an Input Method Editor (IME) on mobile from being appended to\n  // the text input instead of replaced.\n  const isComposing = React.useRef(false);\n  const isMobileIME =\n    (language === 'ja' || /^zh.*/.test(language)) &&\n    typeof navigator !== 'undefined' &&\n    isHandheld(navigator.userAgent);\n  const handleCompositionEnd = () => {\n    isComposing.current = false;\n  };\n  const handleCompositionStart = () => {\n    isComposing.current = true;\n  };\n  const openOnFocus = !isPlacesAutocompleteSuggestions && !hasError;\n\n  const comboboxInputValue = inputValue || '';\n\n  return (\n    <div className=\"relative w-full\" data-osc-product=\"shop-form-location\">\n      <Controller\n        name={inputName}\n        control={control}\n        rules={{\n          ...registerOptions,\n          required: required && !autoCompleteSelectionRequired ? t('validation') : false,\n          validate:\n            (autoCompleteSelectionRequired && validatePredictions) || registerOptions?.validate,\n          onBlur: () => setShowAriaLabel(false),\n        }}\n        render={({ field }) => {\n          return (\n            <Field>\n              <FormLabel\n                label={label}\n                required={required}\n                optional={optional}\n                hasError={hasError}\n                className={cx('w-full brand-ey:font-normal brand-lx:font-semibold', labelClassName)}\n                htmlFor=\"location-input\"\n              />\n              <Combobox\n                name=\"location\"\n                value={isMobileIME && isComposing.current ? undefined : comboboxInputValue}\n                immediate={openOnFocus}\n                onChange={onSelect}\n              >\n                <ComboboxInput\n                  {...field}\n                  {...rest}\n                  ref={field.ref as React.Ref<HTMLInputElement>}\n                  id=\"location-input\"\n                  displayValue={isMobileIME && isComposing.current ? undefined : comboboxInputValue}\n                  className={cx(\n                    'form-input w-full brand-ey:border-primary-alt brand-lx:border-primary brand-lx:bg-bg-light brand-lx:placeholder:text-text brand-ou:border-primary brand-ou:bg-transparent',\n                    className,\n                    {\n                      'form-error': hasError,\n                    }\n                  )}\n                  onKeyUp={onKeyUp}\n                  onFocus={onFocus}\n                  onCompositionEnd={handleCompositionEnd}\n                  onCompositionStart={handleCompositionStart}\n                  autoComplete=\"off\"\n                  autoCorrect=\"off\"\n                  autoCapitalize=\"off\"\n                  spellCheck={false}\n                  aria-label={t('ariaInput', { label })}\n                  aria-invalid={hasError}\n                  aria-describedby={errorId}\n                  data-osc-product=\"shop-form-location-input\"\n                  required={required}\n                />\n                <ComboboxOptions\n                  // This prevents headlessui-react from adding aria-hidden to sibling elements when Combobox is active. That behavior was causing jest tests to fail.\n                  modal={false}\n                  className={cx(\n                    'absolute z-50 transform-gpu rounded border border-solid border-border bg-bg text-sm font-normal text-text shadow-lg',\n                    { hidden: !showSuggestionsPopover }\n                  )}\n                >\n                  {autoCompleteSelectionRequired ? (\n                    <div className=\"bg-warn-alt px-4 py-2\">\n                      <AutoCompleteSuggestionOptionsWrapper iconType=\"alert\">\n                        <span className=\"text-base font-bold\" aria-hidden>\n                          {hasSuggestions ? t('drawBridgeSelect') : t('drawBridgeNoResults')}\n                        </span>\n                      </AutoCompleteSuggestionOptionsWrapper>\n                    </div>\n                  ) : null}\n\n                  {showSuggestionOptions ? (\n                    <>\n                      {showHotelsNearMe && !isGeoCodeFetching ? (\n                        <HotelsNearMeOption\n                          geocodeData={geocodeData}\n                          key={`hotels-nearby-${!!geocodeData}`}\n                        />\n                      ) : null}\n                      {showPopularDestinations ? (\n                        <PopularDestinationsOptions\n                          isNearByEnabled={showHotelsNearMe}\n                          popularDestinations={popularDestinationOptions}\n                          showRecentDestinations={showRecentSearches}\n                        />\n                      ) : null}\n                      {showRecentSearches ? (\n                        <RecentSearchesOptions isNearByEnabled={showHotelsNearMe} />\n                      ) : null}\n                      {showAutoCompleteSuggestions ? (\n                        <PlacesAutoCompleteSuggestionOptions suggestions={suggestions} />\n                      ) : null}\n                    </>\n                  ) : !hasSuggestions && !hasError ? (\n                    <div className=\"p-3\" aria-hidden>\n                      {loading ? <Spinner size=\"md\" delay={0} /> : t('noSuggestions')}\n                    </div>\n                  ) : null}\n                </ComboboxOptions>\n              </Combobox>\n            </Field>\n          );\n        }}\n      />\n      <p className=\"sr-only\" aria-live=\"assertive\">\n        {getAriaText()}\n      </p>\n      <FormError id={errorId} error={hasError && fieldError} className=\"lg:absolute\" />\n    </div>\n  );\n};\n\nLocationInput.displayName = 'LocationInput';\n\nexport default LocationInput;\n","import { useFormContext, useWatch } from 'react-hook-form';\nimport { LocationInput } from './location.input';\nimport type { PredictionService } from '@dx-ui/framework-places-autocomplete';\nimport { usePlacesAutocomplete } from '@dx-ui/framework-places-autocomplete';\nimport { useDebounceValue } from 'usehooks-ts';\nimport { useGetTranslateAutocompleteConfigQuery } from './gql/queries';\nimport { getSafeLanguage } from '@dx-ui/framework-react-query';\n\nexport type Location = Omit<LocationInput, 'predictions' | 'status'> & {\n  autocompleteUri?: PredictionService['uri'];\n  type?: PredictionService['type'];\n  count?: PredictionService['count'];\n  enableRecentSearches?: boolean;\n  assetsUrl?: string;\n  applyExclusions?: boolean;\n};\n\n/**\n * Location is an optional component that may be consumed either standalone or as part of the newer [composable shop form component](?path=/docs/library-products-shop-form--default-story).\n */\nexport const Location: React.FC<React.PropsWithChildren<Location>> = ({\n  coordinate,\n  type,\n  count,\n  sessionId,\n  label,\n  language: locale,\n  applyExclusions,\n  name = 'query',\n  autocompleteUri = '/dx-customer/autocomplete',\n  autoCompleteLength = 2,\n  ...rest\n}) => {\n  const { control } = useFormContext();\n  const inputValue = useWatch({ control, name });\n  const language = getSafeLanguage(locale);\n  const [debouncedInputValue] = useDebounceValue<string>(inputValue, 300);\n  const enablePlacesAutoComplete =\n    !!debouncedInputValue && debouncedInputValue.length >= autoCompleteLength;\n  const { data, isFetched: IsTranslateAutocompleteResolved } =\n    useGetTranslateAutocompleteConfigQuery();\n  const configLanguages = data?.featureConfigs?.[0]?.config?.languages;\n  const isSupportedLanguage =\n    IsTranslateAutocompleteResolved &&\n    !!configLanguages?.length &&\n    configLanguages.includes(language);\n\n  const { loading, predictions, status } = usePlacesAutocomplete({\n    isEnabled: enablePlacesAutoComplete && IsTranslateAutocompleteResolved,\n    minLength: autoCompleteLength,\n    serviceOptions: {\n      coordinate,\n      uri: autocompleteUri,\n      input: debouncedInputValue,\n      type,\n      applyExclusions,\n      count,\n      language: isSupportedLanguage ? language : 'en',\n      sessionId,\n    },\n  });\n\n  return (\n    <LocationInput\n      coordinate={coordinate}\n      name={name}\n      predictions={predictions}\n      loading={loading}\n      status={status}\n      label={label}\n      language={language}\n      autoCompleteLength={autoCompleteLength}\n      sessionId={sessionId}\n      {...rest}\n    />\n  );\n};\n\nLocation.displayName = 'Location';\nexport default Location;\n","export * from './lib/location';\nexport * from './lib/location-options/hotels-near-me-option';\nexport * from './lib/location.input';\nexport * from './lib/gql/types';\nexport * from './lib/gql/queries';\nexport * from './lib/location-options/location-options-utils';\n","export const NHCSEARCH_4807 = 'NHCSEARCH-4807-improve-dateless-search';\nexport const DISABLE_AARP_SPECIAL_RATES = 'aarp-special-rate-toggle';\n","import type { FormDataValues, FormDefaultValues, TargetOHWPage } from './shop-form';\nimport type {\n  BrandCode,\n  LocationUrlParams,\n  SortByValues,\n  TripAdvisorRatings,\n  MapLanguage,\n  Path,\n} from '@dx-ui/framework-uri-builder';\nimport { searchUriBuilder, bookUriBuilder, locationUriBuilder } from '@dx-ui/framework-uri-builder';\nimport { DEFAULT_FORM_VALUES } from './shop-form.constants';\nimport merge from 'lodash/merge';\nimport { differenceInDays, startOfDay } from 'date-fns';\nimport type { GeocodeQuery } from './gql/types';\nimport type { SpecialRates } from '@dx-ui/osc-special-rates';\nimport {\n  isTMTPRateSelected,\n  isHGVMax,\n  isHGVMaxRateSelected,\n  isOwner,\n  isTeamMember,\n  isFriendsAndFamily,\n  isTMTPProgramMember,\n} from '@dx-ui/osc-special-rates';\nimport type { QueryClient } from '@tanstack/react-query';\nimport {\n  getSpeedBumpFeatureConfig,\n  GetSpeedBumpFeatureConfigsDocument,\n  type GetSpeedBumpFeatureConfigsQuery,\n} from '@dx-ui/osc-speedbump';\nimport { FeatureTogglesDocument, serverSideFeatureTogglesQuery } from './gql/queries';\nimport {\n  GetTranslateAutocompleteConfigDocument,\n  serverSideGetTranslateAutocompleteConfigQuery,\n} from '@dx-ui/osc-location';\nimport { DISABLE_AARP_SPECIAL_RATES, NHCSEARCH_4807 } from './constants/featureToggles';\n\nexport const RatePlanCodes = {\n  GOVERNMENT_MILITARY: 'GDSGOV',\n  AARP: 'HCARP',\n  SENIOR: 'GDSSNR',\n  AAA: 'HCAAA',\n  USE_POINTS: 'HCSMR',\n} as const;\n\nexport const getSearchPath = (\n  data: Partial<FormDataValues>,\n  targetOHWPage: Omit<TargetOHWPage, 'book' | 'ten-plus-book'>\n): Path => {\n  if (isTMTPRateSelected(data?.specialRates) && isTMTPProgramMember(data.hhonors)) {\n    if (targetOHWPage === 'search') {\n      return 'go-hilton';\n    } else if (targetOHWPage === 'search-zero') {\n      return 'go-hilton-find-hotels';\n    }\n  } else if (isHGVMax(data.hhonors) && isHGVMaxRateSelected(data?.specialRates)) {\n    if (targetOHWPage === 'search') {\n      return 'hgv-max';\n    } else if (isHGVMax(data.hhonors) && targetOHWPage === 'search-zero') {\n      return 'hgv-max-find-hotels';\n    }\n  } else if (targetOHWPage === 'search') {\n    return 'search';\n  } else if (targetOHWPage === 'ten-plus-search') {\n    return 'group-search';\n  }\n  return 'find-hotels';\n};\n\n/** This must be updated along with the additionalQSParameterKeys array below */\nexport type AdditionalQSParameters = {\n  adjoiningRoomStay?: boolean;\n  availableHotelsOnly?: boolean;\n  brandCode?: string;\n  content?: string;\n  displayCurrency?: string;\n  fromId?: string;\n  f_attributeIds?: string[];\n  f_amenityIds?: string[];\n  f_brandCodes?: string[];\n  f_price?: [number, number];\n  f_tripAdvisorRatings?: TripAdvisorRatings;\n  maxPoints?: number;\n  requestedRatesOnly?: boolean;\n  sortBy?: SortByValues;\n  specPlan?: string[];\n  specialRatesTokens?: string;\n  redeemPts?: boolean;\n  token?: string[];\n  cid?: string;\n};\n\n/** This must be updated along with the AdditionalQSParameters type above */\nexport const additionalQSParameterKeys: Array<keyof AdditionalQSParameters> = [\n  'adjoiningRoomStay',\n  'availableHotelsOnly',\n  'brandCode',\n  'cid',\n  'content',\n  'displayCurrency',\n  'f_amenityIds',\n  'f_attributeIds',\n  'f_brandCodes',\n  'f_price',\n  'f_tripAdvisorRatings',\n  'fromId',\n  'maxPoints',\n  'redeemPts',\n  'requestedRatesOnly',\n  'sortBy',\n  'specPlan',\n  'specialRatesTokens',\n  'token',\n];\n\nexport function isAdditionalQsParameterKey(\n  someString: string\n): someString is keyof AdditionalQSParameters {\n  return Boolean(additionalQSParameterKeys.find((key) => someString === key));\n}\n\nconst getNumRooms = (numRooms?: number | null) => {\n  return numRooms == null || isNaN(numRooms) ? null : numRooms;\n};\n\nexport const generateShopFormUrl = async ({\n  additionalQSParameters,\n  formData,\n  disableAARPSpecialRates,\n  locale,\n  targetOHWPage,\n  enableDatesFlexDreamRouting = false,\n  geocodeData,\n  client,\n}: {\n  additionalQSParameters?: AdditionalQSParameters;\n  formData: Partial<FormDataValues>;\n  disableAARPSpecialRates: boolean | undefined;\n  locale: string;\n  targetOHWPage: TargetOHWPage;\n  enableDatesFlexDreamRouting?: boolean;\n  geocodeData?: GeocodeQuery;\n  client?: QueryClient;\n}) => {\n  const token = additionalQSParameters?.token;\n  /** If enableDatesFlexDreamRouting enabled, route user to locations result page\n   * if not using special rates beside points,\n   *  date range is within 30 days of today and language is English.\n   * If geocode fails for dream routing, fallback to default routing.\n   */\n  const flexDatesDreamRouting = isflexDatesDreamRouting({\n    data: formData,\n    target: targetOHWPage,\n    enableDreamRouting: enableDatesFlexDreamRouting,\n    geocodeData,\n  });\n\n  /** OHW Search URL generation */\n\n  //if flexdates dream redirect enabled and conditions met, return dream URL\n  if (flexDatesDreamRouting) {\n    return await generateFlexDatesDreamRedirectURL({\n      formData,\n      language: locale,\n      additionalQSParameters,\n      geocodeData,\n      client,\n    });\n  }\n  if (\n    targetOHWPage === 'search' ||\n    targetOHWPage === 'search-zero' ||\n    targetOHWPage === 'ten-plus-search'\n  ) {\n    const brandCodeParam = additionalQSParameters?.brandCode as keyof BrandCode;\n    return searchUriBuilder({\n      brandCode: brandCodeParam ?? (formData.brandCode as keyof BrandCode),\n      locale: locale as MapLanguage,\n      path: getSearchPath(formData, targetOHWPage),\n      relative: true,\n      urlParams: {\n        adjoiningRoomStay: additionalQSParameters?.adjoiningRoomStay,\n        content: additionalQSParameters?.content,\n        dates: {\n          arrivalDate: formData?.dates?.arrivalDate,\n          departureDate: formData?.dates?.departureDate,\n          flexibleDates: formData?.dates?.datesFlex,\n        },\n        displayCurrency: additionalQSParameters?.displayCurrency,\n        placeId: formData?.placeId,\n        query: formData?.query,\n        maxPoints: formData?.specialRates?.redeemPts ? additionalQSParameters?.maxPoints : null,\n        numAttendees: formData?.attendee_count,\n        availableHotelsOnly: additionalQSParameters?.availableHotelsOnly,\n        f_amenityIds: additionalQSParameters?.f_amenityIds,\n        f_attributeIds: additionalQSParameters?.f_attributeIds,\n        f_brandCodes: additionalQSParameters?.f_brandCodes,\n        f_price: additionalQSParameters?.f_price,\n        f_tripAdvisorRatings: additionalQSParameters?.f_tripAdvisorRatings,\n        sortBy: additionalQSParameters?.sortBy,\n        //if on a 10+ search uri or numRooms is provided with a value less than 10, consume numRooms. Otherwise consume length of rooms array from rooms modal sub component\n        numRooms:\n          targetOHWPage === 'ten-plus-search' || (formData?.numRooms && formData?.numRooms < 10)\n            ? formData?.numRooms\n            : formData?.rooms?.length,\n        rates: {\n          aarp: disableAARPSpecialRates ? undefined : formData?.specialRates?.aarpRate,\n          corporateAccount: formData?.specialRates?.corporateCode,\n          employeeRate: formData?.specialRates?.employeeRate,\n          friendsAndFamilyRate: formData?.specialRates?.friendsAndFamilyRate,\n          fromId: additionalQSParameters?.fromId,\n          government: formData?.specialRates?.governmentOrMilitaryRate,\n          groupCode: formData?.specialRates?.groupCode,\n          offerId: formData?.specialRates?.useOfferId ? formData?.specialRates?.offerId?.id : null,\n          ownerHGVRate: formData?.specialRates?.ownerHGVRate,\n          ownerVIPRate: formData?.specialRates?.ownerVIPRate,\n          pnd: formData?.specialRates?.usePnd ? formData?.specialRates?.pnd?.pnd : null,\n          promoCode: formData?.specialRates?.promoCode,\n          requestedRatesOnly: additionalQSParameters?.requestedRatesOnly,\n          senior: formData?.specialRates?.seniorRate,\n          smbRate: formData?.specialRates?.smbRate,\n          travelAgents: formData?.specialRates?.travelAgentRate,\n          tripleA: formData?.specialRates?.aaaRate,\n          spec_plan: additionalQSParameters?.specPlan?.join(','),\n          //TODO PAUL. THIS LOGIC MAKES NO SENSE. IF CUSTOMER SAYS USEPOINTS IS FALSE BUT I HAVE A TOKEN I IGNORE IT?\n          usePoints:\n            token?.includes(RatePlanCodes.USE_POINTS) ||\n            formData?.specialRates?.redeemPts ||\n            additionalQSParameters?.redeemPts,\n        },\n        rooms: formData?.rooms,\n        sessionToken: formData?.sessionToken,\n        specialRateTokens: additionalQSParameters?.specialRatesTokens?.split(','),\n        cid: additionalQSParameters?.cid,\n      },\n    });\n  }\n\n  //TODO talk to kevin\n  /** OHW Book URL Generation */\n  return bookUriBuilder({\n    locale: locale as MapLanguage,\n    page: formData?.dates?.datesFlex ? 'flexibledates' : 'rooms',\n    relative: true,\n    urlParams: {\n      additionalQS: {\n        displayCurrency: additionalQSParameters?.displayCurrency,\n        requestedRatesOnly: additionalQSParameters?.requestedRatesOnly,\n        spec_plan: additionalQSParameters?.specPlan?.join(','),\n        specialRateTokens: additionalQSParameters?.specialRatesTokens,\n        srpName: additionalQSParameters?.specialRatesTokens,\n      },\n      adjoiningRoomStay: additionalQSParameters?.adjoiningRoomStay,\n      ctyhocn: formData.query || '',\n      dates: {\n        arrivalDate: formData?.dates?.arrivalDate,\n        departureDate: formData?.dates?.departureDate,\n        flexibleDates: formData?.dates?.datesFlex,\n      },\n      rates: {\n        aaaRate: formData?.specialRates?.aaaRate,\n        aarpRate: disableAARPSpecialRates ? undefined : formData?.specialRates?.aarpRate,\n        corporateCode: formData?.specialRates?.corporateCode,\n        employeeRate: formData?.specialRates?.employeeRate,\n        friendsAndFamilyRate: formData?.specialRates?.friendsAndFamilyRate,\n        fromId: additionalQSParameters?.fromId,\n        governmentRate: formData?.specialRates?.governmentOrMilitaryRate,\n        groupCode: formData?.specialRates?.groupCode,\n        offerId: formData?.specialRates?.offerId?.id,\n        ownerHGVRate: formData?.specialRates?.ownerHGVRate,\n        ownerVIPRate: formData?.specialRates?.ownerVIPRate,\n        pnd: formData?.specialRates?.pnd?.pnd,\n        promotionCode: formData?.specialRates?.promoCode,\n        redeemPts: formData?.specialRates?.redeemPts,\n        seniorRate: formData?.specialRates?.seniorRate,\n        smbRate: formData?.specialRates?.smbRate,\n        travelAgent: formData?.specialRates?.travelAgentRate,\n        travelAgentId: formData?.specialRates?.travelAgentId,\n      },\n      rooms: formData?.rooms,\n      numRooms: getNumRooms(formData.numRooms),\n      numAttendees: formData?.numAttendees,\n    },\n  });\n};\n\nexport const generateSanitizedDefaultValues = (defaultValues?: FormDefaultValues) => {\n  const initialValues: FormDataValues = merge({}, DEFAULT_FORM_VALUES, defaultValues);\n\n  if (initialValues?.dates?.arrivalDate) {\n    initialValues.dates.arrivalDate = startOfDay(initialValues.dates.arrivalDate);\n  }\n  if (initialValues?.dates?.departureDate) {\n    initialValues.dates.departureDate = startOfDay(initialValues.dates.departureDate);\n  }\n\n  //clear HGV rate is user not eligible\n  if (!isHGVMax(initialValues?.hhonors)) {\n    initialValues['specialRates']['ownerHGVRate'] = false;\n  }\n\n  //clear tmtp rates if user is not eligible\n  if (!isOwner(initialValues?.hhonors)) {\n    if (isTeamMember(initialValues?.hhonors)) {\n      initialValues['specialRates']['ownerVIPRate'] = false;\n    } else if (isFriendsAndFamily(initialValues?.hhonors)) {\n      initialValues['specialRates']['ownerVIPRate'] = false;\n      initialValues['specialRates']['employeeRate'] = false;\n    } else {\n      initialValues['specialRates']['ownerVIPRate'] = false;\n      initialValues['specialRates']['employeeRate'] = false;\n      initialValues['specialRates']['friendsAndFamilyRate'] = false;\n    }\n  }\n\n  return initialValues;\n};\n\nexport const isflexDatesDreamRouting = ({\n  data,\n  target,\n  enableDreamRouting,\n  geocodeData,\n}: {\n  data: Partial<FormDataValues>;\n  target: string;\n  enableDreamRouting?: boolean;\n  geocodeData?: GeocodeQuery;\n}) => {\n  const noSpecialRatesOrOnlyUsePointsApplied = (specialRates?: Partial<SpecialRates>) => {\n    //no special rate applied\n    if ((specialRates && Object.values(specialRates).filter(Boolean).length === 0) || !specialRates)\n      return true;\n    //or only one special rate applied and that rate is usePoints\n    if (\n      specialRates &&\n      Object.values(specialRates).filter(Boolean).length < 2 &&\n      specialRates.redeemPts\n    )\n      return true;\n    return false;\n  };\n  const isDateLess = !(data?.dates?.arrivalDate && data?.dates?.departureDate);\n  return (\n    //flexDates dream routing opt-in\n    enableDreamRouting &&\n    /*geocode data returned for routing to dream flow \n    or search routing passed from dream page to route to search flow*/\n    !!geocodeData &&\n    !!geocodeData?.geocode?.match?.placeUri &&\n    (target === 'search' || target === 'search-zero') &&\n    noSpecialRatesOrOnlyUsePointsApplied(data?.specialRates) &&\n    //searched dates must be within 30 days of today or dateless\n    (isDateLess ||\n      (!!data?.dates?.arrivalDate &&\n        data?.dates?.datesFlex &&\n        differenceInDays(data?.dates?.arrivalDate, new Date()) <= 30))\n  );\n};\nexport const generateFlexDatesDreamRedirectURL = async ({\n  formData,\n  language,\n  additionalQSParameters,\n  geocodeData,\n  client,\n}: {\n  formData?: Partial<FormDataValues>;\n  language: string;\n  additionalQSParameters?: AdditionalQSParameters;\n  geocodeData?: GeocodeQuery;\n  client?: QueryClient;\n}) => {\n  let shouldAddLocationCoordParams = false;\n  try {\n    if (client) {\n      const { featureToggles } = await serverSideFeatureTogglesQuery(client, {\n        names: NHCSEARCH_4807,\n      });\n      shouldAddLocationCoordParams =\n        featureToggles.find(({ name }) => NHCSEARCH_4807 === name)?.enabled || false;\n    }\n  } catch (error) {\n    // eslint-disable-next-line no-console\n    console.error(error);\n  }\n\n  const locationCoordParams = {\n    placeId: geocodeData?.geocode?.match?.id,\n    location: geocodeData?.geocode?.match?.geometry?.location,\n    bounds: geocodeData?.geocode?.match?.geometry?.bounds,\n    geocodeType: geocodeData?.geocode?.match?.type,\n    query: formData?.query,\n  };\n  const urlParams: LocationUrlParams = {\n    displayCurrency: additionalQSParameters?.displayCurrency,\n    adjoiningRoomStay: additionalQSParameters?.adjoiningRoomStay,\n    sortBy: additionalQSParameters?.sortBy,\n    f_amenityIds: additionalQSParameters?.f_amenityIds,\n    f_brandCodes: additionalQSParameters?.f_brandCodes,\n    f_price: additionalQSParameters?.f_price,\n    f_tripAdvisorRatings: additionalQSParameters?.f_tripAdvisorRatings,\n    redeemPts: formData?.specialRates?.redeemPts || additionalQSParameters?.redeemPts,\n    placeUri: geocodeData?.geocode?.match?.placeUri,\n    cid: additionalQSParameters?.cid,\n    content: additionalQSParameters?.content,\n    ...(shouldAddLocationCoordParams && locationCoordParams),\n  };\n  const brandCodeParam = additionalQSParameters?.brandCode as keyof BrandCode;\n  const locationUrlString = locationUriBuilder({\n    locale: language,\n    brandCode: brandCodeParam ?? (formData?.brandCode as keyof BrandCode),\n    urlParams,\n    relative: true,\n  });\n  return locationUrlString;\n};\n\nexport const SHOP_FORM_ORIGINAL_OP_NAMES = [\n  GetSpeedBumpFeatureConfigsDocument.originalOpName,\n  GetTranslateAutocompleteConfigDocument.originalOpName,\n  FeatureTogglesDocument.originalOpName,\n];\nexport const getServerSideShopFormData: (\n  queryClient: QueryClient,\n  options?: { getTranslateAutocomplete?: boolean }\n) => Promise<void | GetSpeedBumpFeatureConfigsQuery> = (queryClient, options = {}) => {\n  const { getTranslateAutocomplete = false } = options;\n  const speedBumpFeatureconfig = getSpeedBumpFeatureConfig(queryClient).catch((e) => {\n    // eslint-disable-next-line no-console\n    console.error('Error fetching shopFormSpeedBumpData', e);\n  });\n\n  if (getTranslateAutocomplete)\n    serverSideGetTranslateAutocompleteConfigQuery(queryClient).catch((e: Error) => {\n      console.error('Error fetching translateAutocompleteData', e); // eslint-disable-line no-console\n    });\n\n  serverSideFeatureTogglesQuery(queryClient, { names: [DISABLE_AARP_SPECIAL_RATES] }).catch((e) => {\n    // eslint-disable-next-line no-console\n    console.error('Error fetching aarp-special-rate-toggle featureConfigs', e);\n  });\n\n  return speedBumpFeatureconfig;\n};\n","import { useTranslation } from 'next-i18next';\nimport type { TFunction } from 'i18next';\nimport { differenceInDays, isSameYear } from 'date-fns';\nimport type { ShopFormRoom } from '@dx-ui/osc-rooms';\n\ntype ResSummaryText = {\n  dates: string;\n  adaDates: string;\n  kidsAgesText: string | null;\n  occupancy: string;\n  stayDuration?: string;\n};\n\nconst handleUnder1Text = (childAge: number, t: TFunction<'osc-rooms', undefined>) =>\n  childAge === 0 ? t('occupancy.under1') : childAge;\n\nexport const useShopFormSummaryText = ({\n  arrivalDate,\n  departureDate,\n  language,\n  showChildAges,\n  rooms,\n}: {\n  arrivalDate: Date | null;\n  departureDate: Date | null;\n  /** language value passed from router */\n  language: string;\n  showChildAges?: boolean;\n  rooms: ShopFormRoom[];\n}): ResSummaryText => {\n  const { t } = useTranslation('osc-rooms');\n  const { formattedStayDates, adaFormattedStayDates, stayDuration } = useFormattedStayDates({\n    arrivalDate,\n    departureDate,\n    language,\n  });\n  const numRooms = rooms.length;\n  const { numAdults, numChildren, childrenAges } = rooms.reduce(\n    (acc, room) => {\n      acc.numAdults = acc.numAdults + room.adults;\n      acc.numChildren = acc.numChildren + room.children.length;\n      acc.childrenAges = [\n        ...acc.childrenAges,\n        ...room.children.filter((c) => typeof c.age === 'number').map((c) => c.age as number),\n      ];\n      return acc;\n    },\n    { numAdults: 0, numChildren: 0, childrenAges: [] as number[] }\n  );\n  const updatedChildrenAges = childrenAges?.map((childAge) => handleUnder1Text(childAge, t));\n  const roomsText = t('occupancy.rooms', { count: numRooms });\n  const adultsText = t('occupancy.adult', { count: numAdults ?? undefined });\n  const hasKids = (numChildren || 0) > 0;\n  const kidsText = hasKids ? t('occupancy.kids', { count: numChildren ?? undefined }) : '';\n\n  let kidsAgesText: string | null = null;\n\n  if (showChildAges && hasKids && updatedChildrenAges?.length) {\n    const firstKidsAge = updatedChildrenAges?.slice(0, -1).join(', ');\n\n    kidsAgesText = t('occupancy.kidsAgeText', {\n      count: updatedChildrenAges.length,\n      firstKidsAge: updatedChildrenAges.length < 3 ? firstKidsAge : firstKidsAge + ',',\n      lastKidAge: updatedChildrenAges?.slice(-1)[0],\n      kidAge: updatedChildrenAges[0],\n    });\n  }\n\n  const noDatesStayDuration = formattedStayDates ? t('occupancy.dayOnly') : t('occupancy.anyDates');\n\n  return {\n    dates: formattedStayDates,\n    adaDates: adaFormattedStayDates,\n    kidsAgesText,\n    occupancy: t(kidsText ? 'occupancy.occupancyWithKids' : 'occupancy.occupancy', {\n      adults: adultsText,\n      kids: kidsText,\n      rooms: roomsText,\n    }),\n    stayDuration:\n      stayDuration === 0\n        ? noDatesStayDuration\n        : t('occupancy.stayDurationNights', { count: stayDuration }),\n  };\n};\n\nexport const formatDates = (arrivalDate: Date, departureDate: Date, locale: Intl.Locale) => {\n  const sameYear = isSameYear(arrivalDate, departureDate);\n  const kanji = isKanji(locale);\n  const month = isTurkish(locale) ? ('long' as const) : ('short' as const);\n  const weekday = 'short';\n  const day = 'numeric';\n  const year = 'numeric';\n  const options: Intl.DateTimeFormatOptions = {\n    weekday,\n    month,\n    day,\n  };\n  const optionsWithYear: Intl.DateTimeFormatOptions = { ...options, year };\n\n  const arrivalDateString = arrivalDate.toLocaleDateString(\n    locale,\n    !sameYear || kanji ? optionsWithYear : options\n  );\n  const departureDateString = departureDate.toLocaleDateString(\n    locale,\n    sameYear && kanji ? options : optionsWithYear\n  );\n\n  return `${arrivalDateString} \\u2013 ${departureDateString}`;\n};\n\nexport interface Props {\n  children: (args: {\n    arrivalDate: Date | null;\n    departureDate: Date | null;\n    formattedStayDates: string;\n    adaFormattedStayDates: string;\n    stayDuration: number;\n  }) => JSX.Element | null;\n}\n\nexport function useFormattedStayDates({\n  language,\n  arrivalDate,\n  departureDate,\n}: {\n  language: string;\n  arrivalDate: Date | null;\n  departureDate: Date | null;\n}) {\n  const locale = useLocale({ language });\n  const { t, ready: textReady } = useTranslation('osc-rooms');\n\n  return {\n    formattedStayDates:\n      !!arrivalDate && !!departureDate && !!locale\n        ? formatDates(arrivalDate, departureDate, locale)\n        : '',\n    adaFormattedStayDates:\n      !!arrivalDate && !!departureDate && !!locale\n        ? t('occupancy.stayDatesADA', {\n            arrivalDate: arrivalDate.toLocaleDateString(locale, {\n              dateStyle: 'full',\n            }),\n            departureDate: departureDate.toLocaleDateString(locale, { dateStyle: 'full' }),\n          })\n        : '',\n    stayDuration:\n      !!arrivalDate && !!departureDate ? differenceInDays(departureDate, arrivalDate) : 0,\n    textReady,\n  };\n}\n\nexport const isKanji = (locale: string | Intl.Locale) => {\n  const language = localeToLanguage(locale);\n  return ['ja', 'ko', 'zh-hans', 'zh-hant'].includes(language);\n};\n\nexport const isTurkish = (locale: Intl.Locale | string) => {\n  const language = localeToLanguage(locale);\n  return ['tr'].includes(language);\n};\n\nfunction localeToLanguage(locale: string | Intl.Locale) {\n  return (\n    isLocale(locale) && locale?.baseName ? locale.baseName : (locale as string)\n  ).toLowerCase();\n}\n\nfunction isLocale(locale: string | Intl.Locale | undefined): locale is Intl.Locale {\n  if ((locale as Intl.Locale)?.baseName) {\n    return true;\n  }\n  return false;\n}\n\nconst defaultOptions: Intl.DateTimeFormatOptions = {\n  calendar: 'gregory',\n};\n\nconst localeOptions: Record<string, Intl.DateTimeFormatOptions> = {\n  ar: {\n    numberingSystem: 'latn',\n  },\n};\n\nexport function useLocale({ language }: { language: string }) {\n  return new Intl.Locale(language, {\n    ...defaultOptions,\n    ...localeOptions[language],\n  });\n}\n","import Icon from '@dx-ui/osc-icon';\nimport type * as React from 'react';\nimport cx from 'classnames';\nimport { useShopFormSummaryText } from './shop-form.summary.utils';\nimport { useTranslation } from 'next-i18next';\nimport type { ShopFormRoom } from '@dx-ui/osc-rooms';\nimport { useMediaQuery } from 'usehooks-ts';\n\nexport type ShopFormSummaryProps = {\n  arrivalDate: Date | null;\n  className?: string;\n  departureDate: Date | null;\n  editButtonRef?: React.Ref<HTMLButtonElement>;\n  isExpanded: boolean;\n  isLoading?: boolean;\n  language: string;\n  location?: string;\n  onEditClick: () => void;\n  rooms: ShopFormRoom[];\n  showChildAges?: boolean;\n  summaryType: 'search' | 'stay';\n  hideRoomSummary?: boolean;\n};\n\nexport function ShopFormSummary({\n  arrivalDate,\n  className,\n  departureDate,\n  editButtonRef,\n  isExpanded,\n  isLoading: isLoadingProp,\n  language,\n  location,\n  onEditClick,\n  rooms,\n  showChildAges,\n  summaryType,\n  hideRoomSummary,\n}: ShopFormSummaryProps) {\n  const isLargeView = useMediaQuery('(min-width: 1024px)');\n  const isSmallAndMediumView = !isLargeView;\n  const { t, ready } = useTranslation('osc-shop-form');\n  const { dates, adaDates, kidsAgesText, occupancy, stayDuration } = useShopFormSummaryText({\n    arrivalDate,\n    departureDate,\n    language,\n    rooms,\n    showChildAges,\n  });\n  const titleText = summaryType === 'search' ? t('yourSearchTitleCase') : t('yourStayTitleCase');\n  const editText = summaryType === 'search' ? t('editSearch') : t('editStayTitleCase');\n  const locationAnywhere = t('anywhere');\n  const adaEditSummary =\n    summaryType === 'search'\n      ? t('editSearchDetails', { location, dates: adaDates, occupancy })\n      : t('editStayDetails', { location: location ?? undefined, dates: adaDates, occupancy });\n\n  const isLoading = isLoadingProp || !ready;\n\n  const editStayButton = (\n    <button\n      ref={editButtonRef}\n      className=\"btn-primary-link\"\n      type=\"button\"\n      aria-expanded={isExpanded}\n      aria-label={adaEditSummary}\n      onClick={onEditClick}\n      data-testid=\"search-edit-button\"\n    >\n      {editText}\n    </button>\n  );\n\n  return (\n    <div\n      className={cx(\n        'flex w-full flex-wrap justify-between gap-2 lg:flex-nowrap lg:items-center lg:justify-center lg:gap-3',\n        className\n      )}\n      data-testid=\"search-summary\"\n    >\n      <div className=\"font-bold lg:shrink-0\">\n        {isLoading ? <SkeletonLoader className=\"h-6 w-16\" /> : titleText}\n      </div>\n      {isLoading ? (\n        <SkeletonLoader className=\"h-6 w-16 lg:hidden\" />\n      ) : isSmallAndMediumView ? (\n        editStayButton\n      ) : null}\n      <div className=\"flex w-full flex-col gap-2 lg:w-auto lg:flex-row lg:gap-3 lg:divide-x lg:divide-border lg:border-e lg:border-border lg:pe-3 rtl:lg:divide-x-reverse lg:[&>*:not(:first-child)]:ps-3 lg:[&>*]:py-2\">\n        {isLoading ? (\n          <SkeletonLoader className=\"h-6 w-20 lg:self-center\" />\n        ) : (\n          <div className=\"flex w-full gap-1 lg:w-auto lg:min-w-0\">\n            <Icon name=\"hotel-location\" variant=\"solid\" className=\"size-6\" />\n            <span\n              className=\"text-base font-normal lg:truncate\"\n              title={location || locationAnywhere}\n            >\n              {location || locationAnywhere}\n            </span>\n          </div>\n        )}\n        <div className=\"flex w-full gap-1 lg:w-auto lg:shrink-0\" data-testid=\"search-summary-dates\">\n          <Icon name=\"calendar\" variant=\"solid\" className=\"size-6\" />\n          {isLoading ? (\n            <SkeletonLoader className=\"h-6 w-64\" />\n          ) : (\n            <>\n              <span aria-hidden={true}>\n                {dates}\n                {dates ? ' ' : null}\n                <span\n                  className={cx('inline-block whitespace-nowrap text-base font-normal', {\n                    'text-text-alt': dates,\n                  })}\n                  data-testid=\"search-summary-nights\"\n                >\n                  {dates ? `(${stayDuration})` : stayDuration}\n                </span>\n              </span>\n              <span className=\"sr-only\">\n                {adaDates} {stayDuration}\n              </span>\n            </>\n          )}\n        </div>\n        {hideRoomSummary ? null : (\n          <div className=\"flex w-full gap-1 lg:w-auto lg:min-w-0\">\n            <Icon name=\"users\" className=\"size-6\" />\n            {isLoading ? (\n              <SkeletonLoader className=\"h-6 w-28\" />\n            ) : (\n              <span\n                className=\"lg:truncate\"\n                title={`${occupancy}${kidsAgesText ? kidsAgesText : ''}`}\n              >\n                {occupancy}\n                {kidsAgesText ? <span className=\"text-text-alt\"> {kidsAgesText}</span> : null}\n              </span>\n            )}\n          </div>\n        )}\n      </div>\n      {isLoading ? (\n        <SkeletonLoader className=\"hidden h-6 w-16 lg:block\" />\n      ) : isLargeView ? (\n        editStayButton\n      ) : null}\n    </div>\n  );\n}\n\nfunction SkeletonLoader({\n  className,\n  ...rest\n}: React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>) {\n  return (\n    <span\n      className={cx('inline-block animate-pulse bg-bg-alt align-middle', className)}\n      {...rest}\n    />\n  );\n}\n","import * as React from 'react';\nimport type { FormDataValues, ShopForm } from '../shop-form';\nimport { useTranslationsConfig } from '@dx-ui/osc-speedbump';\nimport type { Rule, Facts } from '@dx-shared/rule-engine';\nimport { RuleEngine } from '@dx-shared/rule-engine';\nimport { useRouter } from 'next/router';\nimport { useTranslation } from 'next-i18next';\n\nconst DEFAULT_LANGUAGE = 'en';\n\nexport function useShopFormSpeedBump({\n  locale,\n  onSubmit,\n  targetOHWPage,\n}: Pick<React.ComponentProps<typeof ShopForm>, 'onSubmit' | 'targetOHWPage'> & {\n  locale: string;\n}) {\n  const { asPath } = useRouter();\n  const { t } = useTranslation(['osc-speedbump', 'osc-rooms']);\n\n  const [speedBumpData, setSpeedBumpData] = React.useState<{\n    formData: FormDataValues;\n    url: string | null;\n  } | null>(null);\n  const [speedBumpType, setSpeedBumpType] = React.useState<'language' | 'ten-plus' | null>(null);\n  const { translateRules } = useTranslationsConfig({ isEnabled: !!targetOHWPage });\n\n  const isSpeedBumpVisible = speedBumpData !== null;\n  const closeSpeedBump = () => {\n    setSpeedBumpData(null);\n  };\n\n  const handleSpeedBumpClose = () => {\n    closeSpeedBump();\n  };\n  const handleSpeedBumpContinue = () => {\n    let url = speedBumpData?.url ?? null;\n    if (speedBumpType === 'language') {\n      url = speedBumpData?.url?.replace(`/${locale}/`, `/${DEFAULT_LANGUAGE}/`) || null;\n    }\n    if (\n      speedBumpData?.formData &&\n      speedBumpType !== 'language' &&\n      shouldShowLanguageSpeedBump(url)\n    ) {\n      setSpeedBumpData({ formData: speedBumpData?.formData, url });\n      setSpeedBumpType('language');\n      return;\n    }\n    speedBumpData &&\n      onSubmit?.({\n        formData: speedBumpData.formData,\n        url,\n        locale: speedBumpType === 'language' ? DEFAULT_LANGUAGE : locale ?? DEFAULT_LANGUAGE,\n      });\n    closeSpeedBump();\n  };\n\n  const shouldShowLanguageSpeedBump = (url?: string | null) => {\n    if (url && locale && locale !== DEFAULT_LANGUAGE) {\n      try {\n        const ruleEngine = new RuleEngine(translateRules as Rule);\n\n        return ruleEngine?.run({ language: locale, url } as Facts) === false;\n      } catch (e) {\n        console.warn('Error while running rule engine in shouldShowSpeedBump', e); // eslint-disable-line no-console\n        return true;\n      }\n    }\n  };\n  const shouldShowSpeedBump = (url?: string | null, formData?: FormDataValues) => {\n    const isGMELessThanTenRoomsAndNoAttendees =\n      asPath.includes('/events/') &&\n      formData?.numRooms &&\n      Number(formData.numRooms) < 10 &&\n      (!formData?.numAttendees || Number(formData?.numAttendees) === 0);\n\n    if (isGMELessThanTenRoomsAndNoAttendees) {\n      setSpeedBumpType('ten-plus');\n      return true;\n    }\n    if (shouldShowLanguageSpeedBump(url)) {\n      setSpeedBumpType('language');\n      return true;\n    }\n    return false;\n  };\n\n  const getSpeedBumpOptions = () => {\n    switch (speedBumpType) {\n      case 'language':\n        return {\n          title: t('osc-speedbump:title'),\n        };\n      case 'ten-plus':\n        return {\n          title: t('osc-rooms:roomsAttendees.groupSpeedbump.speedbumpTitle'),\n          message: t('osc-rooms:roomsAttendees.groupSpeedbump.speedbumpMessage'),\n          confirmButtonLabel: t('osc-rooms:roomsAttendees.groupSpeedbump.continueSelections'),\n          cancelButtonLabel: t('osc-rooms:roomsAttendees.groupSpeedbump.changeSelections'),\n        };\n\n      default:\n        break;\n    }\n  };\n  return {\n    isSpeedBumpVisible,\n    handleSpeedBumpClose,\n    handleSpeedBumpContinue,\n    shouldShowSpeedBump,\n    setSpeedBumpData,\n    speedBumpType,\n    getSpeedBumpOptions,\n  };\n}\n","import { Dialog } from '@dx-ui/osc-dialog-v2';\nimport { useTranslation } from 'next-i18next';\n\nexport const GeocodeFailModal = ({\n  isGeocodeError,\n  setIsGeoCodeError,\n  dialogTrigger,\n}: {\n  isGeocodeError: boolean;\n  setIsGeoCodeError: React.Dispatch<React.SetStateAction<boolean>>;\n  dialogTrigger?: React.ReactNode;\n}) => {\n  const { t } = useTranslation('osc-shop-form');\n\n  return (\n    <Dialog\n      isOpen={isGeocodeError}\n      size=\"sm\"\n      onDismiss={() => setIsGeoCodeError(false)}\n      title={t('geocodeFailModalTitle')}\n      dialogTrigger={dialogTrigger}\n    >\n      <div className=\"pb-2 text-center\">\n        <div>{t('geocodeFailModalContent')}</div>\n      </div>\n      <div className=\"flex items-center justify-center space-x-2 py-2 rtl:space-x-reverse\">\n        <button\n          className=\"btn btn-lg btn-primary\"\n          onClick={() => setIsGeoCodeError(false)}\n          type=\"button\"\n        >\n          {t('geocodeFailModalButton')}\n        </button>\n      </div>\n    </Dialog>\n  );\n};\n","import { DISABLE_AARP_SPECIAL_RATES } from '../constants/featureToggles';\nimport { useFeatureTogglesQuery } from '../gql/queries';\nimport { getIsFeatureToggleEnabled } from '@dx-ui/utilities-feature-toggles-configs';\n\nexport function useAarpToggle() {\n  const { data } = useFeatureTogglesQuery({\n    names: [DISABLE_AARP_SPECIAL_RATES],\n  });\n\n  return {\n    disableAARPSpecialRates: getIsFeatureToggleEnabled({\n      featureToggleData: data,\n      name: DISABLE_AARP_SPECIAL_RATES,\n    }),\n  };\n}\n","import type { FormProps } from '@dx-ui/osc-form';\nimport { Form, FormConnector } from '@dx-ui/osc-form';\nimport cx from 'classnames';\nimport * as React from 'react';\nimport { useTranslation } from 'next-i18next';\nimport type { AdditionalQSParameters } from './shop-form.utils';\nimport { generateShopFormUrl, generateSanitizedDefaultValues } from './shop-form.utils';\nimport type { DEFAULT_FORM_VALUES } from './shop-form.constants';\nimport { ShopFormSummary } from './shop-form.summary';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { serverSideGeocodeQuery } from './gql/queries';\nimport type { FormState } from 'react-hook-form';\nimport { getSafeLanguage } from '@dx-ui/framework-react-query';\nimport type { Hhonors, SpecialRates } from '@dx-ui/osc-special-rates';\nimport type { ShopFormRoom } from '@dx-ui/osc-rooms';\nimport type { ShopFormDatesProps } from './shop-form.dates';\nimport { Speedbump } from '@dx-ui/osc-speedbump';\nimport { useShopFormSpeedBump } from './hooks/use-shop-form-speedbump';\nimport type { GeocodeQuery } from './gql/types';\nimport { GeocodeFailModal } from './shop-form.geocode-fail-modal';\nimport { logError } from '@dx-ui/framework-logger';\nimport { ControlClose } from '@dx-ui/osc-controls';\nimport { useAarpToggle } from './hooks/use-aarp-toggle';\n\ntype FormValues = Omit<\n  typeof DEFAULT_FORM_VALUES,\n  'dates' | 'hhonors' | 'numRooms' | 'numAttendees' | 'specialRates' | 'numNights'\n> & {\n  dates: {\n    arrivalDate: Date | null;\n    departureDate: Date | null;\n    datesFlex: boolean;\n  };\n  hhonors: Hhonors | null;\n  numRooms: number | null;\n  numNights: number | null;\n  numAttendees: number | null;\n  specialRates: SpecialRates;\n  shouldFocusRoomsInput?: boolean;\n};\n\ntype DeepPartial<T> = T extends object\n  ? {\n      [P in keyof T]?: DeepPartial<T[P]>;\n    }\n  : T;\n\nexport interface FormDataValues extends FormValues {\n  dates: ShopFormDatesProps;\n  hhonors: Hhonors;\n  rooms: ShopFormRoom[];\n}\n\nexport interface FormDefaultValues extends DeepPartial<FormDataValues> {\n  dates?: Partial<ShopFormDatesProps>;\n  rooms?: ShopFormRoom[];\n  specialRates?: Partial<SpecialRates>;\n}\n\nexport type TargetOHWPage = 'search' | 'ten-plus-search' | 'book' | 'ten-plus-book' | 'search-zero';\n\ntype ShopForm = {\n  /** Additional query string parameters that are typically pass-through parameters that are not used in widget directly */\n  additionalQSParameters?: AdditionalQSParameters;\n  buttonClassName?: string;\n  /** override for the cta button text */\n  cta?: string;\n  /** initial values to set in form */\n  defaultValues?: FormDefaultValues;\n  /** enable to exclude the internal form provider when wrapping with \\<ShopFormProvider /\\> */\n  excludeProvider?: boolean;\n  isLoading?: boolean;\n  /** language value passed from router */\n  language: string;\n  onClose?: () => void;\n  onSubmit?: (args0: { formData: FormDataValues; url: string | null; locale: string }) => void;\n  shouldDirtyToSubmit?: boolean;\n  /** Adds screen reader text to update button **/\n  submitOpensNewTab?: boolean;\n  /** Target OHW page to generate URL for from onSubmit. If none passed url in onSubmit will return null */\n  summaryOptions?: {\n    expanded?: boolean;\n    initiallyExpanded?: boolean;\n    state?: FormDataValues;\n    onEditClick?: () => void;\n    showChildAges?: boolean;\n    summaryClassName?: string;\n    summaryWrapperClassName?: string;\n    suppressHeader?: boolean;\n    hideRoomSummary?: boolean;\n    type: 'search' | 'stay';\n  };\n  /** Target OHW page to generate URL for from onSubmit. If none passed url in onSubmit will return null */\n  targetOHWPage?: TargetOHWPage;\n  /** optional title of the form */\n  title?: string;\n  wrapperClassName?: string;\n  useFormProps?: Pick<FormProps, 'useFormProps'> & {\n    defaultValues?: FormDefaultValues;\n  };\n  /**Opt-in to route flex date searches to locations page results - <br/>\n   * Once routed to dream flow, dates and flexible date selection will be wiped <br/>\n   * If user selects again in dream flow, will be routed to search flow flex dates experience.\n   */\n  enableDatesFlexDreamRouting?: boolean;\n  baseUrl?: string;\n  canAlwaysSubmit?: boolean;\n  onSubmitClick?: (formState: FormState<FormDataValues>) => void;\n  renderAfterUpdateButton?: React.ReactNode;\n  shouldDisplayGeocodeErrorModal?: boolean;\n  /** Override for the Error Banner Defaults to displaying */\n  hasErrorBanner?: boolean | undefined;\n} & Omit<FormProps, 'onSubmit'>;\n\nexport const wrapperClassNameDefault = [\n  'container', // container needs to be first for wrappers to slice(1) to remove\n  'relative',\n  'flex',\n  'flex-wrap',\n  'items-end',\n  'justify-center',\n  'gap-2',\n  'lg:gap-3',\n  'lg:flex-nowrap',\n];\n\nexport const wrapperClassNameDefaultWithLocation = [...wrapperClassNameDefault, 'lg:mb-6'];\n\n/**\n * The OSC shop form is an extended version of the OSC form component with some key additional features:\n *\n * `defaultValues` is somewhat strictly typed with `FormDefaultValues`. This allows consumers to pass in search-specific defaults like dates, room parameters, and special rates. The defaults also allow us to handle business logic cases—such as generating valid search URLs—more easily.\n\nTo use more freeform form values, consider using [the OSC `<Form />` component instead](https://nx-storybook-ui.dig-t.hhc.hilton.com/?path=/docs*library-components-form--combining-form-components).\n *\n * Use the `additionalQSParameters` prop to include any “passthrough” query strings. `displayCurrency` are used to ensure the URL returned from `onFormSubmit()` is generated properly.\n *\n * Certain error handling is built in and standardized. For example, if a user tries to select a freeform rate while trying to use points, the form displays messaging that lets the user know they cannot use both points and freeform rates.\n *\n * The `targetOHWPage` allows for auto generation of a specific OHW page URL as part of the `onSubmit` callback. The resulting URI is only valid if consumers pass the correct initial values into `additionalQSParameters` and `defaultValues` props.\n */\nexport const ShopForm: React.FC<React.PropsWithChildren<ShopForm>> = ({\n  additionalQSParameters,\n  buttonClassName,\n  children,\n  cta,\n  defaultValues,\n  excludeProvider,\n  isLoading: isLoadingProp,\n  language,\n  onClose,\n  onSubmit,\n  shouldDirtyToSubmit = false,\n  onSubmitClick,\n  canAlwaysSubmit = false,\n  submitOpensNewTab,\n  summaryOptions,\n  targetOHWPage,\n  title,\n  wrapperClassName,\n  enableDatesFlexDreamRouting = false,\n  renderAfterUpdateButton,\n  shouldDisplayGeocodeErrorModal = false,\n  hasErrorBanner,\n  useFormProps,\n  ...rest\n}) => {\n  const client = useQueryClient();\n  const formContentRef = React.useRef<HTMLDivElement | null>(null);\n  const editButtonRef = React.useRef<HTMLButtonElement | null>(null);\n  const [\n    {\n      hasLocationInput,\n      hasRoomsButton,\n      hasSpecialRatesButton,\n      hasNumRoomsButton,\n      hasNumAttendeesButton,\n    },\n    setElementState,\n  ] = React.useState<ReturnType<typeof getElementState>>(getElementState(formContentRef.current));\n  const { t, ready } = useTranslation(['osc-link', 'osc-shop-form']);\n  const isLoading = !ready || isLoadingProp;\n  const [isExpanded, setIsExpanded] = React.useState(\n    !!summaryOptions?.initiallyExpanded || !summaryOptions\n  );\n  const [isGeocodeError, setIsGeoCodeError] = React.useState(false);\n  const expanded = !!summaryOptions?.expanded || isExpanded;\n  const locale = React.useMemo(() => getSafeLanguage(language), [language]);\n  const {\n    isSpeedBumpVisible,\n    handleSpeedBumpClose,\n    handleSpeedBumpContinue,\n    shouldShowSpeedBump,\n    setSpeedBumpData,\n    speedBumpType,\n    getSpeedBumpOptions,\n  } = useShopFormSpeedBump({ locale, onSubmit, targetOHWPage });\n\n  const { disableAARPSpecialRates } = useAarpToggle();\n\n  //React hook form doesn't recommend undefined defaultValues. So merge user values with defaults object to pass into consumer form values.\n  const defaultValuesWithDefaults = React.useMemo(\n    () => generateSanitizedDefaultValues(defaultValues),\n    [defaultValues]\n  );\n\n  const [internalSummaryState, setInternalSummaryState] =\n    React.useState<FormDataValues>(defaultValuesWithDefaults);\n  const summaryState = summaryOptions?.state || internalSummaryState;\n\n  const onFormSubmit = async (data: FormDataValues) => {\n    const formData = {\n      ...data,\n      rooms: data.rooms.map((room) => ({\n        adults: room.adults,\n        children: room.children.map((c) => {\n          return { age: Number.isNaN(c.age) ? null : c.age };\n        }),\n      })),\n    };\n    setInternalSummaryState(formData);\n\n    const hasGeoCodeInput = formData.query || formData.placeId;\n    const hasFlexDates = formData.dates.datesFlex && enableDatesFlexDreamRouting;\n    const shouldAttemptToGeocode =\n      hasGeoCodeInput && (hasFlexDates || shouldDisplayGeocodeErrorModal);\n\n    let geocodeData: GeocodeQuery = {};\n\n    if (shouldAttemptToGeocode) {\n      try {\n        geocodeData = await serverSideGeocodeQuery(client, {\n          address: formData?.query,\n          placeId: formData?.placeId,\n          sessionToken: formData?.sessionToken,\n          language: locale || 'en',\n        });\n\n        if (!geocodeData?.geocode && shouldDisplayGeocodeErrorModal) return setIsGeoCodeError(true);\n      } catch (error) {\n        if (error instanceof Error || typeof error === 'string')\n          logError('OSC_SHOP_FORM', error, 'failed to fetch geocode data');\n        if (shouldDisplayGeocodeErrorModal) {\n          return setIsGeoCodeError(true);\n        }\n      }\n    }\n    if (onSubmit) {\n      const url = targetOHWPage\n        ? await generateShopFormUrl({\n            additionalQSParameters,\n            formData,\n            locale,\n            disableAARPSpecialRates,\n            targetOHWPage,\n            enableDatesFlexDreamRouting,\n            geocodeData,\n            client,\n          })\n        : null;\n      if (shouldShowSpeedBump(url, formData)) {\n        setSpeedBumpData({ formData, url });\n        return;\n      }\n      onSubmit({ formData, url, locale });\n    }\n  };\n  React.useEffect(() => {\n    if (!isLoading && expanded) {\n      setElementState(getElementState(formContentRef.current));\n    }\n  }, [expanded, isLoading]);\n\n  function closeShopForm() {\n    setIsExpanded(false);\n    onClose?.();\n    editButtonRef?.current?.focus();\n  }\n  const formContent = (\n    <FormConnector<FormDataValues>>\n      {({ formState, setValue }) => {\n        const { isValid, isDirty } = formState;\n        const canSubmit =\n          canAlwaysSubmit || (summaryOptions || shouldDirtyToSubmit ? isValid && isDirty : isValid);\n\n        return (\n          <div>\n            <GeocodeFailModal\n              isGeocodeError={isGeocodeError}\n              setIsGeoCodeError={setIsGeoCodeError}\n            />\n            {summaryOptions ? (\n              <div\n                className={cx(summaryOptions.summaryWrapperClassName, {\n                  'border-border border-b pb-2': expanded,\n                })}\n              >\n                <ShopFormSummary\n                  className={summaryOptions.summaryClassName || 'container'}\n                  arrivalDate={summaryState.dates.arrivalDate}\n                  departureDate={summaryState.dates.departureDate}\n                  isLoading={isLoading}\n                  language={language}\n                  location={summaryState.query}\n                  onEditClick={() => {\n                    summaryOptions?.onEditClick?.();\n                    if (summaryOptions?.expanded === undefined) {\n                      setIsExpanded(true);\n                    }\n                  }}\n                  rooms={summaryState.rooms}\n                  showChildAges={summaryOptions.showChildAges}\n                  summaryType={summaryOptions.type}\n                  hideRoomSummary={summaryOptions.hideRoomSummary}\n                  isExpanded={expanded}\n                  editButtonRef={editButtonRef}\n                />\n              </div>\n            ) : null}\n            {!isLoading && expanded ? (\n              <div className={cx({ 'pt-2': summaryOptions })}>\n                {!!title && (\n                  <h2 className=\"heading-2xl mb-4 font-medium lg:heading-4xl\">{title}</h2>\n                )}\n                <div\n                  ref={formContentRef}\n                  className={\n                    wrapperClassName ||\n                    cx(...wrapperClassNameDefault, {\n                      'md:flex-nowrap':\n                        !hasRoomsButton &&\n                        !hasSpecialRatesButton &&\n                        !hasNumRoomsButton &&\n                        !hasNumAttendeesButton,\n                    })\n                  }\n                >\n                  {summaryOptions && !summaryOptions.suppressHeader && !hasLocationInput ? (\n                    <header\n                      className=\"w-full font-bold lg:mb-2.5 lg:w-auto\"\n                      id=\"shop-form-header\"\n                      data-testid=\"shop-form-header\"\n                      tabIndex={-1}\n                    >\n                      {summaryOptions.type === 'search'\n                        ? t('osc-shop-form:editSearch')\n                        : t('osc-shop-form:editStayTitleCase')}\n                    </header>\n                  ) : null}\n                  {children}\n                  <div\n                    data-osc-product=\"shop-form-btn-submit-wrapper\"\n                    className=\"flex w-full md:w-auto md:flex-1\"\n                  >\n                    <button\n                      data-osc-product=\"shop-form-button\"\n                      data-testid=\"search-submit-button\"\n                      disabled={!canSubmit}\n                      {...(onSubmitClick && { onClick: () => onSubmitClick(formState) })}\n                      className={\n                        buttonClassName ||\n                        'btn btn-lg shop-form-btn-submit w-full px-4 motion-safe:transition md:w-auto md:flex-1'\n                      }\n                      type=\"submit\"\n                    >\n                      {cta || t('osc-shop-form:ctaButton')}\n                      {submitOpensNewTab ? (\n                        <span className=\"sr-only\">{t('osc-link:newTab')}</span>\n                      ) : null}\n                    </button>\n                  </div>\n                  {renderAfterUpdateButton}\n                  {summaryOptions ? (\n                    <ControlClose\n                      onClick={closeShopForm}\n                      className=\"absolute -top-2.5 end-1 order-last md:end-4 lg:static lg:-ms-2\"\n                      size=\"xl\"\n                      label={t('osc-shop-form:close')}\n                    />\n                  ) : null}\n                </div>\n              </div>\n            ) : null}\n            {isSpeedBumpVisible ? (\n              <Speedbump\n                isShowing={true}\n                speedbumpOptions={getSpeedBumpOptions()}\n                onClose={() => {\n                  handleSpeedBumpClose();\n                  if (speedBumpType === 'ten-plus') setValue('shouldFocusRoomsInput', true);\n                }}\n                onContinue={handleSpeedBumpContinue}\n              />\n            ) : null}\n          </div>\n        );\n      }}\n    </FormConnector>\n  );\n\n  if (excludeProvider) {\n    return (\n      <FormConnector<FormDataValues>>\n        {({ handleSubmit }) => (\n          <form method=\"POST\" {...rest} noValidate onSubmit={handleSubmit(onFormSubmit)}>\n            {formContent}\n          </form>\n        )}\n      </FormConnector>\n    );\n  }\n\n  return (\n    <Form\n      onSubmit={onFormSubmit}\n      useFormProps={{\n        ...useFormProps,\n        defaultValues: defaultValuesWithDefaults,\n      }}\n      {...rest}\n      hasErrorBanner={hasErrorBanner}\n    >\n      {formContent}\n    </Form>\n  );\n};\n\nfunction getElementState(formContentElement: HTMLDivElement | null) {\n  return {\n    hasLocationInput: formContentElement?.querySelector(\n      '[data-osc-product=\"shop-form-location-input\"]'\n    ),\n    hasRoomsButton: formContentElement?.querySelector('[data-osc-product=\"search-rooms-button\"]'),\n    hasSpecialRatesButton: formContentElement?.querySelector(\n      '[data-osc-product=\"search-rates-button\"]'\n    ),\n    hasNumRoomsButton: formContentElement?.querySelector('#shop-form-numRooms'),\n    hasNumAttendeesButton: formContentElement?.querySelector('#shop-form-numAttendees'),\n  };\n}\n\nexport default ShopForm;\n","import { useEffect, useRef } from 'react';\n\nfunction usePreviousValue<T = unknown>(value: T) {\n  const ref = useRef<T>(value);\n\n  useEffect(() => {\n    ref.current = value;\n  }, [value]);\n\n  return ref.current;\n}\n\nexport { usePreviousValue };\n","export * from './use-previous-value';\n","export * from './lib';\n","import { useMemo, useEffect } from 'react';\nimport type { UseFormProps } from 'react-hook-form';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport { usePreviousValue } from '@dx-ui/utilities-use-previous-value';\nimport type { FormDataValues, FormDefaultValues } from './shop-form';\nimport { generateSanitizedDefaultValues } from './shop-form.utils';\nimport isEqual from 'lodash/isEqual';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\n\ntype SearchForProviderProps = React.PropsWithChildren<\n  Omit<UseFormProps<FormDataValues>, 'defaultValues'> & { defaultValues?: FormDefaultValues }\n>;\n\n/**\n * Use `<ShopFormProvider/>` when shop form state needs to be shared across multiple components e.g. `<ShopForm />` itself and an external `<ShopFormSpecialRates />` used on the same page.\n * When using with `<ShopForm />` make sure to set excludeProvider to true `<ShopForm excludeProvider={true} />`.\n */\nexport function ShopFormProvider({ children, ...formProps }: SearchForProviderProps) {\n  const defaultValuesWithDefaults = useMemo(\n    () => generateSanitizedDefaultValues(formProps.defaultValues),\n    [formProps.defaultValues]\n  );\n  const previousDefaultValues = usePreviousValue(defaultValuesWithDefaults);\n  const methods = useForm<FormDataValues>({\n    mode: 'onTouched',\n    criteriaMode: 'all',\n    ...formProps,\n    defaultValues: defaultValuesWithDefaults,\n  });\n  const reset = methods.reset;\n  const { defaultValues, setShopFormDefaultValues } = useShopFormDefaultValues();\n\n  useEffect(() => {\n    if (!isEqual(defaultValues, defaultValuesWithDefaults)) {\n      setShopFormDefaultValues(defaultValuesWithDefaults);\n    }\n    if (!isEqual(previousDefaultValues, defaultValuesWithDefaults)) {\n      reset(defaultValuesWithDefaults);\n    }\n  }, [\n    defaultValues,\n    defaultValuesWithDefaults,\n    reset,\n    previousDefaultValues,\n    setShopFormDefaultValues,\n  ]);\n\n  return <FormProvider {...methods}>{children}</FormProvider>;\n}\n\nexport function useShopFormDefaultValues() {\n  const queryClient = useQueryClient();\n  const queryKey = ['oscShopFormDefaultValues'];\n  const { data: defaultValues } = useQuery<FormDataValues>({ queryKey, enabled: false });\n  const setShopFormDefaultValues = (defaultValues: FormDefaultValues) => {\n    queryClient.setQueryData(queryKey, defaultValues);\n  };\n  return {\n    defaultValues,\n    setShopFormDefaultValues,\n  };\n}\n","import type * as React from 'react';\nimport { useTranslation } from 'next-i18next';\nimport { Location } from '@dx-ui/osc-location';\n\n/**\n * Use the `<ShopFormLocation/>` component inside of the ShopForm in order to provide the OSC experience for querying the location used to search.\n */\nexport const ShopFormLocation: React.FC<\n  React.PropsWithChildren<Partial<Location>> & Pick<Location, 'language'>\n> = ({ label, language, placeholder, ...rest }) => {\n  const [t] = useTranslation('osc-location');\n  return (\n    <div className=\"relative flex flex-basis-full\">\n      <Location\n        label={label ?? t('label')}\n        language={language}\n        placeholder={placeholder ?? t('placeholder')}\n        name=\"query\"\n        {...rest}\n      />\n    </div>\n  );\n};\n","import Icon from '@dx-ui/osc-icon';\nimport { useIsClient } from 'usehooks-ts';\nimport { isKanji, useLocale, useDateFormat } from '@dx-ui/utilities-dates';\nimport cx from 'classnames';\nimport type * as React from 'react';\n\ntype DatePickerDatesButton = {\n  children?: React.ReactNode;\n  className?: HTMLDivElement['className'];\n  day: Date;\n  dayTextColorClassName?: string;\n  language: string;\n  isReducedSize?: boolean;\n};\n\nconst DatePickerDatesButton: React.FC<React.PropsWithChildren<DatePickerDatesButton>> = ({\n  className,\n  children,\n  day,\n  dayTextColorClassName = 'text-primary',\n  language,\n  isReducedSize,\n}) => {\n  const locale = useLocale({ language });\n  const kanji = isKanji(locale) as boolean;\n  const options = kanji ? { weekday: 'long' as Intl.DateTimeFormatOptions['weekday'] } : {};\n  const dateFormatParts = useDateFormat({ date: day, locale, options });\n  const isClient = useIsClient();\n\n  const reducedSubTextSize = {\n    'text-xs': isReducedSize,\n    'text-base': !isReducedSize,\n  };\n\n  if (!day) {\n    return (\n      <span className=\"flex w-36 items-center justify-center whitespace-nowrap sm:w-auto sm:ps-2 sm:first-of-type:ps-0\">\n        <Icon name=\"calendar\" size=\"xl\" variant=\"solid\" className=\"text-primary\" />\n        {children ? (\n          <span data-osc-product=\"date-picker-buttons\" className=\"ms-2 text-sm leading-tight\">\n            {children}\n          </span>\n        ) : null}\n      </span>\n    );\n  }\n\n  if (!isClient) {\n    return (\n      <span className=\"flex w-36 items-center justify-center whitespace-nowrap sm:w-auto sm:ps-2 sm:first-of-type:ps-0\">\n        <span className={cx('w-20 rounded bg-bg-alt', kanji ? 'h-12' : 'h-11')} />\n      </span>\n    );\n  }\n\n  return kanji ? (\n    <span\n      aria-hidden\n      className={cx(\n        'flex h-12 items-center whitespace-nowrap sm:w-auto sm:ps-2 sm:first-of-type:ps-0',\n        className\n      )}\n    >\n      <span className=\"row-span-1 row-start-2\">\n        <span className={cx('block uppercase tabular-nums leading-none', reducedSubTextSize)}>\n          {dateFormatParts.month.numeric}\n          {dateFormatParts.month.text}\n        </span>\n      </span>\n      <span className=\"row-span-4 row-start-1\">\n        <span\n          className={cx('pe-1 font-bold tabular-nums leading-none', dayTextColorClassName, {\n            'text-3xl md:text-2xl lg:text-3xl': isReducedSize,\n            'text-4xl md:text-3xl lg:text-4xl': !isReducedSize,\n          })}\n        >\n          {dateFormatParts.day.numeric}\n          <span className=\"uppercase tabular-nums\">{dateFormatParts.day.text}</span>\n        </span>\n        <span className={cx('block uppercase tabular-nums leading-none', reducedSubTextSize)}>\n          {dateFormatParts.weekday}\n        </span>\n      </span>\n    </span>\n  ) : (\n    <span\n      aria-hidden\n      className={cx(\n        'flex w-32 items-end justify-center sm:w-auto sm:ps-2 sm:first-of-type:ps-0',\n        className,\n        {\n          'h-8': isReducedSize,\n          'h-11': !isReducedSize,\n        }\n      )}\n    >\n      <span\n        className={cx(\n          'pe-1 font-bold tabular-nums leading-[0.9] brand-ey:font-normal brand-hi-refresh:font-headline brand-hi-refresh:font-normal brand-hi-refresh:text-primary brand-lx:font-serif brand-lx:text-brand brand-ou:font-headline brand-ou:font-normal',\n          dayTextColorClassName,\n          {\n            'text-4xl': isReducedSize,\n            'text-5xl': !isReducedSize,\n          }\n        )}\n      >\n        {dateFormatParts.day.numeric}\n      </span>\n      <span className=\"flex flex-col\">\n        <span\n          className={cx(\n            'block font-bold uppercase tabular-nums leading-none brand-ey:font-normal brand-lx:font-semibold brand-ou:text-primary',\n            reducedSubTextSize\n          )}\n        >\n          {dateFormatParts.month.text}\n        </span>\n        <span\n          className={cx('block uppercase tabular-nums brand-ou:text-primary', reducedSubTextSize)}\n        >\n          {dateFormatParts.weekday}\n        </span>\n      </span>\n    </span>\n  );\n};\n\nexport { DatePickerDatesButton };\nexport default DatePickerDatesButton;\n","import type { Calendar as CalendarType } from '@dx-ui/osc-calendar';\nimport { Calendar } from '@dx-ui/osc-calendar';\nimport { useLocale } from '@dx-ui/utilities-dates';\nimport { isBefore, addDays } from 'date-fns';\nimport { useTranslation } from 'next-i18next';\nimport { useState } from 'react';\nimport { useFormContext } from 'react-hook-form';\n/**\n * Sub component containing calendar with shop form business logic applied\n * @returns JSX.Element\n */\n\nexport type DatePickerCalendarProps = {\n  day?: Date;\n  dayFieldName: string;\n  endDay?: Date;\n  endDayFieldName: string;\n  /**\n   * option to only search for single day stays\n   */\n  isDayUse?: boolean;\n  language: string;\n} & Pick<\n  CalendarType,\n  | 'allowSameDay'\n  | 'allowPrevious'\n  | 'dayLabel'\n  | 'maxDays'\n  | 'enabledDates'\n  | 'MonthDateSelectorComponent'\n>;\n\nexport const DatePickerCalendar = ({\n  allowPrevious,\n  allowSameDay,\n  day,\n  dayFieldName,\n  dayLabel,\n  isDayUse,\n  endDay,\n  endDayFieldName,\n  enabledDates,\n  language,\n  maxDays,\n  MonthDateSelectorComponent,\n}: DatePickerCalendarProps) => {\n  const { t } = useTranslation('osc-date-picker');\n  const [message, setMessage] = useState('');\n  const { setValue } = useFormContext();\n  const locale = useLocale({ language });\n  const onDayChange = (d?: Date) => {\n    if (d) {\n      setValue(dayFieldName, d, { shouldDirty: true, shouldValidate: true });\n      const departureDate = isDayUse ? d : endDay && isBefore(endDay, d) ? addDays(d, 1) : endDay;\n      setValue(endDayFieldName, departureDate, { shouldDirty: true, shouldValidate: true });\n      setMessage(\n        t(isDayUse ? 'selectedDayUseMessage' : 'selectedDateMessage', {\n          fromDate: d.toLocaleDateString(locale, { dateStyle: 'long' }),\n        })\n      );\n    }\n  };\n  const onEndDayChange = (d?: Date) => {\n    setValue(endDayFieldName, d, { shouldDirty: true, shouldValidate: true });\n    if (d) {\n      setMessage(\n        t('selectedEndDateMessage', {\n          fromDate: day?.toLocaleDateString(locale, {\n            dateStyle: 'long',\n          }),\n          toDate: d.toLocaleDateString(locale, { dateStyle: 'long' }),\n        })\n      );\n    }\n  };\n\n  return (\n    <Calendar\n      formId=\"date-picker-calendar\"\n      dayId=\"arrivalDate\"\n      endDayId=\"departureDate\"\n      allowPrevious={allowPrevious}\n      allowSameDay={allowSameDay}\n      maxDays={maxDays}\n      locale={locale}\n      day={day}\n      endDay={endDay}\n      onDayChange={onDayChange}\n      onEndDayChange={onEndDayChange}\n      instructions={t('instructions')}\n      message={message}\n      enabledDates={enabledDates}\n      dayLabel={dayLabel}\n      MonthDateSelectorComponent={MonthDateSelectorComponent}\n    />\n  );\n};\n","import * as React from 'react';\nimport { useFormContext, useWatch } from 'react-hook-form';\nimport { FormInput, FormLabel } from '@dx-ui/osc-form';\nimport { ActionDialog } from '@dx-ui/osc-dialog-v2';\nimport type { DateFormat } from '@dx-ui/utilities-dates';\nimport { useLocale, useDateFormat } from '@dx-ui/utilities-dates';\nimport { addDays, startOfDay } from 'date-fns';\nimport { useTranslation } from 'next-i18next';\nimport DatePickerDatesButton from './date-picker.dates-button';\nimport type { DatePickerCalendarProps } from './date-picker.calendar';\nimport { DatePickerCalendar } from './date-picker.calendar';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { useIsClient } from 'usehooks-ts';\n\nexport type DatePickerProps = {\n  dateFieldNamePrefix?: string;\n  afterCalendarContent?: React.ReactNode;\n  SearchDatesIndicator?: ({ day, endDay }: { day: Date; endDay: Date }) => React.ReactNode;\n  /** Removes \"my dates are flexible\" input */\n  hideFlexDates?: boolean;\n  /** Options for \"When?\" and \"(Required)\" label */\n  labelOptions?: {\n    whenLabel: boolean;\n    requiredDates?: boolean;\n  };\n  hasFlexDatesDisabled?: boolean;\n  children?: (props: { day?: DateFormat; endDay?: DateFormat }) => React.ReactNode;\n  isOpen?: boolean;\n  /** Callback invoked on confirm/done */\n  onConfirm?: () => void;\n  /** Callback invoked on modal open */\n  onOpen?: () => void;\n  /** Callback invoked on cancel/dismiss */\n  onDismiss?: () => void;\n  /** Callback invoked on reset dates */\n  onResetDates?: () => void;\n  /**\n   * whether or not to set the default day of today. set to `false` if dates are optional\n   */\n  hasTodayAsDefault?: boolean;\n  /** Callback invoked on my flexible dates click */\n  onFlexibleDates?: () => void;\n  flexDatesLabel?: string;\n} & Omit<DatePickerCalendarProps, 'day' | 'dayFieldName' | 'endDay' | 'endDayFieldName'>;\n\nexport type DatesData = {\n  flexDates: boolean;\n  day?: Date;\n  endDay?: Date;\n};\n\n/**\n * Use the `<DatePicker/>` component inside of the ShopForm in order to provide the OSC experience for\n * selecting arrival/departure dates. You can pass a custom button in as `children` and also use `renderProps`\n * to access the `day` and `endDay` for use in your custom button. The default button is `<DatePickerDatesButton/>`\n */\nexport const DatePicker = ({\n  afterCalendarContent,\n  MonthDateSelectorComponent,\n  SearchDatesIndicator,\n  allowPrevious,\n  allowSameDay = true,\n  hasFlexDatesDisabled = false,\n  isDayUse = false,\n  dateFieldNamePrefix = 'dates',\n  hideFlexDates,\n  labelOptions,\n  language,\n  maxDays = 730,\n  hasTodayAsDefault = true,\n  enabledDates = [],\n  children,\n  onConfirm,\n  onFlexibleDates,\n  onOpen,\n  onDismiss,\n  onResetDates,\n  isOpen: openProp,\n  flexDatesLabel,\n}: DatePickerProps) => {\n  const { t } = useTranslation('osc-date-picker');\n  const locale = useLocale({ language });\n  const [open, setOpen] = React.useState(openProp);\n  const buttonRef = React.useRef<HTMLButtonElement>(null);\n  const { setValue, reset, getValues } = useFormContext();\n  const dayFieldName = `${dateFieldNamePrefix}.arrivalDate` as const;\n  const endDayFieldName = `${dateFieldNamePrefix}.departureDate` as const;\n\n  const day = useWatch({ name: dayFieldName }) as Date;\n  const endDay = useWatch({ name: endDayFieldName }) as Date;\n\n  const [initialValues, setInitialValues] = React.useState<{\n    arrivalDate: Date;\n    departureDate: Date;\n    datesFlex: boolean;\n  } | null>(null);\n\n  const isDateOptional = !hasTodayAsDefault && !(day && endDay);\n  React.useEffect(() => {\n    if (!day && hasTodayAsDefault) {\n      const dayDefault = startOfDay(new Date());\n      const endDayDefault = isDayUse ? dayDefault : addDays(dayDefault, 1);\n\n      setValue(dayFieldName, dayDefault, { shouldDirty: true });\n      setValue(endDayFieldName, endDayDefault, { shouldDirty: true });\n    }\n  }, [day, dayFieldName, isDayUse, endDayFieldName, setValue, hasTodayAsDefault]);\n\n  const dayLabel = day ? day.toLocaleDateString(locale, { dateStyle: 'long' }) : '';\n  const endDayLabel = isDayUse\n    ? dayLabel\n    : endDay\n    ? endDay.toLocaleDateString(locale, { dateStyle: 'long' })\n    : '';\n\n  const nextDay = day ? addDays(day, 1) : day;\n\n  const formatDay = useDateFormat({ date: day, locale });\n  const formatEndDay = useDateFormat({ date: endDay, locale });\n\n  const openModal = () => {\n    setOpen(true);\n    setInitialValues(cloneDeep(getValues().dates));\n    onOpen?.();\n  };\n\n  const dismissAndResetToOriginalDates = () => {\n    setOpen(false);\n    reset({ ...getValues(), dates: { ...initialValues } }, { keepDefaultValues: true });\n    onDismiss?.();\n  };\n  const confirmAndCloseModal = () => {\n    setOpen(false);\n    //if user selects an arrivalDate but not departure set departureDate to arrivalDate + 1 day. TODO Revisit this once we revise these elements to have update button (or apply btn)\n    if (day && !endDay) {\n      setValue(endDayFieldName, isDayUse ? day : addDays(day, 1), {\n        shouldDirty: true,\n        shouldValidate: true,\n      });\n    }\n    onConfirm?.();\n  };\n\n  // MVT - Display \"Reset Dates\" link\n  const [resetDateA11y, setResetDateA11y] = React.useState(false);\n  const resetDates = () => {\n    setResetDateA11y(true);\n    setValue('dates.arrivalDate', null, { shouldDirty: true });\n    setValue('dates.departureDate', null, { shouldDirty: true });\n    setValue('dates.datesFlex', false, { shouldDirty: true });\n    setTimeout(() => setResetDateA11y(false), 500);\n    if (onResetDates) onResetDates();\n  };\n  const resetButtonCTA = {\n    isEnabled: !hasTodayAsDefault,\n    label: t('resetDates'),\n    resetA11Y: resetDateA11y ? t('allSelectionsReset') : undefined,\n  };\n\n  const isClient = useIsClient();\n\n  return (\n    <div className=\"w-full sm:w-auto\">\n      {labelOptions?.whenLabel || isDateOptional ? (\n        <FormLabel\n          label={t('when')}\n          required={labelOptions?.requiredDates}\n          className=\"flex pb-0.5 brand-ey:font-normal brand-lx:font-semibold max-sm:w-1/4 max-sm:items-start max-sm:justify-start lg:pb-1.5\"\n          data-osc-product=\"search-dates-label\"\n        />\n      ) : null}\n      <ActionDialog\n        contentDataAttribute=\"data-osc-date-picker\"\n        className=\"h-auto\"\n        title={day ? t('header') : t('addDates')}\n        isOpen={open}\n        onDismiss={dismissAndResetToOriginalDates}\n        onCancel={dismissAndResetToOriginalDates}\n        size=\"2xl\"\n        onConfirm={confirmAndCloseModal}\n        onReset={resetDates}\n        buttonOptions={{ reset: resetButtonCTA }}\n        dialogTrigger={\n          <button\n            className=\"flex w-full appearance-none justify-center divide-x divide-border rounded text-start brand-lx:divide-primary sm:w-auto sm:gap-2 lg:gap-3 rtl:divide-x-reverse\"\n            data-osc-product=\"shop-form-dates\"\n            id=\"shop-form-dates\"\n            ref={buttonRef}\n            type=\"button\"\n            aria-label={`${t('checkin')} ${dayLabel ? dayLabel : t('addDates')}, ${t('checkout')} ${\n              endDayLabel ? endDayLabel : t('addDates')\n            }`}\n            onClick={openModal}\n            data-testid=\"search-dates-button\"\n            // This check is necessary to fix a hydration issue\n            // See for reference: https://gitlab.svc-m.hhc.hilton.com/pac/hiw/dx-ui/-/merge_requests/4994\n            disabled={!isClient}\n          >\n            {children ? (\n              children({ day: formatDay, endDay: formatEndDay })\n            ) : (\n              <>\n                <DatePickerDatesButton day={day} language={language}>\n                  <span className=\"block font-bold brand-ou:text-primary\">{t('checkin')}</span>\n                  <span className=\"block text-xs brand-ou:text-primary\">{t('addDates')}</span>\n                </DatePickerDatesButton>\n                {!isDayUse ? (\n                  <DatePickerDatesButton day={endDay || nextDay} language={language}>\n                    <span className=\"block font-bold brand-ou:text-primary\">{t('checkout')}</span>\n                    <span className=\"block text-xs brand-ou:text-primary\">{t('addDates')}</span>\n                  </DatePickerDatesButton>\n                ) : null}\n              </>\n            )}\n          </button>\n        }\n      >\n        <div\n          data-osc-product=\"search-dates\"\n          className=\"mx-2 border-b border-solid border-border py-2 \"\n        >\n          <DatePickerCalendar\n            allowPrevious={allowPrevious}\n            allowSameDay={allowSameDay}\n            day={day}\n            dayFieldName={dayFieldName}\n            isDayUse={isDayUse}\n            endDay={isDayUse ? day : endDay}\n            endDayFieldName={endDayFieldName}\n            maxDays={maxDays}\n            enabledDates={enabledDates}\n            dayLabel={(d, checkin) =>\n              t('dayLabel', {\n                date: d.toLocaleDateString(locale, { dateStyle: 'full' }),\n                type: t(checkin ? 'checkin' : 'checkout'),\n              })\n            }\n            language={language}\n            MonthDateSelectorComponent={MonthDateSelectorComponent}\n          />\n        </div>\n        {SearchDatesIndicator ? (\n          <div className=\"flex justify-center border-b border-border-alt p-4 md:hidden\">\n            <SearchDatesIndicator day={day} endDay={endDay} />\n          </div>\n        ) : null}\n        {!hideFlexDates || afterCalendarContent || SearchDatesIndicator ? (\n          <div className=\"flex justify-between pb-4 pt-3\">\n            {!hideFlexDates ? (\n              <FormInput\n                label={flexDatesLabel ?? t('flexibleDateLabel')}\n                type=\"checkbox\"\n                name=\"dates.datesFlex\"\n                disabled={hasFlexDatesDisabled}\n                onClick={onFlexibleDates}\n              />\n            ) : null}\n            {afterCalendarContent ? afterCalendarContent : null}\n            {SearchDatesIndicator ? (\n              <div className=\"hidden md:block\">\n                <SearchDatesIndicator day={day} endDay={endDay} />\n              </div>\n            ) : null}\n          </div>\n        ) : null}\n      </ActionDialog>\n    </div>\n  );\n};\n\nexport default DatePicker;\n","import { useLocale } from '@dx-ui/utilities-dates';\nimport { useTranslation } from 'next-i18next';\nimport { differenceInDays } from 'date-fns';\n\nexport function DateRangeScreenReaderText({\n  fromDate,\n  language,\n  toDate,\n}: {\n  fromDate: Date | null | undefined;\n  language: string;\n  toDate: Date | null | undefined;\n}) {\n  const { t } = useTranslation('osc-date-picker');\n  const locale = useLocale({ language });\n  const fromDateString = fromDate ? fromDate.toLocaleDateString(locale, { dateStyle: 'long' }) : '';\n  const toDateString = toDate ? toDate.toLocaleDateString(locale, { dateStyle: 'long' }) : '';\n  const nights = fromDate && toDate ? differenceInDays(toDate, fromDate) : 0;\n  return (\n    <span className=\"sr-only\">\n      {t('dateRange', { fromDate: fromDateString, toDate: toDateString, count: nights })}\n    </span>\n  );\n}\n","export * from './lib/date-picker';\nexport * from './lib/date-picker.calendar';\nexport * from './lib/date-picker.dates-button';\nexport * from './lib/date-picker.screenreader';\n","import type { DatePickerProps } from '@dx-ui/osc-date-picker';\nimport { DatePicker } from '@dx-ui/osc-date-picker';\n/**\n *\n * @param props\n * @returns Soft wrapper of <DatePicker /> component to maintain compatibility. Once all apps are in monorepo work to deprecate this.\n */\n\nexport type ShopFormDatesProps = {\n  arrivalDate: Date | null;\n  departureDate: Date | null;\n  datesFlex: boolean;\n};\n\nexport const ShopFormDates = (props: DatePickerProps) => <DatePicker {...props} />;\n","import type * as React from 'react';\n\n/**\n * @deprecated\n * The `<ShopFormInfoContainer/>` can be used for layout purposes, originally for use as a wrapper around `<ShopFormRooms/>` and `<ShopFormSpecialRates/>`\n */\nconst ShopFormInfoContainer = ({ children }: { children: React.ReactNode }) => children;\n\nShopFormInfoContainer.displayName = 'ShopFormInfoContainer';\n\nexport { ShopFormInfoContainer };\nexport default ShopFormInfoContainer;\n","import { useFormContext } from 'react-hook-form';\nimport type { FormDataValues } from './shop-form';\n\nexport const useShopFormContext = () => useFormContext<FormDataValues>();\n","import * as React from 'react';\nimport cx from 'classnames';\n\nconst InfoCircle: React.FC<{ error: boolean; info: string | null; 'data-testid'?: string }> = ({\n  error,\n  info,\n  ...rest\n}) => {\n  if (error || info !== null) {\n    return (\n      <div\n        className={cx(\n          'absolute -top-2 inline-block size-5 rounded-full text-text-inverse ltr:-right-2 rtl:-left-2',\n          {\n            'bg-danger': !!error,\n            'bg-primary': !!info && !error,\n          }\n        )}\n        {...(rest?.['data-testid'] && { 'data-testid': `${rest?.['data-testid']}-info` })}\n      >\n        <span aria-hidden=\"true\">{error ? '!' : info !== null ? info : null}</span>\n      </div>\n    );\n  }\n\n  return null;\n};\n\nexport type ShopFormButtonProps = React.ComponentProps<'button'> & {\n  label: string;\n  product: string;\n  hasError: boolean;\n  info?: string | null;\n  'data-testid'?: string;\n};\n\nexport const ShopFormButton = React.forwardRef<HTMLButtonElement, ShopFormButtonProps>(\n  ({ product, children, label, hasError, info = null, ...props }, ref) => {\n    return (\n      <div data-osc-product={product} className=\"flex flex-1\">\n        <button\n          data-osc-product=\"shop-form-selection-button\"\n          className={cx(\n            'btn btn-lg shop-form-btn relative w-full px-2 motion-safe:transition lg:px-4',\n            props.className\n          )}\n          ref={ref}\n          type=\"button\"\n          {...props}\n        >\n          <span>{label}</span>\n          <InfoCircle error={hasError} info={info} data-testid={props?.['data-testid']} />\n        </button>\n        {children}\n      </div>\n    );\n  }\n);\n\nShopFormButton.displayName = 'ShopFormButton';\n\nexport default ShopFormButton;\n","import * as React from 'react';\nimport { useFieldArray, useWatch } from 'react-hook-form';\nimport { ActionDialog } from '@dx-ui/osc-dialog-v2';\nimport { Link } from '@dx-ui/osc-link';\nimport type { FormDefaultValues } from './shop-form';\nimport { useShopFormContext } from './use-shop-form-context';\nimport { useTranslation } from 'next-i18next';\nimport type { Person, BrandCode } from '@dx-ui/framework-uri-builder';\nimport { searchUriBuilder } from '@dx-ui/framework-uri-builder';\nimport SearchButton from './shop-form.button';\nimport omit from 'lodash/omit';\nimport type { Rooms as RoomsType, ShopFormRoom } from '@dx-ui/osc-rooms';\nimport { Rooms, newRoom } from '@dx-ui/osc-rooms';\nimport cloneDeep from 'lodash/cloneDeep';\n\ntype ShopFormRooms = {\n  'data-testid'?: string;\n  /**\n   * if `true` the group link will not be shown\n   */\n  hideGroupLink?: boolean;\n  open?: boolean;\n  tenPlusLinkProps?: React.ComponentProps<typeof Link>;\n  /** Callback invoked on confirm/done */\n  onConfirm?: () => void;\n  /** Callback invoked on modal open */\n  onOpen?: () => void;\n  /** Callback invoked on cancel/dismiss */\n  onDismiss?: () => void;\n} & RoomsType;\n\n/**\n * Use the `<ShopFormRooms/>` component inside of the ShopForm in order to provide the OSC experience\n * for noting the number of rooms and their occupancy.\n */\nexport const ShopFormRooms: React.FC<React.PropsWithChildren<ShopFormRooms>> = ({\n  hideGroupLink,\n  onConfirm,\n  open: openProp,\n  tenPlusLinkProps,\n  onOpen,\n  onDismiss,\n  ...rest\n}) => {\n  const { t } = useTranslation(['osc-rooms', 'osc-shop-form']);\n  const [open, setOpen] = React.useState(false);\n  const {\n    formState: { errors },\n    getValues,\n    reset,\n  } = useShopFormContext();\n  const { append } = useFieldArray({ name: 'rooms' });\n  const hasError = Boolean(errors.rooms);\n  const roomsValue = useWatch({ name: 'rooms' });\n  const numRooms = roomsValue?.length || 0;\n\n  const numGuests = (roomsValue || []).reduce(\n    (count: number, { adults, children }: { adults: number; children: Person[] }) =>\n      count + adults + children.length,\n    0\n  );\n  const [initialValues, setInitialValues] = React.useState<ShopFormRoom[]>([\n    {\n      adults: 1,\n      children: [],\n    },\n  ]);\n\n  React.useEffect(() => {\n    if (roomsValue && roomsValue.length === 0) {\n      append({ ...newRoom });\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [roomsValue]);\n\n  React.useEffect(() => {\n    if (openProp) {\n      setInitialValues(cloneDeep(roomsValue));\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [openProp]);\n\n  const openModal = () => {\n    setInitialValues(cloneDeep(roomsValue));\n    setOpen(true);\n    onOpen?.();\n  };\n\n  const confirmAndCloseModal = () => {\n    setOpen(false);\n    onConfirm?.();\n  };\n  const dismissAndResetToOriginalFormRooms = () => {\n    if (initialValues) {\n      reset({ ...getValues(), rooms: [...initialValues] }, { keepDefaultValues: true });\n    }\n    setOpen(false);\n    onDismiss?.();\n  };\n\n  //grab these values from shop form context in order for use in uri generator\n  const brandCode = useWatch<FormDefaultValues, 'brandCode'>({ name: 'brandCode' });\n  const arrivalDate = useWatch<FormDefaultValues, 'dates.arrivalDate'>({\n    name: 'dates.arrivalDate',\n  });\n  const departureDate = useWatch<FormDefaultValues, 'dates.departureDate'>({\n    name: 'dates.departureDate',\n  });\n  const placeId = useWatch<FormDefaultValues, 'placeId'>({ name: 'placeId' });\n  const query = useWatch<FormDefaultValues, 'query'>({ name: 'query' });\n  const attendeeCount = useWatch<FormDefaultValues, 'attendee_count'>({ name: 'attendee_count' });\n\n  const tenPlusUrl = searchUriBuilder({\n    brandCode: brandCode as keyof BrandCode,\n    locale: 'en',\n    urlParams: {\n      dates: {\n        arrivalDate,\n        departureDate,\n      },\n      numAttendees: attendeeCount,\n      placeId,\n      query,\n      numRooms: 10,\n    },\n    relative: false,\n  });\n\n  const label = `${t('occupancy.numRooms', { count: numRooms })}, ${t('occupancy.numGuests', {\n    count: numGuests,\n  })}`;\n  const ariaLabel = `${t('occupancy.numRooms', { count: numRooms })}, ${t('occupancy.numGuests', {\n    count: numGuests,\n  })}. ${t('occupancy.buttonLabel')} ${\n    hasError ? t('osc-shop-form:errorHeader', { count: 1 }) : ''\n  }`;\n\n  return (\n    <ActionDialog\n      className=\"h-auto\"\n      title={t('occupancy.title')}\n      isOpen={openProp || open}\n      onDismiss={dismissAndResetToOriginalFormRooms}\n      onCancel={dismissAndResetToOriginalFormRooms}\n      onConfirm={confirmAndCloseModal}\n      size=\"md\"\n      buttonOptions={{\n        confirm: {\n          disabled: hasError,\n        },\n      }}\n      contentDataAttribute=\"data-osc-shop-form-rooms\"\n      dialogTrigger={\n        <SearchButton\n          product=\"search-rooms-button\"\n          onClick={openModal}\n          hasError={hasError}\n          label={label}\n          aria-label={ariaLabel}\n          data-testid=\"search-rooms-button\"\n        />\n      }\n    >\n      <Rooms {...omit(rest, 'data-testid')} />\n      {hideGroupLink ? null : (\n        <div className=\"border-t border-solid border-border pb-2.5 pt-2\">\n          <Link\n            url={tenPlusUrl}\n            className=\"mb-2 text-sm text-primary hover:text-primary-alt\"\n            {...tenPlusLinkProps}\n          >\n            {t('occupancy.bookEvent')}\n          </Link>\n        </div>\n      )}\n    </ActionDialog>\n  );\n};\n\nexport default ShopFormRooms;\n","import type * as React from 'react';\nimport { useRef, useEffect } from 'react';\nimport { useTranslation } from 'next-i18next';\nimport cx from 'classnames';\nimport { useFormContext, useWatch, type FieldError } from 'react-hook-form';\n\nimport { FormError } from '@dx-ui/osc-form';\nimport { InfoPopup } from '@dx-ui/osc-info-popup';\n\nconst GROUP_LIMIT = 10;\n\nconst InputGroup: React.FC<{\n  id: string;\n  label?: string;\n  info?: React.ReactNode;\n  isCentered?: boolean;\n  error: Partial<FieldError> | undefined;\n  children: React.ReactNode;\n}> = ({ id, label, info, error, isCentered, children }) => {\n  return (\n    <div className=\"flex-1\">\n      <div\n        className={cx('label flex flex-1 items-start md:grow-0', {\n          'items-start': !isCentered,\n          'sm:items-center': isCentered,\n          'text-danger': error,\n          'flex-col': !!label,\n          'flex-row gap-2': !label,\n        })}\n      >\n        <div className=\"flex items-center\">\n          {label ? (\n            <label\n              data-osc-product=\"shop-input-label\"\n              htmlFor={id}\n              className=\"whitespace-nowrap pr-1\"\n            >\n              {label}\n            </label>\n          ) : null}\n          {info ? <InfoPopup>{info}</InfoPopup> : null}\n        </div>\n        {children}\n      </div>\n    </div>\n  );\n};\n\nexport type ShopFormGroupProps = {\n  showNumAttendees?: boolean;\n};\nexport const ShopFormGroup = (props: ShopFormGroupProps) => {\n  const { t } = useTranslation('osc-rooms');\n  const {\n    register,\n    setValue,\n    formState: { errors },\n    trigger,\n    setError,\n    clearErrors,\n  } = useFormContext();\n  const numRooms = useWatch({ name: 'numRooms' });\n  const numAttendees = useWatch({ name: 'numAttendees' });\n  const shouldFocusRoomsInput = useWatch({ name: 'shouldFocusRoomsInput' });\n  const roomsInputRef = useRef<HTMLInputElement | null>(null);\n\n  useEffect(() => {\n    if (shouldFocusRoomsInput && roomsInputRef.current) roomsInputRef.current.focus();\n  }, [shouldFocusRoomsInput]);\n\n  const getNumRoomsAttendeesValidation = (numAttendees: string, numRooms: string) => {\n    const isNumRoomsAndNumAttendeesFalsey =\n      ((parseInt(numAttendees) === 0 || isNaN(parseInt(numAttendees))) &&\n        parseInt(numRooms) === 0) ||\n      isNaN(parseInt(numRooms));\n    if (isNumRoomsAndNumAttendeesFalsey) {\n      setError('shop-form-numRooms', {\n        type: 'manual',\n        message: t('roomsAttendees.numRoomsAttendeeValueError'),\n      });\n      setError('shop-form-numAttendees', {\n        type: 'manual',\n        message: t('roomsAttendees.numRoomsAttendeeValueError'),\n      });\n      return t('roomsAttendees.numRoomsAttendeeValueError');\n    }\n    const isFormInErrorStateAndNumAttendeesOrNumRoomsGreaterThanZero =\n      (errors?.numAttendees || errors?.numRooms) &&\n      (!!parseInt(numAttendees) || !!parseInt(numRooms));\n\n    if (isFormInErrorStateAndNumAttendeesOrNumRoomsGreaterThanZero) {\n      clearErrors(['numRooms', 'numAttendees', 'shop-form-numRooms', 'shop-form-numAttendees']);\n    }\n    return true;\n  };\n\n  return (\n    <div>\n      <div className=\"flex flex-auto flex-col gap-2 sm:flex-row lg:gap-3\">\n        <InputGroup\n          id=\"shop-form-numRooms\"\n          label={t('roomsAttendees.numRooms')}\n          error={errors?.numRooms || errors?.numAttendees}\n        >\n          <input\n            id=\"shop-form-numRooms\"\n            type=\"number\"\n            min={0}\n            className={cx('form-input w-full flex-1', {\n              'form-error': errors?.numRooms || errors?.numAttendees,\n            })}\n            {...register('numRooms', {\n              value: GROUP_LIMIT,\n              onChange: () => trigger('numRooms'),\n              validate: {\n                numRoomsValidation: (numRooms) =>\n                  getNumRoomsAttendeesValidation(numAttendees, numRooms),\n              },\n              valueAsNumber: true,\n            })}\n            ref={(e) => {\n              register('numRooms').ref(e);\n              roomsInputRef.current = e;\n            }}\n            onFocus={() => {\n              if (shouldFocusRoomsInput) setValue('shouldFocusRoomsInput', false);\n            }}\n          />\n        </InputGroup>\n        {props.showNumAttendees ? (\n          <InputGroup\n            id=\"shop-form-numAttendees\"\n            error={errors?.numAttendees || errors?.numRooms}\n            label={t('roomsAttendees.numAttendees')}\n          >\n            <input\n              id=\"shop-form-numAttendees\"\n              type=\"number\"\n              className={cx('form-input w-full flex-1', {\n                'form-error': errors?.numAttendees || errors?.numRooms,\n              })}\n              min={0}\n              {...register('numAttendees', {\n                onChange: () => trigger('numAttendees'),\n                validate: {\n                  numAttendeesValidation: (numAttendees) =>\n                    getNumRoomsAttendeesValidation(numAttendees, numRooms),\n                },\n              })}\n            />\n          </InputGroup>\n        ) : null}\n      </div>\n      <FormError error={errors?.numRooms || errors?.numAttendees} className=\" lg:absolute\" />\n    </div>\n  );\n};\n","import * as React from 'react';\nimport { useWatch } from 'react-hook-form';\nimport { useTranslation } from 'next-i18next';\nimport { ActionDialog } from '@dx-ui/osc-dialog-v2';\nimport SearchButton from './shop-form.button';\nimport { SpecialRates } from '@dx-ui/osc-special-rates';\nimport { useShopFormContext } from './use-shop-form-context';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { useAarpToggle } from './hooks/use-aarp-toggle';\n\n/**\n * Use the `<ShopFormSpecialRates/>` component inside of the ShopForm in order to provide the OSC experience\n * for selecting special rates to enhance the search.\n */\nexport type ShopFormSpecialRatesProps = {\n  /** Option to disable use points checkbox */\n  shouldDisablePoints?: boolean;\n  /** Option to enable when used outside of the shop form */\n  isIndependent?: boolean;\n  /** Option to control the modal open state */\n  open?: boolean;\n  /** Callback invoked on confirm/done */\n  onConfirm?: () => void;\n  /** Callback invoked on modal open */\n  onOpen?: () => void;\n  /** Callback invoked on cancel/dismiss */\n  onDismiss?: () => void;\n  /** Make smbRates SMB Context Aware */\n  shouldEnableSMBContextAwareRates?: boolean;\n};\n\nexport const ShopFormSpecialRates: React.FC<React.PropsWithChildren<ShopFormSpecialRatesProps>> = ({\n  shouldEnableSMBContextAwareRates,\n  isIndependent,\n  open: openProp,\n  onConfirm,\n  onOpen,\n  onDismiss,\n  shouldDisablePoints,\n}) => {\n  const [t] = useTranslation(['osc-shop-form', 'osc-special-rates']);\n  const [open, setOpen] = React.useState(false);\n  const buttonRef = React.useRef<HTMLButtonElement>(null);\n  const {\n    formState: { errors },\n    reset,\n    getValues,\n  } = useShopFormContext();\n  const { disableAARPSpecialRates } = useAarpToggle();\n  const hasError = !!errors.specialRates;\n  const ratesValue = useWatch({ name: 'specialRates' });\n  const isOfferIdSelected = useWatch({ name: 'specialRates.useOfferId' });\n  const isPndSelected = useWatch({ name: 'specialRates.usePnd' });\n  const isSMBSelected = useWatch({ name: 'specialRates.smbRate' });\n  const isSMBMember = useWatch({ name: 'hhonors.isSMBMember' });\n  const offerId = useWatch({ name: 'specialRates.offerId' });\n  const pnd = useWatch({ name: 'specialRates.pnd' });\n  const corporateCode = useWatch({ name: 'specialRates.corporateCode' });\n  const [initialValues, setInitialValues] = React.useState<SpecialRates>();\n  const selectedRates = Object.keys(ratesValue || {}).reduce((count, key) => {\n    const excludedKeys = [\n      'pnd',\n      'usePnd',\n      'offerId',\n      'useOfferId',\n      'requestedRatesOnly',\n      'searchedRatePlanDescription',\n      'travelAgentId',\n    ];\n    if (\n      (!excludedKeys.includes(key) && Boolean(ratesValue[key as keyof typeof ratesValue])) ||\n      (key === 'usePnd' && Boolean(ratesValue[key]) && ratesValue?.pnd?.name) ||\n      (key === 'useOfferId' && Boolean(ratesValue[key]) && ratesValue?.offerId?.name)\n    ) {\n      return count + 1;\n    }\n    return count;\n  }, 0);\n\n  const openModal = () => {\n    setInitialValues(cloneDeep(ratesValue));\n    setOpen(true);\n    onOpen?.();\n  };\n\n  const confirmAndCloseModal = () => {\n    setOpen(false);\n    onConfirm?.();\n  };\n\n  const resetRatesToOriginalFormRates = () => {\n    if (initialValues) {\n      reset({ ...getValues(), specialRates: { ...initialValues } }, { keepDefaultValues: true });\n    }\n    onDismiss?.();\n    setOpen(false);\n  };\n\n  React.useEffect(() => {\n    if (isPndSelected && !pnd?.name) {\n      reset({ ...getValues(), specialRates: { ...getValues().specialRates, usePnd: false } });\n    }\n    if (isOfferIdSelected && !offerId?.name) {\n      reset({ ...getValues(), specialRates: { ...getValues().specialRates, useOfferId: false } });\n    }\n    if (isSMBSelected && !isSMBMember) {\n      reset({ ...getValues(), specialRates: { ...getValues().specialRates, smbRate: false } });\n    }\n    if (isSMBSelected && corporateCode) {\n      reset({ ...getValues(), specialRates: { ...getValues().specialRates, corporateCode: '' } });\n    }\n  }, [\n    corporateCode,\n    getValues,\n    isOfferIdSelected,\n    isPndSelected,\n    isSMBMember,\n    isSMBSelected,\n    offerId?.name,\n    pnd?.name,\n    reset,\n  ]);\n\n  return (\n    <ActionDialog\n      className=\"h-auto\"\n      title={t('osc-special-rates:header')}\n      isOpen={openProp || open}\n      onDismiss={resetRatesToOriginalFormRates}\n      onCancel={resetRatesToOriginalFormRates}\n      onConfirm={confirmAndCloseModal}\n      size=\"xl\"\n      buttonOptions={{\n        confirm: {\n          disabled: !!isIndependent && hasError,\n        },\n      }}\n      contentDataAttribute=\"data-osc-shop-form-special-rates\"\n      dialogTrigger={\n        <SearchButton\n          product=\"search-rates-button\"\n          ref={buttonRef}\n          onClick={openModal}\n          hasError={hasError}\n          info={selectedRates === 0 ? null : selectedRates + ''}\n          label={t('osc-special-rates:header')}\n          aria-label={`${t('osc-special-rates:buttonLabel')} ${\n            errors.specialRates\n              ? t('osc-shop-form:errorHeader', { count: 1 })\n              : selectedRates > 0\n              ? t('osc-special-rates:buttonLabelCount', { count: selectedRates })\n              : ''\n          }`}\n          data-testid=\"search-rates-button\"\n        />\n      }\n    >\n      <SpecialRates\n        shouldEnableSMBContextAwareRates={shouldEnableSMBContextAwareRates}\n        shouldDisablePoints={shouldDisablePoints}\n        shouldDisableAARP={disableAARPSpecialRates}\n      />\n    </ActionDialog>\n  );\n};\n","import * as React from 'react';\nimport { useWatch } from 'react-hook-form';\nimport { useTranslation } from 'next-i18next';\nimport SearchButton from './shop-form.button';\nimport { ActionDialog } from '@dx-ui/osc-dialog-v2';\nimport { Stepper } from '@dx-ui/osc-stepper';\nimport type { FormDataValues } from '..';\nimport { addDays, subDays } from 'date-fns';\nimport { useShopFormContext } from './use-shop-form-context';\n\ntype ShopFormNightsProps = {\n  min?: number;\n  max?: number;\n};\n\n/**\n * Use the `<ShopFormNights/>` component inside of the ShopForm in order to provide the OSC experience\n * for selecting the number of nights to enhance the search.\n */\nconst ShopFormNights: React.FC<React.PropsWithChildren<ShopFormNightsProps>> = ({\n  min = 0,\n  max = 30,\n}) => {\n  const [t] = useTranslation('osc-rooms');\n  const [open, setOpen] = React.useState(false);\n  const buttonRef = React.useRef<HTMLButtonElement>(null);\n  const {\n    formState: { errors },\n    setValue,\n    getValues,\n    reset,\n  } = useShopFormContext();\n  const numNights = useWatch<FormDataValues, 'numNights'>({ name: 'numNights' });\n  const departureDate = useWatch<FormDataValues, 'dates.departureDate'>({\n    name: 'dates.departureDate',\n  });\n  const [initialNumNights, setInitialNumNights] = React.useState<FormDataValues['numNights']>();\n  const [initialDepartureDate, setInitialDepartureDate] =\n    React.useState<FormDataValues['dates']['departureDate']>();\n  const openModal = () => {\n    setInitialNumNights(numNights);\n    setInitialDepartureDate(departureDate);\n    setOpen(true);\n  };\n\n  const confirmAndCloseModal = () => {\n    setOpen(false);\n  };\n  const dismissModal = () => {\n    setOpen(false);\n    if (initialNumNights && initialDepartureDate) {\n      const formData = getValues();\n      reset(\n        {\n          ...formData,\n          numNights: initialNumNights,\n          dates: { ...formData.dates, departureDate: initialDepartureDate },\n        },\n        { keepDefaultValues: true }\n      );\n    }\n  };\n\n  if (numNights === null || !departureDate) {\n    return null;\n  }\n\n  const label =\n    numNights === 0\n      ? t('nights.dayCount', { count: 1 })\n      : t('nights.nightsCount', { count: numNights });\n  const dialogTitle = t('nights.howManyNights');\n\n  return (\n    <ActionDialog\n      className=\"h-auto\"\n      title={dialogTitle}\n      isOpen={open}\n      onDismiss={dismissModal}\n      onCancel={dismissModal}\n      onConfirm={confirmAndCloseModal}\n      size=\"sm\"\n      dialogTrigger={\n        <SearchButton\n          product=\"search-nights-button\"\n          ref={buttonRef}\n          onClick={openModal}\n          hasError={Boolean(errors.numNights)}\n          label={label}\n          aria-label={label}\n          data-testid=\"search-nights-button\"\n        />\n      }\n    >\n      <Stepper\n        onMinusClick={() => {\n          setValue('numNights', numNights - 1, { shouldDirty: true });\n          setValue('dates.departureDate', subDays(departureDate, 1), {\n            shouldDirty: true,\n          });\n        }}\n        onPlusClick={() => {\n          setValue('numNights', numNights + 1, { shouldDirty: true });\n          setValue('dates.departureDate', addDays(departureDate, 1), {\n            shouldDirty: true,\n          });\n        }}\n        min={min}\n        max={max}\n        value={numNights}\n        valueLabel={label}\n        plusLabel={t('nights.addNight')}\n        plusTestId=\"search-add-night\"\n        minusLabel={t('nights.removeNight')}\n        minusTestId=\"search-remove-night\"\n        className=\"pb-2.5\"\n      />\n    </ActionDialog>\n  );\n};\n\nexport { ShopFormNights };\nexport default ShopFormNights;\n","export * from './lib/shop-form';\nexport * from './lib/shop-form.provider';\nexport * from './lib/shop-form.utils';\nexport * from './lib/shop-form.location';\nexport * from './lib/shop-form.dates';\nexport * from './lib/shop-form.info-container';\nexport * from './lib/shop-form.rooms';\nexport * from './lib/shop-form.group';\nexport * from './lib/shop-form.special-rates';\nexport * from './lib/shop-form.summary';\nexport * from './lib/shop-form.nights';\nexport * from './lib/shop-form.constants';\nexport * from './lib/use-shop-form-context';\n","import type * as React from 'react';\nimport type { MarkdownToJSX } from 'markdown-to-jsx';\nimport MarkdownToJsx from 'markdown-to-jsx';\nimport type { Rule } from '@dx-ui/utilities-url-config';\nimport { getUrlConfig, RuleEngine } from '@dx-ui/utilities-url-config';\nimport { Link } from '@dx-ui/osc-link';\nimport merge from 'lodash/merge';\nimport { Speedbump, useSpeedbump } from '@dx-ui/osc-speedbump';\n\nexport type Markdown = {\n  /** Specific config rule that is used by the [RuleEngine](https://jira.hilton.com/stash/projects/HIW/repos/dx-shared/browse/packages/rule-engine) to process urls in the markdown */\n  rule?: Rule;\n  /** current language */\n  language: string;\n  /** url origin to use for determining url props to use when constructing links */\n  origin: string;\n} & MarkdownAttributes;\n\ntype MarkdownAttributes = {\n  [key: string]: unknown;\n  children: string;\n  options?: MarkdownToJSX.Options;\n};\n\ntype MarkdownLink = {\n  language: string;\n  origin: string;\n  rule: Rule;\n} & React.AnchorHTMLAttributes<HTMLAnchorElement>;\n\nconst MarkdownLink: React.FC<React.PropsWithChildren<MarkdownLink>> = ({\n  children,\n  rule,\n  language,\n  origin,\n  href,\n  ...props\n}) => {\n  const { onShow, onHide, isVisible, onContinue, isEnabled } = useSpeedbump(language);\n  if (!href) {\n    return null;\n  }\n  const linkProps: Link = { url: href };\n  if (rule) {\n    const ruleEngine = new RuleEngine(rule);\n    const data = getUrlConfig(ruleEngine, href, origin, language);\n    linkProps.url = data.url;\n    if (data.speedbump) {\n      linkProps.onClick = onShow;\n    }\n  }\n  return (\n    <>\n      <Link {...linkProps} {...props}>\n        {children}\n      </Link>\n      {isEnabled && <Speedbump isShowing={isVisible} onContinue={onContinue} onClose={onHide} />}\n    </>\n  );\n};\n\n/**\n * Used to display markdown content. This is a wrapper around [markdown-to-jsx](https://www.npmjs.com/package/markdown-to-jsx) that provides standard overrides\n * to handle links in the markdown. This incorporates the @see RuleEngine to process the urls in the markdown and provide\n * information to construct the [HTMLAnchorElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement).\n * @returns JSX that is used to render the html\n */\nexport const Markdown: React.FC<Markdown> = ({\n  children,\n  options,\n  language,\n  origin,\n  rule,\n  ...props\n}) => {\n  const defaultOptions = {\n    overrides: {\n      a: {\n        component: MarkdownLink,\n        props: {\n          rule,\n          language,\n          origin,\n          className: '!text-base',\n        },\n      },\n    },\n  };\n  const mergedOptions = merge(defaultOptions, options);\n  return (\n    <MarkdownToJsx options={mergedOptions} {...props}>\n      {children}\n    </MarkdownToJsx>\n  );\n};\n\nexport default Markdown;\n","export * from './lib/markdown';\n","import dynamic from 'next/dynamic';\n\nexport const Filters = dynamic(() => import('../../components/filters/filters'), {\n  ssr: false,\n});\nexport const HotelDetails = dynamic(() => import('../hotel-card/hotel-details/hotel-details'), {\n  ssr: false,\n});\n\n//shop form\nexport const ShopForm = dynamic(() => import('@dx-ui/osc-shop-form').then((mod) => mod.ShopForm), {\n  ssr: false,\n});\n","export * from './dynamic-components';\n","import { createElement } from 'react';\n\nexport interface TagType extends React.HTMLAttributes<HTMLElement> {\n  figureTag: 'figure' | 'div' | 'span';\n  children: React.ReactNode;\n}\n\nexport const ElementSelector: React.FC<TagType> = ({ figureTag, children, ...props }) => {\n  return createElement(figureTag, props, children);\n};\n","import { useState } from 'react';\nimport cx from 'classnames';\nimport { Image } from 'next/dist/client/image-component';\nimport { Caption } from '@dx-ui/osc-caption';\nimport type { AspectRatio, TResponsiveImage } from './responsive-image.types';\nimport { ElementSelector } from './utils/element-selector';\nimport { logInfo } from '@dx-ui/framework-logger';\n\nconst BREAKPOINTS = {\n  xxs: 200,\n  xs: 320,\n  sm: 640,\n  md: 768,\n  lg: 1024,\n  xl: 1280,\n  xxl: 1440,\n  xxxl: 1920,\n  xxxxl: 2560,\n  xxxxxl: 3840,\n};\n\nfunction GetHeightForWidthAndAspectRatio(width: number, aspectRatio: AspectRatio) {\n  const heightWidthArray = aspectRatio.split(':');\n  const denominator = (heightWidthArray?.[0] || 1) as number;\n  const multiplier = (heightWidthArray?.[1] || 1) as number;\n  const height = (width * multiplier) / denominator;\n  return Math.round(height);\n}\n\nfunction getAspectRatio(width: number, height: number, urlString: string) {\n  const aspectRatio = width / height;\n\n  if (!Number.isFinite(aspectRatio) || aspectRatio === 0) {\n    logInfo(\n      'Customer_Experience_ImageError',\n      new Error('Invalid aspect ratio'),\n      `aspectRatio: ${aspectRatio}, width: ${width}, height: ${height}, imageUrl: \"${urlString}\"`\n    );\n\n    return 3 / 2;\n  }\n\n  return aspectRatio;\n}\n\nfunction parseQsNumber(qs: URLSearchParams, key: string, defaultValue: number) {\n  const str = qs.get(key) ?? defaultValue.toString();\n  const num = Math.abs(Number(str));\n\n  if (!Number.isFinite(num)) {\n    return defaultValue;\n  }\n\n  return num;\n}\n\n/**\n * Takes the image URL and reconstructs it with the appropriate aspect ratio, width and height.\n * Width values are multiplied by 2 to ensure high-res images are served.\n */\nfunction overrideImageUrl(urlString: string, targetHeight: number, targetWidth: number) {\n  const queryIndex = urlString.indexOf('?');\n  if (queryIndex === -1) {\n    return urlString;\n  }\n\n  const search = new URLSearchParams(urlString.slice(queryIndex) ?? '');\n\n  const sourceWidth = parseQsNumber(search, 'rw', 0);\n  const sourceHeight = parseQsNumber(search, 'rh', 0);\n  const sourceAspectRatio = getAspectRatio(sourceWidth, sourceHeight, urlString);\n\n  const targetAspectRatio = getAspectRatio(targetWidth, targetHeight, urlString);\n\n  if (targetAspectRatio > 1) {\n    search.set('rh', String(Math.round(targetWidth / sourceAspectRatio) * 2));\n    search.set('rw', String(targetWidth * 2));\n  } else {\n    search.set('rw', String(Math.round(targetHeight * sourceAspectRatio) * 2));\n    search.set('rh', String(targetHeight * 2));\n  }\n\n  return urlString.slice(0, queryIndex) + '?' + search.toString();\n}\n\n/**\n * Takes the component/image width and rounds it to the nearest breakpoint value.\n * Low bandwidth connections return the lowest breakpoint available.\n */\nconst getBreakpoint = (width: number, bandwidth: number) => {\n  const breakpoints = Object.values(BREAKPOINTS);\n  const maxBreakpoint = breakpoints[breakpoints.length - 1] ?? 0;\n  return width > maxBreakpoint\n    ? maxBreakpoint\n    : bandwidth > 50\n    ? breakpoints.find((breakpoint) => breakpoint >= width)\n    : BREAKPOINTS.xxs;\n};\n\n/**\n * Responsive Image wraps `next/image` to render an image that responds to tailwind breakpoints.\n */\n\nexport const aspectRatioMap: Record<AspectRatio, string> = {\n  '3:4': 'aspect-[3/4]',\n  '1:1': 'aspect-square',\n  '3:2': 'aspect-[3/2]',\n  '4:3': 'aspect-[4/3]',\n  '4:2': 'aspect-[4/2]',\n  '9:16': 'aspect-[9/16]',\n  '16:9': 'aspect-[16/9]',\n  '21:9': 'aspect-[21/9]',\n  '18:5': 'aspect-[18/5]',\n  '384:113': 'aspect-[384/113]',\n};\n\nexport const getAspectRatioClass = (aspectRatio: AspectRatio): string =>\n  aspectRatioMap[aspectRatio] || 'aspect-[3/2]';\n\nexport const ResponsiveImage = ({\n  id,\n  altText,\n  aspectRatio,\n  imageUrl,\n  className = '',\n  wrapperClassName,\n  wrapperTag,\n  captionData,\n  bandwidth = 100,\n  onImgLoaded,\n  priority = false,\n  width,\n  hFull = false,\n  maxHeight,\n  onClick,\n}: TResponsiveImage) => {\n  const [loaded, setLoaded] = useState(false);\n\n  const imageWidth = getBreakpoint(width, bandwidth) || 0;\n\n  const imageHeight = GetHeightForWidthAndAspectRatio(imageWidth, aspectRatio);\n  const resizedImageUrl = imageUrl ? overrideImageUrl(imageUrl, imageHeight, imageWidth) : '';\n  const captionExists =\n    typeof captionData === 'object' && Object.keys(captionData).length > 0 && captionData.caption;\n\n  const defaultWrapperTag = captionData ? 'figure' : 'div';\n\n  //TODO updates coming with NHCBP-5517\n  return (\n    <ElementSelector\n      figureTag={wrapperTag || defaultWrapperTag}\n      className={cx(\n        wrapperClassName,\n        `relative block w-full overflow-hidden bg-transparent`,\n        {\n          'h-full': hFull,\n        },\n        aspectRatio ? getAspectRatioClass(aspectRatio) : null\n      )}\n      style={{\n        maxHeight: maxHeight ? maxHeight : undefined,\n      }}\n    >\n      {resizedImageUrl && (\n        <Image\n          id={id}\n          className={cx(className, {\n            'invisible opacity-0': !loaded, // Added `opacity=0` css to hide the flickering of the loaded image(overlapping loading indicator div) happening due to the `visibility:visible` overriding style from 'next/image' img styles; invisble style is overriden here always\n            'opacity-100': loaded,\n          })}\n          alt={altText}\n          src={resizedImageUrl}\n          style={{\n            objectFit: 'cover',\n          }}\n          fill\n          onLoad={() => {\n            setLoaded(true);\n\n            if (onImgLoaded) {\n              //TODO tsc is erroniously infering onImgLoaded: never\n              onImgLoaded();\n            }\n          }}\n          data-testid=\"responsiveImageImg\"\n          unoptimized={true} // required because akamai image manager doesnt support this (will cause 403 otherwise)\n          priority={priority}\n          onClick={onClick}\n        />\n      )}\n\n      {!loaded ? (\n        <div\n          data-testid=\"image-loading-widget\"\n          className={cx('absolute inset-0 size-full shrink-0 animate-pulse bg-bg-alt')}\n        />\n      ) : null}\n      {\n        /*TODO tsc is erroniously infering captionData: some none object type*/\n        captionExists ? <Caption {...captionData} metricsOnClick={onClick} /> : null\n      }\n    </ElementSelector>\n  );\n};\n\nexport { GetHeightForWidthAndAspectRatio, BREAKPOINTS, overrideImageUrl, getBreakpoint };\nexport default ResponsiveImage;\n","import { useState } from 'react';\nimport cx from 'classnames';\nimport Image from 'next/image';\nimport { Caption } from '@dx-ui/osc-caption';\nimport type { TResponsivePicture } from './responsive-picture.types';\nimport {\n  overrideImageUrl,\n  BREAKPOINTS,\n  getBreakpoint,\n  GetHeightForWidthAndAspectRatio,\n  aspectRatioMap,\n} from './responsive-image';\nimport type { AspectRatio } from './responsive-image.types';\nimport { ElementSelector } from './utils/element-selector';\n\nconst getAspectRatioClass = ({\n  aspectRatio,\n  tabletAspectRatio,\n  mobileAspectRatio,\n}: {\n  aspectRatio: AspectRatio;\n  tabletAspectRatio?: AspectRatio;\n  mobileAspectRatio?: AspectRatio;\n}) => {\n  const defaultAspectRatio = 'aspect-[3/2]';\n\n  return [\n    mobileAspectRatio\n      ? aspectRatioMap[mobileAspectRatio] || defaultAspectRatio\n      : defaultAspectRatio,\n    tabletAspectRatio ? `sm:${aspectRatioMap[tabletAspectRatio] || defaultAspectRatio}` : '',\n    (mobileAspectRatio || tabletAspectRatio) && aspectRatio\n      ? `lg:${aspectRatioMap[aspectRatio] || defaultAspectRatio}`\n      : aspectRatioMap[aspectRatio] || defaultAspectRatio,\n  ]\n    .filter(Boolean)\n    .join(' ');\n};\n\nexport const ResponsivePicture = ({\n  id,\n  altText,\n  className = '',\n  wrapperClassName,\n  wrapperTag,\n  captionData,\n  bandwidth = 100,\n  onImgLoaded,\n  priority = false,\n  width,\n  onClick,\n  imageUrl,\n  aspectRatio,\n  mobileImageUrl,\n  mobileAspectRatio,\n  tabletImageUrl,\n  tabletAspectRatio,\n}: TResponsivePicture) => {\n  const [loaded, setLoaded] = useState(false);\n  const imageWidth = getBreakpoint(width, bandwidth) || 0;\n\n  // Optimized image URLs\n  const desktopImageHeight = GetHeightForWidthAndAspectRatio(imageWidth, aspectRatio);\n  const desktopResizedImageUrl = imageUrl\n    ? overrideImageUrl(imageUrl, desktopImageHeight, imageWidth)\n    : '';\n\n  const tabletResizedImageUrl =\n    tabletAspectRatio && tabletImageUrl\n      ? overrideImageUrl(\n          tabletImageUrl,\n          GetHeightForWidthAndAspectRatio(imageWidth, tabletAspectRatio),\n          imageWidth\n        )\n      : '';\n\n  const mobileResizedImageUrl =\n    mobileAspectRatio && mobileImageUrl\n      ? overrideImageUrl(\n          mobileImageUrl,\n          GetHeightForWidthAndAspectRatio(imageWidth, mobileAspectRatio),\n          imageWidth\n        )\n      : '';\n\n  const captionExists = captionData && Object.keys(captionData).length > 0 && captionData.caption;\n  const defaultWrapperTag = captionData ? 'figure' : 'div';\n\n  return (\n    <ElementSelector\n      data-testid=\"responsivePictureWrapper\"\n      figureTag={wrapperTag || defaultWrapperTag}\n      className={cx(\n        wrapperClassName,\n        'relative block w-full overflow-hidden bg-transparent',\n        getAspectRatioClass({\n          aspectRatio,\n          tabletAspectRatio,\n          mobileAspectRatio,\n        })\n      )}\n    >\n      {desktopResizedImageUrl && (\n        <picture data-testid=\"responsivePicture\">\n          {mobileImageUrl && (\n            <source\n              data-testid=\"mobileSource\"\n              media={`(max-width: ${BREAKPOINTS.sm}px)`}\n              srcSet={mobileResizedImageUrl}\n            />\n          )}\n          {tabletImageUrl && (\n            <source\n              data-testid=\"tabletSource\"\n              media={`(max-width: ${BREAKPOINTS.xl}px)`}\n              srcSet={tabletResizedImageUrl}\n            />\n          )}\n          <Image\n            id={id}\n            className={cx('object-cover', className, {\n              'invisible opacity-0': !loaded,\n              'opacity-100': loaded,\n            })}\n            alt={altText}\n            src={desktopResizedImageUrl}\n            fill\n            onLoad={() => {\n              setLoaded(true);\n              onImgLoaded?.();\n            }}\n            unoptimized={true}\n            priority={priority}\n            onClick={onClick}\n          />\n        </picture>\n      )}\n\n      {!loaded && (\n        <div\n          data-testid=\"image-loading-widget\"\n          className=\"absolute inset-0 size-full shrink-0 animate-pulse bg-bg-alt\"\n        />\n      )}\n      {captionExists && <Caption {...captionData} metricsOnClick={onClick} />}\n    </ElementSelector>\n  );\n};\n\nexport default ResponsivePicture;\n","import { BREAKPOINTS } from '../responsive-image';\nimport type { AspectRatio } from '../responsive-image.types';\n\ntype AspectRatioandUrlArgs = {\n  width: number;\n  imageUrlMobile?: string;\n  imageUrlTablet?: string;\n  imageUrlDesktop?: string;\n  aspectRatioMobile?: AspectRatio;\n  aspectRatioTablet?: AspectRatio;\n  aspectRatioDesktop?: AspectRatio;\n};\n\n/**\n * Returns the URL and the Aspect Ratio for the current screen size(mobile, desktop or tablet)\n *\n * @param width\n * @param imageUrlMobile\n * @param imageUrlTablet\n * @param imageUrlDesktop\n * @param imageUrlAllScreens\n * @param aspectRatioMobile\n * @param aspectRatioTablet\n * @param aspectRatioDesktop\n * @param aspectRatioAllScreens\n * @returns\n */\n\nexport const getCurrentAspectRatioAndUrl = ({\n  width,\n  imageUrlMobile,\n  imageUrlTablet,\n  imageUrlDesktop,\n  aspectRatioMobile,\n  aspectRatioTablet,\n  aspectRatioDesktop,\n}: AspectRatioandUrlArgs): { imageUrl: string; aspectRatio: AspectRatio } => {\n  const isMobile = width < BREAKPOINTS['sm'];\n\n  const isDesktop = width > BREAKPOINTS['xl'];\n\n  if (isMobile && imageUrlMobile && aspectRatioMobile) {\n    return { imageUrl: imageUrlMobile, aspectRatio: aspectRatioMobile };\n  }\n\n  if (isDesktop && imageUrlDesktop && aspectRatioDesktop) {\n    return { imageUrl: imageUrlDesktop, aspectRatio: aspectRatioDesktop };\n  }\n\n  if (!isDesktop && !isMobile && imageUrlTablet && aspectRatioTablet) {\n    return { imageUrl: imageUrlTablet, aspectRatio: aspectRatioTablet };\n  }\n\n  return { imageUrl: '', aspectRatio: '16:9' };\n};\n","export * from './responsive-image';\nexport * from './responsive-picture';\nexport * from './responsive-image.types';\nexport * from './responsive-picture.types';\nexport * from './utils/aspect-ratio-to-tailwind-class-converter';\nexport * from './utils/get-current-aspect-ratio-and-url';\n","export * from './lib';\n","import type { SupportedLanguage } from '@dx-ui/framework-i18n';\nimport {\n  startOfWeek,\n  differenceInCalendarDays,\n  addDays,\n  getDaysInMonth,\n  eachDayOfInterval,\n  endOfMonth,\n  getDay,\n  subDays,\n} from 'date-fns';\n\nexport const MAX_CALENDAR_DAYS = 42; // maximum day slots a calendar can have\n\nexport const DEFAULT_LANGUAGE = 'en' as SupportedLanguage;\n\nexport const DEFAULT_LOCALE_OPTIONS = {\n  calendar: 'gregory',\n};\n\nexport const LOCALE_OPTIONS: Partial<\n  Record<StringWithAutocompleteOptions<SupportedLanguage>, Partial<Intl.DateTimeFormatOptions>>\n> = {\n  ar: {\n    numberingSystem: 'latn',\n  },\n};\n\nexport const weekStartsOn = (locale: Intl.Locale) => {\n  const key = `${locale.language}${locale.script ? `-${locale.script.toLocaleLowerCase()}` : ''}`;\n  return key ? weekStartsOnLocale[key] : 0;\n};\n\nexport function getDaysSplitByWeeks({\n  date,\n  locale,\n}: {\n  date: Date;\n  locale: Intl.Locale;\n}): Date[][] {\n  const startDay = differenceInCalendarDays(\n    date,\n    startOfWeek(date, { weekStartsOn: weekStartsOn(locale) })\n  );\n  const days = eachDayOfInterval({\n    start: subDays(date, startDay),\n    end: addDays(endOfMonth(date), MAX_CALENDAR_DAYS - (getDay(date) + getDaysInMonth(date))),\n  });\n  const w: Date[][] = [];\n  while (days.length > 0) {\n    w.push(days.splice(0, 7));\n  }\n  return w;\n}\n\nexport const isKanji = (locale?: Intl.Locale) =>\n  locale?.language && ['ja', 'ko', 'zh'].includes(locale?.language);\nexport const isLocale = (language: string, locale?: Intl.Locale) =>\n  locale?.language && language === locale.language;\nexport const isArabic = (locale?: Intl.Locale) =>\n  locale?.language && ['ar'].includes(locale?.language);\nexport const isVietnamese = (locale?: Intl.Locale) =>\n  locale?.language && ['vi'].includes(locale?.language);\n\nconst weekStartsOnLocale: Record<string, 0 | 1 | 2 | 3 | 4 | 5 | 6> = {\n  en: 0,\n  ar: 6,\n  bg: 1,\n  cs: 1,\n  da: 1,\n  fi: 1,\n  fr: 1,\n  id: 1,\n  nl: 1,\n  de: 1,\n  it: 1,\n  ja: 0,\n  ko: 0,\n  no: 1,\n  pl: 1,\n  pt: 1,\n  ro: 1,\n  ru: 1,\n  es: 1,\n  sv: 1,\n  th: 0,\n  tr: 1,\n  'zh-hans': 0,\n  'zh-hant': 0,\n};\n","import { addDays, startOfWeek } from 'date-fns';\nimport { useMemo } from 'react';\nimport { isArabic, weekStartsOn } from './utils';\n\nexport type UseDaysOfWeek = {\n  /** The locale used to get the in-language days of the week. */\n  locale: Intl.Locale;\n  /** The option to use when formatting the days of the wekk. @see Intl.DateTimeFormatOptions['weekday'] */\n  format?: Intl.DateTimeFormatOptions['weekday'];\n  /**\n   * **deprecated** whether to use the format overrides or not\n   * @deprecated\n   */\n  override?: boolean;\n};\n\n/**\n * Provides the days of the week for a given locale. The format for each day is determined by the `format` property.\n * This hook will order the days of the week based on the day the week starts for the given `locale`.\n *\n * #### Overrides\n * If the `override` flag is enabled, the following languages produce these day of week instead of the native support\n *\n * | Language | Short Days of Week |\n * |--------|-------------------|\n * | bg | 'пон', 'вто', 'сря', 'чет', 'пет', 'съб', 'нед' |\n * | cs | 'pon', 'úte', 'stř', 'čtv', 'pát', 'sob', 'ned' |\n * | ru | 'пнд', 'втр', 'срд', 'чтв', 'птн', 'суб', 'вск' |\n * | th | 'อาทิตย์', 'จันทร์', 'อังคาร', 'พุธ', 'พฤหัสบดี', 'ศุกร์', 'เสาร์' |\n */\nexport const useDaysOfWeek = ({\n  locale,\n  format = 'short',\n  override = true,\n}: UseDaysOfWeek): Array<string> =>\n  useMemo(() => {\n    if (!locale) {\n      return [];\n    }\n    const options = {\n      weekday: isArabic(locale) ? 'long' : format,\n    };\n    let days;\n    if (format === 'short' && override) {\n      days = locale.baseName ? FORMAT_SHORT_OVERRIDES[locale.baseName] : undefined;\n    }\n    if (!days) {\n      const startDate = startOfWeek(new Date(), {\n        weekStartsOn: weekStartsOn(locale),\n      });\n      days = [...Array(7)].map((n, i) => {\n        const day = addDays(startDate, i);\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        return day.toLocaleDateString(locale, options);\n      });\n    }\n    return days;\n  }, [locale, format, override]);\n\n/** these languages only supply 2 character short weekday values with Intl.DateTimeFormat */\nconst FORMAT_SHORT_OVERRIDES: Record<string, Array<string>> = {\n  bg: ['пон', 'вто', 'сря', 'чет', 'пет', 'съб', 'нед'],\n  ru: ['пнд', 'втр', 'срд', 'чтв', 'птн', 'суб', 'вск'],\n  th: ['อาทิตย์', 'จันทร์', 'อังคาร', 'พุธ', 'พฤหัสบดี', 'ศุกร์', 'เสาร์'],\n};\n\nexport default useDaysOfWeek;\n","import { getDay } from 'date-fns';\nimport { useMemo } from 'react';\nimport { useDaysOfWeek } from './use-days-of-week';\nimport capitalize from 'lodash/capitalize';\nimport { DEFAULT_LOCALE_OPTIONS, isKanji, LOCALE_OPTIONS, weekStartsOn } from './utils';\n\ntype AdditionalFormatOptions = {\n  monthName?: Intl.DateTimeFormatOptions['month'];\n};\n\nexport type UseDateFormatPartTypes = 'day' | 'month' | 'year' | 'weekday';\n\nexport type UseDateFormatOptions = Pick<Intl.DateTimeFormatOptions, UseDateFormatPartTypes> &\n  AdditionalFormatOptions;\n\nexport const DEFAULT_FORMAT_OPTIONS: UseDateFormatOptions = {\n  day: 'numeric',\n  month: 'numeric',\n  year: 'numeric',\n  weekday: 'short',\n  monthName: 'short',\n};\n\ntype FormatPart = { numeric: string; text: string };\n\nexport type DateFormat = {\n  day: FormatPart;\n  month: FormatPart;\n  year: FormatPart;\n  weekday: string;\n};\n\ntype UseDateFormatter = {\n  /**\n   * Date to format\n   */\n  date: Date | null;\n  /**\n   * The language locale to use to format the date\n   */\n  locale: Intl.Locale;\n  /**\n   * Format options for the given date. There are options to format both\n   * text output and date output. [Intl.DateTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat)\n   */\n  options?: UseDateFormatOptions;\n};\n\nexport function formatDateAndText(\n  date: Date | null,\n  locale: Intl.Locale,\n  part: UseDateFormatPartTypes,\n  options: UseDateFormatOptions\n) {\n  const config = {\n    ...DEFAULT_LOCALE_OPTIONS,\n    ...LOCALE_OPTIONS[locale.baseName || ''],\n    ...options,\n  } as const;\n  const formatter = new Intl.DateTimeFormat(locale.toString(), config);\n  const parts = date && formatter.formatToParts(date);\n  const isNumeric = options[part] === 'numeric';\n  let numeric;\n  let text;\n  if (isNumeric) {\n    numeric = parts?.find(({ type }) => type === part)?.value || '';\n    const value = parts?.find(({ type }) => type === 'literal')?.value?.trim() || '';\n    text = value.match(/^[,.]$/) ? '' : value;\n  } else {\n    numeric = '';\n    text = parts?.find(({ type }) => type === part)?.value?.trim() || '';\n  }\n  return { numeric, text };\n}\n\n/**\n * Date Formatter that provides the parts of the date broken up into `text` values and `numeric` values.\n *\n * ### Special Format Cases\n * There are are few special cases where we override the default text formats to provide in-language text support for dates\n *\n * #### Kanji\n * Kanji based languages which are `Japanese`, `Korean`, `Traditional Chinese` and `Simplified Chinese` default override will use `{ weekday: 'long' }`\n *\n * #### Bulgarian\n * There is an [issue with bulgarian](https://www.unicode.org/cldr/cldr-aux/charts/31/summary/bg.html), where the short month format is missing.\n * In order to obtain this format additional settings are required, in particular `{ weekday: 'long' }`\n */\nexport const useDateFormat = ({\n  date,\n  locale,\n  options = DEFAULT_FORMAT_OPTIONS,\n}: UseDateFormatter): DateFormat => {\n  const config = useMemo(\n    () => ({\n      ...DEFAULT_FORMAT_OPTIONS,\n      ...options,\n    }),\n    [options]\n  );\n  if (isKanji(locale)) {\n    config.weekday = 'long';\n  }\n  const daysOfWeek = useDaysOfWeek({ locale, format: config.weekday });\n  return useMemo(() => {\n    if (!date) {\n      return {\n        day: { numeric: '', text: '' },\n        month: { numeric: '', text: '' },\n        year: { numeric: '', text: '' },\n        weekday: '',\n      };\n    }\n\n    const day = formatDateAndText(date, locale, 'day', { day: config.day });\n    const month = formatDateAndText(date, locale, 'month', {\n      month: config.month,\n    });\n    const year = formatDateAndText(date, locale, 'year', { year: config.year });\n    // get the index day of the week from date-fns\n    const dayIndex = getDay(date);\n    // find the array index value\n    const weekStart = weekStartsOn(locale) ?? 0;\n    const index = dayIndex - weekStart;\n    const weekday = daysOfWeek.at(index) || '';\n\n    // find a month text if there is not one supplied already\n    if (month.text.trim() === '') {\n      month.text = formatDateAndText(date, locale, 'month', {\n        month: config.monthName,\n      }).text;\n      /** bug with bulgarian short month format. short format for month is tied to additional settings\n       * @see https://www.unicode.org/cldr/cldr-aux/charts/31/summary/bg.html */\n      if (locale.baseName === 'bg') {\n        const monthConfig = {\n          ...config,\n          ...{ month: config.monthName, weekday: 'long' as const },\n        };\n        month.text = formatDateAndText(date, locale, 'month', monthConfig).text;\n      }\n    }\n    // process capitilization\n    if (['ru', 'es'].includes(locale.baseName)) {\n      month.text = capitalize(month.text);\n    }\n\n    return {\n      day,\n      month,\n      year,\n      weekday,\n    };\n  }, [config, date, daysOfWeek, locale]);\n};\n\nexport default useDateFormat;\n","import { useMemo } from 'react';\nimport type { SupportedLanguage } from '@dx-ui/framework-i18n';\nimport { DEFAULT_LANGUAGE, DEFAULT_LOCALE_OPTIONS, LOCALE_OPTIONS } from './utils';\n\ntype UseLocale = {\n  /** The supported language code to use */\n  language: StringWithAutocompleteOptions<SupportedLanguage>;\n  /** Any date format options to use. In addition to the default setting, The numbering system for the `ar` language code is set to `latn` */\n  options?: Intl.DateTimeFormatOptions;\n};\n\n/**\n * Used to obtain the [Intl.Locale](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale).\n */\nexport const useLocale = ({\n  language = DEFAULT_LANGUAGE,\n  options = DEFAULT_LOCALE_OPTIONS,\n}: UseLocale): Intl.Locale =>\n  useMemo(\n    () =>\n      new Intl.Locale(language, {\n        ...DEFAULT_LOCALE_OPTIONS,\n        ...LOCALE_OPTIONS[language],\n        ...options,\n      }),\n    [language, options]\n  );\n\nexport default useLocale;\n","export * from './utils';\nexport * from './use-days-of-week';\nexport * from './use-date-format';\nexport * from './use-locale';\n","export * from './lib';\n","import { sendReward } from '@dx-ui/framework-conductrics';\nimport { FilterMaxPriceRadioButtons } from '@dx-ui/osc-filters';\nimport { TabButton, TabList, TabPanel, TabPanels, Tabs } from '@dx-ui/osc-tabs';\nimport { GOALS } from '../../../constants';\nimport { useTranslation } from 'next-i18next';\nimport { useFormContext } from 'react-hook-form';\n\nexport const PricePlannerTabs = () => {\n  const { t } = useTranslation('default-locations-page');\n  const PRICE_LIST = [\n    { basePrice: 100, convertedPrice: 100 },\n    { basePrice: 200, convertedPrice: 200 },\n    { basePrice: 350, convertedPrice: 350 },\n    { basePrice: 500, convertedPrice: 500 },\n  ];\n  const POINTS_LIST = [\n    { basePrice: 30000, convertedPrice: 30000 },\n    { basePrice: 50000, convertedPrice: 50000 },\n    { basePrice: 75000, convertedPrice: 75000 },\n    { basePrice: 95000, convertedPrice: 95000 },\n  ];\n  const { setValue, watch } = useFormContext();\n  const shouldUsePoints = watch('specialRates.redeemPts');\n  const handleTabClick = (tabId: string) => {\n    setValue('specialRates.redeemPts', tabId === 'points-explorer-tab');\n    setValue('priceFilter', 'noMaximum');\n    if (tabId === 'points-explorer-tab') {\n      sendReward(GOALS.planYourStayTabClick);\n    }\n  };\n  return (\n    <Tabs>\n      <TabList className=\"mb-4\">\n        <TabButton\n          id=\"price-planner-tab\"\n          className=\"ml-4 grow cursor-pointer appearance-none whitespace-nowrap px-4 py-2 text-base font-bold hover:text-primary focus:text-primary md:whitespace-normal\"\n          activeClassName=\"border-b-primary text-primary border-b-4\"\n          inactiveClassName=\"text-text-alt\"\n          handleOnClick={() => handleTabClick('price-planner-tab')}\n        >\n          {t('pricePlanner.pricePlanner')}\n        </TabButton>\n        <div className=\"mb-1.5 border-l-2 border-l-text-alt\" />\n        <TabButton\n          id=\"points-explorer-tab\"\n          className=\"mr-4 grow cursor-pointer appearance-none whitespace-nowrap px-4 py-2 text-base font-bold hover:text-primary focus:text-primary md:whitespace-normal\"\n          activeClassName=\"border-b-primary text-primary border-b-4\"\n          inactiveClassName=\"text-text-alt\"\n          handleOnClick={() => handleTabClick('points-explorer-tab')}\n        >\n          {t('pricePlanner.pointsExplorer')}\n        </TabButton>\n      </TabList>\n      <TabPanels>\n        {!shouldUsePoints ? (\n          <TabPanel id=\"price-planner-tab\">\n            <div className=\"mb-2 text-base font-bold\"> {t('pricePlanner.priceFilterHeading')}</div>\n            <FilterMaxPriceRadioButtons currencyCode=\"USD\" priceList={PRICE_LIST} />\n          </TabPanel>\n        ) : null}\n        {shouldUsePoints ? (\n          <TabPanel id=\"points-explorer-tab\">\n            <div className=\"mb-2 text-base font-bold\">{t('pricePlanner.priceFilterHeading')}</div>\n            <FilterMaxPriceRadioButtons currencyCode=\"USD\" priceList={POINTS_LIST} isPointsFilter />\n          </TabPanel>\n        ) : null}\n      </TabPanels>\n    </Tabs>\n  );\n};\n","import { Dialog } from '@dx-ui/osc-dialog-v2';\nimport type { FieldValues } from 'react-hook-form';\nimport { useForm, FormProvider } from 'react-hook-form';\nimport { FormInput, type FormDataStructure } from '@dx-ui/osc-form';\nimport { FilterMaxPriceRadioButtons } from '@dx-ui/osc-filters';\nimport { ShopFormLocation } from '../../osc-search-form/search-form-inputs';\nimport { useLocation } from '@dx-ui/framework-location-provider';\nimport { useGetMVTSelections, useWrappedRouter } from '../../../hooks';\nimport { logError } from '@dx-ui/framework-logger';\nimport type { GeocodeQuery } from '@dx-ui/queries-dx-shop-search-ui';\nimport { serverSideGeocodeQuery } from '@dx-ui/queries-dx-shop-search-ui';\nimport { useQueryClient } from '@tanstack/react-query';\nimport type { LocationUrlParams } from '@dx-ui/framework-uri-builder';\nimport { locationUriBuilder } from '@dx-ui/framework-uri-builder';\nimport { useTranslation } from 'next-i18next';\nimport { PricePlannerTabs } from './price-planner-tabs';\nimport { GOALS, POINTS_EXPLORER_DEFAULT_LOCATIONS } from '../../../constants';\nimport { sendReward } from '@dx-ui/framework-conductrics';\nimport { useEffect, useState } from 'react';\n\ntype BookWithinBudgetModalProps = {\n  isOpen: boolean;\n  onDismiss: () => void;\n};\nconst PRICE_LIST = [\n  { basePrice: 100, convertedPrice: 100 },\n  { basePrice: 200, convertedPrice: 200 },\n  { basePrice: 350, convertedPrice: 350 },\n  { basePrice: 500, convertedPrice: 500 },\n];\n\nconst AMENITIES = ['allInclusive', 'beach', 'boutique', 'golf', 'luxury', 'resort'] as const;\n\nexport const PlanYourStayModal = ({ isOpen, onDismiss }: BookWithinBudgetModalProps) => {\n  const { t } = useTranslation(['default-locations-page', 'osc-location']);\n  const { coordinate } = useLocation();\n  const { safeQueryParams: queryParameters, router } = useWrappedRouter();\n  const queryClient = useQueryClient();\n\n  const methods = useForm<FormDataStructure>({\n    defaultValues: { priceFilter: 'noMaximum' },\n    mode: 'onTouched',\n  });\n  const { getValues, reset } = methods;\n\n  const handleModalClose = () => {\n    reset();\n    if (onDismiss) onDismiss();\n  };\n  const handleFindaHotelClick = async (formData: FieldValues) => {\n    const locationAddress = formData?.query;\n    const placeId = formData?.placeId;\n    let placeUri = 'usa';\n    if (!!locationAddress || !!placeId) {\n      let geocodeData: GeocodeQuery = {};\n      try {\n        geocodeData = await serverSideGeocodeQuery(queryClient, {\n          address: locationAddress,\n          placeId,\n          sessionToken: queryParameters?.sessionToken,\n          language: router?.locale || 'en',\n        });\n        placeUri = geocodeData?.geocode?.match?.placeUri || 'usa';\n      } catch (error) {\n        if (error instanceof Error || typeof error === 'string')\n          logError('PLAN_TO_BOOK', error, 'failed to fetch geocode data');\n      }\n    }\n    //default Curreny is USD\n    const priceFilterValue =\n      formData?.priceFilter && formData?.priceFilter !== 'noMaximum'\n        ? ([formData?.priceFilter, formData?.priceFilter] as Tuple<2, number>)\n        : undefined;\n\n    const urlParams: LocationUrlParams = {\n      f_amenityIds: formData.amenities,\n      f_price: priceFilterValue,\n      placeUri,\n      redeemPts: formData?.specialRates?.redeemPts,\n    };\n    const locationUrlString = locationUriBuilder({\n      locale: router.locale || 'en',\n      urlParams,\n      relative: true,\n    });\n    sendReward(GOALS.pricePlannerFindHotelClick);\n    handleModalClose();\n    window.location.assign(locationUrlString);\n  };\n  const [enablePointsPricePlannerMVT, setEnablePointsPricePlannerMVT] = useState(false);\n\n  useEffect(() => {\n    if (isOpen) setEnablePointsPricePlannerMVT(true);\n  }, [isOpen]);\n\n  const {\n    isLoaded,\n    isMVTVariant: { b: isPointsInPricePlanner },\n  } = useGetMVTSelections({\n    agentId: POINTS_EXPLORER_DEFAULT_LOCATIONS.agentId,\n    isProvisional: enablePointsPricePlannerMVT,\n  });\n  const isPointsInPricePlannerMVT = isLoaded && isPointsInPricePlanner;\n  return (\n    <FormProvider {...methods}>\n      <Dialog\n        isOpen={isOpen}\n        onDismiss={handleModalClose}\n        size=\"md\"\n        title={t('pricePlanner.planYourStay')}\n      >\n        {isPointsInPricePlannerMVT ? (\n          <PricePlannerTabs />\n        ) : (\n          <>\n            <div className=\"mb-2 text-base font-bold\"> {t('pricePlanner.priceFilterHeading')}</div>\n            <FilterMaxPriceRadioButtons currencyCode=\"USD\" priceList={PRICE_LIST} />\n          </>\n        )}\n        <div>\n          <div className=\"my-2\">\n            <ShopFormLocation\n              coordinate={coordinate}\n              key=\"planToBookLocation\"\n              language={router.locale || 'en'}\n              optional={true}\n              placeholder={t('osc-location:placeholder')}\n              sessionId={queryParameters?.sessionToken}\n            />\n          </div>\n          <div>\n            <div className=\"py-3 text-base font-bold\">\n              {t('pricePlanner.amenitiesHeading')}{' '}\n              <span className=\"font-normal text-text-alt\"> {t('pricePlanner.optional')} </span>\n            </div>\n            <div className=\"grid items-start gap-6 px-2 pb-4 sm:grid-cols-1 md:grid-cols-2\">\n              {AMENITIES.map((amenity) => (\n                <div key={amenity} className=\"flex items-center text-sm\">\n                  <FormInput\n                    id={amenity}\n                    label={\n                      <div className=\"flex items-start\">\n                        <span className=\"rtl:px-2\">{t(`amenities.${amenity}`)}</span>\n                      </div>\n                    }\n                    labelClassName=\"flex items-start\"\n                    name=\"amenities\"\n                    type=\"checkbox\"\n                    value={amenity}\n                  />\n                </div>\n              ))}\n            </div>\n          </div>\n          <button\n            type=\"submit\"\n            className=\"btn btn-xl btn-primary w-full\"\n            onClick={() => handleFindaHotelClick(getValues())}\n          >\n            {t('default-locations-page:findHotel')}\n          </button>\n        </div>\n      </Dialog>\n    </FormProvider>\n  );\n};\n","import { useState } from 'react';\nimport { PlanYourStayModal } from './plan-your-stay-modal';\nimport { useTranslation } from 'next-i18next';\n\nexport const PlanToBookWithinBudgetButton = () => {\n  const { t } = useTranslation(['default-locations-page']);\n  const [showBookWithinBudgetModal, setShowBookWithinBudgetModal] = useState(false);\n\n  const openBookWithinBudgetModal = () => {\n    setShowBookWithinBudgetModal(true);\n  };\n  const closeBookWithinBudgetModal = () => {\n    setShowBookWithinBudgetModal(false);\n  };\n  return (\n    <>\n      <div className=\"relative flex flex-wrap items-end justify-center gap-2 sm:justify-start lg:mb-6 lg:flex-nowrap lg:gap-3\">\n        <div className=\"flex w-full max-w-sm pt-2 md:w-auto md:flex-1\">\n          <button\n            className=\"btn btn-primary-outline w-full py-2 md:w-auto md:flex-1\"\n            onClick={openBookWithinBudgetModal}\n            type=\"button\"\n          >\n            {t('pricePlanner.bookWithinBudgetCta')}\n          </button>\n        </div>\n      </div>\n      <PlanYourStayModal\n        isOpen={showBookWithinBudgetModal}\n        onDismiss={closeBookWithinBudgetModal}\n      />\n    </>\n  );\n};\n","import * as React from 'react';\nimport { useMetrics, useWrappedRouter, useGetDreamPageData } from '../../hooks';\nimport { useLocation } from '@dx-ui/framework-location-provider';\nimport {\n  ShopFormDates,\n  ShopFormLocation,\n  ShopFormRooms,\n  ShopFormSpecialRates,\n  wrapperClassNameDefaultWithLocation,\n} from '../osc-search-form/search-form-inputs';\nimport { useIsClient, useMediaQuery } from 'usehooks-ts';\nimport { useTranslation } from 'next-i18next';\nimport { useQueryClient } from '@tanstack/react-query';\nimport cx from 'classnames';\nimport { sendReward } from '@dx-ui/framework-conductrics';\nimport { serverSideGeocodeQuery } from '@dx-ui/queries-dx-shop-search-ui';\nimport { GOALS } from '../../constants';\nimport type { SortByValues } from '@dx-ui/framework-uri-builder';\nimport { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport { getPageType } from '../../utils';\nimport { getTARatingValue, getValidFilters, isPriceRangeValid } from '../filters/filter-utils';\nimport { ShopForm } from '../dynamic-components';\nimport { useRouter } from 'next/router';\nimport { useCoordsFromParams } from '../../hooks/use-coords-from-params';\nimport { useFilterState } from '../../providers/filter-provider';\nimport { PlanToBookWithinBudgetButton } from '../default-locations-page/price-planner/book-within-budget-cta';\nimport { logError } from '@dx-ui/framework-logger';\nimport { useMonthTabsMVT } from '../osc-search-form/month-tabs-mvt/use-month-tabs-mvt';\nimport { ArrivalDateSpy } from '../osc-search-form/month-tabs-mvt/arrival-date-spy';\nimport { useAuth } from '@dx-ui/framework-auth-provider';\n\ntype PlacesSearchProps = {\n  brandCode?: string;\n  ctaText: string;\n  hasShallowRoutingEnabled?: boolean;\n  initialLocation?: string;\n  matchId?: string | null;\n};\n\nexport const PlacesSearch = ({\n  brandCode,\n  ctaText,\n  hasShallowRoutingEnabled,\n  initialLocation,\n  matchId,\n}: PlacesSearchProps) => {\n  const client = useQueryClient();\n  const metrics = useMetrics();\n  const location = useLocation();\n  const dispatch = useAppDispatch();\n  const { t } = useTranslation(['osc-shop-form-wrapper', 'places-search', 'osc-date-picker']);\n  const language = useRouter().locale || 'en';\n  const isClient = useIsClient();\n  const { shouldUseParamCoords } = useCoordsFromParams();\n  const { guestInfo } = useAuth();\n\n  const { router, safeQueryParams: searchQueryParameters } = useWrappedRouter();\n\n  const {\n    hasConnectingRooms,\n    selectedCurrency = '',\n    sortType,\n    pageType,\n    shouldUsePoints,\n  } = useAppState();\n  const activeFiltersState = useFilterState();\n\n  const {\n    isDefaultLocations: defaultLocationsPage,\n    isHotelsNearMe: hotelsNearMePage,\n    isDreams,\n  } = getPageType(router.asPath);\n  const showDefaultPlaceholder =\n    pageType.isDefaultLocations ||\n    hotelsNearMePage ||\n    defaultLocationsPage ||\n    pageType.isGlobal ||\n    pageType.isResorts ||\n    pageType.isCategoryAmenity;\n\n  const { locationMatchName, isFetching } = useGetDreamPageData(isDreams);\n\n  const {\n    content,\n    datesFlex,\n    fromId,\n    maxPoints,\n    placeId,\n    specPlan,\n    redeemPts,\n    requestedRatesOnly,\n    sessionToken,\n    specialRateTokens,\n    token,\n    query,\n    cid,\n  } = searchQueryParameters || {};\n\n  const isLargeView = useMediaQuery('(min-width: 1024px)');\n\n  const handleFormSubmit: React.ComponentProps<typeof ShopForm>['onSubmit'] = async ({\n    formData,\n    url,\n    locale: shopFormLocale,\n  }) => {\n    //clear session state to prioritize params on form update\n    if (isClient) sessionStorage.removeItem('session-state');\n    sendReward('g-9cHROfHNt4');\n    sendReward(GOALS.DLFindAHotel);\n\n    if (url) {\n      //Reset compare hotels on shop form update\n      dispatch({ type: 'SET_HOTELS_TO_COMPARE', payload: [] });\n\n      // Date Search\n      if (formData?.dates?.arrivalDate || formData?.dates?.departureDate) {\n        if (pageType.isPointsExplorer) {\n          const searchUIPages = { ...pageType, isPointsExplorer: false };\n          dispatch({ type: 'SET_PAGE_TYPES', payload: searchUIPages });\n        }\n        if (shopFormLocale !== router.locale) {\n          return window.location.assign(url);\n        }\n        return await router.push(url);\n      }\n      const formDataPlaceId = formData?.placeId !== 'null' ? formData?.placeId : undefined;\n      try {\n        const geocodeData = await serverSideGeocodeQuery(client, {\n          address: formData?.query,\n          placeId: formDataPlaceId,\n          sessionToken: formData?.sessionToken,\n          language: router?.locale || 'en',\n        });\n        if (!defaultLocationsPage)\n          metrics.setLocationSearchName({\n            locationSearchName: geocodeData?.geocode?.match?.name || '',\n          });\n      } catch (error) {\n        if (error instanceof Error || typeof error === 'string')\n          logError('ShopForm_Submit', error, 'failed to fetch geocode data');\n      }\n      await router.push(\n        url,\n        undefined,\n        //shallow routing only enabled on dream page\n        { shallow: hasShallowRoutingEnabled }\n      );\n    }\n  };\n\n  const defaultQueryValue =\n    shouldUseParamCoords && query ? query : locationMatchName || initialLocation;\n\n  const defaultValues = React.useMemo(\n    () => ({\n      brandCode: pageType?.isPageBrandFilterEnabled ? brandCode : 'WW',\n      hhonors: guestInfo?.hhonors,\n      dates: {\n        datesFlex,\n      },\n      placeId: placeId || matchId || '',\n      query: isFetching ? '' : defaultQueryValue,\n      specialRates: {\n        redeemPts,\n      },\n    }),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [\n      brandCode,\n      datesFlex,\n      placeId,\n      matchId,\n      isFetching,\n      defaultQueryValue,\n      redeemPts,\n      guestInfo?.hhonors,\n    ]\n  );\n\n  const shopFormKey = encodeURI(JSON.stringify(defaultValues));\n\n  //NHCSEARCH-5716 - Month tabs in date modal MVT\n  const { setEnableMonthTabsMVT, monthDateSelectorProp } = useMonthTabsMVT();\n  return isClient && router.isReady ? (\n    <div\n      className={cx('bg-bg', {\n        'border-border-alt border-b pb-2': !defaultLocationsPage,\n        'p-6': hotelsNearMePage,\n        'p-4 lg:pl-10 lg:mr-10': defaultLocationsPage,\n        'gap-3': defaultLocationsPage && !isLargeView, //NHCSEARCH-5338\n        'flex gap-3': defaultLocationsPage && isLargeView, //NHCSEARCH-5338\n      })}\n    >\n      <div className={cx({ 'w-full justify-evenly': isLargeView })}>\n        <ShopForm\n          additionalQSParameters={{\n            adjoiningRoomStay: hasConnectingRooms,\n            brandCode: pageType?.isPageBrandFilterEnabled ? brandCode : 'WW',\n            content,\n            displayCurrency: selectedCurrency as string,\n            fromId,\n            sortBy: sortType as SortByValues,\n            f_amenityIds: getValidFilters(activeFiltersState?.amenityFilters),\n            f_brandCodes: getValidFilters(activeFiltersState?.brandFilters),\n            f_price: isPriceRangeValid(activeFiltersState?.priceFilter)\n              ? activeFiltersState?.priceFilter\n              : undefined,\n            f_tripAdvisorRatings: getTARatingValue(activeFiltersState?.ratingsFilter),\n            maxPoints,\n            requestedRatesOnly,\n            specPlan,\n            specialRatesTokens: specialRateTokens?.join(','),\n            token,\n            redeemPts: shouldUsePoints,\n            cid,\n          }}\n          canAlwaysSubmit={defaultLocationsPage}\n          cta={ctaText}\n          defaultValues={defaultValues}\n          key={shopFormKey}\n          language={language}\n          enableDatesFlexDreamRouting={true}\n          onSubmit={handleFormSubmit}\n          targetOHWPage=\"search\"\n          wrapperClassName={cx(wrapperClassNameDefaultWithLocation.slice(1), 'sm:justify-start')}\n          shouldDisplayGeocodeErrorModal={true}\n          hasErrorBanner={false}\n          {...(!defaultLocationsPage && {\n            summaryOptions: {\n              initiallyExpanded: false,\n              type: 'search',\n              hideRoomSummary: true,\n              summaryClassName: 'no-container',\n            },\n          })}\n        >\n          <ShopFormLocation\n            coordinate={location.searchBiasCoordinate}\n            key={`searchLoc-${locationMatchName}`}\n            language={language}\n            placeholder={showDefaultPlaceholder ? undefined : t('places-search:loadingHotels')}\n            required\n            sessionId={sessionToken}\n          />\n\n          <ShopFormDates\n            hasTodayAsDefault={false}\n            language={language}\n            //NHCSEARCH-5363 - flex dates verbiage MVT\n            onOpen={() => {\n              setEnableMonthTabsMVT();\n            }}\n            flexDatesLabel={t('osc-date-picker:shopByPrice')}\n            {...monthDateSelectorProp}\n          />\n          <ArrivalDateSpy arrivalDate=\"1969-12-31\" />\n          {defaultLocationsPage ? (\n            <>\n              <ShopFormRooms\n                ageRange={{ min: 0, max: 18 }}\n                occupancyLimitMessage={t('osc-shop-form-wrapper:maxGuestsSingleRoom')}\n              />\n              <ShopFormSpecialRates />\n            </>\n          ) : null}\n        </ShopForm>\n      </div>\n      {defaultLocationsPage ? <PlanToBookWithinBudgetButton /> : null}\n    </div>\n  ) : null;\n};\n","export * from './places-search';\n","import { useRect } from '@dx-ui/utilities-use-rect';\nimport cx from 'classnames';\nimport * as React from 'react';\nimport { useTranslation } from 'next-i18next';\nimport { getPopupStyles } from '@dx-ui/osc-popup';\n\nexport type Tooltip = {\n  message: React.ReactNode;\n  /** Used to apply custom styles to tooltip's popup */\n  popupClassName?: string;\n} & React.HTMLAttributes<HTMLButtonElement>;\n\nexport type TooltipCause = 'escape' | 'focus' | 'initial' | 'mouse';\n\nexport const Tooltip: React.FC<React.PropsWithChildren<Tooltip>> = ({\n  children,\n  className,\n  message,\n  popupClassName,\n  ...rest\n}) => {\n  const { t } = useTranslation('osc-tooltip');\n  const id = React.useId();\n  const tipId = `tooltip-${id}`;\n  const [currentCause, setCurrentCause] = React.useState<TooltipCause>('initial');\n  const [visible, setVisible] = React.useState(false);\n\n  const buttonRef = React.useRef(null);\n  const popoverRef = React.useRef(null);\n  const popoverRect = useRect({ ref: popoverRef });\n  const targetRect = useRect({ ref: buttonRef });\n  const styles = getPopupStyles(targetRect, popoverRect);\n\n  const hide = React.useCallback(\n    (cause: TooltipCause) => {\n      if (cause === 'escape' || currentCause === cause) {\n        setVisible(false);\n        setCurrentCause('initial');\n      }\n    },\n    [currentCause]\n  );\n  const show = (cause: TooltipCause) => {\n    if (currentCause === 'focus') return;\n    setVisible(true);\n    setCurrentCause(cause);\n  };\n\n  React.useEffect(() => {\n    const onKeyDown = (e: KeyboardEvent) => {\n      if (visible && e.key === 'Escape') {\n        hide('escape');\n      }\n    };\n    window.addEventListener('keydown', onKeyDown);\n    return () => {\n      window.removeEventListener('keydown', onKeyDown);\n    };\n  }, [hide, visible]);\n\n  return (\n    <span className=\"relative\">\n      <button\n        type=\"button\"\n        className={className}\n        ref={buttonRef}\n        aria-describedby={tipId}\n        onBlur={() => hide('focus')}\n        onFocus={() => show('focus')}\n        onMouseOver={() => show('mouse')}\n        onMouseOut={() => hide('mouse')}\n        {...rest}\n      >\n        {children}\n      </button>\n      <span\n        id={tipId}\n        ref={popoverRef}\n        role=\"tooltip\"\n        aria-hidden={!visible}\n        className={cx(\n          'fixed z-50 mt-1 whitespace-nowrap rounded border border-solid border-border bg-bg p-2 shadow-lg',\n          popupClassName,\n          { block: visible, hidden: !visible }\n        )}\n        style={styles}\n        aria-label={t('label')}\n      >\n        {message}\n      </span>\n    </span>\n  );\n};\n\nexport default Tooltip;\n","export * from './lib/tooltip';\n","import { Tooltip } from '@dx-ui/osc-tooltip';\nimport { Stepper } from '@dx-ui/osc-stepper';\nimport { FormSelect } from '@dx-ui/osc-form';\nimport * as React from 'react';\nimport type { RegisterOptions } from 'react-hook-form';\nimport { useFormContext, useFieldArray } from 'react-hook-form';\nimport { useTranslation } from 'next-i18next';\nimport Icon from '@dx-ui/osc-icon';\nimport { logError } from '@dx-ui/framework-logger';\n\ntype RoomsRoom = {\n  adultAge?: number;\n  isAdultsOnly?: boolean;\n  /**\n   * if ageRange is provided, Age based pricing is in effect\n   * */\n  ageRange?: {\n    min: number;\n    max: number;\n  };\n  /**\n   * if ages are required to get the best rates, making `agesRequired` will show the age select elements for each child entered.\n   */\n  agesRequired?: boolean;\n  /**\n   * disables the add room button if number of rooms is greater than this value\n   */\n  maxRooms?: number;\n  /**\n   * the maximum number of collective occupants allowed per room\n   * be it adults or children with a min of one adult\n   */\n  maxOccupants?: number;\n  index: number;\n  onRemoveRoom: (val: number) => void;\n};\n\nconst RoomsRoom: React.FC<React.PropsWithChildren<RoomsRoom>> = ({\n  adultAge: adultAgeProp,\n  isAdultsOnly,\n  agesRequired,\n  ageRange,\n  index,\n  onRemoveRoom,\n  maxOccupants = 8,\n}) => {\n  const [t] = useTranslation('osc-rooms');\n  const { setValue, watch, control, trigger } = useFormContext();\n  const useAgeBasedPricing = Boolean(ageRange);\n  const adultsId = `rooms.${index}.adults` as const;\n  const childrenId = `rooms.${index}.children` as const;\n  const adultAge = adultAgeProp || ageRange?.max;\n  const adultAges = adultAge ? t('occupancy.adultAges', { adultAge }) : '';\n  const { fields, remove, append } = useFieldArray({\n    control,\n    name: childrenId,\n  });\n  const roomsValue = watch('rooms');\n  const numRooms = roomsValue?.length || 0;\n  const adults = watch(adultsId);\n  const children = watch(childrenId) || [];\n  const roomNum = index + 1;\n  const roomTestId = `rooms-room-${roomNum}`;\n\n  React.useEffect(() => {\n    const getChildAgesFieldsAndValidate = async () => {\n      if (fields.length > 0 && agesRequired) {\n        // get all the children age field names\n        const names = fields.map((field, i) => `${childrenId}.${i}.age` as const);\n        // validate immediately\n        await trigger(names);\n      }\n    };\n    getChildAgesFieldsAndValidate().catch((error) =>\n      logError('OSC_ROOMS', error, 'failed to validate children ages')\n    );\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [fields, agesRequired]);\n  return (\n    <div data-testid={roomTestId}>\n      <div className=\"sr-only\" aria-live=\"polite\">\n        <span>{`${numRooms > 1 ? `${t('occupancy.roomHas', { num: roomNum })} ` : ''} ${t(\n          'occupancy.adult',\n          {\n            count: adults,\n          }\n        )}, ${t('occupancy.child', { count: children.length })}`}</span>\n      </div>\n      <div className=\"flex items-center space-x-2\">\n        <div className=\"flex w-1/3 items-center\">\n          {numRooms > 1 && (\n            <button\n              data-testid={`${roomTestId}-remove`}\n              type=\"button\"\n              className=\"mr-2 appearance-none rounded-full stroke-primary hover:stroke-primary-alt hover:duration-100\"\n              onClick={() => onRemoveRoom(index)}\n            >\n              <span className=\"sr-only\">{t('occupancy.removeRoom', { num: roomNum })}</span>\n              <svg role=\"img\" aria-hidden viewBox=\"0 0 27 27\" className=\"size-6 stroke-primary\">\n                <g fill=\"none\" fillRule=\"evenodd\" transform=\"translate(-4.4 -4.4)\">\n                  <ellipse\n                    transform=\"rotate(45 17.836 17.836)\"\n                    cx=\"17.836\"\n                    cy=\"17.836\"\n                    rx=\"12.5\"\n                    ry=\"12.724\"\n                  />\n                  <path d=\"M13.585 13.572l8.515 8.515m-8.592.047l8.668-8.668\" />\n                </g>\n              </svg>\n            </button>\n          )}\n          <span>{t('occupancy.room', { num: roomNum })}</span>\n        </div>\n        <div className=\"w-1/3\">\n          <Stepper\n            onMinusClick={() => {\n              setValue(adultsId, adults - 1, { shouldDirty: true, shouldValidate: true });\n            }}\n            onPlusClick={() => {\n              setValue(adultsId, adults + 1, { shouldDirty: true, shouldValidate: true });\n            }}\n            min={1}\n            max={maxOccupants - children.length}\n            value={adults}\n            valueLabel={t('occupancy.adult', { count: adults })}\n            plusLabel={t('occupancy.addAdult', { num: roomNum, adultAges })}\n            minusLabel={t('occupancy.removeAdult', { num: roomNum, adultAges })}\n          />\n        </div>\n        <div className=\"w-1/3\">\n          <Stepper\n            onMinusClick={() => {\n              remove(fields.length - 1);\n            }}\n            onPlusClick={() => {\n              // NHCSEARCH-4849 - ShouldFocus false keeps focus on stepper button\n              append({ age: null }, { shouldFocus: false });\n            }}\n            min={0}\n            max={isAdultsOnly ? 0 : maxOccupants - adults}\n            value={children.length}\n            valueLabel={t('occupancy.child', { count: children.length })}\n            plusLabel={t('occupancy.addChild', { num: roomNum })}\n            minusLabel={t('occupancy.removeChild', { num: roomNum })}\n          />\n        </div>\n      </div>\n\n      {useAgeBasedPricing && children.length > 0 && (\n        <div className=\"pt-2\" data-testid=\"rooms-age-based\">\n          <h2 className=\"flex items-center space-x-2 pb-2 text-sm font-bold\">\n            <span>{t('occupancy.agesLabel')}</span>\n            <Tooltip message={t('occupancy.ageBasedHelp')} className=\"btn btn-lg btn-primary-text\">\n              <Icon name=\"info-circle\" variant=\"regular\" size=\"md\" />\n            </Tooltip>\n          </h2>\n          <div className=\"flex max-w-44 flex-col space-y-2 pl-4\">\n            {fields.map((field, i) => {\n              const fieldName = `${childrenId}.${i}.age` as const;\n              const ageId = i + 1;\n\n              const registerOptions: RegisterOptions = {\n                valueAsNumber: true,\n                onChange: async () => {\n                  await trigger(fieldName);\n                },\n              };\n              if (agesRequired) {\n                registerOptions.required = t('occupancy.ageBasedError');\n              }\n              return (\n                <FormSelect\n                  key={field.id}\n                  data-testid={`${roomTestId}-childage-${ageId}`}\n                  name={fieldName}\n                  labelClassName=\"label-inline !self-auto\"\n                  containerClassName=\"text-right\"\n                  label={t('occupancy.kidLabel', { num: ageId })}\n                  registerOptions={registerOptions}\n                >\n                  <option disabled value=\"\" />\n                  {Array.from({ length: ageRange!.max - ageRange!.min }).map((__, j) => {\n                    const value = j + ageRange!.min;\n                    return (\n                      <option key={value === 0 ? t('occupancy.underOne') : value} value={value}>\n                        {value === 0 ? t('occupancy.underOne') : value}\n                      </option>\n                    );\n                  })}\n                </FormSelect>\n              );\n            })}\n          </div>\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport { RoomsRoom };\nexport default RoomsRoom;\n","import * as React from 'react';\nimport { useFieldArray, useWatch } from 'react-hook-form';\nimport { useTranslation } from 'next-i18next';\nimport type { RoomsRoom as RoomsRoomType } from './rooms.room';\nimport { RoomsRoom } from './rooms.room';\nimport type { ShopFormRoom } from './types';\n\nexport type Rooms = Pick<\n  RoomsRoomType,\n  'ageRange' | 'agesRequired' | 'maxRooms' | 'maxOccupants' | 'isAdultsOnly' | 'adultAge'\n> & {\n  /**\n   * Required string for message value displayed when the max-occupancy of a room is reached.<br><br>\n   * Recommended values from 'osc-shop-form' resource bundle: <br>\n   * <code> const { t } = useTranslation('osc-rooms'); </code><br>\n   *  • base: <b>t('occupancy.occupancyLimitMessage') </b> <br>\n   * -returns: \"You've reached the maximum number of guests for a single room. Please add another room.\"<br>\n   *  • find nearby: <b>t('occupancy.findNearbyOccupancyLimitMessage') </b> <br>\n   * -returns: \"You've reached the maximum number of guests for a single room. Please add another room or adjust your search to find nearby hotels with larger room capacities.\"\n   * <br><br>\n   */\n  occupancyLimitMessage: React.ReactNode;\n};\n\nexport const newRoom = Object.freeze({ adults: 1, children: [] });\nexport const Rooms: React.FC<React.PropsWithChildren<Rooms>> = ({\n  adultAge: adultAgeProp,\n  agesRequired,\n  ageRange,\n  maxRooms = 9,\n  maxOccupants = 8,\n  occupancyLimitMessage,\n  isAdultsOnly,\n}) => {\n  const adultAge = adultAgeProp || ageRange?.max;\n  const [t] = useTranslation('osc-rooms');\n  const buttonRef = React.useRef<HTMLButtonElement>(null);\n  const { fields, append, remove } = useFieldArray({ name: 'rooms' });\n  const rooms: ShopFormRoom[] = useWatch({ name: 'rooms' });\n  const reachedMaxOccupants =\n    occupancyLimitMessage &&\n    rooms?.some((room) => room.adults + room.children.length === maxOccupants);\n  const canOnlyBookSingleRoom = maxRooms === 1;\n\n  const handleRemoveRoom = (val: number) => {\n    remove(val);\n    if (buttonRef.current) {\n      buttonRef.current.focus();\n    }\n  };\n\n  return (\n    <>\n      <div className=\"w-full\">\n        <div className=\"flex\" aria-hidden>\n          <span className=\"w-1/3 font-bold ltr:text-left rtl:text-right\">\n            {t('occupancy.roomHeader')}\n          </span>\n          <span className=\"w-1/3 text-center font-bold\">\n            {t('occupancy.adultHeader')}\n            {adultAge && <span className=\"pl-1 text-sm font-normal\">({adultAge}+)</span>}\n          </span>\n          <span className=\"w-1/3 text-center font-bold\">{t('occupancy.childHeader')}</span>\n        </div>\n      </div>\n      <div data-osc-product=\"rooms\" className=\"w-full space-y-4 py-3\" data-testid=\"rooms\">\n        {fields.map((field, index) => (\n          <RoomsRoom\n            key={field.id}\n            index={index}\n            ageRange={ageRange}\n            onRemoveRoom={handleRemoveRoom}\n            agesRequired={agesRequired}\n            maxOccupants={maxOccupants}\n            isAdultsOnly={isAdultsOnly}\n            adultAge={adultAge}\n          />\n        ))}\n      </div>\n      {isAdultsOnly && adultAge ? (\n        <p className=\"pb-3 text-xs\">{t('occupancy.adultsOnlyNote', { adultAge })}</p>\n      ) : null}\n      {reachedMaxOccupants ? (\n        <div className=\"flex w-full justify-start pb-3\">\n          <p className=\"break-words text-xs\" aria-live=\"assertive\" role=\"alert\">\n            {occupancyLimitMessage}\n          </p>\n        </div>\n      ) : null}\n      <div className=\"space-y-2 border-t border-solid border-border py-2\">\n        {canOnlyBookSingleRoom ? (\n          <p className=\"text-xs\">{t('occupancy.singleRoomOnly')}</p>\n        ) : (\n          <button\n            type=\"button\"\n            data-testid=\"rooms-add-room\"\n            ref={buttonRef}\n            className=\"flex appearance-none items-center stroke-primary font-bold hover:stroke-primary-alt hover:duration-100 disabled:stroke-text-disabled disabled:text-text-disabled\"\n            onClick={() => {\n              append({ ...newRoom });\n            }}\n            disabled={fields.length >= maxRooms}\n          >\n            <svg role=\"img\" aria-hidden viewBox=\"0 0 27 27\" className=\"size-6 ltr:mr-2 rtl:ml-2\">\n              <g fill=\"none\" fillRule=\"evenodd\" transform=\"translate(1 .68)\">\n                <ellipse cx=\"12.5\" cy=\"12.724\" rx=\"12.5\" ry=\"12.724\" />\n                <path strokeLinecap=\"square\" d=\"M6.5 12.724h12.042M12.5 18.832V6.574\" />\n              </g>\n            </svg>\n            {t('occupancy.addRoom')}\n          </button>\n        )}\n      </div>\n    </>\n  );\n};\n\nexport default Rooms;\n","import * as React from 'react';\nimport { type FieldValues, FormProvider, useForm } from 'react-hook-form';\nimport type { Dialog } from '@dx-ui/osc-dialog-v2';\nimport { ActionDialog, DialogTitle } from '@dx-ui/osc-dialog-v2';\nimport type { FormDataStructure, FormProps } from '@dx-ui/osc-form';\nimport { useTranslation } from 'next-i18next';\nimport type { Rooms as RoomsType } from './rooms';\nimport { Rooms } from './rooms';\nimport type { ShopFormRoom } from './types';\n\ntype RoomsModal = Pick<FormProps, 'useFormProps'> &\n  RoomsType &\n  React.ComponentProps<typeof Dialog> & { onSubmit: (data: FieldValues) => void };\n\nconst RoomsModal: React.FC<React.PropsWithChildren<RoomsModal>> = ({\n  ageRange,\n  agesRequired,\n  useFormProps,\n  maxRooms,\n  occupancyLimitMessage,\n  onSubmit,\n  isOpen,\n}) => {\n  const [t] = useTranslation('osc-rooms');\n  const memoizedFormProps = React.useMemo(() => useFormProps, [useFormProps]);\n  const confirmButtonRef = React.useRef<HTMLButtonElement>(null);\n\n  const methods = useForm<FormDataStructure>({\n    mode: 'onTouched',\n    criteriaMode: 'all',\n    ...memoizedFormProps,\n  });\n  const { setValue, clearErrors, getValues } = methods;\n  const rooms: ShopFormRoom[] = getValues().rooms;\n  const isAnyRoomHaveChildrenOccupants = rooms?.some((room) => room?.children?.length);\n\n  const removeKids = () => {\n    clearErrors();\n    rooms?.forEach((_room, index) => {\n      setValue(`rooms.${index}.children`, []);\n    });\n    confirmButtonRef?.current?.focus();\n  };\n\n  return (\n    <FormProvider {...methods}>\n      <ActionDialog\n        isOpen={isOpen}\n        size=\"xl\"\n        hasChildrenWithTitle\n        data-testid=\"rooms-modal\"\n        onCancel={removeKids}\n        onConfirm={() => onSubmit?.(getValues())}\n        buttonOptions={{\n          cancel: {\n            label: t('occupancy.ageBasedRemove'),\n            disabled: !isAnyRoomHaveChildrenOccupants,\n          },\n          confirm: { ref: confirmButtonRef },\n        }}\n      >\n        <div className=\"mb-6 mt-3 text-center\">\n          <DialogTitle className=\"text-lg font-bold\">{t('occupancy.ageBasedTitle')}</DialogTitle>\n          <p>{t('occupancy.ageBasedDescription')}</p>\n        </div>\n\n        <Rooms\n          ageRange={ageRange}\n          maxRooms={maxRooms}\n          agesRequired={agesRequired}\n          occupancyLimitMessage={occupancyLimitMessage}\n        />\n      </ActionDialog>\n    </FormProvider>\n  );\n};\n\nexport { RoomsModal };\nexport default RoomsModal;\n","export * from './lib/rooms';\nexport * from './lib/rooms.modal';\nexport * from './lib/rooms.room';\nexport * from './lib/types';\n","import { useEffect, useState } from 'react';\n\nconst getHasUserModifiedFontDefaults = (maxSize: number) => {\n  const { fontSize, wordSpacing, letterSpacing } = getComputedStyle(document.documentElement);\n  const hasModifiedLetterSpacing = letterSpacing !== 'normal';\n  const hasModifiedFontSize = parseInt(fontSize.split('px')[0] || '') > maxSize;\n  const hasModifiedWordSpacing =\n    wordSpacing !== 'normal' && parseInt(wordSpacing.split('px')[0] || '') > 0;\n  if (hasModifiedFontSize || hasModifiedWordSpacing || hasModifiedLetterSpacing) {\n    return true;\n  }\n  return false;\n};\n\n/* Default browser font size is 16px, function defaults to a max of 20px  */\nexport const useHasUserModifiedFontDefaults = (maxSize = 20) => {\n  const [hasUserModifiedFonts, setHasUserModifiedFonts] = useState(false);\n  useEffect(() => {\n    setHasUserModifiedFonts(getHasUserModifiedFontDefaults(maxSize));\n  }, [maxSize]);\n  return hasUserModifiedFonts;\n};\n","import { useHasUserModifiedFontDefaults } from './use-has-user-modified-font-defaults';\nexport const getIsReducedMotion = () =>\n  typeof window !== 'undefined' && typeof window.matchMedia === 'function'\n    ? window.matchMedia('(prefers-reduced-motion: reduce)').matches\n    : true;\n\nexport const getKeyDownNavigation =\n  <T extends HTMLElement[]>({\n    elements,\n    initiatingRef,\n    onPreviousFocus,\n    onNextFocus,\n  }: {\n    elements: T;\n    initiatingRef?: React.MutableRefObject<HTMLElement | null>;\n    onPreviousFocus?: (focusElement: T[number] | null) => void;\n    onNextFocus?: (focusElement: T[number] | null) => void;\n  }) =>\n  (e: KeyboardEvent | React.KeyboardEvent<HTMLElement>) => {\n    const focusPrevious = (el: EventTarget | null) => {\n      const currentIndex = elements.findIndex((elements) => elements === el);\n      if (currentIndex === 0) {\n        initiatingRef?.current?.focus();\n        return;\n      }\n      const element = elements.at(currentIndex - 1) || null;\n      element?.focus();\n      onPreviousFocus?.(element);\n    };\n    const focusNext = (el: EventTarget | null) => {\n      const currentIndex = elements.findIndex((elements) => elements === el);\n      const element = elements.at(currentIndex + 1) || null;\n      element?.focus();\n      onNextFocus?.(element);\n    };\n    const isArrowUp = e.key === 'ArrowUp';\n    const isArrowDown = e.key === 'ArrowDown';\n    const isArrowLeft = e.key === 'ArrowLeft';\n    const isArrowRight = e.key === 'ArrowRight';\n    if (isArrowUp || isArrowLeft) {\n      e.preventDefault();\n      focusPrevious(e.target);\n    }\n    if (isArrowDown || isArrowRight) {\n      e.preventDefault();\n      focusNext(e.target);\n    }\n  };\n\nexport { useHasUserModifiedFontDefaults };\n","export * from './lib';\n","import cx from 'classnames';\nimport type * as React from 'react';\nimport { useTranslation } from 'next-i18next';\n\nexport type StepperProps = {\n  /**\n   * when used in a form, this is the id of the hidden input. (must also include the `inputName` prop)\n   */\n  inputId?: HTMLInputElement['id'];\n  /**\n   * when used in a form, this will be the key for the form results. (must also include the `inputId` prop)\n   */\n  inputName?: HTMLInputElement['name'];\n  /**\n   * the current state of the Stepper\n   */\n  value?: number;\n  /**\n   * upper limit of the value\n   */\n  max?: number;\n  /**\n   * lower limit of the value\n   */\n  min?: number;\n  onMinusClick?: React.DOMAttributes<HTMLButtonElement>['onClick'];\n  onPlusClick?: React.DOMAttributes<HTMLButtonElement>['onClick'];\n  /**\n   * used for a11y to give a label to the value\n   */\n  valueLabel?: string;\n  /**\n   * used for a11y to label the minus button\n   */\n  minusLabel?: string;\n  minusTestId?: string;\n  /**\n   * used for a11y to label the plus button\n   */\n  plusLabel?: string;\n  plusTestId?: string;\n  /**\n   * Allows control of plus and minus icon colors\n   */\n  iconColor?: string;\n  iconColorDisabled?: string;\n};\n\ntype Stepper = StepperProps & React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Used to increment/decrement a value\n *\n * Use `onPlusClick` and `onMinusClick` to change value one by one.\n */\nexport const Stepper: React.FC<React.PropsWithChildren<Stepper>> = ({\n  className,\n  inputId,\n  inputName,\n  max,\n  min,\n  onMinusClick,\n  onPlusClick,\n  value = 0,\n  valueLabel = '',\n  minusLabel,\n  minusTestId,\n  plusLabel,\n  plusTestId,\n  iconColor,\n  iconColorDisabled,\n  ...rest\n}) => {\n  const minusDisabled = value === min;\n  const plusDisabled = value === max;\n  const { t } = useTranslation('osc-stepper');\n  return (\n    <div className={cx('flex items-center justify-center', className)} {...rest}>\n      {!!inputId && !!inputName && (\n        <input id={inputId} type=\"hidden\" name={inputName} value={value} />\n      )}\n      <button\n        type=\"button\"\n        className=\"btn btn-lg btn-primary-text size-6 rounded-full\"\n        onClick={onMinusClick}\n        disabled={minusDisabled}\n        aria-label={minusLabel || t('minusLabel')}\n        data-testid={minusTestId}\n      >\n        <span className=\"sr-only\">{minusLabel || t('minusLabel')}</span>\n        <svg\n          role=\"img\"\n          aria-hidden\n          viewBox=\"0 0 27 27\"\n          className={cx('size-6', {\n            'stroke-text-disabled': minusDisabled,\n            'stroke-primary': !minusDisabled,\n          })}\n          style={{ stroke: minusDisabled ? iconColorDisabled : iconColor }}\n        >\n          <g fill=\"none\" fillRule=\"evenodd\" transform=\"translate(1 .68)\">\n            <ellipse cx=\"12.5\" cy=\"12.724\" rx=\"12.5\" ry=\"12.724\" />\n            <path strokeLinecap=\"square\" d=\"M6.5 12.724h12.042M12.5 18.574\" />\n          </g>\n        </svg>\n      </button>\n      <span className=\"block w-10 px-1 text-center tabular-nums\">\n        <span className=\"sr-only\" aria-live=\"polite\">\n          {valueLabel || value}\n        </span>\n        <span aria-hidden>{value}</span>\n      </span>\n      <button\n        type=\"button\"\n        className=\"btn btn-lg btn-primary-text size-6 rounded-full\"\n        onClick={onPlusClick}\n        disabled={plusDisabled}\n        aria-label={plusLabel || t('plusLabel')}\n        data-testid={plusTestId}\n      >\n        <span className=\"sr-only\">{plusLabel || t('plusLabel')}</span>\n        <svg\n          role=\"img\"\n          aria-hidden\n          viewBox=\"0 0 27 27\"\n          className={cx('size-6', {\n            'stroke-text-disabled': plusDisabled,\n            'stroke-primary': !plusDisabled,\n          })}\n          style={{ stroke: plusDisabled ? iconColorDisabled : iconColor }}\n        >\n          <g fill=\"none\" fillRule=\"evenodd\" transform=\"translate(1 .68)\">\n            <ellipse cx=\"12.5\" cy=\"12.724\" rx=\"12.5\" ry=\"12.724\" />\n            <path strokeLinecap=\"square\" d=\"M6.5 12.724h12.042M12.5 18.832V6.574\" />\n          </g>\n        </svg>\n      </button>\n    </div>\n  );\n};\n\nexport default Stepper;\n","export * from './stepper';\n","export * from './lib';\n"],"names":["removePrimarySlug","url","urlObj","URL","filteredPath","pathname","split","filter","OHW_SEARCH_PRIMARYSLUGS","includes","primarySlug","join","toString","error","Error","logError","hasAuthenticatedParam","hasParam","AUTHENTICATED_ONLY_PARAMS","forEach","param","hasPrimarySlug","hasSlug","originalUrl","searchParams","delete","RTL_LANGUAGES","getLanguageDirection","lang","toLowerCase","isRtl","getIsFeatureToggleEnabled","featureToggleData","name","featureToggles","find","toggle","enabled","LoginFormEventType","DIGITALDATA","LOGIN","CLOSE","HEIGHT","frameSrc","options","onClose","onLoginAttempt","onLogin","title","onLoginError","rest","readyCount","React","iframeRef","noOptions","Object","keys","length","frameHeight","setFrameHeight","handleMessage","data","handler","type","height","status","event","current","JSON","stringify","window","digitalData","sendMessageToIframe","contentWindow","origin","startsWith","location","postMessage","isBrowser","addEventListener","removeEventListener","div","className","iframe","onLoad","ref","src","width","displayName","AccountIcon","forwardRef","svg","role","aria-hidden","viewBox","g","fill","path","d","Login","buttonName","buttonClassName","hideIcon","onOpen","t","useTranslation","showDialog","setShowDialog","close","handleLogin","response","Dialog","isOpen","onDismiss","size","dialogTrigger","button","cx","onClick","open","sendReward","span","LoginIFrame","data-e2e","useInitializeConductrics","authLoading","guestInfo","isAuthenticated","arrivalDate","isReady","isTwentyPlusResults","safeQueryParams","queryParameters","router","useWrappedRouter","conductricsInitPath","useRef","initConductrics","useInitConductrics","isSearch","isSearchZero","isHotelsNearMe","isDefaultLocations","isDreams","isResorts","getPageType","asPath","routerPath","useEffect","traits","inputs","differenceInCalendarDays","parseISO","Date","push","hhonors","summary","tier","isTMTPTeamMember","getGuestInfo","DialogTitle","DialogBase","ariaLabel","children","closeButtonClassName","dialogClassName","dialogOverlayClassName","dialogTitleClassName","bottomContent","hasChildrenWithTitle","stickyHeader","contentDataAttribute","forwardedRef","innerRef","dialogRef","asChild","aria-describedby","undefined","onInteractOutside","onEscapeKeyDown","data-osc-product","CloseButton","aria-label","ControlClose","label","props","DialogAlert","cancel","confirm","onCancel","onConfirm","stackedButtons","cancelText","confirmText","handleConfirm","AlertDialog","preventDefault","handleCancel","Button","adaDescription","ActionButtons","buttonOptions","onReset","shouldStackButtons","reset","resetBtnEnabled","isEnabled","buttons","map","key","data-testid","aria-live","ActionDialog","dialogProps","GetSpeedBumpFeatureConfigsDocument","operationName","operationString","originalOpName","TRANSLATE_RULES_CONFIG_NAME","ONELINK_CONFIG_NAME","names","useTranslationsConfig","useGetSpeedBumpFeatureConfigsQuery","staleTime","CDN_STALE_TIME","useQuery","queryKey","translateRules","featureConfigs","config","oneLinkConfig","getSpeedBumpFeatureConfig","queryClient","fetchQuery","useSpeedbump","language","appName","bypassOneLink","href","oneLinkProps","getOneLinkProps","translateRuleEngine","RuleEngine","targetLanguage","DEFAULT_LANGUAGE","isVisible","setIsVisible","eventTarget","setEventTarget","onShow","target","e","currentTarget","parentElement","transformUrl","urlConfig","getUrlConfig","shouldShowSpeedbump","isOneLink","speedbump","stopPropagation","onHide","onContinue","enUri","replace","Speedbump","isShowing","onCloseProp","onContinueProp","speedbumpOptions","message","confirmButtonLabel","cancelButtonLabel","titleOptions","FocusLock","as","disabled","_satellite","set","track","handleDismiss","handleAllArray","allArray","hasUrl","some","item","fact","Array","isArray","value","languageObj","any","flatMap","condition","all","MetaData","brandCode","seoSchema","pageTitle","description","configRules","isGlobalBounds","locationPageMatchType","featureConfigData","useFeatureConfigsQuery","ruleUiTranslateSearchData","searchLanguages","getSearchLanguagesFromRuleUiTranslateConfig","conditions","baseUrl","env","OHW_BASE_URL","faviconSrc","HILTON_ASSETS_URI","ogImageSrc","cleanPath","canonicalHref","locale","isLocationsPage","Head","script","dangerouslySetInnerHTML","__html","link","rel","meta","content","getLocationCategory","property","sizes","media","hrefLang","resetDefaults","amenities","brands","saleFilter","showAvailableHotelsOnly","priceFilter","tripAdvisorRating","FiltersModal","applyBtnAccessibleLabel","applyBtnLabel","contentClassName","defaultFilters","onCloseModal","onSubmit","isModalOpen","resetBtnLabel","initialValue","setInitialValue","cloneDeep","methods","useForm","defaultValues","mode","getValues","dismissFilters","keepDefaultValues","FormProvider","resetFilters","getActiveFilterCount","values","reduce","sum","currFilterGroup","Filters","buttonLabel","filtersModalTitle","modalContentClassName","onFiltersClick","showFilterIcon","setIsOpen","activeFilterCount","handleSubmit","handleCloseFilters","handleOpenFilters","Icon","count","AmenityFilters","amenityCategories","id","amenityIds","idx","amenity","h3","amenityId","amenityName","hint","FormInput","AmenityIcons","labelClassName","InfoPopup","BrandFilters","code","Image","alt","ShowAvailableHotelsOnlyFilter","isDisabled","GET_TRIP_ADVISOR_RATINGS_INFO","altOrLabel","onlyRatingImgSrc","logoWithRatingImgSrc","rating","tripAdvisorRatingsInfo","fieldset","index","basePrice","convertedPrice","transformPricingFilterData","isCurrenciesLoading","priceListOptions","toCurrency","fromCurrency","convertedBasePrice","currencyCode","formatAndConvertPrice","Number","parseInt","priceData","getFormattedPrice","price","currency","formattedPrice","toLocaleString","displayPrice","currencySymbolFormat","formatPoints","points","Intl","NumberFormat","format","FilterMaxPriceRadioButtons","hidePriceRadioButtons","isPointsFilter","priceList","currenciesMap","useCurrencyConversion","useRouter","currencyDetails","get","prices","NO_MAX_PILL","ul","i","isFinalPrice","li","getLabelText","pointsPriceLabelText","from","_","isEnd","hidePriceFilter","isLoading","priceConsiderationMessage","isSaleFilter","showSaleFilter","subHeading","setValue","useFormContext","PriceFilterSkeleton","containerClassName","TabsContext","createContext","activeIndex","useTabs","useContext","sanitizeId","TabButton","activeClassName","inactiveClassName","handleOnClick","active","addRef","onTabKeyDown","onTabSelect","safeId","isActive","aria-controls","aria-selected","tabIndex","handleOnTabClick","onKeyDown","TabListButton","TabList","TabListScrollable","leftArrowWrapperClassName","rightArrowWrapperClassName","arrayChildren","toArray","useWindowSize","isRTL","tablistRef","useForkedRef","isBackwardArrowVisible","setBackwardArrowVisible","isForwardArrowVisible","setForwardArrowVisible","focusedTabId","setFocusedTabId","useResizeObserver","box","onResize","focusedTab","document","getElementById","scrollLeft","distanceFromButtonToBeginningOfTabListDiv","offsetLeft","buttonWidth","offsetWidth","tablistWidth","adjustScrollPosition","updateArrowVisibility","widthDiff","scrollWidth","tabListWidth","rect","showScrollBackwardArrow","tabListRect","useRect","onTabListScroll","threeItems","fourItems","getScrollMultiplier","BREAKPOINTS","scrollForward","scrollBackward","leftPaddingOfScrollableDiv","paddingLeft","parseFloat","getComputedStyle","documentElement","fontSize","scrollToFocusedItem","lessOrEqual5","lessOrEqual2","onScroll","aria-labelledby","hidden","leftArrowhandler","child","onFocus","rightArrowHandler","TabPanel","TabPanels","setCount","Tabs","changeWithArrow","useUpDownArrows","defaultActive","onTabChange","setActive","useState","setActiveIndex","refs","changeActiveTab","findIndex","nextTabIndex","currentIndex","previousTabIndex","isModifiedKeyStroke","Boolean","shiftKey","altKey","ctrlKey","metaKey","Provider","tabRef","getAttribute","focus","updateFilters","activeFiltersState","newActiveFilterState","defaultActiveFiltersState","amenityFilters","amenityIndex","indexOf","splice","attributeFilters","attributeIndex","showAvailableHotels","ratingsFilter","brandFilters","brandIndex","getFiltersDataForAnalytics","initalTAValue","selectedFiltersList","concat","selectedFilters","priceSliderValue","selectedTAFilter","isPriceValid","isPriceRangeValid","maxPriceLimit","PRICE_SILDER_MAX","getValidFilters","filters","getTARatingValue","initializeActiveFiltersState","category","sessionFiltersState","datesFlex","HotelAttributeIds","sale","priceFilterState","showAvailableHotelsState","replaceNonDigits","val","selectedCurrency","String","priceIndex","FormErrorIcon","circle","cy","r","transform","stroke","strokeLinecap","strokeWidth","FormError","messages","types","v","hasError","Form","errorMessage","useFormProps","criteriaMode","hasErrorBanner","method","memoizedFormProps","formState","errors","isSubmitted","hasErrors","h2","form","noValidate","onFormSubmit","FormHelpMessage","loading","Spinner","p","FormLabelHelper","required","optional","requiredText","optionalText","text","FormLabel","registerOptions","helpMessage","errorId","helperId","register","fieldError","inputClassName","labelClass","input","aria-invalid","FormSelect","select","multiple","Caption","caption","captionLink","captionLinkTarget","align","metricsOnClick","captionClasses","figcaption","a","TransactionComponent","dynamic","ssr","TransactionViewWrapper","viewTxns","delay","showSpinner","setShowSpinner","timer","setTimeout","clearTimeout","CalendarDay","inRange","isToday","selected","highlighted","FORMAT","CalendarMonth","day","endDay","maxDays","allowPrevious","month","passedMonth","onDayChange","onFocusedDayChange","isVisibleMonth","dayLabel","today","highlightedDates","passedHighlightedDates","enabledDates","passedEnabledDates","startOfMonth","dateToString","isDate","parsedDate","date","weeks","getDaysSplitByWeeks","week","useDaysOfWeek","formattedDate","useDateFormat","monthName","yearText","isVietnamese","header","isKanji","year","numeric","monthId","table","thead","tr","th","scope","weekday","tbody","w","isSameDay","tab0","isFirstDayOfMonth","isBefore","startOfDay","isAfter","addDays","isWithinInterval","start","end","selectDay","td","isSameMonth","getTime","flag","subDays","startOfWeek","lastDayOfWeek","evt","clientX","clientY","toLocaleDateString","INPUT_FORMAT","Calendar","allowSameDay","onEndDayChange","instructions","formId","dayId","endDayId","MonthDateSelectorComponent","month0Ref","month1Ref","focusedDay","setFocusedDay","previousMonthRef","nextMonthRef","setMonth","nextDay","prevDisabled","selectedDateRef","onChangeDay","getDayLabel","dateStyle","onMonthChange","newD","monthNumber","monthInFocus","addMonths","offsetParent","subMonths","element","querySelector","selectedCalendarDate","onMonthUpdate","ControlBack","ControlNext","ArrivalDateSpy","formArrivalDate","dates","isEqual","getMonthRangeBetweenDates","startDate","endDate","formattedStartDate","toISOString","formattedEndDate","interval","eachMonthOfInterval","getMinAndMaxArrivalDate","minArrivalDate","maxArrivalDate","addYears","SearchMonthDateSelector","isLargeScreen","useMediaQuery","monthTabRefs","formattedMinArrivalDate","focussedMonthTab","setFocussedMonthTab","userSelectedDate","setUserSelectedDate","tabAutoFocus","setTabAutoFocus","isFirstMonthSelected","setFirstMonthSelected","monthsRange","onKeyUp","currentSelectionDateMonth","prevSelectionDateMonth","monthsData","useMemo","isSelected","monthYear","monthStartDate","unabbreviatedMonthYear","sendConductricsRewards","transformTrackingId","el","scrollIntoView","inline","behavior","block","enableMonthTabs","setEnableMonthTabs","isMVTVariant","b","isLoaded","useGetMVTSelections","agentId","MONTH_TABS_IN_DATES_MODAL","isProvisional","isMonthTabsMVT","setEnableMonthTabsMVT","monthDateSelectorProp","GetLanguageSelectorOneLinkConfigDocument","GetLanguageSelectorHotelDataDocument","LANGUAGE_CODE_NAMES","ar","bg","cs","da","de","en","es","fi","fr","it","ja","ko","nl","no","pl","pt","ro","ru","sv","vi","filterLanguagesWithLabel","languages","logWarning","getI18nSafeLangCode","safeLangCode","makeLanguageUrl","newLocale","removeUrlParams","languageUrl","RegExp","sortRtlFirst","LanguageSelector","ctyhocn","labelOptions","popupOptions","wrapperClassName","urlOverrides","theme","onLanguageSelection","selectedLanguage","setSelectedLanguage","buttonHover","setButtonHover","popupButtonRef","linksContainerRef","allLanguages","sortedFullSiteLanguages","sortedResOnlyLanguages","useLanguageSelectorLanguages","variables","featureConfigsData","isFetching","featureConfigsLoading","useGetLanguageSelectorOneLinkConfigQuery","hotelDataLoading","useGetLanguageSelectorHotelDataQuery","toUpperCase","isClient","useIsClient","oneLinkLanguagesConfig","fc","oneLinkLanguages","appWhitelist","whitelist","languagesObj","languagesToExclude","entries","appsArray","supportedLanguages","ruleEngine","supportsRuleEngineConfig","run","cmsLanguages","hotelData","hotel","localization","languageSupport","acc","cmsFullSiteLanguages","siteUrl","cmsResOnlyLanguages","bookingUrl","ENOverride","fullSite","fullSiteLanguages","opensNewTab","override","resOnlyLanguages","resOnly","supportedFullSiteLanguages","netNewFullSiteLanguages","supportedResOnlyLanguages","netNewResOnlyLanguages","sort","localeCompare","getSafeLanguage","getSelectedLanguage","focusFirstLink","handleLinkKeyDown","getKeyDownNavigation","elements","querySelectorAll","initiatingRef","trackLinkClick","console","warn","classnames","Popup","PopupContextState","style","styles","PopupButton","onArrowDownWhenOpen","hoverStyles","onMouseEnter","onMouseLeave","DownArrowIcon","PopupContent","popupStyles","maxHeight","overflowY","includeTitles","ListItem","linkProps","isNewWindow","bdi","Link","usePopup","context","version","fillRule","polyline","DrawerPanel","alignment","appWrapperId","interactiveElementWrapperId","panelProps","returnFocus","isRightPanelVisible","setIsRightPanelVisible","body","overflow","nonInteractiveElems","nonInteractiveElement","setAttribute","drawerWrapper","els","navParentElement","removeAttribute","nonInteractiveElements","onAnimationEnd","getIsReducedMotion","sendInteractionReward","trackNavClickBasedOnLabel","dropdownLabel","trackNavClick","str","replaceLang","stringValue","getNHCBP5758MVTVariant","mvts","variant","isDefaultVariant","isGlowVariant","isSpeechBubble","Logo","brand","altText","img","heading","Wrapper","NavItem","listItemProps","isDark","spacedChild","NavItemVisual","icon","indicator","hasRotatedIndicator","section","wrapper","NavItemWithLink","namedIcon","isWide","experimentationConfiguration","underline","data-conductrics-goal","goal","data-conductrics-value","NavItemWithModal","buttonIcon","rotateOnOpen","left","NavItemWithLinkGlow","NavigationPopupContents","subMenu","MenuList","subMenuLabel","MenuListItem","anchorClassName","UserPopupContents","user","userLinks","shouldOpenAccountLinksInNewWindow","shouldSuppressHonorsAccountLinks","onSignOut","formattedHonorsPointsTotal","getLocaleFormattedNumber","honorsPoints","username","honorsTier","honorsPointsTotal","hhonorsNumber","accountLink","MegaUserLink","honorsActivityLink","honorsPointsLink","honorsProfileLink","goHiltonLink","friendsAndFamilyLink","hgvMaxLink","smbMemberLink","listProps","getDisplayedFocusableElements","display","visibility","offsetHeight","SpeechBubble","closeSpeechBubble","showSpeechBubble","contentStyles","containerRef","onInlineButtonClick","onSpeechBubbleButtonClick","onKeyDownInlineButton","displayedFocusableElements","nextIndex","prototype","call","activeElement","focusGuards","remove","parentNode","observer","MutationObserver","mutation","mutationsList","addedNodes","node","nodeType","hasAttribute","observe","childList","subtree","disconnect","Popover","container","hideWhenDetached","onOpenAutoFocus","onKeyDownCloseButton","previousIndex","NavItemWithSpeechBubble","onDialogOpen","setShowSpeechBubble","speechBubbleContainer","setSpeechBubbleContainer","buttonRef","onSignInClick","setRef","UserNav","loginOptions","onSignInAttempt","languageSelectorOptions","shouldSuppressFindStay","shouldSuppressJoinAndSignIn","SignUpComponent","defaultOptions","signInLink","userButtonLinkRef","variant1","variant2","variant3","useFindStayTest","selection","useConductricsSelection","Status","OK","choice","nav","findStayLink","showNewWindowIcon","NavItemWithPopup","signUpLink","loggedInButtonRef","signUpComponent","NavItemWithModalAndGlow","MainNav","mainNavLinks","MegaMenu","isFluid","suppressLogo","headingLevelProps","DrawerList","menuItems","nextItem","setNextItem","nextItemIndex","setNextItemIndex","selectedItem","setSelectedItem","selectedItemIndex","setSelectedItemIndex","backButtonRef","isFadingOut","setIsFadingOut","lastSelectedButton","focusOnBack","itemSelected","menuItem","goBack","aria-expanded","useAuth","navLinks","getBaseNavLinksFromEnv","signInUrl","signUpUrl","DEFAULT_OCODE","environmentBaseUrl","isB2BMember","isHGVMax","isOwnerHGVNew","isOwner","isTeamMember","isOwnerHGV","isTMTPNonTeamMember","isTeamMemberSpouse","isFamilyAndFriends","isLongTenure10","isLongTenure20","wrapperId","isMenuOpen","setIsMenuOpen","isAccountOpen","setIsAccountOpen","userLoggedInButtonRef","activeUserLinks","useActiveUserLinks","closeMenus","handleKeyDown","addEscapeKeyListener","removeEscapeKeyListener","accountPressed","joinButtonClasses","menuPressed","HeaderLogoLink","visible","invisible","closeMainMenu","AccountSection","closeAccount","AccountUserLink","STATUS_ROLE_MAPPER","freeze","success","normal","BannerNotification","customIcon","aria-atomic","Countries_AddressOptionsDocument","ADDRESSLINE1","ADDRESSLINE2","CITY","COUNTRY","EMAIL","FAMILYNAME","GIVENNAME","NEWPASSWORD","POSTALCODE","STATE","TEL","ENABLE_SHORTEN_ENROLLMENT","AutoComplete","Modes","Add","Edit","AddressFields","groupName","componentState","setLoadingGeocode","setError","clearErrors","watch","touchedFields","getFieldState","isZipInvalid","setIsZipInvalid","enableShortenEnrollmentFlowToggle","useShortenEnrollmentToggle","useFeatureTogglesQuery","FeatureTogglesDocument","shouldHideCityAndStateFields","getFieldKey","useCallback","field","isPostalCodeTouched","isTouched","zipCode","city","state","addressFieldData","useCountries_AddressOptionsQuery","states","countries","enrollmentConfig","enableShortenEnrollmentFlow","isShortenedEnrollmentEnabled","geoLocationData","useGeocodeQuery","postalCode","test","GeocodeDocument","geocode","match","address","parse","graphQLErrors","fields","addressOptions","autoComplete","validate","option","getAutoComplete","maxLength","FormInputPassword","passwordCriteriaClassName","useId","touchedField","passRequirements","mustBe","containUpper","containLower","containOneNumber","hasRequirementError","strokeLinejoin","classname","defaultValue","personalInformationPage","addDefaultOption","phoneCountryError","helperPhoneId","phoneNumberFieldError","phoneCountryFieldError","getOptions","callingCode","pattern","phone","Paragraph","WrappedLink","CustomerExternalParagraph","MarketingContent","selectedCountry","setMarketingOptinsSelected","marketingOptin","rules","marketingOptinRules","optIns","optIn","autoOptIn","termsAndConditions","termsAndConditionsJoin","handleMarketingOptinChange","isChecked","checked","prevSelected","customerTextExternal","onChange","Markdown","forceBlock","overrides","component","_id","isUSA","isChina","isMarketingOffersModalOpen","setIsMarketingOffersModalOpen","marketingOptIn","marketingOptInForHGV","Trans","i18nKey","sendErrorAnalytics","metrics","formErrors","formErrorsMessages","setPageInfo","trackEvent","setFormErrors","setFormErrorMessages","setProperty","GRAPH_ERRORS","CONFLICT_WITH_RESOURCE","SUCCESSFULL_REGISRATION_DELAYED_CONFIRMATION","EmailSubscription","PERSONALIZED_OFFERS","HILTON_MARKETING","GRAND_VACATIONS","HHONORS_EMAIL","USMarketingOptIn","hhonorsSubscriptions","optOuts","FORM_ERRORS_TO_FILTER","oCodes","JoinForm","isMarketabilityCCSEnabled","oCode","onSuccess","headline","tForm","bannerContent","setBannerContent","marketingOptinsSelected","defaultCountryCodeData","useLanguages_DefaultCountryCodeQuery","Languages_DefaultCountryCodeDocument","country","defaultCountryCode","phoneCountry","isJapanesePage","marketingOffersValue","hasPasswordFields","loadingGeocode","isLoadingCountries","useBrand_CountriesQuery","Brand_CountriesDocument","getMarketing","getCCSMarketing","countryFilter","prohibited","createGuest","useMutation","Collator","compare","marketingOptIns","updateCreateGuestMutation","email","password","marketingGrandVacations","marketingOffers","marketingConsent","marketgOptinsAutoEnrolled","optin","subscriptionCodes","codes","addressType","enrollSourceCode","phoneNumber","phoneType","preferredLanguage","privacyRequested","subscriptions","Promise","mutate","CreateGuestDocument","errorCode","notifications","hHonorsNumber","encodedName","btoa","encodeURIComponent","firstName","encodedNum","encodedEmail","emailAddress","encodedEnroll","sessionStorage","setItem","onError","generateError","getErrors","innerKey","innerValue","page","handleInvalidForm","pageInfo","unset","formData","then","res","catch","fieldErrors","minLength","FormInputPhone","shouldMatch","MarketingContentCCS","isPending","JoinModalButton","loginIFrameSrc","onSuccessfulLogin","onSuccessfulJoin","setIsModalOpen","showJoinFormContent","setShowJoinFormContent","showLoginIframe","setShowLoginIframe","newHonorsNumber","setNewHonorsNumber","login","successMessageRef","useOrigin","setOrigin","protocol","hostname","port","handleOpenLoginIframe","handleCloseModal","handleOpenModal","h1","honorsNumber","result","HeaderMenuLink","DropdownMenu","joinModalConductricsTestAgent","onSignInLinkClick","setConductricsSelectionOK","Header","megaNavLinks","showNewHeader","commonHeaderBodyProps","joinFromModal","useJoinFromModalTest","PENDING","onMouseDown","BrandHeaderBody","NewHeaderBody","OldHeaderBody","links","i18n","dir","modal","additionalLinks","navRef","isBeforeVisible","setBeforeVisible","isAfterVisible","setAfterVisible","navWidth","newBefore","newAfter","navRect","onNavScroll","SearchHeader","setUser","useMetrics","logout","shouldUsePoints","sortType","useAppState","useFilterState","getGuestFirstName","tierName","totalPoints","honorsPointsFmt","totalPointsFmt","resp","persistSessionState","trackSignoutClick","urlWithoutPrimarySlug","sanitizedUrl","sanitizedSearchUrlParams","useBrandDetails","forgetInfoUrl","PARTNER_FORGET_INFO_LINK","showCreatePassword","forgetInfoLink","secureInfoLink","GLOBAL_PRIVACY_URL","joinLink","generateSignupUrl","APP_NAME","Footer","customerSupportLink","legalLinks","footerLinks","contactPhoneLink","socialLinks","teConsentRef","footerNavLength","footerNavHalfPoint","Math","ceil","footerNavFirstHalf","slice","footerNavSecondHalf","callback","mutationList","footer","channel","handleTeconsentParentProps","suppressHydrationWarning","getFullYear","FOOTER_LINKS","OSCFooter","DEFAULT_FORM_VALUES","attendee_count","departureDate","numNights","numRooms","numAttendees","placeId","query","rooms","adults","sessionToken","specialRates","aaaRate","aarpRate","corporateCode","employeeRate","friendsAndFamilyRate","governmentOrMilitaryRate","groupCode","offerId","ownerHGVRate","ownerVIPRate","pnd","promoCode","redeemPts","requestedRatesOnly","searchedRatePlanDescription","seniorRate","smbRate","travelAgentId","useOfferId","usePnd","useRequestedRatesOnly","travelAgentRate","isFriendsAndFamily","isTMTPProgramMember","isSmbMember","isSMBMember","isTMTPRateSelected","isHGVMaxRateSelected","SpecialRates","shouldDisablePoints","shouldEnableSMBContextAwareRates","shouldDisableAARP","smbContext","useSMBContextLocalStorage","isOfferIdSelected","isPndSelected","requestedRatesOnlySelected","isOnBusinessProfile","isSMBRatesEnabled","oneCode","showSMBCheckbox","isCorpFieldDisabled","xmlns","focusable","serverSideFeatureTogglesQuery","mapParamToString","isFinite","getPredictions","sessionId","crypto","randomUUID","coordinate","uri","params","urlSearchParams","URLSearchParams","applyExclusions","latitude","longitude","fetch","headers","autocompleteResults","json","dynatrace","sendSessionProperties","shortString","searchdrawbridge","usePlacesAutocomplete","serviceOptions","hasSearchTerms","autocompleteResponse","queryFn","placeholderData","keepPreviousData","predictions","mainText","formatting","main_text","secondaryText","secondary_text","useSuggestions","suggestions","setSuggestions","results","place_id","formattedSuggestion","structured_formatting","matchedSubstrings","matched_substrings","terms","geocodeData","LocationHotelsNearMeOption","userCity","stateCountry","stateName","ComboboxOption","aria-setsize","aria-posinset","useRecentSearches","useLocalStorage","initializeWithValue","serializer","instance","expireDate","REFRESH_TTL_2WEEK","deserializer","s","ttl","DISPLAY_COUNT","LocationIcons","airport","pointOfInterest","PlacesAutoCompleteSuggestionOptions","suggestion","AutoCompleteSuggestionOptionsWrapper","iconType","locationIconName","isNearByEnabled","LocationPopularDestinationsOption","popularDestinations","popularDestinationsCount","showRecentDestinations","cachedRecentSearches","popularDestinationsOptions","displayCount","showPopularDestinations","LocationRecentSearchesOption","recentSearchOptions","recentSearches","GetTranslateAutocompleteConfigDocument","userAgent","LocationInput","enableHotelsNearMe","enableRecentSearches","autoCompleteLength","placeIdFieldName","checkAutocompleteStatus","popularDestinationOptions","control","trigger","currentSuggestion","setCurrentSuggestion","setRecentSearches","isSubmitting","useFormState","sanitizePlacesAutocompleteSuggestions","places","knownDescriptions","Set","has","place","add","showAriaLabel","setShowAriaLabel","inputValue","useWatch","hasSearchTerm","hasSuggestions","autoCompleteSelectionRequired","isGeoCodeFetching","useGeocodeCoordinateQuery","GeocodeCoordinateDocument","enablePopularDestinations","isPlacesAutocompleteSuggestions","showSuggestions","setShowSuggestions","hideSuggestions","showHotelsNearMe","showRecentSearches","showAutoCompleteSuggestions","showSuggestionsPopover","showSuggestionOptions","onSelect","selectValue","inputName","selectedSuggestion","getSelectedSuggestion","locationFieldState","isComposing","isMobileIME","navigator","isHandheld","handleCompositionEnd","handleCompositionStart","openOnFocus","comboboxInputValue","Controller","validatePredictions","onBlur","render","Field","htmlFor","Combobox","immediate","ComboboxInput","displayValue","onCompositionEnd","onCompositionStart","autoCorrect","autoCapitalize","spellCheck","ComboboxOptions","HotelsNearMeOption","PopularDestinationsOptions","RecentSearchesOptions","getAriaText","drawBridgeNotification","ariaSuggestions","Location","autocompleteUri","debouncedInputValue","useDebounceValue","enablePlacesAutoComplete","isFetched","IsTranslateAutocompleteResolved","useGetTranslateAutocompleteConfigQuery","configLanguages","isSupportedLanguage","NHCSEARCH_4807","RatePlanCodes","GOVERNMENT_MILITARY","AARP","SENIOR","AAA","USE_POINTS","targetOHWPage","additionalQSParameterKeys","isAdditionalQsParameterKey","someString","getNumRooms","isNaN","generateShopFormUrl","additionalQSParameters","disableAARPSpecialRates","enableDatesFlexDreamRouting","client","token","isflexDatesDreamRouting","flexDatesDreamRouting","enableDreamRouting","generateFlexDatesDreamRedirectURL","brandCodeParam","searchUriBuilder","getSearchPath","relative","urlParams","adjoiningRoomStay","flexibleDates","displayCurrency","maxPoints","availableHotelsOnly","f_amenityIds","f_attributeIds","f_brandCodes","f_price","f_tripAdvisorRatings","sortBy","rates","aarp","corporateAccount","fromId","government","senior","travelAgents","tripleA","spec_plan","specPlan","usePoints","specialRateTokens","specialRatesTokens","cid","bookUriBuilder","additionalQS","srpName","governmentRate","promotionCode","travelAgent","initialValues","merge","isDateLess","placeUri","noSpecialRatesOrOnlyUsePointsApplied","differenceInDays","shouldAddLocationCoordParams","locationCoordParams","geometry","bounds","geocodeType","locationUriBuilder","getTranslateAutocomplete","speedBumpFeatureconfig","serverSideGetTranslateAutocompleteConfigQuery","DISABLE_AARP_SPECIAL_RATES","handleUnder1Text","childAge","useShopFormSummaryText","showChildAges","formattedStayDates","adaFormattedStayDates","stayDuration","useFormattedStayDates","useLocale","Locale","localeOptions","ready","textReady","formatDates","numAdults","numChildren","childrenAges","room","c","age","updatedChildrenAges","roomsText","adultsText","hasKids","kidsText","kidsAgesText","firstKidsAge","lastKidAge","kidAge","noDatesStayDuration","adaDates","occupancy","kids","sameYear","isSameYear","kanji","isTurkish","optionsWithYear","arrivalDateString","departureDateString","localeToLanguage","baseName","calendar","numberingSystem","ShopFormSummary","editButtonRef","isExpanded","isLoadingProp","onEditClick","summaryType","hideRoomSummary","isLargeView","titleText","editText","locationAnywhere","adaEditSummary","editStayButton","SkeletonLoader","isSmallAndMediumView","GeocodeFailModal","isGeocodeError","setIsGeoCodeError","useAarpToggle","wrapperClassNameDefault","cta","excludeProvider","shouldDirtyToSubmit","onSubmitClick","canAlwaysSubmit","submitOpensNewTab","summaryOptions","renderAfterUpdateButton","shouldDisplayGeocodeErrorModal","useQueryClient","formContentRef","hasLocationInput","hasRoomsButton","hasSpecialRatesButton","hasNumRoomsButton","hasNumAttendeesButton","setElementState","getElementState","setIsExpanded","initiallyExpanded","expanded","isSpeedBumpVisible","handleSpeedBumpClose","handleSpeedBumpContinue","shouldShowSpeedBump","setSpeedBumpData","speedBumpType","getSpeedBumpOptions","useShopFormSpeedBump","speedBumpData","setSpeedBumpType","closeSpeedBump","shouldShowLanguageSpeedBump","isGMELessThanTenRoomsAndNoAttendees","defaultValuesWithDefaults","generateSanitizedDefaultValues","internalSummaryState","setInternalSummaryState","summaryState","hasGeoCodeInput","hasFlexDates","shouldAttemptToGeocode","serverSideGeocodeQuery","closeShopForm","formContent","FormConnector","isValid","isDirty","canSubmit","summaryWrapperClassName","summaryClassName","suppressHeader","formContentElement","ShopFormProvider","formProps","previousDefaultValues","usePreviousValue","setShopFormDefaultValues","useShopFormDefaultValues","setQueryData","ShopFormLocation","placeholder","DatePickerDatesButton","dayTextColorClassName","isReducedSize","dateFormatParts","reducedSubTextSize","DatePickerCalendar","dayFieldName","isDayUse","endDayFieldName","setMessage","shouldDirty","shouldValidate","fromDate","toDate","DatePicker","afterCalendarContent","SearchDatesIndicator","hasFlexDatesDisabled","dateFieldNamePrefix","hideFlexDates","hasTodayAsDefault","onFlexibleDates","onResetDates","openProp","flexDatesLabel","setOpen","setInitialValues","isDateOptional","dayDefault","endDayDefault","endDayLabel","formatDay","formatEndDay","dismissAndResetToOriginalDates","resetDateA11y","setResetDateA11y","resetButtonCTA","resetA11Y","whenLabel","requiredDates","confirmAndCloseModal","resetDates","openModal","checkin","ShopFormInfoContainer","useShopFormContext","info","ShopFormButton","product","InfoCircle","ShopFormRooms","hideGroupLink","tenPlusLinkProps","append","useFieldArray","roomsValue","numGuests","newRoom","attendeeCount","tenPlusUrl","dismissAndResetToOriginalFormRooms","SearchButton","Rooms","omit","InputGroup","isCentered","ShopFormGroup","shouldFocusRoomsInput","roomsInputRef","getNumRoomsAttendeesValidation","isNumRoomsAndNumAttendeesFalsey","min","GROUP_LIMIT","numRoomsValidation","valueAsNumber","showNumAttendees","numAttendeesValidation","ShopFormSpecialRates","isIndependent","ratesValue","isSMBSelected","selectedRates","resetRatesToOriginalFormRates","ShopFormNights","max","initialNumNights","setInitialNumNights","initialDepartureDate","setInitialDepartureDate","dismissModal","dialogTitle","Stepper","onMinusClick","onPlusClick","valueLabel","plusLabel","plusTestId","minusLabel","minusTestId","MarkdownLink","rule","mergedOptions","MarkdownToJsx","mod","ShopForm","ElementSelector","figureTag","createElement","xxs","xs","sm","md","lg","xl","xxl","xxxl","xxxxl","xxxxxl","GetHeightForWidthAndAspectRatio","aspectRatio","heightWidthArray","denominator","round","multiplier","getAspectRatio","urlString","logInfo","parseQsNumber","qs","num","abs","overrideImageUrl","targetHeight","targetWidth","queryIndex","search","sourceAspectRatio","sourceWidth","sourceHeight","getBreakpoint","bandwidth","breakpoints","maxBreakpoint","breakpoint","aspectRatioMap","imageUrl","wrapperTag","captionData","onImgLoaded","priority","hFull","loaded","setLoaded","imageWidth","imageHeight","resizedImageUrl","captionExists","defaultWrapperTag","getAspectRatioClass","objectFit","unoptimized","tabletAspectRatio","mobileAspectRatio","defaultAspectRatio","ResponsivePicture","mobileImageUrl","tabletImageUrl","desktopImageHeight","desktopResizedImageUrl","tabletResizedImageUrl","mobileResizedImageUrl","picture","source","srcSet","imageUrlMobile","imageUrlTablet","imageUrlDesktop","aspectRatioMobile","aspectRatioTablet","aspectRatioDesktop","isMobile","isDesktop","toLocaleLowerCase","weekStartsOnLocale","startDay","weekStartsOn","days","eachDayOfInterval","endOfMonth","MAX_CALENDAR_DAYS","getDay","getDaysInMonth","isArabic","FORMAT_SHORT_OVERRIDES","n","DEFAULT_FORMAT_OPTIONS","formatDateAndText","part","DEFAULT_LOCALE_OPTIONS","LOCALE_OPTIONS","formatter","DateTimeFormat","parts","formatToParts","isNumeric","trim","daysOfWeek","dayIndex","weekStart","capitalize","PricePlannerTabs","handleTabClick","tabId","GOALS","planYourStayTabClick","PRICE_LIST","AMENITIES","PlanYourStayModal","useLocation","handleModalClose","handleFindaHotelClick","locationAddress","priceFilterValue","locationUrlString","pricePlannerFindHotelClick","assign","enablePointsPricePlannerMVT","setEnablePointsPricePlannerMVT","isPointsInPricePlanner","POINTS_EXPLORER_DEFAULT_LOCATIONS","isPointsInPricePlannerMVT","PlanToBookWithinBudgetButton","showBookWithinBudgetModal","setShowBookWithinBudgetModal","openBookWithinBudgetModal","closeBookWithinBudgetModal","PlacesSearch","ctaText","hasShallowRoutingEnabled","initialLocation","matchId","dispatch","useAppDispatch","shouldUseParamCoords","useCoordsFromParams","searchQueryParameters","hasConnectingRooms","pageType","defaultLocationsPage","hotelsNearMePage","showDefaultPlaceholder","isGlobal","isCategoryAmenity","locationMatchName","useGetDreamPageData","handleFormSubmit","shopFormLocale","removeItem","DLFindAHotel","payload","isPointsExplorer","formDataPlaceId","setLocationSearchName","locationSearchName","shallow","defaultQueryValue","isPageBrandFilterEnabled","shopFormKey","encodeURI","useMonthTabsMVT","wrapperClassNameDefaultWithLocation","searchBiasCoordinate","ShopFormDates","ageRange","occupancyLimitMessage","Tooltip","popupClassName","tipId","currentCause","setCurrentCause","setVisible","popoverRef","popoverRect","targetRect","getPopupStyles","hide","cause","show","onMouseOver","onMouseOut","RoomsRoom","adultAge","adultAgeProp","isAdultsOnly","agesRequired","onRemoveRoom","maxOccupants","useAgeBasedPricing","adultsId","childrenId","adultAges","roomNum","roomTestId","getChildAgesFieldsAndValidate","ellipse","rx","ry","shouldFocus","fieldName","ageId","__","j","maxRooms","reachedMaxOccupants","handleRemoveRoom","canOnlyBookSingleRoom","RoomsModal","confirmButtonRef","isAnyRoomHaveChildrenOccupants","removeKids","_room","matchMedia","matches","onPreviousFocus","onNextFocus","isArrowUp","isArrowDown","isArrowLeft","isArrowRight","focusPrevious","at","focusNext","inputId","iconColor","iconColorDisabled","minusDisabled","plusDisabled"],"sourceRoot":"","ignoreList":[]}