{"version":3,"file":"default-src_modules_common-booking_index_ts.8456d09bb598d0a8.js","mappings":"keAAAA,MAAA,eACEA,MAAA,KAIFA,sDAHIA,QACAA,MADA,mBAAAC,EACAD,CAD2B,0BAAAA,MAAA,EAAAE,EAAAC,8BAK/BH,MAAA,eACEA,MAAA,KAIFA,sDAHIA,QACAA,MADA,mBAAAC,EACAD,CAD2B,0BAAAA,MAAA,EAAAI,EAAAC,8BAqB3BL,MADF,QACEA,CAD2D,YAEzDA,MAAA,0FAIFA,QACAA,MAAA,8BACEA,MAAA,IAEJA,iDARIA,MAAA,GAAAA,MAAA,IAAAA,MAAA,IAAAA,MAAA,IAAAM,EAAAC,SAAA,oCAAAP,MAAA,KAAAA,MAAA,KAAAM,EAAAC,SAAA,8BAAAP,MAAA,KAAAM,EAAAE,mBAAA,MAKkBR,MAAA,GAAAA,MAAA,mBAAAA,MAAA,KAAAM,EAAAG,0BAClBT,MAAA,GAAAA,MAAA,UAAAU,EAAAC,QAAA,KAAAD,EAAAC,QAAAC,MAAA,+BAtBJZ,MAAA,UACEA,MAAA,GACFA,QAEEA,MADF,MACEA,CADC,YAECA,MAAA,0FAIFA,QACAA,MAAA,6BACEA,MAAA,IAEJA,UACAA,MAAA,GAAAa,EAAA,8EAbEb,cAAA,UAAAU,EAAAI,SAAA,KAAAJ,EAAAI,SAAAC,MAAA,KAIEf,MAAA,GAAAA,MAAA,IAAAA,MAAA,KAAAA,MAAA,KAAAM,EAAAU,UAAA,oCAAAhB,MAAA,KAAAA,MAAA,KAAAM,EAAAU,UAAA,8BAAAhB,MAAA,KAAAM,EAAAW,oBAAA,MAKIjB,MAAA,GAAAA,MAAA,SAAAkB,EAAA,IAA8BlB,MAAA,mBAAAA,MAAA,MAAAM,EAAAG,0BAClCT,MAAA,GAAAA,MAAA,UAAAU,EAAAI,SAAA,KAAAJ,EAAAI,SAAAF,MAAA,KAGAZ,cAAA,YAAAA,MAAA,MAAAM,EAAAa,aCpBC,MAAMC,GAAmBC,GAC9BA,GAAYC,sBAAsBC,KAAMC,GAAoB,WAAZA,EAAIC,KAEzCC,GAAyBL,GACpCA,GAAYC,sBAAsBC,KAAMC,GAAoB,WAAZA,EAAIC,KAY/C,IAAME,GAAoB,MAA3B,MAAOA,EAoBXC,cAVAC,KAAApB,2BAA+CqB,OAAG,EAUnC,CAEfC,WACEF,KAAKZ,sBAAqBe,KAAc,CACtCH,KAAKb,UAAUiB,QAAKC,KAAQC,KAAQA,IACpCN,KAAKO,cAAcH,QAAKC,KAAOG,YAC9BJ,QACDK,KAAI,EAAExB,EAAUyB,KACPV,KAAKW,oBAAoB1B,EAAUyB,KAC3C,EACDL,KAAQC,KAAQA,IAGlBN,KAAKrB,qBAAoBwB,KAAc,CACrCH,KAAKtB,SAAS0B,QAAKC,KAAQC,KAAQA,IACnCN,KAAKO,cAAcH,QAAKC,KAAOG,UAC/BR,KAAKV,YACJc,QACDC,KAAO,EAAC,EAAKO,MAAeA,IAAQ,EACpCH,KAAI,EAAE3B,EAAS4B,KACNV,KAAKW,oBAAoB7B,EAAS4B,KAC1C,EACDL,KAAQC,KAAQA,IAGlBN,KAAKa,kCAAiCV,KAAc,CAClDH,KAAKO,cAAcH,QAAKC,KAAOG,UAC/BR,KAAKb,UACLa,KAAKtB,SAAS0B,QAAKU,KAAU,SAC5BV,QACDK,KAAI,EAAEC,EAAczB,EAAUH,MAAO,CACnCiC,OAAQ,CACN9B,SAAUM,GAAgBmB,EAAazB,GAAUO,YAAYwB,OAC7DlC,QAASA,EAAUS,GAAgBmB,EAAa5B,GAASU,YAAYwB,OAAS,MAEhFC,OAAQ,CACNhC,SAAUY,GAAsBa,EAAazB,GAAUO,YAAYwB,OACnElC,QAASA,EAAUe,GAAsBa,EAAa5B,GAASU,YAAYwB,OAAS,UAEtF,EACFE,QAEJ,CAEQP,oBAAoB1B,EAA4ByB,GAGtD,OAFkBzB,EAASO,WAAW2B,OAENT,EADnBzB,EAASO,WAAWwB,OACsB,IAAmBI,SAC5E,CAACC,SAAArB,KAAA,mBAAAsB,iBApEUxB,EAAoB,EAAAuB,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAApB1B,EAAoB2B,UAAA,uBAAAC,OAAA,CAAAnB,cAAA,gBAAApB,UAAA,YAAAT,SAAA,WAAAY,UAAA,YAAAV,wBAAA,2BAAA+C,MAAA,EAAAC,KAAA,EAAAC,OAAA,gXAAAC,SAAA,SAAAC,EAAAC,MAAA,EAAAD,IDzBjC5D,MAAA,EAAA8D,EAAA,kCAOA9D,MAAA,EAAA+D,EAAA,kCAOA/D,MAAA,EAAAgE,EAAA,2BAAAhE,sBAd2CA,MAAA,cAAAiE,EAAAjE,MAAA,IAAA6D,EAAAnB,iCAAA,KAAAuB,EAAArB,QAOL5C,MAAA,GAAAA,MAAA,cAAAkE,GAAAlE,MAAA,IAAA6D,EAAAnB,iCAAA,KAAAwB,GAAApB,qDCkBzBnB,CAAoB,4FClB7B3B,MAAA,WACEA,MAAA,oDACFA,wCADqBA,QAA2CA,MAA3C,aAAAA,MAAA,IAAAmE,GAA2CnE,CAAD,eAAAoE,EAAAC,wCAFjErE,MAAA,GACEA,MAAA,EAAAsE,GAAA,aAIAtE,MAAA,4DAJ6EA,cAAA,OAAAuE,EAAAC,SAM3ExE,QAGAA,MAHA,gDAAAuE,EAAAE,oBAAA,KAAAF,EAAAE,oBAAAC,KAAA,MAGA1E,CAHmF,gBAGnFA,CAFiB,gBAEjBA,CADoB,WAAAoE,EAAAO,oECAnB,IAAMC,EAA+B,MAAtC,MAAOA,EAWXhD,YACUiD,EACAC,GADAjD,KAAAgD,kBACAhD,KAAAiD,oBATVjD,KAAAkD,WAAiC,IAAIC,MAIrBnD,KAAAoD,aAAeA,IAM5B,CAEHlD,WACEF,KAAK8C,YAAc9C,KAAKgD,gBAAgBK,YAAwB,yBAEhErD,KAAKwC,aAAexC,KAAKiD,kBACtBK,cAAc,UACdlD,QAAKK,KAAK8C,GAAcA,EAAW,MAAQ,QAChD,CAAClC,SAAArB,KAAA,mBAAAsB,iBAtBUyB,GAA+B5E,MAAAqF,MAAArF,MAAAqF,MAAA,EAAAnC,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAA/BuB,EAA+BtB,UAAA,mCAAAC,OAAA,CAAA+B,UAAA,aAAAC,QAAA,CAAAR,WAAA,cAAAvB,MAAA,EAAAC,KAAA,EAAAC,OAAA,yTAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDf5C5D,MAAA,6CACEA,MAAA,sBAAAwF,IAAAxF,aAAA6D,EAAAyB,UAAAE,MAAA3B,EAAAyB,UAAAE,MAAA,GAGAxF,MAAA,0BAAS6D,EAAAkB,WAAAU,MAAiB,GAE1BzF,MAAA,EAAA0F,EAAA,uCAcF1F,eAnBEA,MAAA,OAAA6D,EAAAyB,WAEAtF,MADA,QAAAA,MAAA,uCACAA,CAD6D,UAAA6D,EAAAoB,aAAAU,OAI9C3F,MAAA,GAAAA,MAAA,OAAAA,MAAA,IAAA6D,EAAAc,mQCSJC,CAA+B,oSCqCrC,IAAMgB,EAAmB,MAA1B,MAAOA,EAAmB1C,SAAArB,KAAA,mBAAAsB,iBAAnByC,EAAmB,EAAA1C,SAAArB,KAAA,UAAAuB,EAAAyC,GAAA,MAAnBD,IAAmB1C,SAAArB,KAAA,UAAAuB,EAAA0C,IAAA,UAhB5BC,KACAC,KACAC,KACAC,IACAC,IACAC,KACAC,KACAC,KACAC,KACAC,KACAC,cAMSb,CAAmB,WA7B9Bc,IAAmC,CAAArB,KAAAsB,MAAA,CAAAtB,KAAAuB,aACnCjF,GAAoB,CAAA0D,WAAA,CAAAA,KAAAwB,aACpBC,IAAsB,CAAAzB,KAAA0B,KAAAC,KAAAC,KAAAC,MAAA,CAAA7B,UAAA8B,KAAAC,KAAAC,KAAAC,KAAAC,KAAAX,aACtBY,KAAmB,CAAAnC,WAAA,CAAAA,KAAAoC,KAAAC,KAAAd,aAEnBe,KAAkC,CAAAtC,KAAAuC,KAClChD,GAA+B,CAAAS,KAAAwC,aAA/BjD,EAA+B,CAAAS,KAAAyC,KAAAC,KAAAb,MAAA,CAAA7B,KAAA2C,KAAApB,aAC/BqB,IAA+B,CAAA5C,KAAA6C,KAAAC,MAAA,UAC/BC,KAAwB,CAAA/C,KAAAgD,IAAAC,KAAA,CAAAjD,KAAAuB,oPC7BtB5G,MAAA,UACEA,MAAA,GACFA,+BADEA,cAAA,IAAAuI,EAAAC,UAAA,8CAQFxI,MAAA,GACEA,MAAA,qnCAqEEA,MADA,iCAAAyI,EAAAzI,MAAA0I,GAAAC,GAAAF,EAAAG,UAAAC,GAAAJ,EAAAK,MAAAP,GAAAvI,MAAA,UAAAA,MAAiBuI,GAAAQ,gBAAAJ,GAAAK,SAAAH,IAAwC,EACzD7I,CAD0D,+BAAA2I,EAAA3I,MAAA0I,GAAAE,UAAAL,GAAAvI,MAAA,UAAAA,MAC3CuI,GAAAU,YAAAxD,KAAAkD,EAAAK,UAAkC,GAuBlDhJ,uDA3FCA,QA0FAA,MA1FA,oBAAAA,MAAA,KAAA2I,EAAAO,QA0FAlJ,CA1FgD,UAAAA,MAAA,KAAA2I,EAAAQ,WAAAZ,EAAAa,YAAAC,SA0FhDrJ,CAzF8D,QAAA2I,EAAAW,MAyF9DtJ,CAxFuB,aAAAA,MAAA,KAAA2I,EAAAY,aAwFvBvJ,CAvFiD,QAAA2I,EAAAa,MAuFjDxJ,CAtFuB,cAAAA,MAAA,KAAAA,MAAA,KAAAA,MAAA,KAAA2I,EAAAc,YAAAlB,EAAAmB,iBAAA,IAsFvB1J,CArFgG,gBAAAA,MAAA,MAAAA,MAAA,KAAAA,MAAA,KAAA2I,EAAAgB,cAAApB,EAAAmB,iBAAA,IAqFhG1J,CApFoG,QAAAA,MAAA,MAAAA,MAAA,MAAAA,MAAA,MAAAA,MAAA,MAAA2I,EAAAiB,QAAArB,EAAAmB,iBAAA,IAoFpG1J,CAnF6F,kBAAAA,MAAA,MAAA2I,EAAAkB,kBAAA7J,MAAA,MAAA2I,EAAAkB,iBAAA,QAAA7J,MAAA,MAAA2I,EAAAO,QAAA,OAAAlJ,MAAA,MAAA2I,EAAAO,QAAAlJ,MAAA,MAAAuI,EAAAuB,+BAAA,YAAAnB,EAAAK,SAAA,gCAAAhJ,MAAA,MAAA2I,EAAAO,QAAAlJ,MAAA,MAAAuI,EAAAuB,+BAAA,YAAAnB,EAAAK,SAAA,6BAAAhJ,MAAA,MAAAuI,EAAAuB,+BAAA,YAAAnB,EAAAK,SAAA,0BAAAhJ,MAAA,IAAAE,EAAAF,MAAA,MAAA2I,EAAAO,UAmF7FlJ,CAtEC,oBAAAA,MAAA,MAAA2I,EAAAkB,iBAAA7J,MAAA,MAAAuI,EAAAuB,+BAAA,YAAAnB,EAAAK,SAAA,gCAAAhJ,MAAA,MAAA2I,EAAAkB,iBAAA7J,MAAA,MAAAuI,EAAAuB,+BAAA,YAAAnB,EAAAK,SAAA,6BAAAhJ,MAAA,MAAA2I,EAAAkB,iBAAA,EAAA7J,MAAA,MAAAuI,EAAAuB,+BAAA,YAAAnB,EAAAK,SAAA,0BAAAhJ,MAAA,IAAAE,EAAAF,MAAA,MAAA2I,EAAAkB,mBAAA,GAsED7J,CA1DC,kBAAAA,MAAA,2CA0DDA,CAzDyE,aAAAuI,EAAAwB,wBAAAxB,EAAAyB,eAAAC,YAAA1B,EAAAyB,eAAAE,KAyDzElK,CAxDyF,aAAAA,MAAA,OAAAuI,EAAAwB,yBAAA/J,MAAA,MAAA2I,EAAAO,QAAA,0CAAAX,EAAAwB,wBAAA,wCAAA/J,MAAA,OAAA2I,EAAAQ,WAAAZ,EAAAa,YAAAe,GAAA,YAAAxB,EAAAK,SAAA,iCAAAL,EAAAK,SAAA,sBAwDzFhJ,CA9CC,iBAAAA,MAAA,OAAAA,MAAA,OAAA2I,EAAAQ,WAAAZ,EAAAa,YAAAe,GAAA,YAAAxB,EAAAK,SAAA,yBAAAhJ,MAAA,OAAA2I,EAAAQ,WAAAZ,EAAAa,YAAAC,SAAA,YAAAV,EAAAK,SAAA,uCAAAL,EAAAK,SAAA,0BA8CDhJ,CAtCC,cAAA2I,EAAAyB,uBAAA7B,EAAA8B,YAAAC,yBAAAtK,MAAA,OAAA2I,EAAAQ,WAAAZ,EAAAa,YAAAe,GAAA5B,EAAA8B,YAAAE,wBAAAhC,EAAA8B,YAAAG,0BAsCDxK,CA/BC,iBAAA2I,EAAA8B,eA+BDzK,CA9ByC,kBAAAA,MAAA,OAAA2I,EAAAK,WAAAT,EAAAmC,SAAAC,MAAAhC,EAAAiC,qBAAA,IAAA5K,MAAA,OAAA2I,EAAAkC,gBAAAlC,EAAAmC,aAAA,IAAA9K,MAAA,OAAA2I,EAAAO,UAAA,IAAAP,EAAAoC,gCA8BzC/K,CAxBC,cAAAA,MAAA,OAAAA,MAAA,OAAAuI,EAAAyC,sBAAArC,EAAAK,UAwBDhJ,CArBmF,sBAAAA,MAAA,OAAAA,MAAA,OAAAuI,EAAA0C,uBAAAtC,EAAAK,UAqBnFhJ,CApB4F,oBAAA2I,EAAAmC,aAAA,IAAA9K,MAAA,OAAA2I,EAAAO,UAAA,IAAAP,EAAAoC,gCAAAxC,EAAA2C,kBAAAC,QAAA5C,EAAA2C,kBAAAE,KAoB5FpL,CAdC,mBAAAA,MAAA,OAAA2I,EAAA0C,sBAcDrL,CAbyD,oBAAAA,MAAA,OAAA2I,EAAA2C,oBAazDtL,CAZwD,mBAAA2I,EAAA4C,iBAYxDvL,CAX6C,iBAAAA,MAAA,aAAA2I,EAAA6C,WAAA,KAAA7C,EAAA6C,WAAAC,iBAW7CzL,CAVwE,uBAAA2I,EAAA6C,WAAA,KAAA7C,EAAA6C,WAAAE,KAUxE1L,CAT2C,wBAAA2I,EAAA6C,WAAA,KAAA7C,EAAA6C,WAAAG,MAS3C3L,CAR6C,0BAAAuI,EAAAwB,wBAQ7C/J,CAPmD,YAAAuI,EAAAwB,yBAAA/J,MAAA,OAAA2I,EAAAO,QAAA,EAAAlJ,MAAA,uCAAAA,MAAA,IAAAE,EAAAF,MAAA,OAAA2I,EAAAO,UAAA,GAOnDlJ,CAFC,aAAAA,MAAA,OAAAuI,EAAAqD,aAED5L,CADkC,yBAAA2I,EAAAyB,uGAtG1CpK,MAAA,GACEA,MAAA,EAAA6L,EAAA,YAKA7L,MAAA,WAKEA,MAAA,EAAA8L,EAAA,yBA+FF9L,+CAzGAA,cAAAuI,EAAAC,UAAA,MAOExI,QACAA,MADA,mCAAAuI,EAAAwD,oBACA/L,CAD8D,2BAAAuI,EAAAwB,yBAG5B/J,cAAA,UAAAgM,6BAmGpChM,MAAA,WACEA,MAAA,kBACFA,8BADcA,cAAA,OAAAuI,EAAA0D,WAAAC,SClDT,IAAMC,EAAoB,MAA3B,MAAOA,EAyBXvK,YACUwK,EACAtH,GADAjD,KAAAuK,aACAvK,KAAAiD,oBA1BDjD,KAAAuH,YAAcA,IACdvH,KAAAwI,YAAcA,KACdxI,KAAAoK,WAAaA,IACbpK,KAAA6I,SAAWA,KACX7I,KAAAqJ,kBAAoBA,KACpBrJ,KAAAmI,eAAiBA,KAElBnI,KAAAwK,cAA8B,IAAIC,KAGjCzK,KAAA6H,gBAAiB,EAEjB7H,KAAAkK,qBAAsB,EAItBlK,KAAAiI,+BAAiC,GAGjCjI,KAAAkI,yBAA0B,EAEzBlI,KAAA0K,cAAmD,IAAIvH,MACvDnD,KAAAoH,YAAsC,IAAIjE,KAKjD,CAEHjD,WACEF,KAAKwK,cAAcG,OACjBxK,KAAc,CAACH,KAAK4K,UAAW5K,KAAK6K,UACjCzK,QAAK0K,KAAK,IACVC,UAAU,EAAEC,EAAUC,MACrBjL,KAAKkL,8BAA8BF,GACnChL,KAAKuK,WAAWY,kBACdC,KAASC,kBACTC,MAA8BN,EAAUhL,KAAKuL,aAAcN,GAAO,IAI1EjL,KAAK+J,YAAc/J,KAAKiD,kBAAkBK,cAAc,YAC1D,CAEAkI,cACExL,KAAKwK,iBAAgBiB,MAAYzL,KAAKwK,cACxC,CAEAtD,gBAAgBC,EAAoBF,GAClCjH,KAAK0K,cAAc9G,KAAK,CAAEuD,WAAUF,MAAO,IAC3CjH,KAAK0L,wBAAwBvE,EAAUF,GAEvCjH,KAAKwK,cAAcG,OACjBxK,KAAc,CAACH,KAAK4K,UAAW5K,KAAK6K,UACjCzK,QAAK0K,KAAK,IACVC,UAAU,EAAEC,EAAUC,OACrB,MAAMU,GAAiBX,EAAStL,KAAMkM,IAAYA,GAAQzE,WAAaA,GAEvEnH,KAAKuK,WAAWY,kBACdC,KAASS,eACTP,MAA8B,CAACK,IAAiB3L,KAAKuL,aAAcN,IAAO,GAIpF,CAEQC,8BAA8BF,GACpC,MAAMc,EAA+Cd,EAASvK,IAAI,CAACmL,EAAS3E,MAC1E,MAAM9F,GAAOyK,EAAQzE,WAAa0B,KAASkD,QAAU,SAAQC,MAAmBJ,EAAQzE,UAAU,GAClG,MAAO,CACLhG,QACA8K,GAAI9K,GACJ+K,MAAOC,KACPhF,YAAU6E,MAAmBJ,EAAQzE,UAAU,GAC/CiF,KAAM,CAACC,KAAgBC,QAASD,KAAgBE,WAAWC,SAASxM,KAAKuL,cACrEkB,KAAiBC,YACjBD,KAAiBE,aACrBC,SAAU3F,GAAQ,KAItBjH,KAAKuK,WAAWsC,eACdzB,KAAS0B,oBACTC,KAAwBC,YACxBlB,EACA9L,KAAKuL,aAET,CAEQG,wBAAwBvE,EAAoBF,GAClD,MAAMgG,EAAiB9F,IAAa0B,KAASkD,QAAU,SAAQC,MAAmB7E,GAAU,GACtF+F,GAAuC,CAC3C/L,KAAM8L,EACNhB,GAAIgB,EACJf,MAAOC,KACPhF,YAAU6E,MAAmB7E,GAAU,GACvCyF,SAAU3F,EAAQ,GAGpBjH,KAAKuK,WAAW4C,0CACd/B,KAASgC,cACTL,KAAwBM,MACxBH,GACA,CAACb,KAAgBC,QAASD,KAAgBE,WAAWC,SAASxM,KAAKuL,cAC/DkB,KAAiBC,YACjBD,KAAiBE,aACrB3M,KAAKuL,aAET,CAAClK,SAAArB,KAAA,mBAAAsB,iBA7GUgJ,GAAoBnM,MAAAqF,MAAArF,MAAA2G,MAAA,EAAAzD,SAAArB,KAAA,UAAAsN,EAAA9L,IAAA,MAApB8I,EAAoB7I,UAAA,uBAAAC,OAAA,CAAAmG,eAAA,iBAAA+C,UAAA,YAAAV,oBAAA,sBAAAqB,aAAA,eAAAnC,oBAAA,sBAAAD,mBAAA,qBAAAlB,+BAAA,iCAAA4C,QAAA,UAAAlE,UAAA,YAAAuB,wBAAA,2BAAAxE,QAAA,CAAAgH,cAAA,gBAAAtD,YAAA,eAAAzF,MAAA,EAAAC,KAAA,EAAAC,OAAA,irBAAAC,SAAA,SAAAC,EAAAC,MAAA,EAAAD,ID7DjC5D,MAAA,EAAAoP,EAAA,uCA6GApP,MAAA,EAAAqP,EAAA,yBAAArP,+BA7GoDA,MAArC,OAAAA,MAAA,IAAA6D,EAAA4I,WAAqCzM,CAAb,WAAAsP,6jDC6D1BnD,CAAoB,4eCD1B,IAAMoD,GAAsB,MAA7B,MAAOA,GAAsBrM,SAAArB,KAAA,mBAAAsB,mBAAtBoM,GAAsB,EAAArM,SAAArB,KAAA,UAAA2N,EAAA3J,GAAA,MAAtB0J,KAAsBrM,SAAArB,KAAA,UAAA2N,EAAA1J,IAAA,UA/B/BC,KACAC,IACAC,KACAC,IACAC,IACAP,IACA6J,IACApJ,KACAqJ,KACAnJ,KACAoJ,KACAC,KACApJ,KACAqJ,KACAC,IACAC,KACA3J,eAeSmJ,EAAsB,WAZ/BS,IAAqC,CAAA3K,UAAAsB,IAAAC,IAAAC,IAAAE,KAAA,CAAA1B,KAAA2B,IAAAC,IAAAC,IAAAC,KAAAC,KAAAC,aAErC4I,IAAyB,CAAA5K,eAAAuB,IAAAU,IAAAT,IAAAU,KAAAR,IAAAU,KAAAC,MAAA,CAAArC,UAAA2B,IAAAC,IAAAW,IAAAV,IAAAW,KAAAV,KAAAC,KAAAC,aACzB6I,IAAyB,CAAA7K,KAAAyC,IAAAC,IAAAC,KAAApB,IAAAU,IAAAT,IAAAqB,KAAAC,KAAAT,KAAAW,KAHzB2H,IACAG,IACAF,KAAyB,CAAA5K,KAAAuC,IAAAC,KAAAS,KAAAjB,sGC1CtB,IAAM8I,EAAwB,MAA/B,MAAOA,EAJbvO,cAKWC,KAAAqJ,kBAAoBA,KAQ7BnJ,WACEqO,WAAW,KACTvO,KAAKwO,YAAYC,cAAcC,OAAK,EACnC,IACL,CAACrN,SAAArB,KAAA,mBAAAsB,iBAbUgN,EAAwB,EAAAjN,SAAArB,KAAA,UAAA2O,EAAAnN,IAAA,MAAxB8M,EAAwB7M,UAAA,2BAAAmN,UAAA,SAAA7M,EAAAC,MAAA,EAAAD,2SCPnC5D,MADF,UACEA,CADkC,YACwDA,MAAA,GAAWA,QACrGA,MAAA,GACFA,eAF4FA,MAAA,GAAAA,MAAA6D,EAAAyF,kCDO/E6G,CAAwB,oOEG/BnQ,MAAA,YAAoGA,MAAA,uBAElGA,uCAFkGA,oBAAA,IAAA0Q,EAAA1Q,MAAA,EAAAE,EAAAkE,EAAAuM,uCAIlG3Q,MADF,WACEA,CADgF,YAE9EA,MAAA,mDAAqGA,QAEvGA,MAAA,wCACFA,uCAHIA,MAAA,GAAAA,MAAA,IAAAA,MAAA,mBAAAA,MAAA,GAAAI,EAAAJ,MAAA,IAAA4Q,GAAA,qBAEF5Q,MAAA,GAAAA,MAAA,IAAAA,MAAA,IAAAA,MAAA,IAAAoE,EAAAyM,aAAA7Q,MAAA,GAAAE,EAAAkE,EAAAuM,YAAA,+BAEF3Q,MAAA,UAA8CA,MAAA,wCAAmDA,8BAAnDA,oBAAA,IAAAA,MAAA,IAAAoE,EAAAyM,aAAA7Q,MAAA,EAAAE,EAAAkE,EAAAuM,cCT7C,IAAKG,EAAZ,SAAYA,GACVA,SAAAC,QAAA,UACAD,EAAAE,QAAA,UAFUF,CAGZ,CAHA,CAAYA,GAAe,IASpB,IAAMtJ,EAAmB,MAA1B,MAAOA,EAJb5F,cAKWC,KAAAiP,gBAAkBA,EAE3BjP,KAAAoP,gBAAoDnP,WAAGoP,GASvDrP,KAAA8J,MAAQmF,EAAgBC,QAGxBlP,KAAA8O,WAAY,EAMZ5O,WACEF,KAAKgP,eAAc7O,KAAc,CAACH,KAAKsP,QAAStP,KAAKoP,eAAehP,QAClEC,KAAO,EAAEkP,MAAM,EAAMC,MAAcD,KAAO,EAC1CE,MAAW,EAAEC,EAAMC,MACjB,MAAMC,EAAQF,EAAKE,MAAMA,MACzB,GAAIA,EAAMC,aACR,IAAKF,GAAeA,IAAgBG,KAAYC,MAE9C,SAAOC,MADaJ,EAAMK,iBAAmBL,EAAMM,aAErD,IACGP,IAAgBG,KAAYxD,SAAWqD,IAAgBG,KAAYK,gBACpEP,EAAMK,gBAEN,SAAOD,MAASJ,EAAMK,gBAAe,CAGzC,SAAOD,MAASJ,EAAMM,YAAW,IAIrClQ,KAAKoQ,aAAepQ,KAAKsP,QAAQlP,QAC/BC,KAAQqP,KAAWA,GAAME,OAAOA,OAAOC,cAAW,EAClDpP,KAAKiP,IAAUA,EAAKE,MAAMA,MAAMC,YAAYQ,SAG9CrQ,KAAKsQ,oBAAsBtQ,KAAKsP,QAAQlP,QACtCC,KAAQqP,KAAWA,GAAMa,QAAQX,OAAOY,sBAAwBd,GAAME,OAAOA,OAAOa,sBAAmB,EACvGhQ,KAAKiP,GAASA,EAAKE,MAAMA,MAAMa,qBAEnC,CAACpP,SAAArB,KAAA,mBAAAsB,iBAlDUqE,EAAmB,EAAAtE,SAAArB,KAAA,UAAA0Q,EAAAlP,IAAA,MAAnBmE,EAAmBlE,UAAA,sBAAAC,OAAA,CAAA0N,aAAA,eAAAE,QAAA,UAAAxF,MAAA,QAAAgF,UAAA,aAAAnN,MAAA,GAAAC,KAAA,GAAAC,OAAA,mZAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDX5B5D,MATJ,UASIA,CAFH,SAEGA,CADoH,YAClFA,MAAA,8BAA0CA,QAC5EA,MAAA,YACEA,MAAA,EAAAwS,EAAA,+BAGAxS,MAAA,EAAAyS,EAAA,gCAMAzS,MAAA,GAAA0S,EAAA,gCAGN1S,mBAtBEA,MAAA,UAAA6D,EAAA8H,QAAA9H,EAAAiN,gBAAAE,QAAA,8JAOIhR,cAAA,UAAA6D,EAAA8H,QAAA9H,EAAAiN,gBAAAE,QAAA,qCACgChR,MAAA,GAAAA,YAAA,yBAEWA,MAAA,GAAAA,MAAA,OAAAA,MAAA,IAAA6D,EAAAsO,sBAGCnS,MAAA,GAAAA,MAAA,OAAAA,MAAA,KAAA6D,EAAAoO,eAMrCjS,MAAA,GAAAA,MAAA,cAAAA,MAAA,MAAA6D,EAAAoO,0CCAAzK,CAAmB,sTCpBhCxH,MAAA,UACEA,MAAA,8BACFA,8BAFiCA,MAAA,UAAAuI,EAAAoK,gBAC/B3S,cAAA,IAAAA,MAAA,IAAAuI,EAAAqK,qBAAA,iCASE5S,MADF,QACEA,CADmG,OAEjGA,MAAA,GAEJA,qCAJyEA,MAAA,wBAErEA,MAAA,GAAAA,MAAA,IAAA6S,EAAA,gCAPN7S,MAAA,WAKEA,MAAA,EAAA8S,EAAA,aAKF9S,8BALwBA,cAAA,UAAA+S,2BAyBd/S,MADF,WACEA,CADoE,uBACjDA,MAAA,8BACrBA,iBADqBA,MAAA,GAAAA,YAAA,uFAwBfA,MAAA,wFAoBEA,MAJA,yBAAAwF,IAAAxF,MAAAgT,GAAA,MAAAzK,GAAAvI,MAAA,UAAAA,MAAiBuI,GAAAQ,gBAAAvD,IAAuB,EAIxCxF,CAJyC,8BAAAA,MAAAgT,GAAA,MAAAzK,GAAAvI,MAAA,UAAAA,MACrBuI,GAAA0K,qBAAoB,EAGxCjT,CAHyC,yBAAAwF,IAAAxF,MAAAgT,GAAA,MAAAE,GAAAlT,MAAA,GAAA4I,UAAAL,GAAAvI,QAAA,OAAAA,MACxBuI,GAAA4K,gBAAA3N,GAAA0N,GAAApF,IAA6C,EAE9D9N,CAF+D,+BAAAA,MAAAgT,GAAA,MAAAzK,GAAAvI,MAAA,UAAAA,MAC1CuI,GAAA6K,kBAAA3N,OAAwB,EAC7CzF,CAD8C,yBAAAA,MAAAgT,GAAA,MAAAzK,GAAAvI,MAAA,UAAAA,MAC/BuI,GAAA8K,YAAA5N,OAAkB,GAClCzF,qDANCA,MAbA,UAAAsT,EAaAtT,CAbmB,YAAAuI,EAAAkE,UAanBzM,CAZuB,gBAAAuI,EAAAgL,cAYvBvT,CAX+B,eAAAA,MAAA,KAAAuI,EAAAiL,SAW/BxT,CAV0C,cAAAA,MAAA,KAAAuI,EAAAiL,QAAAC,YAU1CzT,CAToD,mBAAAuI,EAAAmL,WASpD1T,CAR+B,2BAAAuI,EAAAoL,yBAQ/B3T,CAPqD,8BAAAuI,EAAAqL,4BAOrD5T,CAN2D,mBAAAuI,EAAAsL,iBAM3D7T,CALqC,+BAAAuI,EAAAuL,6BAKrC9T,CAJ6D,iBAAAuI,EAAAwL,eAI7D/T,CAHiC,sBAAAuI,EAAAyL,kBAGjChU,CAFyC,uBAAAuI,EAAA0L,qBAEzCjU,CAD6C,iBAAAuI,EAAA2L,0DAS/ClU,MAAA,wBAKEA,MAAA,2BAAAA,MAAAmU,GAAA,MAAAb,GAAAtT,QAAA4I,UAAAsK,GAAAlT,QAAA4I,UAAAL,GAAAvI,QAAA,OAAAA,MAAiBuI,GAAAQ,gBAAgB,CAAAC,SAAAsK,GAAAtK,SAAAoL,WAAAlB,GAAApF,KAAiE,GACnG9N,8DAFCA,MADA,oBAAAkT,EACAlT,CADuC,UAAAsT,gGAKzCtT,MAAA,+CAIEA,MAAA,2BAAAA,MAAAqU,GAAA,MAAAf,GAAAtT,QAAA4I,UAAAsK,GAAAlT,QAAA4I,UAAAL,GAAAvI,QAAA,OAAAA,MAAiBuI,GAAAQ,gBAAgB,CAAAC,SAAAsK,GAAAtK,SAAAoL,WAAAlB,GAAApF,KAAiE,GACnG9N,gFAFCA,MADA,WAAAsT,EAAAtK,SACAhJ,CAD6B,iBAAAsU,EAAA,OAAAA,EAAAtU,MAAA,IAAAuI,GAAAgM,kBAAA,MAAAD,EAAApB,GAAApF,IAAA,KAAAwG,EAAApB,GAAApF,IAAAwF,EAAAtK,iBAAAkI,IAAAoD,gDAS7BtU,MAAA,+CAGEA,MAAA,mBAAAA,MAAAwU,GAAA,MAAAlB,GAAAtT,MAAA,GAAA4I,UAAAsK,GAAAlT,QAAA4I,UAAAL,GAAAvI,QAAA,OAAAA,MAASuI,GAAAQ,gBAAgB,CAAAC,SAAAsK,GAAAtK,SAAAoL,WAAAlB,GAAApF,KAAiE,GAS3F9N,iCADCA,MAPA,OAAAA,MAAA,EAAAyU,EAAAlM,EAAAyB,eAAAE,KAAA3B,EAAAmM,aAAAC,OAOA3U,CAJE,QAAAuI,EAAA8B,YAAAG,0BAIFxK,CAH+C,OAAAuI,EAAAqM,WAAAC,OAG/C7U,CAF0B,OAAAuI,EAAAuM,WAAAC,YAE1B/U,CAD+B,OAAAA,MAAA,oDAIjCA,MAAA,iGAYEA,MATA,OAAAA,MAAA,uCASAA,CAT4D,OAAAA,MAAA,GAAAyU,EAAAlM,EAAAyB,eAAAgL,aAAAzM,EAAAmM,aAAAC,OAS5D3U,CALE,kBAKFA,CAJqB,QAAAuI,EAAA8B,YAAAE,wBAIrBvK,CAH6C,OAAAuI,EAAAqM,WAAAC,OAG7C7U,CAF0B,OAAAuI,EAAAuM,WAAAC,YAE1B/U,CAD+B,OAAAA,MAAA,uDA7BnCA,MAAA,YAkBEA,MAdA,EAAAiV,EAAA,sBAcAjV,CAFC,EAAAkV,GAAA,uBAgBHlV,mDA3BKA,cAAA,OAAAsT,EAAAtK,WAAAT,EAAAmC,SAAAyK,cAcAnV,cAAA,OAAAsT,EAAAtK,WAAAT,EAAAmC,SAAAyK,yDAeLnV,MAAA,+CAGEA,MAAA,sBAAAA,MAAAoV,GAAA,MAAA9B,GAAAtT,QAAA4I,UAAAsK,GAAAlT,QAAA4I,UAAAL,GAAAvI,QAAA,OAAAA,MAAYuI,GAAAQ,gBAAgB,CAAAC,SAAAsK,GAAAtK,SAAAoL,WAAAlB,GAAApF,KAAiE,GAI9F9N,iCADCA,MAFA,QAAAuI,EAAA8B,YAAAE,wBAEAvK,CAF6C,OAAAuI,EAAAuM,WAAAC,YAE7C/U,CAD+B,OAAAA,MAAA,kDAnGvCA,MAAA,GAEIA,MADF,WACEA,CADsE,iFA2DpEA,MAtCA,EAAAqV,EAAA,oCAsCArV,CAjBC,EAAAsV,EAAA,yBAiBDtV,CATC,EAAAuV,EAAA,+BASDvV,CAFC,EAAAwV,GAAA,+BAoCDxV,MAAA,GAAAyV,GAAA,sBASJzV,wFAtG0BA,cAAA,UAAAA,MAAA,GAAAE,GAAAwV,IAGtB1V,QAcAA,MAdA,WAAAsT,EAAAtK,SAcAhJ,CAd6B,+CAAAsT,EAAAtK,SAAA,SAc7BhJ,CAb8E,kBAAAuI,GAAAoN,oBAAA3V,MAAA,0CAAAA,MAAA,GAAAI,EAAA,MAAAkT,EAAAxG,OAAA,QAAAwG,EAAAxG,OAAA,GAAA8I,SAAA5V,MAAA,WAAAsT,EAAAxG,OAAA,QAAAwG,EAAAxG,OAAA,GAAA+I,cAAA,GAa9E7V,CANC,aAAAuI,GAAAiL,QAAAC,WAMDzT,CALiC,QAAAkT,GAKjClT,CAJ2B,UAAAsT,EAI3BtT,CAHmB,oBAAAsT,EAAAwC,OAAA,KAAAxC,EAAAwC,OAAAC,SAAAxN,GAAAyN,WAGnBhW,CAFmD,oBAAAuI,GAAA0N,kBAEnDjW,CADuC,6BAAAuI,GAAA2N,4BAAAR,GAAApC,EAAAtK,WAAAT,GAAAmC,SAAAC,4DAMpC3K,MAAA,GAAAA,MAAA,eAAAsT,EAAAwC,QAAAxC,EAAAwC,OAAAK,UAwBAnW,cAAA,OAAAuI,GAAAmL,aAAA,MAAAJ,EAAAwC,OAAA,KAAAxC,EAAAwC,OAAAK,UAOAnW,cAAA,OAAAuI,GAAA6N,sBAOApW,cAAA,cAAAsT,EAAAwC,OAAA,KAAAxC,EAAAwC,OAAAO,iBAAA,IAAArW,MAAA,WAAAsT,EAAAwC,OAAA,KAAAxC,EAAAwC,OAAAQ,mBAmCAtW,MAAA,GAAAA,MAAA,OAAAuI,GAAAgO,oBAAAhO,GAAA2L,4CAWPlU,MADF,WACEA,CADyF,kCAOvFA,MAAA,6BAMJA,oDAb4CA,MAAA,aAAAuI,EAAAiO,eAAAC,OAAA,GAQtCzW,MAAA,GAEAA,MAFA,YAAAuI,EAAAiL,QAAAkD,UAEA1W,CAF+B,QAAAkT,EAE/BlT,CAD2B,gBAAAuI,EAAAoO,0CA9HnC3W,MAAA,gBAqHEA,MA7GA,EAAA4W,EAAA,aA6GA5W,CA7GsE,EAAA6W,EAAA,wBA6GtE7W,CA1G0F,EAAA8W,GAAA,cAwH5F9W,6CAlIEA,MAAA,eAAAuI,EAAAiL,QAAAkD,UAAAxD,EAAA6D,UAAAC,cAAA,KAAAzO,EAAAiL,QAAAkD,UAAAxD,EAAA6D,UAAAC,cAAAC,UAAA,aAAA1O,EAAAiL,QAAAkD,UAAAxD,EAAAgE,QAAAF,cAAA,KAAAzO,EAAAiL,QAAAkD,UAAAxD,EAAAgE,QAAAF,cAAAC,WAOuBjX,cAAA,WAAAkT,EAAAiE,SAAAV,QAGWzW,cAAA,UAAAkT,EAAAiE,UA0G5BnX,cAAA,OAAAuI,EAAA6O,cCzGP,IAAMC,GAAyB,MAAhC,MAAOA,EAoFXzV,YAAoB0V,GAAAzV,KAAAyV,kBAnFXzV,KAAAiT,WAAaA,KACbjT,KAAA+S,WAAaA,KACb/S,KAAAwI,YAAcA,KACdxI,KAAA6I,SAAWA,KACX7I,KAAA6S,aAAeA,KACf7S,KAAAoK,WAAaA,MACbpK,KAAAmI,eAAiBA,KACjBnI,KAAA0V,cAAgBA,KAChB1V,KAAA2V,SAAWA,KAMX3V,KAAA4V,aAAc,EAEd5V,KAAAuV,aAAc,EAEdvV,KAAA0U,mBAAoB,EAEpB1U,KAAAuU,sBAAuB,EAEvBvU,KAAA8U,eAAgB,EAIhB9U,KAAA8T,qBAAsB,EAEtB9T,KAAAmU,YAAa,EAMbnU,KAAA0R,eAAgB,EAEhB1R,KAAA0S,eAAuDmD,IAEvD7V,KAAA8Q,eAAiB,iBAEjB9Q,KAAA6R,YAAa,EAEb7R,KAAAqU,4BAA6B,EAE7BrU,KAAA8R,0BAA2B,EAE3B9R,KAAAgS,kBAAmB,EAEnBhS,KAAAkS,gBAAiB,EAEjBlS,KAAAiS,8BAA+B,EAE/BjS,KAAA+R,6BAA8B,EAE9B/R,KAAAqS,gBAAiB,EAEjBrS,KAAAoS,sBAAuB,EAEvBpS,KAAA4K,aAAsC3K,MAAG,IAEzCD,KAAAmS,qBAAwDlS,MAAG,CAAE6V,kBAAkB,IAGxF9V,KAAA+V,iBAA0C,IAAI5S,MAG9CnD,KAAAgW,cAAkD,IAAI7S,MAGtDnD,KAAAiW,cAAmD,IAAI9S,MAGvDnD,KAAAwR,YAAkC,IAAIrO,MAGtCnD,KAAAuR,kBAAwC,IAAIpO,KAQW,CAEvDjD,WACEF,KAAKkW,iBAELlW,KAAKmW,gBAAkBnW,KAAKoW,4BACxBpW,KAAKyV,gBAAgBY,UAAUrW,KAAKoW,6BAA6BhW,QAC/DK,KAAK6V,GAAaC,MAAMC,QAAQF,GAAWA,EAAU,CAACA,KAAS,EAC/DjW,KAAOG,UAAO,EACdU,SAEF2U,IAEJ7V,KAAKoU,kBAAoBpU,KAAKyW,YAAYzW,KAAK2R,QACjD,CAEA+E,YAAYC,MAER,EAACC,MAAOD,EAAQ9E,YAAegF,aAAcF,EAAQ9E,YAAeiF,kBACpE,EAACF,MAAOD,EAAQI,yBAA4BF,aAAcF,EAAQI,yBAA4BD,kBAC9F,EAACF,MAAOD,EAAQhC,gBAAmBkC,aAAcF,EAAQhC,gBAAmBmC,kBAC5E,EAACF,MAAOD,EAAQhF,SAAYkF,aAAcF,EAAQhF,SAAYmF,iBAE9D9W,KAAKkW,gBAET,CAEQO,YAAY9E,GAClB,MAAMkD,EAAYmC,OAAOC,OAAOtF,EAAQkD,WACxC,SAAOT,OAAkBS,EAAU,GAAIA,EAAU,GACnD,CAEQqB,iBACNlW,KAAKkX,kBAAoBlX,KAAKmX,2BAC5BnX,KAAK2R,QACL3R,KAAK6R,WACL7R,KAAK2U,eACL3U,KAAKoX,MAAQ,CAACpX,KAAKoX,OAASpX,KAAK2R,QAAQ1G,OACzCjL,KAAK4K,UAET,CAEQuM,2BACNE,EACAxF,EACA8C,GACA1J,GACAL,MAAsC3K,MAAG,KAEzC,OAAOgL,GAAOxK,IAAK2W,SAEZA,GACH9B,YAAUgC,MACRD,EACAxF,EACA8C,GACA0C,EAAY/B,SAASiC,cACrBH,GACAC,EAAYG,eACZ5M,MAIR,CAEA1D,gBAAgBuQ,GACdzX,KAAKiW,cAAcrS,KAAK6T,EAC1B,CAEArG,qBACEpR,KAAK+V,iBAAiBnS,MACxB,CAEA0N,gBAAgBoG,EAA2BC,GACzC3X,KAAKgW,cAAcpS,KAAK,IACnB8T,EACHC,QAASA,GAEb,CAACtW,SAAArB,KAAA,mBAAAsB,iBAlKUkU,GAAyBrX,MAAAqF,MAAA,EAAAnC,SAAArB,KAAA,UAAA4X,EAAApW,IAAA,MAAzBgU,EAAyB/T,UAAA,4BAAAC,OAAA,CAAAiQ,QAAA,UAAAyF,MAAA,QAAAxB,YAAA,cAAAL,YAAA,cAAAb,kBAAA,oBAAAH,qBAAA,uBAAAO,cAAA,gBAAA/D,oBAAA,sBAAA+C,oBAAA,sBAAAK,WAAA,aAAAiC,4BAAA,8BAAAzB,eAAA,iBAAAjD,cAAA,gBAAAgB,eAAA,iBAAA5B,eAAA,iBAAAe,WAAA,aAAAwC,2BAAA,6BAAAvC,yBAAA,2BAAAE,iBAAA,mBAAAE,eAAA,iBAAAD,6BAAA,+BAAAF,4BAAA,8BAAAM,eAAA,iBAAAD,qBAAA,uBAAAxH,UAAA,YAAAuH,kBAAA,qBAAAzO,QAAA,CAAAqS,iBAAA,mBAAAC,cAAA,gBAAAC,cAAA,gBAAAzE,YAAA,cAAAD,kBAAA,qBAAAsG,SAAA,CAAA1Z,OAAAwD,MAAA,EAAAC,KAAA,GAAAC,OAAA,mvFAAAC,SAAA,SAAAC,EAAAC,IAAA,EAAAD,IDjCtC5D,MAJA,EAAA2Z,EAAA,WAIA3Z,CAJgF,EAAA4Z,EAAA,8BAiB9E5Z,MADF,UACEA,CADsC,uEAQpCA,MAAA,WACEA,MAAA,EAAA6Z,EAAA,kBAsIN7Z,mBA/J6DA,MAAA,OAAA6D,GAAA4T,aAM1DzX,cAAA,OAAAA,MAAA,IAAA6D,GAAAmU,kBAYChY,MAAA,GAIAA,MAJA,QAAA6D,GAAA2T,SAAAsC,QAIA9Z,CAJ0B,aAAA6D,GAAA0T,cAAAwC,QAI1B/Z,CAHoC,sBAAAA,MAAA,0BAGpCA,CAF6D,sBAAAA,MAAA,sBAE7DA,CADyD,sCAUvBA,MAAA,GAAAA,MAAA,UAAA6D,GAAAkV,gECMzB1B,CAAyB,sICrB/B,IAAM2C,EAAe,MAAtB,MAAOA,EAIXpY,YAAoBqY,GAAApY,KAAAoY,SAHZpY,KAAAqY,kBAAqCpY,MAAG,KAGF,CAE9CqY,KAAKC,GACHvY,KAAKuY,WAAaA,EAClBvY,KAAKqY,eAAiBrY,KAAKoY,OAAOhY,QAChCoY,MAAYxY,KAAKuY,aAAU,EAC3BlY,KAAQ4L,MAAewM,MAAUxM,KAAG,EACpCyM,OAEJ,CAEAC,QACE3Y,KAAKoY,OAAOQ,SAASC,kBAAgC,CAAEjZ,IAAKI,KAAKuY,aACnE,CAEAO,mBACE,OAAO9Y,KAAKqY,cACd,CAEAU,iBAAiBC,GACXA,EACFhZ,KAAKoY,OAAOQ,SAASC,cAA4B,CAAEjZ,IAAKI,KAAKuY,WAAY7I,KAAMsJ,KAE/EhZ,KAAK2Y,OAET,CAACtX,SAAArB,KAAA,mBAAAsB,iBA7BU6W,GAAeha,MAAAqF,MAAA,EAAAnC,SAAArB,KAAA,WAAAiZ,EAAAC,IAAA,OAAff,EAAegB,QAAfhB,EAAeiB,mBAAfjB,CAAe,k4BChBrB,IAAKkB,EAAZ,SAAYA,GACVA,SAAAC,IAAA,MACAD,EAAAE,YAAA,cAFUF,CAGZ,CAHA,CAAYA,GAAqB,kKCK/Blb,MAAA,yBAKEA,MAAA,qBAAAwF,GAAAxF,MAAAqb,GAAA,MAAAjX,EAAApE,QAAA,OAAAA,MAAaoE,EAAAkX,SAAA7V,KAAAD,GAAqB,GAElCxF,MAAA,GAEAA,MAAA,GACFA,gCANEA,MADA,QAAAoE,EAAA8G,kBAAAC,QACAnL,CADmC,WAAAoE,EAAAmX,4BAInCvb,cAAA,IAAAoE,EAAAmX,2BAAA,IAAAnX,EAAAoX,2BAAA,MCDG,IAAMvT,EAA+B,MAAtC,MAAOA,EALbrG,cAMWC,KAAAqJ,kBAAoBA,KACpBrJ,KAAAmI,eAAiBA,KAKjBnI,KAAA4Z,yBAA0B,EAGnC5Z,KAAAyZ,SAA8B,IAAItW,MACnC9B,SAAArB,KAAA,mBAAAsB,iBAXY8E,EAA+B,EAAA/E,SAAArB,KAAA,UAAA6Z,EAAArY,IAAA,MAA/B4E,EAA+B3E,UAAA,mCAAAC,OAAA,CAAA+F,MAAA,QAAAkS,2BAAA,6BAAAD,2BAAA,6BAAAE,wBAAA,2BAAAlW,QAAA,CAAA+V,SAAA,YAAAK,mBAAAvb,EAAAoD,MAAA,EAAAC,KAAA,EAAAC,OAAA,2QAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,aDV1C5D,MADF,QACEA,CADG,WAEDA,MAAA,iBACAA,MAAA,WAAuDA,MAAA,GACzDA,UACAA,MAAA,EAAA4b,EAAA,2BAWF5b,eAdmCA,MAAA,GAAAA,MAAA,OAAA6D,EAAAmG,eAAA6R,qBACwB7b,MAAA,GAAAA,MAAA6D,EAAAyF,OAItDtJ,cAAA,OAAA6D,EAAA4X,sECIQxT,CAA+B,6lBCA1CjI,MAAA,UAAuBA,MAAA,mBAAAA,MAAAqb,GAAA,MAAAjX,EAAApE,QAAA,OAAAA,MAASoE,EAAA0X,iBAAArW,OAAuB,GAA4BzF,MAAA,GAAcA,gCAAdA,cAAAoE,EAAA2X,oCAkBzE/b,MAAA,YAIEA,MAAA,GACFA,qCADEA,cAAA,IAAAgc,EAAA3a,WAAA2B,KAAA,gCAuCEhD,MAAA,GACEA,MAAA,+CAIEA,MAAA,mCAEEA,MADF,WACEA,CAD+B,WAE7BA,MAAA,mEAMFA,QACAA,MAAA,WACEA,MAAA,qEAGNA,kFAhBEA,cAAA,gBAAAA,MAAA,IAAAA,MAAA,IAAAoE,EAAA6X,8BAAAD,EAAAlO,MAEkD9N,MAAA,GAAAA,MAAA,cAAAkc,EAAAlc,MAAA,KAAAoE,EAAA+X,WAAA,KAAAD,EAAAxQ,MAG9C1L,MAAA,GAAAA,MAAA,IAAAA,MAAA,MAAAA,MAAA,MAAAA,MAAA,KAAAoE,EAAAgY,qBAAA,UAAApc,MAAA,GAAAqc,EAAAC,EAAA,GAAA1G,WAAA,KAQA5V,MAAA,GAAAA,MAAA,IAAAA,MAAA,MAAAA,MAAA,MAAAA,MAAA,MAAAoE,EAAAgY,qBAAA,gDAjBVpc,MAAA,GACEA,MAAA,EAAAuc,GAAA,sDAAevc,cAAA,OAAAsc,EAAA,+BAqCXtc,MAAA,UACEA,MAAA,+CAKFA,wCALEA,cAAA,IAAAA,MAAA,IAAAA,MAAA,IAAAoE,EAAAoY,+BAAAxc,MAAA,EAAAyc,EAAAC,MAAA,+BAJJ1c,MAAA,GAGEA,MAAA,EAAA2c,GAAA,8DAAO3c,cAAA,OAAA4c,EAAAZ,EAAAlO,gCARX9N,MAAA,uBAIEA,MAAA,8BACAA,MAAA,EAAA6c,EAAA,wCAWF7c,sDAdEA,MAAA,cAAA8c,GAEA9c,cAAA,IAAAA,MAAA,IAAA+c,GAAA,KAEG/c,MAAA,GAAAA,MAAA,OAAAA,MAAA,IAAAoE,EAAA4Y,kEAbPhd,MAAA,GAOEA,MAAA,EAAAid,GAAA,gFAC0Bjd,cAAA,UAAAkd,EAAAlB,EAAAlO,KAAA9N,MAAA,EAAAmd,8BA6BpBnd,MAAA,UAAmEA,MAAA,GAAwBA,wCAAxBA,cAAAod,EAAAxc,MAAAoC,iCAMjEhD,MAAA,YAIEA,MAAA,gHAaFA,yDAbEA,cAAA,IAAAA,MAAA,IAAAA,MAAA,IAAAA,MAAA,IAAAoE,EAAAiZ,cAAA,eAAArd,MAAA,KAAAA,MAAA,4BAAAsd,EAAAtU,SAAA,QAAAhJ,MAAA,GAAAud,EAAAD,EAAA1H,SAAA0H,EAAAhU,OAAAgU,EAAAE,aAAA,WAAAC,EAAAH,EAAAI,kBAAAxM,IAAAuM,IAAA,GAAAH,EAAAK,mBAAAL,EAAAhU,OAAA,gCATJtJ,MAAA,YACEA,MAAA,kBAIAA,MAAA,EAAA4d,GAAA,gCAkBF5d,+BApBIA,cAAA,OAAAoE,EAAA4F,eAAA6T,WAIC7d,cAAA,OAAAA,MAAA,IAAAoE,EAAA0Z,uCA8BD9d,MAAA,GACGA,MAAA,gCAAAA,cAAA,GAAA+d,EAAA,gCAcA/d,MADH,SACGA,CAAA,aAA6BA,MAAA,uBAA6CA,QAC1EA,MAAA,UAAMA,wCADuBA,MAAA,GAAAA,YAAA,IAAAge,EAAAC,kDA3BpCje,MAAA,YACEA,MAAA,kBAIAA,MAAA,YAOEA,MAAA,EAAAke,GAAA,qFAGAle,MAAA,kDAWAA,MAAA,GAAAme,GAAA,eAIAne,MAAA,cAA+BA,MAAA,yBAEnCA,iDA7BIA,cAAA,OAAAoE,EAAA4F,eAAAoU,eAIApe,cAAA,UAAAA,MAAA,GAAAqe,IAAA,MAAAL,EAAAM,aAAA,KAAAN,EAAAM,aAAApM,SAAA,UAAA8L,EAAAM,aAAA,KAAAN,EAAAM,aAAApM,QAAA,IAKelS,cAAA,OAAAA,MAAA,KAAAA,MAAA,IAAAA,MAAA,IAAAoE,EAAAiZ,cAAA,aAGfrd,MAAA,GAAAA,MAAA,IAAAA,MAAA,KAAAA,MAAA,6BAAAge,EAAAhV,SAAA,QAAAhJ,MAAA,GAAAud,EAAAS,EAAApI,SAAAoI,EAAA1U,OAAA0U,EAAAR,aAAA,GAAAQ,EAAAN,WAAAM,EAAAL,mBAAAK,EAAA1U,OAAA,KAWOtJ,MAAA,GAAAA,MAAA,OAAAge,EAAAC,sBAIwBje,MAAA,GAAAA,YAAA,MAAAge,EAAAM,0CAM/Bte,MAFJ,WAEIA,CAF+C,WAE/CA,CAD+B,YAE7BA,MAAA,iEAGNA,mCAHMA,MAAA,GAAAA,MAAA,IAAAA,MAAA,IAAAA,MAAA,IAAAA,MAAA,IAAAoE,EAAAiZ,cAAA,iDAhERrd,MAAA,GA6DEA,MA5DA,EAAAue,EAAA,WA4DAve,CA5DmE,EAAAwe,GAAA,aA4DnExe,CA3DyE,EAAAye,GAAA,eA2DzEze,CAlC8D,EAAA0e,GAAA,gDA1B1D1e,cAAA,OAAAod,EAAAxc,MAAAoC,MAC0ChD,cAAA,UAAAod,EAAAxc,MAAA+d,UAyBR3e,cAAA,UAAAod,EAAAxc,MAAAge,OAkCnB5e,cAAA,WAAAod,EAAAxc,MAAAie,iCA9DvB7e,MAAA,GACEA,MAAA,EAAA8e,GAAA,uEAAkC9e,cAAA,UAAAA,MAAA,IAAA+e,+BAwEpC/e,MAAA,0BAIEA,MAAA,8BACFA,kCADEA,cAAA,IAAAA,MAAA,IAAAgf,GAAA,gCALJhf,MAAA,GACEA,MAAA,EAAAif,GAAA,iFAC0Bjf,cAAA,UAAAkd,EAAAlB,EAAAlO,KAAA9N,MAAA,EAAAkf,gCAlF5Blf,MAAA,4CACEA,MAAA,YACEA,MAAA,mCACAA,MAAA,WACEA,MAAA,kEAEJA,UAEAA,MAAA,GAAAmf,GAAA,4DAuEFnf,QACAA,MAAA,GAAAof,GAAA,8HAhFKpf,MAAA,gBAAAA,MAAA,KAAAA,MAAA,IAAAoE,EAAA6X,8BAAAD,EAAAlO,MAEiD9N,MAAA,GAAAA,MAAA,cAAAqf,EAAArf,MAAA,KAAAoE,EAAA+X,WAAA,KAAAkD,EAAA3T,MAEhD1L,MAAA,GAAAA,MAAA,IAAAA,MAAA,MAAAA,MAAA,KAAAA,MAAA,KAAAoE,EAAAiZ,cAAA,gBAIWrd,MAAA,GAAuEA,MAAvE,OAAAA,MAAA,MAAAA,MAAA,MAAAoE,EAAAkb,iBAAAtD,EAAAlO,KAAuE9N,CAAb,WAAAuf,GAwE5Dvf,MAAA,GAAAA,MAAA,YAAAA,MAAA,MAAAA,MAAA,MAAAoE,EAAA6X,8BAAAD,EAAAlO,iCAaX9N,MAFJ,WAEIA,CAFc,WAEdA,CAD+B,YAE7BA,MAAA,iEAGNA,mCAHMA,MAAA,GAAAA,MAAA,IAAAA,MAAA,IAAAA,MAAA,IAAAA,MAAA,IAAAoE,EAAAiZ,cAAA,iDAQJrd,MAAA,0BAIEA,MAAA,iEACFA,+BADEA,cAAA,IAAAA,MAAA,IAAAA,MAAA,IAAAA,MAAA,IAAAoE,EAAAiZ,cAAA,6DAGArd,MAAA,+IAiBEA,MAAA,sBAAAA,MAAAwf,GAAA,MAAAC,EAAAzf,MAAA,GAAA8I,MAAA1E,EAAApE,QAAA,OAAAA,MAAYoE,EAAAsb,oBAAAja,KAAAga,GAA+B,GAC5Czf,kFAFCA,MAdA,OAAAA,MAAA,UAAA2f,EAAA3D,EAAAlO,KAAA6R,EAAA3D,EAAAlO,IAAA2I,OAAA,mCAcAzW,CAZC,OAAAA,MAAA,GAAA4f,GAAA5f,MAAA,0CAAAA,MAAA,IAAAA,MAAA,IAAAoE,EAAAyb,sBAAA,yCAAAJ,EAAA,QAAAzf,MAAA,KAAAgc,EAAAjF,UAAA+I,SAAA,SAYD9f,CADE,QAAAoE,EAAAiG,YAAAG,sDAvBRxK,MAAA,GACEA,MAAA,EAAA+f,GAAA,+DAMA/f,MAAA,EAAAggB,GAAA,0BAAAhgB,mEAJGA,QAA+DA,MAA/D,OAAAA,MAAA,IAAAA,MAAA,IAAAoE,EAAA6b,qBAAAjE,EAAAlO,KAA+D9N,CAAA,WAAAkgB,8BAJtElgB,MAAA,GACEA,MAAA,EAAAmgB,GAAA,2EAAengB,cAAA,QAAAkd,EAAAlB,EAAAlO,gCAzJnB9N,MAAA,GAEEA,MAAA,EAAAogB,EAAA,0DAuBApgB,MAAA,EAAAqgB,EAAA,0DA+HArgB,MArGA,EAAAsgB,GAAA,2BAAAtgB,MAqGAA,CArG0B,EAAAugB,GAAA,yBAAAvgB,MAqG1BA,CAVwB,GAAAwgB,GAAA,6GA5ITxgB,cAAA,OAAAA,MAAA,IAAAA,MAAA,IAAAoE,EAAAqc,kBAAAzE,EAAAlO,MAwBZ9N,MAAA,GAIfA,MAJe,OAAAkd,EAAAlB,EAAAlO,KAAA9N,MAAA,KAAAA,MAAA,IAAAoE,EAAA6X,8BAAAD,EAAAlO,KAIf9N,CAAA,WAAA0gB,GA0H2B1gB,MAAA,GAAAA,MAAA,OAAAA,MAAA,MAAAoE,EAAAuc,uCAxMnB3gB,MANF,WAMEA,CADD,+CAKGA,MAAA,YACEA,MAAA,wEAEFA,QACAA,MAAA,EAAA4gB,EAAA,cAMF5gB,QACAA,MAAA,kDAIEA,MAAA,gSA2BFA,QACAA,MAAA,aACEA,MAAA,GAAA6gB,GAAA,2CAyLJ7gB,2DA5OEA,MAAA,kBAAAyf,wDAKEzf,cAAA,gBAAAA,MAAA,KAAAA,MAAA,KAAAoE,EAAA0c,cAAA9gB,MAAA,GAAAE,EAAA8b,EAAAlO,OAGE9N,MAAA,GAAAA,MAAA,IAAAA,MAAA,KAAAA,MAAA,KAAAoE,EAAAyb,sBAAA,wCAAAJ,EAAA,OAAAzf,MAAA,KAAAgc,EAAAjF,UAAA+I,SAAA,aAIC9f,MAAA,GAAAA,MAAA,OAAAoE,EAAA2c,gBAAA/E,EAAA3a,YAQHrB,cAAA,gBAAAA,MAAA,MAAAA,MAAA,MAAAoE,EAAA0c,cAAA9gB,MAAA,GAAAE,EAAA8b,EAAAlO,OAGE9N,MAAA,GAwBAA,MAxBA,YAAAA,MAAA,GAAAI,EAAAJ,MAAA,MAAAgc,EAAAjF,UAAA+I,UAAA,IAAA9f,MAAA,MAAAgc,EAAAjF,UAAA+I,SAAA,uBAAA1b,EAAAsS,UAAAsF,EAAAjF,UAAAC,cAAA,KAAA5S,EAAAsS,UAAAsF,EAAAjF,UAAAC,cAAAC,SAAA+E,EAAAjF,UAAAC,aAAA,MAAA5S,EAAAsS,UAAAsF,EAAAjF,UAAAC,cAAA,KAAA5S,EAAAsS,UAAAsF,EAAAjF,UAAAC,cAAAhU,MAwBAhD,CAhBE,UAAAA,MAAA,GAAAI,EAAAJ,MAAA,MAAAgc,EAAA9E,QAAA4I,UAAA,IAAA9f,MAAA,MAAAgc,EAAA9E,QAAA4I,SAAA,uBAAA1b,EAAAsS,UAAAsF,EAAA9E,QAAAF,cAAA,KAAA5S,EAAAsS,UAAAsF,EAAA9E,QAAAF,cAAAC,SAAA+E,EAAA9E,QAAAF,aAAA,MAAA5S,EAAAsS,UAAAsF,EAAA9E,QAAAF,cAAA,KAAA5S,EAAAsS,UAAAsF,EAAA9E,QAAAF,cAAAhU,MAgBFhD,CAPE,WAAAgc,EAAAgF,oBAAAhhB,MAAA,GAAAyU,EAAA,MAAAuH,EAAAiF,iBAAA,KAAAjF,EAAAiF,iBAAAje,MAOFhD,CANuF,QAAAgc,EAAAkF,OAAA,EAMvFlhB,CALkC,WAAAA,MAAA,MAAAA,MAAA,MAAAgc,EAAAmF,WAKlCnhB,CAJyD,QAAAA,MAAA,MAAAA,MAAA,MAAAA,MAAA,MAAAoE,EAAAgd,OAAApF,EAAAlO,MAIzD9N,CAHkE,cAAAA,MAAA,MAAAA,MAAA,MAAAoE,EAAAid,sBAAArF,EAAAlO,KAGlE9N,CAFwE,gBAAAA,MAAA,MAAAA,MAAA,MAAAoE,EAAAkd,wBAAAtF,EAAAlO,KAExE9N,CAD4E,sBAK/DA,MAAA,IAAAA,MAAA,OAAAA,MAAA,MAAAoE,EAAAmd,yDA2LjBvhB,MAAA,0BAMEA,MAAA,8BACFA,wCAJEA,MAAA,QAAAoE,EAAA8G,kBAAAC,SAGAnL,cAAA,IAAAA,MAAA,IAAAwhB,GAAA,gCAPJxhB,MAAA,GACEA,MAAA,EAAAyhB,GAAA,4EACGzhB,cAAA,OAAAA,MAAA,IAAAoE,EAAAsd,+DAnPP1hB,MAAA,GAiPEA,MAhPA,EAAA2hB,GAAA,eAgPA3hB,CA3OC,EAAA4hB,GAAA,6EAJE5hB,cAAA,SAAAoE,EAAAyd,OAAAC,IA+OY9hB,cAAA,WAAAyf,IC5NvB,MAAMsC,EAAkB,CACtB,CAACrX,KAASsX,MAAO,CACf1Y,MAAO,sBACP2Y,YAAa,wCACbC,aAAc,qCACdC,SAAU,6BACVC,KAAM,yBACNC,OAAQ,2BACR,CAACC,KAAuCC,gEACtC,kDACF,CAACD,KAAuCE,wDACtC,kDACF,CAACF,KAAuCG,iEACtC,kDACF,CAACH,KAAuCI,iEACtC,kDACF,CAACJ,KAAuCK,+CACtC,2CACF,CAACL,KAAuCM,oCACtC,mDAEJ,CAAClY,KAASmY,MAAO,CACfvZ,MAAO,sBACP2Y,YAAa,wCACbC,aAAc,mCACdC,SAAU,4BACVC,KAAM,wBACNC,OAAQ,0BACR,CAACC,KAAuCQ,+CACtC,2CAEJ,CAACpY,KAASkD,SAAU,CAClBtE,MAAO,yBACP2Y,YAAa,2CACbC,aAAc,mCACdE,KAAM,wBACNC,OAAQ,0BACRF,SAAU,4BACV,CAACG,KAAuCS,kDACtC,2CAEJ,CAACrY,KAASsY,eAAgB,CACxB1Z,MAAO,8BACP2Y,YAAa,gDACbC,aAAc,wCACdE,KAAM,gCACNC,OAAQ,kCACRF,SAAU,qCAEZ,CAACzX,KAASuY,QAAS,CACjB3Z,MAAO,wBACP2Y,YAAa,0CACbC,aAAc,uCACdC,SAAU,8BACVC,KAAM,0BACNC,OAAQ,4BACR,CAACC,KAAuCY,wDACtC,6CAEJ,CAACxY,KAASyY,OAAQ,CAChB7Z,MAAO,uBACP2Y,YAAa,yCACbC,aAAc,qCACdC,SAAU,6BACVC,KAAM,yBACNC,OAAQ,4BAEV,CAAC3X,KAAS0Y,KAAM,CACd9Z,MAAO,qBACP2Y,YAAa,uCACbC,aAAc,iCACdC,SAAU,2BACVC,KAAM,uBACNC,OAAQ,yBACRgB,iCAAkC,0CAEpC,CAAC3Y,KAASC,MAAO,CACfrB,MAAO,sBACP2Y,YAAa,wCACbC,aAAc,qCACdE,KAAM,yBACNC,OAAQ,2BACRF,SAAU,6BACV,CAACG,KAAuCgB,+CACtC,4CAIAC,EAAyB,CAC7B,CAACC,KAAYC,iBAAkB,CAC7Bna,MAAO,gCACPC,YAAa,wCAUV,IAAM0G,EAAyB,MAAhC,MAAOA,EAgFXrO,YAAoBqY,GAAApY,KAAAoY,SA/EXpY,KAAA6hB,WAAaA,IACb7hB,KAAA8hB,eAAiBA,KACjB9hB,KAAA+S,WAAaA,KACb/S,KAAAwI,YAAcA,KACdxI,KAAA6I,SAAWA,KACX7I,KAAA6S,aAAeA,KACf7S,KAAAqJ,kBAAoBA,KACpBrJ,KAAAmI,eAAiBA,KAM1BnI,KAAA+hB,eAAgB,EAGhB/hB,KAAAgiB,oBAAkF/hB,MAAG,IAerFD,KAAA4R,WAA0C,GAM1C5R,KAAAkf,gBAAiB,EAGjBlf,KAAAiiB,sBAA4DhiB,MAAG,IAG/DD,KAAAkiB,aAAc,EAGdliB,KAAAka,SAAW,GAGXla,KAAAmiB,wCAAoFliB,MAAG,IAGvFD,KAAAoiB,cAAgB,6BAGhBpiB,KAAAia,iBAAuC,IAAI9W,MAG3CnD,KAAAqiB,cAAoC,IAAIlf,MAGxCnD,KAAA6d,oBAA4C,IAAI1a,KAkBF,CAE9CjD,WACEF,KAAKge,qBAAuBhe,KAAKic,UAAU7b,QAAKK,KAAI6hB,OAEpDtiB,KAAK2a,8BAAgC3a,KAAKic,UAAU7b,QAClDK,KAAK0G,MACHmb,MAAqBnb,GACjB,2CACA,8CAIRnH,KAAKmb,sCAAwCnb,KAAKgiB,iBAAiB5hB,QACjEK,KAAK8hB,GACIA,EAAgBC,OAAO,CAACC,EAAKC,KAEhCD,EAAIC,EAAIzW,KAFwByW,EAC9BC,MAAQD,GACIA,EAAIE,UACfviB,OAAOwiB,MACPpiB,IAAKqiB,GAAkCA,EAAE1D,kBACzC/e,OAAQ+e,KAAqB,EAAC2D,MAAyB3D,EAAiBje,KAAMie,EAAiBpe,OAC/FP,IAAK2e,GAAqBA,EAAiBje,MAC3Cd,OAAO2iB,MACPngB,KAAK,OAEE,EAAKkgB,MAAyBL,EAAItD,iBAAiBje,KAAMuhB,EAAItD,iBAAiBpe,WAEpFqO,EADAqT,EAAItD,iBAAiBje,KAGpBshB,GACN,MACJ,EACDvhB,SAEFlB,KAAKsa,SAAWta,KAAKic,UAAU7b,QAAKK,KAAK0G,GAAa8b,KAAevjB,KAAMwjB,GAAMA,EAAE/b,WAAaA,KAChGnH,KAAKwb,cAAgBxb,KAAKic,UAAU7b,QAAKK,KAAK0G,GAAa+Y,EAAgB/Y,KAE3EnH,KAAK4e,kBAAoB5e,KAAKic,UAAU7b,QACtC+iB,KAAWhc,GACDA,IACD0B,KAASkD,QACL/L,KAAKoY,OAAOhY,QACjBgjB,MAAyCjc,IAAQ,EACjD1G,KAAK4iB,MACHC,MAAUD,EAAaE,GACrBA,EAAUljB,OAAQ6iB,GAAMA,EAAE/b,WAAawa,KAAYC,oBACpD,EAEH1gB,UAGF,EAAOjB,MAAG,MAEf,EACDiB,SAGFlB,KAAKua,qBAAuBva,KAAKic,UAAU7b,QACzCK,KAAK0G,GACKA,IACD0B,KAASkD,QACL2V,EAAuBC,KAAYC,iBAEnC,OAKf5hB,KAAK8e,UAAY9e,KAAKic,UAAU7b,QAC9B+iB,KAAWhc,IACT,OAAQA,GACN,KAAK0B,KAASC,KACZ,OAAO9I,KAAKoY,OAAOhY,QAAKojB,SAC1B,KAAK3a,KAASkD,QACZ,OAAO/L,KAAKoY,OAAOhY,QACjBgjB,MAAyCjc,IAAQ,EACjD1G,KAAK4iB,MACHC,MAAUD,EAAaE,GACrBA,EAAUljB,OAAQ6iB,GAAMA,EAAE/b,WAAawa,KAAYC,oBACpD,EAEH1gB,SAEJ,QACE,OAAOlB,KAAKoY,OAAOhY,QAAKgjB,MAAyCjc,IAAQ,EAAGjG,SAChF,IAIJlB,KAAKoa,8BAAgCpa,KAAKgiB,iBAAiB5hB,QACzDK,KAAK8hB,GACIA,EAAgBC,OAAO,CAACiB,EAAKC,KAClCD,EAAIC,EAAczX,KAAE,EAAI0X,MAAoCD,GACrDD,GACN,MAIPzjB,KAAKuf,OAASvf,KAAKgiB,iBAAiB5hB,QAClCK,KAAK8hB,GACIA,EAAgBC,OAAO,CAACiB,EAAKC,KAClCD,EAAIC,EAAczX,KAAE,EAAI2X,MAASF,GAC1BD,GACN,MAIPzjB,KAAKwf,sBAAwBxf,KAAKgiB,iBAAiB5hB,QACjDK,KAAK8hB,GACIA,EAAgBC,OAAO,CAACiB,EAAKC,KAClCD,EAAIC,EAAczX,KAAE,EAAI4X,MAAYH,GAC7BD,GACN,MAIPzjB,KAAKyf,wBAA0Bzf,KAAKgiB,iBAAiB5hB,QACnDK,KAAK8hB,GACIA,EAAgBC,OAAO,CAACiB,EAAKC,KAClCD,EAAIC,EAAczX,KAAE,EAAI6X,KAAcJ,GAC/BD,GACN,MAIPzjB,KAAK0f,+BAA8Bvf,KAAc,CAC/CH,KAAKgiB,iBAAiB5hB,QAAKK,KAAKwK,GAAWA,EAAOxK,IAAI,EAAGwL,QAASA,KAClEjM,KAAKif,cACLjf,KAAKwf,sBACLxf,KAAKmb,sCACLnb,KAAKwb,gBACJpb,QACDK,KAAI,EAAEsjB,EAAaC,EAAcC,EAASC,EAAcC,KAC/CJ,EAAYvB,OAAO,CAACiB,GAAKlR,MAC9B,GAAI0R,EAAQ1R,IACVkR,GAAIlR,IAAc,CAAC4R,GAAe9D,aAAkB,YAAK,GAChD6D,EAAa3R,IACtBkR,GAAIlR,IAAc,CAAC4R,GAAe9D,mBAAe,GACxC2D,EAAazR,KAAeyR,EAAazR,IAAY6R,MAAOC,KAAOA,GAAEC,gBAAiB,CAC/F,MAAMC,GAAgBP,EAAazR,IAChC9R,IAAK4jB,IAAMF,IAAeE,GAAEG,SAC5BnkB,OAAOG,SACPH,OAAO2iB,MACVS,GAAIlR,IAAcgS,GAAc3P,OAAS,EAAI2P,GAAgB,CAAC,qBAChE,CACA,OAAOd,IACN,MACJ,EACDviB,SAGF,MAAMujB,KAAoBtkB,KAAc,CAACH,KAAKiiB,mBAAoBjiB,KAAK8e,YAAY1e,QACjFK,KAAI,EAAEikB,EAAmBpP,KAChB0B,OAAO2N,KAAK,IAAKD,IAAqBlC,OAC3C,CAACoC,EAA0BC,KACzBD,EAAyBC,GAAmBH,EAAkBG,GAAiBxkB,OAC5EykB,IACC,MAAMC,GAA0BzP,EAASuP,GACzC,OACG,CAAClD,KAAY7Y,KAAM6Y,KAAYxB,KAAMwB,KAAYqD,cAAcxY,SAASsY,EAAiB3d,YAK1F4d,IAAyBE,KACtBC,IACCA,GAAgBC,aAAeL,EAAiBK,aAC9CD,GAAgB/d,WAAawa,KAAY7Y,MACzCoc,GAAgBE,UAAYN,EAAiBjJ,YAC7CqJ,GAAgBE,UAAYN,EAAiBM,YAC9C,EATE,GAaNR,GAET,IAAKF,MAKX1kB,KAAKyd,oBAAmBtd,KAAc,CAACH,KAAK8e,UAAW2F,IAAoBrkB,QACzEK,KAAI,EAAE6U,EAAUwH,MACd,MAAMuI,EAAiBrlB,KAAK4R,WAAW4Q,OAAO,CAACC,GAAOxW,MAAIqZ,aAAWC,gBACnE9C,EAAIxW,IAAM,GAAGqZ,MAAaC,KACnB9C,GACN,IACG+C,EAAkB,GACxBxO,cAAOyO,QAAQnQ,GAAUoQ,QAAQ,EAAEnT,EAAYoT,OAC7CA,GACGtlB,OAAQulB,IAAYA,GAAQ7R,SAAW,IAAM6R,GAAQrF,MACrDlgB,OAAQulB,KACC5O,OAAOyO,QAAQ3I,GAAUmI,KAAK,EAAEhZ,GAAI4Z,MAExCtT,IAAetG,IACf4Z,GAAiBZ,KACd/B,IACCA,GAAEiC,aAAeS,GAAQT,YACzBjC,GAAEkC,UAAYQ,GAAQR,SACtBlC,GAAEnP,WAAa6R,GAAQ7R,YAKhC2R,QAASE,KACRJ,EAAgBjT,GAAciT,EAAgBjT,IAAe,GACzDiT,EAAgBjT,GAAYqT,GAAQT,YACtCK,EAAgBjT,GAAYqT,GAAQT,YAAYpI,MAAM+I,KAAKF,IAE3DJ,EAAgBjT,GAAYqT,GAAQT,YAAc,CAChDhkB,KAAMkkB,EAAeO,GAAQT,YAC7BpI,MAAO,CAAC6I,MAGb,GAGL5O,OAAOyO,QAAQ3I,GAAU4I,QAAQ,EAAEnT,EAAYsT,OAC7CA,GACGxlB,OAAQulB,IAAYA,GAAQ7R,SAAW,GACvC2R,QAASE,KACRJ,EAAgBjT,GAAciT,EAAgBjT,IAAe,GACzDiT,EAAgBjT,KAAcqT,GAAQT,YACpCK,EAAgBjT,GAAYqT,GAAQT,YAAYrI,SAClD0I,EAAgBjT,GAAYqT,GAAQT,YAAYrI,SAASgJ,KAAKF,IAE9DJ,EAAgBjT,GAAYqT,GAAQT,YAAYrI,SAAW,CAAC8I,IAG9DJ,EAAgBjT,GAAc,IACzBiT,EAAgBjT,GACnB,CAACqT,GAAQT,YAAa,CAAEhkB,KAAMkkB,EAAeO,GAAQT,YAAarI,SAAU,CAAC8I,OAGlF,GAEEJ,KAIXxlB,KAAK6f,qCAAoC1f,KAAc,CACrDH,KAAKic,UACLjc,KAAK8e,UACL9e,KAAKmiB,uCACJ/hB,QACDC,KAAO,EAAE8G,KAAcA,IAAa0B,KAAS0Y,MAAG,EAChD9gB,KAAI,EAAEslB,EAAGzQ,EAAU0Q,KACVhP,OAAO2N,KAAKqB,IAAsCf,KAAMtN,IAC7D,MAAMsO,EAAcD,EAAoCrO,GACxD,OACEsO,GACA3Q,GACAA,EAASqC,IAAUsN,KAChBW,IAAYA,GAAQze,WAAawa,KAAYuE,cAAgBD,EAAYzZ,SAASoZ,GAAQT,YAAW,GAIxGjF,EAAgBrX,KAAS0Y,KAAKC,sCAC9BnS,GAGV,CAEA2Q,OAAOmG,GACL,OAA4BA,CAC9B,CAAC9kB,SAAArB,KAAA,mBAAAsB,iBAzVU8M,GAAyBjQ,MAAAqF,MAAA,EAAAnC,SAAArB,KAAA,UAAAsN,EAAA9L,IAAA,MAAzB4M,EAAyB3M,UAAA,4BAAAC,OAAA,CAAAua,UAAA,YAAA8F,cAAA,gBAAAC,iBAAA,mBAAA/C,cAAA,gBAAAb,qBAAA,uBAAAgI,eAAA,iBAAAvR,UAAA,YAAAjD,WAAA,aAAAyU,YAAA,cAAAnH,eAAA,iBAAA+C,mBAAA,qBAAAC,YAAA,cAAAhI,SAAA,WAAAiI,qCAAA,uCAAAC,cAAA,iBAAA1e,QAAA,CAAAuW,iBAAA,mBAAAoI,cAAA,gBAAAxE,oBAAA,uBAAAlc,MAAA,GAAAC,KAAA,GAAAC,OAAA,6+EAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDxItC5D,MAAA,0FACEA,MAAA,sBAAAwF,GAAAxF,aAAA6D,EAAA+f,cAAApe,KAAA3B,EAAA+f,cAAApe,IAAA,GAQAxF,MAAA,2BAAU6D,EAAAqgB,cAAAze,MAAoB,GAE9BzF,MAAA,EAAAmoB,GAAA,WAEEnoB,MADF,UACEA,CADiD,WAE/CA,MAAA,EAAAooB,GAAA,uCA4PFpoB,QAEAA,MAAA,mDAKEA,MAAA,kCAAiB6D,EAAAiY,iBAAArW,MAAuB,GAExCzF,MAAA,aAA2BA,MAAA,gCAAoCA,QAC/DA,MAAA,cAA0BA,MAAA,gEAGhCA,qBAtREA,MAAA,OAAA6D,EAAA+f,eAOA5jB,MAJA,QAAAA,MAAA,KAAAA,MAAA,IAAA6D,EAAAgc,sBAAA,kEAIA7f,CADC,YAAAA,MAAA,gCAIGA,MAAA,GAAAA,MAAA,OAAA6D,EAAAkgB,aAG+B/jB,MAAA,GAAAA,MAAA,UAAAA,MAAA,KAAA6D,EAAAggB,mBAiQ/B7jB,MAAA,GACAA,MADA,QAAAA,MAAA,MAAA6D,EAAAogB,eACAjkB,CADyC,WAAA6D,EAAA8f,eAAA0E,MAIdroB,MAAA,GAAAA,MAAA,GAAAA,MAAA,wBACDA,MAAA,GAAAA,YAAA,MAAAA,MAAA,MAAAA,MAAA,MAAA6D,EAAAokB,iBAAA,qMC5InBhY,CAAyB,2LCzHpCjQ,MAAA,YACEA,MAAA,GACFA,8BADEA,cAAA,IAAAoE,EAAAkkB,SAAA,+BAEFtoB,MAAA,YACEA,MAAA,GACFA,8BADEA,cAAA,IAAAoE,EAAAkF,MAAA,8BAEFtJ,MAAA,sCAGEA,MAAA,OAAAoE,EAAA4F,eAAA6T,YCdG,IAAK0K,EAAZ,SAAYA,GACVA,WAAAC,SAAA,cACAD,IAAAE,KAAA,UACAF,IAAAG,MAAA,WACAH,IAAAI,KAAA,UAJUJ,CAKZ,CALA,CAAYA,GAAY,IAOxB,MAAMK,EAAiE,CACrE,CAAEnnB,IAAKonB,KAASC,KAAMloB,MAAO2nB,EAAaG,OAC1C,CAAEjnB,IAAKonB,KAASE,IAAKnoB,MAAO2nB,EAAaI,OAErCK,EAA+D,CACnE,CAAEvnB,IAAKonB,KAASI,KAAMroB,MAAO2nB,EAAaC,UAC1C,CAAE/mB,IAAKonB,KAASlU,MAAO/T,MAAO2nB,EAAaE,OAQtC,IAAMS,EAAiB,MAAxB,MAAOA,EAsBXtnB,YAAoB6lB,GAAA5lB,KAAA4lB,UArBX5lB,KAAAmI,eAAiBA,KAY1BnI,KAAAsnB,cAAe,EAEftnB,KAAAunB,SAAuC,IAAIC,IAC3CxnB,KAAAynB,SAAkC,IAAID,IAiBtCxnB,KAAA0O,MAAQ,IAAY1O,KAAKsW,QAAQ7H,cAAcC,QAO/C1O,KAAA0nB,UAAahQ,GACX1X,KAAK2nB,WACHZ,EAAsBrnB,KAAMkoB,GAAYA,EAAQhoB,SAAQioB,MAAoBnQ,IAC5EA,GAEJ1X,KAAA8nB,QAAWpQ,GACT1X,KAAK2nB,WACHR,EAAoBznB,KAAMqoB,GAAUA,EAAMnoB,SAAQioB,MAAoBnQ,IACtEA,EA1B2C,CAE/CxX,WACEF,KAAKgoB,UAAYhoB,KAAK4lB,QAAQ9M,mBAAmB1Y,QAAKK,KAAKwL,GAAOA,IAAOjM,KAAKgZ,QAC9EhZ,KAAKioB,aAAejoB,KAAKgoB,UAAUjd,UAAWmd,GAAuBloB,KAAKsnB,aAAeY,EAC3F,CAEA1c,cACExL,KAAKioB,gBAAexc,MAAYzL,KAAKioB,aACvC,CAIAE,QAAQzQ,GACN,OAAA1X,KAAKunB,SAASa,KAAKpoB,OAAI,EAChBqoB,MAAgB3Q,EACzB,CAaQiQ,WAAWW,EAA8C5Q,GAC/D,UAAKe,MAAU6P,KAGftoB,KAAKynB,SAASW,KAAKE,EAAKvpB,QAAK,EACtBspB,MAAgB3Q,GACzB,CAACrW,SAAArB,KAAA,mBAAAsB,iBAzDU+lB,GAAiBlpB,MAAAqF,KAAA,EAAAnC,SAAArB,KAAA,UAAA0Q,EAAAlP,IAAA,MAAjB6lB,EAAiB5lB,UAAA,oBAAAmN,UAAA,SAAA7M,EAAAC,MAAA,EAAAD,qsBD/B9B5D,MAAA,mEAYEA,MAFA,iBAAAwF,GAAAxF,aAAAqb,GAAArb,MAAS6D,EAAAmmB,QAAAxkB,GAAe,EAExBxF,CAFyB,mBAAAwF,GAAAxF,aAAAqb,GAAArb,MACd6D,EAAA0lB,UAAA/jB,GAAiB,EAC5BxF,CAD6B,iBAAAwF,GAAAxF,aAAAqb,GAAArb,MACpB6D,EAAA8lB,QAAAnkB,GAAe,GASxBxF,MANA,EAAAoqB,EAAA,aAMApqB,CANiD,EAAAqqB,EAAA,aAMjDrqB,CAHsE,EAAAsqB,EAAA,mBAQxEtqB,cAtBEA,MAAA,sBAAAA,MAAA,KAAA6D,EAAAgmB,uOAWO7pB,MAAA,GAAAA,MAAA,OAAA6D,EAAAykB,UAGAtoB,cAAA,OAAA6D,EAAAyF,QAAAzF,EAAA0mB,SAIJvqB,cAAA,OAAA6D,EAAA0mB,6mCCSQrB,CAAiB,8RCgB1BlpB,MAAA,0CAOEA,MAAA,mBAAAA,MAAAwqB,GAAA,MAAApmB,EAAApE,MAAA,UAAAA,MAASoE,EAAAqmB,oBAAArmB,EAAAsmB,iBAAuC,GAAC,GAAK,GAGtD1qB,MAAA,kBACFA,iCAREA,MAAA,QAAAA,MAAA,IAAAoE,EAAAggB,gBAAAhgB,EAAAsmB,kBAAAjG,UAAA,mDAO+BzkB,MAAA,GAAAA,MAAA,OAAAoE,EAAA4F,eAAA2gB,uCAG/B3qB,MAAA,6CAGEA,MAAA,SAAA4qB,IAAAxmB,EAAAsmB,2DAGJ1qB,MAAA,0CAOEA,MAAA,mBAAAA,MAAAgT,GAAA,MAAA5O,EAAApE,MAAA,UAAAA,MAASoE,EAAAqmB,oBAAArmB,EAAAsmB,iBAAuC,EAAG,GAAE,GAGrD1qB,MAAA,kBACFA,iCAREA,MAAA,QAAAA,MAAA,IAAAoE,EAAAggB,gBAAAhgB,EAAAsmB,kBAAAjG,UAAA,2CAO+BzkB,MAAA,GAAAA,MAAA,OAAAoE,EAAA4F,eAAA6gB,wDA3EnC7qB,MADF,UACEA,CADqH,YACvEA,MAAA,8BAQ5CA,QAEAA,MADF,UACEA,CADoB,iNA+BlBA,MAAA,yBAAAA,MAAAqb,GAAA,MAAAjX,EAAApE,QAAA,OAAAA,MAAeoE,EAAA6E,YAAAxD,OAAkB,GAGrCzF,UAEAA,MAAA,YACEA,MAAA,GAAA8qB,EAAA,gBAYA9qB,MAAA,YACEA,MAAA,GAAA+qB,EAAA,cAKF/qB,QACAA,MAAA,GAAAgrB,EAAA,iBAaJhrB,kCA9EgDA,MAAA,GAAAA,YAAA,2BAAAA,MAAA,GAAAE,EAAAkE,EAAAsmB,iBAAA,EAAAtmB,EAAAsS,UAAAtS,EAAAggB,gBAAAhgB,EAAAsmB,kBAAA3T,UAAAC,cAAAC,SAAA7S,EAAAsS,UAAAtS,EAAAggB,gBAAAhgB,EAAAsmB,kBAAAxT,QAAAF,cAAAC,YAW1CjX,MAAA,GA4BAA,MA5BA,YAAAA,MAAA,GAAAI,EAAAJ,MAAA,KAAAoE,EAAAggB,gBAAAhgB,EAAAsmB,kBAAA3T,UAAA+I,UAAA,IAAA9f,MAAA,KAAAoE,EAAAggB,gBAAAhgB,EAAAsmB,kBAAA3T,UAAA+I,SAAA,iBAAA1b,EAAAsS,UAAAtS,EAAAggB,gBAAAhgB,EAAAsmB,kBAAA3T,UAAAC,cAAAC,SAAA7S,EAAAggB,gBAAAhgB,EAAAsmB,kBAAA3T,UAAAC,aAAA5S,EAAAsS,UAAAtS,EAAAggB,gBAAAhgB,EAAAsmB,kBAAA3T,UAAAC,cAAAhU,MA4BAhD,CApBE,UAAAA,MAAA,GAAAI,EAAAJ,MAAA,KAAAoE,EAAAggB,gBAAAhgB,EAAAsmB,kBAAAxT,QAAA4I,UAAA,IAAA9f,MAAA,KAAAoE,EAAAggB,gBAAAhgB,EAAAsmB,kBAAAxT,QAAA4I,SAAA,iBAAA1b,EAAAsS,UAAAtS,EAAAggB,gBAAAhgB,EAAAsmB,kBAAAxT,QAAAF,cAAAC,SAAA7S,EAAAggB,gBAAAhgB,EAAAsmB,kBAAAxT,QAAAF,aAAA5S,EAAAsS,UAAAtS,EAAAggB,gBAAAhgB,EAAAsmB,kBAAAxT,QAAAF,cAAAhU,MAoBFhD,CAXE,WAAAoE,EAAAggB,gBAAAhgB,EAAAsmB,kBAAA1J,oBAAAhhB,MAAA,GAAAyU,EAAA,MAAArQ,EAAAggB,gBAAAhgB,EAAAsmB,kBAAAzJ,iBAAA,KAAA7c,EAAAggB,gBAAAhgB,EAAAsmB,kBAAAzJ,iBAAAje,MAWFhD,CANC,QAAAoE,EAAAggB,gBAAAhgB,EAAAsmB,kBAAAxJ,OAAA,EAMDlhB,CAL4D,WAAAA,MAAA,MAAAA,MAAA,MAAAoE,EAAAggB,gBAAAhgB,EAAAsmB,kBAAAvJ,WAK5DnhB,CAJ6E,QAAAA,MAAA,MAAAA,MAAA,MAAAoE,EAAA6mB,MAAA7mB,EAAAggB,gBAAAhgB,EAAAsmB,kBAAA5c,KAI7E9N,CAH6E,cAAAA,MAAA,MAAAoE,EAAA8mB,qBAAA9mB,EAAAggB,gBAAAhgB,EAAAsmB,kBAAA5c,IAG7E9N,CAFmF,qBAEnFA,CADwB,sBAAAoE,EAAA+mB,iBASvBnrB,MAAA,IAAAA,MAAA,OAAAoE,EAAAggB,gBAAA3N,OAAA,GAcmBzW,MAAA,GAAAA,MAAA,UAAAoE,EAAAggB,iBAKnBpkB,cAAA,OAAAoE,EAAAggB,gBAAA3N,OAAA,4CA6BDzW,MAAA,0EAYEA,MAAA,sBAAAA,MAAAorB,GAAA,MAAAhnB,EAAApE,MAAA,UAAAA,MAAiC,IAAjCoE,EAAAsmB,kBAAsCtmB,EAAAqmB,oBAAArmB,EAAAsmB,iBAAuC,GAAC,GAAK,GAErF1qB,iCAJEA,MAPA,OAAAA,MAAA,yBAOAA,CAP8C,OAAAA,MAAA,EAAAqc,EAAArc,MAAA,IAAAoE,EAAAggB,gBAAAhgB,EAAAsmB,kBAAAjG,UAAA,mDAO9CzkB,CAFE,QAAAoE,EAAAiG,YAAAE,wBAEFvK,CAD6C,eAAAoE,EAAAsmB,2DAY/C1qB,MAAA,0EAYEA,MAAA,sBAAAA,MAAAmU,GAAA,MAAA/P,EAAApE,MAAA,UAAAA,MAAAoE,EAAAsmB,mBAAAtmB,EAAAggB,gBAAA3N,OAA0D,GAAKrS,EAAAqmB,oBAAArmB,EAAAsmB,iBAAuC,EAAG,GAAE,GAE7G1qB,iCAJEA,MAPA,OAAAA,MAAA,qBAOAA,CAP0C,OAAAA,MAAA,EAAAqc,EAAArc,MAAA,IAAAoE,EAAAggB,gBAAAhgB,EAAAsmB,kBAAAjG,UAAA,2CAO1CzkB,CAFE,QAAAoE,EAAAiG,YAAAE,wBAEFvK,CAD6C,WAAAoE,EAAAsmB,mBAAAtmB,EAAAggB,gBAAA3N,OAAA,4CA7CrDzW,MAAA,wBAWEA,MAAA,yBAAAA,MAAAqrB,GAAA,MAAAjnB,EAAApE,QAAA,OAAAA,MAAeoE,EAAA6E,YAAAxD,OAAkB,GAG/BzF,MADF,WACEA,CADuB,YAErBA,MAAA,EAAAsrB,EAAA,uBAiBItrB,MAFJ,WAEIA,CAFiE,YAEjEA,CADwG,aAC9EA,MAAA,8BAAyCA,QACnEA,MAAA,aAA0BA,MAAA,IAE9BA,YACAA,MAAA,GAAAurB,EAAA,uBAiBNvrB,oCA3CEA,MARA,gBAAAoE,EAAAggB,gBAAAhgB,EAAAsmB,kBAQA1qB,CARmD,QAAAoE,EAAAsS,UAAAtS,EAAAggB,gBAAAhgB,EAAAsmB,kBAAA3T,UAAAC,cAAAC,SAAA,MAAA7S,EAAAsS,UAAAtS,EAAAggB,gBAAAhgB,EAAAsmB,kBAAAxT,QAAAF,cAAAC,SAQnDjX,CAHC,YAAAoE,EAAAsS,UAGD1W,CAFuB,aAAAoE,EAAAqP,WAEvBzT,CADyB,iBAOlBA,MAAA,GAAAA,MAAA,OAAAoE,EAAAggB,gBAAA3N,OAAA,GAgB2BzW,MAAA,GAAAA,YAAA,yBACAA,MAAA,GAAAA,MAAA,GAAAoE,EAAAsmB,iBAAA,QAAAtmB,EAAAggB,gBAAA3N,OAAA,IAI3BzW,cAAA,OAAAoE,EAAAggB,gBAAA3N,OAAA,IClGF,IAAMzG,EAAqC,MAA5C,MAAOA,EANbpO,cAOWC,KAAA2pB,UAAYA,KACZ3pB,KAAA+S,WAAaA,KACb/S,KAAAwI,YAAcA,KACdxI,KAAA4pB,eAAiBA,KACjB5pB,KAAAmI,eAAiBA,KAQ1BnI,KAAA6oB,iBAAmB,EAYnB7oB,KAAA6pB,YAAoC,IAAI1mB,MAGxCnD,KAAAoH,YAAkC,IAAIjE,MAKtCjD,WACEF,KAAKopB,MAAQppB,KAAKuiB,gBAAgBC,OAAO,CAACiB,EAAKC,KAC7CD,EAAIC,EAAczX,KAAE,EAAI2X,MAASF,GAC1BD,GACN,IAEHzjB,KAAKqpB,qBAAuBrpB,KAAKuiB,gBAAgBC,OAAO,CAACiB,EAAKC,KAC5DD,EAAIC,EAAczX,KAAE,EAAI4X,MAAYH,GAC7BD,GACN,GACL,CAEAmF,oBAAoB3hB,EAAe6iB,EAAkBC,EAAY,GAC/D,MAAMC,GACJ/iB,EAAQ,EAAIjH,KAAKuiB,gBAAgB3N,OAAS,EAAI3N,GAASjH,KAAKuiB,gBAAgB3N,OAAS,EAAI3N,EAAQ,EAC7EjH,KAAKuiB,gBAAgByH,IAEzChqB,KAAK6pB,YAAYjmB,KAAKomB,IAIpBD,EA9De,IA+DjB/pB,KAAK4oB,oBAAoBoB,GAAYF,EAAUA,EAAUC,EAAY,EAEzE,CAAC1oB,SAAArB,KAAA,mBAAAsB,iBAzDU6M,EAAqC,EAAA9M,SAAArB,KAAA,UAAAiqB,EAAAzoB,IAAA,MAArC2M,EAAqC1M,UAAA,0CAAAC,OAAA,CAAAwoB,gBAAA,kBAAA3H,gBAAA,kBAAAsG,iBAAA,mBAAAhU,UAAA,YAAAjD,WAAA,aAAA0X,gBAAA,mBAAA5lB,QAAA,CAAAmmB,YAAA,cAAAziB,YAAA,eAAAzF,MAAA,EAAAC,KAAA,EAAAC,OAAA,s5DAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDpBlD5D,MAAA,EAAAgsB,EAAA,gCAiFAhsB,MAAA,EAAAisB,EAAA,mDAjF4EjsB,MAAA,YAAAA,MAAA,IAAA6D,EAAAkoB,kBAkFzE/rB,MAAA,GAAAA,MAAA,YAAAA,MAAA,IAAA6D,EAAAkoB,iZC9DU/b,CAAqC,6NCnBhDhQ,MADF,UACEA,CADgG,WAE9FA,MAAA,iBACFA,QACAA,MAAA,WACEA,MAAA,+CAEJA,gCALkCA,MAAA,GAAAA,MAAA,OAAAuI,EAAAyB,eAAAoB,MAG9BpL,MAAA,GAAAA,MAAA,IAAAA,MAAA,IAAAA,MAAA,IAAAuI,EAAA2jB,qBAAA,MCKG,IAAMC,EAAuB,MAA9B,MAAOA,EALbvqB,cAMWC,KAAAmI,eAAiBA,KAG3B9G,SAAArB,KAAA,mBAAAsB,iBAJYgpB,EAAuB,EAAAjpB,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAAvB8oB,EAAuB7oB,UAAA,0BAAAC,OAAA,CAAA2oB,mBAAA,sBAAA1oB,MAAA,EAAAC,KAAA,EAAAC,OAAA,+MAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDVpC5D,MAAA,EAAAosB,EAAA,oCAAgEpsB,MAAA,OAAAA,MAAA,IAAA6D,EAAAqoB,2FCUnDC,CAAuB,oBCF7B,IAAME,EAAuB,MAA9B,MAAOA,EAAuBnpB,SAAArB,KAAA,mBAAAsB,iBAAvBkpB,EAAuB,EAAAnpB,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAAvBgpB,EAAuB/oB,UAAA,0BAAAC,OAAA,CAAA+oB,MAAA,QAAAhjB,MAAA,QAAAijB,WAAA,cAAA/oB,MAAA,GAAAC,KAAA,EAAAC,OAAA,iNAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,ICPlC5D,MADF,UACEA,CAD2B,YAC6BA,MAAA,uBAAsBA,QAC9EA,MAAA,YAA2DA,MAAA,8BAC7DA,UACAA,MAAA,WACEA,MAAA,8BACFA,eAL0DA,MAAA,GAAAA,YAAA,IAAA6D,EAAAyoB,QACGtsB,MAAA,GAAAA,YAAA,IAAA6D,EAAAyF,QAG3DtJ,MAAA,GAAAA,MAAA,IAAAA,MAAA,IAAA6D,EAAA0oB,YAAA,iCDGWF,CAAuB,kHEPlCrsB,MAAA,iDAGEA,MAAA,kBAAAuI,EAAAikB,mDAaQxsB,MAAA,UAAqCA,MAAA,GAA2BA,wCAA3BA,cAAA,GAAAysB,EAAA7W,SAAA,iCAGnC5V,MADF,SACEA,CADoC,aACPA,MAAA,uBAA+CA,0CAA/CA,MAAA,GAAAA,YAAA,IAAAysB,EAAA9iB,0CAE/B3J,MAAA,aACEA,MAAA,uBAAqCA,wCAArCA,cAAA,IAAAA,MAAA,IAAAysB,EAAA5W,YAAA,+BAPJ7V,MAAA,QACEA,MAAA,EAAA0sB,EAAA,cACC1sB,MAAA,UAAMA,MAAA,GAAkCA,QAIzCA,MAHA,EAAA2sB,EAAA,aAGA3sB,CAHsC,EAAA4sB,EAAA,eAMxC5sB,kCARSA,cAAA,OAAAysB,EAAA7W,SAAA,GACA5V,MAAA,GAAAA,MAAAysB,EAAAzG,aAAA1c,OACAtJ,cAAA,OAAAysB,EAAA9iB,eAGyB3J,cAAA,OAAAysB,EAAA5W,YAAA,WAAA4W,EAAA5W,WAAA,KAAA4W,EAAA5W,WAAA3D,mDAOpClS,MADF,WACEA,CADmE,+CAUjEA,MAAA,sBAAAA,MAAAwqB,GAAA,MAAAjiB,EAAAvI,MAAA,UAAAA,MAAYuI,EAAAskB,iBAAApnB,OAAuB,GAEvCzF,mCAVIA,QAOAA,MAPA,OAAAA,MAAA,EAAAE,GAOAF,CAPmD,OAAAA,MAAA,EAAAI,EAAAmI,EAAAyB,eAAA8iB,aAAAvkB,EAAAmM,aAAAuU,MAOnDjpB,CAFE,QAAAuI,EAAA8B,YAAA0iB,qBAEF/sB,CAD0C,OAAAA,MAAA,gEArB5CA,MAFJ,UAEIA,CAFyC,UAEzCA,CAD6B,WAE3BA,MAAA,EAAAgtB,GAAA,aAWJhtB,UACAA,MAAA,EAAAitB,GAAA,eAaFjtB,+BAzBgCA,MAAA,GAAAA,MAAA,UAAAuI,EAAA2kB,aAYGltB,cAAA,OAAAuI,EAAA4kB,wDArBrCntB,MAAA,GACEA,MAAA,WACEA,MAAA,iBACAA,MAAA,WAAqCA,MAAA,8BACvCA,UAEAA,MAAA,EAAAotB,GAAA,2CAL+BptB,cAAA,cAAAuI,EAAAikB,wBAAA/V,OAAA,GAClBzW,cAAA,OAAAuI,EAAAyB,eAAA6T,WAC0B7d,MAAA,GAAAA,YAAA,kCAGpBA,MAAA,GAAAA,MAAA,OAAAuI,EAAA2kB,YAAAzW,SCWhB,IAAM4W,GAA2B,MAAlC,MAAOA,EANbzrB,cAOWC,KAAA+S,WAAaA,KACb/S,KAAAwI,YAAcA,KACdxI,KAAA6S,aAAeA,KACf7S,KAAAmI,eAAiBA,KAG1BnI,KAAAyrB,YAAa,EAEbzrB,KAAAqrB,YAAiC,GAEjCrrB,KAAA0rB,gBAAqC,GAErC1rB,KAAA2rB,eAAgB,EAGhB3rB,KAAAgrB,iBAAuC,IAAI7nB,MAK3CjD,WACEF,KAAKsrB,6BAA+BtrB,KAAK4rB,mBACzC5rB,KAAK2qB,wBAA0B3qB,KAAK6rB,4BACtC,CAEAnV,YAAYC,KACLA,EAAQ8U,YAAeK,cAAgBnV,EAAQ0U,aAAgBS,eAClE9rB,KAAKsrB,6BAA+BtrB,KAAK4rB,oBAGtCjV,EAAQ+U,iBAAoBI,cAC/B9rB,KAAK2qB,wBAA0B3qB,KAAK6rB,6BAExC,CAEQA,6BACN,OAAO7rB,KAAK0rB,gBAAgBrrB,OAAO,EAAGT,SAAkB,mBAARA,EAClD,CAEQgsB,mBACN,OACE5rB,KAAKyrB,YACLzrB,KAAKqrB,YAAYjH,MACd2H,GAC4B,IAA3BA,EAAUC,cAAwD,IAAjCD,EAAU/X,YAAY3D,SAA2C,IAA3B0b,EAAUE,aAGzF,CAAC5qB,SAAArB,KAAA,mBAAAsB,iBAhDUkqB,EAA2B,EAAAnqB,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAA3BgqB,EAA2B/pB,UAAA,8BAAAC,OAAA,CAAA+pB,WAAA,aAAAJ,YAAA,cAAAK,gBAAA,kBAAAC,cAAA,iBAAAjoB,QAAA,CAAAsnB,iBAAA,oBAAAnT,SAAA,CAAA1Z,OAAAwD,MAAA,EAAAC,KAAA,EAAAC,OAAA,kmBAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDxBxC5D,MAAA,WAOEA,MANA,EAAA+tB,EAAA,6BAMA/tB,CAFC,EAAAguB,EAAA,sBAsCHhuB,eAzCKA,cAAA,OAAA6D,EAAA2oB,wBAAA/V,OAAA,GAKYzW,cAAA,QAAA6D,EAAA2pB,4OCiBJH,CAA2B,yDCnBpCrtB,MAAA,UACEA,MAAA,kDAEFA,4CAFEA,cAAA,IAAAiuB,EAAA,aAAAjuB,MAAA,IAAAA,MAAA,oCAAAkuB,EAAA,SAAAA,GAAA,gCALJluB,MAAA,WAIEA,MAAA,EAAAmuB,EAAA,cAIFnuB,+BAJ6BA,cAAA,UAAAyI,EAAA2lB,KAAApI,aAAAqI,uCAM3BruB,MAAA,iCAGEA,MAAA,cAAAyI,EAAA2lB,KAAApI,aAAAsI,aAAA7lB,EAAA2lB,KAAApI,aAAAuI,WACAvuB,MAAA,YAAAyI,EAAA2lB,KAAApI,aAAAzc,YAAAvJ,iCAGAA,MADF,UACEA,CAD6D,WACrCA,MAAA,8BAAgEA,QACxFA,MAAA,YACFA,+BAF0BA,MAAA,GAAAA,MAAA,GAAAA,MAAA,kDACCA,MAAA,GAAAA,MAAA,YAAAyI,EAAA2lB,KAAApI,aAAAsI,YAAAtuB,kCAGzBA,MADF,WACEA,CADyD,WACrBA,MAAA,8BAAmEA,QACvGA,MAAA,YACFA,+BAFsCA,MAAA,GAAAA,MAAA,GAAAA,MAAA,qDACXA,MAAA,GAAAA,MAAA,YAAAyI,EAAA2lB,KAAApI,aAAAuI,UAAAvuB,kCAvB/BA,MAAA,GACEA,MAAA,EAAAwuB,GAAA,aASAxuB,MAAA,WAWEA,MAVA,EAAAyuB,EAAA,YAUAzuB,CALC,EAAA0uB,EAAA,YAKD1uB,CAJ+D,EAAA2uB,GAAA,aAQjE3uB,sCAvBGA,cAAA,OAAAyI,EAAA2lB,KAAApI,aAAAqI,cAAA5lB,EAAA2lB,KAAApI,aAAAqI,aAAA5X,OAAA,GAWEzW,MAAA,GAAAA,MAAA,OAAAyI,EAAA2lB,KAAApI,aAAAzc,aAIuBvJ,cAAA,OAAAyI,EAAA2lB,KAAApI,aAAAsI,aAIFtuB,cAAA,OAAAyI,EAAA2lB,KAAApI,aAAAuI,YCXrB,IAAMK,GAAoB,MAA3B,MAAOA,EAAoB1rB,SAAArB,KAAA,mBAAAsB,iBAApByrB,EAAoB,EAAA1rB,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAApBurB,EAAoBtrB,UAAA,uBAAAC,OAAA,CAAA6qB,KAAA,QAAA5qB,MAAA,EAAAC,KAAA,EAAAC,OAAA,8iBAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,GDVjC5D,MAAA,EAAA6uB,GAAA,2BAAe7uB,MAAA,YAAAkR,IAAArN,EAAAuqB,uGCUFQ,CAAoB,sQCT/B5uB,MAAA,uCAAYA,MAAA,OAAAuI,EAAA0D,WAAAC,mCAMRlM,MAAA,UAA8DA,MAAA,GAAiBA,6BAAjBA,cAAA8uB,0BAG5D9uB,MAAA,aAAuDA,MAAA,8BAErDA,eAFqDA,oBAAA,sEAMzDA,MAAA,YAKEA,MAAA,uBACFA,mCADEA,cAAA,IAAAA,MAAA,UAAA+uB,EAAAzC,MAAA,KAAAyC,EAAAzC,MAAA3iB,cAAA3J,MAAA,EAAAE,GAAA,MAAA6uB,EAAAzC,MAAA3iB,cAAAuI,SAAA,4BAWJlS,MAAA,6DAGEA,MAAA,WAAAA,MAAA,2CAGFA,MAAA,2GAGEA,MADA,aAAAA,MAAA,IAAAgvB,EAAAxqB,SACAxE,CADmD,eAAAA,MAAA,sDAcnDA,MAAA,eAGEA,MAAA,iBAAAwF,GAAAxF,MAAAorB,GAAA,MAAA2D,EAAA/uB,MAAA,GAAAivB,KAAA1mB,EAAAvI,QAAA,OAAAA,MAASuI,EAAA2mB,iBAAAH,EAAAvpB,GAAiC,GAE1CxF,MAAA,8BACFA,cADEA,cAAA,IAAAA,MAAA,qFAfJA,MAAA,GACEA,MAAA,+CAKEA,MAAA,oBAAAwF,GAAAxF,MAAAqrB,GAAA,MAAA0D,EAAA/uB,MAAA,GAAAivB,KAAA1mB,EAAAvI,QAAA,OAAAA,MAAYuI,EAAA2mB,iBAAAH,EAAAvpB,GAAiC,GAE/CxF,QAEAA,MAAA,EAAAmvB,EAAA,iEAPEnvB,QAEAA,MAFA,OAAAA,MAAA,gDAEAA,CAFqE,OAAAA,MAAA,EAAAI,GAAAmI,EAAAyB,eAAAE,KAAA3B,EAAAmM,aAAAC,OAErE3U,CADoE,OAAAuI,EAAAuM,WAAAsa,MAQnEpvB,MAAA,GAAAA,MAAA,OAAA+uB,EAAAM,mDA3BPrvB,MAAA,SACEA,MAAA,mCAcAA,MAZA,EAAAsvB,EAAA,6BAYAtvB,CARC,EAAAuvB,EAAA,2BAQDvvB,CAFC,EAAAwvB,EAAA,uBAoBHxvB,sDAhCiDA,cAAA,YAAAA,MAAA,IAAAgvB,EAAAS,WAAA,QAAAzvB,OAI/BA,MAAA,GAAAA,MAAA,UAAAgvB,EAAAU,SAKb1vB,cAAA,OAAAgvB,EAAAxqB,SAKYxE,cAAA,OAAA+uB,EAAAY,UAAApnB,EAAAqnB,sDAiCf5vB,MAAA,eAGEA,MAAA,iBAAAwF,GAAAxF,MAAAqU,GAAA,MAAA0a,EAAA/uB,MAAA,GAAAivB,KAAA1mB,EAAAvI,QAAA,OAAAA,MAASuI,EAAAsnB,UAAAd,EAAAvpB,GAA0B,GAEnCxF,MAAA,8BACFA,cADEA,cAAA,IAAAA,MAAA,qFAlBJA,MAAA,GACEA,MAAA,+CAQEA,MAAA,oBAAAwF,GAAAxF,MAAAmU,GAAA,MAAA4a,EAAA/uB,QAAAivB,KAAA1mB,EAAAvI,QAAA,OAAAA,MAAYuI,EAAAunB,WAAAf,EAAAvpB,GAA2B,GAEzCxF,QAEAA,MAAA,EAAA+vB,EAAA,gEAVE/vB,QAKAA,MALA,OAAAA,MAAA,IAAA+uB,EAAAM,wBAAA,wEAKArvB,CAFC,OAAAA,MAAA,EAAAI,GAAAmI,EAAAyB,eAAAE,KAAA3B,EAAAmM,aAAAC,OAED3U,CADoE,OAAAuI,EAAAuM,WAAAsa,MAQnEpvB,MAAA,GAAAA,MAAA,OAAA+uB,EAAAM,mDA3EPrvB,MAAA,GAEIA,MADF,UACEA,CADuF,WAErFA,MAAA,EAAAgwB,GAAA,+BACAhwB,MAAA,YACEA,MAAA,GACAA,MAAA,EAAAiwB,EAAA,cAIJjwB,UACAA,MAAA,WACEA,MAAA,EAAAkwB,EAAA,aAOAlwB,MAAA,YACEA,MAAA,yBAGNA,YAEAA,MAAA,GAAAmwB,EAAA,+BAmCAnwB,MAAA,GAAAowB,EAAA,yEAzDWpwB,MAAA,GAAyCA,MAAzC,OAAAA,MAAA,IAAAuI,EAAA8nB,YAAyCrwB,CAAhB,WAAAswB,GAE9BtwB,MAAA,GAAAA,MAAA,IAAA+uB,EAAArR,WAAA,KACO1d,cAAA,OAAA+uB,EAAAY,SASN3vB,MAAA,GAAAA,MAAA,aAAA+uB,EAAAzC,MAAA,KAAAyC,EAAAzC,MAAA3iB,eAKD3J,MAAA,GAAAA,MAAA,IAAAA,MAAA,YAAA+uB,EAAAzC,MAAA,KAAAyC,EAAAzC,YAAAtsB,MAAA,GAAAE,GAAA,aAAA6uB,EAAAzC,MAAA,KAAAyC,EAAAzC,YAAApa,UAAA,KAKAlS,MAAA,GAA6CA,MAA7C,OAAAA,MAAA,MAAAuI,EAAAgoB,iBAA6CvwB,CAAf,WAAAswB,GAmCrBtwB,MAAA,GAAAA,MAAA,QAAA+uB,EAAAY,UAAApnB,EAAAqnB,cCxCV,IAAMY,GAAoB,MAA3B,MAAOA,EAuCX5uB,YACU0V,EACAmZ,GADA5uB,KAAAyV,kBACAzV,KAAA4uB,iBAxCM5uB,KAAAoK,WAAaA,KACbpK,KAAAuH,YAAcA,KACdvH,KAAA6S,aAAeA,KACf7S,KAAAiT,WAAaA,KACbjT,KAAAmI,eAAiBA,KAMjCnI,KAAA+tB,aAAc,EAOd/tB,KAAA6uB,wBAA8C,IAAI1rB,MAOlDnD,KAAA8uB,aAA0C,IAAI3rB,MAO9CnD,KAAA+uB,YAAyC,IAAI5rB,MAK7CnD,KAAAgvB,wBAA0B,IAAIvkB,KAK3B,CAEHvK,WACEF,KAAK0uB,gBAAkB1uB,KAAKivB,aAAa7uB,QACvCqP,OAAYyT,GAAmBA,EAAEgM,WAAQ,EACzCxW,SAAoB,EACpByK,MAAW+L,GAAqBlvB,KAAKyV,gBAAgBY,UAAU,CAAC,YAAa6Y,MAAU,EACvFzuB,MAAK0uB,GAAkBA,GAAUC,MAAG,EACpCjM,MAAWiM,MACT3W,OAAU2W,GACNpvB,KAAK4uB,eAAeS,gBAAgCD,GAAKhvB,QAAKU,MAAU,QAAuB,EAC/Fb,OAAG,MAAqB,EAE9BiB,UAGFlB,KAAKwuB,WAAaxuB,KAAK0uB,gBAAgBtuB,QACrC+iB,MAAWmM,IACJA,GAAKA,EAAEC,eACHtvB,OAAGqvB,GAAGC,aAERvvB,KAAKivB,aAAa7uB,QAAKK,MAAKyiB,GAAMA,EAAEgM,aAI/ClvB,KAAKwvB,uBAAsBC,MACzBzvB,KAAKivB,aAAa7uB,QAAKsvB,MA5EM,MA6E7B1vB,KAAK0uB,gBAAgBtuB,QAAKC,MAAOG,WAGnCR,KAAKgvB,wBAAwBrkB,IAC3B3K,KAAKwvB,oBAAoBzkB,UAAU,KACjC/K,KAAK6uB,wBAAwBjrB,MAAI,GAGvC,CAEA4H,eACEC,SAAYzL,KAAKgvB,wBACnB,CAEAf,WAAW0B,EAAsBjY,IAC/B2Q,SAAgB3Q,GAChB1X,KAAK8uB,aAAalrB,KAAK+rB,EACzB,CAEA3B,UAAU2B,EAAsBjY,IAC9B2Q,SAAgB3Q,GAChB1X,KAAK+uB,YAAYnrB,KAAK+rB,EACxB,CAEAtC,iBAAiBsC,EAAsBjY,EAAckY,GAAiB,GACpE,OAAID,EAAQnC,0BAA4BmC,EAAQxK,YAAeyK,EAG7D5vB,KAAK8uB,aAAalrB,KAAK+rB,GAFvB3vB,KAAK+uB,YAAYnrB,KAAK+rB,IAEQ,EAEzBtH,OAAgB3Q,EACzB,CAACrW,SAAArB,KAAA,mBAAAsB,iBApGUqtB,GAAoBxwB,MAAAqF,MAAArF,MAAA2G,OAAA,EAAAzD,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAApBmtB,EAAoBltB,UAAA,uBAAAC,OAAA,CAAAutB,aAAA,eAAAlB,YAAA,eAAArqB,QAAA,CAAAmrB,wBAAA,0BAAAC,aAAA,eAAAC,YAAA,eAAAptB,MAAA,EAAAC,KAAA,EAAAC,OAAA,slCAAAC,SAAA,SAAAC,EAAAC,MAAA,EAAAD,IDpBjC5D,MAJA,EAAA0xB,GAAA,yBAAA1xB,MAIAA,CAJsB,EAAA2xB,EAAA,gEAIP3xB,MAAA,GAAuCA,MAAvC,OAAAA,MAAA,IAAA6D,EAAAitB,cAAuC9wB,CAAZ,WAAAswB,qrBCoB7BE,CAAoB,qECd1B,IAAMoB,GAAsB,MAA7B,MAAOA,EALbhwB,cAMWC,KAAAmI,eAAiBA,KAI1BnI,KAAAgwB,MAAO,EAGP9vB,WACEF,KAAKiM,MAAKgkB,OACZ,CAAC5uB,SAAArB,KAAA,mBAAAsB,iBAVUyuB,EAAsB,EAAA1uB,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAAtBuuB,EAAsBtuB,UAAA,yBAAAC,OAAA,CAAA+F,MAAA,SAAAqS,mBAAAzb,GAAAsD,MAAA,EAAAC,KAAA,GAAAC,OAAA,sOAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,YCTjC5D,MADF,UACEA,CADoD,cAMlDA,MAAA,0BAAA6D,EAAAguB,MAAAhuB,EAAAguB,IAAA,GAEA7xB,MAAA,GACAA,MAAA,iBAKFA,QAGEA,MADF,kBACEA,CADkH,WAEhHA,MAAA,GAGNA,mBAlBIA,wHAKAA,cAAA,IAAA6D,EAAAyF,MAAA,KAGEtJ,cAAA,gBAAA6D,EAAAguB,MACA7xB,MAAA,OAAA6D,EAAAmG,eAAA+nB,cAIS/xB,QAA8DA,MAA9D,OAAA6D,EAAAguB,KAA8D7xB,CAAjD,yCAAA6D,EAAAiK,GAAiD9N,CAAD,kCAAA6D,EAAAiK,iDDN/D8jB,CAAsB,2UETjC5xB,MAAA,yCAAaA,MAAA,aAAAoE,EAAA4tB,YAAA9lB,mCAoBXlM,MAAA,aAKEA,MAAA,8BAMAA,MAAA,aACEA,MAAA,GAEJA,uDATEA,cAAA,IAAAA,MAAA,IAAAiyB,EAAAC,mBAAA,+IAOElyB,MAAA,GAAAA,MAAA,IAAAiyB,EAAAE,mBAAArkB,GAAA,gCA5BN9N,MAAA,qDAUEA,MAAA,aAA+FA,MAAA,8BAK7FA,QACFA,MAAA,EAAAoyB,GAAA,eAeFpyB,+CA5BEA,MAAA,QAAAA,MAAA,IAAAiyB,EAAAI,QAAA,4HAO+FryB,MAAA,GAAAA,YAAA,IAAAiyB,EAAAI,QAAA,4IAO5FryB,MAAA,GAAAA,MAAA,OAAAiyB,EAAAI,oCAsBLryB,MAAA,GACEA,MAAA,0BAKEA,MAAA,8BACFA,sCAHEA,cAAA,QAAAoE,EAAA8G,kBAAAE,MAEApL,cAAA,IAAAA,MAAA,kGAYAA,MAAA,YAIEA,MAAA,6CAKAA,MAAA,WACEA,MAAA,8BACFA,QACAA,MAAA,OAAGA,MAAA,8BAA4DA,QAC/DA,MAAA,gDAGEA,MAAA,sBAAAA,MAAAsyB,GAAA,MAAAluB,EAAApE,MAAA,UAAAA,MAAYoE,EAAAmuB,aAAA9sB,KAAArB,EAAAgO,QAAyB,GAEzCpS,mCAXIA,cAAA,OAAAoE,EAAA4F,eAAAwoB,yEAGAxyB,MAAA,GAAAA,MAAA,IAAAA,MAAA,6CAECA,MAAA,GAAAA,YAAA,2CAGDA,MAAA,GAAAA,MAAA,OAAAA,MAAA,6DAYIA,MAAA,WAIEA,MAAA,8BACFA,wCADEA,cAAA,IAAAA,MAAA,IAAAyyB,EAAAhxB,KAAA,gCAEFzB,MAAA,OACEA,MAAA,8BACFA,wCADEA,cAAA,IAAAA,MAAA,IAAAyyB,EAAApM,OAAA5kB,IAAAgxB,EAAApM,OAAA9U,MAAA,gCARJvR,MAAA,GACEA,MAAA,EAAA0yB,GAAA,8CAMA1yB,MAAA,EAAA2yB,GAAA,uEAJG3yB,QAAgDA,MAAhD,OAAAA,MAAA,IAAAyyB,EAAAhxB,KAAgDzB,CAAA,WAAA4yB,GAI/C5yB,MAAA,GAAAA,MAAA,OAAAyyB,EAAApM,mCARRrmB,MAAA,GACEA,MAAA,EAAA6yB,GAAA,oDAAuC7yB,cAAA,UAAA8yB,2BAavC9yB,MAAA,WACEA,MAAA,8BACFA,eADEA,cAAA,IAAAA,MAAA,sDAKJA,MAAA,6BAAAA,MAAA,EAAA+yB,GAAA,0EAGmB/yB,MAFhB,mBAAAgzB,EAEgBhzB,CAAA,0BAAAA,MAAA,EAAAI,EAAAJ,MAAA,IAAAoE,EAAA6uB,sDA7BvBjzB,MAAA,GACEA,MAAA,YACEA,MAAA,oCAIAA,MAAA,EAAAkzB,GAAA,uCAaAlzB,MAAA,EAAAmzB,GAAA,yBAAAnzB,OAKFA,QACAA,MAAA,EAAAozB,GAAA,0EArBIpzB,MAAA,GAAAA,MAAA,4BAAAoE,EAAAivB,kBAAA,+DAEarzB,MAAA,GAAAA,MAAA,OAAAA,MAAA,IAAAoE,EAAAkvB,0BAmBjBtzB,MAAA,GAAAA,MAAA,OAAAuzB,EAAAvzB,MAAA,KAAAoE,EAAA6uB,2BAAAM,EAAAC,WAAA,iCAUAxzB,MAAA,0BAKEA,MAAA,8BACFA,+BAJEA,MAAA,WAAAoE,EAAA4F,eAAA6T,WAGA7d,cAAA,IAAAA,MAAA,6EAEFA,MAAA,0BAKEA,MAAA,8BACFA,+BAJEA,MAAA,WAAAoE,EAAA4F,eAAA6T,WAGA7d,cAAA,IAAAA,MAAA,gGAYAA,MAAA,gDAGEA,MAAA,yBAAAwF,GAAAxF,MAAAwU,GAAA,MAAApQ,EAAApE,MAAA,UAAAA,MAAiBoE,EAAAqvB,eAAAjuB,GAAsB,GACxCxF,iCAFCA,MADA,0BACAA,CAD2B,SAAAA,MAAA,IAAAoE,EAAAsvB,0CAO7B1zB,MAAA,+CAAoDA,MAAlC,iBAAAoE,EAAAuvB,eAAkC3zB,CAAD,MAAAoE,EAAAwvB,sDAGrD5zB,MAAA,+BAKEA,MAAA,wBAAAwF,GAAAxF,MAAAoV,GAAA,MAAAhR,EAAApE,MAAA,UAAAA,MAAgBoE,EAAAyvB,aAAAruB,GAAoB,GACrCxF,iCAFCA,MAFA,SAAAoE,EAAAgO,OAEApS,CAFiB,cAAAoE,EAAA0vB,sBAEjB9zB,CADqC,iBAAAoE,EAAA2vB,eAAAC,0DAyCrCh0B,MAAA,8BAMEA,MADA,oBAAAwF,GAAAxF,MAAAi0B,GAAA,MAAA7vB,EAAApE,MAAA,UAAAA,MAAYoE,EAAA8vB,SAAA1uB,GAAgB,EAC5BxF,CAD6B,8BAAAwF,GAAAxF,MAAAi0B,GAAA,MAAA7vB,EAAApE,MAAA,UAAAA,MACPoE,EAAA+vB,cAAA3uB,GAAqB,GAC5CxF,iCAHCA,MAFA,SAAAoE,EAAAgO,OAEApS,CAFiB,iBAAAoE,EAAAgwB,uBAEjBp0B,CADyC,iBAAAoE,EAAAiwB,2CAS3Cr0B,MAAA,aACEA,MAAA,GACFA,+BADEA,cAAA,IAAAoE,EAAAgO,OAAAkiB,SAAAtxB,KAAA,+CAEFhD,MAAA,aACGA,MAAA,8BACDA,MAAA,oDAOEA,MAAA,sBAAAA,MAAAu0B,GAAA,MAAAnwB,EAAApE,MAAA,UAAAA,MAAYoE,EAAAowB,oBAAmB,GAGnCx0B,mCAXGA,cAAA,GAAAA,MAAA,iBAAAoE,EAAAgO,OAAAkiB,SAAAzxB,MAAA,KAAAuB,EAAAgO,OAAAkiB,SAAAzxB,KAAA,MAGC7C,MAAA,GAGAA,MAHA,OAAAA,MAAA,GAAAyU,GAAArQ,EAAA4F,eAAAoB,MAGApL,CAHsC,QAAAoE,EAAAqwB,gBAAAjqB,0BAGtCxK,CAFmD,OAAAoE,EAAAswB,eAAAC,MAEnD30B,CAD6B,OAAAA,MAAA,GAAAqc,GAAArc,MAAA,4DArGrCA,MAAA,GACEA,MAAA,EAAA40B,GAAA,6CAOA50B,MAAA,EAAA60B,GAAA,6CAQA70B,MAAA,4BAKEA,MADA,qBAAAwF,GAAAxF,MAAAqU,GAAA,MAAAjQ,EAAApE,MAAA,UAAAA,MAAaoE,EAAA0wB,gBAAAtvB,GAAuB,EACpCxF,CADqC,8BAAAwF,GAAAxF,MAAAqU,GAAA,MAAAjQ,EAAApE,MAAA,UAAAA,MACfoE,EAAA0rB,WAAAtqB,GAAkB,GACzCxF,QAcDA,MAZA,EAAA+0B,GAAA,gCAYA/0B,CAZsB,EAAAg1B,GAAA,0BAYtBh1B,CAJsB,EAAAi1B,GAAA,iCAapBj1B,MADF,WACEA,CADoB,sDASlBA,MAAA,sBAAAA,MAAAqU,GAAA,MAAAjQ,EAAApE,MAAA,UAAAA,MAAYoE,EAAA+vB,cAAc,SAAQ,GAEpCn0B,QACAA,MAAA,6DAQEA,MAFA,0BAAAwF,GAAAxF,MAAAqU,GAAA,MAAAjQ,EAAApE,MAAA,UAAAA,MAAkBoE,EAAA8wB,oBAAA1vB,GAA2B,EAE7CxF,CAF8C,sBAAAwF,GAAAxF,MAAAqU,GAAA,MAAAjQ,EAAApE,MAAA,UAAAA,MAChCoE,EAAA0rB,WAAAtqB,GAAkB,EAChCxF,CADiC,gCAAAwF,GAAAxF,MAAAqU,GAAA,MAAAjQ,EAAApE,MAAA,UAAAA,MAAAoE,EAAAiwB,eAAA7uB,EAAA,GAElCxF,QACDA,MAAA,sDAQEA,MAAA,sBAAAA,MAAAqU,GAAA,MAAAjQ,EAAApE,MAAA,UAAAA,MAAYoE,EAAA+vB,cAAc,QAAO,GAGrCn0B,UAEAA,MAAA,aACEA,MAAA,GAAAm1B,GAAA,oEAQFn1B,QAGEA,MADF,YACEA,CADsD,SAClDA,MAAA,gCAA+CA,QAInDA,MAHA,GAAAo1B,GAAA,cAGAp1B,CAHoD,GAAAq1B,GAAA,gBAgBtDr1B,yCA1GGA,cAAA,OAAAA,MAAA,KAAAoE,EAAAkxB,oBAOAt1B,MAAA,GAAAA,MAAA,OAAAA,MAAA,KAAAoE,EAAAmxB,wBAQDv1B,MAAA,GAEAA,MAFA,cAAAoE,EAAA0vB,sBAEA9zB,CAFqC,SAAAoE,EAAAgO,OAErCpS,CADiB,gBAAAoE,EAAAoxB,eAMnBx1B,cAAAoE,EAAAqxB,eAAA,MAQAz1B,cAAAoE,EAAAuvB,eAAA,MAKG3zB,cAAA,aAAAoE,EAAA2vB,eAAA,KAAA3vB,EAAA2vB,eAAAC,gBAWCh0B,MAAA,GAIAA,MAJA,WAAAoE,EAAAsxB,UAIA11B,CAJsB,OAAAA,MAAA,GAAAyU,GAAArQ,EAAA4F,eAAA2rB,YAItB31B,CAH4C,QAAAoE,EAAAqwB,gBAAAlqB,wBAG5CvK,CAFiD,OAAAoE,EAAAswB,eAAAkB,MAEjD51B,CAD6B,OAAAA,MAAA,GAAAqc,GAAArc,MAAA,6BAO7BA,MAAA,GAGAA,MAHA,SAAAoE,EAAAgO,OAGApS,CAHiB,cAAAoE,EAAA0vB,sBAGjB9zB,CAFqC,uBAAAA,MAAA,mCAErCA,CADsE,gBAAAoE,EAAAoxB,eAStEx1B,MAAA,GAIAA,MAJA,WAAAoE,EAAAyxB,QAIA71B,CAJoB,OAAAA,MAAA,GAAAyU,GAAArQ,EAAA4F,eAAAC,aAIpBjK,CAH6C,QAAAoE,EAAAqwB,gBAAAlqB,wBAG7CvK,CAFiD,OAAAoE,EAAAswB,eAAAkB,MAEjD51B,CAD6B,OAAAA,MAAA,GAAAqc,GAAArc,MAAA,yBAS5BA,MAAA,GAAAA,MAAA,OAAAA,MAAA,MAAAoE,EAAAgO,OAAA0jB,kBAAA1xB,EAAA2xB,cAAA5rB,IAAAnK,MAAA,MAAAoE,EAAAgwB,yBAUCp0B,MAAA,GAAAA,YAAA,gCACuBA,MAAA,GAAAA,MAAA,OAAAoE,EAAA4xB,mBAGpBh2B,cAAA,QAAAoE,EAAA4xB,8CA5Jbh2B,MAAA,GAQEA,MAAA,EAAAi2B,GAAA,iCAmBAj2B,MAAA,EAAAk2B,GAAA,yCAkCAl2B,MAAA,EAAAm2B,GAAA,yCA+GAn2B,MAAA,6DAnKGA,cAAA,OAAAA,MAAA,IAAAoE,EAAAgO,OAAA0jB,kBAAA1xB,EAAA2xB,cAAAK,YAkBYp2B,MAAA,GAAAA,MAAA,OAAAA,MAAA,IAAAoE,EAAAgO,OAAA0jB,kBAAA1xB,EAAA2xB,cAAAM,oBAkCAr2B,MAAA,GAAAA,MAAA,OAAAA,MAAA,IAAAoE,EAAAgO,OAAA0jB,kBAAA1xB,EAAA2xB,cAAA5rB,+BA9DnBnK,MAAA,GACEA,MAAA,EAAAs2B,GAAA,0IACGt2B,QAIUA,MAJV,OAAAA,MAAA,IAAAoE,EAAAgO,OAAA0jB,kBAAA1xB,EAAA2xB,cAAA5rB,KAAA,OAAAosB,EAAAv2B,MAAA,IAAAoE,EAAA0vB,wBAAA,KAAAyC,EAAA9f,SAAAzW,MAAA,IAAAoE,EAAAgO,OAAA0jB,kBAAA1xB,EAAA2xB,cAAAM,oBAAAr2B,MAAA,IAAAoE,EAAAgO,OAAA0jB,kBAAA1xB,EAAA2xB,cAAAK,WAIUp2B,CAAA,WAAAw2B,6CAyLbx2B,MADF,WACEA,CADuD,0EAOrDA,MAAA,sBAAAA,MAAAy2B,GAAA,MAAAryB,EAAApE,QAAA,OAAAA,MAAAoE,EAAAsyB,kBAA+B,EAAK,GACrC12B,QACDA,MAAA,0EAIEA,MAAA,4BAAA22B,EAAA32B,MAAAy2B,GAAAxH,KAAA7qB,EAAApE,QAAA,OAAAA,MAAYoE,EAAAwyB,mBAAAD,EAAA3P,WAAA2P,EAAAjZ,YAAkE,GAElF1d,kCAXIA,QAEAA,MAFA,OAAAA,MAAA,sBAEAA,CAF2C,QAAAoE,EAAAiG,YAAAE,wBAE3CvK,CAD6C,OAAAA,MAAA,GAAAmd,GAAAnd,MAAA,wBAM7CA,MAAA,GACAA,MADA,OAAAA,MAAA,sDACAA,CAD2E,OAAAA,MAAA,GAAAmd,GAAAnd,MAAA,mGAOjFA,MAAA,mBAAYA,MAAA,sBAAAwF,GAAAxF,MAAAwf,GAAA,MAAApb,EAAApE,qBAAAoE,EAAAyyB,kBAAArxB,KAAApB,EAAAyyB,kBAAArxB,GAAAxF,MAAAwF,EAAA,GACVxF,MAAA,YACEA,MAAA,6BAEJA,kCAJYA,MAAA,OAAAoE,EAAAyyB,mBAA6B72B,MAAA,QAAAoE,EAAAgO,OAAAkiB,SAAAtxB,MAEfhD,MAAA,GAAAA,MAAA,YAAAoE,EAAA0yB,+BC3KnB,IAAMC,GAAoB,MAA3B,MAAOA,EAwDXn1B,YACU0V,EACA0f,EACAC,EACAC,EACA9qB,EACA+qB,EACAC,GACAnd,IAPApY,KAAAyV,kBACAzV,KAAAm1B,kBACAn1B,KAAAo1B,gBACAp1B,KAAAq1B,mBACAr1B,KAAAuK,aACAvK,KAAAs1B,eACAt1B,KAAAu1B,qBACAv1B,KAAAoY,UA/DDpY,KAAA8hB,eAAiBA,KACjB9hB,KAAA+S,WAAaA,KACb/S,KAAAwI,YAAcA,KACdxI,KAAA6I,SAAWA,MACX7I,KAAA6yB,eAAiBA,KACjB7yB,KAAA4yB,gBAAkBA,KAClB5yB,KAAA6S,aAAeA,KACf7S,KAAAmwB,YAAcA,KACdnwB,KAAAoD,aAAeA,KACfpD,KAAAk0B,cAAgBA,MAChBl0B,KAAAmI,eAAiBA,KACjBnI,KAAAqJ,kBAAoBA,KAQpBrJ,KAAAif,iBAAuDhf,OAAG,IAC1DD,KAAAw1B,eAAgB,EAChBx1B,KAAAy1B,8BAA+B,EAC/Bz1B,KAAA01B,mBAAsCz1B,YAAGoP,GAGxCrP,KAAA21B,YAA6C,IAAIxyB,MACjDnD,KAAA41B,eAAuC,IAAIzyB,MAC3CnD,KAAA0wB,aAAyD,IAAIvtB,MAC7DnD,KAAA61B,mBAA4C,IAAI1yB,MAI1DnD,KAAAwK,cAA8B,IAAIC,MAClCzK,KAAAiyB,sBAA4D,IAAI6D,KAAgB,IAChF91B,KAAAivB,aAAqC,IAAI8G,KAA2B,GAEpE/1B,KAAAuyB,uBAA8D,IAAIuD,UAAgBzmB,GAIlFrP,KAAA6zB,WAAY,EACZ7zB,KAAAg0B,SAAU,EAEVh0B,KAAA60B,kBAAmB,EACnB70B,KAAAg1B,mBAAoB,EACpBh1B,KAAAi1B,6BAAyE,IAAIa,UAAgBzmB,GAC7FrP,KAAAwyB,eAAiB,EACjBxyB,KAAAm0B,mBAAoB,EAEpBn0B,KAAAg2B,QAA8C,IAAIF,KAAmC,MAIrF91B,KAAA4zB,gBAAiB,CAWd,CAEH1zB,WACEF,KAAKwxB,qBAAoByE,OAAgBj2B,KAAKuQ,OAAO6O,iBAAiBpe,MAEtEhB,KAAKwK,cAAcG,OACjBxK,MAAc,CAACH,KAAKk2B,YAAal2B,KAAKm2B,gBAAiBn2B,KAAKuQ,OAAO6lB,WAChEh2B,QACC0K,MAAK,IAAC,EACNqY,MAAU,EAAEvR,EAAY4R,EAAgB6S,KAC/Br2B,KAAK01B,gBAAgBt1B,QAC1BsY,SAAoB,EACpBjY,MAAK61B,GACI,CAAC1kB,EAAY4R,EAAgB6S,EAASC,OAUpDvrB,UAAU,EAAE6G,EAAY4R,EAAgB6S,EAASC,MAChDt2B,KAAKiyB,sBAAsB7J,KAAKpoB,KAAKu2B,cAAc3kB,EAAY4R,EAAgB6S,EAASC,GAAe,IAI7Gt2B,KAAKw2B,kBAAoBx2B,KAAKiyB,sBAAsB7xB,QAClDq2B,MAAez2B,KAAKyV,gBAAgBY,UAAU,iBAAc,EAC5D5V,MAAI,EAAEmR,EAAY8kB,KAAS9kB,EAAWnR,IAAKk2B,KAAS53B,MAAO43B,EAAE1qB,GAAI9K,KAAMnB,KAAK42B,oBAAoBD,EAAGD,QAGrG12B,KAAK6xB,cAAgB7xB,KAAKiyB,sBAAsB7xB,QAC9CK,MAAKmR,KACqBA,EAAWlS,KAAMm3B,GAAcA,EAAUC,SACvCC,eAC3B,EACDre,SAGF1Y,KAAK4zB,eAAiB5zB,KAAKo1B,cAAc4B,IAAIC,kCAE7Cj3B,KAAKwK,cAAcG,IACjB3K,KAAKuQ,OAAO6lB,SAASrrB,UAAWsrB,IAC9Br2B,KAAKm0B,kBAAoBkC,EAAQa,WAGjC3oB,WAAW,KACT,MAAM4oB,EAAYn3B,KAAKkyB,gBAAgBC,gBAAgB1jB,cACvDzO,KAAKuyB,uBAAuBnK,KAAK+O,GAAWC,aAC5Cp3B,KAAKu1B,kBAAkB8B,eAAa,EACnC,EAAC,IAIRr3B,KAAKwK,cAAcG,OACjBxK,MAAc,CACZH,KAAKiyB,sBACLjyB,KAAKs3B,gBAAgBl3B,QAAKsvB,MA3IO,MA4IjC1vB,KAAKuQ,OAAO0jB,eACZj0B,KAAKu3B,iBACLv3B,KAAKw3B,eAEJp3B,QACCC,MACE,EAAEo3B,EAAMX,EAAQY,EAAeC,EAAeC,KAAYd,GAAUY,IAAkBxD,MAAc5rB,KAAE,EAExGwC,MAAK,IAAC,EACNrK,MAAI,EAAEo3B,EAAKC,EAASC,EAAgBC,EAAcC,MAAK,CAC5CJ,MAAKG,eAAcC,YAG/BltB,UAAU,EAAG8sB,MAAKG,eAAcC,YAC3BD,IAAiB3e,KAAsBE,aACzCvZ,KAAKoY,OAAOQ,SAASsf,0BAAmC,CAAE7gB,YAAa4gB,KAErEJ,EAAIjjB,OAAS,GACf5U,KAAKm4B,8BAA8BN,EAAI,GAAE,IAKjD73B,KAAKwK,cAAcG,OACjBxK,MAAc,CAACH,KAAKg2B,QAASh2B,KAAKw3B,eAAezsB,UAAU,EAAEwF,EAAQ8G,MACnErX,KAAKo4B,kBAAkB7nB,EAAQ8G,EAAW,IAI9CrX,KAAKwK,cAAcG,IACjB3K,KAAKuQ,OAAO0jB,eACT7zB,QACCC,MACGg4B,GACCA,IAAWnE,MAAc5rB,IACzB+vB,IAAWnE,MAAcK,YACzB8D,IAAWnE,MAAcM,qBAG9BzpB,UAAU,KACT/K,KAAKu3B,iBAAiBnP,KAAK/O,KAAsBC,KACjDtZ,KAAK61B,mBAAmBjyB,MAAK,EAAK,IAIxC5D,KAAKyzB,kBAAoBzzB,KAAKiyB,sBAAsB7xB,QAClDK,MAAKo3B,IACH,MAAMf,EAASe,EAAIn4B,KAAMi3B,GAAMA,EAAEG,QACjC,OAAOA,EAAOwB,WAAaxB,EAAOyB,kBAGtCv4B,KAAK0zB,sBAAwB1zB,KAAKiyB,sBAAsB7xB,QACtDK,MAAKo3B,IACH,MAAMf,EAASe,EAAIn4B,KAAMi3B,GAAMA,EAAEG,QACjC,OAAQA,EAAOwB,UAAYxB,EAAO0B,eAAiB1B,EAAOyB,kBAI9Dv4B,KAAKoxB,2BAA0BjxB,MAAc,CAC3CH,KAAKg2B,QAAQ51B,QAAKC,MAAQkQ,KAAaA,IACvCvQ,KAAKw3B,eACJp3B,QACDK,MAAI,EAAE8P,EAAQ8G,MACZ,MAAMohB,KAAiBjI,MAAQnZ,GACzBiZ,EAAqBmI,EACvBz4B,KAAK04B,sBAAsBrhB,EAA6B9G,EAAO6O,iBAAiBpe,WAChFqO,EACJ,MAAO,CACLihB,qBACAqB,WAAY8G,IAAmBnI,EAAsD,OAAjC/f,EAAO6O,iBAAiBpe,KAC5EqvB,qBAAsBC,GAAsBjZ,EAAYpL,KAAOqkB,EAAmBrkB,GAClFukB,QAASiI,MAIfz4B,KAAKyxB,2BAA0BtxB,MAAc,CAACH,KAAKif,cAAejf,KAAKoxB,0BAA0BhxB,QAC/FK,MAAI,EAAEujB,EAAc2U,MAAsB,EACxCC,OAAyB,GAAI5U,EAAcnb,MAASC,KAAM9I,KAAKuQ,QAAQ,EAAOooB,EAAuBhH,cAAW,EAElHzwB,SAEJ,CAEQw3B,sBAAsBT,EAAqBY,GACjD,OAAOZ,EAAMa,oBAAoBp5B,KAC9B4wB,GAAuBA,EAAmByI,cAAgBF,EAE/D,CAEAV,8BAA8BN,EAAsBmB,EAAU,GACxDA,GAAW,GACbh5B,KAAKs1B,aAAa2D,MAAM,0CAA2C,CACjEC,aAAcl5B,KAAKuQ,OAAO2oB,aAC1BC,WAAYn5B,KAAKuQ,OAAO4oB,WACxBltB,MAAImtB,OAASp5B,KAAKw3B,cAAcvrB,KAMpCsC,WAAW,KACT,MAAM8nB,EAAUr2B,KAAKkyB,gBAAgBmE,SAAS5nB,cAE9C,IAAK4nB,EAGH,YADAr2B,KAAKm4B,8BAA8BN,EADfmB,EAAU,GAIhC,MAAMnd,EACJgc,EAAIwB,MAAMxd,YACVwa,GAASiD,cAAc,SAASzB,EAAI5rB,GAAGstB,8BAA8BC,aAAa,WAEhF3d,GACF7b,KAAKgyB,aAAanW,GAAY,EAAK,EAEpC,IACL,CAEArQ,eACEC,SAAYzL,KAAKwK,cACnB,CAEQ+rB,cACNkD,EACAjW,EACA6S,EACAC,GAEA,MAAMoD,EAAUD,EAAUp5B,OAAQs5B,GAAaA,EAASC,oBAAsBC,MAAqBC,KACnG,OAAOL,EACJp5B,OAAQs5B,GAAaA,EAASC,oBAAsBC,MAAqBC,KACzEr5B,IAAI,CAACk5B,EAAU1yB,MACd,MAAMoc,GAAaG,EAAexjB,KAAKuQ,OAAOtE,KAAKvM,KAAMi3B,IAAMA,GAAExR,aAAewU,EAAS1tB,IACnF4P,GAAawH,IAAYxH,WACzBke,MAAqBC,OAA+Bh6B,KAAK2zB,cAAe3zB,KAAKuQ,OAAOtE,GAAI0tB,EAAS1tB,IAAI,IACvG4P,WACEwd,GAAOxd,IAAcwa,EAAQ4D,MAAMv6B,KAAMwjB,IAAMA,GAAErH,aAAeA,IAChEqe,GAASR,EAAQh6B,KAAMojB,IAAMA,GAAEqX,yBAA2BR,EAAS1tB,IACzE,MAAO,CACLA,GAAI0tB,EAAS1tB,GACb0tB,WACAS,aAAcF,GACdG,mBAAoBH,GAAS,GAAGA,GAAO5U,aAAa4U,GAAO3U,WAAa,GACxEmG,gBAAiB,KACjBoL,OAAQR,EAAiBqD,EAAS1tB,KAAOqqB,EAA2B,IAAVrvB,GAC1DoyB,QACAxd,cACAke,sBACAxB,eAAgBlV,IAAYiX,WAC5B9B,aAAcnV,IAAYkX,SAC1BjC,SAAUjV,IAAY9C,OAG9B,CAEQqW,oBAAoBC,EAA4BH,GAEtD,MAAO,GAAGG,EAAU8C,SAASrU,aAAauR,EAAU8C,SAASpU,YAD1CsR,EAAUuD,WAAa,IAAI1D,KAAOG,EAAUwD,sBAAwB,KACDG,MACxF,CAEAvM,YACEwM,cACA5e,aACAiS,cAOG9tB,KAAK2zB,kBAAiB+G,OAAsB16B,KAAK2zB,cAAe3zB,KAAKuQ,OAAOtE,GAAIwuB,KAKnFz6B,KAAKwK,cAAcG,IACjB3K,KAAKuQ,OAAO6lB,SAASh2B,QAAK0K,MAAK,IAAIC,UAAWsrB,IAE5C,MAAMsE,GADoB36B,KAAKw1B,eAAgC,OAAf3Z,EAG5CA,GAH2D,EAE3Dme,OAA+Bh6B,KAAK2zB,cAAe3zB,KAAKuQ,OAAOtE,GAAIwuB,GAAa,IAAI5e,WAElFwd,GAAiBhD,EAAQ4D,MAAMv6B,KAAMwjB,IAAMA,GAAErH,aAAe8e,IAC9DtB,IAAQvL,GAAW6M,IACrB36B,KAAKivB,aAAa7G,KAAK,CACrBjD,WAAYsV,EACZpB,QACAxd,WAAY8e,GACZzL,SAAUmK,GAAKuB,KACfnQ,SAAOoQ,OAAaxB,GAAMoB,GAC1B3M,YAEF9tB,KAAK60B,kBAAmB,EACxB70B,KAAKuK,WAAWuwB,aAAa,iBAAkBC,MAAaC,MAAO,GAAIC,MAAeC,KAAM,CAC1FC,cAAYC,OAAiBp7B,KAAKuQ,WAGpCvQ,KAAKq7B,qBAAqBZ,EAAaE,GAAgB,GAI/D,CAEA5F,mBAAmB0F,EAAqB5e,GACtC7b,KAAKq7B,qBAAqBZ,EAAa5e,GACvC7b,KAAKuK,WAAWuwB,aAAa,mBAAoBC,MAAaO,OAAQ,MAAOL,MAAe5tB,MAAO,CACjG8tB,cAAYC,OAAiBp7B,KAAKuQ,SAEtC,CAEA8qB,qBAAqBZ,EAAqB5e,GACxC7b,KAAK60B,kBAAmB,EACxB,MAAM0G,EAAoBv7B,KAAKiyB,sBAAsBuJ,WAC/CC,EAAiBF,EAAkBG,UAAW7D,IAAQA,GAAIf,QAC1D6E,EAAYF,IAAmBF,EAAkB3mB,OAAS,EAC1DgnB,EAAY30B,IACZ4U,EACK8f,EAAsB,IAAV10B,GAAcw0B,EAAiB,IAAMx0B,GAEnDA,KAAUw0B,EAGnBz7B,KAAKiyB,sBAAsB7J,KACzBmT,EAAkB96B,IAAI,CAACo3B,GAAK5wB,UAErB4wB,MACCA,GAAI5rB,KAAOwuB,GAAe,CAC5B5e,cAEFib,OAAQ8E,EAAS30B,QAKvBjH,KAAK21B,YAAY/xB,KAAK,CACpBuhB,WAAYsV,EACZ5e,aACAggB,SAAU77B,KAAKuQ,OAAOtE,IAE1B,CAEAgnB,gBAAgBwH,GACd,MAAMqB,EAAc97B,KAAKiyB,sBAAsBuJ,WAE/Cx7B,KAAKiyB,sBAAsB7J,KACzB0T,EAAYr7B,IAAKo3B,QAEVA,EACHf,OAAQe,EAAI5rB,KAAOwuB,KAI3B,CAEA7I,eAAemK,GACb/7B,KAAKiyB,sBAAsB7J,KACzBpoB,KAAKiyB,sBAAsBuJ,WAAW/6B,IAAKo3B,GAASA,EAAIf,OAAS,IAAKe,EAAKd,aAAcgF,GAAYlE,GAEzG,CAEAvF,cAAc0J,GACZ,MAAM3F,EAAUr2B,KAAKkyB,eAAeC,eAAe1jB,cAC7CwtB,EAAW5F,EAAQe,YAAc,EAErB,SAAd4E,GACFh8B,KAAKwyB,eAAiB6D,EAAQ6F,WAAaD,EAC3C5F,EAAQ8F,SAAS,CACfC,KAAMH,EACNI,SAAU,aAGZr8B,KAAKwyB,eAAiB6D,EAAQ6F,WAAaD,EAC3C5F,EAAQ8F,SAAS,CACfC,MAAOH,EACPI,SAAU,YAIdr8B,KAAKuK,WAAWuwB,aAAa,eAAgBC,MAAaO,OAAQ,QAASL,MAAe5tB,MAAO,CAC/F8tB,cAAYC,OAAiBp7B,KAAKuQ,SAEtC,CAEA8hB,SAASzlB,GACP0vB,sBAAsB,KACYt8B,KAAKkyB,eAAeC,eAAe1jB,cAE3D4jB,SAAS,CACf+J,KAAMxvB,EACNyvB,SAAU,UACX,EAEL,CAEArK,aAAanW,EAAoBnN,GAAQ,GACvC4tB,sBAAsB,KACpB,MAAMjG,EAA0Br2B,KAAKkyB,eAAeC,eAAe1jB,cAC7D8tB,EAAiClG,EAAQiD,cAAc,aAAazd,SAE1E,IAAK0gB,EACH,OAQF,IAAIC,GAAe,EAEnB,IACE,IAAIC,EAAeF,EAAYG,cAO1BD,EAAaE,UAAUC,QAAQhoB,SAClC6nB,EAAeA,EAAaC,eAG9B,MAAMG,GAAuD,GAAxCxG,EAAQyG,wBAAwBC,MAC/CC,GAAW3G,EAAQiD,cAAc,OAAOwD,wBAAwBC,MAChEE,GAAkBR,EAAaE,UAAUC,QAAQM,cAAcC,OAAO9Y,EAE5EmY,EAAeQ,GAAWC,GAAkBJ,IAAgBI,GAAkBJ,EAChF,OAASxY,GACP,MAAM+Y,MAAgBhE,OAASp5B,KAAKw3B,cAAcvrB,GAClDjM,KAAKs1B,aAAa2D,MAAM,6CAA8C,CACpEoE,QAAShZ,EAAEgZ,QACXC,MAAOjZ,EAAEiZ,MAAMC,OAAO,EAAG,KACzBrE,aAAcl5B,KAAKuQ,OAAO2oB,aAC1BC,WAAYn5B,KAAKuQ,OAAO4oB,WAExBltB,GAA6B,IAAzBmxB,GAAcxoB,OAAe,KAAOwoB,IAE5C,CAEAb,EAAYiB,eAAe,CACzBnB,SAAU,OACVoB,MAAO,UACPC,OAAQlB,EAAe,SAAW,YAGhC9tB,GACF6tB,EAAY7tB,MAAM,CAAEivB,eAAe,GAAM,EAG/C,CAEAC,UAAUvZ,EAAUwZ,IAClBxV,SAAgBhE,GAChBrkB,KAAKq1B,iBAAiByI,eAAeD,EACvC,CAEAxK,oBAAoB3b,GAClB1X,KAAK6zB,UAAsB,SAAVnc,EACjB1X,KAAKg0B,QAAoB,UAAVtc,CACjB,CAEAib,oBACE3yB,KAAKg1B,mBAAoB,EACzB,MAAM+I,EAAc,0BAA0B/9B,KAAKg+B,kCACnDh+B,KAAKwK,cAAcG,IACjB3K,KAAKyV,gBACFY,UAAU0nB,GACV39B,QACCC,MAAOG,UAAO,EACd2iB,MAAWiM,GAAQpvB,KAAKm1B,gBAAgB8I,KAAK7O,KAE9CrkB,UAAWjJ,GAAa9B,KAAKi1B,6BAA6B7M,KAAKtmB,KAEpE9B,KAAKuK,WAAWuwB,aAAa,sBAAuBC,MAAaC,MAAO,GAAIC,MAAeC,KAAM,CAC/FC,cAAYC,OAAiBp7B,KAAKuQ,SAEtC,CAEA6nB,kBAAkB7nB,EAAoC0nB,GACpD,MAAM7gB,EAAQ6gB,EAAMhtB,OAAOvL,KAAM0X,GAC/BA,EAAMwL,UAAUqC,KAAMrC,IAA0CA,GAAU3W,KAAOsE,EAAOtE,KAKpFiyB,GAH2BjG,EAAMkG,WAAW/mB,EAAM5X,WAAWwB,OAAOvB,sBAAsBC,KAC7F0+B,GAAYA,EAAQx+B,MAAQy+B,MAASC,gBACrCC,YAE4BtG,EAAMuG,kBAAkBC,0BAA0BC,yBAC7E1+B,KAAKo1B,cAAc4B,IAAI2H,4BAA8BT,IACvDl+B,KAAK8xB,eAAiB,+CACtB9xB,KAAK+xB,WAAa,CAChB6M,QAAS,uCACT90B,MAAO+0B,KAAS3vB,QAChBrF,KAAM,CACJ1I,KAAMgH,KAAe22B,MAI7B,CAEQd,4BACN,MAAMh9B,EAAOhB,KAAKuQ,OAAOkiB,SAASzxB,KAClC,OAAK+9B,MAAyB/9B,IAC5BhB,KAAKs1B,aAAa2D,MAAM,yBAA0B,CAAExG,SAAUzyB,KAAKuQ,OAAOkiB,WAGrEsM,MAAyB/9B,EAClC,CAEA0V,YAAYC,GACNA,EAAQpG,QACVvQ,KAAKg2B,QAAQ5N,KAAKzR,EAAQpG,OAAOsG,aAErC,CAACxV,SAAArB,KAAA,mBAAAsB,iBAxhBU4zB,GAAoB/2B,MAAAqF,MAAArF,MAAA2G,MAAA3G,MAAA4G,OAAA5G,MAAA6G,MAAA7G,MAAA+G,MAAA/G,MAAA4G,OAAA5G,mBAAAgH,MAAA,EAAA9D,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAApB0zB,EAAoBzzB,UAAA,wBAAAmN,UAAA,SAAA7M,EAAAC,MAAA,EAAAD,0vHDxFjC5D,MAJA,EAAA6gC,GAAA,yBAAA7gC,MAIAA,CAJqB,EAAA8gC,GAAA,yBAAA9gC,OAuCrBA,MAAA,cAA0BA,MAAA,iBAAAwF,GAAAxF,aAAAqb,GAAArb,MAAS6D,EAAA47B,UAAAj6B,EAAkB,cAAa,GAChExF,MAAA,8BACFA,QAEAA,MAAA,WAUEA,MATA,EAAA+gC,GAAA,qBASA/gC,CATmD,EAAAghC,GAAA,uBAyLrDhhC,QAEAA,MAAA,eAAwBA,MAAA,iBAAAwF,GAAAxF,aAAAqb,GAAArb,MAAS6D,EAAA47B,UAAAj6B,EAAkB,gBAAe,GAChExF,MAAA,gCACFA,QAEAA,MAAA,+CACEA,MAAA,sBAAAwF,GAAAxF,aAAAqb,GAAArb,MAAA6D,EAAA6yB,iBAAAlxB,KAAA3B,EAAA6yB,iBAAAlxB,GAAAxF,MAAAwF,EAAA,GAIAxF,MAAA,YACEA,MAAA,0BACFA,QACAA,MAAA,GAAAihC,GAAA,iCAgBFjhC,QAEAA,MAAA,GAAAkhC,GAAA,6CA7NElhC,MAAA,GAAAA,MAAA,IAAAA,MAAA,kDAGwCA,MAAA,uCACzBA,cAAA,OAAA6D,EAAAyzB,8BASAt3B,cAAA,QAAA6D,EAAAyzB,8BAmLft3B,MAAA,GAAAA,MAAA,IAAAA,MAAA,+CAIAA,MAAA,GAAAA,MAAA,OAAA6D,EAAA6yB,kBAEA12B,MADA,QAAAA,MAAA,uDACAA,CAD2E,UAAA6D,EAAAoB,aAAAk8B,QAIvDnhC,MAAA,GAA8BA,MAA9B,eAAA6D,EAAAitB,aAA8B9wB,CAAD,kBAEnCA,cAAA,OAAAA,MAAA,MAAA6D,EAAAitB,eAkByD9wB,MAAA,GAAAA,MAAA,OAAAA,MAAA,MAAA6D,EAAAizB,o3BCzK5DC,CAAoB,qICzEzB/2B,MAAA,aACEA,MAAA,8BACFA,wCADEA,cAAA,KAAAA,MAAA,uBAAAohC,EAAAlF,mBAAA,kCAEFl8B,MAAA,UAAmCA,MAAA,GAA4BA,wCAA5BA,cAAA,KAAAohC,EAAA1jB,WAAA,8CACnC1d,MAAA,oDAOEA,MAAA,sBAAAA,MAAAqrB,GAAA,MAAA+V,EAAAphC,QAAA4I,UAAAtI,EAAAN,MAAA,UAAAA,MAAYM,EAAA+gC,eAAAD,EAAAtzB,IAA4B,GAE1C9N,qDAHEA,MAHA,OAAAA,MAAA,EAAAE,GAAAI,EAAA0J,eAAA8iB,cAGA9sB,CAH8C,QAAAohC,EAAAzI,OAAAr4B,EAAAm0B,gBAAA6M,oBAAAhhC,EAAAm0B,gBAAA1H,qBAG9C/sB,CAFuG,OAAAM,EAAAo0B,eAAAC,MAEvG30B,CAD6B,OAAAA,MAAA,EAAAI,GAAAJ,MAAA,iFAvBnCA,MAAA,cAOEA,MAAA,yBAAAoE,EAAApE,MAAAqb,GAAA+lB,EAAAh9B,EAAAwE,UAAA24B,EAAAn9B,EAAA0E,MAAAxI,EAAAN,MAAA,UAAAA,MAASM,EAAAkhC,YAAAJ,EAAAtzB,GAAAyzB,GAAgC,GAEzCvhC,MAAA,iBAEEA,MADF,UACEA,CADsE,YAEnEA,MAAA,GAAoEA,QAMvEA,MAJA,EAAAyhC,GAAA,aAIAzhC,CAJwD,EAAA0hC,GAAA,aAIxD1hC,CADmC,EAAA2hC,GAAA,4BAYvC3hC,iDAvBEA,MADA,SAAAohC,EAAAzI,OACA34B,CADiC,gBAAAohC,EAAA1jB,yFAItB1d,cAAA,OAAAM,EAAA0J,eAAA43B,YAGN5hC,MAAA,GAAAA,MAAA,GAAAohC,EAAA5F,SAAArU,UAAA,IAAAia,EAAA5F,SAAApU,SAAA,IAEIpnB,cAAA,OAAAohC,EAAAnF,YAGAj8B,cAAA,OAAAohC,EAAA1jB,YAEJ1d,cAAA,OAAAohC,EAAA1jB,aAAA,IAAA0jB,EAAAhH,2CAaTp6B,MAAA,aACEA,MAAA,qEAkBFA,sDAnBMA,MAAA,YAAAM,EAAAuhC,eAGF7hC,QAMAA,MANA,aAAAM,EAAAuhC,cAMA7hC,CAN4B,iCAM5BA,CALkC,UAAA8hC,EAKlC9hC,CAJmB,mBAInBA,CAHuB,yCAGvBA,CAF0C,yBAE1CA,CAD4B,QAAAA,MAAA,gCAAAA,MAAA,GAAAyU,GAAAzU,MAAA,IAAAM,EAAAyhC,sBAAAC,EAAAvrB,qCA7ClCzW,MAAA,GACEA,MAAA,UACEA,MAAA,8BACFA,QACAA,MAAA,WACEA,MAAA,EAAAiiC,GAAA,iBA8BFjiC,QAEAA,MAAA,EAAAkiC,GAAA,uEAnCEliC,MAAA,GAAAA,MAAA,IAAAA,MAAA,oCAIwBA,MAAA,GAAAA,MAAA,UAAAgiC,GA+B0ChiC,cAAA,OAAAA,MAAA,IAAAM,EAAA6hC,YCP/D,IAAMC,GAAuB,MAA9B,MAAOA,EAkBXxgC,YACUygC,EACA/qB,EACAlL,GAFAvK,KAAAwgC,cACAxgC,KAAAyV,kBACAzV,KAAAuK,aAhBAvK,KAAAygC,UAAkC,IAAIt9B,MACtCnD,KAAA0gC,mBACR,IAAIv9B,MAEGnD,KAAA6yB,eAAiBA,KACjB7yB,KAAA4yB,gBAAkBA,KAClB5yB,KAAAmI,eAAiBA,KAI1BnI,KAAAwK,cAA8B,IAAIC,MAClCzK,KAAAkgC,qBAAuB,IAAIpK,KAAgB,EAMxC,CAEH51B,WACEF,KAAK2gC,aACL3gC,KAAKggC,cAAgBhgC,KAAKwgC,YAAYI,MAAM,CAC1CC,iBAAkB,IAAIC,MAAY,QAGpC9gC,KAAKwK,cAAcG,IACjB3K,KAAKggC,cACFe,IAAI,oBACJC,aAAa5gC,QAAKq2B,MAAez2B,KAAKk2B,cACtCnrB,UAAU,EAAE81B,EAAkBjvB,MAC7B5R,KAAKygC,UAAU78B,KAAKi9B,GACpB,MAAMI,EAAiBjhC,KAAKkhC,kBAAkBtvB,GAE1C5R,KAAKkgC,qBAAqB1E,aAAeyF,EAAeh6B,MAAQ,GAClEjH,KAAKkgC,qBAAqB9X,KAAK6Y,EAAeh6B,MAAQ,EAAC,GAIjE,CAEAyP,YAAYC,GACV,IAAKA,EAAQ/E,aAAe5R,KAAKggC,cAC/B,OAGF,MAAMmB,EAAYnhC,KAAKggC,cAAce,IAAI,oBACnCE,EAAiBjhC,KAAKkhC,kBAAkBvqB,EAAQ/E,WAAWiF,cAE7DsqB,EAAUpiC,QAAUkiC,EAAeh1B,IACrCk1B,EAAUC,SAASH,EAAeh1B,IAGhCjM,KAAKkgC,qBAAqB1E,aAAeyF,EAAeh6B,MAAQ,GAClEjH,KAAKkgC,qBAAqB9X,KAAK6Y,EAAeh6B,MAAQ,EAE1D,CAEAuE,eACEC,SAAYzL,KAAKwK,cACnB,CAEA02B,kBAAkBtvB,GAIhB,MAAO,CACL3F,GAAI2F,EAAWlS,KAAMi6B,GAAaA,EAAS7C,QAAQ7qB,GACnDhF,MAAO2K,EAAW8pB,UAAW/B,GAAaA,EAAS7C,QAEvD,CAEA6J,aACE3gC,KAAKsgC,YAAWngC,MAAc,CAACH,KAAKyV,gBAAgBY,UAAU,eAAgBrW,KAAKk2B,cAAc91B,QAC/FsY,MAAqB,CAAC2oB,EAAGC,IAAMC,KAAKC,UAAUH,KAAOE,KAAKC,UAAUF,KAAE,EACtEG,MAAI,EAAEC,EAAkB9vB,MACtB,MAAMqvB,EAAiBjhC,KAAKkhC,kBAAkBtvB,GAE9C5R,KAAKggC,cAAce,IAAI,oBAAoBK,SAASH,EAAeh1B,GAAE,IACtE,EACDxL,MAAI,EAAEkhC,EAAiB/vB,KACdA,EAAWnR,IAAKo2B,IACrB,MAAM+K,EAAU,GAAG/K,EAAU8C,SAASrU,aAAauR,EAAU8C,SAASpU,WAItE,MAAO,CACLpkB,KAAM,GAAG01B,EAAUuD,WAJK,GAAGwH,KAAWD,KAAmB9K,EAAUwD,qBAIfuH,IAHnC/K,EAAUhb,WAAa,KAAKgb,EAAUhb,aAAe,KAItE9c,MAAO83B,EAAU5qB,OAK3B,CAEA0zB,YAAYlF,EAAqBxzB,GAC/BjH,KAAKygC,UAAU78B,KAAK62B,GAEpBz6B,KAAKuK,WAAWuwB,aAAa,cAAc7zB,EAAQ,IAAK8zB,MAAaO,OAAQ,GAAIL,MAAe5tB,MAAO,CACrG8tB,cAAYC,OAAiBp7B,KAAKuQ,SAEtC,CAEAivB,eAAe/E,GACb,MAAMoH,KAAsB7H,OAA+Bh6B,KAAK2zB,cAAe3zB,KAAKuQ,OAAOtE,GAAIwuB,GAAa,GAE5Gz6B,KAAK0gC,mBAAmB98B,KAAK,CAAE62B,cAAa5e,WAAYgmB,GAAqBhmB,YAAc,KAAMiS,SAAS,GAC5G,CAACzsB,SAAArB,KAAA,mBAAAsB,iBA/GUi/B,GAAuBpiC,MAAAqF,OAAArF,MAAA2G,MAAA3G,MAAA4G,MAAA,EAAA1D,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAAvB++B,EAAuB9+B,UAAA,0BAAAC,OAAA,CAAAw0B,YAAA,cAAA3lB,OAAA,SAAAojB,cAAA,iBAAAjwB,QAAA,CAAA+8B,UAAA,YAAAC,mBAAA,sBAAA7oB,SAAA,CAAA1Z,OAAAwD,MAAA,EAAAC,KAAA,EAAAC,OAAA,qhCAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,ID9BpC5D,MAAA,EAAA2jC,GAAA,6CAAe3jC,MAAA,OAAAA,MAAA,IAAA6D,EAAAk0B,wtBC8BFqK,CAAuB,wFCZ7B,IAAMwB,GAAwB,MAA/B,MAAOA,EAyBXhiC,YAAoBwK,GAAAvK,KAAAuK,aAnBVvK,KAAAgiC,eAA4D,IAAI7+B,MAChEnD,KAAAiuB,WACR,IAAI9qB,MACInD,KAAAiiC,qBAA6C,IAAI9+B,MAM3DnD,KAAAkiC,uBAAyB,IAAIpM,KAA6C,QAC1E91B,KAAAwK,cAA8B,IAAIC,MAClCzK,KAAAmiC,UAAkD,CAChDja,SAAUA,IAAMloB,KAAKq2B,QAAQ5nB,cAAc6qB,cAAc,4BAA4B8I,WAAU,GAC/FC,YAAaA,IAAMriC,KAAKq2B,QAAQ5nB,cAAc6qB,cAAc,+BAA+B8I,WAAU,IAGvGpiC,KAAAsiC,cAAiC,IAAI9a,KAC5BxnB,KAAAuiC,mBAAqB,GAEe,CAE7CC,kBACExiC,KAAKyiC,kBACLziC,KAAK0iC,WAAa1iC,KAAKk2B,YAAY91B,QACjCK,MAAKmR,GACIA,EAAWlS,KAAMm3B,GAAcA,EAAUC,UACjD,EACDpe,MAAqB,CAACiqB,EAAMC,IACnBD,EAAK12B,KAAO22B,EAAK32B,KAK5BjM,KAAKwK,cAAcG,IACjB3K,KAAKk2B,YAAY91B,QAAKsY,MAAqBmqB,QAAgB93B,UAAW6G,IACpE5R,KAAK8iC,cAAclxB,EAAW,GAAG3F,IAEjC2F,EAAW8T,QAASmR,IACdA,EAAUC,SACZ92B,KAAK+iC,2BAA2BlM,EAAU5qB,IAC1CjM,KAAKgjC,+BAA+BnM,EAAU5qB,KAG5C4qB,EAAUhb,YACZ7b,KAAKijC,6BAA6BpM,GAGhCA,EAAUkD,oBACZ/5B,KAAKkjC,sBAAsBrM,EAAS,EAEvC,IAIL72B,KAAKwK,cAAcG,IACjB3K,KAAKkiC,uBAAuB9hC,QAAKsY,SAAwB3N,UAAW6B,IAClE5M,KAAKgiC,eAAep+B,KAAKgJ,EAAQ,IAIrC5M,KAAKwK,cAAcG,IACjB3K,KAAKsiC,cAAcliC,QAAK+iC,MAAanjC,KAAKuiC,qBAAqBx3B,UAAW6B,IACxE5M,KAAKiiC,qBAAqBr+B,KAAKgJ,GAC/B5M,KAAKuK,WAAW64B,aACd,eACAC,MAAUC,SACVvI,MAAaO,OACb,GACAL,MAAesI,OAAM,GAI7B,CAEA/3B,eACEC,SAAYzL,KAAKwK,cACnB,CAEA04B,sBAAsBrM,GACC72B,KAAKq2B,QAAQ5nB,cAAc6qB,cAAc,aAAazC,EAAUkD,wBACxEyJ,UAAU74B,IAAI,eAC7B,CAEAo4B,2BAA2BU,GACzBzjC,KAAKq2B,QAAQ5nB,cAAci1B,iBAAiB,SAASD,EAAMlK,gCAAgC7T,QAAS2T,IAClG,MAAMsK,EAAWtK,EAAKC,cAAc,KAC9Bx3B,EAAW9B,KAAKmiC,UAAUE,cAC1BuB,EAAoBD,EAASnK,aAAa,cAC1C3d,EAAawd,EAAKG,aAAa,WAC/BqK,GAAexK,EAAKmK,UAAUM,SAAS,iBAE7CH,EAASI,aAAa,aAAc,GAAGloB,MAAe7b,KAAKgkC,wBAC3DL,EAASI,aAAa,2BAA4BH,GAE7CC,KACH/hC,EAAS0hC,UAAUS,OAAO,6BAC1BniC,EAAS0hC,UAAU74B,IAAI,oBACvBg5B,EAASO,YAAYpiC,GAAQ,EAGnC,CAEAmhC,6BAA6BpM,GAC3B,MAAMsN,KAAWC,OAAYvN,EAAU8C,SAASrU,UAAWuR,EAAU8C,SAASpU,UACxEzjB,EAAW9B,KAAKmiC,UAAUja,WAC1Bmc,EAAerkC,KAAKq2B,QAAQ5nB,cAAc6qB,cAAc,aAAazC,EAAUhb,kBAE/EyoB,EAAYD,EAAa7K,aAAa,cAC5C6K,EAAaN,aACX,aACA,GAAGO,MAAczN,EAAU8C,SAASrU,aAAauR,EAAU8C,SAASpU,YAGtEzjB,EAAS0hC,UAAUS,OAAO,0BAC1BniC,EAAS0hC,UAAU74B,IAAI,iBACvB7I,EAASw3B,cAAc,cAAciL,UAAYJ,EACjDriC,EAASw3B,cAAc,eAAeiL,UAAY1N,EAAUhb,WAC5DwoB,EAAaH,YAAYpiC,EAC3B,CAEAkhC,+BAA+BS,GAI7BzjC,KAAKq2B,SAAS5nB,eAAei1B,iBAAiB,SAASD,EAAMlK,gCAAgC7T,QAAS2T,IACpG,MAAMsK,EAAWtK,EAAKC,cAAc,KAC9BkL,EAAeb,GAAUrK,cAAc,kBAEzCkL,IACFb,EAASc,YAAYD,GACrBb,EAASO,YAAYM,GAAY,EAGvC,CAEAE,oBAAoBjK,EAAqBV,EAA6B,MACpE/5B,KAAKiuB,WAAWrqB,KAAK,CACnB62B,cACA5e,WAAYke,EACZjM,SAAS,GAEb,CAEAgV,cAAcW,GACZ,MAAMkB,EAAe,SAASlB,EAAMlK,iBAGpCv5B,KAAKq2B,QAAQ5nB,cAAci1B,iBAFG,GAAGiB,qBAAgCA,uBAEEjf,QAASkf,IAC1E,GAAIA,EAAM,CACR,MAAMhB,EAAoBgB,EAAKC,WAAWrL,aAAa,4BACjD8K,EAAYM,EAAKC,WAAWrL,aAAa,cAE3CoK,IACFgB,EAAKC,WAAWd,aAAa,aAAcH,GAC3CgB,EAAKC,WAAWC,gBAAgB,6BAGlCF,EAAKC,WAAWd,aAAa,aAAcO,GAAWS,MAAM,KAAK,IACjEH,EAAKC,WAAWJ,YAAYG,EAC9B,GAEJ,CAEAI,gBAAgBttB,GACdA,EAAMutB,iBACN,MAAM1I,EAAe7kB,EAAMwtB,OAAmBC,QAAQ,SAEjD5I,GAILv8B,KAAKwK,cAAcG,IACjB3K,KAAK0iC,WAAWtiC,QAAK0K,MAAK,IAAC,EAAG2rB,MAAez2B,KAAKk2B,cAAcnrB,UAAU,EAAEq6B,EAAWxzB,MACrF,MAAMyzB,EAAwF,cAApE9I,GAAa/C,aAAa,QAAQ4L,EAAUn5B,GAAGstB,iBACnE+L,EAAS/I,EAAY/C,aAAa,WAClC+L,KAAoBhJ,EAAY/C,aAAa,gBAC7CgM,GAAsB5zB,EAAWlS,KAAMm4B,IAAQA,GAAIhc,aAAeypB,GAExE,GAAKD,GAAqBC,IAAWF,EAAUvpB,YAAcypB,IAAWF,EAAUrL,oBAKlF,IAAI/5B,KAAKylC,uBAAuBL,EAAUn5B,GAAIq5B,IAAWA,IAAWF,EAAUrL,mBAI9E,KAAKyL,IAAwBJ,EAAUvpB,aAAeypB,GAAUF,EAAUrL,mBAOxE,OANA/5B,KAAKiuB,WAAWrqB,KAAK,CACnB62B,YAAa2K,EAAUn5B,GACvB4P,WAAa2pB,GAA+BJ,EAAUrL,mBAAnBuL,EACnCxX,QAASyX,UAEXvlC,KAAK0lC,mBAAmB,gBAAiBnJ,EAAa6I,GAIxDplC,KAAK0lC,mBAAmB,eAAgBnJ,EAAa6I,GACrDplC,KAAK0kC,oBAAoBc,GAAoBv5B,GAAIu5B,GAAoBzL,mBAAkB,OAnBrF/5B,KAAK0lC,mBAAmB,mBAAoBnJ,EAAa6I,EAmB4B,GAG7F,CAEAO,eACE,MAAMzT,EAAiBlyB,KAAKmyB,eAAe1jB,cACrCwtB,EAAW/J,EAAekF,YAC1BwO,EAAe1T,EAAe2T,YAC9B3J,EAAa4J,KAAKC,MAAM7T,EAAegK,YAC7Cl8B,KAAKsiC,cAAcla,KAAK8T,GAMxBl8B,KAAKkiC,uBAAuB9Z,KAJK,IAAf8T,EAEQ,OADVA,IAAe0J,EAAe3J,EACD,QAAU,SAGzD,CAEAwG,kBAEE,MAAMzF,EADMh9B,KAAKq2B,QAAQ5nB,cAAc6qB,cAAc,QAC/BE,aAAa,sBAC/BwD,GACFh9B,KAAKq2B,QAAQ5nB,cAAcs1B,aAAa,QAAS,UAAU/G,MAE/D,CAEQ0I,mBACNz5B,EACAswB,EACA6I,GAEAplC,KAAKwK,cAAcG,IACjB3K,KAAKuQ,OAAO6lB,SAASh2B,QAAK0K,MAAK,IAAIC,UAAWsrB,IAC5Cr2B,KAAKuK,WAAWuwB,aAAa7uB,EAAI8uB,MAAaO,OAAQ,MAAOL,MAAe5tB,MAAO,CACjF24B,YAAUC,OAAuB5P,EAASkG,EAAa6I,GACvDjK,cAAYC,OAAiBp7B,KAAKuQ,SACnC,GAGP,CAEQk1B,uBAAuBhL,EAAqB6K,GAClD,SAAOtL,OAA+Bh6B,KAAK2zB,cAAe3zB,KAAKuQ,OAAOtE,GAAIwuB,GAAaxV,KACrF,EAAGpJ,gBAAiBA,IAAeypB,EAEvC,CAACjkC,SAAArB,KAAA,mBAAAsB,iBA1PUygC,GAAwB5jC,MAAAqF,MAAA,EAAAnC,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAAxBugC,EAAwBtgC,UAAA,4BAAAmN,UAAA,SAAA7M,EAAAC,MAAA,EAAAD,8gBClBrC5D,MAAA,aAA8CA,MAAA,oBAAAA,aAAAqb,GAAArb,MAAU6D,EAAA2jC,eAAc,GACpExnC,MAAA,iDAA6EA,MAAA,iBAAAwF,GAAAxF,aAAAqb,GAAArb,MAAS6D,EAAAgjC,gBAAArhC,GAAuB,GAC/GxF,wBADgBA,MAAA,GAAAA,MAAA,YAAAA,MAAA,WAAAkE,EAAAlE,MAAA,IAAA6D,EAAAuO,OAAA6lB,WAAA,KAAA/zB,EAAA6jC,IAAA,QAAA/nC,meDiBH4jC,CAAwB,sEEY9B,IAAMoE,GAAuB,MAA9B,MAAOA,EAeXpmC,YAAoBwK,GAAAvK,KAAAuK,aAVVvK,KAAAqyB,SAAiC,IAAIlvB,MACrCnD,KAAAomC,mBAAqD,IAAIjjC,MAOnEnD,KAAAioB,aAAe,IAAIxd,KAE0B,CAE7CiM,YAAYC,GACNA,EAAQ6b,gBACVxyB,KAAKqmC,oBAET,CAEA7D,kBACExiC,KAAKioB,aAAatd,IAChB3K,KAAKsmC,eAAev7B,UAAWw7B,IAC7B,IAAKA,EACH,OAEF,MAAMC,EAAYxmC,KAAKymC,iBAAiBh4B,cACxCzO,KAAKg9B,SAAWwJ,EAAUlN,cAAc,QAAQE,aAAa,sBACzDx5B,KAAKg9B,WAEPh9B,KAAK0mC,aAAaj4B,cAAck4B,MAAM5J,MAAWyJ,EAAUI,aAD7BL,EAAgBvmC,KAAKg9B,UACL,KAChD,IAIJh9B,KAAKqmC,oBACP,CAEA76B,eACEC,SAAYzL,KAAKioB,aACnB,CAEA0X,YAAYtb,GACV,MAAMwiB,EAAc7mC,KAAKymC,iBAAiBh4B,cAAcm4B,YAClDE,EAAa9mC,KAAKymC,iBAAiBh4B,cAAcquB,wBAAwBV,KAGzE2K,EAAc1iB,EAAE2iB,QAAUF,EAFd9mC,KAAK0mC,aAAaj4B,cAAcm4B,YAEO,EACzD5mC,KAAKinC,wBAAwBF,GAE7B/mC,KAAKqyB,SAASzuB,KAAMkiC,KAAKoB,IAAI,EAAGH,GAAeF,EAAe7mC,KAAKg9B,UACnEh9B,KAAKuK,WAAW64B,aAAa,eAAgBC,MAAUC,SAAUvI,MAAaO,OAAQ,GAAIL,MAAe5tB,MAC3G,CAEA45B,wBAAwBF,GACtB,MAAMF,EAAc7mC,KAAKymC,iBAAiBh4B,cAAcm4B,YAClDO,EAAYnnC,KAAK0mC,aAAaj4B,cAAcm4B,YAE5CQ,GAAgBpnC,KAAKqnC,QAAQ54B,cAAcm4B,YAAc5mC,KAAKqnC,QAAQ54B,cAAc2oB,aAAe,EACnGkQ,EAAmBtnC,KAAKunC,sBACxBC,GAAiC,EAAnBF,EAEhBP,EAAcS,IAChBT,EAAcS,GAEZT,EAAcI,EAAYN,EAAcS,IAC1CP,EAAcF,EAAcM,GAAaG,EAAmB,EAAIF,IAGlE9K,sBAAsB,KACpBt8B,KAAK0mC,aAAaj4B,cAAck4B,MAAMvK,KAAO,GAAG2K,KAAW,EAE/D,CAEAQ,sBACE,OAAKvnC,KAAK0mC,cAKP1mC,KAAK0mC,aAAaj4B,cAAcm4B,YAAc5mC,KAAK0mC,aAAaj4B,cAAc2oB,aAAe,GAC1Ep3B,KAAKqnC,QAAQ54B,cAAcm4B,YAAc5mC,KAAKqnC,QAAQ54B,cAAc2oB,aAAe,EALhG,CAQX,CAEAiP,qBACE,MAAMoB,EAAcznC,KAAKunC,sBAEzBjL,sBAAsB,KACpB,IAAIyK,EAAe/mC,KAAKwyB,eAAiBxyB,KAAKg9B,SAAYh9B,KAAKymC,iBAAiBh4B,cAAcm4B,YAE1E,IAAhBG,IACFA,GAAeU,GAGjBznC,KAAKinC,wBAAwBF,EAAW,EAE5C,CAEArf,UAAUhQ,GACU,eAAdA,EAAM9X,IACRI,KAAKomC,mBAAmBxiC,KAAK,QACN,cAAd8T,EAAM9X,KACfI,KAAKomC,mBAAmBxiC,KAAK,QAEjC,CAEA8jC,aACE1nC,KAAKqyB,SAASzuB,KAAK,EACrB,CAEA+jC,YACE3nC,KAAKqyB,SAASzuB,KAAK5D,KAAKg9B,SAC1B,CAAC37B,SAAArB,KAAA,mBAAAsB,iBArHU6kC,GAAuBhoC,MAAAqF,MAAA,EAAAnC,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAAvB2kC,EAAuB1kC,UAAA,4BAAAmN,UAAA,SAAA7M,EAAAC,MAAA,EAAAD,ivCC7BlC5D,MADF,UACEA,CAD2D,WACxBA,MAAA,mBAAAA,aAAAqb,GAAArb,MAAS6D,EAAA0lC,aAAY,WACtDvpC,MAAA,WACEA,MAAA,YAQJA,kBAEEA,MADF,YACEA,CAD4D,WACzBA,MAAA,iBAAAwF,GAAAxF,aAAAqb,GAAArb,MAAS6D,EAAA29B,YAAAh8B,GAAmB,GAAExF,QACjEA,MAAA,gBAA2EA,MAAA,mBAAAwF,GAAAxF,aAAAqb,GAAArb,MAAW6D,EAAA0lB,UAAA/jB,GAAiB,GAAExF,QACzGA,MAAA,oDAKFA,QACAA,MAAA,aAAkCA,MAAA,mBAAAA,aAAAqb,GAAArb,MAAS6D,EAAA2lC,YAAW,WACpDxpC,MAAA,aACEA,MAAA,cASNA,0BAdMA,MAAA,GAAAA,MAAA,YAAAA,MAAA,YAAAu2B,EAAAv2B,MAAA,KAAA6D,EAAAuO,OAAA6lB,WAAA,KAAA1B,EAAAwR,IAAA,QAAA/nC,y6BDYOgoC,CAAuB,mHE5BlChoC,MAAA,mDASEA,MAAA,sBAAAA,MAAAqb,GAAA,MAAAjX,EAAApE,QAAA,OAAAA,MAAYoE,EAAAqlC,YAAW,GAEzBzpC,gCAJEA,MAHA,OAAAA,MAAA,EAAAE,GAAAkE,EAAA4F,eAAAoB,MAGApL,CAHsC,QAAAoE,EAAAqwB,gBAAAjqB,0BAGtCxK,CAFmD,OAAAoE,EAAAswB,eAAAC,MAEnD30B,CAD6B,OAAAA,MAAA,EAAAI,GAAAJ,MAAA,6CA+BrBA,MAAA,GACEA,MAAA,aAA0CA,MAAA,uBAAwCA,QAClFA,MAAA,aAA+BA,MAAA,uBAA+BA,gDADpBA,MAAA,GAAAA,MAAA,GAAAA,MAAA,IAAA0pC,EAAA//B,eAAA,KACX3J,MAAA,GAAAA,YAAA,IAAA0pC,EAAApd,mCAEjCtsB,MAAA,GACEA,MAAA,UAAMA,MAAA,uBAA+BA,gDAA/BA,MAAA,GAAAA,YAAA,IAAA0pC,EAAApd,kDAvBhBtsB,MAAA,uBAOEA,MAAA,8BAAA0pC,EAAA1pC,MAAAwqB,GAAA5hB,UAAAxE,EAAApE,QAAA,OAAAA,MAAcoE,EAAAo9B,YAAAkI,GAAqB,GAGjC1pC,MADF,WACEA,CADgB,oBAEdA,MAAA,+BACEA,MAAA,GAEJA,kBAEEA,MADF,WACEA,CADuD,YACnBA,MAAA,8BAAsCA,QAC1EA,MAAA,aAKEA,MAJA,GAAA2pC,GAAA,qBAIA3pC,CAJ6C,GAAA4pC,GAAA,sBAUrD5pC,8DAzBEA,MAAA,kBAAA6pC,GAGA7pC,MADA,QAAAoE,EAAAs8B,SAAA3vB,QACA/Q,CAD0B,eAAAoE,EAAA0lC,YAAA3I,sDAM4BnhC,MAAA,GAAAA,MAAA,YAAAA,MAAA,KAAA0pC,EAAAh+B,KAAA,QAAA1L,OAChDA,MAAA,GAAAA,MAAA,IAAA0pC,EAAAh+B,KAAA,KAIkC1L,MAAA,GAAAA,YAAA,KAAA0pC,EAAA3oC,QAEnBf,MAAA,GAAAA,MAAA,OAAA0pC,EAAA//B,eAIA3J,cAAA,QAAA0pC,EAAA//B,0CAuBb3J,MAAA,YAKEA,MAAA,qDACFA,6BAD2CA,cAAA,aAAAA,MAAA,IAAA+pC,+BAP/C/pC,MAAA,GACEA,MAAA,YACEA,MAAA,EAAAgqC,GAAA,cAOAhqC,MAAA,YACEA,MAAA,sBAQJA,2DAbKA,MAAA,GAAAA,MAAA,OAAAiqC,EAAAzlC,SAOCxE,MAAA,GAEAA,MAFA,6BAEAA,CAF8B,gBAE9BA,CADiB,WAAAkqC,EAAAC,yFAf7BnqC,MAAA,GACEA,MAAA,YACEA,MAAA,EAAAoqC,GAAA,uCAoBFpqC,0CApBiBA,MAAA,GAAAA,MAAA,OAAAA,MAAA,IAAAkqC,EAAAC,sCAHrBnqC,MAAA,YACEA,MAAA,EAAAqqC,GAAA,uBAwBFrqC,+BAxBqCA,cAAA,UAAAoE,EAAAkmC,sDAFvCtqC,MAAA,GACEA,MAAA,EAAAuqC,GAAA,4CAAuBvqC,cAAA,OAAAoE,EAAAkmC,4BCvBpB,IAAME,GAAyB,MAAhC,MAAOA,EAsBX5oC,YACUiD,EACAuH,GADAvK,KAAAgD,kBACAhD,KAAAuK,aAnBAvK,KAAAgyB,aAAqC,IAAI7uB,MAK1CnD,KAAA+S,WAAaA,KACb/S,KAAA6yB,eAAiBA,KACjB7yB,KAAA4yB,gBAAkBA,KAClB5yB,KAAAioC,YAAcA,KACdjoC,KAAA6S,aAAeA,KACf7S,KAAAoD,aAAeA,KACfpD,KAAAmI,eAAiBA,KACjBnI,KAAA6+B,SAAWA,KAEpB7+B,KAAA4oC,cAAwC,GACxC5oC,KAAA6oC,mBAAoB,CAKjB,CAEH3oC,WACEF,KAAK8oC,uBAAsB3oC,MAAc,CAACH,KAAKk2B,YAAal2B,KAAKuQ,OAAO6lB,WAAWh2B,QACjFC,MAAO,EAAEuR,EAAYykB,KAAa9f,MAAMC,QAAQ5E,KAAU,EAAK6G,OAAU4d,KAAQ,EACjF3d,MACE,EAAEqwB,EAAgBC,IAAmBC,EAAgBC,MAAe,EAClEtyB,OAAOoyB,EAAiBE,KAAe,EAAKtyB,OAAOmyB,EAAgBE,KAAe,EAEtFxoC,MAAI,EAAEmR,EAAYu3B,MAChB,MAAM/D,EAAYxzB,EAAWlS,KAAMm4B,GAAQA,EAAIf,QACzCsS,EAAYx3B,EAAWqT,KAAM4S,GAAQA,EAAIuC,YACzCiP,EAAgBz3B,EACnBnR,IAAKo3B,GACGA,EAAIhc,YAEZxb,OAAOG,SAEV,OAAOR,KAAKspC,qBAAqBlE,EAAUn5B,GAAIm9B,EAAWD,EAAaE,EAAa,GAG1F,CAEAC,qBACE7F,EACA2F,EACA/S,EACAgT,GAEA,IAAIE,EAAgC,GAEpClT,EAAQ4D,MACL55B,OAAQg5B,IACyB,cAAzBA,GAAKmQ,SAAS/F,IAEtB/d,QAAS2T,KACR,MAAMnK,MAAWua,OAAYpQ,GAAKqQ,iBAC5BC,MAAY9O,OAAaxB,GAAMoK,GAEL8F,EAAclpC,OAAQupC,IAC7BA,GAAU1a,SAAS2a,YAAc3a,GAAS2a,WAM1DD,GAAUnf,OAAOpa,SAAWs5B,IAAWlf,OAAOpa,QAG3BuE,OAC1B20B,EAAgBvpC,KAAK8pC,kDACnBzQ,GACAnK,GACAya,GACAN,EACAE,GAGFA,EAAczjB,KAAK,IACdoJ,GACHoZ,SAAUtoC,KAAKgD,gBAAgBK,YAAwBrD,KAAK+pC,eAAe1T,EAASnH,GAAS8a,SAC7FngC,KAAM7J,KAAKiqC,mBAAmB5Q,IAC9B5O,SAAOoQ,OAAaxB,GAAMoK,GAAOhZ,MACjC3iB,iBAAe+yB,OAAaxB,GAAMoK,GAAO37B,cACzCuxB,QACAnK,aACD,GAKFka,IACHG,EAAgBA,EAAclpC,OAAQ6pC,IAASA,GAAKhb,SAAS2a,YAAcM,MAAaC,EAAEP,YAI5FN,EAAcc,KAAK,CAAChJ,GAAGC,KACjBD,GAAEwI,YAAcvI,GAAEuI,UACbS,WAAWjJ,GAAE5W,MAAMpa,QAAUi6B,WAAWhJ,GAAE7W,MAAMpa,QAElDgxB,GAAEwI,UAAUU,cAAcjJ,GAAEuI,YAIrC,MAAMW,EAAiBxqC,KAAKyqC,mBAAmBlB,GAG/CA,SAAcc,KAAK,CAAChJ,GAAGC,KACjBkJ,EAAenJ,GAAEwI,aAAeW,EAAelJ,GAAEuI,WAC5CxI,GAAEwI,UAAUU,cAAcjJ,GAAEuI,WAE9Ba,OAAOF,EAAenJ,GAAEwI,YAAca,OAAOF,EAAelJ,GAAEuI,aAGvE7pC,KAAKyoC,0BAA4Bc,EAAclpC,UAAOsqC,OAAUC,IAAiBA,GAAaf,YAEvFN,CACT,CAEAkB,mBAAmBI,GACjB,OAAOA,EAAIroB,OAAO,CAACgoB,EAAgBM,OAC5BN,EAAeM,EAAKjB,YAAciB,EAAKrgB,MAAMpa,OAASm6B,EAAeM,EAAKjB,cAC7EW,EAAeM,EAAKjB,WAAaiB,EAAKrgB,MAAMpa,QAEvCm6B,GACN,GACL,CAOAV,kDACEzQ,EACAnK,EACAya,EACAN,EACAE,GAEA,MAAMwB,EAAgBxB,EAAc7pC,KAAMkrC,IACjBA,GAAa1b,SAAS2a,YAAc3a,EAAS2a,WAIlEe,GAAangB,OAAOpa,SAAWs5B,GAAWlf,OAAOpa,QACjDg5B,EAAc78B,SAASo+B,GAAavR,KAAKxd,aAI7C,OAAKkvB,EAIExB,EAAc9oC,IAAKmqC,KACpBG,EAAc1R,KAAKxd,aAAe+uB,GAAavR,KAAKxd,aACtDkvB,EAAc1R,KAAOA,EACrB0R,EAAclhC,KAAO7J,KAAKiqC,mBAAmB5Q,IAGxCuR,KATArB,CAWX,CAQAU,mBAAmB5Q,GACjB,GAAIr5B,KAAK4oC,cAAcvP,EAAKxd,YAC1B,OAAO7b,KAAK4oC,cAAcvP,EAAKxd,YAGjC,MAAMmvB,EAAuBhrC,KAAKkyB,eAAezjB,cAC9C6qB,cAAc,aAAaD,EAAKxd,gBAChCumB,WAAU,GAEP6I,EAAOD,EAAQ1R,cAAc,KAEnC/iB,aAAM20B,KAAKD,EAAKE,YAAYzlB,QAASkf,IAC9BA,EAAqBpB,UAAUM,SAAS,kBAI7CkH,EAAQI,OAAOxG,EAAI,GAErBoG,EAAQlG,gBAAgB,aACxBkG,EAAQvG,YAAYwG,GAEpBjrC,KAAK4oC,cAAcvP,EAAKxd,YAAcmvB,EAAQK,UAEvCrrC,KAAK4oC,cAAcvP,EAAKxd,WACjC,CAEA8jB,YAAY2L,GACVtrC,KAAKgyB,aAAapuB,KAAK0nC,EAASjS,KAAKxd,YACrC7b,KAAKuK,WAAWuwB,aACd,aAAawQ,EAASpc,SAAS8a,SAC/BjP,MAAaO,OACb,OACAL,MAAe5tB,MACf,CACE8tB,cAAYC,OAAiBp7B,KAAKuQ,SAGxC,CAEAq3B,YACE5nC,KAAK6oC,mBAAoB,EACzB7oC,KAAKuK,WAAWuwB,aAAa,uBAAwBC,MAAaC,MAAO,GAAIC,MAAeC,KAAM,CAChGC,cAAYC,OAAiBp7B,KAAKuQ,SAEtC,CAEArN,aACElD,KAAK6oC,mBAAoB,CAC3B,CAEQkB,eAAe1T,EAAmCkV,GAGxD,MAAO,2BADcxM,MAAyB1I,EAAQmV,iBADnCC,MAAMzrC,KAAKuQ,OAAO4oB,YAEwBI,iBAAiBgS,OAChF,CAAClqC,SAAArB,KAAA,mBAAAsB,iBArOUqnC,GAAyBxqC,MAAAqF,OAAArF,MAAA2G,MAAA,EAAAzD,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAAzBmnC,EAAyBlnC,UAAA,6BAAAC,OAAA,CAAA6O,OAAA,SAAA2lB,YAAA,cAAAhE,eAAA,kBAAAxuB,QAAA,CAAAsuB,aAAA,gBAAArwB,MAAA,GAAAC,KAAA,GAAAC,OAAA,w+CAAAC,SAAA,SAAAC,EAAAC,MAAA,EAAAD,IDrCpC5D,MADF,UACEA,CAD8B,UACSA,MAAA,8BAAgDA,QACvFA,MAAA,EAAAutC,GAAA,4CAYFvtC,QACAA,MAAA,2EAKEA,MAAA,WACEA,MAAA,GAAAwtC,GAAA,6CA8BJxtC,UAEAA,MAAA,+CAIEA,MAAA,0BAAS6D,EAAAkB,YAAY,GAGrB/E,MAAA,GAAAytC,GAAA,sBA4BFztC,oBAvFyCA,MAAA,GAAAA,YAAA,+BAEpCA,MAAA,GAAAA,MAAA,oBAAAiE,EAAAjE,MAAA,KAAA6D,EAAAuO,OAAA6lB,WAAA,KAAAh0B,EAAA80B,aAcH/4B,MAAA,GACAA,MADA,sBAAAA,MAAA,0BACAA,CAD6D,sBAAAA,MAAA,uBAKpCA,MAAA,GAAAA,MAAA,UAAAA,MAAA,MAAA6D,EAAA8mC,sBAiCzB3qC,MAAA,GAAAA,MAAA,QAAAA,MAAA,iCAGAA,MAFA,OAAA6D,EAAA6mC,kBAEA1qC,CAF0B,UAAA6D,EAAAoB,aAAAU,OAIX3F,MAAA,GAAAA,MAAA,OAAA6D,EAAA6mC,saCtBJF,CAAyB,saC5BpCxqC,MAAA,6BAVFA,MAAA,kDAUEA,MAAA,EAAA0tC,GAAA,sBACF1tC,yCATEA,MAAA,QAAAA,MAAA,sDAAAA,MAAA,EAAAE,GAAAqI,EAAAolC,eAQe3tC,MAAA,GAAAA,MAAA,mBAAA4tC,0BA4BX5tC,MAAA,4CAvBFA,MAFJ,QAEIA,CAF4E,UAE5EA,CADgB,cAKdA,MAAA,mBAAAA,MAAAwqB,GAAA,MAAAjiB,EAAAvI,QAAA,OAAAA,MAAAuI,EAAAyN,YAAAzN,EAAAyN,WAAA,GAEAhW,MAAA,YACEA,MAAA,8BACFA,QACAA,MAAA,kBAMJA,UAOEA,MANF,mBAMEA,CADD,YAEGA,MAAA,EAAA6tC,GAAA,sBAGN7tC,+CAzBMA,MAAA,iFAMEA,MAAA,GAAAA,MAAA,IAAAA,MAAA,+DAIAA,MAAA,GAAAA,MAAA,gBAAAuI,EAAAyN,YACAhW,MAAA,OAAAuI,EAAAyB,eAAA+nB,cAMJ/xB,QAEAA,MAFA,OAAAuI,EAAAyN,WAEAhW,CAFmB,kCAEnBA,CADmC,0CAIlBA,MAAA,GAAAA,MAAA,mBAAA4tC,0BAMnB5tC,MAAA,6BADFA,MAAA,GACEA,MAAA,EAAA8tC,GAAA,6DAAe9tC,cAAA,mBAAA4tC,6BAWT5tC,MAAA,kDAA4BA,MAAA,OAAA+tC,EAAAriC,iCAC5B1L,MAAA,YACEA,MAAA,8BACFA,yCADEA,cAAA,IAAAA,MAAA,4CAAA+tC,EAAAtsC,IAAA,yDAMAzB,MAAA,eAIEA,MAAA,mBAAAA,MAAAgT,GAAA,MAAAzK,EAAAvI,MAAA,UAAAA,MAASuI,EAAAQ,kBAAiB,GAE1B/I,MAAA,8BACFA,kFADEA,cAAA,IAAAA,MAAA,sDAEFA,MAAA,SACEA,MAAA,mBACFA,+BADcA,cAAA,OAAAuI,EAAA0D,WAAA+hC,uDAEdhuC,MAAA,eAGEA,MAAA,mBAAAA,MAAAqrB,GAAA,MAAA9iB,EAAAvI,MAAA,UAAAA,MAASuI,EAAAqP,iBAAAnS,MAAsB,GAAK,GAEpCzF,MAAA,8BACFA,cADEA,cAAA,IAAAA,MAAA,mDApBJA,MAAA,YAeEA,MAXA,EAAAiuC,GAAA,gBAWAjuC,CANC,EAAAkuC,GAAA,YAMDluC,CAHqB,EAAAmuC,GAAA,iBAUvBnuC,oDAjBKA,cAAA,QAAAuI,EAAA6lC,UAAAL,EAAAM,oBAAA9lC,EAAA2L,iBAOGlU,cAAA,OAAAuI,EAAA6lC,SAIHpuC,cAAA,QAAAuI,EAAA6lC,SAAAL,EAAAM,qBAAA9lC,EAAA2L,2CAzBPlU,MAAA,YASEA,MAJA,EAAAsuC,GAAA,mBAIAtuC,CAJ8E,EAAAuuC,GAAA,aAI9EvuC,CAH4E,EAAAwuC,GAAA,cA0B9ExuC,mDA9BEA,MAAA,cAAAuI,EAAAkmC,iBAGYzuC,cAAA,OAAA+tC,EAAAriC,MAC0B1L,cAAA,4BAAA+tC,EAAAtsC,KAKnCzB,cAAA,QAAAuI,EAAAkmC,iBAAAlmC,EAAA2L,iBAAA,mBAAA65B,EAAAtsC,gCA0BCzB,MAAA,aASEA,MAAA,MAIFA,2GAVEA,MAAA,UAAAA,MAAA,EAAAI,GAAAmI,EAAA2L,gBAAAw6B,GAAAnmC,EAAA2L,gBAAA3L,EAAA2L,iBAOElU,QACAA,MADA,mBAAAuI,EAAAS,WAAAT,EAAAmC,SAAAC,MAAAgkC,EAAAjxB,WAAAkxB,GAAAC,EACA7uC,CADuG,0BAAAA,MAAA,GAAAqc,GAAArc,MAAA,EAAAyU,GAAAk6B,EAAA,mBAAAZ,EAAAtsC,iDAI3GzB,MAAA,8CAQEA,MAAA,aACEA,MAAA,8BACFA,QACAA,MAAA,mEAWEA,MAAA,mBAAAA,MAAAi0B,GAAA,MAAA1rB,EAAAvI,MAAA,UAAAA,MAASuI,EAAAQ,kBAAiB,GAE9B/I,uDArBEA,MAAA,UAAAA,MAAA,GAAAmd,GAAAnd,MAAA,IAAAuI,EAAAumC,YAAA,IAAA9uC,MAAA,IAAAuI,EAAAumC,aAME9uC,MAAA,GAAAA,MAAA,IAAAA,MAAA,6CAAA2uC,EAAAI,YAAA,cAIA/uC,MAAA,GAAAA,MAAA,OAAAA,MAAA,8CAAA2uC,EAAAI,YAAA,OAAA/uC,MAAA,GAAAE,GAAAF,MAAA,KAAA2uC,EAAA94B,eAQA7V,MADA,QAAAuI,EAAA8B,YAAAE,wBACAvK,CAD6C,UAAAuI,EAAA6lC,oCAM/CpuC,MAAA,cACEA,MAAA,kBACAA,MAAA,aACEA,MAAA,8BAEJA,iCAJaA,cAAA,OAAAuI,EAAAyB,eAAA22B,KAET3gC,MAAA,GAAAA,MAAA,IAAAA,MAAA,gFAIJA,MAAA,cACEA,MAAA,kBACAA,MAAA,aAA2BA,MAAA,8BAG7BA,sDAJaA,cAAA,OAAAuI,EAAAyB,eAAAglC,cACgBhvC,MAAA,GAAAA,YAAA,qCAAAA,MAAA,EAAAyc,GAAAsxB,EAAAkB,wCAlDjCjvC,MADF,OACEA,CADwD,YAgDpDA,MA9CF,EAAAkvC,GAAA,eA8CElvC,CAtCD,EAAAmvC,GAAA,cAsCCnvC,CAzBD,EAAAovC,GAAA,eAyBCpvC,CAPsE,EAAAqvC,GAAA,gBAgB5ErvC,mEArDOA,MAAA,GAAAA,MAAA,4BAAA+tC,EAAAtsC,KAcAzB,cAAA,OAAAuI,EAAAkmC,iBAAA,qBAAAV,EAAAtsC,KAuBHzB,cAAA2uC,EAAAW,uBAAA,MAAAX,EAAAY,YAAAZ,EAAAY,WAAAC,YAAA,EAAAzB,EAAAkB,WAAAN,EAAAW,sBAAA,iCA7ERtvC,MAAA,QACEA,MAAA,EAAAyvC,GAAA,cAkCAzvC,MAAA,WACEA,MAAA,EAAA0vC,GAAA,aA2DJ1vC,yDA/FmEA,MAAA,eAAA2vC,GAI9D3vC,cAAA,OAAAuI,EAAAkmC,kBAAAlmC,EAAAqnC,WAAArnC,EAAAkmC,iBAgCuBzuC,MAAA,GAAAA,MAAA,UAAA+tC,EAAA52B,qCArC9BnX,MAAA,WACEA,MAAA,EAAA6vC,GAAA,aAgGF7vC,8BAhGsBA,cAAA,UAAAuI,EAAAikB,oDAoGtBxsB,MAAA,cACEA,MAAA,kBACAA,MAAA,aAA2BA,MAAA,8BAC7BA,iCAFaA,cAAA,OAAAuI,EAAAyB,eAAA8lC,YACgB9vC,MAAA,GAAAA,YAAA,6EAE7BA,MAAA,iBAIEA,MAAA,kBACAA,MAAA,aAA2BA,MAAA,8BAC7BA,iCAJEA,MAAA,QAAAuI,EAAAm4B,SAAAv1B,SAEWnL,cAAA,OAAAuI,EAAAyB,eAAAwoB,gBACgBxyB,MAAA,GAAAA,YAAA,4EAE7BA,MAAA,gEAGEA,MADA,mBAAA4uC,EACA5uC,CADwC,0BAAAA,MAAA,EAAAqc,GAAA0zB,8BAF1C/vC,MAXA,EAAAgwC,GAAA,iBAWAhwC,CAXmC,EAAAiwC,GAAA,kBAWnCjwC,CAJC,EAAAkwC,GAAA,4DAPUlwC,MAAA,OAAAuI,EAAAsL,kBAKR7T,cAAA,OAAAuI,EAAA4nC,qBAAAJ,EAAAtoB,WAAAlf,EAAAsL,mBAAAtL,EAAAkmC,iBAOAzuC,cAAA,QAAAuI,EAAA4nC,qBAAAJ,EAAAtoB,WAAAlf,EAAAsL,4CAOH7T,MAAA,iEAGEA,MADA,mBAAAowC,EACApwC,CADmC,0BAAAA,MAAA,EAAAud,GAAA8yB,EAAA5oB,qCAanCznB,MAAA,SACEA,MAAA,mBACFA,+BADcA,cAAA,OAAAuI,EAAA0D,WAAA+hC,wCAEdhuC,MAAA,YAUEA,MAAA,uBACFA,gLADEA,cAAA,IAAAA,MAAA,IAAAqwC,EAAA5oB,QAAA5R,YAAA,gCAtBJ7V,MAAA,YAKEA,MAAA,MAOAA,MAHA,EAAAswC,GAAA,YAGAtwC,CAHqB,EAAAuwC,GAAA,cAevBvwC,gEAtBEA,MAAA,UAAAA,MAAA,EAAAqe,GAAA9V,EAAA2L,iBAIElU,QACAA,MADA,mBAAAowC,EACApwC,CADmC,0BAAAA,MAAA,EAAAud,GAAA8yB,EAAA5oB,UAG/BznB,cAAA,OAAAuI,EAAA6lC,SAIHpuC,cAAA,OAAAuI,EAAA2L,2CAaHlU,MAAA,SACEA,MAAA,mBACFA,+BADcA,cAAA,OAAAuI,EAAA0D,WAAA+hC,uDAEdhuC,MAAA,+CAaEA,MAAA,sBAAAA,MAAAwf,GAAA,MAAA6wB,EAAArwC,MAAA,GAAAwwC,YAAAjoC,EAAAvI,QAAA,OAAAA,MAAYuI,EAAA4K,gBAAAk9B,EAAA5oB,SAAoC,GAElDznB,uDAHEA,MAJA,QAAAuI,EAAA8B,YAAA0iB,qBAIA/sB,CAJ0C,OAAAA,MAAA,EAAAkf,GAAA3W,EAAAuhC,YAAA2G,YAAAloC,EAAAyB,eAAA0mC,MAAAnoC,EAAAmM,aAAAuU,MAI1CjpB,CAHuG,UAAAqwC,EAAA5oB,QAAA9P,iBAGvG3X,CAFgD,OAAAA,MAAA,gDAEhDA,CADqE,gBAAAqwC,EAAA5oB,QAAA9P,kBAAApP,EAAAooC,wLAfzE3wC,MAAA,YAIEA,MAHA,EAAA4wC,GAAA,YAGA5wC,CAHqB,EAAA6wC,GAAA,uBAmBvB7wC,+BAnBQA,cAAA,OAAAuI,EAAA6lC,SAUHpuC,cAAA,QAAAuI,EAAA6lC,SAAA7lC,EAAA2L,0CAXLlU,MA/BA,EAAA8wC,GAAA,sBA+BA9wC,CA3BC,EAAA+wC,GAAA,aA2BD/wC,CArBC,EAAAgxC,GAAA,mDATEhxC,MAAA,QAAAuI,EAAA2L,gBAQAlU,cAAA,OAAAuI,EAAA2L,gBAAAm8B,EAAAY,gBAsB4CjxC,cAAA,OAAAuI,EAAA2L,gBAAAm8B,EAAAY,2CAwB/CjxC,MAAA,0EAAAA,MAAA,IAAAkxC,EAAA5B,sBAAA4B,EAAA1zB,YAAAxd,MAAA,IAAAA,MAAA,4BAAAkxC,EAAAnC,YAAA,QAAA/uC,MAAA,EAAA4f,GAAAsxB,EAAAxzB,WAAAwzB,EAAAt7B,SAAA,MAAAs7B,EAAA3B,WAAA,KAAA2B,EAAA3B,WAAA4B,cAAAD,EAAA1zB,cAAA0zB,EAAA1zB,aAAA,OChNF,MAAM4zB,GAAwB,CAAC,eAAgB,wBAAyB,6BAQjE,IAAMC,GAAwB,MAA/B,MAAOA,EAgDXzvC,YAAoBkD,GAAAjD,KAAAiD,oBA/CXjD,KAAAwI,YAAcA,KACdxI,KAAA6I,SAAWA,KACX7I,KAAAoK,WAAaA,KACbpK,KAAAmI,eAAiBA,KACjBnI,KAAA6+B,SAAWA,KACX7+B,KAAAsuC,qBAAuBA,KACvBtuC,KAAA6S,aAAeA,KACf7S,KAAAioC,YAAcA,KAYvBjoC,KAAA4sC,iBAA2B,EAG3B5sC,KAAAgS,kBAAmB,EAGnBhS,KAAAqS,gBAAiB,EAQPrS,KAAA0K,cAAuC,IAAIvH,MAE3CnD,KAAAgW,cAAkD,IAAI7S,MAEtDnD,KAAA+V,iBAA0C,IAAI5S,MAExDnD,KAAAmU,YAAa,CAQ8C,CAE3DjU,WACEF,KAAKitC,UAAYjtC,KAAKiD,kBAAkBK,cAAc,UAEtDtD,KAAK2qB,wBAA0B3qB,KAAK0rB,gBAAgBjrB,IAAKgvC,IACvD,MAAMn6B,EAAWtV,KAAK4sC,gBAClB6C,EAAen6B,SAASjV,OAAQulB,IAAa,CAACjE,KAAY+tB,cAAcljC,SAASoZ,EAAQsnB,cACzFuC,EAAen6B,SACnB,MAAO,IACFm6B,EACHn6B,cAIJtV,KAAK8rC,YAAc9rC,KAAKmH,WAAa0B,KAASsY,cAAgBnhB,KAAK2vC,eAAe3vC,KAAK0rB,iBAAmB,CAC5G,CAEAxkB,kBACElH,KAAK0K,cAAc9G,MAAK,EAC1B,CAEQ+rC,eAAejkB,GACrB,OACEA,EACGkkB,QAASH,GAAmBA,EAAen6B,UAC3C5V,KAAMkmB,GAAY2pB,GAAsB/iC,SAASoZ,EAAQR,WAAWsoB,YAAY4B,eAAiB,CAExG,CAEAh+B,gBAAgBsU,GACd5lB,KAAKgW,cAAcpS,KAAK,CACtBuD,SAAUnH,KAAKmH,SACfie,QAASQ,EAAQR,QACjBvJ,WAAY+J,EAAQ/J,YAExB,CAACxa,SAAArB,KAAA,mBAAAsB,iBApFUkuC,GAAwBrxC,MAAAqF,OAAA,EAAAnC,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAAxBguC,EAAwB/tC,UAAA,2BAAAC,OAAA,CAAAyF,SAAA,WAAAukB,gBAAA,kBAAA6gB,QAAA,UAAAK,gBAAA,kBAAA56B,iBAAA,mBAAAK,eAAA,iBAAA07B,SAAA,WAAAe,yBAAA,4BAAAprC,QAAA,CAAAgH,cAAA,gBAAAsL,cAAA,gBAAAD,iBAAA,oBAAApU,MAAA,GAAAC,KAAA,EAAAC,OAAA,mpEAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,GDuMrC5D,MA9NA,EAAA0xC,GAAA,wBA8NA1xC,CArNC,EAAA2xC,GAAA,cAqND3xC,CAjNgF,EAAA4xC,GAAA,qBAiNhF5xC,CAnL8E,EAAA6xC,GAAA,yBAAA7xC,MAmL9EA,CA/K0B,EAAA8xC,GAAA,yBAAA9xC,MA+K1BA,CA1EqD,EAAA+xC,GAAA,yBAAA/xC,MA0ErDA,CAvDgE,EAAAgyC,GAAA,0BAAAhyC,aAtK7DA,MAAA,OAAA6D,EAAA4qC,iBAAA5qC,EAAAmF,WAAAnF,EAAA6G,SAAAsY,gBAAAnf,EAAA+rC,UAYG5vC,cAAA,OAAA6D,EAAA4qC,iBAAA5qC,EAAAmF,WAAAnF,EAAA6G,SAAAsY,eAAAnf,EAAA+rC,UA8BS5vC,cAAA,QAAA6D,EAAA4qC,iBAAA5qC,EAAAmF,WAAAnF,EAAA6G,SAAAsY,iRCpBFquB,CAAwB,+TCtBnCrxC,MAAA,yBAMEA,MAAA,8BAKFA,wCAPEA,MAAA,QAAAiyC,EAAA7gB,aAIEpxB,QACAA,MADA,cAAAoE,EAAA8tC,qCACAlyC,CADoD,wCAexDA,MAAA,oDAMIA,MADF,UACEA,CAD0B,QACtBA,MAAA,8BAA4FA,QAChGA,MAAA,QAAIA,MAAA,8BAERA,mBANEA,MAAA,QAAAA,MAAA,2EAGMA,MAAA,GAAAA,YAAA,2EACAA,MAAA,GAAAA,YAAA,sGAUJA,MADF,UACEA,CAD6E,QACzEA,MAAA,GACNA,oCADMA,MAAA,GAAAA,MAAAmyC,EAAA30B,wCANRxd,MAAA,oDAKEA,MAAA,EAAAoyC,GAAA,aAGFpyC,wCALEA,MAAA,QAAAA,MAAA,6DAEqBA,MAAA,GAAAA,MAAA,UAAAqyC,EAAAC,kDAKvBtyC,MAAA,GAGEA,MAAA,YACEA,MAAA,kBACAA,MAAA,YACEA,MAAA,8BAEJA,yCAJ4CA,MAAA,GAAAA,MAAA,OAAAoE,EAAA4F,eAAAwoB,gBAExCxyB,MAAA,GAAAA,MAAA,IAAAA,MAAA,oFA6BIA,MAAA,6BALFA,MAAA,YAKEA,MAAA,EAAAuyC,GAAA,uBAGFvyC,8DAFKA,QAA2BA,MAA3B,mBAAAwyC,EAA2BxyC,CAAA,0BAAAA,MAAA,EAAAqc,GAAAo2B,EAAAruC,EAAAsuC,6DArBtC1yC,MAAA,GAcIA,MAbF,UAaEA,CADD,YAEGA,MAAA,EAAA2yC,GAAA,cAUA3yC,MAAA,+DAaEA,MAFA,iCAAAyyC,EAAAzyC,MAAAgT,GAAApK,UAAAypC,EAAAryC,MAAA,GAAA4I,UAAAxE,EAAApE,QAAA,OAAAA,MAAiBoE,EAAA2E,gBAAA3E,EAAAqjB,QAAAze,SAAAqpC,EAAAvkC,GAAA2kC,EAAA3kC,IAAqD,EAEtE9N,CAFuE,8BAAAA,MAAAgT,GAAA,MAAA5O,EAAApE,MAAA,UAAAA,MACnDoE,EAAA6O,qBAAoB,EACxCjT,CADyC,yBAAAwF,GAAA,MAAAitC,EAAAzyC,MAAAgT,GAAApK,UAAAypC,EAAAryC,MAAA,GAAA4I,UAAAxE,EAAApE,QAAA,OAAAA,MACxBoE,EAAA+O,gBAAA3N,EAAAitC,EAAA3kC,GAAAukC,EAAAvkC,IAA2C,GAGlE9N,yFAvCEA,cAAA,UAAAA,MAAA,GAAAyU,IAAArQ,EAAAsuC,iBAAAtuC,EAAAsuC,kBAAAE,IAAAxuC,EAAAsuC,kBAAAE,GAAAxuC,EAAAuP,0BAAAvP,EAAAqjB,QAAAze,WAAA5E,EAAAsG,SAAAC,MAAAioC,IAAAC,GAAAD,GAAAxuC,EAAAuP,0BAAAvP,EAAAqjB,QAAAze,WAAA5E,EAAAsG,SAAAC,OAeK3K,MAAA,GAAAA,MAAA,OAAAyyC,EAAAhX,oBAAAr3B,EAAAs3B,qBAAAC,KAAAv3B,EAAAsuC,mBAAAtuC,EAAAsuC,kBAUD1yC,cAAA,eAAAoE,EAAAsuC,kBAQA1yC,MAPA,WAAAoE,EAAAqjB,QAAAze,SAOAhJ,CAP6B,kBAAAyyC,EAAAllB,gBAO7BvtB,CANuC,kBAAAoE,EAAAsuC,iBAMvC1yC,CALoC,kBAAA8yC,EAAA9yC,MAAA,WAAAoE,EAAAqjB,QAAA3R,OAAA,KAAA1R,EAAAqjB,QAAA3R,OAAAQ,yBAAApF,IAAA4hC,KAKpC9yC,CAJ+D,WAAAyyC,EAAAhX,oBAAAr3B,EAAAs3B,qBAAAC,IAI/D37B,CAH+D,mBAAAoE,EAAAyP,iBAG/D7T,CAFqC,iBAAAoE,EAAA8P,eAErClU,CADiC,2BAAAA,MAAA,KAAAoE,EAAA2uC,qBAAAp7B,6CAtC3C3X,MAAA,WAIEA,MAAA,EAAAgzC,GAAA,uBA2CFhzC,wCA3CgCA,cAAA,UAAAqyC,EAAA5+B,sCAkE5BzT,MAAA,6CAAgFA,MAArC,YAAAizC,EAAAzuC,QAAqCxE,CAAD,0DALjFA,MAAA,mBAEEA,MAAA,sBAAAwF,GAAAxF,MAAAoV,GAAA,MAAAhR,EAAApE,MAAA,GAAAA,aAAAoE,EAAA8uC,cAAA1tC,KAAApB,EAAA8uC,cAAA1tC,GAAAxF,MAAAwF,EAAA,GAGAxF,MAAA,EAAAmzC,GAAA,qBAEEnzC,MADF,WACEA,CADqB,WAEnBA,MAAA,8BACFA,QACAA,MAAA,8BACAA,MAAA,6CAMGA,MAAA,+BAGPA,8CAlBEA,MAAA,OAAAoE,EAAA8uC,eACAlzC,MAAA,QAAAizC,EAAA7hB,aAEapxB,cAAA,OAAAizC,EAAAzuC,SAGTxE,MAAA,GAAAA,MAAA,IAAAA,MAAA,uDAEqBA,MAAA,GAAoBA,MAApB,eAAoBA,CAAD,cAAAoE,EAAAgvC,iBAIxCpzC,QAEAA,MAFA,OAAAA,MAAA,qCAEAA,CAFyD,cAEzDA,CADiB,mBAEhBA,MAAA,GAAAA,YAAA,kFAjCTA,MAAA,YACEA,MAAA,oFAOAA,MAAA,kBAGEA,MAAA,6BAAAA,MAAAwU,GAAA,MAAApQ,EAAApE,MAAA,UAAAA,MAAAoE,EAAA8uC,eAAmC,EAAI,GAEvClzC,MAAA,8BACFA,QAEAA,MAAA,EAAAqzC,GAAA,wCAqBFrzC,iCAjCIA,QACAA,MADA,cAAAA,MAAA,IAAAA,MAAA,8CACAA,CAD2F,gBAS3FA,MAAA,GAAAA,MAAA,IAAAA,MAAA,sDAICA,MAAA,GAAAA,MAAA,OAAAA,MAAA,KAAAoE,EAAAgvC,4CAsBLpzC,MAAA,qCAEEA,MAAA,mBAAAszC,8BAlJJtzC,MAAA,GACEA,MAAA,EAAAuzC,GAAA,2CAaAvzC,MAAA,iGAkIAA,MAxHA,EAAAwzC,GAAA,yBAwHAxzC,CApHC,EAAAyzC,GAAA,yBAoHDzzC,CAzGC,EAAA0zC,GAAA,qBAyGD1zC,CAjGC,GAAA2zC,GAAA,WAiGD3zC,CArFC,GAAA4zC,GAAA,aAqFD5zC,CAvC4F,GAAA6zC,GAAA,sFAvGzF7zC,cAAA,OAAAA,MAAA,SAAA8zC,GAAA1vC,EAAA8tC,uCAcDlyC,MAAA,GAIAA,MAJA,gBAAAA,MAAA,GAAAE,GAAAmyC,EAAAt7B,UAAAC,aAAAq7B,EAAAn7B,QAAAF,cAIAhX,CAJgF,iBAAAA,MAAA,KAAAoE,EAAA2vC,mBAAA/zC,MAAA,kBAAAA,MAAA,GAAAI,GAAAiyC,EAAApxB,iBAAAje,OAAA,GAIhFhD,CADC,YAAAA,MAAA,KAAAoE,EAAAi1B,cAAA3iB,WAMA1W,MAAA,GAAAA,MAAA,OAAAoE,EAAAsuC,kBAAAtuC,EAAAqjB,QAAAze,WAAA5E,EAAAsG,SAAAuY,SAAA,WAAA7e,EAAAqjB,QAAA3R,OAAA,KAAA1R,EAAAqjB,QAAA3R,OAAAk+B,qBAWAh0C,cAAA,OAAAqyC,EAAAC,sBAAA77B,OAAA,GAUAzW,cAAA,cAAAqyC,EAAApxB,iBAAApe,MAAAuB,EAAAsuC,kBAAAtuC,EAAAqjB,QAAAze,WAAA5E,EAAAsG,SAAAC,MAYA3K,cAAA,cAAAqyC,EAAApxB,iBAAApe,MAAAuB,EAAAqjB,QAAAze,WAAA5E,EAAAsG,SAAAC,MAAAvG,EAAA2P,gBA+CG/T,cAAA,OAAA6yC,GAAAzuC,EAAAqjB,QAAAze,WAAA5E,EAAAsG,SAAAupC,KAwCHj0C,cAAA,OAAAoE,EAAAuP,0BAAAvP,EAAAqjB,QAAAze,WAAA5E,EAAAsG,SAAAC,MAAAkoC,8BAMH7yC,MAAA,GAAgDA,MAAA,qCAAAA,cAAA,GAAAk0C,EAAA/sB,UAAA,IAAA+sB,EAAA9sB,SAAA,+BAG9CpnB,MAAA,GACEA,MAAA,2FAAAA,cAAA,IAAAk0C,EAAA/sB,UAAA,IAAA+sB,EAAA9sB,SAAA,KAAApnB,MAAA,IAAAA,MAAA,2BAAAA,MAAA,EAAAmd,GAAA+2B,EAAAC,uBAAA,qCAMAn0C,MAAA,yDAAAA,MAAA,IAAAA,MAAA,sCAAAA,MAAA,EAAAyc,GAAAy3B,EAAA/sB,UAAA+sB,EAAA9sB,SAAA8sB,EAAAC,uBAAA,gCARJn0C,MAAA,GAOEA,MANA,EAAAo0C,GAAA,uBAMAp0C,CANsD,EAAAq0C,GAAA,yBAAAr0C,4DAAvCA,QAAmBA,MAAnB,OAAAs0C,EAAmBt0C,CAAA,WAAAu0C,6BADpCv0C,MAFA,EAAAw0C,GAAA,qBAEAx0C,CAFgD,EAAAy0C,GAAA,yCAAjCz0C,MAAA,QAAAk0C,EAAAC,sBAEAn0C,cAAA,OAAAk0C,EAAAC,gEAkBbn0C,MAAA,+CAUEA,MAAA,sBAAAA,MAAA00C,GAAA,MAAAtwC,EAAApE,MAAA,UAAAA,MAAYoE,EAAAgP,kBAAA3N,OAAwB,GAEtCzF,iCANEA,MAHA,OAAAoE,EAAA0Q,WAAAC,YAGA/U,CAH+B,QAAAoE,EAAAiG,YAAAE,wBAG/BvK,CAF6C,OAAAA,MAAA,0CAE7CA,CAD+D,OAAAA,MAAA,EAAAud,GAAAnZ,EAAA4F,eAAA8iB,aAAA1oB,EAAAsQ,aAAAC,kDANnE3U,MAAA,YACEA,MAAA,EAAA20C,GAAA,sBAaA30C,MAAA,+CAMEA,MAAA,sBAAAA,MAAA40C,GAAA,MAAAxwC,EAAApE,QAAA,OAAAA,MAAYoE,EAAAiP,YAAA5N,OAAkB,GAGlCzF,kCApBKA,cAAA,OAAAoE,EAAAwP,6BAcD5T,QAEAA,MAFA,OAAAoE,EAAA0Q,WAAAC,YAEA/U,CAF+B,QAAAoE,EAAAiG,YAAAG,0BAE/BxK,CAD+C,OAAAA,MAAA,8CCtI9C,IAAM60C,GAAwB,MAA/B,MAAOA,EA0CXjzC,YACUwK,EACAvH,GADAhD,KAAAuK,aACAvK,KAAAgD,kBA3CDhD,KAAA6I,SAAWA,MACX7I,KAAA65B,qBAAuBA,MACvB75B,KAAAqJ,kBAAoBA,KACpBrJ,KAAAmI,eAAiBA,KACjBnI,KAAAwI,YAAcA,KACdxI,KAAAiT,WAAaA,KACbjT,KAAA6S,aAAeA,KAEhB7S,KAAAwK,cAA8B,IAAIC,MAGjCzK,KAAA0R,eAAgB,EAEhB1R,KAAAk2B,eAAkDj2B,OAAG,IACrDD,KAAA6wC,kBAA4B,EAC5B7wC,KAAA+W,yBAA0B,EAC1B/W,KAAA8R,0BAA2B,EAC3B9R,KAAA+R,6BAA8B,EAC9B/R,KAAA4K,UAAsC,IAAIkrB,KAAgB,IAC1D91B,KAAAizC,QAA2B5mC,MAAgB6mC,eAC3ClzC,KAAAmzC,UAAuB9P,MAAU6P,eACjClzC,KAAAgS,kBAAmB,EACnBhS,KAAAiS,8BAA+B,EAC/BjS,KAAAkS,gBAAiB,EACjBlS,KAAAkxC,uBAA0DjxC,OAAG,CAAE6V,kBAAkB,IACjF9V,KAAAqS,gBAAiB,EACjBrS,KAAAoS,sBAAuB,EAEtBpS,KAAA0K,cAAmD,IAAIvH,MACvDnD,KAAA+V,iBAA0C,IAAI5S,MAC9CnD,KAAAgW,cAAkD,IAAI7S,MACtDnD,KAAAwR,YAAkC,IAAIrO,MACtCnD,KAAAuR,kBAAwC,IAAIpO,MAGtDnD,KAAAozC,gBAAuD,IAAItd,KAAoC,MAI/F91B,KAAAqxC,eAAgB,CAKb,CAEHnxC,WACEF,KAAKozC,gBAAgBhrB,KAAKpoB,KAAK4lB,SAC/B5lB,KAAKqzC,qBAAuBrzC,KAAKszC,0BACjCtzC,KAAKkyC,kBAAoBlyC,KAAKqzC,qBAAqBjzC,QACjDK,MAAK8yC,GAAaA,EAAStuB,KAAMuuB,GAAsC,OAA9BA,EAAIp0B,iBAAiBpe,QAGhEhB,KAAKuxC,gBAAkBvxC,KAAKozC,gBAAgBhzC,QAC1CC,MAAQulB,GAAYA,EAAQze,WAAa0B,MAASupC,MAAG,EACrDjvB,MAAU,IAAMnjB,KAAKgD,gBAAgBK,YAAwB,sDAE/DrD,KAAKqwC,qCAAuCrwC,KAAKozC,gBAAgBhzC,QAC/DC,MAAQulB,GAAYA,EAAQze,WAAa0B,MAASupC,MAAG,EACrDjvB,MAAU,IAAMnjB,KAAKgD,gBAAgBK,YAAwB,uCAEjE,CAEAqT,YAAYC,GACNA,EAAQiP,UAAYjP,EAAQiP,QAAQ6tB,iBACtCzzC,KAAKozC,gBAAgBhrB,KAAKpoB,KAAK4lB,QAEnC,CAEQ0tB,0BAON,SAAOnzC,MAAc,CACnBH,KAAKw3B,gBACLr3B,MAAc,CAACH,KAAKk2B,YAAal2B,KAAKozC,kBAAkBhzC,QACtDK,MAAI,EAAEmR,EAAYgU,KAChBA,EAAQze,WAAa0B,MAASC,KAC1B8I,EAAWvR,OAAQw3B,GAAQA,EAAI+B,oBAAsBC,MAAqBC,KAC1EloB,IAGR5R,KAAKozC,gBACLpzC,KAAKkxC,sBACJ9wC,QACDK,MAAI,EAAEw3B,EAAOyb,EAAoB9tB,EAAS+tB,MACxC,MAAQ1oC,SAAQuM,mBAAmBygB,EAC7B2b,GACJp8B,IAAgBq8B,YACZjE,QAASkE,IACT98B,OAAOC,OAAO68B,GAAgBx+B,UAAUs6B,QAASmE,IAC/C/8B,OAAOC,OAAO88B,IAAqBnE,QAASoE,IAC1CA,GAAkBpE,QAASqE,IAAqBA,GAAiB7uB,YAItE/kB,OAAO2iB,QAAW,GACjBkxB,GAAajpC,EAAO2kC,QAASx4B,IAAUA,GAAMwL,WAAWviB,OAAOwiB,MAC/DsxB,MAAaC,OAASF,GAAa3jC,IAAWA,GAAOtE,IAErDooC,GAA4B78B,IAAgBq8B,WAAWn0C,KAC3D,EAAGyH,eACDA,KAAanH,KAAK4lB,QAAQze,UAC1B,CACE0B,MAASsY,cACTtY,MAASkD,QACTlD,MAASC,KACTD,MAASsX,KACTtX,MAASmY,KACTnY,MAASyY,MACTzY,MAASuY,OACTvY,MAAS0Y,IACT1Y,MAASupC,IACTvpC,MAASyrC,OACT9nC,SAASrF,KAGTotC,GAAkD3uB,EAAQ3a,OAAO2kC,QAAQ,EAAG2D,eAAeA,IAC3FiB,MAA4BC,OAAQF,GAAqBG,IAAYA,GAAQzoC,IAE7E0oC,GAAoB39B,OAAOyO,QAAQ+uB,IACtC/zC,IAAI,EAAEo7B,GAAU+Y,OACf,MAAMZ,GAAoBY,GACvBhF,QAAQ,EAAGh+B,iBAAiBA,IAC5BvR,OAAQw2B,IAzDSge,EAC1BnB,EACAoB,IAE8B,IAA9BpB,EAAmB9+B,QAAgB8+B,EAAmBzuB,KAAK,EAAGhZ,QAASA,IAAO6oC,EAAqB7oC,IAqDpE4oC,CAAoBnB,EAAoB7c,KAE3Dke,GAA4Bf,GAAkBvzC,IAAKo2B,IACvDA,GAAUvhB,SAASjV,OAAQ6iB,IAAMA,GAAE8xB,uBAG/BvE,GACJ7qB,EAAQze,WAAa0B,MAASsX,KAC1B40B,GAA0BvyB,OAAO,CAACyyB,GAAQ3/B,KACjC2/B,GAAO50C,OAAQtB,IAAUuW,GAAS2P,KAAMW,IAAYA,GAAQR,UAAYrmB,GAAMqmB,WAEvF,GAEA8vB,GAAmBzE,GAAsBhwC,IAAKmlB,IAAYA,GAAQR,SAElE+vB,GAAmBnB,GACtBvzC,IAAKo2B,KACJ,MAAMlf,GAAUX,OAAO2N,KAAK0vB,IAA2BzsC,aAAe,IAAIlI,KAAMiY,IAC9EA,GAAQnL,SAASqvB,KAGbuZ,GACJz9B,IAAW08B,IAA2BzsC,YAAY+P,IAASkf,GAAU5qB,KAAOjM,KAAK6wC,iBAE7EwE,GACJzvB,EAAQze,WAAa0B,MAASsX,KAC1B0W,GAAUvhB,SAASjV,OAAQulB,KAAasvB,GAAiB1oC,SAASoZ,GAAQR,UAC1EyR,GAAUvhB,SAEhB,MAAO,IACFuhB,GACH+C,kBAAmB8Z,EAAmBh0C,KAAMi3B,IAAMA,GAAE1qB,KAAO4qB,GAAU5qB,KAAK2tB,kBAC1ElO,mBAAiB4pB,MACfD,MACAE,OAAsB1e,GAAU5qB,GAAIynC,GACpCE,GACAwB,GACI,CACE,CACEnpC,GAAI,GACJihC,YAAa,GAAGtnB,EAAQze,WACxB6M,WAAYqgC,IAA2BzsC,YAAY+P,IAASkf,GAAU5qB,IAAIupC,QAG9E,GACJx1C,KAAKgS,iBACLhS,KAAKiS,iCAIV5R,OAAQw2B,IAAcA,GAAUnL,gBAAgB9W,OAAS,GAK5D,MAAO,IAHoBggC,GAAyBA,GAAyBhgC,OAAS,GAKpFwK,iBAJa+0B,GAAWtY,IAICzc,iBACzBxN,WAAYujC,GACZ1E,4BAGHpwC,OAAQ6iB,IAAMA,GAAEtR,YAAYgD,OAAS,GAAKsO,GAAEutB,sBAAsB77B,OAAS,GACxE6gC,GACJz1C,KAAKoS,yBAAwBkQ,OAAqBtiB,KAAK4lB,QAAQze,UAC3DnH,KAAK01C,sBAAsBf,GAAmB1pC,GAC9C0pC,GACN,OAAO30C,KAAK21C,oBAAoBF,GAAgB9B,EAAoB,IACrE,EACDzyC,SAEJ,CAEQy0C,oBAAoBF,EAAkCG,GAC5D,OAAOH,EAAeh1C,IAAKo1C,QAEpBA,EACHjkC,WAAYikC,EAAcjkC,WAAWnR,IAAKo3B,QAEnCA,EACHnM,gBAAiBmM,EAAInM,gBAAgBjrB,IAAKgvC,QAEnCA,EACHn6B,SAAUm6B,EAAen6B,SAAS7U,IAAKmlB,QAEhCA,EACH9P,iBAAkB9V,KAAK81C,6BACrBF,EACAC,EACAhe,EAAI5rB,GACJ2Z,cAUpB,CAEQkwB,6BACNF,EACAH,EACAhS,EACA7d,GAEA,OACEgwB,EAAmB9/B,kBACnB8/B,EAAmBhwB,QAAQze,WAAanH,KAAK4lB,QAAQze,UACrDs8B,IAAUmS,EAAmBhwB,QAAQT,aACpCswB,EAAexpC,KAAO2pC,EAAmBhwB,QAAQrT,YAChDkjC,EAAexpC,KAAO2pC,EAAmBhwB,QAAQjO,WAClD3X,KAAK4lB,QAAQze,WAAa0B,MAASC,KAChC8c,EAAQ/J,aAAe+5B,EAAmBhwB,QAAQ/J,WAClD+J,EAAQR,UAAYwwB,EAAmBhwB,QAAQR,QAEvD,CAEQswB,sBAAsBD,EAAkCxqC,GAC9D,OAAOA,EACJxK,IAAK2W,IACJ,MAAM2+B,EAAY3+B,EAAMwL,UAAUviB,OAAOwiB,MAAUpiB,IAAKu1C,IAAMA,GAAE/pC,IAC1DgqC,EAA2BR,EAAep1C,OAAQw1C,IAAkBE,EAAUvpC,SAASqpC,GAAc5pC,KAC3G,GAAwC,IAApCgqC,EAAyBrhC,OAC3B,OAAO,KAET,MAAMshC,EAAyB,CAC7B,IACKD,EAAyB,GAC5B/gC,UAAWkC,EAAMlC,UACjBG,QAAS+B,EAAM/B,QACfpJ,GAAImL,EAAMnL,KAGd,OAAOjM,KAAKm2C,2BAA2BF,GACnCC,EACAD,IAEL51C,OAAQ+W,KAAYA,GACpBoL,OAAO,CAAC4zB,EAAaC,IACb,IAAID,KAAgBC,GAC1B,GACP,CAEQF,2BAA2BV,GACjC,OAAOA,EAAerxB,MAAOyxB,MAC3BhT,OAAcgT,EAAcjkC,WAAY6jC,EAAe,GAAG7jC,YAE9D,CAEAR,qBACEpR,KAAKuK,WAAW64B,aACd,8BACApjC,KAAKmzC,UACLpY,MAAaO,YACbjsB,EACA4rB,MAAe5tB,OAEjBrN,KAAK+V,iBAAiBnS,MAAK,EAC7B,CAEA0N,gBAAgBglC,EAAiC7S,EAAe8S,GAC9Dv2C,KAAKgW,cAAcpS,KAAK,IACnB0yC,EACHnxB,WAAYse,EACZlxB,WAAYgkC,GAEhB,CAEArvC,gBAAgBC,EAAoBoL,EAAoBkxB,GACtDzjC,KAAK0K,cAAc9G,KAAK,CACtBuD,WACAoL,aACAkxB,UAGFzjC,KAAKwK,cAAcG,OACjBxK,MAAc,CAACH,KAAK4K,UAAW5K,KAAKw3B,eACjCp3B,QACC0K,MAAK,IAAC,EACNzK,MAAO,EAAE2K,KAAcA,EAAS4J,OAAS,IAE1C7J,UAAU,EAAEC,EAAUqM,MACrB,MAAM1L,EAAiBX,EAAStL,KAAMkM,IAAYA,GAAQzE,WAAaA,GAEvEnH,KAAKuK,WAAWY,kBACdC,MAASS,eACTP,OAA8B,CAACK,GAAiB3L,KAAKizC,QAAS57B,EAAYpM,QAAO,GAI3F,CAEAO,cACExL,KAAKwK,iBAAgBiB,OAAYzL,KAAKwK,cACxC,CAACnJ,SAAArB,KAAA,mBAAAsB,iBArUU0xC,GAAwB70C,MAAAqF,MAAArF,MAAA2G,OAAA,EAAAzD,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAAxBwxC,EAAwBvxC,UAAA,gCAAAC,OAAA,CAAAkkB,QAAA,UAAAlU,cAAA,gBAAA8lB,aAAA,eAAAtB,YAAA,cAAA2a,iBAAA,mBAAA95B,wBAAA,0BAAAjF,yBAAA,2BAAAC,4BAAA,8BAAAnH,UAAA,YAAAqoC,QAAA,UAAAE,UAAA,YAAAnhC,iBAAA,mBAAAC,6BAAA,+BAAAC,eAAA,iBAAAg/B,oBAAA,sBAAA7+B,eAAA,iBAAAD,qBAAA,wBAAA1O,QAAA,CAAAgH,cAAA,gBAAAqL,iBAAA,mBAAAC,cAAA,gBAAAxE,YAAA,cAAAD,kBAAA,qBAAAsG,SAAA,CAAA1Z,OAAAwD,MAAA,EAAAC,KAAA,EAAAC,OAAA,02EAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDtDrC5D,MAAA,EAAAq4C,GAAA,yCAyKAr4C,MAnBA,EAAAs4C,GAAA,yBAAAt4C,MAmBAA,CAnBkE,EAAAu4C,GAAA,yBAAAv4C,aAtJhCA,MAAA,UAAAA,MAAA,IAAA6D,EAAAqxC,gdCsDrBL,CAAwB,2DClDH70C,MAAA,GAA+BA,MAAA,4CAD3DA,MAAA,GACEA,MAAA,wBAA0BA,MAAA,EAAAw4C,GAAA,iEAA1Bx4C,cAAA,IAAAA,MAAA,IAAAy4C,GAAA,IAAyCz4C,MAAA,GAAAA,MAAA,QAAA04C,8BAG7C14C,MAAA,UAA8BA,MAAA,GAAoBA,+BAApBA,cAAA,IAAAyI,EAAAkwC,eAAA,+BAL9B34C,MAFJ,SAEIA,CAFkF,WAElFA,CAD0C,UAExCA,MAAA,EAAA44C,GAAA,sBAGF54C,QACAA,MAAA,EAAA64C,GAAA,cACF74C,QACAA,MAAA,GACFA,8BAPyCA,MAAA,GAAAA,MAAA,UAAAyI,EAAAqwC,eAI9B94C,cAAA,OAAAyI,EAAAkwC,iBCGJ,IAAMI,GAA+B,MAAtC,MAAOA,EALbn3C,cAMWC,KAAAm3C,cAA0B,GAUnCj3C,WACEF,KAAKi3C,cAAgBj3C,KAAKm3C,cAAc12C,IAAK0U,MAAiBiiC,OAAYjiC,EAAcnV,KAAK6U,WAC/F,CAEA6B,YAAYC,GACLA,EAAQwgC,eAAkBrrB,cAC7B9rB,KAAKi3C,cAAgBj3C,KAAKm3C,cAAc12C,IAAK0U,MAAiBiiC,OAAYjiC,EAAcnV,KAAK6U,YAEjG,CAACxT,SAAArB,KAAA,mBAAAsB,iBAnBU41C,EAA+B,EAAA71C,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAA/B01C,EAA+Bz1C,UAAA,mCAAAC,OAAA,CAAAy1C,cAAA,gBAAAtiC,UAAA,YAAAiiC,eAAA,kBAAAj/B,SAAA,CAAA1Z,OAAA2b,mBAAAzb,GAAAsD,MAAA,EAAAC,KAAA,EAAAC,OAAA,8LAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,YDV5C5D,MAAA,EAAAk5C,GAAA,kBAAKl5C,MAAA,OAAA6D,EAAAi1C,cAAAriC,OAAA,6ECUQsiC,CAA+B,kECa1C/4C,MAAA,GACEA,MAAA,6CAAAA,cAAA,IAAAA,MAAA,2FAMFA,MAAA,oCAAAA,MAAA,IAAAA,MAAA,qECjBK,IAAMm5C,GAAwB,MAA/B,MAAOA,EANbv3C,cAOWC,KAAAu3C,kBAAoBA,MACpBv3C,KAAAmI,eAAiBA,KAK3B9G,SAAArB,KAAA,mBAAAsB,iBAPYg2C,EAAwB,EAAAj2C,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAAxB81C,EAAwB71C,UAAA,2BAAAC,OAAA,CAAAmT,UAAA,YAAAuC,MAAA,QAAAtC,cAAA,iBAAAnT,MAAA,GAAAC,KAAA,GAAAC,OAAA,uQAAAC,SAAA,SAAAC,EAAAC,MAAA,EAAAD,IDRnC5D,MALF,mCAKEA,CADD,gBAC0CA,MAAA,mDAK3CA,UAEAA,MAAA,0FAWEA,MAAA,EAAAq5C,GAAA,sBAGAr5C,MAAA,kBACFA,QAEAA,MAAA,GAAAs5C,GAAA,yBAAAt5C,+BA1BEA,MADA,gBAAAA,MAAA,GAAAE,GAAA2D,EAAAoV,MAAAlC,UAAAC,aAAAnT,EAAAoV,MAAA/B,QAAAF,cACAhX,CAD4E,YAAA6D,EAAA6S,WAGnC1W,MAAA,GAAAA,MAAA6D,EAAA8S,eAAA9S,EAAAoV,MAAA+hB,WAAAh7B,MAAA,mBAAA6D,EAAAoV,MAAA+hB,WAAAI,eAAAp7B,MAAA,WAAA6D,EAAAoV,MAAA5X,WAAA,KAAAwC,EAAAoV,MAAA5X,WAAA2B,OAQzChD,MAAA,yQAUeA,MAAA,GAAsDA,MAAtD,OAAA6D,EAAAoV,MAAA+hB,aAAAn3B,EAAAu1C,kBAAAG,QAAsDv5C,CAAA,WAAAw5C,GAG1Dx5C,cAAA,OAAA6D,EAAAmG,eAAAgL,6OCbAmkC,CAAwB,uGCL/Bn5C,MAAA,uCAMEA,MAHA,cAGAA,CAHe,gBAGfA,CAFmB,WAEnBA,CADe,YAAAy5C,6CA4Bfz5C,MAAA,+CAOEA,MAAA,sBAAAA,MAAA0I,GAAA,MAAAD,EAAAzI,MAAA,UAAAA,MAAYyI,EAAAqP,cAAArS,KAAAgD,EAAAgf,QAAAze,UAAoC,GACjDhJ,iCAFCA,MAHA,OAAAA,MAAA,EAAAE,GAAAuI,EAAAuB,eAAAE,KAAAzB,EAAAiM,aAAAC,OAGA3U,CAHoE,QAAAyI,EAAA4B,YAAAG,0BAGpExK,CAF+C,OAAAyI,EAAAqM,WAAAC,YAE/C/U,CAD+B,OAAAA,MAAA,8HAIjCA,MAAA,oDAMEA,MAAA,sBAAAA,MAAAsyB,GAAA,MAAA7pB,EAAAzI,MAAA,UAAAA,MAAYyI,EAAAqP,cAAArS,KAAAgD,EAAAgf,QAAAze,UAAoC,GACjDhJ,iCAFCA,MAFA,OAAAA,MAAA,EAAAI,GAAAqI,EAAAuB,eAAAE,MAEAlK,CAFsC,OAAAA,MAAA,EAAAyU,GAAAzU,MAAA,oBAEtCA,CADmD,QAAAyI,EAAAgsB,gBAAAjqB,sHAdvDxK,MAAA,GACEA,MAAA,EAAA05C,GAAA,wCASA15C,MAAA,EAAA25C,GAAA,4EARG35C,cAAA,YAAAA,MAAA,IAAAyI,EAAAqmC,YAUA9uC,MAAA,GAAAA,MAAA,YAAAA,MAAA,IAAAyI,EAAAqmC,uCAQH9uC,MAAA,YAAoCA,MAAA,mBAAyDA,+BAA7CA,cAAA,OAAAyI,EAAAwD,WAAA+hC,wCA5DxDhuC,MAAA,6CAOIA,MADF,UACEA,CADyD,WAEvDA,MAAA,EAAA45C,GAAA,uDAQF55C,QACAA,MAAA,WACEA,MAAA,gDAEJA,UACAA,MAAA,kEAOIA,MADF,YACEA,CAD6B,+BAE3BA,MAAA,gCACFA,QACAA,MAAA,aACEA,MAAA,yBAEJA,UACAA,MAAA,iDAKEA,MAAA,GAAA65C,GAAA,yCAmBA75C,MAAA,GAAA85C,GAAA,yBAAA95C,OAKNA,oDA5DEA,MADA,iBAAAA,MAAA,KAAAyI,EAAAqmC,WACA9uC,CADiD,oBAAAA,MAAA,KAAAyI,EAAAqmC,YAM1C9uC,MAAA,GAAAA,MAAA,OAAAA,MAAA,KAAAA,MAAA,KAAAyI,EAAA0hC,SAAA,aASqBnqC,MAAA,GAAAA,MAAA,YAAAA,MAAA,MAAAA,MAAA,MAAAyI,EAAA0hC,SAAA,eAAAnqC,OAK1BA,MAAA,GAEAA,MAFA,oBAAAA,MAAA,MAAAyI,EAAAqmC,WAEA9uC,CAFoD,iBAAAA,MAAA,MAAAyI,EAAAqmC,WAEpD9uC,CADiD,2BAAAA,MAAA,MAAAyI,EAAAqmC,YAII9uC,MAAA,GAAAA,MAAA,iBAAAA,MAAA,MAAAyI,EAAAqmC,YACjD9uC,MAAA,GAAAA,MAAA,IAAAA,MAAA,2BAGAA,MAAA,GAAAA,MAAA,IAAAA,MAAA,cAAA+5C,EAAA,MAAAtxC,EAAAgf,QAAA3R,OAAA,KAAArN,EAAAgf,QAAA3R,OAAArM,mBAAAyH,IAAA6oC,IAAAtxC,EAAAgf,QAAA5R,YAAA,KAKF7V,MAAA,GACAA,MADA,iBAAAA,MAAA,MAAAyI,EAAAqmC,WACA9uC,CADiD,mBAAAA,MAAA,MAAAyI,EAAAqmC,YAGlC9uC,MAAA,GAA2DA,MAA3D,YAAAA,MAAA,YAAAyI,EAAAgf,QAAA3R,OAAA,KAAArN,EAAAgf,QAAA3R,OAAAQ,kBAA2DtW,CAAA,WAAAg6C,8BA0B9Eh6C,MAAA,qDACEA,MAAA,6CACFA,8BAFmBA,MAAA,QAAAA,MAAA,+CACdA,MAAA,GAAAA,MAAA,YAAAA,MAAA,IAAAA,MAAA,IAAAyI,EAAA0hC,SAAA,eAAAnqC,QClDA,IAAMi6C,GAAmB,MAA1B,MAAOA,EAsBXr4C,YACUiD,EACAC,GADAjD,KAAAgD,kBACAhD,KAAAiD,oBAvBDjD,KAAAiT,WAAaA,KACbjT,KAAA+S,WAAaA,KACb/S,KAAAwI,YAAcA,KACdxI,KAAA4yB,gBAAkBA,KAClB5yB,KAAA6I,SAAWA,MACX7I,KAAA6S,aAAeA,KACf7S,KAAAoK,WAAaA,MACbpK,KAAAmI,eAAiBA,KAU1BnI,KAAAiW,cAAwC,IAAI9S,MAQ1CnD,KAAKitC,UAAYjtC,KAAKiD,kBAAkBK,cAAc,SACxD,CAEApD,WACEF,KAAKsoC,SAAWtoC,KAAKgD,gBAAgBK,YAAYrD,KAAK4lB,QAAQ3R,OAAOokC,WACvE,CAACh3C,SAAArB,KAAA,mBAAAsB,iBA/BU82C,GAAmBj6C,MAAAqF,OAAArF,MAAAqF,OAAA,EAAAnC,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAAnB42C,EAAmB32C,UAAA,sBAAAC,OAAA,CAAAkkB,QAAA,UAAA0yB,kBAAA,qBAAA50C,QAAA,CAAAuS,cAAA,iBAAAtU,MAAA,EAAAC,KAAA,EAAAC,OAAA,8hCAAAC,SAAA,SAAAC,EAAAC,MAAA,EAAAD,GDgDhC5D,MAjEA,EAAAo6C,GAAA,cAiEAp6C,CA5DC,EAAAq6C,GAAA,yBAAAr6C,6BAJoDA,MAAlD,OAAA6D,EAAA4jB,QAAAze,WAAAnF,EAAA6G,SAAAyK,aAAkDnV,CAAA,WAAAs6C,wJCgBxCL,CAAmB,oFCM1Bj6C,MAAA,yEAEEA,MAAA,sBAAAA,MAAAwqB,GAAA,MAAApmB,EAAApE,MAAA,UAAAA,MAAYoE,EAAAm2C,kBAAiB,GAI9Bv6C,iCADCA,MAFA,QAAAoE,EAAAiG,YAAAmwC,0BAEAx6C,CAF+C,OAAAA,MAAA,IAAAoE,EAAAq2C,kBAAA,uBAE/Cz6C,CADoE,OAAAA,MAAA,EAAAE,GAAAF,MAAA,IAAAoE,EAAAq2C,kBAAA,mEAzBxEz6C,MAFJ,QAEIA,CAF0E,wBAE1EA,CAD0C,cACJA,MAAA,mBAAAA,MAAAqb,GAAA,MAAAjX,EAAApE,QAAA,OAAAA,MAAAoE,EAAAs2C,WAAqB,EAAI,GAC7D16C,MAAA,8BAEJA,UAEAA,MAAA,6CAIEA,MAAA,mBAAAA,MAAAqb,GAAA,MAAAjX,EAAApE,QAAA,OAAAA,MAAAoE,EAAAs2C,WAAqB,EAAK,GAE1B16C,MAAA,4BAGEA,MADF,UACEA,CADW,2EAMTA,MAAA,sBAAAA,MAAAqb,GAAA,MAAAjX,EAAApE,QAAA,OAAAA,MAAAoE,EAAAs2C,WAAwB,EAAK,GAC9B16C,QACDA,MAAA,GAAA26C,GAAA,qBASN36C,oCA7BMA,MAAA,GAAAA,MAAA,IAAAA,MAAA,IAAAoE,EAAAq2C,kBAAA,kBAKFz6C,MAAA,GAEAA,MAFA,QAAAA,MAAA,KAAAoE,EAAAq2C,kBAAA,gBAEAz6C,CAF8D,OAAAoE,EAAAs2C,UAE9D16C,CADkB,UAAAoE,EAAAa,aAAAk8B,QAIyCnhC,MAAA,GAAAA,MAAA,YAAAoE,EAAAw2C,eAKvD56C,MAAA,GAEAA,MAFA,OAAAA,MAAA,uBAEAA,CAF0C,QAAAoE,EAAAiG,YAAAE,wBAE1CvK,CAD6C,OAAAA,MAAA,GAAAE,GAAAF,MAAA,yBAK5CA,MAAA,GAAAA,MAAA,OAAAoE,EAAA0R,SCRF,IAAM+kC,GAAyB,MAAhC,MAAOA,EAmBXj5C,YAAoBiD,GAAAhD,KAAAgD,kBAlBXhD,KAAAoD,aAAeA,KACfpD,KAAAwI,YAAcA,KAMvBxI,KAAAiU,QAAS,EAETjU,KAAA64C,WAAY,EAOZ74C,KAAAiW,cAAwC,IAAI9S,KAEW,CAEvDjD,WACEF,KAAK44C,kBAAoB,eAAe54C,KAAKmH,oBAC7CnH,KAAK+4C,cAAgB/4C,KAAKgD,gBACvBK,YAAwB,GAAGrD,KAAK44C,uCAChCx4C,QACCK,MAAKw4C,KAEDC,OAAQ,GACRC,KAAM,CAACF,GACPG,OAAQ,OAEX,EACDl4C,SAEN,CAEAw3C,kBACE14C,KAAKiW,cAAcrS,KAAK5D,KAAKmH,UAC7BnH,KAAK64C,WAAY,CACnB,CAACx3C,SAAArB,KAAA,mBAAAsB,iBAxCU03C,GAAyB76C,MAAAqF,OAAA,EAAAnC,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAAzBw3C,EAAyBv3C,UAAA,4BAAAC,OAAA,CAAAyF,SAAA,WAAA8M,OAAA,UAAAvQ,QAAA,CAAAuS,cAAA,iBAAAtU,MAAA,EAAAC,KAAA,EAAAC,OAAA,+TAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDhBtC5D,MAAA,EAAAk7C,GAAA,sDAAMl7C,MAAA,OAAAA,MAAA,IAAA6D,EAAA42C,kBAAA,mECgBOI,CAAyB,0DCfpC76C,MAAA,oEAKEA,MAHA,YAAAuI,EAAA4yC,UAGAn7C,CAHuB,aAAAuI,EAAAkL,WAGvBzT,CAFyB,QAAAuI,EAAA0Q,MAEzBjZ,CADe,UAAAuI,EAAAkf,mCAGjBznB,MAAA,qEAAqFA,MAA3B,UAAAuI,EAAA6yC,eAA2Bp7C,CAAD,YAAAuI,EAAA4yC,sCARtFn7C,MAAA,KAQEA,MAPA,EAAAq7C,GAAA,+CAOAr7C,CADC,EAAAs7C,GAAA,+EAPqCt7C,MAAA,iBAAAuI,EAAAkf,QAAA,KAAAlf,EAAAkf,QAAAze,UAEnChJ,cAAA,eAAAuI,EAAAmC,SAAAC,OCgBE,IAAM4wC,GAAmC,MAA1C,MAAOA,EALb35C,cAUWC,KAAAs5C,UAAY,cACFt5C,KAAA6I,SAAWA,MACpB7I,KAAAu5C,eAAmC,GAE7C7iC,cACE1W,KAAK25C,QACP,CAEAz5C,WACEF,KAAK25C,QACP,CAEQA,SACN35C,KAAKu5C,kBAAiBK,OACpB55C,KAAK4lB,SAASze,SACdnH,KAAKoX,MACLpX,KAAK4lB,QACL5lB,KAAKoU,kBAET,CAAC/S,SAAArB,KAAA,mBAAAsB,iBAxBUo4C,EAAmC,EAAAr4C,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAAnCk4C,EAAmCj4C,UAAA,wCAAAC,OAAA,CAAAkQ,WAAA,aAAAwF,MAAA,QAAAwO,QAAA,UAAAxR,kBAAA,oBAAAklC,UAAA,aAAAzhC,SAAA,CAAA1Z,OAAAwD,MAAA,EAAAC,KAAA,EAAAC,OAAA,gOAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,GDlBhD5D,MAAA,EAAA07C,GAAA,2BAAe17C,MAAA,aAAA6D,EAAA4jB,QAAA,KAAA5jB,EAAA4jB,QAAAze,sDCkBFuyC,CAAmC,+BClBhDv7C,MAAA,GACEA,MAAA,SACEA,MAAA,8BACFA,sCAFKA,cAAA,GAAAuI,EAAA4yC,UAAA,4CACHn7C,cAAA,IAAAA,MAAA,uEAIFA,MAAA,UACEA,MAAA,GACFA,6CAFiDA,MAAA,GAAAuI,EAAA4yC,UAAA,8BAC/Cn7C,cAAA,IAAA27C,EAAA,gCAFJ37C,MAAA,YACEA,MAAA,EAAA47C,GAAA,cAGF57C,8BAHyBA,cAAA,UAAAuI,EAAAszC,aAAA,GAAA/f,kCAQnB97B,MAAA,UACEA,MAAA,GACFA,6CAF6CA,MAAA,GAAAuI,EAAA4yC,UAAA,6BAC3Cn7C,cAAA,IAAA87C,EAAA,6BAGJ97C,MAAA,UAA2BA,MAAA,SAAEA,mCAP/BA,MAAA,UACEA,MAAA,GACAA,MAAA,YACEA,MAAA,EAAA+7C,GAAA,cAGF/7C,QACAA,MAAA,EAAAg8C,GAAA,cACFh8C,sDARmEA,MAAA,GAAAuI,EAAA4yC,UAAA,8BACjEn7C,cAAA,IAAAi8C,EAAA7pC,OAAA,MAEyBpS,MAAA,GAAAA,MAAA,UAAAi8C,EAAAngB,OAIlB97B,cAAA,QAAAk8C,8BARXl8C,MAAA,GACEA,MAAA,EAAAm8C,GAAA,4CAA8Bn8C,cAAA,UAAAuI,EAAAszC,eCCzB,IAAMO,GAAuC,MAA9C,MAAOA,EALbx6C,cASWC,KAAAs5C,UAAY,cACXt5C,KAAAg6C,aAAkC,GAE5CtjC,cACE1W,KAAK25C,QACP,CAEAz5C,WACEF,KAAK25C,QACP,CAEQA,SACN35C,KAAKg6C,gBAAeQ,OAAiBx6C,KAAK4R,WAAY5R,KAAKoX,MAAOpX,KAAK4lB,QACzE,CAACvkB,SAAArB,KAAA,mBAAAsB,iBAjBUi5C,EAAuC,EAAAl5C,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAAvC+4C,EAAuC94C,UAAA,6CAAAC,OAAA,CAAAkQ,WAAA,aAAAwF,MAAA,QAAAwO,QAAA,UAAA0zB,UAAA,aAAAzhC,SAAA,CAAA1Z,OAAAwD,MAAA,EAAAC,KAAA,EAAAC,OAAA,wGAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,GDFpD5D,MAVA,EAAAs8C,GAAA,qBAUAt8C,CAVgD,EAAAu8C,GAAA,aAUhDv8C,CALgE,EAAAw8C,GAAA,4BALjDx8C,MAAA,WAAA6D,EAAAg4C,aAAAplC,QAKRzW,cAAA,WAAA6D,EAAAg4C,aAAAplC,QAKQzW,cAAA,OAAA6D,EAAAg4C,aAAAplC,OAAA,gDCEF2lC,CAAuC,wDCL7Cp8C,MAAA,UAA4BA,MAAA,GAAsBA,yCAAtBA,cAAA,GAAAy8C,EAAA7mC,SAAA,kCAD/B5V,MAAA,UACGA,MAAA,EAAA08C,GAAA,cAAyD18C,MAAA,GAAeA,wCAAjEA,cAAA,OAAAy8C,EAAA7mC,UAAkD5V,cAAAy8C,EAAAE,iCAE5D38C,MAAA,UAAsCA,MAAA,8BAAmEA,wCAAnEA,oBAAA,IAAAy8C,EAAAlzC,YAAAvJ,MAAA,EAAAE,GAAAu8C,EAAA7mC,uCARxC5V,MAAA,UAQEA,MAHA,EAAA48C,GAAA,aAGA58C,CAFG,EAAA68C,GAAA,cAGL78C,4CAPEA,MAAA,GAAAoE,EAAA+2C,UAAA,8BACAn7C,MAAA,gBAAAy8C,EAAAhgB,OAAAr4B,EAAA04C,YAAAC,cAEO/8C,cAAA,OAAAy8C,EAAAE,MAGA38C,cAAA,YAAAy8C,EAAAlzC,cCIJ,IAAMyzC,GAAwC,MAA/C,MAAOA,EALbp7C,cAUEC,KAAAs5C,UAAY,cAEHt5C,KAAAi7C,YAAcA,MACxB55C,SAAArB,KAAA,mBAAAsB,iBARY65C,EAAwC,EAAA95C,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAAxC25C,EAAwC15C,UAAA,8CAAAC,OAAA,CAAA05C,QAAA,UAAA9B,UAAA,aAAA33C,MAAA,EAAAC,KAAA,EAAAC,OAAA,mFAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDbrD5D,MAAA,YACEA,MAAA,EAAAk9C,GAAA,cAUFl9C,eATqBA,cAAA,UAAA6D,EAAAo5C,sDCWRD,CAAwC,+BCXjDh9C,MAAA,YAAsCA,MAAA,8BAAsCA,8BAAtCA,oBAAA,IAAAuI,EAAA40C,2CAKlCn9C,MAAA,uCAAkEA,MAAvB,OAAAuI,EAAA60C,IAAA1xC,KAAA1I,KAAuBhD,CAAD,WAAAuI,EAAA60C,IAAA1xC,KAAA1C,qCAFrEhJ,MAAA,gBACEA,MAAA,EAAAq9C,GAAA,mBAGAr9C,MAAA,8BACFA,8BAJEA,cAAAuI,EAAA60C,IAAA1xC,KAAA,MAGA1L,cAAA,IAAAA,MAAA,IAAAuI,EAAA60C,IAAA3c,SAAA,MCMC,IAAM6c,GAAoB,MAA3B,MAAOA,EAAoBp6C,SAAArB,KAAA,mBAAAsB,iBAApBm6C,EAAoB,EAAAp6C,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAApBi6C,EAAoBh6C,UAAA,uBAAAC,OAAA,CAAA45C,eAAA,iBAAAC,IAAA,OAAA55C,MAAA,EAAAC,KAAA,EAAAC,OAAA,4JAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDfjC5D,MAAA,WAIEA,MAHA,EAAAu9C,GAAA,aAGAv9C,CAHsB,EAAAw9C,GAAA,kBAWxBx9C,eAXEA,cAAA6D,EAAAs5C,eAAA,MAGAn9C,cAAA6D,EAAAu5C,IAAA,kYCWWE,CAAoB,qDCR3Bt9C,MAAA,sBAA2DA,MAAA,oBCK1D,IAAMy9C,GAAyB,MAAhC,MAAOA,EANb77C,cAOWC,KAAAmI,eAAiBA,KACjBnI,KAAA6+B,SAAWA,KACX7+B,KAAA67C,mBAAqBA,KAIpB77C,KAAA87C,cAAuC,IAAI34C,MAErD44C,WAAWhgB,GACT/7B,KAAK87C,cAAcl4C,KAAKm4B,EAC1B,CAAC16B,SAAArB,KAAA,mBAAAsB,iBAXUs6C,EAAyB,EAAAv6C,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAAzBo6C,EAAyBn6C,UAAA,6BAAAC,OAAA,CAAAs6C,mBAAA,qBAAAllB,OAAA,UAAApzB,QAAA,CAAAo4C,cAAA,iBAAAn6C,MAAA,GAAAC,KAAA,GAAAC,OAAA,wkBAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDPpC5D,MALF,UAKEA,CADD,WAEGA,MAAA,EAAA89C,GAAA,kBAAA99C,OAGFA,QAEEA,MADF,UACEA,CADgD,SAE9CA,MAAA,8BACFA,QACAA,MAAA,SACEA,MAAA,+BAEJA,UAGIA,MAFJ,WAEIA,CAF6C,WAE7CA,CAD2C,iBACNA,MAAA,IACvCA,UACAA,MAAA,2BAEEA,MAAA,wBAAAwF,GAAA,OAAgB3B,EAAA+5C,WAAAp4C,EAAA00B,SAAAr2B,EAAA65C,mBAAAK,UAA0D,GAIhF/9C,mBAzBEA,MADA,qBAAA6D,EAAA80B,OACA34B,CADmC,WAAA6D,EAAA80B,QAIjC34B,MAAA,GAAAA,YAAA,GAAAE,GAAA2D,EAAAmG,eAAAg0C,gBAAAn6C,EAAAmG,eAAAE,KAAArG,EAAAmG,eAAA6Y,OAME7iB,MAAA,GAAAA,MAAA,IAAAA,MAAA,4CAGAA,MAAA,GAAAA,MAAA,IAAAA,MAAA,oDAKUA,MAAA,GAAAA,MAAA,QAAA6D,EAAA68B,SAAAud,SAA2Bj+C,cAAA,IAAA6D,EAAAg6C,mBAAA,KAGrC79C,cAAA,SAAA6D,EAAA80B,OAAA90B,EAAA65C,mBAAAQ,OAAAr6C,EAAA65C,mBAAAK,ugBCXON,CAAyB,iFCH/B,IAAMU,GAAiB,MAAxB,MAAOA,EACX3f,UAAUtsB,EAAgBymB,GAAS,GACjC,IAAIA,GACGzmB,GAAQA,QAAuC,GAA7Bi6B,WAAWj6B,EAAOA,QAK3C,OAAOA,CACT,CAAChP,SAAArB,KAAA,mBAAAsB,iBATUg7C,EAAiB,EAAAj7C,SAAArB,KAAA,WAAAuB,EAAAg7C,IAAA,8BAAjBD,EAAiBE,MAAA,IAAAn7C,SAAArB,KAAA,WAAAuB,EAAA2X,IAAA,OAAjBojC,EAAiBnjC,QAAjBmjC,EAAiBljC,mBAAjBkjC,CAAiB,kXCIvB,IAAMG,GAAmB,MAA1B,MAAOA,EAAmBp7C,SAAArB,KAAA,mBAAAsB,iBAAnBm7C,EAAmB,EAAAp7C,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAAnBi7C,EAAmBh7C,UAAA,sBAAAC,OAAA,CAAA+F,MAAA,SAAAqS,mBAAAzb,GAAAsD,MAAA,EAAAC,KAAA,EAAAC,OAAA,8MAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,YCZ9B5D,MADF,UACEA,CADuE,WAErEA,MAAA,GACFA,QACAA,MAAA,WACEA,MAAA,GAEJA,iBALIA,MAAA,GAAAA,MAAA,IAAA6D,EAAAyF,MAAA,kDDWSg1C,CAAmB,iFEqFzB,IAAMC,GAA8B,MAArC,MAAOA,EAA8Br7C,SAAArB,KAAA,mBAAAsB,iBAA9Bo7C,EAA8B,EAAAr7C,SAAArB,KAAA,UAAAuB,EAAAyC,GAAA,MAA9B04C,IAA8Br7C,SAAArB,KAAA,UAAAuB,EAAA0C,IAAA,UAnBvC4J,KACA3J,KACAC,KACAE,MACAC,IACAI,KACAi4C,KACAn4C,KACAkJ,KACAkvC,KACAC,KACAp4C,KACAL,IACAG,IACAR,cAKS24C,CAA8B,WAnDzCpyC,IAAoB,CAAA9G,UAAAsB,KAAAC,MAAA,CAAAvB,KAAAwB,KAAAE,KAAAC,KAAAC,KAAAC,GAAAC,aACpBqpB,GAAoB,CAAAppB,KAAA/B,UAAAgC,KAAAV,KAAAW,MAAA,CAAAjC,KAAA0B,KAAAQ,KAAAN,KAAAE,aACpBkmB,GAA2B,CAAAjmB,KAAA/B,UAAAoC,KAe3B4pC,IAAwB,CAAAtqC,KAAAI,aAdxBklB,EAAuB,IAAAtlB,KAAAI,aACvBynB,GAAoB,CAAAvpB,WAAA,CAAAwB,KAAAM,aACpBglB,EAAuB,CAAA9mB,KAAAoC,MAAA,CAAApC,KAAA8B,aACvBw3C,KAA+B,CAAAv3C,KAAA/B,8BAAAgC,KAAAV,KAAAe,KAAAD,KAAAG,KAAAC,KAAAC,KAAAC,KAAAC,0CAAAE,KAAAC,KAAAE,KAAAC,MAJ/B+kB,GAEAuB,GACAzC,EAEAyF,IAAsB,CAAAvsB,KAAAu5C,KAAA73C,KAAAE,KAAAE,KAAA03C,KAAAC,aAAtBltB,GAAsB,CAAAnqB,KAAAs3C,MAAA,UACtBzB,GAAoB,CAAA71C,KAAAY,MAAA,CAAAlB,aACpBs2C,GAAyB,CAAAh2C,KAAAY,KAAA22C,MAAA,CAAA73C,aACzB83C,KAAyB,CAAA73C,KAAA83C,KAAA75C,UAAA85C,IAAAC,KAAAC,IAAAC,KAAAC,KACzBxoB,IAAoB,CAAA1xB,KAAAwB,KAAAE,KAAAE,KAAAE,aAApB4vB,GAAoB,CAAA3vB,KAAAo4C,KAAAn6C,eAAAoC,KAAAg4C,KAAAn3C,MAAAg3C,KAAAI,KAAAC,KAVpBnvB,GAOA8sB,GACAG,GAGArb,GACAwB,GACAoE,GAEAwC,IAAyB,CAAAnlC,KAAA8B,KAAA03C,aAJzBzc,GAAuB,CAAAod,KAAAn6C,UAAAoC,KAAAO,kBAAA43C,MAAA,CAAAv6C,KAAA8B,aAGvB04C,KAAyB,CAJzB9oB,IAAoB,UAKpByT,GAAyB,CAAAgV,KAAAn6C,UAAAgC,KAAAy4C,KAAA33C,KAAAm3C,KAAAS,MAAA,CAAA16C,KAAA0B,KAAAQ,KAAAN,KAAAE,aACzBkqC,GAAwB,CAAAjqC,KAAA/B,oBAAAsB,KAAAc,KAAAY,KAAA02C,KAAAiB,IAAA,CAAA36C,KAAAwB,KAAAE,KAAAI,aACxB0tC,GAAwB,CAAAztC,KAAA/B,oBAAA46C,KAAAv4C,KAAAD,KAAA63C,KAAAY,KAAAC,KADxB9O,GAEA0H,IAA+B,CAAA1zC,KAAA4B,KAAAm5C,KAAAj5C,aAC/BkQ,KAAyB,CAAAjQ,KAAA/B,eAAAiD,MAAA+3C,KAAAC,KAFzBzL,GAGAsE,GACAc,GACAY,GACA0F,MAA4B,CAAAl7C,KAAA0B,KAAAE,KAAAE,aAH5BgyC,GAAwB,CAAA9zC,KAAAoC,KAAAY,KAFxB0wC,IAA+B,CAAA1zC,KAAA8B,aAG/B8yC,GAAmB,CAAA7yC,KAAAo4C,KAAAn6C,KAAA46C,KAAAt5C,KAAA2B,OAAA,CAAAjD,KAAAu5C,KAAA73C,KAAAI,aACnB0zC,GAAyB,CAAAzzC,KAAA/B,KAAAiD,MAAAg3C,KAAAI,MAAA,CAAAv4C,KAAA03C,aACzB0B,KAA4B,CAAAl7C,UAAAoC,KAAAs3C,KAC5BxD,IAAmC,CAAAp0C,aAAnCo0C,GAAmC,CAAAl2C,oBACnC+2C,GACAY,IAAwC,UADxCZ,GAAuC,CAAA/2C,WAAA,CAAA8B,aACvC61C,GAAwC,CAAA33C,WAAA,CAAA8B,6PC1E1CnH,MAAA,GAEIA,MADF,UACEA,CADsE,UAEpEA,MAAA,8BACFA,QAEEA,MADF,QACEA,CADsB,YAEpBA,MAAA,8BACFA,QACAA,MAAA,iBAAgDA,MAAA,6BAAAA,MAAAqb,GAAA,MAAAjX,EAAApE,QAAA,OAAAA,MAAAoE,EAAAo8C,YAAgC,EAAI,GAClFxgD,MAAA,gCAGNA,YAEAA,MAAA,sBAAiCA,MAAA,sBAAAwF,GAAAxF,MAAAqb,GAAA,MAAAjX,EAAApE,qBAAAoE,EAAAo8C,WAAAh7C,KAAApB,EAAAo8C,WAAAh7C,GAAAxF,MAAAwF,EAAA,GAAsBxF,wCAZnDA,MAAA,GAAAA,MAAA,IAAAA,MAAA,0CAIEA,MAAA,GAAAA,MAAA,IAAAA,MAAA,gDAGAA,MAAA,GAAAA,MAAA,IAAAA,MAAA,8CAKSA,MAAA,GAAAA,MAAA,SAAAoE,EAAAq8C,QAAkBzgD,MAAA,OAAAoE,EAAAo8C,aCO5B,IAAMp4C,EAAwB,MAA/B,MAAOA,EAUXxG,YACUq1B,EACAhd,GADApY,KAAAo1B,gBACAp1B,KAAAoY,SAXDpY,KAAA6+C,cAAe,EAExB7+C,KAAA4+C,OAASE,KAAiBC,WAC1B/+C,KAAA2+C,YAAa,EACb3+C,KAAAg/C,cAAgB,IAAIlpB,KAAgB,GAG5B91B,KAAAwK,cAA8B,IAAIC,IAKvC,CAEHvK,WACE,MAAM++C,EAAaj/C,KAAKoY,OAAOhY,QAAK8+C,SAAS,EAAIp+C,KAAqB,OAAI,EAAGI,SACvEi+C,EAASn/C,KAAKoY,OAAOhY,QAAKg/C,SAAS,EAAIt+C,KAAwB,OAAI,EAAGI,SAE5ElB,KAAKw3B,aAAe2nB,EAAO/+C,QACzB+iB,KAAW8U,GACFA,KAAQh4B,MAAGg4B,GAASgnB,EAAW7+C,QAAKK,KAAK4+C,GAAqBA,GAAOC,aAIhFt/C,KAAKu/C,4BACP,CAEA/zC,cACExL,KAAKwK,iBAAgBiB,OAAYzL,KAAKwK,cACxC,CAEA+0C,6BACE,GAAKv/C,KAAKo1B,cAAc4B,IAAIwoB,gBAI5B,IAAIx/C,KAAK6+C,aAEP,YADA7+C,KAAKg/C,cAAc52B,MAAK,GAI1BpoB,KAAKwK,cAAcG,IACjB3K,KAAKw3B,aAAazsB,UAAWsM,IAC3B,IAAKA,EAEH,YADArX,KAAKg/C,cAAc52B,MAAK,GAI1B,MAAMq3B,KAAWC,MAAmCroC,GAAapM,QAEjEjL,KAAKg/C,cAAc52B,KAAKq3B,IAAaE,KAAYC,UAAS,GAC1D,CAEN,CAACv+C,SAAArB,KAAA,mBAAAsB,iBAtDUiF,GAAwBpI,MAAAqF,OAAArF,MAAA2G,MAAA,EAAAzD,SAAArB,KAAA,UAAA6/C,EAAAr+C,IAAA,MAAxB+E,EAAwB9E,UAAA,4BAAAC,OAAA,CAAAm9C,aAAA,gBAAAl9C,MAAA,EAAAC,KAAA,EAAAC,OAAA,6OAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDtBrC5D,MAAA,EAAA2hD,EAAA,+CAAe3hD,MAAA,OAAAA,MAAA,IAAA6D,EAAAg9C,4DCsBFz4C,CAAwB,6FCZ9B,IAAMw5C,EAAiB,MAAxB,MAAOA,EAOXhgD,YAAoB6lB,GAAA5lB,KAAA4lB,SAA2B,CAE/C1lB,WACEF,KAAK4lB,QAAQtN,KAAKtY,KAAKuY,WACzB,CAAClX,SAAArB,KAAA,mBAAAsB,iBAXUy+C,GAAiB5hD,MAAAqF,KAAA,EAAAnC,SAAArB,KAAA,UAAA6Z,EAAArY,IAAA,MAAjBu+C,EAAiBt+C,UAAA,oBAAAu+C,eAAA,SAAAj+C,EAAAC,EAAAi+C,MAAA,EAAAl+C,WAIXm+C,IAAY,8FANlB,CAAC/nC,OAAgB2B,mBAAAzb,EAAAsD,MAAA,EAAAC,KAAA,EAAAE,SAAA,SAAAC,EAAAC,GAAA,EAAAD,YCR9B5D,MAAA,8BDUa4hD,CAAiB,sIEIvB,IAAM9xC,EAAa,MAApB,MAAOA,EAAa5M,SAAArB,KAAA,mBAAAsB,iBAAb2M,EAAa,EAAA5M,SAAArB,KAAA,UAAAiqB,EAAAjmB,GAAA,MAAbiK,IAAa5M,SAAArB,KAAA,UAAAiqB,EAAAhmB,IAAA,UAJdC,KAAcC,IAAkBE,IAAaG,eAI5CyJ,CAAa,WAHTkyC,IAAgB,CAAA38C,KAAAsB,KAAA,CAAAtB,KAAAuB,uICe1B,IAAMi5C,EAAyB,MAAhC,MAAOA,EAoBXj+C,YAAoBqY,GAAApY,KAAAoY,SAbXpY,KAAAif,iBAAuDhf,MAAG,IAC1DD,KAAAw1B,eAAgB,EAChBx1B,KAAA01B,mBAAsCz1B,WAAGoP,GAEzCrP,KAAAy1B,8BAA+B,EAE9Bz1B,KAAA21B,YAA6C,IAAIxyB,MACjDnD,KAAA41B,eAAuC,IAAIzyB,MAC3CnD,KAAA0wB,aAAyD,IAAIvtB,MAC7DnD,KAAAogD,yBAAkD,IAAIj9C,MAEhEnD,KAAAwK,cAAgB,IAAIC,IAEiC,CAErDqkB,aAAazK,GACXrkB,KAAK21B,YAAY/xB,KAAKygB,GACtBrkB,KAAKqgD,gBACP,CAEAA,iBACErgD,KAAKwK,cAAcG,IACjB3K,KAAKoY,OAAOhY,QAAKojB,SAAc,EAAI1Y,KAAK,IAAIC,UAAWu1C,IACrD,MAAMC,GACJD,GAAqBA,EAAkBtgD,KAAKuQ,OAAOtE,IAAMq0C,EAAkBtgD,KAAKuQ,OAAOtE,IAAM,IAE5F5L,OAAQi+B,IAAmBt+B,KAAKwgD,wBAAwBxgD,KAAK2zB,cAAe3zB,KAAKuQ,OAAOtE,GAAIqyB,IAC5Fj+B,OAAQi+B,GAAkBA,EAAclZ,SAAWkZ,EAAc7hB,eAAiB6hB,EAAc/d,MAChGiC,OACC,CAACi+B,EAAUC,MAEPj2B,MAAOg2B,EAASh2B,MAAQigB,OAAOgW,EAAqBjkC,aAAapM,QAAU,GAC3EswC,aAAcF,EAASE,cAAgBD,EAAqBjkC,aAAakkC,eAG7E,CAAEl2B,MAAO,EAAGk2B,kBAActxC,IAG9BrP,KAAK41B,eAAehyB,KAAK,CACvByM,OAAQuwC,OAAOL,GAAsB91B,OACrCk2B,aAAcJ,GAAsBI,cACrC,GAGP,CAEAzgD,WACEF,KAAKqgD,gBACP,CAEA70C,eACEC,QAAYzL,KAAKwK,cACnB,CAEQg2C,wBACN7sB,EACAkI,EACAyC,GAEA,SAAOtE,MAA+BrG,EAAekI,EAAUyC,EAAcnZ,YAAYF,KACvF,EAAGpJ,gBAAiBA,IAAeyiB,EAAclZ,QAErD,CAEAy7B,+BACE7gD,KAAKogD,yBAAyBx8C,MAChC,CAACvC,SAAArB,KAAA,mBAAAsB,iBAzEU08C,GAAyB7/C,MAAAqF,MAAA,EAAAnC,SAAArB,KAAA,UAAA0Q,EAAAlP,IAAA,MAAzBw8C,EAAyBv8C,UAAA,6BAAAC,OAAA,CAAA6O,OAAA,SAAAinB,aAAA,eAAAtB,YAAA,cAAAC,gBAAA,kBAAAmB,gBAAA,kBAAA3D,cAAA,gBAAA1U,cAAA,gBAAAuW,cAAA,gBAAAE,gBAAA,kBAAA6B,iBAAA,mBAAA9B,6BAAA,gCAAA/xB,QAAA,CAAAiyB,YAAA,cAAAC,eAAA,iBAAAlF,aAAA,eAAA0vB,yBAAA,4BAAAz+C,MAAA,EAAAC,KAAA,GAAAC,OAAA,sPAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IC1BtC5D,MAAA,yBAcEA,MAFA,iCAAgB6D,EAAA0uB,aAAA9sB,KAAA5B,EAAAuO,OAAyB,EAEzCpS,CAF0C,uBAAAwF,GAAA,OAC3B3B,EAAA8sB,aAAAnrB,EAAoB,EACnCxF,CADoC,uCACd6D,EAAA6+C,8BAA8B,GAEtD1iD,cALEA,MAVA,SAAA6D,EAAAuO,OAUApS,CAViB,cAAA6D,EAAAk0B,YAUjB/3B,CAT2B,kBAAA6D,EAAAm0B,gBAS3Bh4B,CARmC,kBAAA6D,EAAAs1B,gBAQnCn5B,CAPmC,gBAAA6D,EAAA2xB,cAOnCx1B,CAN+B,gBAAA6D,EAAAid,cAM/B9gB,CAL+B,eAAA6D,EAAAw1B,aAK/Br5B,CAJ6B,gBAAA6D,EAAAwzB,cAI7Br3B,CAH+B,kBAAA6D,EAAA0zB,gBAG/Bv3B,CAFmC,mBAAA6D,EAAAu1B,iBAEnCp5B,CADqC,+BAAA6D,EAAAyzB,wDDgB1BuoB,CAAyB,gUEMhC7/C,MAJF,WAIEA,CADD,sEAUGA,MADA,gCAAA2iD,EAAA3iD,MAAAqb,GAAAzS,UAAAH,GAAAzI,QAAA,OAAAA,MAAgByI,GAAAm6C,eAAAn9C,KAAAk9C,GAA2B,EAC3C3iD,CAD4C,uBAAAwF,GAAAxF,MAAAqb,GAAA,MAAA5S,GAAAzI,QAAA,OAAAA,MAC7ByI,GAAA+uB,YAAAhyB,GAAmB,GAGtCxF,8DAXIA,QAMAA,MANA,SAAA2iD,EAMA3iD,CANiB,cAAAyI,EAAAo6C,WAMjB7iD,CAL0B,kBAAAA,MAAA,IAAA4qB,KAAA5qB,MAAA,IAAAyI,EAAAq6C,cAK1B9iD,CAJiE,kBAAAyI,EAAAuvB,gBAIjEh4B,CAHmC,eAAAyI,EAAA4wB,aAGnCr5B,CAF6B,gBAAAyI,EAAAs6C,6BAE7B/iD,CAD8C,mBAAAyI,EAAA2wB,8DA0BtDp5B,MAAA,GACEA,MAAA,qFASEA,MAAA,2BAAAA,MAAAgT,GAAA,MAAAvK,EAAAzI,QAAA,OAAAA,MAAiByI,EAAAu6C,WAAU,GAE3BhjD,MAAA,aAA2BA,MAAA,8BAAqDA,QAChFA,MAAA,aAAoCA,MAAA,+DACtCA,sDAXEA,QAIAA,MAJA,aAIAA,CAJgB,QAAAA,MAAA,IAAAijD,EAAAxhD,KAIhBzB,CAH8C,WAAAyI,GAAAkb,eAAAu/B,KAG9CljD,CAFgC,YAAAyI,GAAA06C,0BAAAnjD,MAAA,IAAAyI,GAAA26C,mBAEhCpjD,CAD0E,aAAAA,MAAA,KAAAyI,GAAA46C,gBAAA56C,GAAA4B,YAAAmwC,0BAAA/xC,GAAA4B,YAAAC,0BAM/CtK,MAAA,GAAAA,MAAA,GAAAA,MAAA,wCACSA,MAAA,GAAAA,YAAA,MAAAA,MAAA,MAAAA,MAAA,MAAAyI,GAAAoI,cAAA,uCAWtC7Q,MAAA,4CAMEA,MAHA,kBAAAyI,EAAA66C,eAAA/xC,KAAAgyC,gBAGAvjD,CAHuD,YAAAyI,EAAA66C,eAAA/xC,KAAAvQ,UAGvDhB,CAF2C,WAAAyI,EAAA66C,eAAA/xC,KAAAhR,SAE3CP,CADyC,aAAAyI,EAAA66C,eAAA/xC,KAAAiyC,aC1DtC,IAAMvE,GAAyB,MAAhC,MAAOA,GAgDXr9C,YACUqY,EACA7N,GACA6qB,GAFAp1B,KAAAoY,SACApY,KAAAuK,cACAvK,KAAAo1B,gBAlDDp1B,KAAA6I,SAAWA,KACX7I,KAAAwI,YAAcA,KACdxI,KAAA8hB,eAAiBA,KACjB9hB,KAAAoD,aAAeA,KACfpD,KAAAk0B,cAAgBA,KAMhBl0B,KAAA6U,UAA6B,GAKtC7U,KAAAmiB,wCAAoFliB,MAAG,IAM7ED,KAAA4hD,gBAAkB,IAAIz+C,MACtBnD,KAAA+gD,eAAiB,IAAI59C,MACrBnD,KAAA6hD,YAAc,IAAI1+C,MAE5BnD,KAAAihD,YAAc,IAAInrB,IAAgB,GAClC91B,KAAA+hB,eAAgB,EAChB/hB,KAAA8hD,sBAA+C,IAAI3+C,MAInDnD,KAAAwK,cAA8B,IAAIC,KAClCzK,KAAAyhD,eAAiC,CAC/BzxB,MAAM,EACNtgB,KAAM,MAER1P,KAAA+hD,gBAA+F,IAAIjsB,IACjG,IAGF91B,KAAAkqB,mBAAuCjqB,OAAG,GAC1CD,KAAAu3B,iBAA2D,IAAIzB,IAAgBzc,IAAsBC,KACrGtZ,KAAAshD,0BAA2B,EACnBthD,KAAAgiD,kBAAwF,IAAIjsB,IAElG,EAMC,CAEH71B,WACEF,KAAKshD,yBAA2BthD,KAAKo1B,cAAc4B,IAAIirB,iCACvDjiD,KAAKk2B,YAAcl2B,KAAKw3B,aAAap3B,QAAKK,KAAK4W,GAAgBA,EAAYzF,aAE3E5R,KAAKomB,kBAAiB87B,MAAuBliD,KAAKgiD,qBAAmB/hD,MAAG4I,KAASC,OAEjF9I,KAAKgP,eAAc7O,KAAc,CAACH,KAAKmiD,gBAAiBniD,KAAKomB,iBAAiBhmB,QAC5EK,KAAI,EAAEuT,EAAYouC,OAAa,CAC7B/xC,OAAQuwC,OAAOlW,OAAO12B,EAAW3D,QAAUq6B,OAAO0X,GAAc/xC,SAChEswC,aAAc3sC,EAAW2sC,iBAI7B3gD,KAAKwhD,eAAiBxhD,KAAKm2B,gBAAgB/1B,QACzCK,KAAK4iB,GAAerM,OAAOC,OAAOoM,GAAY4B,KAAM1B,IAAcA,GAAU0B,KAAM/B,GAAMA,EAAErH,eAAY,EACtG3a,SAGFlB,KAAKwK,cAAcG,OACjBxK,KAAc,CAACH,KAAKihD,YAAajhD,KAAKqiD,WACnCjiD,QACCK,KAAI,EAAE6hD,EAAYC,MACTA,GAAQD,KAGlBv3C,UAAWy3C,IACVxiD,KAAK+hB,eAAgB,EACrB/hB,KAAK+gD,eAAen9C,KAAK4+C,GACzBxiD,KAAKqgD,eAAemC,EAAcv2C,GAAE,IAI1CjM,KAAKwK,cAAcG,OACjBxK,KAAc,CAACH,KAAKihD,YAAajhD,KAAKqiD,SAAUriD,KAAKwhD,iBAAiBz2C,UACpE,EAAEu3C,EAAYC,GAASE,MAGrBziD,KAAK0iD,SAFUJ,IAAeC,GAAQ3tC,OAAS,EAEzB6tC,EAAa,GAI3C,CAEAE,eAAetyC,EAAgBkC,IAC7BvS,KAAKgiD,kBAAkB55B,KAAK,IAAK/X,EAAQkC,cAAYpL,SAAU0B,KAASC,MAC1E,CAEAq4C,WACEnhD,KAAKwK,cAAcG,OACjBxK,KAAc,CAACH,KAAKihD,YAAajhD,KAAKqiD,SAAUriD,KAAKwhD,iBAClDphD,QAAK0K,KAAK,IACVC,UAAU,EAAEu3C,EAAYC,GAASE,MAChC,MAAMG,GAASN,IAAeC,GAAQ3tC,OAAS,EAE3C6tC,GACFziD,KAAK6iD,WAAW,sBAGbD,GAEMH,EACTziD,KAAK+hB,eAAgB,EAErB/hB,KAAK8iD,mBAJL9iD,KAAKihD,YAAY74B,KAAKk6B,EAAa,EAAC,GAQ9C,CAEAQ,mBACE9iD,KAAK6iD,WAAW,qBAChB7iD,KAAK+hB,eAAgB,EAErBxT,WAAW,KACTvO,KAAK4hD,gBAAgBh+C,MAAK,EAAI,EAElC,CAEAm/C,kBAAkBC,GAChBhjD,KAAK6iD,WAAW,kBAAkBG,IAAqBA,GAEvDhjD,KAAKwK,cAAcG,IACjB3K,KAAKwhD,eAAephD,QAAK0K,KAAK,IAAIC,UAAW03C,KACvCA,IACFziD,KAAKoY,OAAOQ,SAASsf,wBAEvBl4B,KAAK4hD,gBAAgBh+C,KAAK6+C,GAAa,GAG7C,CAEA9sB,YAAYtR,GACVrkB,KAAK6hD,YAAYj+C,KAAKygB,GACtBrkB,KAAKqgD,eAAeh8B,EAAEwX,SACxB,CAEA6mB,SAASE,EAAiBH,IAGpBziD,KAAK+hD,gBAAgB35B,KAFrBq6B,GACEG,EACwB,CAAEhjD,IAAK,gBAEP,CAAEA,IAAK,sCAE1BgjD,EACiB,CAAEhjD,IAAK,uCAEP,CAAEA,IAAK,gCAErC,CAEAwH,cACEpH,KAAKyhD,kBAAiBwB,MAAyBjjD,KAAKw3B,aAAcx3B,KAAKihD,YACzE,CAEAz1C,eACEC,QAAYzL,KAAKwK,cACnB,CAEA61C,eAAexkB,GACb77B,KAAKwK,cAAcG,IACjB3K,KAAKoY,OAAOhY,QAAKojB,SAAc,EAAI1Y,KAAK,IAAIC,UAAWu1C,KACrD,MAAMC,GACJD,IAAqBA,GAAkBzkB,GAAYykB,GAAkBzkB,GAAY,IAEhFx7B,OAAQi+B,GAAkBA,EAAclZ,SAAWkZ,EAAc7hB,eAAiB6hB,EAAc/d,MAChGiC,OACC,CAACi+B,EAAUC,OAEPj2B,MAAOg2B,EAASh2B,MAAQigB,OAAOgW,GAAqBjkC,aAAapM,QAAU,GAC3EswC,aAAcF,EAASE,cAAgBD,GAAqBjkC,aAAakkC,eAG7E,CAAEl2B,MAAO,EAAGk2B,kBAActxC,IAGxBgB,GAAS,CACbA,OAAQuwC,OAAOL,GAAsB91B,OACrCk2B,aAAcJ,GAAsBI,cAGtC3gD,KAAKgiD,kBAAkB55B,KAAK,IAAK/X,GAAQkC,WAAYspB,EAAU10B,SAAU0B,KAASC,MAAM,GAG9F,CAEQ+5C,WAAWK,EAAqB7D,IACtCr/C,KAAKwK,cAAcG,IACjB3K,KAAKw3B,aAAap3B,QAAK0K,KAAK,IAAIC,UAAWo4C,IACzCnjD,KAAKuK,WAAWuwB,aAAaooB,EAAanoB,KAAaO,OAAQ+jB,GAAOpkB,KAAe5tB,MAAO,CAC1F8tB,cAAYioB,MAA6BD,IAC1C,GAGP,CAKAE,eAAeC,EAAgB/yC,IAC7B,OAAOA,GAAOtE,EAChB,CAAC5K,SAAArB,KAAA,mBAAAsB,mBAtNU87C,IAAyBj/C,MAAAqF,MAAArF,MAAA2G,MAAA3G,MAAA4G,OAAA,EAAA1D,SAAArB,KAAA,UAAAujD,EAAA/hD,IAAA,MAAzB47C,GAAyB37C,UAAA,6BAAAC,OAAA,CAAA2gD,SAAA,WAAArB,WAAA,aAAAwC,UAAA,YAAAC,cAAA,gBAAA5uC,UAAA,YAAAqsC,6BAAA,+BAAA1pB,aAAA,eAAArV,qCAAA,uCAAAgU,gBAAA,kBAAAutB,cAAA,gBAAAvB,gBAAA,kBAAAZ,kBAAA,qBAAA79C,QAAA,CAAAk+C,gBAAA,kBAAAb,eAAA,iBAAAc,YAAA,eAAAlgD,MAAA,GAAAC,KAAA,GAAAC,OAAA,0yCAAAC,SAAA,SAAAC,GAAAC,GAAA,EAAAD,KDnCtC5D,MAAA,uDAEIA,MADF,UACEA,CADwF,UAClFA,MAAA,8BAAwDA,QAC9DA,MAAA,8CAKEA,MAAA,6BAAY6D,EAAA+gD,kBAAkB,MAAM,GAExC5kD,UAEAA,MAAA,gGAOEA,MADA,uBAAAwF,GAAA,OAAe3B,EAAAi/C,YAAA74B,KAAAzkB,EAAwB,EACvCxF,CADwC,gCACzB6D,EAAAoF,aAAa,GAKhCjJ,UAGEA,MADF,WACEA,CADwC,4BAEtCA,MAAA,GAAAwlD,EAAA,gCAkBJxlD,UAEAA,MAAA,4EAQEA,MAFA,qCAAoB6D,EAAA8gD,kBAAkB,EAEtC3kD,CAFuC,kCAAA6D,EAAA+f,eACD,CAAK,EAC3C5jB,CAD4C,+BAAAwF,GAAA,OACrB3B,EAAAi/C,YAAA74B,KAAAzkB,EAAwB,GAMjDxF,QAEAA,MAAA,GAAAylD,EAAA,0CAiBAzlD,MAAA,+CAIEA,MAAA,0BAAS6D,EAAA8/C,sBAAAl+C,MAA2B,EAAK,GACzCzF,MAAA,sBAAAwF,GAAAxF,aAAA6D,EAAAy/C,eAAAzxB,KAAArsB,KAAA3B,EAAAy/C,eAAAzxB,KAAArsB,IAAA,GAEAxF,MAAA,GAAA0lD,EAAA,uBASF1lD,gBAjGsBA,MAAA,QAAAA,MAAA,iCAEZA,MAAA,GAAAA,YAAA,wCAIJA,MAAA,GACAA,MADA,OAAAA,MAAA,4CACAA,CADgE,QAAA6D,EAAAwG,YAAAE,yBAQlEvK,MAAA,GAOAA,MAPA,kBAAA6D,EAAAkoB,gBAOA/rB,CAPmC,kBAAAA,MAAA,KAAA6D,EAAAqgD,UAOnClkD,CANoC,mBAAAA,MAAA,MAAA6D,EAAAi/C,aAMpC9iD,CALwC,aAAAA,MAAA,MAAA6D,EAAAk0B,aAKxC/3B,CAJkC,YAAA6D,EAAA6S,UAIlC1W,CADuB,kBAAA6D,EAAA8/C,uBAOpB3jD,MAAA,GAAAA,MAAA,4BAAAA,MAAA,MAAA6D,EAAAi/C,aAAA,IAEkB9iD,MAAA,GAAoCA,MAApC,UAAAA,MAAA,MAAA6D,EAAAqgD,UAAoClkD,CAAf,eAAA6D,EAAAqhD,gBAoB5CllD,MAAA,GAWAA,MAXA,YAAAA,MAAA,MAAA6D,EAAA6G,SAAAC,MAWA3K,CAX6C,gBAAA6D,EAAA+f,cAW7C5jB,CAV+B,mBAAA6D,EAAAqgD,SAU/BlkD,CAT6B,YAAA6D,EAAA6S,UAS7B1W,CARuB,aAAAA,MAAA,MAAA6D,EAAAw1B,cAAA5lB,WAQvBzT,CAPgD,gBAAA6D,EAAAk/C,6BAOhD/iD,CAH8C,iBAAA6D,EAAAgN,YAG9C7Q,CAF8B,uCAAA6D,EAAAmgB,qCAE9BhkB,CAD6E,gCAKhEA,MAAA,GAAAA,MAAA,OAAAA,MAAA,MAAA6D,EAAA+/C,kBAmBb5jD,MAAA,GACAA,MADA,QAAAA,MAAA,yBACAA,CAD6C,UAAA6D,EAAAoB,aAAA0gD,MAG7C3lD,MAAA,OAAA6D,EAAAy/C,eAAAzxB,MAGG7xB,MAAA,GAAAA,MAAA,OAAA6D,EAAAy/C,eAAA/xC,OAAA1N,EAAAy/C,eAAA/xC,KAAAvQ,WAAA6C,EAAAy/C,eAAA/xC,KAAAhR,klBCtDQ0+C,EAAyB,4ICX/B,IAAMR,EAAU,MAAjB,MAAOA,EAAUv7C,SAAArB,KAAA,mBAAAsB,iBAAVs7C,EAAU,EAAAv7C,SAAArB,KAAA,UAAAuB,EAAAyC,GAAA,MAAV44C,IAAUv7C,SAAArB,KAAA,UAAAuB,EAAA0C,IAAA,UAJXC,KAAcC,IAAkBE,IAAaK,eAI5Ck4C,CAAU,kJCxBvBz+C,MAAA,GACEA,MAAA,0BACEA,MAAA,KACEA,MAAA,WACEA,MAAA,8BACAA,MAAA,WACEA,MAAA,iBAEJA,kBAEJA,qCAToBA,QAA8BA,MAA9B,QAAA4lD,EAAAx0B,YAA8BpxB,CAAD,eAGVA,MAAA,GAAAA,MAAA,YAAAA,MAAA,IAAA4lD,EAAAC,WAAA,QAAA7lD,OAEpBA,MAAA,GAAAA,MAAA,aAAA4lD,EAAAE,cAAA,KAAAF,EAAAE,cAAAC,WCOd,IAAMC,EAAoB,MAA3B,MAAOA,EAKXpkD,YAAoBiD,GAAAhD,KAAAgD,iBAAmC,CAEvD9C,WACEF,KAAKokD,aAAepkD,KAAKgD,gBAAgBK,YAAwBrD,KAAK+9B,YACxE,CAAC18B,SAAArB,KAAA,mBAAAsB,iBATU6iD,GAAoBhmD,MAAAqF,MAAA,EAAAnC,SAAArB,KAAA,UAAA6Z,EAAArY,IAAA,MAApB2iD,EAAoB1iD,UAAA,uBAAAC,OAAA,CAAAq8B,YAAA,eAAAp8B,MAAA,EAAAC,KAAA,EAAAC,OAAA,2NAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDbjC5D,MAAA,EAAAkmD,EAAA,6CAAelmD,MAAA,OAAAA,MAAA,IAAA6D,EAAAoiD,oPCaFD,CAAoB,8qBCN7BhmD,MAAA,uCAAmDA,MAAA,OAAAuI,EAAA0D,WAAAC,oCAIjDlM,MAAA,0BAMEA,MAAA,8BACFA,+BAJEA,MAAA,QAAAuI,EAAA2C,kBAAAC,SAGAnL,cAAA,IAAAA,MAAA,sFAUAA,MAAA,UACEA,MAAA,8BACFA,wCADEA,cAAA,IAAAA,MAAA,IAAAmmD,EAAA1kD,KAAA,iCAEFzB,MAAA,UACEA,MAAA,8BACFA,wCADEA,cAAA,IAAAA,MAAA,IAAAmmD,EAAA9/B,OAAA5kB,IAAA0kD,EAAA9/B,OAAA9U,MAAA,iCAZJvR,MAAA,0BAQEA,MAAA,EAAAomD,GAAA,gDAGApmD,MAAA,EAAAqmD,GAAA,eAGFrmD,6CAVEA,MADA,cAAAsmD,EACAtmD,CAD0B,gBAAAsmD,GAG1BtmD,MADA,QAAAmmD,EAAAx6C,MACA3L,CAD4B,WAAAmmD,EAAAJ,+DAGrB/lD,cAAA,OAAAA,MAAA,IAAAmmD,EAAA1kD,MAGAzB,MAAA,GAAAA,MAAA,OAAAmmD,EAAA9/B,oCAMPrmB,MAAA,8EAEEA,MAAA,qBAAAA,MAAA,IAAAuI,EAAAg+C,6CAIAvmD,MAAA,kEAKEA,MAHA,QAAAwmD,EAAAhrB,SAAA1tB,GAGA9N,CAH8B,YAG9BA,CAFa,WAAAwmD,EAAAhrB,SAAArU,UAAA,IAAAq/B,EAAAhrB,SAAApU,SAEbpnB,CAD2E,UAAAA,MAAA,IAAAwmD,EAAAC,iEAuBrEzmD,MAAA,+FAOEA,MAAA,8BAAA0mD,EAAA1mD,MAAAorB,GAAAxiB,UAAA+9C,EAAA3mD,MAAA,GAAA4I,UAAA,OAAA5I,MAAc2mD,EAAAC,gBAAA38B,KAAAy8B,GAAqC,GAErD1mD,+EANEA,MAAA,eAAA0uC,GAGA1uC,MAFA,OAAAA,MAAA,2BAAA0mD,EAAA,SAEA1mD,CAFoE,QAAAA,MAAA,2BAAA0mD,EAAA,aAEpE1mD,CADyE,QAAAA,MAAA,IAAA2mD,EAAAC,mBAAAF,EAAAn+C,EAAAm4B,SAAAwd,OAAA31C,EAAAm4B,SAAA3vB,qCAN7E/Q,MAAA,SACEA,MAAA,EAAA6mD,GAAA,2BAUF7mD,yCATuBA,cAAA,UAAA2mD,EAAAG,oDAcrB9mD,MAAA,eAIEA,MAAA,yBAAA+mD,EAAA/mD,MAAAwU,GAAAya,KAAA03B,EAAA3mD,MAAA,GAAA4I,UAAA,OAAA5I,MAC6C2mD,EAAAC,gBAAA38B,KAAT,SADpC88B,EAC2E,OAC/E,OAChB,GACoB/mD,MAAA,yDAKFA,gCALEA,cAAA,aAAA+mD,EAAA/mD,MAAA,oCAAAA,MAAA,qEAZJA,MAAA,0BAIEA,MAAA,EAAAgnD,GAAA,kCAcFhnD,yCAhBEA,MAAA,sBAAAA,MAAA,IAAA2mD,EAAAC,kBAKG5mD,MAAA,GAAAA,MAAA,OAAAA,MAAA,IAAA2mD,EAAAC,8CApBP5mD,MAAA,YAaEA,MAZA,EAAAinD,GAAA,aAYAjnD,CAZyC,EAAAknD,GAAA,cA+B3ClnD,wCA/BQA,cAAA,OAAA2mD,EAAAG,QAAArwC,OAAA,GAaHzW,cAAA,WAAA2mD,EAAAG,QAAArwC,iCAqBDzW,MAAA,0BAIEA,MAAA,8BACFA,eADEA,cAAA,IAAAA,MAAA,oFAaEA,MAAA,kEAiBEA,MAAA,iBAAAwF,GAAAxF,MAAAi0B,GAAA,MAAAjW,EAAAhe,MAAA,GAAA4I,UAAA+9C,GAAA3mD,QAAA4I,UAAAL,GAAAvI,MAAA,UAAAA,MAASuI,GAAA4+C,WAAA3hD,EAAAwY,EAAAzV,GAAA6+C,cAAAt5C,GAAA64C,GAAAnrB,SAAA1tB,IAAmE,GAjB9E9N,0EAOEA,MALA,KAAAge,EAAAqpC,SAAA,SAKArnD,CALkC,QAAAge,EAAAiJ,QAKlCjnB,CAFyB,8aAgB3BA,MAAA,kEAgBEA,MAAA,iBAAAwF,GAAAxF,MAAAsnD,GAAA,MAAAtpC,EAAAhe,MAAA,GAAA4I,UAAA+9C,GAAA3mD,QAAA4I,UAAAL,GAAAvI,MAAA,UAAAA,MAASuI,GAAA4+C,WAAA3hD,EAAAwY,EAAAzV,GAAA6+C,cAAAt5C,GAAA64C,GAAAnrB,SAAA1tB,IAAmE,GAhB9E9N,0EAOEA,MALA,KAAAge,EAAAqpC,SAAA,SAKArnD,CALkC,QAAAge,EAAAiJ,QAKlCjnB,CAFyB,kBAAAge,EAAAiJ,+VAsBzBjnB,MAAA,kHAMEA,MAHA,qBAAAA,MAAA,IAAAuI,EAAAlE,cAGArE,CAH+C,WAG/CA,CAFe,aAAAA,MAAA,IAAAge,EAAAupC,OAEfvnD,CAD8C,eAAAuI,EAAAlE,0CAwBpCrE,MAAA,aAIEA,MAAA,uBAQFA,yCAREA,cAAA,IAAAA,MAAA,IAAAge,EAAArU,cAAA3J,MAAA,EAAAyU,EAAAuJ,EAAArU,eAAA,MAAAqU,EAAArU,cAAAuI,SAAA,iCAwBJlS,MAAA,iBACEA,MAAA,kBACAA,MAAA,aAA2BA,MAAA,8BAC7BA,iCAHsDA,MAAA,QAAAuI,EAAAm4B,SAAAud,SACtBj+C,cAAA,OAAAuI,EAAAyB,eAAAw9C,UACHxnD,MAAA,GAAAA,YAAA,iDAM/BA,MAAA,4CAGEA,MAAA,YAAAge,EAAAgI,aAAAzc,YAAAvJ,iDAkBFA,MAAA,6KAyBEA,MADA,uBAAAA,MAAAy2B,GAAA,MAAAzY,EAAAhe,MAAA,GAAA4I,UAAA+9C,EAAA3mD,QAAA4I,UAAAL,GAAAvI,MAAA,UAAAA,MAAauI,GAAAk/C,YAAAzpC,EAAAzV,GAAA6+C,cAAAt5C,GAAA64C,EAAAnrB,SAAA1tB,IAA4D,EACzE9N,CAD0E,uBAAAA,MAAAy2B,GAAA,MAAAzY,EAAAhe,MAAA,GAAA4I,UAAA+9C,EAAA3mD,QAAA4I,UAAAL,GAAAvI,MAAA,UAAAA,MAC7DuI,GAAAm/C,eAAA1pC,EAAAzV,GAAA6+C,cAAAt5C,GAAA64C,EAAAnrB,SAAA1tB,IAA+D,GAE9E9N,0EAJEA,MApBA,MAAAge,EAAA2pC,eAoBA3nD,CApB8B,MAAAA,MAAA,IAAAge,EAAA4pC,wBAAAr/C,EAAAs/C,KAAAC,SAAAnB,EAAAnrB,SAAA1tB,IAAAg6C,SAAA9pC,EAAAiJ,SAAArmB,MAAAod,EAAA+pC,eAAA/pC,EAAA6P,aAoB9B7tB,CAfC,QAAAA,MAAA,0BAAAuI,EAAAs/C,KAAAC,SAAAnB,EAAAnrB,SAAA1tB,IAAAg6C,SAAA9pC,EAAAiJ,SAAArmB,OAeDZ,CAVC,cAAAA,MAAA,KAAAA,MAAA,KAAAge,EAAAgqC,qBAUDhoD,CAT6D,SAAAuI,EAAAs/C,KAAAC,SAAAnB,EAAAnrB,SAAA1tB,IAAAg6C,SAAA9pC,EAAAiJ,SAAArmB,MAS7DZ,CAR8E,gBAAAA,MAAA,gCAAAA,MAAA,GAAAyc,EAAAuB,EAAAgI,aAAA1c,QAQ9EtJ,CAJC,gBAAAA,MAAA,6BAAAA,MAAA,GAAAyc,EAAAuB,EAAAgI,aAAA1c,QAIDtJ,CADC,WAAAge,EAAAqpC,SAAA,kGAMHrnD,MAAA,wFAEEA,MAAA,sBAAAA,MAAAioD,GAAAjoD,MAAA,SAAAkoD,EAAAloD,MAAA,UAAAA,MAAYkoD,EAAAC,QAAa,GAyB3BnoD,sDATEA,MAdA,0BAcAA,CAd6B,OAAAA,MAAA,IAAAge,EAAAoqC,aAc7BpoD,CAboC,eAAAge,EAAA6P,eAAA,aAAA7P,EAAAnI,WAAA,KAAAmI,EAAAnI,WAAA3D,SAAA8L,EAAA+wB,cAAAxmC,EAAAib,YAAAqD,eAAA7mB,MAAA,IAAAge,EAAA4pC,uBAapC5nD,CAPC,OAAAuI,EAAAuM,WAAAsa,KAODpvB,CANwB,QAAAA,MAAA,KAAAge,EAAA6L,WAAAthB,EAAA8B,YAAAE,wBAAAhC,EAAA8B,YAAAG,0BAMxBxK,CADC,YAAAA,MAAA,KAAAge,EAAA6L,WAAA7pB,MAAA,GAAAud,GAAAhV,EAAAyB,eAAA6T,UAAAtV,EAAAmM,aAAAuU,WAAA/X,yFA3DPlR,MAAA,GAMEA,MAAA,8CAoCEA,MA5BA,EAAAqoD,EAAA,kCA4BAroD,CAFC,EAAAsoD,EAAA,uBA8BHtoD,4DA9DEA,cAAA,UAAAA,MAAA,EAAAmd,GAAAa,EAAAupC,QAAA,IAAAvnD,MAAA,IAAAuI,EAAAggD,eAAAvqC,EAAAupC,QAAA,IAAAvnD,MAAA,IAAAuI,EAAAggD,iBAOGvoD,MAAA,GAAAA,MAAA,kBAAAge,EAAAwqC,WA4BAxoD,cAAA,kBAAAge,EAAAwqC,sCA+BTxoD,MAAA,0BAQEA,MAAA,8BACFA,+BAHEA,MAAA,QAAAuI,EAAA2C,kBAAAu9C,OAEAzoD,cAAA,IAAAA,MAAA,IAAAuI,EAAAmgD,OAAAngD,EAAAS,UAAA2/C,gBAAA,gCAEF3oD,MAAA,0BAQEA,MAAA,8BACFA,+BAHEA,MAAA,QAAAuI,EAAA2C,kBAAAC,SAEAnL,cAAA,IAAAA,MAAA,IAAAuI,EAAAmgD,OAAAngD,EAAAS,UAAA4/C,gBAAA,gCAIN5oD,MAAA,0BAMEA,MAAA,8BACFA,+BAHEA,MAAA,QAAAuI,EAAA2C,kBAAAC,SAEAnL,cAAA,IAAAA,MAAA,yEAEFA,MAAA,0BASEA,MAAA,8BACFA,iHADEA,cAAA,IAAAA,MAAA,UAAAuI,EAAAmgD,OAAAngD,EAAAS,UAAA,KAAAT,EAAAmgD,OAAAngD,EAAAS,UAAA6/C,kBAAA,gCAEF7oD,MAAA,0BAMEA,MAAA,8BACFA,+BAHEA,MAAA,QAAAuI,EAAA2C,kBAAAu9C,OAEAzoD,cAAA,IAAAA,MAAA,IAAAuI,EAAAmgD,OAAAngD,EAAAS,UAAA8/C,4BAAA,gCAGA9oD,MAAA,0BAUEA,MAAA,8BACFA,8CAHEA,MAAA,QAAAuI,EAAA2C,kBAAAC,SAEAnL,cAAA,IAAAA,MAAA,IAAAuI,EAAAmgD,OAAAngD,EAAAS,UAAA+/C,cAAA/oD,MAAA,EAAAqe,GAAA2qC,EAAAC,QAAA,gCAXJjpD,MAAA,GACEA,MAAA,EAAAkpD,EAAA,qEAEGlpD,cAAA,YAAAkR,IAAA83C,EAAAC,OAAAD,EAAAC,MAAA,GAAAD,EAAAvsB,OAAAl0B,EAAA4gD,UAAAC,OAAA,MAAA7gD,EAAAmgD,OAAAngD,EAAAS,UAAA,KAAAT,EAAAmgD,OAAAngD,EAAAS,UAAA+/C,4CAWL/oD,MAAA,sDAOEA,MAAA,yBACFA,yCAHEA,MAAA,QAAAA,MAAA,sCAEkBA,MAAA,GAAAA,MAAA,OAAAge,+BAEpBhe,MAAA,sDAUEA,MAAA,oFAQFA,yCAbEA,MAAA,QAAAA,MAAA,mBAAAge,EAAAhV,SAAA,IAAAgV,EAAAiJ,QAAA,qBAMEjnB,MAAA,GAKAA,MALA,cAAAA,MAAA,IAAAA,MAAA,mBAAAge,EAAAhV,SAAA,IAAAgV,EAAAiJ,QAAA,2BAKAjnB,CADC,4CAlSPA,MAAA,6BA8BEA,MArBA,EAAAqpD,GAAA,gBAqBArpD,CADE,EAAAspD,GAAA,iBAqBFtpD,MAAA,kBAMAA,MAAA,YACEA,MAAA,EAAAupD,GAAA,4BAWEvpD,MAHF,WAGEA,CADD,8BAQGA,MAAA,+BAMIA,MADF,YACEA,CADsC,YAEpCA,MAAA,IACFA,QACAA,MAAA,aACEA,MAAA,GAAAwpD,GAAA,eAeAxpD,MAAA,cAKEA,MAAA,yBAMJA,UAEAA,MAAA,GAAAypD,GAAA,mBAMFzpD,QAEAA,MAAA,aACEA,MAAA,GAAA0pD,EAAA,cAMJ1pD,UACAA,MAAA,GAAA2pD,EAAA,6DAwEF3pD,QAEAA,MAAA,GAAA4pD,EAAA,iEAUA5pD,MAAA,GAAA6pD,EAAA,iEAWJ7pD,UACAA,MAAA,GAAA8pD,EAAA,8CA2BA9pD,MAnBA,GAAA+pD,EAAA,2BAmBA/pD,CAXC,GAAAgqD,EAAA,2BAWDhqD,CAHC,GAAAiqD,EAAA,yCA0BDjqD,MATA,GAAAkqD,GAAA,4BASAlqD,CAHC,GAAAmqD,GAAA,+DAsBHnqD,gEA/REA,MADA,eAAAoqD,EACApqD,CAD2B,mBAAAA,MAAA,KAAAge,EAAA6L,YAIxB7pB,MAAA,GAAAA,MAAA,iBAAAge,EAAAwqC,WAqBAxoD,cAAA,oBAAAge,EAAAwqC,WAqBDxoD,cAAA,oBAAAge,EAAAwqC,mFAMGxoD,MAAA,GAAAA,MAAA,OAAAge,EAAAupC,OAYCvnD,MAAA,GAAAA,MAAA,UAAAA,MAAA,GAAAE,EAAA8d,EAAAupC,QAAA,IAAAvnD,MAAA,MAAAuI,EAAAggD,iBAMEvoD,MAAA,GAAAA,MAAA,UAAAA,MAAA,GAAAI,IAAA4d,EAAAupC,QAAA,IAAAvnD,MAAA,MAAAuI,EAAAggD,iBAIKvoD,MAAA,GAAAA,MAAA,KAAAge,EAAAqpC,SAAA,UAEDrnD,MAAA,GAAAA,MAAA,IAAAge,EAAAgI,aAAA1c,MAAA,KAGAtJ,MAAA,GAAAA,MAAAge,EAAArU,cAAA,OAiBE3J,cAAA,eAAAge,EAAArU,eAGA3J,cAAA,IAAAA,MAAA,MAAAge,EAAAnI,WAAA7V,MAAA,GAAAyU,EAAAuJ,EAAAnI,YAAA,MAAAmI,EAAAnI,WAAA3D,SAAA,KAQJlS,MAAA,GAAAA,MAAAge,EAAArU,cAAA,OAWG3J,MAAA,GAAAA,MAAA,OAAAge,EAAAhV,WAAAT,EAAAmC,SAAAsX,MAMJhiB,cAAA,QAAAge,EAAAqsC,0BAAArqD,MAAA,GAAAqc,GAAA9T,EAAA4gD,UAAAC,KAAA7gD,EAAA4gD,UAAAmB,UAAAj8C,SAAArO,MAAA,MAAAA,MAAA,MAAAge,EAAAusC,OAAA,WA2EFvqD,MAAA,GAAAA,MAAA,OAAAA,MAAA,MAAAA,MAAA,MAAAge,EAAAusC,OAAA,WAAAhiD,EAAA4gD,UAAAqB,SAAA,MAAAjiD,EAAAmgD,OAAAngD,EAAAS,UAAA,KAAAT,EAAAmgD,OAAAngD,EAAAS,UAAA2/C,iBAUA3oD,MAAA,GAAAA,MAAA,OAAAA,MAAA,MAAAA,MAAA,MAAAge,EAAAusC,OAAA,WAAAhiD,EAAA4gD,UAAAsB,KAAA,MAAAliD,EAAAmgD,OAAAngD,EAAAS,UAAA,KAAAT,EAAAmgD,OAAAngD,EAAAS,UAAA4/C,iBAaJ5oD,MAAA,GAAAA,MAAA,OAAAA,MAAA,MAAAge,EAAA4pC,wBAOA5nD,MAAA,GAAAA,MAAA,OAAAge,EAAA6P,aAAA,iBAAA7P,EAAAnI,WAAA,KAAAmI,EAAAnI,WAAA3D,SAAA8L,EAAA+wB,cAAAxmC,EAAAib,YAAAqD,eAAA,WAAA7I,EAAAwqC,WAYAxoD,cAAA,OAAAge,EAAAqsC,0BAAA9hD,EAAAmgD,OAAAngD,EAAAS,UAAA8/C,4BAKY9oD,cAAA,OAAAA,MAAA,OAAAge,EAAAqsC,0BAAArsC,EAAAusC,SAeZvqD,MAAA,GAAAA,MAAA,OAAAge,EAAAhV,WAAAT,EAAAmC,SAAAsX,MAAAhE,EAAAgI,aAAAzc,aAAAyU,EAAAgI,aAAAsI,aASAtuB,cAAA,OAAAA,MAAA,qBAAAge,EAAAhV,SAAA,IAAAgV,EAAAiJ,QAAA,uDArRPjnB,MAAA,GACEA,MAAA,EAAA0qD,GAAA,yGACG1qD,cAAA,OAAAge,EAAA+wB,cAAA/uC,MAAA,IAAA2mD,EAAAC,kBAAA,QAAA5mD,MAAA,IAAA2mD,EAAAC,8CAuSL5mD,MAAA,iFAGEA,MADA,mBAAA2qD,EACA3qD,CAD2C,0BAAAA,MAAA,EAAAkf,GAAAlf,MAAA,IAAA4qD,gDA9VjD5qD,MADF,eACEA,CAD6F,iDAM3FA,MAAA,oCAAA2mD,EAAA3mD,MAAAgT,GAAApK,UAAAL,EAAAvI,MAAA,UAAAA,MAAoBuI,EAAAskB,iBAAA85B,EAAAnrB,UAAmC,GAEzDx7B,QAEAA,MAAA,EAAA6qD,GAAA,cAkCE7qD,MADF,WACEA,CADsG,YAEpGA,MAAA,EAAA8qD,GAAA,6CAgTA9qD,MAzSA,EAAA+qD,GAAA,sBAySA/qD,CAzSyE,EAAAgrD,GAAA,mDAgT/EhrD,oDApWgEA,MAAA,QAAA2mD,EAAAnrB,SAAA1tB,IAE5D9N,QAGAA,MAHA,kBAAA2mD,EAAAsE,wBAGAjrD,CAHoD,eAAAuI,EAAAs/C,KAAAC,SAAAnB,EAAAnrB,SAAA1tB,IAAAg6C,SAAAoD,MAGpDlrD,CAFsE,oBAAA2mD,EAAAxvC,SAAAV,OAEtEzW,CADgD,cAAAA,MAAA,KAAA2mD,EAAAwE,oBAM5CnrD,MAAA,GAAAA,MAAA,OAAA2mD,EAAAG,QAAArwC,OAAA,GAiCgDzW,cAAA,YAAAuI,EAAAs/C,KAAAC,SAAAnB,EAAAnrB,SAAA1tB,KAI/C9N,MAAA,GAAAA,MAAA,WAAA2mD,EAAAxvC,SAAAV,QAAA,SAAAzW,MAAA,KAAA2mD,EAAAC,kBAK+B5mD,MAAA,GAAAA,MAAA,UAAA2mD,EAAAxvC,UA0S/BnX,cAAA,OAAAA,MAAA,MAAA2mD,EAAAyE,qDApXfprD,MAAA,GACEA,MAAA,EAAAqrD,GAAA,8BAKArrD,MAAA,uBACEA,MAAA,EAAAsrD,GAAA,yCAQFtrD,QAGEA,MADF,WACEA,CADyC,sBAKvCA,MAAA,EAAAurD,GAAA,qCAsWJvrD,yCA1XGA,cAAA,OAAAuI,EAAAg+C,gBAIavmD,QAAiCA,MAAjC,aAAAuI,EAAAijD,kBAAiCxrD,CAAD,aAAAuI,EAAAkjD,4BAEvBzrD,cAAA,UAAAA,MAAA,IAAAuI,EAAAmjD,wBASpB1rD,MAAA,GAAAA,MAAA,YAAAuI,EAAAs/C,MAED7nD,cAAA,aAAAuI,EAAAijD,mBAG8BxrD,cAAA,UAAAA,MAAA,IAAAuI,EAAAmjD,oDA/CtC1rD,MAAA,GACEA,MAAA,EAAA2rD,GAAA,4CAQA3rD,MAAA,EAAA4rD,GAAA,8CAgBA5rD,MAAA,EAAA6rD,GAAA,uEAvBG7rD,cAAA,OAAAA,MAAA,IAAAuI,EAAAujD,yBAQwB9rD,MAAA,GAAAA,MAAA,UAAAA,MAAA,IAAAuI,EAAAwjD,iBAeZ/rD,MAAA,GAAAA,MAAA,WAAAA,MAAA,IAAAuI,EAAAyjD,wBAAAv1C,oCA0YbzW,MAAA,UAAkFA,MAAA,8BAEhFA,wCAFgFA,oBAAA,IAAAisD,EAAAxqD,kCAGlFzB,MAAA,UACEA,MAAA,8BACFA,wCADEA,cAAA,IAAAA,MAAA,IAAAisD,EAAA5lC,OAAA5kB,IAAAwqD,EAAA5lC,OAAA9U,MAAA,iCAZJvR,MAAA,0BAQEA,MAAA,EAAAksD,GAAA,gDAGAlsD,MAAA,EAAAmsD,GAAA,eAGFnsD,sEAVEA,MADA,cAAAosD,EACApsD,CAD0B,gBAAAosD,GAG1BpsD,MADA,QAAAisD,EAAAtgD,MACA3L,CAD4B,WAAAisD,EAAAlG,UAGrB/lD,QAAgDA,MAAhD,OAAAA,MAAA,IAAAisD,EAAAxqD,KAAgDzB,CAAA,WAAAqsD,GAGhDrsD,MAAA,GAAAA,MAAA,OAAAisD,EAAA5lC,iCAMPrmB,MAAA,oCAAAA,MAAA,IAAAA,MAAA,0DAlBJA,MAAA,YACEA,MAAA,EAAAssD,GAAA,8CAgBAtsD,MAAA,EAAAusD,GAAA,yBAAAvsD,OAGFA,8BAlB6BA,cAAA,UAAAA,MAAA,IAAAuI,EAAAwjD,6CAuB/B/rD,MAAA,gBACEA,MAAA,8BACFA,qCADyBA,cAAA,cAAAwsD,IC7WpB,IAAKC,GAAZ,SAAYA,GACVA,WAAAC,QAAA,aACAD,IAAAE,aAAA,kBACAF,IAAAG,YAAA,iBAHUH,CAIZ,CAJA,CAAYA,IAAc,IAmC1B,MAAM/D,GAAwC,CAC5C,CAACh+C,KAASmY,MAAO,CACfgqC,mBAAoB,GACpBC,iBAAkB,8BAClBjE,iBAAkB,qCAEpB,CAACn+C,KAASsX,MAAO,CACf6qC,mBAAoB,GACpBC,iBAAkB,0BAClBjE,iBAAkB,sCAEpB,CAACn+C,KAASuY,QAAS,CACjB6pC,iBAAkB,2BAClBjE,iBAAkB,uCAEpB,CAACn+C,KAASyY,OAAQ,CAChB2pC,iBAAkB,0BAClBjE,iBAAkB,sCAEpB,CAACn+C,KAASsY,eAAgB,CACxB8pC,iBAAkB,iCAClBjE,iBAAkB,6CAEpB,CAACn+C,KAASkD,SAAU,CAClBk/C,iBAAkB,8BAClBjE,iBAAkB,qCAEpB,CAACn+C,KAAS0Y,KAAM,CACd0pC,iBAAkB,wBAClB/D,cAAe,mCACfJ,eAAgB,oCAChBC,eAAgB,oCAChBE,2BAA4B,sCAC5BD,iBAAkB,qCAiBhBkE,GAAoB,oBAQnB,IAAMpO,GAA+B,MAAtC,MAAOA,EA+EX/8C,YACUqY,EACA+yC,EACAloD,EACAwS,EACA21C,GACAC,IALArrD,KAAAoY,SACApY,KAAAmrD,KACAnrD,KAAAiD,oBACAjD,KAAAyV,kBACAzV,KAAAorD,kBACAprD,KAAAqrD,OApFDrrD,KAAAiT,WAAaA,KACbjT,KAAAwI,YAAcA,KACdxI,KAAA6I,SAAWA,KACX7I,KAAA6mD,OAASA,GACT7mD,KAAA6S,aAAeA,KACf7S,KAAAoK,WAAaA,IACbpK,KAAAoD,aAAeA,KACfpD,KAAAqJ,kBAAoBA,KACpBrJ,KAAAsnD,UAAYA,KACZtnD,KAAA4qD,eAAiBA,GACjB5qD,KAAA2hB,YAAcA,KACd3hB,KAAAmI,eAAiBA,KACjBnI,KAAA6+B,SAAWA,KAepB7+B,KAAAykB,qBAA2DxkB,MAAG,MAG9DD,KAAAsrD,qBAA2DrrD,MAAG,MAM9DD,KAAAurD,8BAAiDtrD,WAAGoP,GAGpDrP,KAAAwrD,sDAA2EvrD,MAAG,IAG9ED,KAAAyrD,+BAAoDxrD,MAAG,IAGvDD,KAAA0rD,kBAA+D,IAAI51B,IAA8B,CAAE9F,MAAM,IAGzGhwB,KAAAif,iBAAuDhf,MAAG,IAG1DD,KAAA2rD,uBAAmE1rD,MAAG,IAGtED,KAAA4rD,kBAA4C3rD,MAAG,CAAE4rD,cAAe,EAAGC,SAAU,KAG7E9rD,KAAA41B,eAAuC,IAAIzyB,MAG3CnD,KAAA+rD,eAAiD,IAAI5oD,MAgB7CnD,KAAAwK,cAA8B,IAAIC,IASvC,CAEHvK,WACEF,KAAKgmD,KAAO,IAAIgG,KAAU,IAE1BhsD,KAAK0mD,cAAgB1mD,KAAKiD,kBAAkBK,cAAc,eAC1DtD,KAAKwC,aAAexC,KAAK0mD,cAActmD,QAAKK,KAAKwrD,GAAkBA,EAAe,OAAS,QAE3F,MAAMC,KAAc/rD,KAAc,CAACH,KAAKic,UAAWjc,KAAKmsD,iBAAiB/rD,QACvEsY,KAAqB,CAAC2oB,EAAGC,IAAMD,EAAE,KAAOC,EAAE,IAAMD,EAAE,GAAGp1B,KAAOq1B,EAAE,GAAGr1B,KAEnEjM,KAAKwK,cAAcG,IACjBuhD,EAAYnhD,UAAU,EAAE5D,EAAUo+C,MAChCvlD,KAAKmH,SAAWA,EAChBnH,KAAKulD,cAAgBA,EACrBvlD,KAAK2pD,kBAAoB,GAAGxiD,KAAYo+C,EAAct5C,eACtDjM,KAAK0kD,eAAiB1kD,KAAKosD,kBAAkBjlD,EAAUo+C,GACvDvlD,KAAKqrD,IAAIgB,cAAY,IAIzB,MAAMC,KAAqDC,MAAsBvsD,KAAKghD,YAEtFhhD,KAAKwsD,UAAUN,EAAaI,GAC5BtsD,KAAKysD,0BAA0BP,EAAaI,GAE5CtsD,KAAK0sD,UAASvsD,KAAc,CAC1BH,KAAK2sD,eAAevsD,QAAKU,MAAU,IACnCd,KAAK6pD,sBAAsBzpD,QAAKK,KAAImsD,OAAU,EAAG9rD,MAAU,MAC1DV,QACDK,KAAI,EAAEosD,EAAeC,KACdD,EAGDC,EACKlC,GAAeE,aAEjBF,GAAeG,YALbH,GAAeC,UAMzB,EACDnyC,QAAoB,EACpBxX,SAIFlB,KAAK4pD,8BAA6BzpD,KAAc,CAACH,KAAK6pD,sBAAuB7pD,KAAKurD,6BAA6BnrD,QAC7GK,KAAI,EAAEssD,EAAuBC,KAAuBA,GAAqBD,EAAsB,IAAIpzB,SAAS1tB,KAG9GjM,KAAKkqD,kBAAiB/pD,KAAc,CAACH,KAAK8e,UAAW9e,KAAKif,cAAejf,KAAKic,UAAWjc,KAAKmsD,iBAAiB/rD,QAC7GK,KAAI,EAAE6U,EAAU0O,EAAc7c,GAAUo+C,OAAa,EACnD3sB,MAAyBtjB,EAAU0O,EAAc7c,GAAUo+C,MAAc,EAE3ErkD,SAGFlB,KAAKmqD,uBAAyBnqD,KAAKkqD,eAAe9pD,QAChDK,KAAKwsD,GAAkBA,EAAc5sD,OAAQ6sD,GAAMA,EAAEC,kBAGvDntD,KAAKiqD,uBAAyBjqD,KAAKic,UAAU7b,QAC3CK,KAAK0G,GACIA,IAAa0B,KAASkD,SAGnC,CAEAP,cACExL,KAAKorD,eAAegC,cAAclC,IAClClrD,KAAKwK,iBAAgBiB,MAAYzL,KAAKwK,cACxC,CAEA86C,WAAW5tC,EAAckO,EAA0BynC,EAAyBloC,GACtES,EAAQ0nC,kBACV51C,EAAMutB,iBACNjlC,KAAK+rD,eAAenoD,KAAK,CACvBwhB,QAASQ,EAAQR,QACjBioC,gBAAiBA,EACjBloC,WAAYA,IAGlB,CAEAygC,YAAYhgC,EAA0BynC,EAAyBloC,GAE7D,MAAMpR,IADgB/T,KAAKgmD,KAAKC,SAAS9gC,IAAa8gC,SAASrgC,EAAQR,SAASrmB,MAChD,EAE5B6mB,EAAQ0nC,gBACVttD,KAAK+rD,eAAenoD,KAAK,CACvBwhB,QAASQ,EAAQR,QACjBrR,YACAs5C,gBAAiBA,EACjBloC,WAAYA,IAGdnlB,KAAKgmD,KAAKC,SAAS9gC,IAAa8gC,SAASrgC,EAAQR,UAAUgc,SAASrtB,GAExE,CAEA8xC,eAAejgC,EAA0BynC,EAAyBloC,GAEhE,MAAMpR,IADgB/T,KAAKgmD,KAAKC,SAAS9gC,IAAa8gC,SAASrgC,EAAQR,SAASrmB,MAChD,EAE5B6mB,EAAQ0nC,gBACVttD,KAAK+rD,eAAenoD,KAAK,CACvBwhB,QAASQ,EAAQR,QACjBrR,YACAs5C,gBAAiBA,EACjBloC,WAAYA,IAGdnlB,KAAKgmD,KAAKC,SAAS9gC,IAAa8gC,SAASrgC,EAAQR,UAAUgc,SAASrtB,GAExE,CAEQw5C,uBAAuBj4C,EAA6BnO,GAC1D,OAAIA,IAAa0B,KAASuY,OACjB9L,EAASjV,OAAQulB,GAAY4nC,KAAqBhhD,SAASoZ,EAAQR,WAAWxQ,OAAS,EAC1F,yCACA,sCAEC,kCAAkCzN,OAC3C,CAEQilD,kBACNjlD,EACAo+C,GAEA,GAAIp+C,IAAa0B,KAASmY,KACxB,OAAKukC,EAA6C9uC,YACzC,kDAEF,wCAGX,CAEQ+1C,UACNN,EACAI,GAEAtsD,KAAKwK,cAAcG,IACjB3K,KAAK0rD,kBACFtrD,QACCq2B,KAAez2B,KAAKmsD,iBAAc,EAClC9rD,KACE,EAAEqP,EAAM61C,MACN71C,EAAK+9C,aAAaroC,SAClB1V,EAAK+9C,aAAatoC,YAClBogC,GAAct5C,KAAOyD,EAAK+9C,aAAaJ,kBACtC39C,EAAKsgB,OAGXjlB,UAAU,GAAI0iD,mBACTztD,KAAKgmD,KAAKC,SAASwH,EAAYtoC,YAAY8gC,SAASoD,MACtDrpD,KAAKgmD,KAAKC,SAASwH,EAAYtoC,YAAY8gC,SAASoD,MAASjoB,SAASqsB,EAAYroC,SAElFplB,KAAKgmD,KAAKC,SAASwH,EAAYtoC,YAAY8gC,SAASwH,EAAYroC,SAASgc,UADhEqsB,EAAY15C,UAC6D05C,EAAY15C,SAER,IAK9F/T,KAAKwK,cAAcG,IACjBuhD,EACG9rD,QACC+iB,KAAU,EAAEhc,EAAUo+C,OAAa,EAC1BplD,KAAc,IACnBF,MAAGkH,GACHnH,KAAKoY,OAAOhY,QACVstD,MAAkEnI,GAAct5C,GAAI9E,IAEtFmlD,EAAmBlsD,QACjBK,KAAKg5B,IAAcA,GAAUh5B,IAAKk5B,IAAaA,GAAS1tB,MAAG,EAC3DyM,QAEF1Y,KAAK8e,UACL9e,KAAKykB,oBACJrkB,QAAK0K,KAAK,MAGhBC,UAAU,EAAE5D,EAAUwmD,GAAmB1nC,GAAa3Q,GAAUuQ,OAC/DI,GAAYP,QAASP,KACnBnlB,KAAKgmD,KAAK4H,cAAczoC,GAAY,CAAE0oC,WAAW,IACjD,MAAMC,GAAqC,GAAGC,OAAOJ,KAAoBxoC,KAAe,IAClF6oC,GAA6BhuD,KAAKmrD,GAAGvqB,MAAM,IACjD,GAAI5gC,KAAKiuD,iBAAkB,CACzB,MAAMC,MAAyCC,MAC7CnuD,KAAKmH,SACL0e,GACAV,GACAnlB,KAAKulD,cAAct5C,IAErB+hD,GAAaI,gBACX,QACApuD,KAAKmrD,GAAGkD,QACNH,KAAyC,IAAI9oC,SAC3C0oC,KAAkB,IAAI1oC,SACtByhC,GAAO1/C,IAAW6jD,oBAG1B,MACsB11C,KAAW6P,KAAa9kB,OAAQ6iB,IAAMA,GAAEorC,YAAc,IAC9D5oC,QAAS6oC,KACnB,MAAMC,GAAmBV,GAAgBpuD,KAAMwjB,IAAMA,GAAEkC,UAAYmpC,GAAGnpC,SAGtE4oC,GAAaI,gBAAgBG,GAAGnpC,QAASplB,KAAKmrD,GAAGkD,QAD/CE,GAAGrI,eAAiB,EAAKsI,IAAkBz6C,UAAY,IAAOy6C,IACkB,GAGtFxuD,KAAKgmD,KAAKoI,gBAAgBjpC,GAAY6oC,GAAY,GAEpDhuD,KAAK41B,eAAehyB,QAAK6qD,KAAwCd,IAAqB,IAAG,IAI/F,MAAMe,EAAc1uD,KAAKgmD,KAAKhlB,aAAa5gC,QACzCC,KAAQsuD,KAAU,EAACC,MAA8BD,KAAM,EACvDl4B,KAAez2B,KAAK8e,YAAS,EAC7Bre,KAAI,EAAEkuD,EAAOr5C,MACJ0B,OAAO2N,KAAKgqC,GAAOnsC,OAAO,CAACa,GAAsD8B,MAGtF,MAAM0pC,IAFsBv5C,GAAS6P,KAAe,IAGjD9kB,OAAQyuD,IACHA,GAAG5I,eAAiB,EACfxb,OAAOikB,EAAMxpC,IAAY2pC,GAAG1pC,UAAY,KAE1C2pC,MAAUJ,EAAMxpC,IAAY2pC,GAAG1pC,WAAaupC,EAAMxpC,IAAYkkC,QAAayF,GAAG1pC,SAEtF3kB,IAAKyiB,KACJ,IAAKA,GAAEorC,UACL,OAEF,MAAMv6C,GAAW46C,EAAMxpC,IAAYjC,GAAEkC,SACrC,SAAO4pC,OAAkB9rC,GAAuB,iBAAbnP,GAAwBA,GAAW,EAAC,GAG3EsP,UAAW8B,IAAc0pC,GAClBxrC,IACN,MAIPrjB,KAAKwK,cAAcG,IACjBuhD,EACG9rD,QACC+iB,KAAU,EAAEhc,EAAUo+C,MACpBmJ,EAAYtuD,QACVK,KAAK4iB,IAAe,CAACA,GAAYlc,EAAUo+C,QAC5C,EAEH9uB,KAAez2B,KAAKykB,oBAErB1Z,UAAU,GAAGsY,EAAYlc,GAAUo+C,IAAgB1/B,OAClD,MAAMopC,GAAoBjvD,KAAKiuD,eAAe9mD,IAC1C6P,OAAOyO,QAAQpC,GAAYb,OAAO,CAAC0sC,IAAwBC,GAAYC,OACrE,MAAMC,MAAuBlB,MAC3BhnD,GACA0e,GACAspC,GACA5J,GAAct5C,IAGhBijD,UAAsBC,IAAcC,GAAsB/uD,OAAQkjB,KACxD8rC,GAAqBpqC,KAC3B,EAAGG,WAASkV,kBAAkBA,IAAclV,KAAY7B,GAAU6B,UAI/D8pC,IACN,IACH7rC,EAEJrjB,KAAKsvD,iCAAiCnoD,GAAU8nD,IAEhDjvD,KAAKoY,OAAOQ,SACV22C,8BAAyC,CACvCpoD,SAAUA,GACVoL,WAAYgzC,GAAct5C,GAC1BoX,WAAY4rC,MAGhBjvD,KAAK41B,eAAehyB,QAAK6qD,KAAwCQ,IAAkB,GAG3F,CAEQK,iCACNnoD,EACAkc,GAEA,GAAIlc,IAAa0B,KAASsX,KACxB,OAGF,MAAMqvC,EAA8Cx4C,OAAOyO,QAAQpC,GAAYb,OAC7E,CAACiB,IAAM7jB,GAAK6vD,OACVhsC,GAAI7jB,IAAO6vD,GAAsBxqC,KAAM3kB,IAAMA,GAAE6G,WAAawa,KAAYqD,cACjEvB,IAET,IAEIisC,KAA+Et2B,MACnFp5B,KAAKoY,OAAOhY,QAAKstD,MAA6B1tD,KAAKulD,cAAct5C,GAAIjM,KAAKmH,YAEtEwoD,GAAiD34C,OAAOyO,QAAQiqC,GAAkBltC,OACtF,CAACiB,IAAM7jB,GAAKgwD,OACV,MAAMH,GAAwBl5C,MAAMC,QAAQo5C,IAAqBA,GAAoB,CAACA,IACtFnsC,UAAI7jB,IAAO6vD,GAAsBxqC,KAAM3kB,IAAMA,GAAE6G,WAAawa,KAAYqD,cACjEvB,IAET,IAGIosC,GAA0B74C,OAAOyO,QAAQ+pC,GAAoBvqC,KACjE,EAAErlB,GAAKb,MAAWA,KAAU4wD,GAAsB/vD,KAE9CkwD,GAA4B94C,OAAOyO,QAAQkqC,IAAuB1qC,KACtE,EAAErlB,GAAKb,MAAWA,KAAUywD,EAAmB5vD,KAG7CiwD,IACF7vD,KAAKorD,eAAe2E,kBAAkB,CACpC9jD,GAAIi/C,GACJ8E,WAAY,8DAIZF,IACF9vD,KAAKorD,eAAe2E,kBAAkB,CACpC9jD,GAAIi/C,GACJ8E,WAAY,+DAGlB,CAEQ/B,eAAe9mD,EAAqBnH,KAAKmH,UAC/C,MAAO,CAAC0B,KAASmY,KAAMnY,KAASsX,MAAM3T,SAASrF,EACjD,CAEQslD,0BACNP,EACAI,GAEA,MAAM2D,EAAoC/D,EAAY9rD,QACpD+iB,KAAU,EAAEhc,GAAUo+C,MACbvlD,KAAKoY,OAAOhY,QAAKstD,MAA6BnI,GAAct5C,GAAI9E,OAIrE+oD,EAAgBl5C,OAAOC,UAAOmiB,MAAS62B,IAAsC,IAAI5vD,OAAQyqC,IAC7Fv0B,MAAMC,QAAQs0B,IAAQA,GAAKl2B,OAAS,IAAMk2B,IAC1Cl2B,OAEF5U,KAAK6pD,yBAAwB1pD,KAAc,CACzCH,KAAK8e,UACLwtC,EACAtsD,KAAKykB,kBACLzkB,KAAKsrD,kBACLtrD,KAAKwrD,mDACLxrD,KAAKyrD,4BACLzrD,KAAKghD,WACLkL,IACC9rD,QACDK,KACE,EACE6U,GACAmkB,GACA5T,GACAsqC,GACAC,GACAnJ,GACAoJ,IACClpD,GAAUo+C,OAEkC,IAAzCvuC,OAAOC,OAAO3B,IAAY,IAAIV,OACzB,GAGF6kB,GAAUh5B,IAAKk5B,KACpB,MAAM22B,GAA6CtwD,KAAKgmD,KAAKC,SAAStsB,GAAS1tB,KAAK+0B,aAAa5gC,QAC/FU,KAAUd,KAAKgmD,KAAKC,SAAStsB,GAAS1tB,IAAIskD,gBAAa,EACvDrvD,SAGIgtD,MAAyCC,MAC7ChnD,GACA0e,GACA8T,GAAS1tB,GACTs5C,GAAct5C,IAGVm9C,MAA0B9T,UAC9B6Y,MACEnuD,KAAKmH,SACLgpD,GACAx2B,GAAS1tB,GACTjM,KAAKulD,cAAct5C,IACnB,IAAK,EAEPspC,MAAsB5b,GAAS1tB,GAAIokD,KAG/BG,GACJtC,GAAuCt5C,OAAS,GAAK5U,KAAKiuD,kBACrD34C,KAAWqkB,GAAS1tB,KAAO,IAAI5L,OAC7B6iB,MACGgrC,GAAuCxuD,KAAK,EAAG0lB,WAASpR,cAAYk5B,kBAElE9nB,KAAYlC,GAAEkC,SACU,MAAvBpR,IAAY3D,QAAkB68B,KAAgBvrB,KAAYqD,eAIlE1P,KAAWqkB,GAAS1tB,KAAO,GAE5BwkD,GAAmBzwD,KAAK0wD,oBAC5B/2B,GACA62B,GACAF,GACAJ,EACAE,GACAnJ,GACAgJ,EACA/B,GACA/mD,GACAo+C,IAGI+D,GAAmDtpD,KAAK2wD,oBAC5DL,GACAG,IAGIxL,GAAUjlD,KAAK4wD,WAAWH,IAKhC,MAAO,CACL92B,YACAsrB,WACAF,gBAPsB,IAAIjvB,IACP,IAAnBmvB,GAAQrwC,OAAe,MAAQqwC,GAAQrwC,OAAS,EAAIqwC,GAAQ,GAAK,QAOjEmE,2BACA9zC,SAAUm7C,GACVnH,qBACA1E,oBAAqB5kD,KAAK6wD,sBACxBP,GACApC,GACA/mD,IAEFoiD,uBAAwBvpD,KAAKutD,uBAAuBkD,GAAkBtpD,SAG3E,EAEHjG,QAEJ,CAEQ2vD,sBACNP,EACApC,EACA/mD,GAEA,OAAOmpD,EAAWlwD,QAChBK,KAAK8iB,IACH,GAAkC,iBAAvBA,EAAU8lC,MAAuB,CAC1C,MAAMyH,KAAgB5C,EAAuCxuD,KAC1DkmB,IAAYA,GAAQR,UAAY7B,EAAU8lC,OAE7C,OAAO9lC,EAAU8lC,QAAaxC,GAAO1/C,GAAU6jD,oBAAsB8F,EACvE,CACA,OAAO95C,OAAO2N,KAAKpB,GAAW0B,KAAMG,KAClC,MAAM0rC,KAAgB5C,EAAuCxuD,KAAMkmB,IAAYA,GAAQR,UAAYA,IAE7F2rC,GAAqBxtC,EAAU6B,IAErC,OACiC,iBAAvB2rC,GAAkCA,GAAqB,KAAIhC,MAAUgC,MAC7ED,IAEH,GAGP,CAEQF,WAAWH,GACjB,GAAIzwD,KAAKmH,WAAa0B,KAASsX,KAC7B,MAAO,GAET,MAAM6wC,EAAcP,EAAiBxrC,KAAM/B,GAAMA,EAAEgqB,cAAgBvrB,KAAYqD,cAC3EyrC,EAAiB7gB,QAAS1sB,GAAMA,EAAEgqB,aAAa7sC,OAAO2iB,MACtD,GAEJ,OAAOguC,EAAYp8C,OAAS,EAAI,IAAIo8C,EAAa,OAASA,CAC5D,CAEQL,oBACNL,EACAG,GAEA,OAAOH,EAAWlwD,QAChBK,KAAK8iB,GACIktC,EACJpwD,OAAQulB,GACHA,EAAQsgC,eAAiB,EACpBxb,OAAOnnB,EAAUqC,EAAQR,UAAY,EAE1CplB,KAAKiuD,iBACAroC,EAAQR,UAAY7B,EAAU8lC,QAAa4H,KAAYzkD,SAAS+W,EAAU8lC,QAAQ,EAEpF0F,MAAUxrC,EAAUqC,EAAQR,WAEpC3kB,IAAKmlB,GACsC,iBAA/BrC,EAAUqC,EAAQR,SACpB,IACFQ,EACH7R,SAAU22B,OAAOnnB,EAAUqC,EAAQR,UACnCpR,WAAY,IACP4R,EAAQ5R,WACX3D,OAAQ6gD,KAAcC,WAAWvrC,EAAQ5R,WAAW3D,QACjD+gD,SAASF,KAAcC,WAAWvQ,OAAOr9B,EAAUqC,EAAQR,YAC3DisC,eAEDzrC,EAAQ9d,eAAiB,CAC3BA,cAAe,IACV8d,EAAQ9d,cACXuI,OAAQ6gD,KAAcC,WAAWvrC,EAAQ9d,cAAcuI,QACpD+gD,SAASF,KAAcC,WAAWvQ,OAAOr9B,EAAUqC,EAAQR,YAC3DisC,cAKJ,IAAKzrC,EAAS7R,SAAU,IAEhC1T,OAAQulB,GAAqC,IAAzBA,EAAQoG,cAAsD,IAA/BpG,EAAQ5R,YAAY3D,SAGhF,CAEQqgD,oBACN/2B,EACArkB,EACAg7C,EACAJ,EACAE,GACAnJ,GACAgJ,GACA/B,GACA/mD,GACAo+C,IAEA,MAAM+L,GAAkBrB,GAAkC7vD,QACxDK,KACG4iB,IACCrM,OAAOC,OAAOoM,IAAYhjB,OAAQyqC,IAAUv0B,MAAMC,QAAQs0B,IAAQA,GAAKl2B,OAAS,IAAMk2B,IAAOl2B,SAAM,EAEvG1T,SAGF,OAAOoU,EACJ7U,IAAKmlB,KACJ,MAAMoG,GACJkiC,GAAuCxuD,KAAMwjB,IAAMA,GAAEkC,UAAYQ,GAAQR,UAAUrR,UAAY,EAC3FiU,GAAYhoB,KAAKuxD,oBAAoBjB,EAAY1qC,GAASoG,IAC1Dm6B,GAAqBmK,EAAWlwD,QACpCK,KAAK8iB,KACH,MAAM6jC,GAAQxhC,GAAQsgC,eAAiB,EAAIxb,OAAOnnB,GAAUqC,GAAQR,UAAY,EAEhF,MAAO,CACL/U,OAAQ6gD,KAAcC,WAAWvrC,GAAQ5R,WAAW3D,QACjD+gD,SAASF,KAAchmB,KAAKkc,GAAO,IACnCiK,WACH1Q,aAAc/6B,GAAQ5R,WAAW2sC,iBAIjCgG,GAAY3mD,KAAKwxD,aAAa5rC,IAEpC,MAAO,IACFA,GACHoG,gBACAm6B,sBACAn+B,aACA2+B,aACA2G,gBAAiB1nC,GAAQ0oC,WAAa8B,GAAkD5jD,SAASmtB,EAAS1tB,IAC1Gu8C,yBAA0B5iC,GAAQ0oC,WAAarH,GAA2Bz6C,SAASmtB,EAAS1tB,IAC5Fy8C,UAAQvoD,KAAc,CAAC6nB,GAAWspC,KAAkBlxD,QAClDK,KAAI,EAAEgxD,GAAYC,MAChB1xD,KAAK2xD,eAAeD,GAAgB9rC,GAAS6rC,GAAYvB,KAAc,EAEzEhvD,SAEF6kD,sBAAuB/lD,KAAK4xD,wBAAwBhsC,GAAQR,QAASplB,KAAKulD,cAAct5C,GAAI0tB,EAAS1tB,IACrGu5C,SAAU,GAAG7rB,EAAS1tB,MAAM9E,MAAYo+C,GAAct5C,MAAM2Z,GAAQR,UACpEmhC,YAAav+B,GAAU5nB,QACrB+iB,KAAW+E,IACFloB,KAAKyV,gBAAgBo8C,kBAC1B,CACE,eAAejsC,GAAQze,YAAYye,GAAQR,WAAW8C,GAAW,WAAa,WAC9E,eAAetC,GAAQze,YAAY+gB,GAAW,WAAa,iBAE7D7Y,EACA,CAAEyiD,WAAW,MAEhB,EACDrxD,KAAK0jB,IAAiBA,GAAa,IAAMA,GAAa,QAI3D9jB,OAAQ6iB,IAAMA,GAAEorC,UACrB,CAEAtjC,iBAAiB2O,GACX35B,KAAKgmD,KAAKC,SAAStsB,EAAS1tB,IAAIg6C,SAASoD,OAC3CrpD,KAAKgmD,KAAKC,SAAStsB,EAAS1tB,IAAIg6C,SAASoD,MAASjoB,SAAS,GAE/D,CAEQwwB,wBAAwBxsC,EAAiB7S,EAAoB4S,GACnE,SAAOhlB,KAAc,CAACH,KAAK4rD,eAAgB5rD,KAAK2rD,sBAAsBvrD,QACpEK,KAAI,EAAEsxD,EAAeh+C,QACdg+C,EAAcjG,SAASt/C,SAAS4Y,IAG9BrR,GAASxB,KAAc4S,IAAe4sC,EAAclG,gBAC5D,EACD/qD,MAAU,IAAK,EACf4X,OAEJ,CAEQi5C,eACND,EACA9rC,EACA6rC,EACAvB,GAEA,MAAM8B,GAA0B,OAAlBpsC,EAAQosC,WAAiB3iD,EAAYuW,EAAQosC,MACrDC,GAAiBD,GAAQ9B,EAU/B,MAAO,CACLt1B,KATW62B,EACTnK,KAAUmB,SACS,IAAnBwJ,GACE3K,KAAUsB,GAJgB8I,EAAiB,GAAKA,GAAkBO,GAMhE3K,KAAUqB,OACVrB,KAAUC,KAIhBH,WAAiB/3C,IAAV2iD,GAAsBC,GAAiBP,OAAiBriD,EAEnE,CAEQmiD,aAAa5rC,GACnB,OACE5lB,KAAKiuD,eAAeroC,EAAQze,UAAY,QAAUye,EAAQsgC,eAAiB,EAAI,SAAW,UAE9F,CAEQqL,oBACNjB,EACA1qC,EACAoG,GAEA,OAAOskC,EAAWlwD,QAChBK,KAAK8iB,GACCyI,EAAe,KAAOzI,EAAU8lC,OAAY9lC,EAAU8lC,QAAazjC,EAAQR,WAGxEplB,KAAKiuD,eAAeroC,EAAQze,UAC/Boc,EAAU8lC,QAAazjC,EAAQR,WAC/B2pC,MAAUxrC,EAAUqC,EAAQR,aACjC,EACDlkB,QAEJ,CAACG,SAAArB,KAAA,mBAAAsB,iBA9vBUw7C,GAA+B3+C,MAAAqF,OAAArF,MAAA2G,MAAA3G,MAAA4G,MAAA5G,MAAA6G,OAAA7G,MAAA4G,MAAA5G,aAAA,EAAAkD,SAAArB,KAAA,UAAAkyD,EAAA1wD,IAAA,MAA/Bs7C,EAA+Br7C,UAAA,mCAAAC,OAAA,CAAAirD,eAAA,iBAAA1wC,UAAA,YAAAkwC,eAAA,iBAAArtC,UAAA,YAAA2F,kBAAA,oBAAA6mC,kBAAA,oBAAAtK,WAAA,aAAAuK,2BAAA,6BAAAC,mDAAA,qDAAAC,4BAAA,8BAAAC,kBAAA,oBAAAzsC,cAAA,gBAAA0sC,oBAAA,sBAAAC,eAAA,kBAAAloD,QAAA,CAAAkyB,eAAA,iBAAAm2B,eAAA,kBAAApqD,MAAA,EAAAC,KAAA,EAAAC,OAAA,onJAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,ID9K5C5D,MAAA,WAKEA,MAAA,sBA+ZEA,MA7ZA,EAAAg0D,GAAA,mBA6ZAh0D,CA7Z8E,EAAAi0D,GAAA,qBA6Z9Ej0D,CA1Z0D,EAAAk0D,GAAA,qBAgb9Dl0D,QAEAA,MAAA,EAAAm0D,GAAA,yBAAAn0D,yHAvbgBA,cAAA,WAAAA,MAAA,IAAA6D,EAAA0qD,SAECvuD,MAAA,GAAAA,MAAA,eAAA6D,EAAA4oD,eAAAC,SAGE1sD,cAAA,eAAA6D,EAAA4oD,eAAAE,cA0ZT3sD,cAAA,eAAA6D,EAAA4oD,eAAAG,wsBCtPGjO,CAA+B,qNC9JxC3+C,MADF,WACEA,CAD4D,eAE1DA,MAAA,8BAEJA,iBAFIA,MAAA,GAAAA,MAAA,IAAAA,MAAA,4EAoBAA,MAAA,GAAgCA,MAAA,6CAAAA,oBAAA,8DAChCA,MAAA,GAAgCA,MAAA,kEAAAA,oBAAA,eAAAA,MAAA,EAAAE,EAAA,MAAAk0D,EAAA,KAAAA,EAAAlzC,mCAChClhB,MAAA,GAA+BA,MAAA,kEAAAA,oBAAA,gBAAAA,MAAA,EAAAE,EAAA,MAAAk0D,EAAA,KAAAA,EAAAlzC,mCAHjClhB,MAAA,YAGEA,MAFA,EAAAq0D,EAAA,sBAEAr0D,CAFgC,EAAAs0D,EAAA,sBAEhCt0D,CADgC,EAAAu0D,EAAA,uBAElCv0D,mCAJ8DA,MAAA,iBAAAo0D,EAAA,KAAAA,EAAAlzC,OAC7ClhB,cAAA,kBACAA,cAAA,4CAKjBA,MADF,WACEA,CAD4E,YACpCA,MAAA,8BAAmDA,QAC3FA,MAAA,YAAqCA,MAAA,GACvCA,qCAF0CA,MAAA,GAAAA,YAAA,kCACHA,MAAA,GAAAA,MAAA,MAAAo0D,GAAA,MAAAA,EAAA/yD,WAAA,KAAA+yD,EAAA/yD,WAAA2B,gCAQ/BhD,MAAA,GACEA,MAAA,sEAAAA,cAAA,IAAAA,MAAA,0BAAA2iD,EAAA3nB,WAAA,KAAA2nB,EAAA3nB,WAAAI,gBAAA,IAAAunB,EAAA6R,aAAA,4BAEFx0D,MAAA,GACEA,MAAA,6CAAAA,cAAA,IAAAA,MAAA,mEANJA,MAAA,YACEA,MAAA,GAIAA,MAHA,EAAAy0D,EAAA,sBAGAz0D,CAHwC,EAAA00D,EAAA,uBAM1C10D,kCAPEA,cAAA,IAAA2iD,EAAA5rC,UAAAC,aAAA,SAAA2rC,EAAAzrC,QAAAF,aAAA,KACehX,cAAA,OAAA2iD,EAAA3nB,YAGAh7B,cAAA,QAAA2iD,EAAA3nB,sCARrBh7B,MAAA,GAEIA,MADF,WACEA,CADuB,YACiBA,MAAA,8BAAuCA,QAC/EA,MAAA,EAAA20D,EAAA,cASF30D,2CAV0CA,MAAA,GAAAA,YAAA,sBAChBA,MAAA,GAAAA,MAAA,UAAA40D,6BAY5B50D,MAAA,YACEA,MAAA,GACFA,kCADEA,cAAA,IAAA60D,EAAA99C,UAAAC,aAAA,SAAA69C,EAAA39C,QAAAF,aAAA,UAAA69C,EAAA5zC,iBAAA,KAAA4zC,EAAA5zC,iBAAAje,KAAA,gCAjBJhD,MAAA,YACEA,MAAA,EAAA80D,EAAA,uBAcA90D,MAAA,YAAwCA,MAAA,8BAAmDA,QAC3FA,MAAA,EAAA+0D,EAAA,cAGF/0D,6BAlBiBA,cAAA,OAAA40D,EAAA,GAAAJ,cAcyBx0D,MAAA,GAAAA,YAAA,kCAChBA,MAAA,GAAAA,MAAA,UAAA40D,8BA7D1B50D,MADF,UACEA,CADsD,UAEpDA,MAAA,GACFA,QACAA,MAAA,WACEA,MAAA,6CACFA,QAEAA,MAAA,WACEA,MAAA,yBACAA,MAAA,WACEA,MAAA,oCACFA,QACAA,MAAA,0BACFA,QACAA,MAAA,GAAAg1D,EAAA,aAMEh1D,MADF,YACEA,CADgD,aACRA,MAAA,gCAAmDA,QAC3FA,MAAA,aAAkCA,MAAA,IACpCA,UAEEA,MADF,YACEA,CADgD,aACRA,MAAA,gCAAiDA,QACzFA,MAAA,aAAkCA,MAAA,IACpCA,UAEEA,MADF,YACEA,CADgD,aACRA,MAAA,gCAAwCA,QAChFA,MAAA,aACEA,MAAA,qEAEJA,UAEEA,MADF,YACEA,CADgD,aACRA,MAAA,gCAAsDA,QAC9FA,MAAA,GAAAi1D,EAAA,cAKFj1D,QAKAA,MAJA,GAAAk1D,EAAA,aAIAl1D,CAJ8E,GAAAm1D,GAAA,gCAwBhFn1D,uCAhEIA,MAAA,GAAAA,MAAA,IAAAM,EAAAgJ,MAAA,KAGAtJ,MAAA,GAAAA,MAAA,IAAAA,MAAA,KAAAA,MAAA,KAAAM,EAAA80D,QAAAr+C,UAAA+I,SAAA,aAImB9f,MAAA,GAAAA,MAAA,WAAAo0D,EAAAr9C,WAEc/W,MAAA,GAAAA,MAAA,OAAAA,MAAA,MAAAM,EAAA+0D,QAEdr1D,MAAA,GAAuBA,MAAvB,WAAAo0D,EAAAl9C,QAAuBlX,CAAD,cAEMA,cAAA,WAMPA,MAAA,GAAAA,YAAA,oCACNA,MAAA,GAAAA,MAAA,GAAAo0D,EAAAr9C,UAAAE,SAAA,KAAAm9C,EAAAr9C,UAAAC,aAAA,KAGMhX,MAAA,GAAAA,YAAA,kCACNA,MAAA,GAAAA,MAAA,GAAAo0D,EAAAl9C,QAAAD,SAAA,KAAAm9C,EAAAl9C,QAAAF,aAAA,KAGMhX,MAAA,GAAAA,YAAA,yBAEtCA,MAAA,GAAAA,MAAA,IAAAA,MAAA,+BAAAA,MAAA,YAAAo0D,EAAA,KAAAA,EAAAjzC,WAAA,KAIsCnhB,MAAA,GAAAA,YAAA,uCACRA,MAAA,GAAAA,MAAA,YAAAkR,KAAA,MAAAkjD,EAAA,KAAAA,EAAAlzC,QAMiBlhB,cAAA,aAAAo0D,GAAA,MAAAA,EAAA/yD,WAAA,KAAA+yD,EAAA/yD,WAAA2B,MAIZhD,cAAA,OAAAA,MAAA,MAAAM,EAAA4jD,YC7BlC,IAAMoR,GAA6B,MAApC,MAAOA,EANb1zD,cAOWC,KAAAmI,eAAiBA,KAS1BjI,WACEF,KAAKqiD,SAAWriD,KAAKuzD,OAAOnzD,QAC1BC,KAAOG,UAAO,EACdC,KAAK2W,GACHA,EAAMwL,UAAUviB,OAAOwiB,MAAUpiB,IAAKqiB,QACjCA,EACHqW,cAAYu6B,MAAa5wC,GAAK,KAAOA,EAAEqW,gBAI7Cn5B,KAAKwzD,MAAQxzD,KAAKuzD,OAAOnzD,QACvBK,KAAK2W,GACHA,EAAMwL,WAAWviB,OAAOwiB,MAAUoC,KAAMrC,MAAc8wC,MAAa9wC,IAC/Dza,KAAewrD,MACfxrD,KAAeyrD,qBAGzB,CAACvyD,SAAArB,KAAA,mBAAAsB,iBA3BUmyD,EAA6B,EAAApyD,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAA7BiyD,EAA6BhyD,UAAA,iCAAAC,OAAA,CAAA6xD,OAAA,SAAA9rD,MAAA,SAAA9F,MAAA,EAAAC,KAAA,EAAAC,OAAA,mqCAAAC,SAAA,SAAAC,EAAAC,IAAA,EAAAD,IDjB1C5D,MAAA,EAAA01D,GAAA,sCAA6B11D,MAAA,OAAAA,MAAA,IAAA6D,GAAAuxD,yGCiBhBE,CAA6B,0DCftCt1D,MAAA,sCAAwBA,MAAA,eAAAuI,EAAAotD,eAAA,IAAyC31D,MAAA,OAAAuI,EAAAmD,iCAGjE1L,MAAA,UACEA,MAAA,8BACFA,8BAF2DA,MAAA,UAAAuI,EAAAqtD,YACzD51D,cAAA,IAAAA,MAAA,IAAAuI,EAAAe,OAAA,4BAEFtJ,MAAA,WACEA,MAAA,GACFA,kDAEEA,MADF,WACEA,CADsE,eAOpEA,MAAA,mBAAAA,MAAA0I,GAAA,MAAAH,GAAAvI,QAAA,OAAAA,MAASuI,GAAAstD,KAAApwD,MAAU,GAAK,GAExBzF,MAAA,8BAEJA,kCAX4BA,MAAA,WAAAuI,EAAAutD,eAAA,eAGxB91D,QAGAA,MAHA,iBAAAuI,EAAAe,MAGAtJ,CAHwB,iBAAAuI,EAAAwtD,gBAAA,UAGxB/1D,CAF8C,cAAAuI,EAAAytD,EAAAp5B,aAAAO,OAE9Cn9B,CADqC,WAAAuI,EAAA0tD,YAIrCj2D,cAAA,IAAAuI,EAAA2tD,UAAAl2D,MAAA,0BCTD,IAAMm2D,EAA8B,MAArC,MAAOA,EA2BX,WACIC,GACF,OAAOv0D,KAAKw0D,cACd,CAIAz0D,cAjCgBC,KAAAm0D,EAAyBM,IAOzCz0D,KAAAw0D,gBAAiB,EAIjBx0D,KAAAi0D,eAAgB,EAEhBj0D,KAAA00D,WAAY,EAEZ10D,KAAA+zD,WAAa,iBAEb/zD,KAAA20D,WAAa,aAEb30D,KAAA8zD,eAAiB,uBAEjB9zD,KAAAo0D,YAAa,EAIep0D,KAAA40D,cAAe,EAM3C50D,KAAAg0D,KAA8B,IAAI7wD,KAEnB,CAAC9B,SAAArB,KAAA,mBAAAsB,iBAlCLgzD,EAA8B,EAAAjzD,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAA9B8yD,EAA8B7yD,UAAA,kCAAAozD,SAAA,EAAAC,aAAA,SAAA/yD,EAAAC,IAAA,EAAAD,GAA9B5D,MAAA,QAAA6D,GAAA4yD,aAAAz2D,CAA8B,cAAA6D,GAAAuyD,q5BDVzCp2D,MADF,UACEA,CAD+D,WAE7DA,MAAA,EAAA42D,EAAA,mBACF52D,QACAA,MAAA,WAOEA,MANA,EAAA62D,GAAA,WAMA72D,CANkF,EAAA82D,EAAA,YAMlF92D,CAHkD,EAAA+2D,GAAA,aAgBtD/2D,iBAxB0CA,MAAA,UAAA6D,GAAA2yD,YACQx2D,cAAA,cAAA6D,GAAAyF,OAClCtJ,cAAA,OAAA6D,GAAA6H,MAGP1L,MAAA,GAAAA,MAAA,OAAA6D,GAAAyF,OAGCtJ,cAAA,OAAA6D,GAAA0yD,WAGAv2D,cAAA,OAAA6D,GAAAwyD,+KCAGF,CAA8B,mECPvCn2D,MAAA,WACEA,MAAA,8BACFA,oCADEA,cAAA,IAAAA,MAAA,2BAAAA,MAAA,EAAAE,EAAA82D,EAAA96B,qBAAA,gCAEFl8B,MAAA,SAAqBA,MAAA,8BAA6DA,oCAA7DA,cAAA,GAAAA,MAAA,iCAAAg3D,EAAAC,MAAA,+BACrBj3D,MAAA,SACEA,MAAA,uDACFA,oCADEA,cAAA,IAAAA,MAAA,uCAAAA,MAAA,IAAAg3D,EAAAE,UAAA,wCAEFl3D,MAAA,SAAqBA,MAAA,8BAA6DA,oCAA7DA,cAAA,GAAAA,MAAA,iCAAAg3D,EAAAG,MAAA,+BATrBn3D,MADF,UACEA,CAD6D,WAChBA,MAAA,8BAA8BA,QAC3EA,MAAA,WAAwBA,MAAA,GAAkCA,QAQ1DA,MAPA,EAAAo3D,GAAA,YAOAp3D,CAP+D,EAAAq3D,GAAA,YAO/Dr3D,CAJqB,EAAAs3D,GAAA,YAIrBt3D,CAHyB,EAAAu3D,GAAA,aAI3Bv3D,mCAV+CA,MAAA,GAAAA,YAAA,IAAAg3D,EAAAv6B,OACrBz8B,MAAA,GAAAA,MAAA,GAAAg3D,EAAA7vC,UAAA,IAAA6vC,EAAA5vC,SAAA,IACWpnB,cAAA,OAAAg3D,EAAA96B,oBAG7Bl8B,cAAA,OAAAg3D,EAAAC,OACAj3D,cAAA,OAAAg3D,EAAAE,WAGAl3D,cAAA,OAAAg3D,EAAAG,kCAXVn3D,MAAA,GACEA,MAAA,EAAAw3D,GAAA,2CAA2Bx3D,cAAA,OAAAg3D,EAAA7vC,YCYtB,IAAMswC,GAA+B,MAAtC,MAAOA,EAYX71D,cAXgBC,KAAAm0D,EAAyBM,IAMzCz0D,KAAA40D,cAAe,CAKA,CAACvzD,SAAArB,KAAA,mBAAAsB,iBAZLs0D,EAA+B,EAAAv0D,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAA/Bo0D,EAA+Bn0D,UAAA,mCAAAozD,SAAA,EAAAC,aAAA,SAAA/yD,EAAAC,IAAA,EAAAD,GAA/B5D,MAAA,QAAA6D,GAAA4yD,aAAAz2D,CAA+B,YAAA6D,GAAA4yD,aAA/Bz2D,CAA+B,cAAA6D,GAAA4yD,aAA/Bz2D,CAA+B,cAAA6D,GAAA4yD,8UDb5Cz2D,MAAA,EAAA03D,GAAA,6CAAe13D,MAAA,OAAAA,MAAA,IAAA6D,GAAA8zD,wDCaFF,CAA+B,2PCJtCz3D,MAAA,UAAiDA,MAAA,GAAoDA,wCAApDA,cAAA,GAAA43D,EAAAzwC,UAAA,IAAAywC,EAAAxwC,SAAA,4BACjDpnB,MAAA,UAAgDA,MAAA,8BAAiDA,eAAjDA,oBAAA,2DAElDA,MAAA,WACEA,MAAA,8BACFA,wCADEA,cAAA,IAAAA,MAAA,2BAAAA,MAAA,EAAAqc,GAAAu7C,EAAAzjB,uBAAA,gCALFn0C,MANF,UAMEA,CADD,WAEGA,MAAA,EAAA63D,GAAA,+BACA73D,MAAA,EAAA83D,GAAA,+BACF93D,QACAA,MAAA,EAAA+3D,GAAA,aAGA/3D,MAAA,WACEA,MAAA,mDAgBJA,mEA1BEA,MADA,eAAAg4D,GACAh4D,CAD6B,cAAAi4D,GAIpBj4D,MAAA,GAAAA,MAAA,QAAAA,MAAA,IAAAk4D,GAAA/7C,UAAAg8C,gBACAn4D,MAAA,GAAAA,MAAA,OAAAA,MAAA,KAAAk4D,GAAA/7C,UAAAg8C,gBAE0Bn4D,MAAA,GAAAA,MAAA,OAAA43D,EAAAzjB,sBAIjCn0C,MAAA,GAAAA,MAAA,IAAAA,MAAA,KAAA43D,EAAAn2D,IAAAzB,MAAA,GAAAyU,GAAA,CAAAmjD,EAAAhiD,SAAAgiD,EAAAhiD,SAAAgiD,EAAAhiD,SAAAgiD,EAAAhiD,SAAAgiD,EAAAhiD,SAAAgiD,EAAAhiD,SAAAgiD,EAAAhiD,SAAAgiD,EAAAhiD,SAAAgiD,EAAAhiD,YAAA,KAAA5V,MAAA,MAAA43D,EAAAtrC,OAAA,MCJC,IAAM8rC,GAAgC,MAAvC,MAAOA,EANbx2D,cAUEC,KAAA40D,cAAe,EAKhBvzD,SAAArB,KAAA,mBAAAsB,iBATYi1D,EAAgC,EAAAl1D,SAAArB,KAAA,UAAAuB,EAAAC,IAAA,MAAhC+0D,EAAgC90D,UAAA,oCAAAozD,SAAA,EAAAC,aAAA,SAAA/yD,EAAAC,IAAA,EAAAD,GAAhC5D,MAAA,QAAA6D,GAAA4yD,aAAAz2D,CAAgC,cAAA6D,GAAA4yD,aAAhCz2D,CAAgC,cAAA6D,GAAA4yD,weDX3Cz2D,MADF,UACEA,CAD6D,UACrCA,MAAA,8BAAwDA,QAChFA,MAAA,EAAAq4D,GAAA,gCA+BFr4D,eAhC0BA,MAAA,GAAAA,YAAA,IAAA6D,GAAAyF,MAAAtJ,MAAA,EAAAE,IAAAF,MAAA,EAAAI,MAGCJ,MAAA,GAAAA,MAAA,UAAAA,MAAA,IAAA6D,GAAAsY,UAAA1I,6GCQd2kD,CAAgC,sICwBtC,IAAM3oD,EAAoB,MAA3B,MAAOA,EAAoBvM,SAAArB,KAAA,mBAAAsB,iBAApBsM,EAAoB,EAAAvM,SAAArB,KAAA,UAAAuB,EAAAyC,GAAA,MAApB4J,IAAoBvM,SAAArB,KAAA,UAAAuB,EAAA0C,IAAA,UAlB7BG,KACAF,KACAC,IACAE,IACAC,IACAE,KACAE,KACAD,eAWSmJ,CAAoB,WAR7B6oD,IAAuB,CAAAjzD,eAAAsB,KAAAC,KACvB0uD,GACAa,EACAsB,GACAW,IAAgC,CAAA/yD,KAAAwB,KAAAE,KAAAC,YAHhCsuD,GAA6B,CAAAruD,IAAA5B,yBAAAsB,MAAA,CAAAtB,KAAA6B,IAAAC,IAAAH,YAC7BmvD,EAA8B,CAAA9wD,UAAA+B,IAAAT,MAAA,CAAAK,YAC9BywD,GAA+B,CAAApyD,MAAA,CAAAA,KAAA6B,IAAAF,YAC/BoxD,GAAgC,CAAA/yD,WAAA,CAAAA,KAAAgC,IAAAL,wLCf1BhH,MAAA,+DAMEA,MAHA,aAAAuI,EAAAkL,WAGAzT,CAHyB,QAAAuI,EAAA0Q,MAGzBjZ,CAFe,UAAAuI,EAAAkf,QAEfznB,CADmB,oBAAAuI,EAAA0N,6CA2BvBjW,MAFJ,WAEIA,CAFsF,WAEtFA,CADqB,YAEnBA,MAAA,kBACAA,MAAA,aACEA,MAAA,8BAEJA,UACAA,MAAA,YACEA,MAAA,8BAGNA,kCATqCA,MAAA,GAAAA,MAAA,OAAAuI,EAAAyB,eAAAoB,MAE7BpL,MAAA,GAAAA,MAAA,IAAAA,MAAA,0DAIFA,MAAA,GAAAA,MAAA,IAAAA,MAAA,6DCzCH,IAAMugD,EAA4B,MAAnC,MAAOA,EANb3+C,cAOWC,KAAAmI,eAAiBA,KAE1BnI,KAAAiwB,QAAOA,OAKEjwB,KAAA02D,iBAAkB,EAClB12D,KAAAmU,YAAa,EACbnU,KAAA22D,UAAW,EACX32D,KAAAqU,4BAA6B,EAMtCuiD,oBACE,SAAOC,MAA0B72D,KAAKmH,SACxC,CAAC9F,SAAArB,KAAA,mBAAAsB,iBAnBUo9C,EAA4B,EAAAr9C,SAAArB,KAAA,UAAA6Z,EAAArY,IAAA,MAA5Bk9C,EAA4Bj9C,UAAA,gCAAAC,OAAA,CAAAyF,SAAA,WAAA2vD,qBAAA,uBAAAC,gBAAA,kBAAAL,gBAAA,kBAAAviD,WAAA,aAAAwiD,SAAA,WAAAtiD,2BAAA,6BAAAD,kBAAA,oBAAAxC,WAAA,aAAAwF,MAAA,QAAAwO,QAAA,WAAA9L,mBAAAzb,EAAAsD,MAAA,GAAAC,KAAA,GAAAC,OAAA,w+BAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,YDdvC5D,MADF,QACEA,CAD6E,cAM3EA,MAAA,0BAAA6D,EAAAmS,YAAAnS,EAAAmS,UAAA,GAIEhW,MADF,UACEA,CADqD,YAEnDA,MAAA,iBAGIA,MAFJ,UAEIA,CAFgB,WAEhBA,CADkE,YACZA,MAAA,8BAA4CA,QAClGA,MAAA,aAAuEA,MAAA,IACzEA,UACAA,MAAA,GAAA64D,EAAA,2CASJ74D,UAEAA,MAAA,kBAONA,YAQEA,MANF,oBAMEA,CADD,aAKGA,MAAA,GAAA84D,EAAA,eAaA94D,MAAA,IAEJA,iBA9D0CA,MAArC,aAAA6D,EAAA00D,gBAAqCv4D,CAAD,aAAA6D,EAAA00D,iBAOrCv4D,cAAA,WAAA6D,EAAA20D,2HAIex4D,MAAA,GAAAA,MAAA,OAAA6D,EAAA40D,qBAG+Cz4D,MAAA,GAAAA,YAAA,KAAA6D,EAAA80D,uBACiB34D,MAAA,GAAAA,MAAA6D,EAAA+0D,iBAGtE54D,cAAA,QAAA6D,EAAAmS,aAAA,MAAAnS,EAAA4jB,QAAA,KAAA5jB,EAAA4jB,QAAA3R,SAYL9V,cAAA,gBAAA6D,EAAAmS,YACAhW,MAAA,OAAA6D,EAAAmG,eAAA+nB,cAQN/xB,QAEAA,MAFA,OAAA6D,EAAAmS,WAEAhW,CAFmB,iCAAA6D,EAAAiuB,KAEnB9xB,CADyC,iCAAA6D,EAAAiuB,MAKvC9xB,cAAA,UAAAA,MAAA,GAAAI,GAAAyD,EAAA00D,gBAAA10D,EAAA00D,kBAEMv4D,cAAA,OAAA6D,EAAAqS,uNChCGqqC,CAA4B,iICfzCvgD,MAAA,WAMEA,MAAA,GACFA,uGCIO,IAAM+hD,EAAY,MAAnB,MAAOA,EAMXngD,YAAoB6lB,GAAA5lB,KAAA4lB,SAA2B,CAE/C1lB,WACEF,KAAKgoB,UAAYhoB,KAAK4lB,QAAQ9M,mBAAmB1Y,QAAKK,KAAKwL,GAAOA,IAAOjM,KAAKgZ,OAChF,CAAC3X,SAAArB,KAAA,mBAAAsB,iBAVU4+C,GAAY/hD,MAAAqF,KAAA,EAAAnC,SAAArB,KAAA,UAAA2O,EAAAnN,IAAA,MAAZ0+C,EAAYz+C,UAAA,cAAAC,OAAA,CAAAsX,MAAA,SAAAc,mBAAAzb,EAAAsD,MAAA,EAAAC,KAAA,EAAAC,OAAA,mDAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,YDXzB5D,MAAA,EAAA+4D,EAAA,oCACG/4D,MAAA,OAAAA,MAAA,IAAA6D,EAAAgmB,+DCUUk4B,CAAY,0lBCkCT/hD,MAAA,GACEA,MAAA,aAA0BA,MAAA,8BAAkCA,uCAAlCA,MAAA,GAAAA,YAAA,IAAAg5D,iDAHhCh5D,MAAA,GACEA,MAAA,wDACEA,MAAA,EAAAi5D,GAAA,wCAGAj5D,MAAA,6DAQEA,MAFA,uBAAAwF,GAAAxF,MAAA0I,GAAA,MAAAwvD,EAAAl4D,QAAA,OAAAA,MAAek4D,EAAAgB,iBAAA1zD,GAAyB,GAAM,EAE9CxF,CAF+C,yBAAAA,MAAA0I,GAAA,MAAAwvD,EAAAl4D,QAAA,OAAAA,MAEhCk4D,EAAAjvD,cAAa,GAIhCjJ,2CAhBsBA,cAAA,QAAAA,MAAA,IAAAk4D,EAAAiB,WACLn5D,MAAA,GAAAA,MAAA,OAAAA,MAAA,KAAAk4D,EAAAkB,sBAKbp5D,MAAA,GAOAA,MAPA,kBAAAk4D,EAAAnsC,gBAOA/rB,CAPmC,kBAAAk4D,EAAA9zC,gBAOnCpkB,CANmC,aAAAA,MAAA,KAAAk4D,EAAAngC,aAMnC/3B,CALkC,mBAAAk4D,EAAA/T,WAKlCnkD,CAJ+B,YAAAk4D,EAAAxhD,UAI/B1W,CAFuB,kBAAAk4D,EAAAvU,oEAiCrC3jD,MAAA,qGAWEA,MAFA,8BAAAA,MAAAgT,GAAA,MAAAklD,EAAAl4D,QAAA,OAAAA,MAAoBk4D,EAAAmB,eAAc,EAElCr5D,CAFmC,2BAAAA,MAAAgT,GAAA,MAAAklD,EAAAl4D,QAAA,OAAAA,MAClBk4D,EAAAoB,eAAc,EAC/Bt5D,CADgC,+BAAAwF,GAAAxF,MAAAgT,GAAA,MAAAklD,EAAAl4D,QAAA,OAAAA,MACTk4D,EAAAgB,iBAAA1zD,GAAyB,GAAK,GAQvDxF,iCAFEA,MAfA,YAAAA,MAAA,KAAAk4D,EAAAlvD,UAeAhJ,CAfwC,gBAAAk4D,EAAAt0C,cAexC5jB,CAd+B,mBAAAA,MAAA,KAAAk4D,EAAA9zC,iBAc/BpkB,CAbsD,YAAAk4D,EAAAxhD,UAatD1W,CAZuB,aAAAA,MAAA,KAAAk4D,EAAA7+B,cAAA5lB,WAYvBzT,CAXgD,qBAAAk4D,EAAAp0C,mBAWhD9jB,CAVyC,iBAAAk4D,EAAAqB,iCAUzCv5D,CATmD,gBAAAk4D,EAAAsB,oCASnDx5D,CALqD,iBAAAk4D,EAAAjwC,eAKrDjoB,CAJiC,cAAAk4D,EAAAn0C,YAIjC/jB,CAH2B,WAAAk4D,EAAAn8C,SAG3B/b,CAFqB,uBAAAk4D,EAAAj4C,qBAErBjgB,CAD6C,uCAAAk4D,EAAAl0C,oEAmB7ChkB,MAAA,GACEA,MAAA,aAA2BA,MAAA,8BAAoCA,QAC/DA,MAAA,aAA0BA,MAAA,4DAA6DA,wCAD5DA,MAAA,GAAAA,MAAA,GAAAA,MAAA,sBACDA,MAAA,GAAAA,YAAA,IAAAA,MAAA,IAAAA,MAAA,IAAAk4D,EAAAjwC,iBAAA,wDAMxBjoB,MAAA,GAEIA,MADF,WACEA,CAD6B,eACgCA,MAAA,mBAAAA,MAAAmU,GAAA,MAAA+jD,EAAAl4D,MAAA,UAAAA,MAASk4D,EAAAuB,oBAAmB,GACvFz5D,MAAA,OAAGA,MAAA,8BAA4DA,QAC/DA,MAAA,kBAEJA,4CAHOA,MAAA,GAAAA,YAAA,2CAC4BA,MAAA,GAAAA,MAAA,OAAAk4D,EAAAluD,eAAA0vD,sCAMrC15D,MAAA,mBAGEA,MADA,iBACAA,CADuB,gEAKvBA,MADF,YACEA,CADgF,eACpBA,MAAA,mBAAAA,MAAAqU,GAAA,MAAA6jD,EAAAl4D,MAAA,UAAAA,MAASk4D,EAAAyB,UAAS,GAC5E35D,MAAA,8BAEJA,iBAFIA,MAAA,GAAAA,MAAA,IAAAA,MAAA,4EATNA,MAAA,GAOEA,MANA,EAAA45D,GAAA,cAMA55D,CADC,EAAA65D,GAAA,+CADE75D,cAAA,OAAAk4D,EAAA/T,WAAA+T,EAAA9zC,gBAAA3N,OAAA,GAEgCzW,cAAA,OAAAk4D,EAAA/T,WAAA+T,EAAA9zC,gBAAA3N,OAAA,iCAlBnCzW,MAFJ,YAEIA,CAFmD,YAEnDA,CADgC,aACLA,MAAA,8BAAoCA,QAC/DA,MAAA,aAA0BA,MAAA,4DAA6DA,QACvFA,MAAA,GAAA85D,GAAA,yCAQF95D,QACAA,MAAA,GAAA+5D,GAAA,uBAaF/5D,gCAxB+BA,MAAA,GAAAA,MAAA,GAAAA,MAAA,sBACDA,MAAA,GAAAA,YAAA,KAAAA,MAAA,IAAAA,MAAA,IAAAk4D,EAAAjwC,iBAAA,WACXjoB,MAAA,GAAAA,MAAA,OAAAk4D,EAAAlvD,WAAAkvD,EAAAxtD,SAAAC,MAAA3K,MAAA,MAAAk4D,EAAA8B,4BASFh6D,MAAA,GAAAA,MAAA,OAAAk4D,EAAAlvD,WAAAkvD,EAAAxtD,SAAAC,OAAA,IAAAutD,EAAA+B,0DA/BnBj6D,MAAA,mKAYEA,MADA,oCAAAA,MAAAqrB,GAAA,MAAA6sC,EAAAl4D,QAAA,OAAAA,MAA0Bk4D,EAAAgC,0BAAyB,EACnDl6D,CADoD,iCAAAm6D,EAAAn6D,MAAAqrB,GAAA+uC,OAAAlC,EAAAl4D,QAAA,OAAAA,MACnCk4D,EAAAmC,eAAAF,GAA8B,GAM/Cn6D,MAJA,EAAAs6D,GAAA,uBAIAt6D,CAJsC,EAAAu6D,GAAA,iBA+BxCv6D,6CAnCEA,MAPA,UAAAA,MAAA,KAAAk4D,EAAAsC,iBAAAx6D,MAAA,KAAAk4D,EAAA9+B,oBAAA8+B,EAAAh9C,sBAAAC,IAOAnb,CAPgG,QAAAA,MAAA,KAAAk4D,EAAAuC,gBAOhGz6D,CAN0C,WAAAk4D,EAAAv0C,eAAAu/B,KAM1CljD,CALgC,WAAAA,MAAA,KAAAk4D,EAAAwC,iBAKhC16D,CAJoC,aAAAA,MAAA,KAAAk4D,EAAAyC,aAIpC36D,CAHkC,sBAAAk4D,EAAA+B,YAGlCj6D,CAFmC,0BAAAA,MAAA,KAAAk4D,EAAA0C,0BAEnC56D,CAD4D,uBAAAA,MAAA,0CAK7CA,MAAA,GAAAA,MAAA,QAAAm6D,GAIkBn6D,cAAA,OAAAm6D,gCAqCjCn6D,MAAA,6CAMEA,MAHA,kBAAAk4D,EAAA5U,eAAA/xC,KAAAgyC,gBAGAvjD,CAHuD,YAAAk4D,EAAA5U,eAAA/xC,KAAAvQ,UAGvDhB,CAF2C,WAAAk4D,EAAA5U,eAAA/xC,KAAAhR,SAE3CP,CADyC,aAAAk4D,EAAA5U,eAAA/xC,KAAAiyC,yDAb7CxjD,MAAA,8CAKEA,MAAA,mBAAAA,MAAAwU,GAAA,MAAA0jD,EAAAl4D,QAAA,OAAAA,MAASk4D,EAAAvU,sBAAAl+C,MAA2B,GAAK,GACzCzF,MAAA,sBAAAwF,GAAAxF,MAAAwU,GAAA,MAAA0jD,EAAAl4D,qBAAAk4D,EAAA5U,eAAAzxB,KAAArsB,KAAA0yD,EAAA5U,eAAAzxB,KAAArsB,GAAAxF,MAAAwF,EAAA,GAEAxF,MAAA,EAAA66D,GAAA,wBASF76D,iCAbEA,MADA,QAAAA,MAAA,uBACAA,CAD6C,UAAAk4D,EAAAjzD,aAAA0gD,MAG7C3lD,MAAA,OAAAk4D,EAAA5U,eAAAzxB,MAGG7xB,MAAA,GAAAA,MAAA,OAAAk4D,EAAA5U,eAAA/xC,OAAA2mD,EAAA5U,eAAA/xC,KAAAvQ,WAAAk3D,EAAA5U,eAAA/xC,KAAAhR,wDAUHP,MAAA,8CAOEA,MAAA,mBAAAA,MAAAoV,GAAA,MAAA8iD,EAAAl4D,MAAA,UAAAA,MAASk4D,EAAA4C,kBAAAr1D,OAAwB,GAI/BzF,MADF,WACEA,CADkE,OAC/DA,MAAA,8BAA8EA,QACjFA,MAAA,UAAuBA,MAAA,8BACzBA,UAEEA,MADF,WACEA,CADW,6EAGTA,MAAA,sBAAAA,MAAAoV,GAAA,MAAA8iD,EAAAl4D,MAAA,UAAAA,MAAYk4D,EAAA4C,kBAAAr1D,OAAwB,GAKrCzF,QACDA,MAAA,6EACEA,MAAA,sBAAAA,MAAAoV,GAAA,MAAA2lD,EAAA/6D,QAAAivB,KAAAipC,EAAAl4D,QAAA,OAAAA,MAAYk4D,EAAA4C,kBAAAr1D,KAAAs1D,EAAAzL,aAAoD,GAOtEtvD,8DAvBEA,MALA,OAAA+6D,EAAAlpC,KAKA7xB,CAL8B,kBAK9BA,CAJqB,QAAAA,MAAA,KAAAg7D,EAAA1xD,OAIrBtJ,CAHkE,UAAAk4D,EAAAjzD,aAAAk8B,OAGlEnhC,CAF+B,0BAK1BA,MAAA,GAAAA,YAAA,KAAAg7D,EAAAC,wBACoBj7D,MAAA,GAAAA,YAAA,KAAAg7D,EAAAE,yBAIrBl7D,MAAA,GAGAA,MAHA,QAAAk4D,EAAA7tD,YAAAE,wBAGAvK,CAH6C,OAAAA,MAAA,MAAAg7D,EAAAG,aAG7Cn7D,CADuE,OAAAA,MAAA,GAAAqe,GAAAre,MAAA,0BAOvEA,MAAA,GACAA,MADA,OAAAA,MAAA,MAAAg7D,EAAAI,gBACAp7D,CAD0E,OAAAA,MAAA,GAAAqe,GAAAre,MAAA,0DA1BlFA,MAAA,GACEA,MAAA,EAAAq7D,GAAA,sDAEGr7D,cAAA,aAAA+6D,GAAA,MAAAA,EAAAzL,YAAA,KAAAyL,EAAAzL,YAAAgM,mCCzGF,IAAMprD,GAAyB,MAAhC,MAAOA,GA8KXtO,YACS25D,EACCthD,EACAmd,EACAokC,EACAC,EACAC,GALD75D,KAAA05D,aACC15D,KAAAoY,SACApY,KAAAu1B,oBACAv1B,KAAA25D,WACA35D,KAAA45D,gBACA55D,KAAA65D,oBAjLV75D,KAAA85D,MAAsBC,KAEb/5D,KAAA8hB,eAAiBA,KACjB9hB,KAAAwI,YAAcA,KACdxI,KAAA+S,WAAaA,KACb/S,KAAA6S,aAAeA,KACf7S,KAAA6I,SAAWA,KACX7I,KAAAoD,aAAeA,KACfpD,KAAAmI,eAAiBA,KAKjBnI,KAAAg6D,sBAAwB,IAOxBh6D,KAAAoK,WAAaA,IACbpK,KAAAi6D,gBAAkBA,MAClBj6D,KAAAqZ,sBAAwBA,KAYjCrZ,KAAAuiB,gBAAqE,GAGrEviB,KAAA6U,UAA6B,GAwB7B7U,KAAAk6D,qBAAsB,EAGtBl6D,KAAA03D,kCAAmC,EAGnC13D,KAAAiiB,sBAA4DhiB,MAAG,IAS/DD,KAAAkiB,aAAc,EAGdliB,KAAAka,SAAW,GAMXla,KAAAmiB,wCAAoFliB,MAAG,IAGvFD,KAAA0rD,kBAAoB,IAAI51B,IAA0C,CAChE9F,MAAM,IAIRhwB,KAAAm6D,kBAAmB,EAGnBn6D,KAAAu3B,iBAA2D,IAAIzB,IAC7Dzc,KAAsBC,KAIxBtZ,KAAAo4D,aAAc,EAGdp4D,KAAAi5D,kBAAoD,IAAI91D,MAOxDnD,KAAAo6D,MAA4B,IAAIj3D,MAGhCnD,KAAAq6D,WAAiC,IAAIl3D,MAGrCnD,KAAAs6D,cAA2D,IAAIn3D,MAG/DnD,KAAAu6D,qBAA6C,IAAIp3D,MAGjDnD,KAAAw6D,sBAAqF,IAAIr3D,MAgBzFnD,KAAA+hB,eAAgB,EAGhB/hB,KAAAy6D,gBAAoC,IAAI3kC,KAAgB,GACxD91B,KAAAm4D,0BAA8C,IAAIriC,KAAgB,GAKlE91B,KAAA06D,YAAwC,IAAI5kC,KAAyB,GACrE91B,KAAA8hD,sBAA+C,IAAI3+C,MAEnDnD,KAAAyhD,eAAiC,CAC/BzxB,MAAM,EACNtgB,KAAM,MAGR1P,KAAA26D,mBAAqB,IAAI5kC,IAAsB,GAIvC/1B,KAAA46D,sBAAkD,IAAI9kC,KAAyB,GAC/E91B,KAAA66D,wBAA4F,IAAI9kC,IAEtG,GACM/1B,KAAA86D,iBAA4C,IAAI/kC,IAAwB,GACxE/1B,KAAA+6D,mBAAiC,IAAIhlC,IAAc,GACnD/1B,KAAAgiD,kBAAwF,IAAIjsB,IAElG,GACM/1B,KAAAioB,aAA6B,IAAIxd,KAUvCzK,KAAK24D,eAAiB34D,KAAK46D,sBAAsBx6D,QAC/C+iB,KAAW63C,GACFA,KAAO/6D,MAAG+6D,GAAM56D,QAAKsvB,KAAM,OAAI,EAAIzvB,MAAG+6D,KAIjDh7D,KAAKi7D,uBAAyBj7D,KAAKy6D,gBAAgBr6D,QACjDsY,QAAoB,EACpBwiD,MAAUl7D,KAAKg6D,wBAGjBh6D,KAAK64D,gBAAkB74D,KAAKy6D,gBAAgBr6D,QAAKK,KAAK06D,IAAaA,IAEnEn7D,KAAKo7D,MAAQp7D,KAAK+6D,mBAAmB36D,QAAKc,SAE1ClB,KAAKomB,kBAAiB87B,OAAuBliD,KAAKgiD,kBAAmBhiD,KAAK86D,iBAC5E,CAEA56D,WACEF,KAAKq7D,mBAAoB,EACzBr7D,KAAK26D,mBAAmBvyC,KAAKpoB,KAAKq7D,mBAClCr7D,KAAKs7D,2BAELt7D,KAAKk2B,YAAcl2B,KAAKw3B,aAAap3B,QAAKK,KAAI,EAAGmR,gBAAiBA,IAElE5R,KAAK84D,YAAc94D,KAAK65D,kBAAkBv2D,cAAc,UAAUlD,QAAKK,KAAK8C,IAAcA,IAE1FvD,KAAK+4D,yBAA2B/4D,KAAKo4D,eACjCj4D,KAAc,CACZH,KAAKw3B,aAAap3B,QAAKK,KAAKw3B,GAA8C,IAApCA,GAAO3iB,UAAUimD,QAAQ3mD,SAC/D5U,KAAKomB,iBACJhmB,QAAKK,KAAI,EAAE+6D,EAAgBC,KAAcD,GAAuC,MAArBC,GAAUprD,UAAe,EACvFpQ,OAAG,GAEP,MAAM+hB,EAAmBhiB,KAAK66D,wBAAwBz6D,QACpDsY,KACE,CAACiqB,EAAMva,IAASua,EAAKliC,IAAK1B,GAAUA,EAAMkN,IAAIpJ,SAAWulB,EAAK3nB,IAAK1B,GAAUA,EAAMkN,IAAIpJ,SAI3F7C,KAAKioB,aAAatd,OAChBxK,KAAc,CAACH,KAAK26D,mBAAoB34C,IACrC5hB,QACCK,KAAI,EAAE6hD,EAAY//B,KACT,CAAC+/B,EAAY//B,EAAgB+/B,MAGvCv3C,UAAU,EAAEif,EAAW0xC,MACtB17D,KAAKsiD,WAAat4B,EAClBhqB,KAAKw6D,sBAAsB52D,KAAK83D,GAChC17D,KAAK27D,yBAAyBD,GAAsBzvD,IACpDjM,KAAKy3D,cAAY,GAGzB,CAEA/gD,YAAYC,GACNA,EAAQ4L,iBACVviB,KAAK66D,wBAAwBzyC,KAAKzR,EAAQ4L,gBAAmB1L,cAE3DF,EAAQxP,UACVnH,KAAK86D,iBAAiB1yC,KAAKzR,EAAQxP,SAAY0P,aAEnD,CAKA,YAAW+kD,GACT,OAAO57D,KAAKy6D,eACd,CAEAoB,iBAAiBxrD,EAAgBlJ,EAAoBoL,GACnDvS,KAAKgiD,kBAAkB55B,KAAK,IAAK/X,EAAQlJ,WAAUoL,cACrD,CAEA8kD,iBAAiB/U,EAAoBwZ,GACnC97D,KAAK26D,mBAAmBvyC,KAAKk6B,GACzBtiD,KAAK+7D,iBAAmBD,GAC1B97D,KAAK45D,cAAcoC,kBAAkBh8D,KAAK+7D,gBAE9C,CASA/rC,KAAKtgB,EAAU4yC,EAAqBtiD,KAAKq7D,mBACvCr7D,KAAK26D,mBAAmBvyC,KAAKk6B,GAC7BtiD,KAAK+6D,mBAAmB3yC,KAAK1Y,GAC7B1P,KAAKioB,aAAe,IAAIxd,KACxBzK,KAAKy6D,gBAAgBryC,MAAK,GAC1B,MAAM6zC,KAA6BC,KAAUC,OAAQ,UAAU/7D,QAAK+iC,KAAa,MACjFnjC,KAAKo8D,8BAA8BH,GACnCj8D,KAAKq8D,mBAAmBJ,GACxBj8D,KAAKs8D,QAAQtsC,MAAO,CACtB,CAEA8nC,UACM93D,KAAKmH,WAAa0B,KAASyrC,QAA8B,IAArBt0C,KAAKo4D,aAC3Cp4D,KAAK+hB,eAAgB,EACrB/hB,KAAK46D,sBAAsBxyC,MAAK,IAEhCpoB,KAAKw3D,cAET,CAEAA,eACEx3D,KAAK26D,mBAAmBvyC,KAAKpoB,KAAKq7D,mBAClCr7D,KAAKy3D,eAELz3D,KAAKy6D,gBAAgBryC,MAAK,GAC1BpoB,KAAKu1B,kBAAkB8B,gBAEvBr3B,KAAKs8D,QAAQtsC,MAAO,CACtB,CAEAusC,aACEv8D,KAAK06D,YAAYtyC,MAAK,EACxB,CAEAo0C,cACEx8D,KAAK06D,YAAYtyC,MAAK,EACxB,CAEAq0C,OAAOC,GACL18D,KAAKw3D,eACLx3D,KAAKq6D,WAAWz2D,KAAK84D,EACvB,CAEAt1D,cACEpH,KAAKyhD,kBAAiBwB,OAAyBjjD,KAAKw3B,aAAcx3B,KAAK26D,mBACzE,CAEAlD,eACEz3D,KAAK+hB,eAAgB,EACrB/hB,KAAK46D,sBAAsBxyC,MAAK,EAClC,CAEAowC,eAAemE,GACT38D,KAAKsiD,YAActiD,KAAKuiB,gBAAgB3N,OAAS,IAAM+nD,EACzD38D,KAAK83D,UAEL93D,KAAKq3D,iBAAiBr3D,KAAKsiD,WAAa,GAAG,EAE/C,CAEA+V,0BACEr4D,KAAKu6D,qBAAqB32D,MAC5B,CAEA4H,cACExL,KAAK48D,UACL58D,KAAK05D,WAAa,KAClB15D,KAAKsW,QAAU,KACftW,KAAKs5D,YAAc,IACrB,CAEQgC,2BACNt7D,KAAKioB,aAAatd,OAChBxK,KAAc,CAACH,KAAK66D,wBAAyB76D,KAAK26D,mBAAoB36D,KAAKkqB,kBAAkBnf,UAC3F,EAAEwX,EAAiB+/B,EAAYua,MAKzB78D,KAAK44D,eAJL54D,KAAKmH,WAAa0B,KAASyrC,OAAU/xB,EAAgB3N,OAE9CioD,EACLva,EAAa//B,EAAgB3N,OAAS,EAClB,qBACb5U,KAAKo4D,YACQ,yCAEA,oCAGF,mBAVA,cAUA,GAKhC,CAEQuD,yBAAyBmB,GAC/B98D,KAAK+8D,aAAe/8D,KAAKoY,OAAOhY,QAAK48D,MAA0BF,IAC/D98D,KAAKi9D,sBAAwBj9D,KAAKoY,OAAOhY,QAAK88D,SAE9Cl9D,KAAKioB,aAAatd,OAChBxK,KAAc,CAACH,KAAK+8D,aAAc/8D,KAAKi9D,wBACpC78D,QACCK,KAAI,EAAE08D,EAAaC,MACjB,MAAMC,EAAwBD,EAAqBn4C,KAAMq4C,GAC/BA,EAAYrxD,GAAGO,SAASswD,MACrBQ,EAAYC,gBAClBD,EAAY94C,QAI7Bg5C,EAA0BL,EAAYl4C,KAAMw4C,GAChDA,EAAUlqB,SAAStuB,KAAMyvB,GAAYA,EAAQzoC,KAAO6wD,IAGtD,OAAOO,GAAyBG,KAGnCzyD,UAAW2yD,GAA0B19D,KAAKm4D,0BAA0B/vC,KAAKs1C,IAEhF,CAGQtB,8BAA8BH,GAGpC,MAAM0B,EAAS,IAAIn2C,IACnBxnB,KAAKioB,aAAatd,OAChBizD,KACE59D,KAAKi7D,uBAAuB76D,QAAKC,KAAOG,UACxCy7D,EAAQ77D,QAAKy9D,MAAM,IACnBF,EAAOv9D,QAAK0K,KAAKgzD,KAEhB19D,QAAKsvB,KAAMquC,MACXhzD,UAAU,KACT,GAAI/K,KAAK05D,YAAYjrD,cAAe,CAClC,MAAMu8B,EAAUhrC,KAAK05D,WAAWjrD,cAAc6qB,cAAc,+BAC5D,GAAI0R,GAAWhrC,KAAKg+D,uBAAyBh+D,KAAKg+D,sBAAsBvvD,cAAe,CACrF,MAAMwvD,EAAOjzB,EAAQlO,wBACrB,IAGE98B,KAAK25D,SAASuE,SAASl+D,KAAKg+D,sBAAsBvvD,cAAe,SAAU,GADzDwvD,EAAKE,OAASC,GAAsBH,EAAKE,OAASC,GAAsBH,EAAKE,YAE3E,IAAhBF,EAAKE,QACPR,EAAOv1C,MAAK,EAEhB,OACE,CAEJ,CACF,IAGR,CAEQi0C,mBAAmBJ,GACzB,MAAMoC,EAAkCpC,EAAQ77D,QAC9CK,KAAKiX,IAAWA,EAAMwtB,QAASo5B,aAAa,EAC5Cj+D,KAAQ08B,GAAUA,GAAS,MAAG,EAC9B8gC,MAAM,IAGR79D,KAAKioB,aAAatd,IAChB0zD,EAAWtzD,UAAWhM,IACpBiB,KAAK06D,YAAYtyC,KAAKrpB,EAAK,GAGjC,CAEQ69D,UACN58D,KAAKioB,gBAAexc,MAAYzL,KAAKioB,aACvC,CAEA2vC,oBACE53D,KAAKs6D,cAAc12D,KAAK,CAAE26D,gBAAiBv+D,KAAKuiB,gBAAgBviB,KAAKsiD,YAAYr2C,IACnF,CAAC5K,SAAArB,KAAA,mBAAAsB,iBA5bU+M,IAAyBlQ,mBAAAqF,MAAArF,gCAAA2G,OAAA3G,MAAA2G,OAAA,EAAAzD,SAAArB,KAAA,UAAAw+D,EAAAh9D,IAAA,MAAzB6M,GAAyB5M,UAAA,4BAAAmN,UAAA,SAAA7M,EAAAC,MAAA,EAAAD,29JDxEtC5D,MAAA,sCAMEA,MADA,6BAAAwF,GAAAxF,aAAAqb,GAAArb,MAAqB6D,EAAAo4D,MAAAx2D,KAAAD,GAAkB,EACvCxF,CADwC,gCAAAA,aAAAqb,GAAArb,MAClB6D,EAAA81D,UAAS,GAG/B35D,MAAA,KACEA,MAAA,sCACAA,MAAA,uCAOEA,MAAA,wBAAAA,aAAAqb,GAAArb,MAAc6D,EAAAu6D,aAAY,GAE1Bp+D,MAAA,8FAWEA,MAAA,sBAAAA,aAAAqb,GAAArb,MAAY6D,EAAAw1D,eAAc,GAG9Br5D,kBAGFA,MAAA,MAIQA,MAHN,aAGMA,CAH+D,aAG/DA,CAF+C,gBAE/CA,CADsE,iBAGpEA,MAAA,GAAAsgE,GAAA,wBAqBEtgE,MADF,YACEA,CADwC,UAEtCA,MAAA,IAEJA,UAEAA,MAAA,iBAEJA,UACAA,MAAA,iCACEA,MAAA,6BAOEA,MADA,mBAAAA,aAAAqb,GAAArb,MAAS6D,EAAAw6D,cAAa,EACtBr+D,CADuB,gBAAAwF,GAAAxF,aAAAqb,GAAArb,MACf6D,EAAAy6D,OAAA94D,GAAc,GAI9BxF,sBAGFA,MAAA,OAsBEA,MArBA,GAAAugE,GAAA,gCAqBAvgE,CAHC,GAAAwgE,GAAA,8CAoEDxgE,MAlBA,GAAAygE,GAAA,oBAkBAzgE,CAXC,GAAA0gE,GAAA,iDA8CL1gE,sBA1MEA,MALA,cAAA6D,EAAAqkB,YAKAloB,CAL2B,iBAAA6D,EAAA88D,eAK3B3gE,CAJiC,oBAAAA,MAAA,KAAA6D,EAAA04D,aAIjCv8D,CAHgD,mBAAA6D,EAAAu1B,kBAQ5Cp5B,MAAA,GAKAA,MALA,uBAAA4gE,EAAA5gE,MAAA,KAAA6D,EAAAg9D,eAAA,KAAAD,EAAAE,SAAAj9D,EAAA83D,MAAAoF,YAAAD,MAKA9gE,CAL0E,eAK1EA,CAJkB,sBAIlBA,CAH0B,0BAG1BA,CAF8B,iCAE9BA,CADoC,6CAMlCA,MAAA,GAIAA,MAJA,QAAA6D,EAAAwG,YAAAi3B,oBAIAthC,CAJyC,WAAAA,MAAA,KAAA6D,EAAA62D,iBAIzC16D,CAFoC,OAAAA,MAAA,oCAEpCA,CADuD,OAAAA,MAAA,GAAAud,GAAA1Z,EAAAmG,eAAA2rB,WAAA9xB,EAAA6Q,aAAAuU,gEAkBpCjpB,MAAA,IAAAA,MAAA,OAAA6D,EAAAugB,gBAAA3N,OAAA,GAAA5S,EAAAsgD,YAAA,GAqBRnkD,MAAA,GAAAA,MAAA,4BAAA6D,EAAAsgD,WAAA,IAQ0DnkD,MAAA,GAAAA,MAAA,OAAAA,MAAA,MAAA6D,EAAA04D,cAEjEv8D,MAAA,GAIAA,MAJA,kBAAA6D,EAAAm9D,gBAIAhhE,CAJmC,eAAA6D,EAAAg9D,aAInC7gE,CAH6B,sBAAA6D,EAAAk4D,oBAG7B/7D,CAF2C,cAAA6D,EAAA88D,eAE3C3gE,CAD8B,mBAAA6D,EAAAm4D,kBAYnCh8D,MAAA,GAAAA,MAAA,OAAA6D,EAAAmF,WAAAnF,EAAA6G,SAAAyrC,QAAA,IAAAtyC,EAAAo2D,aAsBAj6D,cAAA,SAAAA,MAAA,MAAA6D,EAAAkoB,kBA8CA/rB,MAAA,GAAAA,MAAA,OAAA6D,EAAAmF,WAAAnF,EAAA6G,SAAAyrC,OAiBYn2C,cAAA,OAAAA,MAAA,MAAA6D,EAAA0pD,o4DCtGNr9C,EAAyB,4SCzDhClQ,MAAA,GAMEA,MAAA,iDAEEA,QACAA,MADA,OAAAoE,EAAA6H,WAAAg1D,SACAjhE,CAD4B,wEAM9BA,MAAA,6CA7BRA,MAAA,iEAMEA,MAAA,uBAAAA,MAAAqb,GAAA,MAAAjX,EAAApE,QAAA,OAAAA,MAAaoE,EAAA88D,mBAAAz7D,OAAyB,GAIpCzF,MADF,UACEA,CADkC,cAEhCA,MAAA,GACFA,QAEAA,MAAA,WACEA,MAAA,EAAAmhE,EAAA,yDAaAnhE,MAAA,GAAAohE,EAAA,yBAAAphE,OAIJA,UAEAA,MAAA,MACFA,4CA/BEA,MADA,oBAAAA,MAAA,IAAAoE,EAAA04D,wBACA98D,CADiE,4BAAAA,MAAA,KAAAA,MAAA,KAAAoE,EAAAk4D,yDAWdt8D,MAAA,GAAAA,MAAA,SAAAoE,EAAAi9D,cAE5CrhE,QAEYA,MAFZ,cAAAA,MAAA,KAAAoE,EAAAg1B,mBAAAp5B,MAAA,MAAAoE,EAAAg1B,oBAAAh1B,EAAA8W,sBAAAC,IAEYnb,CAAA,WAAAshE,ICgCd,IAAMtf,EAAgB,MAAvB,MAAOA,EAwBX,QACInwB,CAAK0vC,GACP,MAAM1vC,KAAO2vC,MAAsBD,GAE/B1/D,KAAK4/D,aAAe5vC,IAGxBhwB,KAAK4/D,WAAa5vC,EAElBhwB,KAAK6/D,WAAWj8D,KAAK5D,KAAK4/D,YAEtB5/D,KAAK4/D,WACP5/D,KAAK8/D,cAEL9/D,KAAKw3D,cAAa,GAEtB,CAEA,QAAIxnC,GACF,OAAOhwB,KAAK4/D,UACd,CAyBA7/D,YACS25D,EACCqG,EACkBC,EAClBzqC,GAHDv1B,KAAA05D,aACC15D,KAAA+/D,SACkB//D,KAAAggE,WAClBhgE,KAAAu1B,oBArEDv1B,KAAAg6D,sBAAwB,IACxBh6D,KAAAigE,aAAYhwC,OACZjwB,KAAAqZ,sBAAwBA,IACxBrZ,KAAAoK,WAAaA,IACbpK,KAAAi6D,gBAAkBA,KAEjBj6D,KAAA6/D,WAAa,IAAI18D,MAS3BnD,KAAAw/D,cAAe,EA+Bfx/D,KAAAkgE,kBAAwC,IAAI/8D,MAM5CnD,KAAAq/D,mBAAyC,IAAIl8D,MAE7CnD,KAAAy6D,gBAAoC,IAAI3kC,KAAgB,GAShD91B,KAAA4/D,YAAa,EAQnB5/D,KAAKmgE,WAAa,WAAWngE,KAAKigE,kBAClCjgE,KAAKi7D,uBAAyBj7D,KAAKy6D,gBAAgBr6D,QACjDsY,QAAoB,EACpBwiD,MAAUl7D,KAAKg6D,uBAEnB,CAEA,YAAI4B,GACF,OAAO57D,KAAKy6D,eACd,CAEAjvD,cACExL,KAAK48D,WAAO,EACZwD,MAAYpgE,KAAKggE,SAASK,KAAM,gBAChCrgE,KAAK05D,WAAa,IACpB,CAEAlC,aAAa3J,GACX7tD,KAAKy6D,gBAAgBryC,MAAK,GAC1BpoB,KAAKu1B,kBAAkB8B,gBACvBr3B,KAAK48D,WAAO,EACZwD,MAAYpgE,KAAKggE,SAASK,KAAM,gBAC5BxS,GAEF7tD,KAAKkgE,kBAAkBt8D,MAE3B,CAMQk8D,cACN9/D,KAAKy6D,gBAAgBryC,MAAK,GAC1BpoB,KAAKsgE,qBACLtgE,KAAKu1B,kBAAkB8B,gBACvBr3B,KAAKugE,aAAa,MAAM,IAAI,EAC5BC,MAASxgE,KAAKggE,SAASK,KAAM,eAC/B,CAEQC,qBACNtgE,KAAK+/D,OAAOU,kBAAkB,KAC5B,MAAMC,EAAYhpD,GACT1X,KAAK+/D,OAAOY,IAAI,KACrB3gE,KAAKugE,aAAa7oD,EAAK,GAG3B1X,KAAKggE,SAASY,iBAAiB,QAASF,GAAU,GAClD1gE,KAAKggE,SAASY,iBAAiB,UAAWF,GAC1C1gE,KAAK6gE,oBAAsB,KACzB7gE,KAAKggE,SAASc,oBAAoB,QAASJ,GAAU,GACrD1gE,KAAKggE,SAASc,oBAAoB,UAAWJ,EAAQ,CACvD,EAEJ,CAEQH,aAAa7oD,EAA0BqpD,GAAa,GAC1D,MAAMljC,EAAK79B,KAAK05D,YAAYjrD,cAC5B,GAAMovB,KAAQA,EAAGiG,SAASpsB,GAAOwtB,SAAW67B,GAAa,CACvDrpD,GAAO2Q,kBAGP,MAAM24C,EAA+BzqD,MAAM20B,KAAMrN,EAAe6F,iBAD1C,6EAEnBrjC,OAAQgkB,IAAMA,cAAa48C,aAC3B5gE,OAAO6gE,MAEuB,IAA7BF,EAAkBpsD,QACpBrG,WAAW,IAAOyyD,EAAkB,GAAmBtyD,QAAS,EAEpE,CACF,CAEQkuD,UACN58D,KAAKmhE,sBACP,CAEQA,uBACFnhE,KAAK6gE,sBACP7gE,KAAK6gE,sBACL7gE,KAAK6gE,yBAAsBxxD,EAE/B,CAAChO,SAAArB,KAAA,mBAAAsB,iBA5JU6+C,GAAgBhiD,gCAwEjBijE,MAAQjjE,aAAA,EAAAkD,SAAArB,KAAA,UAAAiqB,EAAAzoB,IAAA,MAxEP2+C,EAAgB1+C,UAAA,kBAAAC,OAAA,CAAA2kB,YAAA,cAAAy4C,eAAA,iBAAAU,aAAA,eAAAjoC,iBAAA,mBAAAvH,KAAA,QAAAtsB,QAAA,CAAAm8D,WAAA,aAAAK,kBAAA,oBAAAb,mBAAA,sBAAAvlD,mBAAAvb,EAAAoD,MAAA,EAAAC,KAAA,EAAAC,OAAA,seAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,aDlD7B5D,MAAA,EAAAkjE,EAAA,sCAEGljE,MAAA,OAAAA,MAAA,IAAA6D,EAAAi5D,6oBCgDU9a,CAAgB,0KCnBtB,IAAMmhB,EAAkB,MAAzB,MAAOA,EAWXvhE,YAAoB6lB,GAAA5lB,KAAA4lB,UAHZ5lB,KAAAwK,cAA8B,IAAIC,IAGK,CAE/CvK,WACEF,KAAK4lB,QAAQtN,KAAKtY,KAAKuY,YAEvBvY,KAAKwK,cAAcG,IACjB3K,KAAKuhE,WACFnhE,QAAKC,KAAQS,MAAsB2X,MAAU3X,KAC7CiK,UAAWjK,GAAsBd,KAAK4lB,QAAQ7M,iBAAiBjY,KAEpEd,KAAKwK,cAAcG,IACjB3K,KAAK4lB,QACF9M,mBACA1Y,QACCC,KAAO,OAAMoY,MAAUzY,KAAKwhE,QAAK,EACjCC,MAASzoD,GAAkBhZ,KAAKwhE,KAAK9hE,KAAMgiE,GAAQA,EAAI1oD,QAAUA,KAAM,EACvE3Y,KAAQqhE,MAA2BjpD,MAAUipD,KAE9C32D,UAAW22D,GAA2BA,EAAIhzD,SAEjD,CAEAizD,qBACE3hE,KAAKwK,cAAcG,IAAI3K,KAAKwhE,KAAK7qD,QAAQ5L,UAAU,IAAM/K,KAAK4hE,aAC9D5hE,KAAK4hE,UACP,CAEAp2D,cACExL,KAAK4lB,QAAQjN,QACb3Y,KAAKwK,iBAAgBiB,MAAYzL,KAAKwK,eACtCxK,KAAK6hE,yBAAwBp2D,MAAYzL,KAAK6hE,sBAChD,CAEQD,YACNn2D,QAAYzL,KAAK6hE,uBACjB7hE,KAAK6hE,sBAAwB,IAAIp3D,KACjCzK,KAAK8hE,yBAAsBlE,QAAS59D,KAAKwhE,KAAK/gE,IAAK0lB,GAAMA,EAAEoB,YAC3DvnB,KAAK+hE,4BAAyBnE,QAAS59D,KAAKwhE,KAAK/gE,IAAK0lB,GAAMA,EAAEsB,WAChE,CAEQq6C,sBAAsBpT,GAC5B1uD,KAAK6hE,sBAAsBl3D,IACzB+jD,EAAY3jD,UAAWi3D,GAAmChiE,KAAK4lB,QAAQ7M,iBAAiBipD,EAAYhpD,QAExG,CAEQ+oD,yBAAyBt6C,GAC/B,MAAMw6C,EAAoBjiE,KAAK4lB,QAC5B9M,mBACA1Y,QAAKqhE,MAASzoD,GAAUhZ,KAAKwhE,KAAKU,UAAUxmC,UAAWvV,GAAMA,EAAEnN,QAAUA,IAAU,IACtFhZ,KAAK6hE,sBAAsBl3D,IACzB8c,EACGrnB,QACCq2B,KAAewrC,IAAiB,EAChCxhE,KAAI,EAAE0hE,EAAQC,KArFAC,EAACF,EAAsBC,KAC7C,MAAME,EAoF0EtiE,KAAKwhE,KAAK5sD,OApF/D,EAC3B,OAAQutD,GACN,KAAKz7C,IAAaC,SAChB,OAAyB,IAAlBy7C,EAAsBA,EAAgB,EAAIE,EACnD,KAAK57C,IAAaE,KAChB,OAAOw7C,IAAkBE,EAAYF,EAAgB,EAAI,EAC3D,KAAK17C,IAAaI,KAChB,OAAOw7C,EACT,QACE,OAAO,EACX,EA0EyCD,CAAgBF,EAAQC,KAAgC,EACzF3hE,KAAK8hE,GAAgBviE,KAAKwhE,KAAKU,UAAUK,GAAKvpD,QAE/CjO,UAAWiO,GAAkBhZ,KAAK4lB,QAAQ7M,iBAAiBC,IAElE,CAAC3X,SAAArB,KAAA,mBAAAsB,iBAtEUggE,GAAkBnjE,MAAAqF,KAAA,EAAAnC,SAAArB,KAAA,UAAAsN,EAAA9L,IAAA,MAAlB8/D,EAAkB7/D,UAAA,qBAAAu+C,eAAA,SAAAj+C,EAAAC,EAAAi+C,MAAA,EAAAl+C,WAMZslB,IAAiB,sHARvB,CAAClP,OAAgB2B,mBAAAzb,EAAAsD,MAAA,EAAAC,KAAA,EAAAC,OAAA,mFAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,YC7B9B5D,MAAA,WACEA,MAAA,GACFA,yxBD6BamjE,CAAkB,sNE9B7BnjE,MAAA,yBAEEA,MAAA,SACEA,MAAA,GACFA,kCAgBAA,MAAA,UAEAA,MAAA,WACEA,MAAA,+DAYFA,8BATIA,MAAA,GAOAA,MAPA,QAAAoE,EAAAiG,YAAA0iB,qBAOA/sB,CAP0C,OAAAA,MAAA,IAAAoE,EAAAigE,kBAO1CrkE,CAN2C,OAAAA,MAAA,GAAAyU,EAAArQ,EAAA4F,eAAAgL,aAAA5Q,EAAAsQ,aAAAC,OAM3C3U,CAL4E,OAAAoE,EAAA0Q,WAAAC,YAK5E/U,CAJ+B,OAAAA,MAAA,KAAAoE,EAAAkgE,eAI/BtkE,CAH8B,kBAG9BA,CAFqB,kBAErBA,CADqB,qBCnBtB,IAAM0G,EAAmC,MAA1C,MAAOA,EAyBX9E,YAAoB0V,GAAAzV,KAAAyV,kBAxBXzV,KAAAmI,eAAiBA,KACjBnI,KAAAwI,YAAcA,KACdxI,KAAA6S,aAAeA,KACf7S,KAAAiT,WAAaA,KAMbjT,KAAA0iE,cAAe,EAEf1iE,KAAA2iE,aAAe,4BAEf3iE,KAAAwiE,iBAAmB,iBAO5BxiE,KAAAyZ,SAA8B,IAAItW,KAIqB,CAEvDjD,WACEF,KAAKyiE,iBAAgBtiE,KAAc,CACjCH,KAAKyV,gBAAgBmtD,QACrB5iE,KAAKyV,gBAAgBY,UAAUrW,KAAK2iE,gBACnCviE,QACDK,KAAKoiE,MACIC,MAAgBD,EAAO,GAAI7iE,KAAKyV,gBAAgBstD,UAAWF,EAAO,KAG/E,CAACxhE,SAAArB,KAAA,mBAAAsB,iBApCUuD,GAAmC1G,MAAAqF,MAAA,EAAAnC,SAAArB,KAAA,UAAA0Q,EAAAlP,IAAA,MAAnCqD,EAAmCpD,UAAA,wCAAAC,OAAA,CAAAshE,aAAA,eAAA5gD,cAAA,gBAAAsgD,aAAA,eAAAC,aAAA,eAAAH,iBAAA,oBAAA9+D,QAAA,CAAA+V,SAAA,YAAAK,mBAAAvb,EAAAoD,MAAA,EAAAC,KAAA,GAAAC,OAAA,mfAAAC,SAAA,SAAAC,EAAAC,GAAA,KAAAD,EAAA,0BDdhD5D,MAAA,WAEEA,MADA,EAAA8kE,EAAA,qBACA9kE,CADwE,EAAA+kE,EAAA,yBAAA/kE,OAQtEA,MADF,UACEA,CADqC,mBAQnCA,MAAA,oBAAAwF,GAAAxF,aAAAqb,GAAArb,MAAY6D,EAAAyX,SAAA7V,KAAAD,GAAqB,GAErCxF,UAEAA,MAAA,EAAAglE,EAAA,uBAkBFhlE,iCArCiBA,cAAA,mBAAA6D,EAAAghE,aAAAhhE,EAAAghE,aAAAI,GAWXjlE,MAAA,GAGAA,MAHA,QAAA6D,EAAAwG,YAAAG,0BAGAxK,CAH+C,OAAA6D,EAAAogB,cAG/CjkB,CAFsB,OAAAA,MAAA,EAAAyU,EAAA5Q,EAAAmG,eAAAC,YAAApG,EAAA6Q,aAAAC,OAEtB3U,CAD2E,OAAA6D,EAAAiR,WAAAC,aAM/E/U,oBAAA,IAAA6D,EAAA0gE,cAAA1gE,EAAAygE,eAAA,iCCNW59D,CAAmC,8ECNzC,IAAMw+D,EAAS,MAAhB,MAAOA,EACX1mC,UAAU2mC,EAAYC,EAAsB,GAC1C,OAAID,GAASA,aAAiBE,IACrBF,EAAMljE,QAAKsvB,KAAM6zC,IAEnBD,CACT,CAACjiE,SAAArB,KAAA,mBAAAsB,iBANU+hE,EAAS,EAAAhiE,SAAArB,KAAA,WAAA6Z,EAAA0iC,IAAA,sBAAT8mB,EAAS7mB,MAAA,WAAT6mB,CAAS,mMCRtBllE,MAAA,4HAaEA,MAAA,wMAmBEA,MAAA,yBAAAA,MAAAqb,GAAA,MAAAjX,EAAApE,QAAA,OAAAA,MAAeoE,EAAAkhE,kBAAiB,GAGpCtlE,kCAxBEA,MATA,cASAA,CATkB,oBAAAoE,EAAAq4B,KAAAz8B,MAAA,8CAAAoE,EAAAq4B,KAAAz8B,MAAA,oCASlBA,CAFC,OAAAA,MAAA,KAAAoE,EAAA6U,MAAAlC,UAAA+I,SAAA,gBAED9f,CADiE,QAAAA,MAAA,KAAAoE,EAAAmhE,QAI/DvlE,MAAA,GAmBAA,MAnBA,YAAAA,MAAA,GAAAE,EAAAF,MAAA,KAAAoE,EAAA6U,MAAAlC,UAAA+I,UAAA,IAAA9f,MAAA,KAAAoE,EAAA6U,MAAAlC,UAAA+I,SAAA,uBAAA1b,EAAAsS,UAAAtS,EAAA6U,MAAAlC,UAAAC,cAAA,KAAA5S,EAAAsS,UAAAtS,EAAA6U,MAAAlC,UAAAC,cAAAC,SAAA7S,EAAA6U,MAAAlC,UAAAC,aAAA,MAAA5S,EAAAsS,UAAAtS,EAAA6U,MAAAlC,UAAAC,cAAA,KAAA5S,EAAAsS,UAAAtS,EAAA6U,MAAAlC,UAAAC,cAAAhU,MAmBAhD,CAbE,UAAAA,MAAA,GAAAE,EAAAF,MAAA,KAAAoE,EAAA6U,MAAA/B,QAAA4I,UAAA,IAAA9f,MAAA,KAAAoE,EAAA6U,MAAA/B,QAAA4I,SAAA,uBAAA1b,EAAAsS,UAAAtS,EAAA6U,MAAA/B,QAAAF,cAAA,KAAA5S,EAAAsS,UAAAtS,EAAA6U,MAAA/B,QAAAF,cAAAC,SAAA7S,EAAA6U,MAAA/B,QAAAF,aAAA,MAAA5S,EAAAsS,UAAAtS,EAAA6U,MAAA/B,QAAAF,cAAA,KAAA5S,EAAAsS,UAAAtS,EAAA6U,MAAA/B,QAAAF,cAAAhU,MAaFhD,CAPE,QAAAA,MAAA,MAAAoE,EAAA6mB,OAOFjrB,CAN8B,cAAAoE,EAAAshB,YAM9B1lB,CAL2B,WAAAoE,EAAA6U,MAAA+H,mBAK3BhhB,CAJqC,WAAAA,MAAA,MAAAA,MAAA,MAAAoE,EAAA6U,MAAAkI,WAIrCnhB,CAHiD,QAAAoE,EAAA6U,MAAAiI,MAGjDlhB,CAFqB,gBAAAA,MAAA,MAAAoE,EAAA6U,MAAAwL,aCnBlB,IAAM3d,EAAsB,MAA7B,MAAOA,EALblF,cAMWC,KAAAoD,aAAeA,KACfpD,KAAA2pB,UAAYA,KAErB3pB,KAAAyD,WAAY,EAeHzD,KAAA46B,KAAkB,KAG3B56B,KAAA2jE,eAAgB,EAMhBzjE,WACEF,KAAKopB,SAAQxF,MAAS5jB,KAAKoX,OAC3BpX,KAAK6jB,eAAcA,MAAY7jB,KAAKoX,OACpCpX,KAAK0jE,MAAQ1jE,KAAK4jE,cAAc5jE,KAAKoX,MACvC,CAEAqsD,kBACEzjE,KAAKyD,WAAY,CACnB,CAEAmgE,cAAcxsD,GACZ,OAAOA,EAAM+hB,YAAe/hB,EAAMwL,UAAU,GAAkCuW,UAChF,CAAC93B,SAAArB,KAAA,mBAAAsB,iBAxCU2D,EAAsB,EAAA5D,SAAArB,KAAA,UAAA6jE,EAAAriE,IAAA,MAAtByD,EAAsBxD,UAAA,yBAAAC,OAAA,CAAA0V,MAAA,QAAAvC,UAAA,YAAA+lB,KAAA,OAAA+oC,cAAA,iBAAAhiE,MAAA,EAAAC,KAAA,GAAAC,OAAA,qTAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDZnC5D,MAAA,EAAA2lE,EAAA,4BAqCA3lE,MAAA,6CAEEA,MAAA,sBAAAwF,GAAA,OAAA3B,EAAAyB,UAAAE,CAAA,GAIAxF,MAAA,8BAQFA,eAlDGA,MAAA,OAAA6D,EAAAoV,OAqCDjZ,QAGAA,MAHA,OAAA6D,EAAAyB,UAGAtF,CAHkB,QAAAA,MAAA,qCAGlBA,CAD2D,UAAA6D,EAAAoB,aAAA0gD,MAIzD3lD,MAAA,GAIAA,MAJA,QAAA6D,EAAAoV,MAIAjZ,CAJe,YAAA6D,EAAA6S,UAIf1W,CAHuB,YAAA6D,EAAA44B,KAGvBz8B,CAFkB,gBAAA6D,EAAA2hE,4DClCT1+D,CAAsB,oKCenC,MAAM8+D,EAAcA,CAClB3rD,EACAjR,EACA4c,IAEOA,EAAYtjB,IAAK8R,KACtBpL,WACAoL,aACAyxD,oBAAkBC,SAChB7qC,MAAShhB,EAAOhY,QAAKstD,MAA6Bn7C,EAAYpL,SAK9D+8D,EAAaA,CAAC/8D,EAAoBvH,EAAakK,MACnDmC,GAAI,aAAa9E,EAASkqD,cAAczxD,IAAMukE,cAC9CnU,WAAY,uBAAuBpwD,IACnCkK,UAGIs6D,EAAqBA,CAACj9D,EAAoBk9D,MAE5CprC,MAAOirC,EAAW/8D,EAAUk9D,EAAUh7D,KAAkBu9C,SAyB/C0d,EAAuBrsC,KACzBA,EAAM3iB,SAASimD,QAAQ77D,KAAMwjB,GAAMA,EAAE/b,WAAa0B,KAASC,MAGzDy7D,EAAiBA,CAC5BnsD,EACAjR,EACA8D,EACAs3C,KAEA,OAAQp7C,GACN,KAAK0B,KAASsY,cACd,KAAKtY,KAASkD,QACd,KAAKlD,KAASyY,MACd,KAAKzY,KAASupC,IACd,KAAKvpC,KAAS0Y,IAAK,CACjB,MAAMijD,EAAYr9D,IAAa0B,KAASkD,QAAU,UAAS04D,MAAet9D,GAC1E,MAAO,CACL48D,EACE3rD,EACAjR,EACA8D,EAAOxK,IAAK6gC,GAAMA,EAAEr1B,KAEtBm4D,EAAmBj9D,EAAU,cAAgBq9D,GAEjD,CACA,KAAK37D,KAASC,KAKZ,MAAO,CAJuCy5C,EAAQ//B,OAAO,CAACiB,EAAKlT,IAC1DkT,EAAIsqC,OAjDa2W,EAC9B7oC,EACA8oC,IAEO,CACL,CACEx9D,SAAU0B,KAASC,KACnByJ,WAAYspB,EACZmoC,iBAAkBW,EACd3tD,OAAO2N,KAAKggD,GAAqBlkE,IAAK0kB,KACpCA,aACAC,QAASu/C,EAAoBx/C,GAAY+J,UAAY,GACrDrT,WAAY8oD,EAAoBx/C,GAAYtJ,WAC5C+oD,WAAYD,EAAoBx/C,GAAYukB,iBAAiBl9B,SAASq4D,IAAoBC,QAAS,EACnG/wD,SAAU4wD,EAAoBx/C,GAAYtJ,WAAa,EAAI,KAE7D,KAiCgB6oD,CAAiBn0D,EAAOtE,MAAImtB,MAAShhB,EAAOhY,QAAK2kE,MAAwBx0D,EAAOtE,QACjG,IAEem4D,EAAmBj9D,EAAU,qBAEjD,KAAK0B,KAASuY,OACd,KAAKvY,KAASmY,KACd,KAAKnY,KAASsX,KAAM,CAClB,MAAMqkD,EAAYr9D,IAAa0B,KAASsX,KAAO,WAAUskD,MAAet9D,GACxE,MAAO,CACL48D,EACE3rD,EACAjR,EACAo7C,EAAQ9hD,IAAK6gC,GAAMA,EAAEr1B,KAEvBm4D,EAAmBj9D,EAAU,cAAgBq9D,GAEjD,CACA,KAAK37D,KAASyrC,MACZ,MAAO,CACLyvB,EAAY3rD,EAAQjR,EAAU,CAAC69D,KAAkBC,UACjDb,EAAmBj9D,EAAU,yBAGjC,QACE,MAAO,CAAC,QAAIkI,GAChB,EAGW4zC,EAA2BA,CACtCzrB,EACAypB,KAEA,MAAMp2C,EAAU2sB,EAAap3B,QAAKK,KAAK0iD,GAASA,EAAKl4C,SAErD,MAAO,CACL+kB,MAAM,EACNtgB,KAAM,CACJvQ,UAAW0L,EAAQzK,QAAKK,KAAKwK,GAAWA,EAAO,KAC/CvM,SAAUmM,EAAQzK,QAAKK,KAAKwK,GAAYA,EAAO2J,OAAS,EAAI3J,EAAO,QAAKoE,IACxEsyC,WAAYnqB,EAAap3B,QAAKK,KAAKykE,GAAMA,EAAErwD,YAC3C6sC,gBAAiBT,EAAY7gD,QAC3BK,KAAK6hD,GAA+B,IAAfA,EAAmB14B,KAAeu7C,SAAWv7C,KAAew7C,0IC1IrFjnE,MAAA,cAAyFA,MAAA,mBAAAA,MAAAqb,GAAA,MAAAjX,EAAApE,MAAA,UAAAA,MAASoE,EAAAqlC,YAAW,GAC3GzpC,MAAA,GACFA,iCADEA,cAAA,IAAAoE,EAAA8iE,SAAA,+BAPNlnE,MAAA,GAGMA,MAFJ,8BAEIA,CAF2G,QAE3GA,CADG,UACsBA,MAAA,GAC3BA,UACAA,MAAA,8BACAA,MAAA,EAAAmnE,EAAA,gBAGFnnE,+CAR4CA,QAAyCA,MAAzC,aAAAonE,EAAAthB,cAAA,KAAAshB,EAAAthB,cAAAC,SAAyC/lD,CAAD,WAAAoE,EAAAijE,cAEvDrnE,MAAA,GAAAA,MAAAonE,EAAAh2C,aAEtBpxB,cAAA,YAAAA,MAAA,IAAAonE,EAAAvhB,WAAA,QAAA7lD,OACIA,MAAA,GAAAA,MAAA,OAAAoE,EAAA8iE,WCQN,IAAMv/D,EAAkC,MAAzC,MAAOA,EAaX/F,YAAoBiD,GAAAhD,KAAAgD,kBAVXhD,KAAAwlE,aAA4Bv9B,KAAY2G,YAIjD5uC,KAAAyD,WAAY,EAIHzD,KAAAoD,aAAeA,IAE+B,CAEvDlD,WACEF,KAAKokD,aAAepkD,KAAKgD,gBAAgBK,YAAwBrD,KAAK+9B,YACxE,CAEA6J,YACE5nC,KAAKyD,WAAY,CACnB,CAEAP,aACElD,KAAKyD,WAAY,CACnB,CAACpC,SAAArB,KAAA,mBAAAsB,iBAzBUwE,GAAkC3H,MAAAqF,MAAA,EAAAnC,SAAArB,KAAA,UAAA6jE,EAAAriE,IAAA,MAAlCsE,EAAkCrE,UAAA,sCAAAC,OAAA,CAAAq8B,YAAA,cAAAynC,aAAA,eAAAH,SAAA,YAAA1jE,MAAA,EAAAC,KAAA,EAAAC,OAAA,yRAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDd/C5D,MAAA,EAAAsnE,EAAA,uCAYAtnE,MAAA,oCAAsDA,MAAA,+BAAc6D,EAAAkB,YAAY,GAAE/E,eAZnEA,MAAA,OAAAA,MAAA,IAAA6D,EAAAoiD,eAYejmD,MAAA,GAAAA,MAAA,YAAA6D,EAAAyB,wDCEjBqC,CAAkC","names":["i0","policy_r2","_c0","rebookPolicy_r1","_c1","cancellationPolicy_r3","ctx_r4","inbound$","inboundBrandName$","showHighlightedContent$","policy_r4","inbound","value","OfferPolicyComponent_ng_template_4_p_13_Template","outbound","label","outbound$","outboundBrandName$","typeClass_r6","isOneWay$","mapRebookPolicy","fareFamily","translatedBenefitRows","find","row","key","mapCancellationPolicy","OfferPolicyComponent","constructor","this","of","ngOnInit","combineLatest","pipe","filter","v","fareFamilies$","Boolean","map","fareFamilies","fareFamilyBrandName","isOneWay","rebookAndCancellationPolicies$","startWith","rebook","code","cancel","finShare","name","brandName","static","__ngFactoryType__","core","VBU","selectors","inputs","decls","vars","consts","template","rf","ctx","OfferPolicyComponent_section_0_Template","OfferPolicyComponent_section_2_Template","OfferPolicyComponent_ng_template_4_Template","tmp_1_0","tmp_2_0","imageData_r1","ctx_r1","aspectRatio$","SustainablityInfoModalComponent_ng_container_2_div_1_Template","article_r3","picture","subjectTaxonomyTags","join","safArticle$","SustainablityInfoModalComponent","fragmentService","mediaQueryService","closeModal","EventEmitter","ModalButtons","getFragment","isBreakpoint$","isMobile","i1","modalOpen","outputs","$event","emit","SustainablityInfoModalComponent_ng_container_2_Template","CLOSE","BookingCommonModule","$C","G2t","CommonModule","ComponentsModule","CommonBookingComponentsModule","PipesModule","GtmModule","CmsModule","UiTranslateModule","UiComponentsModule","IconsModule","ModalModule","QualtricsModule","BoundSelectionErrorMessageComponent","i2","i3","i4","BookingFlightComponent","i5","i6","i7","i8","i9","i10","i11","i12","i13","GrandTotalComponent","i14","i15","SustainabilityTripMessageComponent","i16","i17","i18","i19","i20","FlightSelectionWarningComponent","i21","i22","MultiCitySurveyComponent","i23","i24","ctx_r0","listTitle","ctx_r2","_r2","product_r4","$implicit","index_r5","index","onSelectProduct","category","viewDetails","count$","status$","ButtonState","UPDATING","title","description","image","lowestPrice","hideZeroPrices","originalPrice","price$","purchasedCount$","productCardLocalizationsPrefix","useNewProductCardLayout","SvgLibraryIcon","ARROW_RIGHT","PLUS","OK","isSpecialUpsellProduct","ButtonTheme","DARK_PRIMARY_NORDIC_BLUE","LIGHT_SECONDARY_OUTLINE","LIGHT_PRIMARY_NORDIC_BLUE","hideViewButton","Category","SEAT","maxPurchasesDone$","notAvailable$","noQuotaLeft","notEligibleWithIncompatibleSeat","focusOnProductBtn$","focusOnViewDetails$","NotificationTheme","WARNING","INFO","notificationMessage$","notificationTitle$","notificationIcon","productTag","localizationKey","icon","theme","isLaptopUp$","ProductListComponent_ng_container_0_Conditional_1_Template","ProductListComponent_ng_container_0_ng_container_3_Template","tabletShowTwoPerRow","products_r6","LoaderType","INLINE","ProductListComponent","gtmService","subscriptions","Subscription","selectProduct","add","products$","bounds$","take","subscribe","products","bounds","sendEcommerceImpressionsEvent","ecommerceEventGA4","GtmEvent","VIEW_ITEM_LIST","getGA4ProductsFromSmpProducts","purchaseFlow","ngOnDestroy","unsubscribe","sendEcommerceClickEvent","matchedProduct","product","SELECT_ITEM","gtmProducts","BAGGAGE","resolveGtmCategory","id","brand","FINNAIR","list","GtmPurchaseFlow","BOOKING","CORPORATE","includes","GtmEcommerceList","BOOKING_SMP","MMB_VIEW_PNR","position","ecommerceEvent","PRODUCT_IMPRESSIONS","GtmEcommerceMeasurement","IMPRESSIONS","gtmProductName","gtmProduct","enhancedEcommerceProductClickOrDetailView","PRODUCT_CLICK","CLICK","_angular_core__WEBPACK_IMPORTED_MODULE_9__","ProductListComponent_ng_container_0_Template","ProductListComponent_ng_template_2_Template","loader_r7","AncillarySubviewModule","_angular_core__WEBPACK_IMPORTED_MODULE_35__","BookingSummaryModule","ButtonModule","DrawerModule","FlightsModule","NotificationsModule","SubViewModule","DirectiveModule","AncillaryFlightBoundSelectorComponent","AncillarySidebarComponent","AncillarySubviewComponent","AncillaryHeaderComponent","setTimeout","headerTitle","nativeElement","focus","_angular_core__WEBPACK_IMPORTED_MODULE_1__","viewQuery","originalTotalPrice_r1","useSymbol","points_r3","totalPrice$","GrandTotalTheme","DEFAULT","RENEWED","serviceFlow$","undefined","prices$","prices","hasUnitPrices","safeMapObs","data","serviceFlow","total","totalPoints","ServiceFlow","AWARD","toAmount","totalAmountPaid","totalAmount","MMB_ANCILLARY","totalPoints$","amount","originalTotalPrice$","flight","discountReasonCode","originalTotalAmount","_angular_core__WEBPACK_IMPORTED_MODULE_4__","GrandTotalComponent_span_6_Template","GrandTotalComponent_span_8_Template","GrandTotalComponent_span_10_Template","headingClasses","titleTranslationKey","item_r2","IncludedProductsComponent_div_1_div_1_Template","contents_r4","_r5","onContinuePurchase","boundWithServices_r6","onRemoveProduct","clearPendingSeats","viewSeatmap","service_r7","showAsPending","booking","passengers","showUpsell","includeSeatActionButtons","showClearPendingSeatsButton","isCarrierConnect","includeAssignAtAirportStatus","showNonAYSeats","removeInProgress$","groupServicesByBound","isShoppingCart","_r8","fragmentId","_r9","tmp_7_0","upsellInModal$","_r10","_c2","IconPosition","RIGHT","ButtonSize","MEDIUM","ButtonMode","FILL_MOBILE","EXTERNAL_TAB","IncludedProductsComponent_fcom_tab_8_ng_container_2_div_8_fcom_button_1_Template","IncludedProductsComponent_fcom_tab_8_ng_container_2_div_8_fcom_button_2_Template","SPECIAL_NEED","_r11","IncludedProductsComponent_fcom_tab_8_ng_container_2_fin_dapi_included_service_5_Template","IncludedProductsComponent_fcom_tab_8_ng_container_2_fin_upsell_card_6_Template","IncludedProductsComponent_fcom_tab_8_ng_container_2_fin_information_modal_7_Template","IncludedProductsComponent_fcom_tab_8_ng_container_2_div_8_Template","IncludedProductsComponent_fcom_tab_8_ng_container_2_fcom_button_10_Template","isFirstService_r12","showAdditionalTitle","quantity","totalPrice","upsell","expand","expandOpen","isShortHaulFlight","displaySeatReassignMessage","enabled","showInformationModal","isShowMoreBtn","updatingService$","showModifyButtons","servicesToShow","length","locations","useCabinClass","IncludedProductsComponent_fcom_tab_8_div_1_Template","IncludedProductsComponent_fcom_tab_8_ng_container_2_Template","IncludedProductsComponent_fcom_tab_8_div_3_Template","departure","locationCode","cityName","arrival","services","showTickets","IncludedProductsComponent","languageService","TabLayoutType","TabTheme","showHeading","NEVER","removeInProgress","continuePurchase","removeProduct","upsellClicked","updateServices","headerContents$","headerContentTranslationKey","translate","content","Array","isArray","isShortHaul","ngOnChanges","changes","equals","currentValue","previousValue","showUpsellPaymentButton","Object","values","servicesForBounds","getServicesToShowForBounds","bound","cartOrOrder","getServicesForBoundWithUpsell","servicesOrder","serviceCatalog","serviceData","event","boundId","_angular_core__WEBPACK_IMPORTED_MODULE_8__","features","IncludedProductsComponent_h2_0_Template","IncludedProductsComponent_div_1_Template","IncludedProductsComponent_fcom_tab_8_Template","CLASSIC","STRETCH","TabStateService","store$","selectedTabId$","init","tabGroupId","pseudoLocal","isPresent","distinctUntilChanged","clear","dispatch","PseudoLocalActions","getSelectedTabId","setSelectedTabId","tabId","_angular_core__WEBPACK_IMPORTED_MODULE_6__","jDH","factory","ɵfac","AncillaryLoaderStatus","OFF","REASSIGNING","_r1","ctaClick","warningNotificationCtaText","warningNotificationMessage","showWarningNotification","_angular_core__WEBPACK_IMPORTED_MODULE_2__","ngContentSelectors","FlightSelectionWarningComponent_fcom_notification_5_Template","FLIGHTS_UNAVAILABLE","ctaSideBarClosed","skipText","boundOrFlight_r3","confirmedOrCheckedInSegments$","tmp_13_0","service$","benefitTranslations$","_c3","includedBenefits_r4","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_container_1_ng_container_1_Template","noAncillaryBecauseAirlineKey$","_c5","noAncillaryBecauseAirline_r5","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_container_4_fcom_notification_1_ng_container_3_span_1_Template","noAncillaryBecauseAirlineForFragment_r6","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_container_4_fcom_notification_1_ng_container_3_Template","last_r8","eligibility_r7","noAncillaryBecauseAirlineForFragment$","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_container_4_fcom_notification_1_Template","priorityBasedEligibilities_r9","_c4","service_r10","translations$","includedService_r11","_c6","displayName","tmp_18_0","seatNumber","maxBaggageWeight","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_ng_container_11_ng_container_1_div_2_div_2_Template","CHECKMARK","category$","inCart_r12","service_r13","originalPricePerItem","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_ng_container_11_ng_container_1_div_3_ng_container_3_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_ng_container_11_ng_container_1_div_3_span_10_Template","SHOPPING_CART","_c7","pricePerItem","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_ng_container_11_ng_container_1_p_1_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_ng_container_11_ng_container_1_div_2_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_ng_container_11_ng_container_1_div_3_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_ng_container_11_ng_container_1_div_4_Template","included","added","size","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_ng_container_11_ng_container_1_Template","services_r14","eligibility_r15","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_ng_container_14_fcom_notification_1_Template","_c8","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_ng_container_11_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_ng_container_14_Template","tmp_11_0","updatedServices$","noService_r16","_r17","index_r18","changeSelectedIndex","services_r19","_c9","displayAsBoundBased$","dateTime","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_container_11_ng_container_1_fcom_notification_1_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_container_11_ng_container_1_ng_template_4_Template","maxedOutForFragment$","editButton_r20","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_container_11_ng_container_1_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_container_1_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_container_4_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_9_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_container_11_Template","includedBenefits$","showService_r21","services$","AncillarySidebarComponent_ng_container_7_div_1_div_9_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_Template","availability$","showFareFamily","uniqueAirlineNames","operatingAirline","stops","duration","tails$","isBusOnlyConnections$","isTrainOnlyConnections$","priorityBasedEligibilities$","middleNotificationTranslationKey_r22","AncillarySidebarComponent_ng_container_7_ng_container_2_fcom_notification_1_Template","middleNotificationTranslationKey$","AncillarySidebarComponent_ng_container_7_div_1_Template","AncillarySidebarComponent_ng_container_7_ng_container_2_Template","toType","item_r23","translationKeys","MEAL","noSelection","notAvailable","maxedOut","paid","inCart","FinnairServiceCatalogEligibilityReason","PURCHASE_FRESH_MEAL_NOT_ELIGIBLE_EX_EXCEPT_HEL_WITHIN_24_HOURS","PURCHASE_FRESH_MEAL_NOT_ELIGIBLE_EX_HEL_WITHIN_7_HOURS","PURCHASE_PRE_ORDER_HOT_MEAL_NOT_ELIGIBLE_EX_HEL_WITHIN_16_HOURS","PURCHASE_PRE_ORDER_HOT_MEAL_NOT_ELIGIBLE_EX_EXCEPT_HEL_36_HOURS","PURCHASE_MEAL_NOT_ELIGIBLE_WHEN_ALREADY_FLOWN","PURCHASE_SPECIAL_MEAL_NOT_ELIGIBLE","WIFI","PURCHASE_WIFI_NOT_ELIGIBLE_WHEN_ALREADY_FLOWN","PURCHASE_BAGGAGE_NOT_ELIGIBLE_WHEN_ALREADY_FLOWN","CABIN_BAGGAGE","LOUNGE","PURCHASE_LOUNGE_ACCESS_NOT_ELIGIBLE_WHEN_ALREADY_FLOWN","SPORT","PET","middleNotificationTranslationKey","PURCHASE_SEAT_NOT_ELIGIBLE_WHEN_ALREADY_FLOWN","translationForBenefits","SubCategory","CHECKED_BAGGAGE","Breakpoint","ButtonPosition","isSideBarOpen","boundsOrFlights$","purchasedServices$","skipEnabled","passengersWithPetcIncompatibleSeats$","ctaButtonText","sideBarClosed","isBoundBasedCategory","boundsOrFlights","reduce","acc","cur","isBound","itinerary","isFlight","i","isFinnairNorraOrWetLease","unique","serviceMapping","s","switchMap","serviceSelectionsForCategoryAllTravelers","selections","mapValues","selection","seatSelections","all","boundOrFlight","isBoundOrFlightConfirmedOrCheckedIn","getTails","isByBusOnly","isByTrainOnly","fragmentIds","availability","busOnly","otherAirline","translations","every","e","isAllowedToUse","eligibilities","reason","includedServices$","purchasedServices","keys","filteredPurchaseServices","boundOrFlightId","purchasedService","serviceForBoundOrFlight","SPECIAL_DIET","some","selectedService","travelerId","variant","passengerNames","firstName","lastName","updatedServices","entries","forEach","servicesFromStore","service","includedServices","push","_","passengersWithPetcIncompatibleSeats","travelerIds","PET_IN_CABIN","t","subTotalPrice$","subviewName","AncillarySidebarComponent_a_4_Template","AncillarySidebarComponent_ng_container_7_Template","FULL","subTitle","SelectAction","PREVIOUS","NEXT","FIRST","LAST","keyDownToSelectAction","KeyCodes","HOME","END","keyUpToSelectAction","LEFT","TabLabelComponent","hostSelected","clicked$","Subject","actions$","onKeyDown","fireAction","keyDown","getKeyCodeFromEvent","onKeyUp","keyUp","selected$","subscription","selected","onClick","next","stopPropagation","mode","TabLabelComponent_span_5_Template","TabLabelComponent_span_6_Template","TabLabelComponent_fcom_icon_7_Template","checked","_r3","onChangeFlightBound","activeBoundIndex","CHEVRON_LEFT","i_r4","CHEVRON_RIGHT","AncillaryFlightBoundSelectorComponent_div_0_button_16_Template","AncillaryFlightBoundSelectorComponent_div_0_span_18_Template","AncillaryFlightBoundSelectorComponent_div_0_button_19_Template","tails","isBusOnlyConnections","focusOnDetails$","_r7","_r6","AncillaryFlightBoundSelectorComponent_fin_flight_card_2_fcom_button_3_Template","AncillaryFlightBoundSelectorComponent_fin_flight_card_2_fcom_button_11_Template","BoundType","SelectionPhase","selectIndex","addition","execTimes","indexToGo","_angular_core__WEBPACK_IMPORTED_MODULE_5__","showFlightCard$","AncillaryFlightBoundSelectorComponent_div_0_Template","AncillaryFlightBoundSelectorComponent_fin_flight_card_2_Template","additionalInfoKey$","AdditionalInfoComponent","AdditionalInfoComponent_div_0_Template","AncillaryPriceComponent","price","disclaimer","filteredGroupedServices","ancillary_r2","AncillarySelectionComponent_ng_container_2_div_6_li_3_span_1_Template","AncillarySelectionComponent_ng_container_2_div_6_li_3_span_4_Template","AncillarySelectionComponent_ng_container_2_div_6_li_3_span_5_Template","removeSelections","CLOSE_DELETE","LIGHT_TERTIARY_GHOST","AncillarySelectionComponent_ng_container_2_div_6_li_3_Template","AncillarySelectionComponent_ng_container_2_div_6_div_4_Template","ancillaries","showRemoveBasedOnAncillaries","AncillarySelectionComponent_ng_container_2_div_6_Template","AncillarySelectionComponent","showRemove","groupedServices","hideSelection","showRemoveButton","getFilteredGroupedServices","firstChange","ancillary","paidQuantity","isModifiable","AncillarySelectionComponent_fin_grouped_services_1_Template","AncillarySelectionComponent_ng_container_2_Template","i_r2","category_r1","MealDetailsComponent_ng_container_0_div_1_span_1_Template","meal","itemCategory","ingredients","nutrition","MealDetailsComponent_ng_container_0_div_1_Template","MealDetailsComponent_ng_container_0_div_3_Template","MealDetailsComponent_ng_container_0_div_4_Template","MealDetailsComponent_ng_container_0_div_5_Template","MealDetailsComponent","MealDetailsComponent_ng_container_0_Template","teaserTitle_r2","details_r3","cmsDetails_r5","ngIf","confirmSeatClick","SeatDetailsComponent_ng_container_2_div_13_ng_container_5_button_3_Template","FILL","seatSelectedForTraveler","SeatDetailsComponent_ng_container_2_div_13_cms_unstyled_teaser_3_Template","SeatDetailsComponent_ng_container_2_div_13_fin_content_image_4_Template","SeatDetailsComponent_ng_container_2_div_13_ng_container_5_Template","detailText","related","exitRow","hideButtons","clearSeat","selectSeat","SeatDetailsComponent_ng_container_2_ng_container_15_button_3_Template","SeatDetailsComponent_ng_container_2_span_3_Template","SeatDetailsComponent_ng_container_2_span_7_Template","SeatDetailsComponent_ng_container_2_div_9_Template","SeatDetailsComponent_ng_container_2_div_13_Template","SeatDetailsComponent_ng_container_2_ng_container_15_Template","seatTitle$","loading_r10","cmsSeatDetails$","SeatDetailsComponent","cmsDataService","seatDetailsLoadComplete","seatSelected","seatCleared","seatDetailsSubscription","seatDetails$","seatType","jsonData","url","getFragmentJson","d","teaserTitle","seatDetailsWithCMS$","zip","delay","details","forceSelection","SeatDetailsComponent_ng_template_0_Template","SeatDetailsComponent_ng_container_2_Template","ProductExpandComponent","open","uuid","CHEVRON_DOWN","LoaderTheme","operatingAirlineIdInfo_r3","isOrderIdIdentical","operatingAirlineId","SeatMapViewComponent_ng_template_2_span_5_Template","isOrder","_r4","retrySeatmap","ALERT_TRIANGLE","notification_r5","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_3_ng_container_4_ng_container_1_h4_1_Template","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_3_ng_container_4_ng_container_1_p_3_Template","fallbackNotification_r6","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_3_ng_container_4_ng_container_1_Template","notifications_r7","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_3_Conditional_8_ng_container_0_Template","operatingAirlineNotification_r8","operatingAirlineIdInfo$","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_3_ng_container_4_Template","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_3_ng_template_6_Template","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_3_Conditional_8_Template","currentFlightTail","noSeatmapNotifications$","tmp_9_0","isOperated","onBundleToggle","bundleActive$","benefitTextKey","benefitTag","scrollToSeat","selectablePassengers$","seatMapElement","seatMapWrapper","_r12","scrollTo","scrollSeatMap","seatMapContainerWidth$","scrollPosition","aircraft","_r13","openAirplaneModal","IconButtonTheme","IconButtonSize","SMALL","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_5_fcom_notification_1_Template","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_5_fcom_notification_3_Template","selectPassenger","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_5_Conditional_6_Template","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_5_Conditional_7_Template","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_5_fin_seat_map_seatchips_8_Template","enableScrollButtons","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_5_fin_seat_map_mini_map_18_Template","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_5_span_25_Template","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_5_span_26_Template","unmodifiableSeat$","unmodifiableFreeSeat$","includedSeats","bundlesEnabled","isAtStart","ARROW_LEFT","LARGE","isAtEnd","seatMapStatus$","SeatMapStatus","isFinnairWetLease","SeatMapViewComponent_ng_container_9_ng_container_1_div_1_Template","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_3_Template","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_5_Template","LOAD_ERROR","OK_NO_AVAILABILITY","SeatMapViewComponent_ng_container_9_ng_container_1_Template","tmp_3_0","loader_r14","_r15","exitRowModalOpen","seatDetails_r16","confirmExitRowSeat","aircraftModalOpen","aircraftInformationTemplate$","SeatMapViewComponent","templateService","configService","viewportScroller","sentryLogger","changeDetectorRef","canClearSeats","notEligibleWhenCheckInClosed","preSelectedPax$","changeSeats","subtotalChange","isReassigningSeats","BehaviorSubject","ReplaySubject","flight$","resolveTailName","passengers$","seatSelections$","seatMap$","seatMap","preSelectedPax","mapPassengers","passengerOptions$","withLatestFrom","and","p","getTravelerFullName","passenger","active","bundleActive","cfg","enableBookingFlowAncillaryBundles","isWetlease","seatMapEl","clientWidth","detectChanges","flightIsActive$","ancillaryLoader$","cartOrOrder$","_pax","seatMapStatus","_loaderStatus","_order","pax","_active","_seatMapStatus","loaderStatus","order","SeatMapActions","tryScrollToFirstAvailableSeat","setBenefitDetails","status","paidSeat","modifiableSeat","ticketedSeat","isOrderCreated","getOperatingAirlineId","operatingAirlineIdInfo","getServicesNotifications","operatingAirlineCode","operatingAirlineIds","airlineCode","attempt","error","flightNumber","cabinClass","snapshot","seat","querySelector","toLowerCase","getAttribute","travelers","infants","traveler","passengerTypeCode","FinnairPassengerCode","INF","originalSeatNumber","servicesForFlightAndTravelerId","seats","infant","accompanyingTravelerId","withInfant","withInfantFullName","modifiable","ticketed","trim","passengerId","isAllowedToChangeSeat","actualSeatNumber","type","getSeatPrice","seatMapEvent","ElementTypes","MODAL","ElementActions","VIEW","flightInfo","getSeatMapFlight","confirmSeatSelection","BUTTON","currentPassengers","getValue","activePaxIndex","findIndex","isLastPax","isActive","flightId","currentPaxs","toggled","direction","divWidth","scrollLeft","scrollBy","left","behavior","requestAnimationFrame","seatElement","isCenterable","seatGElement","parentElement","transform","baseVal","halfViewArea","getBoundingClientRect","width","svgWidth","seatXCoordinate","consolidate","matrix","cartOrOrderId","message","stack","substr","scrollIntoView","block","inline","preventScroll","moveFocus","el","scrollToAnchor","fragmentKey","getAircraftTranslationKey","load","hasCorporateSeatBenefit","benefits","benefit","BENEFITS","seatSelection","isPositive","otherInformation","corporateUserInformation","isEligibleForSeatBenefit","enableCorporateSeatBenefit","textKey","TagTheme","B2B","AIRCRAFT_TRANSLATION_MAP","SeatMapViewComponent_ng_template_0_Template","SeatMapViewComponent_ng_template_2_Template","SeatMapViewComponent_ng_container_8_Template","SeatMapViewComponent_ng_container_9_Template","SeatMapViewComponent_div_17_Template","SeatMapViewComponent_fcom_modal_19_Template","CUSTOM","passenger_r3","clearSelection","DARK_TERTIARY_GHOST","index_r4","handleClick","SeatPassengersComponent_ng_container_0_button_5_span_5_Template","SeatPassengersComponent_ng_container_0_button_5_span_6_Template","SeatPassengersComponent_ng_container_0_button_5_fcom_icon_button_7_Template","SINGLE_PAX","passengerForm","options_r7","activeTravelerIndex$","passengers_r8","SeatPassengersComponent_ng_container_0_button_5_Template","SeatPassengersComponent_ng_container_0_form_6_Template","options$","SeatPassengersComponent","formBuilder","selectPax","clearSeatSelection","createForm","group","activeTravelerId","FormControl","get","valueChanges","activeTraveler","getActiveTraveler","idControl","setValue","a","b","JSON","stringify","tap","_withInfantLabel","withInfantLabel","paxName","alreadyIncludedSeat","SeatPassengersComponent_ng_container_0_Template","SeatMapRendererComponent","updatePosition","updateScrollPosition","scrollPositionWatcher$","templates","cloneNode","unavailable","scrollEvents$","scrollDebounceTime","ngAfterViewInit","setWrapperWidth","activePax$","prev","curr","compareAsJson","resetSeatView","markSeatsUnavailableForPax","bringSelectedSeatTemplateOnTop","addSelectedSeatTemplateToPax","addOriginalSeatForPax","debounceTime","trackElement","GaContext","SEAT_MAP","SCROLL","classList","paxId","querySelectorAll","seatLink","originalAriaLabel","occupiedSeat","contains","setAttribute","unavailableSeatLabel","remove","appendChild","initials","getInitials","seatToSelect","ariaLabel","innerHTML","selectedSeat","removeChild","removeSeatSelection","rootSelector","node","parentNode","removeAttribute","split","handleSeatClick","preventDefault","target","closest","activePax","isAvailableForPax","seatId","isExitRow","currentSelectedSeat","isIncludedForPassenger","trackSeatSelection","handleScroll","seatMapWidth","scrollWidth","Math","round","seatInfo","getSeatInfoForTracking","svg","SeatMapMiniMapComponent","keyScrollDirection","setNewAreaPosition","viewPortWidth$","viewPortWidth","container","seatMapContainer","selectedArea","style","offsetWidth","parentWidth","parentLeft","newPosition","clientX","setSelectedAreaPosition","max","areaWidth","parentBorder","wrapper","totalBorderWidth","getTotalBorderWidth","minPosition","borderWidth","clickFront","clickBack","openModal","seatType_r4","SeatMapSeatChipsComponent_fcom_tag_button_10_ng_container_11_Template","SeatMapSeatChipsComponent_fcom_tag_button_10_ng_container_12_Template","i_r5","IconLibrary","imageData_r6","SeatMapSeatChipsComponent_ng_container_14_div_1_ng_container_1_ng_container_2_div_2_Template","article_r7","seatType_r8","article$","SeatMapSeatChipsComponent_ng_container_14_div_1_ng_container_1_ng_container_2_Template","SeatMapSeatChipsComponent_ng_container_14_div_1_ng_container_1_Template","availableSeatTypesInModal","SeatMapSeatChipsComponent_ng_container_14_div_1_Template","SeatMapSeatChipsComponent","seatIconCache","seatTypeModalOpen","availableSeatTypes$","prevPassengers","prevSeatMapData","nextPassengers","nextSeatMapData","seatMapData","hasInfant","selectedSeats","getSeatTypesFromData","seatTypeChips","statuses","getSeatType","characteristics","seatPrice","addedSeat","className","showSelectedSeatOnlyWhenLastOneOfThatTypeAndPrice","getFragmentUrl","cmsKey","getIconFromSeatMap","chip","seatTypeInfo","B","sort","parseFloat","localeCompare","minPriceByType","findMinPriceByType","Number","uniqueBy","seatTypeChip","arr","item","seatToReplace","element","aTag","from","childNodes","append","outerHTML","seatData","characteristicKey","aircraftCode","Cabin","SeatMapSeatChipsComponent_fcom_icon_button_4_Template","SeatMapSeatChipsComponent_fcom_tag_button_10_Template","SeatMapSeatChipsComponent_ng_container_14_Template","GroupedServicesComponent_fin_titled_card_0_ng_container_2_Template","cabinWeight","serviceList_r2","GroupedServicesComponent_div_1_ng_container_9_Template","GroupedServicesComponent_ng_container_2_ng_container_1_Template","cat_r4","INLINE_TEXT","GroupedServicesComponent_ng_template_3_li_1_div_1_div_3_button_1_Template","GroupedServicesComponent_ng_template_3_li_1_div_1_div_3_div_2_Template","GroupedServicesComponent_ng_template_3_li_1_div_1_div_3_button_3_Template","loading","showActionsButtons","GroupedServicesComponent_ng_template_3_li_1_div_1_fcom_icon_1_Template","GroupedServicesComponent_ng_template_3_li_1_div_1_div_2_Template","GroupedServicesComponent_ng_template_3_li_1_div_1_div_3_Template","enableUpsellMMB","last_r9","service_r8","serviceNameTemplate_r11","seatTags_r10","isMobile$","subCategory","FINNAIR_PLUS","tierLevel","GroupedServicesComponent_ng_template_3_li_1_li_3_span_2_Template","GroupedServicesComponent_ng_template_3_li_1_li_3_div_3_Template","GroupedServicesComponent_ng_template_3_li_1_li_3_Conditional_4_Template","GroupedServicesComponent_ng_template_3_li_1_li_3_Conditional_5_Template","includedInTierBenefit","parameters","isCorporate","GroupedServicesComponent_ng_template_3_li_1_div_1_Template","GroupedServicesComponent_ng_template_3_li_1_li_3_Template","first_r13","isInfant","GroupedServicesComponent_ng_template_3_li_1_Template","INFO_BLOCK","serviceInfo_r14","GroupedServicesComponent_ng_template_5_fcom_tag_0_Template","GroupedServicesComponent_ng_template_5_fcom_tag_1_Template","GroupedServicesComponent_ng_template_5_ng_container_2_Template","isNotIncludedService","serviceListing_r16","serviceInfo_r15","GroupedServicesComponent_ng_template_7_div_1_div_2_Template","GroupedServicesComponent_ng_template_7_div_1_div_3_Template","serviceInfo","SVG_LIBRARY","TRASH","serviceRemovalInProgress","GroupedServicesComponent_ng_template_7_div_2_div_1_Template","GroupedServicesComponent_ng_template_7_div_2_fcom_button_2_Template","GroupedServicesComponent_ng_template_7_ng_container_0_Template","GroupedServicesComponent_ng_template_7_div_1_Template","GroupedServicesComponent_ng_template_7_div_2_Template","pendingPayment","service_r18","baggageWeight","CABIN_WEIGHT_VARIANTS","GroupedServicesComponent","groupedService","CABIN_WEIGHT","getCabinWeight","flatMap","GroupedServicesComponent_fin_titled_card_0_Template","GroupedServicesComponent_div_1_Template","GroupedServicesComponent_ng_container_2_Template","GroupedServicesComponent_ng_template_3_Template","GroupedServicesComponent_ng_template_5_Template","GroupedServicesComponent_ng_template_7_Template","GroupedServicesComponent_ng_template_9_Template","safThankYouForJoiningUsNotification_r1","safThankYouForJoiningUsNotification$","item_r3","IncludedServiceComponent_ng_container_0_fin_inform_block_8_ul_2_Template","segment_r4","complimentaryServices","IncludedServiceComponent_ng_container_0_ul_10_ng_container_1_div_3_ng_container_1_Template","paxInfo_r7","pax_r6","showUpsellPerPax","IncludedServiceComponent_ng_container_0_ul_10_ng_container_1_div_3_Template","lastPassenger_r8","lastSegment_r9","tmp_16_0","removeProgressInfo$","IncludedServiceComponent_ng_container_0_ul_10_ng_container_1_Template","safProductInfo_r12","isModalOpened","IncludedServiceComponent_ng_container_0_div_11_fcom_modal_7_fcom_image_1_Template","safProductInfo$","IncludedServiceComponent_ng_container_0_div_11_fcom_modal_7_Template","seatButtons_r13","IncludedServiceComponent_ng_container_0_fin_inform_block_1_Template","IncludedServiceComponent_ng_container_0_fin_inform_block_7_Template","IncludedServiceComponent_ng_container_0_fin_inform_block_8_Template","IncludedServiceComponent_ng_container_0_ng_container_9_Template","IncludedServiceComponent_ng_container_0_ul_10_Template","IncludedServiceComponent_ng_container_0_div_11_Template","IncludedServiceComponent_ng_container_0_ng_container_12_Template","i_r14","hasNonAySegments$","hasPlusTierBenefit","SAF","pax_r15","associatedInfantName","IncludedServiceComponent_ng_template_2_ng_container_1_ng_container_1_Template","IncludedServiceComponent_ng_template_2_ng_container_1_ng_template_2_Template","isNewUpsell_r17","oldWithInfant_r16","IncludedServiceComponent_ng_template_2_ng_container_0_Template","IncludedServiceComponent_ng_template_2_ng_container_1_Template","_r19","IncludedServiceComponent_ng_template_4_fcom_button_1_Template","_r18","IncludedServiceComponent","gtmFlow","MANAGE_BOOKING","gaContext","serviceSubject$","serviceSegmentItems$","findServiceInAllFlights","segments","seg","isFirstChange","selectedPassengers","removeInProgressInfo","variantsWeCanSell","categories","serviceCategory","servicesForFragment","passengerServices","passengerService","allFlights","flightById","toLookup","serviceCatalogPerCategory","COVER","allServiceSegments","serviceSegmentsByFlightId","groupBy","segment","serviceBySegments","serviceSegmentsForFlight","isPassengerSelected","passengerServiceItem","passengerIncludedServices","includedInTicketType","shared","variantsToRemove","flightPassengers","isAvailableForSellServices","showedServices","getGroupedServices","getPassengerTierLevel","money","flightServices","mergeServicesForBound","updateRemovalStatus","removedServiceInfo","flightService","isRemoveInProgressForService","flightIds","f","allFlightServicesInBound","servicesGroupedByBound","isSegmentServicesIdentical","allServices","currentServices","productInfo","segmentId","IncludedServiceComponent_ng_container_0_Template","IncludedServiceComponent_ng_template_2_Template","IncludedServiceComponent_ng_template_4_Template","IncludedProductHeadingComponent_h3_0_ng_container_3_ng_container_3_Template","cityName_r1","isLast_r2","operatedByText","IncludedProductHeadingComponent_h3_0_ng_container_3_Template","IncludedProductHeadingComponent_h3_0_span_4_Template","showLocations","IncludedProductHeadingComponent","locationCodes","getCityName","IncludedProductHeadingComponent_h3_0_Template","IncludedTicketsComponent","FinnairCabinClass","IncludedTicketsComponent_ng_container_9_Template","IncludedTicketsComponent_ng_template_11_Template","ECONOMY","businessLinkText_r1","picture_r1","UpsellCardComponent_div_0_ng_container_27_fcom_button_1_Template","UpsellCardComponent_div_0_ng_container_27_fcom_icon_button_3_Template","UpsellCardComponent_div_0_fcom_image_5_Template","UpsellCardComponent_div_0_ng_container_27_Template","UpsellCardComponent_div_0_ng_template_29_Template","tmp_12_0","loading_r5","UpsellCardComponent","articleKey","boundWithServices","UpsellCardComponent_div_0_Template","UpsellCardComponent_ng_template_1_Template","specialNeed_r6","emitUpsellClick","LIGHT_PRIMARY_CTA_HEATHER","translationPrefix","showModal","InformationModalComponent_div_0_fcom_button_12_Template","modalArticle$","InformationModalComponent","article","header","main","footer","InformationModalComponent_div_0_Template","bodyClass","serviceSummary","IncludedProductItemSummaryComponent_ng_container_0_fin_included_product_item_summary_seat_1_Template","IncludedProductItemSummaryComponent_ng_container_0_fin_included_product_item_summary_other_2_Template","IncludedProductItemSummaryComponent","update","getSummaryForCategory","IncludedProductItemSummaryComponent_ng_container_0_Template","seat_r2","IncludedProductItemSummarySeatComponent_span_1_span_1_Template","flightsSeats","seat_r3","IncludedProductItemSummarySeatComponent_ng_container_2_span_1_span_3_Template","IncludedProductItemSummarySeatComponent_ng_container_2_span_1_span_4_Template","flightSeats_r4","lastFlight_r5","IncludedProductItemSummarySeatComponent_ng_container_2_span_1_Template","IncludedProductItemSummarySeatComponent","getSeatsByFlight","IncludedProductItemSummarySeatComponent_ng_container_0_Template","IncludedProductItemSummarySeatComponent_span_1_Template","IncludedProductItemSummarySeatComponent_ng_container_2_Template","item_r1","IncludedProductItemSummaryOtherComponent_span_1_span_1_span_1_Template","text","IncludedProductItemSummaryOtherComponent_span_1_span_1_Template","IncludedProductItemSummaryOtherComponent_span_1_span_2_Template","ServiceType","NON_INCLUDED","IncludedProductItemSummaryOtherComponent","summary","IncludedProductItemSummaryOtherComponent_span_1_Template","descriptionKey","tag","SeatBenefitComponent_Conditional_2_Conditional_1_Template","SeatBenefitComponent","SeatBenefitComponent_Conditional_1_Template","SeatBenefitComponent_Conditional_2_Template","SeatBundleToggleComponent","ToggleSwitchStatus","bundleToggled","emitToggle","discountPercentage","SeatBundleToggleComponent_For_3_Template","UNCHECKED","SEAT_OR_ECONOMY","POPULAR","ACTIVE","NonZeroAmountPipe","EJ8","pure","TitledCardComponent","CommonBookingAncillariesModule","ProductsModule","TabsModule","FinFormsModule","CommonProductSelectionComponent","i25","i26","i27","i28","i29","SeatPreSelectionComponent","i30","i31","i32","i33","i34","i35","i36","i37","i38","i39","i40","AncillarySeatMapComponent","i41","i42","i43","i44","i45","i46","i47","i48","i49","IncludedProductItemComponent","openSurvey","survey","alwaysRender","QualtricsSurveys","MULTI_CITY","enableSurvey$","cartState$","cartState","order$","orderData","state","cartData","checkIfSurveyShouldBeShown","enableMultiCity","tripType","getProductTripTypeFromBoundsForGA4","GA4TripType","MULTICITY","_angular_core__WEBPACK_IMPORTED_MODULE_7__","MultiCitySurveyComponent_ng_container_0_Template","TabGroupComponent","contentQueries","dirIndex","TabComponent","SubviewComponent","finishedReassigningSeats","updateSubTotal","allSeatSelections","priceAndCurrencyCode","isIncludedSeatSelection","combined","currentSeatSelection","currencyCode","String","emitFinishedReassigningSeats","flight_r2","flightSelected","travelers$","slideIndex$","flightAncillaryAvailability$","continue","translationKey_r6","GRID","seatMapPreloadingEnabled","selectionLoading$","hasSelections$","itineraryModal","selectionPhase$","locations$","preSelectClosed","seatChanged","itineraryModalClosed$","translationKey$","subtotalPriceSub$","enableBookingFlowSeatMapPreFetch","calculateSubTotalPrice","cartTotalPrice$","subTotalPrice","flights$","slideIndex","flights","currentFlight","hasSelections","setTitle","subTotalChange","isLast","trackEvent","confirmSelection","skipSeatSelection","trackElementState","getBoundDetailsModalData","elementName","cart","getSeatMapFlightInfoFromCart","flightsTrackBy","_index","_angular_core__WEBPACK_IMPORTED_MODULE_12__","tripType$","purchaseFlow$","combinedSeats","SeatPreSelectionComponent_div_15_Template","SeatPreSelectionComponent_ng_container_20_Template","SeatPreSelectionComponent_fin_itinerary_24_Template","DONE","message_r1","teaserText","localSettings","iconName","TripMessageComponent","tripMessage$","TripMessageComponent_ng_container_0_Template","notification_r2","CommonProductSelectionComponent_ng_container_4_fcom_notification_3_span_1_Template","CommonProductSelectionComponent_ng_container_4_fcom_notification_3_span_3_Template","last_r3","additionalText","iterable_r4","hasServiceSelected$","filter_r8","iterable_r6","selectedFilter$","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_div_3_div_1_fcom_tag_button_1_Template","filters","filter_r11","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_div_3_div_2_button_2_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_div_3_div_1_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_div_3_div_2_Template","clickInput","flightOrBound","globalId","_r14","media","DISCOUNT","addQuantity","removeQuantity","minNumberItems","paxLevelQuotaReached$","form","controls","maxNumberItems","displayTotalPrice$","_r16","label_r17","click","buttonText$","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_ng_container_24_fin_plus_minus_selector_4_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_ng_container_24_fcom_button_5_Template","isTabletDown$","inputType","ALERT","CONFIG","toppedQuotaKey","noQuotaLeftKey","alreadyPurchased","blockSelectionNotification","quotaLimitKey","quota_r18","count","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_ng_container_37_fcom_notification_1_Template","QuotaType","FREE","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_input_2_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_input_3_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_fin_content_image_7_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_Conditional_17_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_Conditional_21_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_div_23_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_ng_container_24_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_fcom_notification_27_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_fcom_notification_30_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_fcom_notification_33_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_fcom_notification_35_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_fcom_notification_36_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_ng_container_37_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_fin_product_expand_39_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_fin_product_expand_40_Template","last_r20","showBlockingNotification","SELECTED","quota$","TOPPED","NO","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_Template","additionalInfoBlockUrl_r22","contentUrl_r21","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_div_3_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_fcom_notification_6_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_9_Template","combinedGroupedServices","radio","selectedServices$","additionalInfoBlockUrl","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_additional_info_1_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_label_3_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_Template","serviceTabGroupId","initialTravelerIdSelected$","travelersAndServices$","CommonProductSelectionComponent_ng_container_4_fcom_notification_1_Template","CommonProductSelectionComponent_ng_container_4_fcom_notification_3_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_Template","showSportNotification$","notifications$","blockingNotifications$","notification_r23","CommonProductSelectionComponent_div_5_fcom_notification_1_span_1_Template","CommonProductSelectionComponent_div_5_fcom_notification_1_span_3_Template","last_r24","fallbackNotification_r25","CommonProductSelectionComponent_div_5_fcom_notification_1_Template","CommonProductSelectionComponent_div_5_ng_template_3_Template","contentUrl$_r26","SelectionState","LOADING","HAS_SERVICES","NO_SERVICES","notSelectedVariant","selectServiceKey","COMMON_TOASTER_ID","fb","toasterService","cdr","combinedServices$","initialSelectedTravelerId$","showConfirmationModalBeforeSelectionForPassengers$","blockSelectionNotification$","confirmModalData$","serviceQuantityMap$","paxLevelQuota$","combinedQuota","variants","modalConfirmed","FormGroup","isTabletDown","baseStream$","flightOrBound$","getAdditionalText","markForCheck","filteredTravelers$","getFilteredTravelers$","setupForm","setupTravelersAndServices","state$","servicesReady$","isNotEmpty","servicesReady","hasServices","travelersWithServices","initialTravelerId","notifications","n","blockSelection","removeMessage","flightOrBoundId","useConfirmModal","getAdditionalInfoBlock","NON_SCHENGEN_LOUNGES","confirmData","serviceSelectionsForFragment","initialSelections","removeControl","emitEvent","initialServices","concat","travelerForm","isRadioDisplay","includedServicesForTravelerAndFragment","findServiceItemsForPassengerForFragment","registerControl","control","isService","is","initialSelection","sumOfPricesForTravelersServiceSelection","selections$","model","isEmptyObjectOrHasEmptyValues","travelerSelections","sm","toBoolean","asTravelerService","selectionsToStore","selectionsPerTraveler","traveledId","selectionsForFragment","servicesForFragments","checkAndQueueToasterNotification","ServicesActions","nextHasSpecialDiet","selectionsForTraveler","currentSelection","currentHasSpecialDiet","travelerSelection","showSpecialDietSelected","showSpecialDietUnselected","addMessageToQueue","contentKey","selectionsForFragmentAndCategory$","originalQuota","combinedServices","showConfirmationModalBeforeSelectionForPassengers","finnairPassengers","selection$","getRawValue","servicesToDisplay","extendedServices","getExtendedServices","getSelectedServices","getFilters","getHasServiceSelected","alreadyPaid","travellerSelection","baseFilters","NO_VARIANTS","PreciseNumber","fromString","multiply","toString","selectionQuota$","getIsSelectedStream","getInputType","isSelected","selectionQuota","calculateQuota","getPaxLevelQuotaReached","translateMultiple","logErrors","paxLevelQuota","quota","availableQuota","_angular_core__WEBPACK_IMPORTED_MODULE_15__","CommonProductSelectionComponent_fin_loader_3_Template","CommonProductSelectionComponent_ng_container_4_Template","CommonProductSelectionComponent_div_5_Template","CommonProductSelectionComponent_ng_template_6_Template","b_r1","BookingSummaryFlightComponent_div_0_div_38_ng_container_1_Template","BookingSummaryFlightComponent_div_0_div_38_ng_container_2_Template","BookingSummaryFlightComponent_div_0_div_38_ng_container_3_Template","bookingClass","BookingSummaryFlightComponent_div_0_div_40_ng_container_1_div_5_ng_container_2_Template","BookingSummaryFlightComponent_div_0_div_40_ng_container_1_div_5_ng_container_3_Template","BookingSummaryFlightComponent_div_0_div_40_ng_container_1_div_5_Template","flights_r3","flight_r4","BookingSummaryFlightComponent_div_0_div_40_ng_container_1_Template","BookingSummaryFlightComponent_div_0_div_40_div_5_Template","BookingSummaryFlightComponent_div_0_div_13_Template","BookingSummaryFlightComponent_div_0_div_38_Template","BookingSummaryFlightComponent_div_0_div_39_Template","BookingSummaryFlightComponent_div_0_div_40_Template","bound$","icon$","BookingSummaryFlightComponent","isBusOrTrain","MINUS","AIRCRAFT_HORIZONTAL","BookingSummaryFlightComponent_div_0_Template","innerIconClass","titleClass","edit","skipEditAlign","trackingContext","C","isDisabled","editText","BookingSummarySectionComponent","padding","isChangeButton","AppConstants","isContent","innerClass","defaultClass","hostVars","hostBindings","BookingSummarySectionComponent_fcom_icon_2_Template","BookingSummarySectionComponent_h2_4_Template","BookingSummarySectionComponent_div_5_Template","BookingSummarySectionComponent_div_6_Template","t_r1","email","birthDate","phone","BookingSummaryTravelerComponent_ng_container_0_div_1_div_6_Template","BookingSummaryTravelerComponent_ng_container_0_div_1_div_7_Template","BookingSummaryTravelerComponent_ng_container_0_div_1_div_8_Template","BookingSummaryTravelerComponent_ng_container_0_div_1_div_9_Template","BookingSummaryTravelerComponent_ng_container_0_div_1_Template","BookingSummaryTravelerComponent","BookingSummaryTravelerComponent_ng_container_0_Template","traveler$","paxService_r1","BookingSummaryAncillaryComponent_div_4_span_2_Template","BookingSummaryAncillaryComponent_div_4_span_4_Template","BookingSummaryAncillaryComponent_div_4_div_6_Template","isLast_r3","isFirst_r2","ctx_r3","isGroupService","BookingSummaryAncillaryComponent","BookingSummaryAncillaryComponent_div_4_Template","BookingSummaryComponent","includePaddings","disabled","getIconForService","getIconForServiceCategory","buttonTranslationKey","additionalTitle","IncludedProductItemComponent_fin_included_product_item_summary_12_Template","IncludedProductItemComponent_div_16_Template","TabComponent_div_0_Template","messageKey_r3","AncillarySubviewComponent_ng_container_18_ng_container_3_Template","updateSlideIndex","titleKey","subtitleMessageKey$","closeSubview","closeSidebar","showFareFamilyInAncillarySidebar","boundOrFlightAncillaryAvailability$","reassignFreeSeats","ARROW_BACK","onClose","AncillarySubviewComponent_fcom_cta_button_29_span_9_ng_container_12_span_1_Template","AncillarySubviewComponent_fcom_cta_button_29_span_9_ng_container_12_span_2_Template","AncillarySubviewComponent_fcom_cta_button_29_span_9_ng_container_10_Template","AncillarySubviewComponent_fcom_cta_button_29_span_9_ng_container_12_Template","reassignFreeSeatsVisible$","hideSideBar","handleSecondaryCtaClick","showFlightCard_r7","finLet","handleCtaClick","AncillarySubviewComponent_fcom_cta_button_29_ng_container_8_Template","AncillarySubviewComponent_fcom_cta_button_29_span_9_Template","showCtaButton$","ctaButtonTitle","disableButtons$","isTabletUp$","secondaryButtonDisabled$","AncillarySubviewComponent_fcom_modal_31_fin_itinerary_2_Template","closeConfirmModal","confirmModalData_r12","confirmationModalTranslationKeys_r13","firstContentParagraph","secondContentParagraph","closeButton","continueButton","AncillarySubviewComponent_ng_container_32_fcom_modal_1_Template","confirmationModalTranslationKeys","elementRef","renderer","scrollService","mediaqueryService","STEPS","BOOKING_STEPS","ANIMATION_DURATION_MS","AirOffersStatus","onlyShowAncillaries","hideChangeButton","close","changeStep","reassignSeats","secondaryButtonClick","flightOrBoundSelected","subViewVisible$","basketOpen$","slideIndexSubject$","showCtaButtonSubject$","boundsOrFlightsSubject$","categorySubject$","customDataSubject$","show","subViewVisibleDelayed$","keepState","visible","data$","initialSlideIndex","initializeCtaButtonTitle","unpaid","hasUnpaidItems","subTotal","currentBoundOrFlight","setReassignSeatsEligible","visible$","setSubTotalPrice","scrollTop","scrollContainer","scrollToImmediate","resize$","fromEvent","window","bindCtaButtonHeightFixHandler","bindBasketHandling","subview","openBasket","closeBasket","onEdit","step","showFlightCard","cleanUp","showNewCta","currentBoundOrFlightId","unpaidSeats$","getUnpaidSeatsBySegmentId","checkInEligibilities$","getCheckInEligibilities","unpaidSeats","checkInEligibilities","hasCheckInEligibility","eligibility","checkinWindow","hasUnpaidSeatForSegment","boundItem","showReassignFreeSeats","retry$","merge","mapTo","RETRY_TIMES","WAIT_TIME_IN_MS","ctaButtonHeightFixRef","rect","setStyle","height","topPaddingToExclude","hideModal$","innerWidth","currentFlightId","_angular_core__WEBPACK_IMPORTED_MODULE_13__","AncillarySubviewComponent_ng_container_18_Template","AncillarySubviewComponent_fin_ancillary_sidebar_28_Template","AncillarySubviewComponent_fcom_cta_button_29_Template","AncillarySubviewComponent_fcom_modal_31_Template","AncillarySubviewComponent_ng_container_32_Template","subviewContext","tmp_8_0","currentStep$","phase","ANCILLARIES","unpaidServices$","EMBEDDED","shouldCloseSubview","SubviewComponent_div_0_ng_container_8_Template","SubviewComponent_div_0_ng_template_11_Template","enableScroll","mainContent_r3","_open","coerceBooleanProperty","_openState","openChange","openSubview","ngZone","document","subviewId","closeSubViewEvent","labelledBy","removeClass","body","bindEventListeners","onModalFocus","addClass","runOutsideAngular","listener","run","addEventListener","removeFocusListener","removeEventListener","forceFocus","focusableElements","HTMLElement","isVisible","cleanUpEventHandlers","DOCUMENT","SubviewComponent_div_0_Template","TabHeaderComponent","startWith$","tabs","safeMap","tab","ngAfterContentInit","initTabs","tabEventSubscriptions","subscribeToSelections","subscribeToSelectActions","selectedTab","selectedTabIndex$","toArray","action","previousIndex","selectNextIndex","lastIndex","idx","surveyButtonText","qualtricsUrl$","enableSurvey","qualtricsKey","langKey","params","getQualtricsUrl","langValue","fromFragment","BoundSelectionErrorMessageComponent_ng_container_1_Template","BoundSelectionErrorMessageComponent_ng_template_2_Template","BoundSelectionErrorMessageComponent_Conditional_6_Template","default_r3","DelayPipe","input","delayInMilliSeconds","Observable","openViewDetails","cabin","isBookingFlow","getCabinClass","_angular_core__WEBPACK_IMPORTED_MODULE_3__","BookingFlightComponent_fcom_flight_card_0_Template","getRequests","serviceSelection","serviceSelectionToUpdateRequest","getMessage","toUpperCase","getToasterMessages","errorKey","containsUnpaidSeats","getServiceData","keySuffix","capitalizeWord","mapToSeatRequest","selectionsForFlight","isExitSeat","SeatCharacteristics","EXIT","seatSelectionsForFlight","CustomServiceType","JOURNEY","c","OUTBOUND","INBOUND","linkText","SustainabilityTripMessageComponent_ng_container_0_button_7_Template","message_r3","iconCategory","SustainabilityTripMessageComponent_ng_container_0_Template"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/modules/booking/modules/common/components/offer-policy/offer-policy.component.html","./src/modules/booking/modules/common/components/offer-policy/offer-policy.component.ts","./src/modules/booking/modules/common/components/sustainability/sustainablity-info-modal/sustainablity-info-modal.component.html","./src/modules/booking/modules/common/components/sustainability/sustainablity-info-modal/sustainablity-info-modal.component.ts","./src/modules/booking/modules/common/booking-common.module.ts","./src/modules/common-booking/modules/ancillaries/components/product-list/product-list.component.html","./src/modules/common-booking/modules/ancillaries/components/product-list/product-list.component.ts","./src/modules/common-booking/modules/ancillaries/components/ancillary-subview/ancillary-subview.module.ts","./src/modules/common-booking/modules/ancillaries/components/ancillary-header/ancillary-header.component.ts","./src/modules/common-booking/modules/ancillaries/components/ancillary-header/ancillary-header.component.html","./src/modules/booking/modules/common/components/grand-total/grand-total.component.html","./src/modules/booking/modules/common/components/grand-total/grand-total.component.ts","./src/modules/common-booking/modules/ancillaries/components/included-products/included-products.component.html","./src/modules/common-booking/modules/ancillaries/components/included-products/included-products.component.ts","./src/modules/common-booking/modules/tabs/tab-state.service.ts","./src/modules/common-booking/modules/ancillaries/enums.ts","./src/modules/booking/modules/common/components/flight-selection-warning/flight-selection-warning.component.html","./src/modules/booking/modules/common/components/flight-selection-warning/flight-selection-warning.component.ts","./src/modules/common-booking/modules/ancillaries/components/ancillary-sidebar/ancillary-sidebar.component.html","./src/modules/common-booking/modules/ancillaries/components/ancillary-sidebar/ancillary-sidebar.component.ts","./src/modules/common-booking/modules/tabs/tab-label.component.html","./src/modules/common-booking/modules/tabs/tab-label.component.ts","./src/modules/common-booking/modules/ancillaries/components/flight-bound-selector/ancillary-flight-bound-selector.component.html","./src/modules/common-booking/modules/ancillaries/components/flight-bound-selector/ancillary-flight-bound-selector.component.ts","./src/modules/common-booking/modules/ancillaries/components/additional-info/additional-info.component.html","./src/modules/common-booking/modules/ancillaries/components/additional-info/additional-info.component.ts","./src/modules/common-booking/modules/ancillaries/components/ancillary-price/ancillary-price.component.ts","./src/modules/common-booking/modules/ancillaries/components/ancillary-price/ancillary-price.component.html","./src/modules/common-booking/modules/ancillaries/components/ancillary-selection/ancillary-selection.component.html","./src/modules/common-booking/modules/ancillaries/components/ancillary-selection/ancillary-selection.component.ts","./src/modules/common-booking/modules/ancillaries/components/meals/meal-details.component.html","./src/modules/common-booking/modules/ancillaries/components/meals/meal-details.component.ts","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-details/seat-details.component.html","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-details/seat-details.component.ts","./src/modules/common-booking/modules/ancillaries/components/product-expand/product-expand.component.ts","./src/modules/common-booking/modules/ancillaries/components/product-expand/product-expand.component.html","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-map-view/seat-map-view.component.html","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-map-view/seat-map-view.component.ts","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-passengers/seat-passengers.component.html","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-passengers/seat-passengers.component.ts","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-map-renderer/seat-map-renderer.component.ts","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-map-renderer/seat-map-renderer.component.html","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-map-mini-map/seat-map-mini-map.component.ts","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-map-mini-map/seat-map-mini-map.component.html","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-map-seatchips/seat-map-seatchips.component.html","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-map-seatchips/seat-map-seatchips.component.ts","./src/modules/common-booking/modules/ancillaries/components/grouped-services/grouped-services.component.html","./src/modules/common-booking/modules/ancillaries/components/grouped-services/grouped-services.component.ts","./src/modules/common-booking/modules/ancillaries/components/included-service/included-service.component.html","./src/modules/common-booking/modules/ancillaries/components/included-service/included-service.component.ts","./src/modules/common-booking/modules/ancillaries/components/included-product-heading/included-product-heading.component.html","./src/modules/common-booking/modules/ancillaries/components/included-product-heading/included-product-heading.component.ts","./src/modules/common-booking/modules/ancillaries/components/included-tickets/included-tickets.component.html","./src/modules/common-booking/modules/ancillaries/components/included-tickets/included-tickets.component.ts","./src/modules/common-booking/modules/ancillaries/components/upsell-card/upsell-card.component.html","./src/modules/common-booking/modules/ancillaries/components/upsell-card/upsell-card.component.ts","./src/modules/common-booking/modules/ancillaries/components/information-modal/information-modal.component.html","./src/modules/common-booking/modules/ancillaries/components/information-modal/information-modal.component.ts","./src/modules/common-booking/modules/ancillaries/components/included-product-item-summary/included-product-item-summary.component.html","./src/modules/common-booking/modules/ancillaries/components/included-product-item-summary/included-product-item-summary.component.ts","./src/modules/common-booking/modules/ancillaries/components/included-product-item-summary-seat/included-product-item-summary-seat.component.html","./src/modules/common-booking/modules/ancillaries/components/included-product-item-summary-seat/included-product-item-summary-seat.component.ts","./src/modules/common-booking/modules/ancillaries/components/included-product-item-summary-other/included-product-item-summary-other.component.html","./src/modules/common-booking/modules/ancillaries/components/included-product-item-summary-other/included-product-item-summary-other.component.ts","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-benefit/seat-benefit.component.html","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-benefit/seat-benefit.component.ts","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-bundle-toggle/seat-bundle-toggle.component.html","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-bundle-toggle/seat-bundle-toggle.component.ts","./src/modules/common/pipes/non-zero-amount.pipe.ts","./src/modules/ui-components/components/product-variants/titled-card.component.ts","./src/modules/ui-components/components/product-variants/titled-card.component.html","./src/modules/common-booking/modules/ancillaries/ancillaries.module.ts","./src/modules/booking/modules/common/components/multi-city-survey/multi-city-survey.component.html","./src/modules/booking/modules/common/components/multi-city-survey/multi-city-survey.component.ts","./src/modules/common-booking/modules/tabs/tab-group.component.ts","./src/modules/common-booking/modules/tabs/tab-group.component.html","./src/modules/common-booking/components/subview/subview.module.ts","./src/modules/common-booking/modules/ancillaries/components/seat-map/ancillary-seat-map/ancillary-seat-map.component.ts","./src/modules/common-booking/modules/ancillaries/components/seat-map/ancillary-seat-map/ancillary-seat-map.component.html","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-pre-selection/seat-pre-selection.component.html","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-pre-selection/seat-pre-selection.component.ts","./src/modules/common-booking/modules/tabs/tabs.module.ts","./src/modules/booking/modules/common/components/trip-message/trip-message.component.html","./src/modules/booking/modules/common/components/trip-message/trip-message.component.ts","./src/modules/common-booking/modules/ancillaries/components/common-product-selection/common-product-selection.component.html","./src/modules/common-booking/modules/ancillaries/components/common-product-selection/common-product-selection.component.ts","./src/modules/common-booking/components/booking-summary/flight/booking-summary-flight.component.html","./src/modules/common-booking/components/booking-summary/flight/booking-summary-flight.component.ts","./src/modules/common-booking/components/booking-summary/section/booking-summary-section.component.html","./src/modules/common-booking/components/booking-summary/section/booking-summary-section.component.ts","./src/modules/common-booking/components/booking-summary/traveler/booking-summary-traveler.component.html","./src/modules/common-booking/components/booking-summary/traveler/booking-summary-traveler.component.ts","./src/modules/common-booking/components/booking-summary/ancillary/booking-summary-ancillary.component.html","./src/modules/common-booking/components/booking-summary/ancillary/booking-summary-ancillary.component.ts","./src/modules/common-booking/components/booking-summary/booking-summary.module.ts","./src/modules/common-booking/modules/ancillaries/components/included-product-item/included-product-item.component.html","./src/modules/common-booking/modules/ancillaries/components/included-product-item/included-product-item.component.ts","./src/modules/common-booking/modules/tabs/tab.component.html","./src/modules/common-booking/modules/tabs/tab.component.ts","./src/modules/common-booking/modules/ancillaries/components/ancillary-subview/ancillary-subview.component.html","./src/modules/common-booking/modules/ancillaries/components/ancillary-subview/ancillary-subview.component.ts","./src/modules/common-booking/components/subview/subview.component.html","./src/modules/common-booking/components/subview/subview.component.ts","./src/modules/common-booking/modules/tabs/tab-header.component.ts","./src/modules/common-booking/modules/tabs/tab-header.component.html","./src/modules/booking/modules/common/components/bound-selection-error-message/bound-selection-error-message.component.html","./src/modules/booking/modules/common/components/bound-selection-error-message/bound-selection-error-message.component.ts","./src/modules/common/pipes/delay.pipe.ts","./src/modules/booking/modules/common/components/flight/flight.component.html","./src/modules/booking/modules/common/components/flight/flight.component.ts","./src/modules/common-booking/utils/ancillaries.utils.ts","./src/modules/booking/modules/common/components/sustainability/sustainability-trip-message/sustainability-trip-message.component.html","./src/modules/booking/modules/common/components/sustainability/sustainability-trip-message/sustainability-trip-message.component.ts"],"sourcesContent":["
\n \n
\n\n
\n \n
\n\n\n

\n {{ policy.outbound?.label }}\n

\n

\n \n {{ outbound$ | finMap: 'departure.locationCode' | async }}–{{\n outbound$ | finMap: 'arrival.locationCode' | async\n }}\n ({{ outboundBrandName$ | async }})\n \n \n {{ policy.outbound?.value }}\n \n

\n

\n \n {{ inbound$ | finMap: 'departure.locationCode' | async }}–{{\n inbound$ | finMap: 'arrival.locationCode' | async\n }}\n ({{ inboundBrandName$ | async }})\n \n \n {{ policy.inbound?.value }}\n \n

\n
\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\n\nimport { combineLatest, Observable, of } from 'rxjs';\nimport { filter, map, startWith } from 'rxjs/operators';\n\nimport { FareFamily, FinnairBoundItem, TranslatedBenefitRow } from '@fcom/dapi/api/models';\nimport { finShare } from '@fcom/rx';\nimport { FareFamilyMap } from '@fcom/common/interfaces/booking';\n\nexport const mapRebookPolicy = (fareFamily: FareFamily) =>\n fareFamily?.translatedBenefitRows.find((row) => row.key === 'rebook');\n\nexport const mapCancellationPolicy = (fareFamily: FareFamily) =>\n fareFamily?.translatedBenefitRows.find((row) => row.key === 'cancel');\n\ninterface TranslatedBenefitRowBounds {\n outbound: TranslatedBenefitRow | undefined;\n inbound?: TranslatedBenefitRow | undefined;\n}\n\n@Component({\n selector: 'fin-offer-policy',\n templateUrl: './offer-policy.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class OfferPolicyComponent implements OnInit {\n @Input()\n fareFamilies$: Observable;\n @Input()\n outbound$: Observable;\n @Input()\n inbound$: Observable;\n @Input()\n isOneWay$: Observable;\n @Input()\n showHighlightedContent$: Observable = of(false);\n\n outboundBrandName$: Observable;\n inboundBrandName$: Observable;\n\n rebookAndCancellationPolicies$: Observable<{\n rebook: TranslatedBenefitRowBounds;\n cancel: TranslatedBenefitRowBounds;\n }>;\n\n constructor() {}\n\n ngOnInit(): void {\n this.outboundBrandName$ = combineLatest([\n this.outbound$.pipe(filter((v) => !!v)),\n this.fareFamilies$.pipe(filter(Boolean)),\n ]).pipe(\n map(([outbound, fareFamilies]: [FinnairBoundItem, FareFamilyMap]) => {\n return this.fareFamilyBrandName(outbound, fareFamilies);\n }),\n filter((v) => !!v)\n );\n\n this.inboundBrandName$ = combineLatest([\n this.inbound$.pipe(filter((v) => !!v)),\n this.fareFamilies$.pipe(filter(Boolean)),\n this.isOneWay$,\n ]).pipe(\n filter(([, , isOneWay]) => !isOneWay),\n map(([inbound, fareFamilies]: [FinnairBoundItem, FareFamilyMap, boolean]) => {\n return this.fareFamilyBrandName(inbound, fareFamilies);\n }),\n filter((v) => !!v)\n );\n\n this.rebookAndCancellationPolicies$ = combineLatest([\n this.fareFamilies$.pipe(filter(Boolean)),\n this.outbound$,\n this.inbound$.pipe(startWith(null as FinnairBoundItem)),\n ]).pipe(\n map(([fareFamilies, outbound, inbound]) => ({\n rebook: {\n outbound: mapRebookPolicy(fareFamilies[outbound?.fareFamily?.code]),\n inbound: inbound ? mapRebookPolicy(fareFamilies[inbound?.fareFamily?.code]) : null,\n },\n cancel: {\n outbound: mapCancellationPolicy(fareFamilies[outbound?.fareFamily?.code]),\n inbound: inbound ? mapCancellationPolicy(fareFamilies[inbound?.fareFamily?.code]) : null,\n },\n })),\n finShare()\n );\n }\n\n private fareFamilyBrandName(outbound: FinnairBoundItem, fareFamilies: FareFamilyMap) {\n const brandName = outbound.fareFamily.name;\n const code = outbound.fareFamily.code;\n return brandName ? brandName : (fareFamilies[code] || ({} as FareFamily)).brandName;\n }\n}\n","\n \n
\n \n
\n\n \n \n
\n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\nimport { map, Observable } from 'rxjs';\n\nimport { FragmentService, MediaQueryService } from '@fcom/common/services';\nimport { CmsArticle } from '@fcom/core-api/interfaces';\nimport { ModalButtons } from '@fcom/ui-components';\nimport { AspectRatioString } from '@fcom/common/interfaces';\n\n@Component({\n selector: 'fin-sustainablity-info-modal',\n templateUrl: './sustainablity-info-modal.component.html',\n styleUrls: ['./sustainablity-info-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SustainablityInfoModalComponent implements OnInit {\n @Input() modalOpen: boolean;\n\n @Output()\n closeModal: EventEmitter = new EventEmitter();\n\n safArticle$: Observable;\n\n public readonly ModalButtons = ModalButtons;\n aspectRatio$: Observable;\n\n constructor(\n private fragmentService: FragmentService,\n private mediaQueryService: MediaQueryService\n ) {}\n\n ngOnInit(): void {\n this.safArticle$ = this.fragmentService.getFragment('fragments.safInfo.url');\n\n this.aspectRatio$ = this.mediaQueryService\n .isBreakpoint$('mobile')\n .pipe(map((isMobile) => (isMobile ? '4x3' : '21x9')));\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { IconsModule, ModalModule, UiComponentsModule } from '@fcom/ui-components';\nimport { UiTranslateModule } from '@fcom/ui-translate';\nimport { CmsModule } from '@fcom/cms';\nimport { ComponentsModule } from '@fcom/common/components';\nimport { GtmModule } from '@fcom/common/gtm/gtm.module';\nimport { PipesModule } from '@fcom/common/pipes/pipes.module';\nimport { CommonBookingComponentsModule } from '@fcom/common-booking/components';\nimport { QualtricsModule } from '@fcom/common/qualtrics/qualtrics.module';\n\nimport { BoundSelectionErrorMessageComponent } from './components/bound-selection-error-message/bound-selection-error-message.component';\nimport { FlightSelectionWarningComponent } from './components/flight-selection-warning/flight-selection-warning.component';\nimport { OfferPolicyComponent } from './components/offer-policy/offer-policy.component';\nimport { BookingFlightComponent } from './components/flight/flight.component';\nimport { GrandTotalComponent } from './components/grand-total/grand-total.component';\nimport { TripMessageComponent } from './components/trip-message/trip-message.component';\nimport { SustainabilityTripMessageComponent } from './components/sustainability/sustainability-trip-message/sustainability-trip-message.component';\nimport { SustainablityInfoModalComponent } from './components/sustainability/sustainablity-info-modal/sustainablity-info-modal.component';\nimport { MultiCitySurveyComponent } from './components/multi-city-survey/multi-city-survey.component';\n\nconst COMPONENTS = [\n BoundSelectionErrorMessageComponent,\n OfferPolicyComponent,\n BookingFlightComponent,\n GrandTotalComponent,\n TripMessageComponent,\n SustainabilityTripMessageComponent,\n SustainablityInfoModalComponent,\n FlightSelectionWarningComponent,\n MultiCitySurveyComponent,\n];\n\n@NgModule({\n imports: [\n CommonModule,\n ComponentsModule,\n CommonBookingComponentsModule,\n PipesModule,\n GtmModule,\n CmsModule,\n UiTranslateModule,\n UiComponentsModule,\n IconsModule,\n ModalModule,\n QualtricsModule,\n ],\n declarations: [...COMPONENTS],\n exports: [...COMPONENTS],\n providers: [],\n})\nexport class BookingCommonModule {}\n","\n @if (listTitle) {\n

\n {{ listTitle }}\n

\n }\n \n \n 0) &&\n (product.count$ | async) === 0\n ? ''\n : (product.count$ | async) === 0\n ? (productCardLocalizationsPrefix + 'services.' + product.category + '.state.selection.default'\n | finLocalization)\n : (product.count$ | async) === 1\n ? (productCardLocalizationsPrefix + 'services.' + product.category + '.state.selection.singular'\n | finLocalization)\n : (productCardLocalizationsPrefix + 'services.' + product.category + '.state.selection.plural'\n | finLocalization: { numberOfItems: product.count$ | async })\n \"\n [purchasedText]=\"\n (product.purchasedCount$ | async) === 0\n ? (productCardLocalizationsPrefix + 'services.' + product.category + '.state.purchased.default'\n | finLocalization)\n : (product.purchasedCount$ | async) === 1\n ? (productCardLocalizationsPrefix + 'services.' + product.category + '.state.purchased.singular'\n | finLocalization)\n : (product.purchasedCount$ | async) > 1\n ? (productCardLocalizationsPrefix + 'services.' + product.category + '.state.purchased.plural'\n | finLocalization: { numberOfItems: product.purchasedCount$ | async })\n : ''\n \"\n [viewSummaryText]=\"'services.productCards.viewSummary' | finLocalization\"\n [buttonIcon]=\"useNewProductCardLayout ? SvgLibraryIcon.ARROW_RIGHT : SvgLibraryIcon.PLUS\"\n [buttonText]=\"\n (useNewProductCardLayout && (product.count$ | async) > 0\n ? 'ancillaries.productCard.button.modify'\n : useNewProductCardLayout\n ? 'ancillaries.productCard.button.select'\n : (product.status$ | async) === ButtonState.OK\n ? 'services.' + product.category + '.state.modify.text'\n : 'services.' + product.category + '.state.select.text'\n ) | finLocalization\n \"\n [buttonAriaText]=\"\n ((product.status$ | async) === ButtonState.OK\n ? 'services.' + product.category + '.state.modify.ariaText'\n : (product.status$ | async) === ButtonState.UPDATING\n ? 'services.' + product.category + '.state.updating.ariaText'\n : 'services.' + product.category + '.state.select.ariaText'\n ) | finLocalization\n \"\n [buttonTheme]=\"\n product.isSpecialUpsellProduct\n ? ButtonTheme.DARK_PRIMARY_NORDIC_BLUE\n : (product.status$ | async) === ButtonState.OK\n ? ButtonTheme.LIGHT_SECONDARY_OUTLINE\n : ButtonTheme.LIGHT_PRIMARY_NORDIC_BLUE\n \"\n [hideViewButton]=\"product.hideViewButton\"\n [hideButton]=\"\n (product.category !== Category.SEAT && product.maxPurchasesDone$ | async) === true ||\n (product.notAvailable$ | async) === true ||\n (product.noQuotaLeft && (product.count$ | async) === 0) ||\n product.notEligibleWithIncompatibleSeat === true\n \"\n (selectProduct)=\"onSelectProduct(product.category, index)\"\n (viewDetails)=\"viewDetails.emit(product.category)\"\n [focusOnBtn$]=\"(focusOnProductBtn$ | async) === product.category | finToObservable\"\n [focusOnViewSummary$]=\"(focusOnViewDetails$ | async) === product.category | finToObservable\"\n [attr.data-testid]=\"'service-selection-' + product.category\"\n [notificationTheme]=\"\n (product.noQuotaLeft && (product.count$ | async) === 0) || product.notEligibleWithIncompatibleSeat === true\n ? NotificationTheme.WARNING\n : NotificationTheme.INFO\n \"\n [notificationText]=\"product.notificationMessage$ | async\"\n [notificationTitle]=\"product.notificationTitle$ | async\"\n [notificationIcon]=\"product.notificationIcon\"\n [productTagText]=\"product.productTag?.localizationKey | finLocalization\"\n [productTagIcon]=\"product.productTag?.icon\"\n [productTagTheme]=\"product.productTag?.theme\"\n [useNewProductCardLayout]=\"useNewProductCardLayout\"\n [countText]=\"\n useNewProductCardLayout && (product.count$ | async) > 0\n ? ('ancillaries.productCard.added' | finLocalization: { numberOfItems: product.count$ | async })\n : ''\n \"\n [isLaptopUp]=\"isLaptopUp$ | async\"\n [isSpecialUpsellProduct]=\"product.isSpecialUpsellProduct\"\n >\n \n \n
\n\n\n
\n \n
\n
\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { combineLatest, Observable, Subscription } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\nimport { ButtonTheme, NotificationTheme } from '@fcom/ui-components';\nimport {\n FINNAIR,\n GtmEcommerceClickProduct,\n GtmEcommerceImpressionProduct,\n GtmEcommerceList,\n GtmEcommerceMeasurement,\n GtmEvent,\n GtmPurchaseFlow,\n LoaderType,\n} from '@fcom/common/interfaces';\nimport { CmsImageData } from '@fcom/core-api/interfaces';\nimport { Category, FinnairBoundItem } from '@fcom/dapi/api/models';\nimport { Amount, SelectedServiceData } from '@fcom/dapi/interfaces';\nimport { unsubscribe } from '@fcom/core/utils';\nimport { GtmService } from '@fcom/common/gtm';\nimport { getGA4ProductsFromSmpProducts, resolveGtmCategory } from '@fcom/common/utils/gtm.utils';\nimport { MediaQueryService } from '@fcom/common/services';\n\nimport { ButtonState, ProductTag } from '../../interfaces';\n\nexport interface PurchasesDonePerFragment {\n [fragmentId: string]: boolean;\n}\n\nexport interface SmpProduct {\n category: Category;\n title: string;\n description: string;\n image: CmsImageData;\n status$: Observable;\n price$: Observable;\n count$: Observable;\n purchasedCount$?: Observable;\n maxNumberItems$?: Observable;\n maxPurchasesDone$?: Observable;\n notAvailable$?: Observable;\n notEligibleWithIncompatibleSeat?: boolean;\n purchasesDoneForFragment$?: Observable;\n noQuotaLeft: boolean;\n notificationMessage$: Observable;\n notificationTitle$: Observable;\n notificationIcon?: SvgLibraryIcon;\n lowestPrice?: Amount;\n originalPrice?: Amount;\n productTag?: ProductTag;\n hideViewButton: boolean;\n isSpecialUpsellProduct?: boolean;\n}\n\n@Component({\n selector: 'fin-product-list',\n styleUrls: ['product-list.component.scss'],\n templateUrl: 'product-list.component.html',\n})\nexport class ProductListComponent implements OnInit, OnDestroy {\n readonly ButtonState = ButtonState;\n readonly ButtonTheme = ButtonTheme;\n readonly LoaderType = LoaderType;\n readonly Category = Category;\n readonly NotificationTheme = NotificationTheme;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n private subscriptions: Subscription = new Subscription();\n isLaptopUp$: Observable;\n\n @Input() hideZeroPrices = false;\n @Input() products$: Observable;\n @Input() tabletShowTwoPerRow = false;\n @Input() purchaseFlow: GtmPurchaseFlow;\n @Input() focusOnViewDetails$: Observable;\n @Input() focusOnProductBtn$: Observable;\n @Input() productCardLocalizationsPrefix = '';\n @Input() bounds$: Observable;\n @Input() listTitle?: string;\n @Input() useNewProductCardLayout = false;\n\n @Output() selectProduct: EventEmitter = new EventEmitter();\n @Output() viewDetails: EventEmitter = new EventEmitter();\n\n constructor(\n private gtmService: GtmService,\n private mediaQueryService: MediaQueryService\n ) {}\n\n ngOnInit(): void {\n this.subscriptions.add(\n combineLatest([this.products$, this.bounds$])\n .pipe(take(1))\n .subscribe(([products, bounds]) => {\n this.sendEcommerceImpressionsEvent(products);\n this.gtmService.ecommerceEventGA4(\n GtmEvent.VIEW_ITEM_LIST,\n getGA4ProductsFromSmpProducts(products, this.purchaseFlow, bounds)\n );\n })\n );\n this.isLaptopUp$ = this.mediaQueryService.isBreakpoint$('laptop_up');\n }\n\n ngOnDestroy(): void {\n this.subscriptions = unsubscribe(this.subscriptions);\n }\n\n onSelectProduct(category: Category, index: number): void {\n this.selectProduct.emit({ category, index: 0 });\n this.sendEcommerceClickEvent(category, index);\n\n this.subscriptions.add(\n combineLatest([this.products$, this.bounds$])\n .pipe(take(1))\n .subscribe(([products, bounds]) => {\n const matchedProduct = products.find((product) => product.category === category);\n\n this.gtmService.ecommerceEventGA4(\n GtmEvent.SELECT_ITEM,\n getGA4ProductsFromSmpProducts([matchedProduct], this.purchaseFlow, bounds)\n );\n })\n );\n }\n\n private sendEcommerceImpressionsEvent(products: SmpProduct[]): void {\n const gtmProducts: GtmEcommerceImpressionProduct[] = products.map((product, index) => {\n const name = product.category === Category.BAGGAGE ? 'BAG' : resolveGtmCategory(product.category)[0];\n return {\n name,\n id: name,\n brand: FINNAIR,\n category: resolveGtmCategory(product.category)[1],\n list: [GtmPurchaseFlow.BOOKING, GtmPurchaseFlow.CORPORATE].includes(this.purchaseFlow)\n ? GtmEcommerceList.BOOKING_SMP\n : GtmEcommerceList.MMB_VIEW_PNR,\n position: index + 1,\n };\n });\n\n this.gtmService.ecommerceEvent(\n GtmEvent.PRODUCT_IMPRESSIONS,\n GtmEcommerceMeasurement.IMPRESSIONS,\n gtmProducts,\n this.purchaseFlow\n );\n }\n\n private sendEcommerceClickEvent(category: Category, index: number): void {\n const gtmProductName = category === Category.BAGGAGE ? 'BAG' : resolveGtmCategory(category)[0];\n const gtmProduct: GtmEcommerceClickProduct = {\n name: gtmProductName,\n id: gtmProductName,\n brand: FINNAIR,\n category: resolveGtmCategory(category)[1],\n position: index + 1,\n };\n\n this.gtmService.enhancedEcommerceProductClickOrDetailView(\n GtmEvent.PRODUCT_CLICK,\n GtmEcommerceMeasurement.CLICK,\n gtmProduct,\n [GtmPurchaseFlow.BOOKING, GtmPurchaseFlow.CORPORATE].includes(this.purchaseFlow)\n ? GtmEcommerceList.BOOKING_SMP\n : GtmEcommerceList.MMB_VIEW_PNR,\n this.purchaseFlow\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport {\n ButtonModule,\n DrawerModule,\n FlightsModule,\n IconsModule,\n ModalModule,\n NotificationsModule,\n} from '@fcom/ui-components';\nimport { UiTranslateModule } from '@fcom/ui-translate';\nimport { ComponentsModule } from '@fcom/common/components/components.module';\nimport { GtmModule } from '@fcom/common/gtm/gtm.module';\nimport { PipesModule } from '@fcom/common/pipes/pipes.module';\nimport { BookingCommonModule } from '@fcom/booking/modules/common/booking-common.module';\nimport { DirectiveModule } from '@fcom/common/directives';\nimport { CmsModule } from '@fcom/cms';\n\nimport { AncillaryHeaderComponent } from '../ancillary-header/ancillary-header.component';\nimport { AncillaryFlightBoundSelectorComponent } from '../flight-bound-selector/ancillary-flight-bound-selector.component';\nimport { AncillarySubviewComponent } from './ancillary-subview.component';\nimport { AncillarySidebarComponent } from '../ancillary-sidebar/ancillary-sidebar.component';\nimport { CommonBookingComponentsModule } from '../../../../components';\nimport { BookingSummaryModule } from '../../../../components/booking-summary/booking-summary.module';\nimport { SubViewModule } from '../../../../components/subview/subview.module';\n\n@NgModule({\n imports: [\n CommonModule,\n ComponentsModule,\n CommonBookingComponentsModule,\n PipesModule,\n GtmModule,\n BookingCommonModule,\n BookingSummaryModule,\n UiTranslateModule,\n ButtonModule,\n IconsModule,\n DrawerModule,\n FlightsModule,\n ModalModule,\n NotificationsModule,\n SubViewModule,\n DirectiveModule,\n CmsModule,\n ],\n declarations: [\n AncillaryFlightBoundSelectorComponent,\n AncillaryHeaderComponent,\n AncillarySidebarComponent,\n AncillarySubviewComponent,\n ],\n exports: [\n AncillarySubviewComponent,\n AncillaryHeaderComponent,\n AncillaryFlightBoundSelectorComponent,\n AncillarySidebarComponent,\n ],\n})\nexport class AncillarySubviewModule {}\n","import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\n\nimport { NotificationTheme } from '@fcom/ui-components';\n\n@Component({\n selector: 'fin-ancillary-header',\n templateUrl: 'ancillary-header.component.html',\n})\nexport class AncillaryHeaderComponent implements OnInit {\n readonly NotificationTheme = NotificationTheme;\n\n @Input()\n title: string;\n\n @ViewChild('headerTitle', { static: true })\n headerTitle: ElementRef;\n\n ngOnInit(): void {\n setTimeout(() => {\n this.headerTitle.nativeElement.focus();\n }, 300);\n }\n}\n","
\n

{{ title }}

\n \n
\n","\n

\n {{ 'price.grandTotal' | finLocalization }}\n \n {{\n originalTotalPrice | finPrice: { useSymbol }\n }}\n \n \n {{ ('award.points' | finLocalization: { pointsAmount: points || 0 | finPoints }) + ' + ' }}\n {{ totalPrice$ | async | finPrice: { useSymbol } }}\n \n {{ totalPrice$ | async | finPrice: { useSymbol } }}\n \n

\n\n","import { Component, Input, OnInit } from '@angular/core';\n\nimport { combineLatest, Observable, of } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\nimport { Amount } from '@fcom/dapi';\nimport { FinnairTotalPricesDetails, ServiceFlow } from '@fcom/dapi/api/models';\nimport { safeMap as safeMapObs } from '@fcom/rx';\nimport { toAmount } from '@fcom/common-booking/utils/common-booking.utils';\nimport { hasUnitPrices } from '@fcom/common/utils';\n\nexport enum GrandTotalTheme {\n DEFAULT = 'default',\n RENEWED = 'renewed',\n}\n\n@Component({\n selector: 'fin-grand-total',\n templateUrl: './grand-total.component.html',\n})\nexport class GrandTotalComponent implements OnInit {\n readonly GrandTotalTheme = GrandTotalTheme;\n @Input()\n serviceFlow$: Observable = of(undefined);\n\n @Input()\n prices$: Observable;\n\n /**\n * Theme to be shown\n */\n @Input()\n theme = GrandTotalTheme.DEFAULT;\n\n @Input()\n useSymbol = false;\n\n totalPrice$: Observable;\n totalPoints$: Observable;\n originalTotalPrice$: Observable;\n\n ngOnInit(): void {\n this.totalPrice$ = combineLatest([this.prices$, this.serviceFlow$]).pipe(\n filter(([prices]) => hasUnitPrices(prices)),\n safeMapObs(([data, serviceFlow]) => {\n const total = data.total.total;\n if (total.totalPoints) {\n if (!serviceFlow || serviceFlow === ServiceFlow.AWARD) {\n const totalAmount = total.totalAmountPaid ?? total.totalAmount;\n return toAmount(totalAmount);\n } else if (\n (serviceFlow === ServiceFlow.BOOKING || serviceFlow === ServiceFlow.MMB_ANCILLARY) &&\n total.totalAmountPaid\n ) {\n return toAmount(total.totalAmountPaid);\n }\n }\n return toAmount(total.totalAmount);\n })\n );\n\n this.totalPoints$ = this.prices$.pipe(\n filter((data) => !!data?.total?.total?.totalPoints),\n map((data) => +data.total.total.totalPoints.amount)\n );\n\n this.originalTotalPrice$ = this.prices$.pipe(\n filter((data) => !!data?.flight?.total?.discountReasonCode && !!data?.total?.total?.originalTotalAmount),\n map((data) => data.total.total.originalTotalAmount)\n );\n }\n}\n","

\n {{ titleTranslationKey | finLocalization }}\n

\n\n\n
\n

\n {{ item }}\n

\n
\n\n\n
\n \n
\n \n
\n {{ 'MMB.includedProducts.noServicesTitle' | finLocalization }}\n
\n \n
\n \n \n\n \n\n \n\n \n \n\n \n
\n\n \n \n
\n \n\n
0\">\n \n \n \n
\n \n
\n \n\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { filter, map, NEVER, Observable, of } from 'rxjs';\n\nimport { LanguageService } from '@fcom/ui-translate';\nimport { finShare } from '@fcom/rx';\nimport { ButtonMode, ButtonSize, ButtonTheme, IconPosition, TabLayoutType, TabTheme } from '@fcom/ui-components';\nimport { isShortHaulFlight, LoaderType } from '@fcom/common';\nimport { equals } from '@fcom/core/utils';\nimport { Category, FinnairBoundItem, FinnairCart, FinnairOrder, FinnairServiceItem } from '@fcom/dapi/api/models';\nimport {\n BoundWithServices,\n RemovedServiceInfo,\n RemovedServiceProgress,\n SelectedServiceData,\n UpsellCategoriesForBound,\n} from '@fcom/dapi/interfaces';\n\nimport { getServicesForBoundWithUpsell } from '../../../../utils/common-booking.utils';\nimport { SmpProduct } from '../product-list/product-list.component';\nimport { CartOrOrder } from '../../../../interfaces';\n\n@Component({\n selector: 'fin-included-products',\n templateUrl: './included-products.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IncludedProductsComponent implements OnInit, OnChanges {\n readonly ButtonMode = ButtonMode;\n readonly ButtonSize = ButtonSize;\n readonly ButtonTheme = ButtonTheme;\n readonly Category = Category;\n readonly IconPosition = IconPosition;\n readonly LoaderType = LoaderType;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n readonly TabLayoutType = TabLayoutType;\n readonly TabTheme = TabTheme;\n\n @Input() booking: FinnairCart | FinnairOrder;\n\n @Input() bound: FinnairBoundItem | undefined;\n\n @Input() showHeading = true;\n\n @Input() showTickets = false;\n\n @Input() showModifyButtons = false;\n\n @Input() showInformationModal = false;\n\n @Input() useCabinClass = false;\n\n @Input() titleTranslationKey;\n\n @Input() showAdditionalTitle = false;\n\n @Input() expandOpen = false;\n\n @Input() headerContentTranslationKey?: string;\n\n @Input() servicesToShow: FinnairServiceItem[];\n\n @Input() showAsPending = false;\n\n @Input() upsellInModal$: Observable = NEVER;\n\n @Input() headingClasses = 'font-heading-4';\n\n @Input() showUpsell = false;\n\n @Input() displaySeatReassignMessage = false;\n\n @Input() includeSeatActionButtons = false;\n\n @Input() isCarrierConnect = false;\n\n @Input() showNonAYSeats = false;\n\n @Input() includeAssignAtAirportStatus = false;\n\n @Input() showClearPendingSeatsButton = false;\n\n @Input() isShoppingCart = false;\n\n @Input() groupServicesByBound = false;\n\n @Input() products$: Observable = of([]);\n\n @Input() removeInProgress$: Observable = of({ removeInProgress: false });\n\n @Output()\n continuePurchase: EventEmitter = new EventEmitter();\n\n @Output()\n removeProduct: EventEmitter = new EventEmitter();\n\n @Output()\n upsellClicked: EventEmitter = new EventEmitter();\n\n @Output()\n viewSeatmap: EventEmitter = new EventEmitter();\n\n @Output()\n clearPendingSeats: EventEmitter = new EventEmitter();\n\n servicesForBounds: BoundWithServices[];\n\n headerContents$: Observable;\n\n isShortHaulFlight: boolean;\n\n constructor(private languageService: LanguageService) {}\n\n ngOnInit(): void {\n this.updateServices();\n\n this.headerContents$ = this.headerContentTranslationKey\n ? this.languageService.translate(this.headerContentTranslationKey).pipe(\n map((content) => (Array.isArray(content) ? content : [content])),\n filter(Boolean),\n finShare()\n )\n : NEVER;\n\n this.isShortHaulFlight = this.isShortHaul(this.booking);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n !equals(changes['showUpsell']?.currentValue, changes['showUpsell']?.previousValue) ||\n !equals(changes['showUpsellPaymentButton']?.currentValue, changes['showUpsellPaymentButton']?.previousValue) ||\n !equals(changes['servicesToShow']?.currentValue, changes['servicesToShow']?.previousValue) ||\n !equals(changes['booking']?.currentValue, changes['booking']?.previousValue)\n ) {\n this.updateServices();\n }\n }\n\n private isShortHaul(booking: FinnairCart | FinnairOrder): boolean {\n const locations = Object.values(booking.locations);\n return isShortHaulFlight(locations[0], locations[1]);\n }\n\n private updateServices(): void {\n this.servicesForBounds = this.getServicesToShowForBounds(\n this.booking,\n this.showUpsell,\n this.servicesToShow,\n this.bound ? [this.bound] : this.booking.bounds,\n this.products$\n );\n }\n\n private getServicesToShowForBounds(\n cartOrOrder: CartOrOrder,\n showUpsell: boolean,\n servicesToShow: FinnairServiceItem[],\n bounds: FinnairBoundItem[],\n products$: Observable = of([])\n ): BoundWithServices[] {\n return bounds.map((bound) => {\n return {\n ...bound,\n services: getServicesForBoundWithUpsell(\n cartOrOrder,\n showUpsell,\n servicesToShow,\n cartOrOrder.services.servicesOrder,\n bound,\n cartOrOrder.serviceCatalog,\n products$\n ),\n } as BoundWithServices;\n });\n }\n\n onSelectProduct(serviceData: SelectedServiceData): void {\n this.upsellClicked.emit(serviceData);\n }\n\n onContinuePurchase(): void {\n this.continuePurchase.emit();\n }\n\n onRemoveProduct(event: RemovedServiceInfo, boundId: string): void {\n this.removeProduct.emit({\n ...event,\n boundId: boundId,\n });\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Observable, of } from 'rxjs';\nimport { Store } from '@ngrx/store';\nimport { filter, distinctUntilChanged } from 'rxjs/operators';\n\nimport { AppState } from '@fcom/core';\nimport { pseudoLocal } from '@fcom/core/selectors';\nimport { PseudoLocalActions } from '@fcom/core/actions';\nimport { isPresent } from '@fcom/core/utils';\n\n/**\n * Note! This is service meant to be provided by TabHeaderComponent and TabGroupComponent\n * for their child components to share data. Therefore DO NOT add this to any other provider!\n */\n@Injectable()\nexport class TabStateService {\n private selectedTabId$: Observable = of(null);\n private tabGroupId: string;\n\n constructor(private store$: Store) {}\n\n init(tabGroupId: string): void {\n this.tabGroupId = tabGroupId;\n this.selectedTabId$ = this.store$.pipe(\n pseudoLocal(this.tabGroupId),\n filter((id: string) => isPresent(id)),\n distinctUntilChanged()\n );\n }\n\n clear(): void {\n this.store$.dispatch(PseudoLocalActions.destroyValue({ key: this.tabGroupId }));\n }\n\n getSelectedTabId(): Observable {\n return this.selectedTabId$;\n }\n\n setSelectedTabId(tabId: string): void {\n if (tabId) {\n this.store$.dispatch(PseudoLocalActions.setValue({ key: this.tabGroupId, data: tabId }));\n } else {\n this.clear();\n }\n }\n}\n","export enum AncillaryLoaderStatus {\n OFF = 'off',\n REASSIGNING = 'reassigning',\n}\n","
\n
\n \n
{{ title }}
\n
\n \n {{ warningNotificationCtaText }}\n {{ warningNotificationMessage }}\n \n \n
\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\n\nimport { NotificationTheme } from '@fcom/ui-components';\n\n@Component({\n selector: 'fin-flight-selection-warning',\n templateUrl: './flight-selection-warning.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FlightSelectionWarningComponent {\n readonly NotificationTheme = NotificationTheme;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n @Input() title: string;\n @Input() warningNotificationMessage: string;\n @Input() warningNotificationCtaText: string;\n @Input() showWarningNotification = true;\n\n @Output()\n ctaClick: EventEmitter = new EventEmitter();\n}\n","\n {{ skipText }}\n
\n
\n \n \n \n
\n {{ ((displayAsBoundBased$ | async) ? 'services.bound' : 'services.flight') | finLocalization }}\n {{ index + 1 }}, {{ boundOrFlight.departure.dateTime | finDateFormat: 'DATE' }}\n
\n \n {{ boundOrFlight.fareFamily.name }}\n
\n
\n \n \n \n
\n \n \n \n \n \n \n
\n

\n {{\n benefitTranslations$\n | finMap: 'title'\n | async\n | finLocalization: { amount: includedBenefits[0].quantity }\n }}\n

\n

\n {{ benefitTranslations$ | finMap: 'description' | async | finLocalization }}\n

\n
\n
\n \n \n \n \n {{ eligibility | finLocalization }}\n \n \n {{\n noAncillaryBecauseAirlineKey$\n | async\n | finLocalization: { airline: noAncillaryBecauseAirline, airlines: noAncillaryBecauseAirline }\n }}\n \n \n \n \n\n \n
\n
\n \n

\n {{ translations$ | finMap: 'title' | async | finLocalization }}\n

\n
\n\n \n \n

{{ service.value.name }}

\n
\n \n \n {{ translations$ | finMap: 'paid' | async | finLocalization }}:\n\n {{\n 'MMB.includedProducts.' + includedService.category + '.text'\n | finLocalization\n : {\n amount: includedService.quantity,\n displayName: includedService.title || includedService['displayName'] || '',\n seatNumber: includedService.seatNumber ?? '',\n weight: includedService.maxBaggageWeight,\n }\n | finEmpty: includedService.title\n }}\n
\n
\n\n
\n \n = 0,\n 'medium-type': +service.pricePerItem?.amount > 0,\n }\"\n >\n {{ inCart }}:\n {{\n 'MMB.includedProducts.' + service.category + '.text'\n | finLocalization\n : {\n amount: service.quantity,\n displayName: service.title || service['displayName'] || '',\n seatNumber: service.seatNumber,\n weight: service.maxBaggageWeight,\n }\n | finEmpty: service.title\n }}\n {{ service.originalPricePerItem | finPrice }} \n {{ service.pricePerItem | finPrice }}\n
\n \n\n
\n
\n
\n {{ translations$ | finMap: 'noSelection' | async | finLocalization }}\n
\n
\n
\n \n \n \n \n \n {{ eligibility | finLocalization }}\n \n \n
\n\n \n
\n
\n
\n {{ translations$ | finMap: 'noSelection' | async | finLocalization }}\n
\n
\n
\n
\n\n \n \n \n {{ translations$ | finMap: 'maxedOut' | async | finLocalization }}\n \n \n \n \n \n \n \n \n \n \n \n {{ middleNotificationTranslationKey | finLocalization }}\n \n \n \n \n\n \n {{ 'subtotal' | finLocalization }}: \n {{ subTotalPrice$ | async | finPrice | finEmpty: '–' }}\n \n \n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { Store } from '@ngrx/store';\nimport { combineLatest, filter, Observable, of } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\n\nimport { ButtonPosition, ButtonSize, ButtonTheme, IconPosition, NotificationTheme } from '@fcom/ui-components';\nimport { AppState } from '@fcom/core';\nimport { Amount, LocationInfoMap, ServiceCatalogSelectionsForAllTravelers } from '@fcom/dapi';\nimport { isFinnairNorraOrWetLease, mapValues, unique } from '@fcom/core/utils';\nimport {\n Category,\n FinnairBoundItem,\n FinnairItineraryItemFlight,\n FinnairPassengerItem,\n FinnairServiceCatalogEligibilityReason,\n SubCategory,\n} from '@fcom/dapi/api/models';\nimport { finShare } from '@fcom/rx';\nimport { Breakpoint } from '@fcom/common/interfaces/breakpoint.interface';\n\nimport { EligibilitiesForFragments, PurchasedServicesForOrder, UpdatedServicesForPassenger } from '../../interfaces';\nimport { isBoundBasedCategory, serviceMapping, ServiceMapping } from '../../utils';\nimport { seatSelections, serviceSelectionsForCategoryAllTravelers } from '../../../../store';\nimport {\n getTails,\n isBound,\n isBoundOrFlightConfirmedOrCheckedIn,\n isByBusOnly,\n isByTrainOnly,\n isFlight,\n} from '../../../../utils/common-booking.utils';\nimport { PurchasesDonePerFragment } from '../product-list/product-list.component';\n\nconst translationKeys = {\n [Category.MEAL]: {\n title: 'services.meal.title',\n noSelection: 'services.meal.state.selection.default',\n notAvailable: 'ancillaries.meals.noMealsAvailable',\n maxedOut: 'ancillaries.meals.maxedOut',\n paid: 'ancillaries.meals.paid',\n inCart: 'ancillaries.meals.inCart',\n [FinnairServiceCatalogEligibilityReason.PURCHASE_FRESH_MEAL_NOT_ELIGIBLE_EX_EXCEPT_HEL_WITHIN_24_HOURS]:\n 'ancillaries.meals.eligibility.mealsNotAvailable',\n [FinnairServiceCatalogEligibilityReason.PURCHASE_FRESH_MEAL_NOT_ELIGIBLE_EX_HEL_WITHIN_7_HOURS]:\n 'ancillaries.meals.eligibility.mealsNotAvailable',\n [FinnairServiceCatalogEligibilityReason.PURCHASE_PRE_ORDER_HOT_MEAL_NOT_ELIGIBLE_EX_HEL_WITHIN_16_HOURS]:\n 'ancillaries.meals.eligibility.mealsNotAvailable',\n [FinnairServiceCatalogEligibilityReason.PURCHASE_PRE_ORDER_HOT_MEAL_NOT_ELIGIBLE_EX_EXCEPT_HEL_36_HOURS]:\n 'ancillaries.meals.eligibility.mealsNotAvailable',\n [FinnairServiceCatalogEligibilityReason.PURCHASE_MEAL_NOT_ELIGIBLE_WHEN_ALREADY_FLOWN]:\n 'ancillaries.meals.eligibility.boundFlown',\n [FinnairServiceCatalogEligibilityReason.PURCHASE_SPECIAL_MEAL_NOT_ELIGIBLE]:\n 'ancillaries.meals.eligibility.mealsNotAvailable',\n },\n [Category.WIFI]: {\n title: 'services.wifi.title',\n noSelection: 'services.wifi.state.selection.default',\n notAvailable: 'ancillaries.wifi.noWifiAvailable',\n maxedOut: 'ancillaries.wifi.maxedOut',\n paid: 'ancillaries.wifi.paid',\n inCart: 'ancillaries.wifi.inCart',\n [FinnairServiceCatalogEligibilityReason.PURCHASE_WIFI_NOT_ELIGIBLE_WHEN_ALREADY_FLOWN]:\n 'ancillaries.wifi.eligibility.boundFlown',\n },\n [Category.BAGGAGE]: {\n title: 'services.baggage.title',\n noSelection: 'services.baggage.state.selection.default',\n notAvailable: 'ancillaries.bags.noBagsAvailable',\n paid: 'ancillaries.bags.paid',\n inCart: 'ancillaries.bags.inCart',\n maxedOut: 'ancillaries.bags.maxedOut',\n [FinnairServiceCatalogEligibilityReason.PURCHASE_BAGGAGE_NOT_ELIGIBLE_WHEN_ALREADY_FLOWN]:\n 'ancillaries.bags.eligibility.boundFlown',\n },\n [Category.CABIN_BAGGAGE]: {\n title: 'services.cabinBaggage.title',\n noSelection: 'services.cabinBaggage.state.selection.default',\n notAvailable: 'ancillaries.cabinBaggage.notAvailable',\n paid: 'ancillaries.cabinBaggage.paid',\n inCart: 'ancillaries.cabinBaggage.inCart',\n maxedOut: 'ancillaries.cabinBaggage.maxedOut',\n },\n [Category.LOUNGE]: {\n title: 'services.lounge.title',\n noSelection: 'services.lounge.state.selection.default',\n notAvailable: 'ancillaries.lounge.noLoungeAvailable',\n maxedOut: 'ancillaries.lounge.maxedOut',\n paid: 'ancillaries.lounge.paid',\n inCart: 'ancillaries.lounge.inCart',\n [FinnairServiceCatalogEligibilityReason.PURCHASE_LOUNGE_ACCESS_NOT_ELIGIBLE_WHEN_ALREADY_FLOWN]:\n 'ancillaries.lounge.eligibility.boundFlown',\n },\n [Category.SPORT]: {\n title: 'services.sport.title',\n noSelection: 'services.sport.state.selection.default',\n notAvailable: 'ancillaries.sport.noSportAvailable',\n maxedOut: 'ancillaries.sport.maxedOut',\n paid: 'ancillaries.sport.paid',\n inCart: 'ancillaries.sport.inCart',\n },\n [Category.PET]: {\n title: 'services.pet.title',\n noSelection: 'services.pet.state.selection.default',\n notAvailable: 'ancillaries.pet.noPetAvailable',\n maxedOut: 'ancillaries.pet.maxedOut',\n paid: 'ancillaries.pet.paid',\n inCart: 'ancillaries.pet.inCart',\n middleNotificationTranslationKey: 'services.pet.sideBarMiddleNotification',\n },\n [Category.SEAT]: {\n title: 'services.seat.title',\n noSelection: 'services.seat.state.selection.default',\n notAvailable: 'ancillaries.seats.noSeatsAvailable',\n paid: 'ancillaries.seats.paid',\n inCart: 'ancillaries.seats.inCart',\n maxedOut: 'ancillaries.seats.maxedOut',\n [FinnairServiceCatalogEligibilityReason.PURCHASE_SEAT_NOT_ELIGIBLE_WHEN_ALREADY_FLOWN]:\n 'ancillaries.seat.eligibility.boundFlown',\n },\n};\n\nconst translationForBenefits = {\n [SubCategory.CHECKED_BAGGAGE]: {\n title: 'benefits.checkedBaggage.title',\n description: 'benefits.checkedBaggage.description',\n },\n};\n\n@Component({\n selector: 'fin-ancillary-sidebar',\n styleUrls: ['ancillary-sidebar.component.scss'],\n templateUrl: 'ancillary-sidebar.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AncillarySidebarComponent implements OnInit {\n readonly Breakpoint = Breakpoint;\n readonly ButtonPosition = ButtonPosition;\n readonly ButtonSize = ButtonSize;\n readonly ButtonTheme = ButtonTheme;\n readonly Category = Category;\n readonly IconPosition = IconPosition;\n readonly NotificationTheme = NotificationTheme;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n @Input()\n category$: Observable;\n\n @Input()\n isSideBarOpen = false;\n\n @Input()\n boundsOrFlights$: Observable<(FinnairBoundItem | FinnairItineraryItemFlight)[]> = of([]);\n\n @Input()\n availability$: Observable;\n\n @Input()\n maxedOutForFragment$: Observable;\n\n @Input()\n subTotalPrice$: Observable;\n\n @Input()\n locations: LocationInfoMap;\n\n @Input()\n passengers: Array = [];\n\n @Input()\n subviewName: string;\n\n @Input()\n showFareFamily = true;\n\n @Input()\n purchasedServices$: Observable = of({});\n\n @Input()\n skipEnabled = false;\n\n @Input()\n skipText = '';\n\n @Input()\n passengersWithPetcIncompatibleSeats$: Observable<{ [boundId: string]: string[] }> = of({});\n\n @Input()\n ctaButtonText = 'ancillaries.backToServices';\n\n @Output()\n ctaSideBarClosed: EventEmitter = new EventEmitter();\n\n @Output()\n sideBarClosed: EventEmitter = new EventEmitter();\n\n @Output()\n changeSelectedIndex: EventEmitter = new EventEmitter();\n\n services$: Observable;\n service$: Observable;\n updatedServices$: Observable;\n includedBenefits$: Observable;\n translations$: Observable | undefined>;\n benefitTranslations$: Observable | null>;\n noAncillaryBecauseAirlineForFragment$: Observable<{ [fragmentId: string]: string }>;\n noAncillaryBecauseAirlineKey$: Observable;\n confirmedOrCheckedInSegments$: Observable<{ [boundOrFlightId: string]: boolean }>;\n tails$: Observable<{ [boundOrFlightId: string]: string[] }>;\n isBusOnlyConnections$: Observable<{ [boundOrFlightId: string]: boolean }>;\n isTrainOnlyConnections$: Observable<{ [boundOrFlightId: string]: boolean }>;\n priorityBasedEligibilities$: Observable<{ [fragmentId: string]: string[] }>;\n displayAsBoundBased$: Observable;\n middleNotificationTranslationKey$: Observable;\n\n constructor(private store$: Store) {}\n\n ngOnInit(): void {\n this.displayAsBoundBased$ = this.category$.pipe(map(isBoundBasedCategory));\n\n this.noAncillaryBecauseAirlineKey$ = this.category$.pipe(\n map((category) =>\n isBoundBasedCategory(category)\n ? 'ancillaries.bags.noBagsAvailableAirlines'\n : 'ancillaries.seats.noSeatsAvailableAirline'\n )\n );\n\n this.noAncillaryBecauseAirlineForFragment$ = this.boundsOrFlights$.pipe(\n map((boundsOrFlights) => {\n return boundsOrFlights.reduce((acc, cur) => {\n if (isBound(cur)) {\n acc[cur.id] = cur.itinerary\n .filter(isFlight)\n .map((i: FinnairItineraryItemFlight) => i.operatingAirline)\n .filter((operatingAirline) => !isFinnairNorraOrWetLease(operatingAirline.name, operatingAirline.code))\n .map((operatingAirline) => operatingAirline.name)\n .filter(unique)\n .join(', ');\n } else {\n acc[cur.id] = !isFinnairNorraOrWetLease(cur.operatingAirline.name, cur.operatingAirline.code)\n ? cur.operatingAirline.name\n : undefined;\n }\n return acc;\n }, {});\n }),\n finShare()\n );\n this.service$ = this.category$.pipe(map((category) => serviceMapping.find((s) => s.category === category)));\n this.translations$ = this.category$.pipe(map((category) => translationKeys[category]));\n\n this.includedBenefits$ = this.category$.pipe(\n switchMap((category) => {\n switch (category) {\n case Category.BAGGAGE:\n return this.store$.pipe(\n serviceSelectionsForCategoryAllTravelers(category),\n map((selections) =>\n mapValues(selections, (selection) =>\n selection.filter((s) => s.category === SubCategory.CHECKED_BAGGAGE)\n )\n ),\n finShare()\n );\n default:\n return of({});\n }\n }),\n finShare()\n );\n\n this.benefitTranslations$ = this.category$.pipe(\n map((category) => {\n switch (category) {\n case Category.BAGGAGE:\n return translationForBenefits[SubCategory.CHECKED_BAGGAGE];\n default:\n return null;\n }\n })\n );\n\n this.services$ = this.category$.pipe(\n switchMap((category) => {\n switch (category) {\n case Category.SEAT:\n return this.store$.pipe(seatSelections());\n case Category.BAGGAGE:\n return this.store$.pipe(\n serviceSelectionsForCategoryAllTravelers(category),\n map((selections) =>\n mapValues(selections, (selection) =>\n selection.filter((s) => s.category !== SubCategory.CHECKED_BAGGAGE)\n )\n ),\n finShare()\n );\n default:\n return this.store$.pipe(serviceSelectionsForCategoryAllTravelers(category), finShare());\n }\n })\n );\n\n this.confirmedOrCheckedInSegments$ = this.boundsOrFlights$.pipe(\n map((boundsOrFlights) => {\n return boundsOrFlights.reduce((all, boundOrFlight) => {\n all[boundOrFlight.id] = isBoundOrFlightConfirmedOrCheckedIn(boundOrFlight);\n return all;\n }, {});\n })\n );\n\n this.tails$ = this.boundsOrFlights$.pipe(\n map((boundsOrFlights) => {\n return boundsOrFlights.reduce((all, boundOrFlight) => {\n all[boundOrFlight.id] = getTails(boundOrFlight);\n return all;\n }, {});\n })\n );\n\n this.isBusOnlyConnections$ = this.boundsOrFlights$.pipe(\n map((boundsOrFlights) => {\n return boundsOrFlights.reduce((all, boundOrFlight) => {\n all[boundOrFlight.id] = isByBusOnly(boundOrFlight);\n return all;\n }, {});\n })\n );\n\n this.isTrainOnlyConnections$ = this.boundsOrFlights$.pipe(\n map((boundsOrFlights) => {\n return boundsOrFlights.reduce((all, boundOrFlight) => {\n all[boundOrFlight.id] = isByTrainOnly(boundOrFlight);\n return all;\n }, {});\n })\n );\n\n this.priorityBasedEligibilities$ = combineLatest([\n this.boundsOrFlights$.pipe(map((bounds) => bounds.map(({ id }) => id))),\n this.availability$,\n this.isBusOnlyConnections$,\n this.noAncillaryBecauseAirlineForFragment$,\n this.translations$,\n ]).pipe(\n map(([fragmentIds, availability, busOnly, otherAirline, translations]) => {\n return fragmentIds.reduce((all, fragmentId) => {\n if (busOnly[fragmentId]) {\n all[fragmentId] = [translations?.['notAvailable'] + 'Bus'];\n } else if (otherAirline[fragmentId]) {\n all[fragmentId] = [translations?.['notAvailable']];\n } else if (availability[fragmentId] && availability[fragmentId].every((e) => !e.isAllowedToUse)) {\n const eligibilities = availability[fragmentId]\n .map((e) => translations?.[e.reason])\n .filter(Boolean)\n .filter(unique);\n all[fragmentId] = eligibilities.length > 0 ? eligibilities : ['services.cannotAdd'];\n }\n return all;\n }, {});\n }),\n finShare()\n );\n\n const includedServices$ = combineLatest([this.purchasedServices$, this.services$]).pipe(\n map(([purchasedServices, services]) => {\n return Object.keys({ ...purchasedServices }).reduce(\n (filteredPurchaseServices, boundOrFlightId) => {\n filteredPurchaseServices[boundOrFlightId] = purchasedServices[boundOrFlightId].filter(\n (purchasedService) => {\n const serviceForBoundOrFlight = services[boundOrFlightId];\n if (\n ![SubCategory.SEAT, SubCategory.MEAL, SubCategory.SPECIAL_DIET].includes(purchasedService.category)\n ) {\n return true;\n }\n return (\n serviceForBoundOrFlight?.some(\n (selectedService) =>\n selectedService.travelerId === purchasedService.travelerId &&\n ((selectedService.category === SubCategory.SEAT &&\n selectedService.variant === purchasedService.seatNumber) ||\n selectedService.variant === purchasedService.variant)\n ) ?? true\n );\n }\n );\n return filteredPurchaseServices;\n },\n { ...purchasedServices }\n );\n })\n );\n\n this.updatedServices$ = combineLatest([this.services$, includedServices$]).pipe(\n map(([services, included]) => {\n const passengerNames = this.passengers.reduce((acc, { id, firstName, lastName }) => {\n acc[id] = `${firstName} ${lastName}`;\n return acc;\n }, {});\n const updatedServices = {};\n Object.entries(services).forEach(([fragmentId, servicesFromStore]) => {\n servicesFromStore\n .filter((service) => service.quantity > 0 && !service.paid)\n .filter((service) => {\n return !Object.entries(included).some(([id, includedServices]) => {\n return (\n fragmentId === id &&\n includedServices.some(\n (s) =>\n s.travelerId === service.travelerId &&\n s.variant === service.variant &&\n s.quantity === service.quantity\n )\n );\n });\n })\n .forEach((service) => {\n updatedServices[fragmentId] = updatedServices[fragmentId] || {};\n if (updatedServices[fragmentId][service.travelerId]) {\n updatedServices[fragmentId][service.travelerId].added.push(service);\n } else {\n updatedServices[fragmentId][service.travelerId] = {\n name: passengerNames[service.travelerId],\n added: [service],\n };\n }\n });\n });\n\n Object.entries(included).forEach(([fragmentId, includedServices]) => {\n includedServices\n .filter((service) => service.quantity > 0)\n .forEach((service) => {\n updatedServices[fragmentId] = updatedServices[fragmentId] || {};\n if (updatedServices[fragmentId]?.[service.travelerId]) {\n if (updatedServices[fragmentId][service.travelerId].included) {\n updatedServices[fragmentId][service.travelerId].included.push(service);\n } else {\n updatedServices[fragmentId][service.travelerId].included = [service];\n }\n } else {\n updatedServices[fragmentId] = {\n ...updatedServices[fragmentId],\n [service.travelerId]: { name: passengerNames[service.travelerId], included: [service] },\n };\n }\n });\n });\n return updatedServices;\n })\n );\n\n this.middleNotificationTranslationKey$ = combineLatest([\n this.category$,\n this.services$,\n this.passengersWithPetcIncompatibleSeats$,\n ]).pipe(\n filter(([category]) => category === Category.PET),\n map(([_, services, passengersWithPetcIncompatibleSeats]) => {\n return Object.keys(passengersWithPetcIncompatibleSeats)?.some((boundId) => {\n const travelerIds = passengersWithPetcIncompatibleSeats[boundId];\n return (\n travelerIds &&\n services &&\n services[boundId]?.some(\n (service) => service.category === SubCategory.PET_IN_CABIN && travelerIds.includes(service.travelerId)\n )\n );\n })\n ? translationKeys[Category.PET].middleNotificationTranslationKey\n : undefined;\n })\n );\n }\n\n toType(t: FinnairBoundItem | FinnairItineraryItemFlight): FinnairBoundItem | FinnairItineraryItemFlight {\n return 'fareFamily' in t ? (t as FinnairBoundItem) : (t as FinnairItineraryItemFlight);\n }\n}\n","\n \n {{ subTitle }}\n \n \n {{ title }}\n \n \n\n","import { Component, ElementRef, HostBinding, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { isPresent, KeyCodes, stopPropagation, unsubscribe, KeyCode, getKeyCodeFromEvent } from '@fcom/core/utils';\n\nimport { TabStateService } from './tab-state.service';\n\nexport enum SelectAction {\n PREVIOUS,\n NEXT,\n FIRST,\n LAST,\n}\n\nconst keyDownToSelectAction: { key: KeyCode; value: SelectAction }[] = [\n { key: KeyCodes.HOME, value: SelectAction.FIRST },\n { key: KeyCodes.END, value: SelectAction.LAST },\n];\nconst keyUpToSelectAction: { key: KeyCode; value: SelectAction }[] = [\n { key: KeyCodes.LEFT, value: SelectAction.PREVIOUS },\n { key: KeyCodes.RIGHT, value: SelectAction.NEXT },\n];\n\n@Component({\n selector: 'fin-tab-label',\n styleUrls: ['tab-label.component.scss'],\n templateUrl: 'tab-label.component.html',\n})\nexport class TabLabelComponent implements OnInit, OnDestroy {\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n @Input()\n tabId: string;\n @Input()\n title: string;\n @Input()\n subTitle: string;\n @Input()\n checked: boolean;\n\n @HostBinding('attr.selected')\n hostSelected = false;\n selected$: Observable;\n clicked$: Subject = new Subject();\n actions$: Subject = new Subject();\n\n @ViewChild('content', { static: true })\n private content: ElementRef;\n private subscription: Subscription;\n\n constructor(private service: TabStateService) {}\n\n ngOnInit(): void {\n this.selected$ = this.service.getSelectedTabId().pipe(map((id) => id === this.tabId));\n this.subscription = this.selected$.subscribe((selected: boolean) => (this.hostSelected = selected));\n }\n\n ngOnDestroy(): void {\n this.subscription = unsubscribe(this.subscription);\n }\n\n focus = (): void => this.content.nativeElement.focus();\n\n onClick(event: MouseEvent): false {\n this.clicked$.next(this);\n return stopPropagation(event);\n }\n\n onKeyDown = (event: KeyboardEvent): boolean =>\n this.fireAction(\n keyDownToSelectAction.find((keyDown) => keyDown.key === getKeyCodeFromEvent(event)),\n event\n );\n onKeyUp = (event: KeyboardEvent): boolean =>\n this.fireAction(\n keyUpToSelectAction.find((keyUp) => keyUp.key === getKeyCodeFromEvent(event)),\n event\n );\n\n private fireAction(mode?: { key: KeyCode; value: SelectAction }, event?: Event): boolean {\n if (!isPresent(mode)) {\n return true;\n }\n this.actions$.next(mode.value);\n return stopPropagation(event);\n }\n}\n","
\n {{\n 'ancillaries.journey'\n | finLocalization\n : {\n journeyNumber: activeBoundIndex + 1,\n from: locations[boundsOrFlights[activeBoundIndex].departure.locationCode].cityName,\n to: locations[boundsOrFlights[activeBoundIndex].arrival.locationCode].cityName,\n }\n }}\n
\n \n \n
\n\n
\n 1\"\n class=\"flex--nogrow flex--self-start\"\n [title]=\"\n ($any(boundsOrFlights[activeBoundIndex]).itinerary ? 'actions.previousBound' : 'actions.previousFlight')\n | finLocalization\n \"\n (click)=\"onChangeFlightBound(activeBoundIndex - 1, -1)\"\n data-testid=\"service-selection-prev-segment\"\n >\n \n \n
\n \n
\n 1\"\n class=\"flex--nogrow flex--self-end\"\n [title]=\"\n ($any(boundsOrFlights[activeBoundIndex]).itinerary ? 'actions.nextBound' : 'actions.nextFlight')\n | finLocalization\n \"\n (click)=\"onChangeFlightBound(activeBoundIndex + 1, 1)\"\n data-testid=\"service-selection-next-segment\"\n >\n \n \n
\n
\n\n\n
\n
\n 1\"\n class=\"flex--nogrow\"\n [text]=\"'carousel.previous' | finLocalization\"\n [aria]=\"{\n label:\n ($any(boundsOrFlights[activeBoundIndex]).itinerary ? 'actions.previousBound' : 'actions.previousFlight')\n | finLocalization,\n }\"\n [theme]=\"ButtonTheme.LIGHT_SECONDARY_OUTLINE\"\n [disabled]=\"activeBoundIndex === 0\"\n data-testid=\"service-selection-prev-segment\"\n (clickBtn)=\"activeBoundIndex !== 0 && onChangeFlightBound(activeBoundIndex - 1, -1)\"\n >\n \n
\n \n {{ 'services.flight' | finLocalization }}\n {{ activeBoundIndex + 1 }} / {{ boundsOrFlights.length }}\n \n
\n 1\"\n class=\"flex--nogrow\"\n [text]=\"'carousel.next' | finLocalization\"\n [aria]=\"{\n label:\n ($any(boundsOrFlights[activeBoundIndex]).itinerary ? 'actions.nextBound' : 'actions.nextFlight')\n | finLocalization,\n }\"\n [theme]=\"ButtonTheme.LIGHT_SECONDARY_OUTLINE\"\n [disabled]=\"activeBoundIndex === boundsOrFlights.length - 1\"\n data-testid=\"service-selection-next-segment\"\n (clickBtn)=\"activeBoundIndex !== boundsOrFlights.length - 1 && onChangeFlightBound(activeBoundIndex + 1, 1)\"\n >\n \n
\n
\n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { Observable } from 'rxjs';\n\nimport { BoundType, LocationInfoMap } from '@fcom/dapi';\nimport { FinnairBoundItem, FinnairItineraryItemFlight, FinnairPassengerItem } from '@fcom/dapi/api/models';\nimport { SelectionPhase } from '@fcom/common/interfaces/booking';\nimport { ButtonSize, ButtonTheme } from '@fcom/ui-components';\n\nimport { getTails, isByBusOnly } from '../../../../utils/common-booking.utils';\n\nconst MAX_EXEC_TIMES = 20;\n\n@Component({\n selector: 'fin-ancillary-flight-bound-selector',\n templateUrl: 'ancillary-flight-bound-selector.component.html',\n styleUrls: ['ancillary-flight-bound-selector.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AncillaryFlightBoundSelectorComponent implements OnInit {\n readonly BoundType = BoundType;\n readonly ButtonSize = ButtonSize;\n readonly ButtonTheme = ButtonTheme;\n readonly SelectionPhase = SelectionPhase;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n @Input() showFlightCard$: Observable;\n\n @Input()\n boundsOrFlights: (FinnairBoundItem | FinnairItineraryItemFlight)[];\n\n @Input()\n activeBoundIndex = 0;\n\n @Input()\n locations: LocationInfoMap;\n\n @Input()\n passengers: FinnairPassengerItem[];\n\n @Input()\n focusOnDetails$: Observable;\n\n @Output()\n selectIndex: EventEmitter = new EventEmitter();\n\n @Output()\n viewDetails: EventEmitter = new EventEmitter();\n\n tails: { [boundOrFlightId: string]: string[] };\n isBusOnlyConnections: { [boundOrFlightId: string]: boolean };\n\n ngOnInit(): void {\n this.tails = this.boundsOrFlights.reduce((all, boundOrFlight) => {\n all[boundOrFlight.id] = getTails(boundOrFlight);\n return all;\n }, {});\n\n this.isBusOnlyConnections = this.boundsOrFlights.reduce((all, boundOrFlight) => {\n all[boundOrFlight.id] = isByBusOnly(boundOrFlight);\n return all;\n }, {});\n }\n\n onChangeFlightBound(index: number, addition: number, execTimes = 0): void {\n const indexToGo =\n index < 0 ? this.boundsOrFlights.length - 1 : index <= this.boundsOrFlights.length - 1 ? index : 0;\n const boundOrFlight = this.boundsOrFlights[indexToGo];\n if (boundOrFlight) {\n this.selectIndex.emit(indexToGo);\n return;\n }\n\n if (execTimes < MAX_EXEC_TIMES) {\n this.onChangeFlightBound(indexToGo + addition, addition, execTimes + 1);\n }\n }\n}\n","
\n
\n \n
\n
\n {{ additionalInfoKey$ | async | finLocalization }}\n
\n
\n","import { Component, Input } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { Observable } from 'rxjs';\n\n@Component({\n selector: 'fin-additional-info',\n styleUrls: ['additional-info.component.scss'],\n templateUrl: 'additional-info.component.html',\n})\nexport class AdditionalInfoComponent {\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n @Input() additionalInfoKey$: Observable;\n}\n","import { Component, Input } from '@angular/core';\n\nimport { Amount } from '@fcom/dapi/interfaces';\n\n@Component({\n selector: 'fin-ancillary-price',\n templateUrl: 'ancillary-price.component.html',\n})\nexport class AncillaryPriceComponent {\n @Input() price: Amount;\n @Input() title: string;\n @Input() disclaimer: string;\n}\n","
\n {{ price | finPrice }}\n {{ title | finLocalization }}\n
\n
\n {{ disclaimer | finLocalization }}\n
\n","
\n 0\"\n class=\"block pr-xsmall-b border-bottom\"\n [groupedServices]=\"filteredGroupedServices\"\n >\n\n \n
0\">\n \n
{{ 'ancillaries.selectionText' | finLocalization }}
\n
\n\n
\n
\n
    \n
  • \n 1\">{{ ancillary.quantity }} x {{ ancillary.translations.title }}\n \n {{ ancillary.originalPrice | finPrice }}\n \n {{ ancillary.totalPrice | finPrice }}\n
  • \n
\n
\n
\n \n
\n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\n\nimport { GroupedServices } from '@fcom/dapi';\nimport { ButtonSize, ButtonTheme, IconPosition } from '@fcom/ui-components';\n\nimport { ExtendedService } from '../../interfaces';\n\n@Component({\n selector: 'fin-ancillary-selection',\n styleUrls: ['./ancillary-selection.component.scss'],\n templateUrl: 'ancillary-selection.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AncillarySelectionComponent implements OnInit, OnChanges {\n readonly ButtonSize = ButtonSize;\n readonly ButtonTheme = ButtonTheme;\n readonly IconPosition = IconPosition;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n @Input()\n showRemove = true;\n @Input()\n ancillaries: ExtendedService[] = [];\n @Input()\n groupedServices: GroupedServices[] = [];\n @Input()\n hideSelection = false;\n\n @Output()\n removeSelections: EventEmitter = new EventEmitter();\n\n showRemoveBasedOnAncillaries: boolean;\n filteredGroupedServices: GroupedServices[];\n\n ngOnInit(): void {\n this.showRemoveBasedOnAncillaries = this.showRemoveButton();\n this.filteredGroupedServices = this.getFilteredGroupedServices();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!changes['showRemove']?.firstChange || !changes['ancillaries']?.firstChange) {\n this.showRemoveBasedOnAncillaries = this.showRemoveButton();\n }\n\n if (!changes['groupedServices']?.firstChange) {\n this.filteredGroupedServices = this.getFilteredGroupedServices();\n }\n }\n\n private getFilteredGroupedServices(): GroupedServices[] {\n return this.groupedServices.filter(({ key }) => key !== 'pendingPayment');\n }\n\n private showRemoveButton(): boolean {\n return (\n this.showRemove &&\n this.ancillaries.every(\n (ancillary) =>\n ancillary.paidQuantity === 0 || +ancillary.totalPrice?.amount === 0 || ancillary.isModifiable === true\n )\n );\n }\n}\n","\n 0\"\n class=\"meal-details-categories nordic-blue-900-text font-body-1 pr-medium-y\"\n >\n \n {{ i > 0 ? ', ' : ''\n }}{{ 'ancillaries.meals.categories.' + category + '.full' | finLocalization | finEmpty: category }}\n \n \n
\n
\n
\n

{{ 'ancillaries.meals.details.ingredients' | finLocalization }}:

\n
\n
\n
\n

{{ 'ancillaries.meals.details.nutritionFacts' | finLocalization }}:

\n
\n
\n \n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\nimport { ExtendedService } from '../../interfaces';\n\n@Component({\n selector: 'fin-meal-details',\n styleUrls: ['meal-details.component.scss'],\n templateUrl: 'meal-details.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MealDetailsComponent {\n @Input()\n meal: ExtendedService;\n}\n","\n \n\n\n\n
\n
\n {{ teaserTitle }}\n \n {{ details.seatNumber }}\n {{\n 'ancillaries.seats.popover.exitLabel' | finLocalization\n }}\n \n
\n
\n \n {{ details.price?.originalPrice | finPrice: { roundPrice: details.price.originalPrice.amount === '0' } }}\n
\n
\n {{ details.price?.price | finPrice: { roundPrice: details.price?.price.amount === '0' } }}\n
\n
\n \n\n
\n
\n\n \n\n \n\n \n \n \n\n \n {{ 'ancillaries.seats.popover.clear' | finLocalization }}\n \n \n
\n\n \n \n \n\n \n {{ 'ancillaries.seats.popover.clear' | finLocalization }}\n \n \n
\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { Observable, of, Subscription, zip } from 'rxjs';\nimport { delay, distinctUntilChanged, filter, map, startWith, switchMap } from 'rxjs/operators';\n\nimport { ButtonMode, IconPosition } from '@fcom/ui-components';\nimport { LanguageService } from '@fcom/ui-translate';\nimport { LoaderType } from '@fcom/common/interfaces';\nimport { CmsDataService } from '@fcom/core/services';\nimport { finShare, safeMap as safeMapObs } from '@fcom/rx';\nimport { isPresent, stopPropagation, unsubscribe } from '@fcom/core/utils';\nimport { CmsSeatDetails } from '@fcom/common/interfaces/booking';\n\nimport { ButtonState, SeatDetails } from '../../../interfaces';\n\nconst POPOVER_ANIMATION_DURATION = 300;\n\n@Component({\n selector: 'fin-seat-details',\n styleUrls: ['./seat-details.component.scss'],\n templateUrl: './seat-details.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SeatDetailsComponent implements OnInit, OnDestroy {\n public readonly LoaderType = LoaderType;\n public readonly ButtonState = ButtonState;\n public readonly IconPosition = IconPosition;\n public readonly ButtonMode = ButtonMode;\n public readonly SvgLibraryIcon = SvgLibraryIcon;\n\n @Input()\n seatDetails$: Observable;\n\n @Input()\n hideButtons = false;\n\n /**\n * Emits when the seat details are loaded\n * @type {EventEmitter}\n */\n @Output()\n seatDetailsLoadComplete: EventEmitter = new EventEmitter();\n\n /**\n * Emits when the seat has been selected for the traveler\n * @type {EventEmitter}\n */\n @Output()\n seatSelected: EventEmitter = new EventEmitter();\n\n /**\n * Emits when the seat should be cleared\n * @type {EventEmitter}\n */\n @Output()\n seatCleared: EventEmitter = new EventEmitter();\n\n cmsSeatDetails$: Observable;\n seatTitle$: Observable;\n seatDetailsWithCMS$: Observable;\n seatDetailsSubscription = new Subscription();\n\n constructor(\n private languageService: LanguageService,\n private cmsDataService: CmsDataService\n ) {}\n\n ngOnInit(): void {\n this.cmsSeatDetails$ = this.seatDetails$.pipe(\n safeMapObs((s: SeatDetails) => s.seatType),\n distinctUntilChanged(),\n switchMap((seatType: string) => this.languageService.translate(['seatTypes', seatType])),\n map((jsonData: any) => jsonData?.url),\n switchMap((url: string) =>\n isPresent(url)\n ? this.cmsDataService.getFragmentJson(url).pipe(startWith(null as CmsSeatDetails))\n : of({} as CmsSeatDetails)\n ),\n finShare()\n );\n\n this.seatTitle$ = this.cmsSeatDetails$.pipe(\n switchMap((d: CmsSeatDetails) => {\n if (!d || d.teaserTitle) {\n return of(d?.teaserTitle);\n }\n return this.seatDetails$.pipe(map((s) => s.seatType));\n })\n );\n\n this.seatDetailsWithCMS$ = zip(\n this.seatDetails$.pipe(delay(POPOVER_ANIMATION_DURATION)),\n this.cmsSeatDetails$.pipe(filter(Boolean))\n );\n\n this.seatDetailsSubscription.add(\n this.seatDetailsWithCMS$.subscribe(() => {\n this.seatDetailsLoadComplete.emit();\n })\n );\n }\n\n ngOnDestroy(): void {\n unsubscribe(this.seatDetailsSubscription);\n }\n\n selectSeat(details: SeatDetails, event: Event): void {\n stopPropagation(event);\n this.seatSelected.emit(details);\n }\n\n clearSeat(details: SeatDetails, event: Event): void {\n stopPropagation(event);\n this.seatCleared.emit(details);\n }\n\n confirmSeatClick(details: SeatDetails, event: Event, forceSelection = false): false {\n if (details.seatSelectedForTraveler === details.travelerId && !forceSelection) {\n this.seatCleared.emit(details);\n } else {\n this.seatSelected.emit(details);\n }\n return stopPropagation(event);\n }\n}\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { v4 as uuid } from 'uuid';\n\n@Component({\n selector: 'fin-product-expand',\n templateUrl: 'product-expand.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ProductExpandComponent implements OnInit {\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n @Input() title: string;\n\n open = false;\n id: string;\n\n ngOnInit(): void {\n this.id = uuid();\n }\n}\n","
\n \n {{ title }}\n \n \n\n \n
\n \n
\n
\n
\n","\n \n\n\n\n \n {{\n (operatingAirlineIdInfo.isOrder\n ? 'ancillaries.seat.operatingAirlineNotification.generalMessage.mmb'\n : 'ancillaries.seat.operatingAirlineNotification.generalMessage.booking'\n ) | finLocalization\n }}\n \n {{\n (operatingAirlineIdInfo.isOrderIdIdentical\n ? 'ancillaries.seat.operatingAirlineNotification.pnrMessage.sameId'\n : 'ancillaries.seat.operatingAirlineNotification.pnrMessage.differentId'\n ) | finLocalization\n }}\n \n {{ operatingAirlineIdInfo.operatingAirlineId.id }}\n \n \n \n\n\n\n\n
\n \n \n {{ 'services.seat.notAvailableWhenCheckInClosed' | finLocalization }}\n \n \n \n \n \n \n

\n {{ 'ancillaries.seats.loadErrorTitle' | finLocalization }}\n

\n

{{ 'ancillaries.seats.loadErrorContent' | finLocalization }}

\n \n
\n \n
\n
\n \n \n \n {{ notification.key | finLocalization }}\n \n

\n {{ notification.reason.key | finLocalization: notification.reason.data }}\n

\n
\n
\n \n

\n {{ 'services.cannotAdd' | finLocalization }}\n

\n
\n \n @if ((operatingAirlineIdInfo$ | async)?.isOperated) {\n \n }\n
\n \n \n {{ 'MMB.view.seatMap.paidSeatNotification' | finLocalization }}\n \n \n {{ 'MMB.view.seatMap.ticketedSeatNotification' | finLocalization }}\n \n\n \n\n @if (bundlesEnabled) {\n \n }\n\n @if (benefitTextKey) {\n \n }\n\n \n\n
\n \n \n \n \n \n
\n\n
\n \n
\n\n
\n
{{ 'seatMap.airCraftModel' | finLocalization }}
\n \n {{ flight.aircraft.name }}\n \n {{ 'aircrafts.' + flight.aircraft.code | finLocalization }} ({{ flight.aircraft.code }})\n \n \n \n
\n
\n\n \n \n \n\n\n\n\n\n
\n \n
\n
\n \n \n
\n\n\n\n
\n \n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { ViewportScroller } from '@angular/common';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { BehaviorSubject, combineLatest, Observable, of, ReplaySubject, Subject, Subscription } from 'rxjs';\nimport { delay, distinctUntilChanged, filter, map, switchMap, take, withLatestFrom } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\n\nimport {\n ButtonPosition,\n ButtonSize,\n ButtonTheme,\n IconButtonSize,\n IconButtonTheme,\n IconPosition,\n LoaderTheme,\n ModalButtons,\n NotificationTheme,\n TagTheme,\n} from '@fcom/ui-components';\nimport {\n Category,\n FinnairCart,\n FinnairItineraryItemFlight,\n FinnairOperatingAirlineId,\n FinnairOrder,\n FinnairPassengerCode,\n FinnairPassengerItem,\n FinnairServiceItem,\n SeatInfo,\n SeatmapSvgAndControlData,\n} from '@fcom/dapi/api/models';\nimport { resolveTailName, stopPropagation, unsubscribe } from '@fcom/core/utils';\nimport { ElementActions, ElementTypes, SelectOption } from '@fcom/common/interfaces';\nimport { LanguageService } from '@fcom/ui-translate';\nimport { Amount, ServiceCatalogSelectionsForAllTravelers } from '@fcom/dapi/interfaces';\nimport { AIRCRAFT_TRANSLATION_MAP, SeatMapStatus } from '@fcom/common/interfaces/seat-map.interface';\nimport { ConfigService, SentryLogger } from '@fcom/core/services';\nimport { CmsTemplateService } from '@fcom/cms';\nimport { CmsTemplate } from '@fcom/core-api';\nimport { GtmService } from '@fcom/common/gtm';\nimport { finShare, snapshot } from '@fcom/rx';\n\nimport {\n EligibilitiesForFragments,\n FlightWithStreams,\n Notification,\n SeatChangeEvent,\n SeatDetails,\n SeatMapTraveler,\n} from '../../../interfaces';\nimport { SeatMapRendererComponent } from '../seat-map-renderer/seat-map-renderer.component';\nimport {\n getSeatMapFlight,\n getSeatPrice,\n getServicesNotifications,\n isAllowedToChangeSeat,\n servicesForFlightAndTravelerId,\n} from '../../../utils';\nimport { AncillaryLoaderStatus } from '../../../enums';\nimport { CommonBookingFeatureState, SeatMapActions } from '../../../../../store';\nimport { isOrder } from '../../../../../utils/common-booking.utils';\nimport { SeatBenefitTag } from '../seat-benefit/seat-benefit.component';\nimport { BENEFITS } from '../../../../../utils/benefit.utils';\n\nconst FLIGHT_CONTAINER_ANIMATION_DELAY = 350;\n\ninterface OperatingAirlineIdInfo {\n operatingAirlineId: FinnairOperatingAirlineId;\n isOperated: boolean;\n isOrderIdIdentical: boolean;\n isOrder: boolean;\n}\n\n@Component({\n selector: 'fin-seat-map-view',\n styleUrls: ['./seat-map-view.component.scss'],\n templateUrl: './seat-map-view.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SeatMapViewComponent implements OnInit, OnDestroy, OnChanges {\n readonly ButtonPosition = ButtonPosition;\n readonly ButtonSize = ButtonSize;\n readonly ButtonTheme = ButtonTheme;\n readonly Category = Category;\n readonly IconButtonSize = IconButtonSize;\n readonly IconButtonTheme = IconButtonTheme;\n readonly IconPosition = IconPosition;\n readonly LoaderTheme = LoaderTheme;\n readonly ModalButtons = ModalButtons;\n readonly SeatMapStatus = SeatMapStatus;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n readonly NotificationTheme = NotificationTheme;\n\n @Input() flight: FlightWithStreams;\n @Input() passengers$: Observable;\n @Input() seatSelections$: Observable;\n @Input() flightIsActive$: Observable;\n @Input() cartOrOrder$: Observable;\n @Input() includedSeats: FinnairServiceItem | null;\n @Input() availability$: Observable = of({});\n @Input() canClearSeats = true;\n @Input() notEligibleWhenCheckInClosed = false;\n @Input() preSelectedPax$: Observable = of(undefined);\n @Input() ancillaryLoader$: BehaviorSubject;\n\n @Output() changeSeats: EventEmitter = new EventEmitter();\n @Output() subtotalChange: EventEmitter = new EventEmitter();\n @Output() retrySeatmap: EventEmitter = new EventEmitter();\n @Output() isReassigningSeats: EventEmitter = new EventEmitter();\n\n @ViewChild('seatMap') seatMapElement: SeatMapRendererComponent;\n\n subscriptions: Subscription = new Subscription();\n selectablePassengers$: BehaviorSubject = new BehaviorSubject([]);\n seatDetails$: Subject = new ReplaySubject(1);\n passengerOptions$: Observable;\n seatMapContainerWidth$: BehaviorSubject = new BehaviorSubject(undefined);\n unmodifiableSeat$: Observable;\n unmodifiableFreeSeat$: Observable;\n noSeatmapNotifications$: Observable;\n isAtStart = true;\n isAtEnd = false;\n currentFlightTail: string;\n exitRowModalOpen = false;\n aircraftModalOpen = false;\n aircraftInformationTemplate$: BehaviorSubject = new BehaviorSubject(undefined);\n scrollPosition = 0;\n isFinnairWetLease = false;\n operatingAirlineIdInfo$: Observable;\n flight$: BehaviorSubject = new BehaviorSubject(null);\n benefitTextKey: string;\n benefitTag: SeatBenefitTag;\n bundleActive$: Observable;\n bundlesEnabled = false;\n\n constructor(\n private languageService: LanguageService,\n private templateService: CmsTemplateService,\n private configService: ConfigService,\n private viewportScroller: ViewportScroller,\n private gtmService: GtmService,\n private sentryLogger: SentryLogger,\n private changeDetectorRef: ChangeDetectorRef,\n private store$: Store\n ) {}\n\n ngOnInit(): void {\n this.currentFlightTail = resolveTailName(this.flight.operatingAirline.code);\n\n this.subscriptions.add(\n combineLatest([this.passengers$, this.seatSelections$, this.flight.seatMap$])\n .pipe(\n take(1),\n switchMap(([passengers, seatSelections, seatMap]) => {\n return this.preSelectedPax$.pipe(\n distinctUntilChanged(),\n map((preSelectedPax) => {\n return [passengers, seatSelections, seatMap, preSelectedPax] as [\n FinnairPassengerItem[],\n ServiceCatalogSelectionsForAllTravelers,\n SeatmapSvgAndControlData,\n string,\n ];\n })\n );\n })\n )\n .subscribe(([passengers, seatSelections, seatMap, preSelectedPax]) => {\n this.selectablePassengers$.next(this.mapPassengers(passengers, seatSelections, seatMap, preSelectedPax));\n })\n );\n\n this.passengerOptions$ = this.selectablePassengers$.pipe(\n withLatestFrom(this.languageService.translate('seatMap.and')),\n map(([passengers, and]) => passengers.map((p) => ({ value: p.id, name: this.getTravelerFullName(p, and) })))\n );\n\n this.bundleActive$ = this.selectablePassengers$.pipe(\n map((passengers) => {\n const activePassenger = passengers.find((passenger) => passenger.active);\n return !!activePassenger?.bundleActive;\n }),\n distinctUntilChanged()\n );\n\n this.bundlesEnabled = this.configService.cfg.enableBookingFlowAncillaryBundles;\n\n this.subscriptions.add(\n this.flight.seatMap$.subscribe((seatMap) => {\n this.isFinnairWetLease = seatMap.isWetlease;\n\n // Wait until seat map element is visible before triggering seat chips to render.\n setTimeout(() => {\n const seatMapEl = this.seatMapElement?.seatMapWrapper?.nativeElement;\n this.seatMapContainerWidth$.next(seatMapEl?.clientWidth);\n this.changeDetectorRef.detectChanges();\n }, 0);\n })\n );\n\n this.subscriptions.add(\n combineLatest([\n this.selectablePassengers$,\n this.flightIsActive$.pipe(delay(FLIGHT_CONTAINER_ANIMATION_DELAY)), // Delay to prevent transition collision, to be refactored\n this.flight.seatMapStatus$,\n this.ancillaryLoader$,\n this.cartOrOrder$,\n ])\n .pipe(\n filter(\n ([_pax, active, seatMapStatus, _loaderStatus, _order]) => active && seatMapStatus === SeatMapStatus.OK\n ),\n take(1),\n map(([pax, _active, _seatMapStatus, loaderStatus, order]) => {\n return { pax, loaderStatus, order };\n })\n )\n .subscribe(({ pax, loaderStatus, order }) => {\n if (loaderStatus === AncillaryLoaderStatus.REASSIGNING) {\n this.store$.dispatch(SeatMapActions.resetSeatSelections({ cartOrOrder: order! }));\n }\n if (pax.length > 0) {\n this.tryScrollToFirstAvailableSeat(pax[0]);\n }\n })\n );\n\n this.subscriptions.add(\n combineLatest([this.flight$, this.cartOrOrder$]).subscribe(([flight, cartOrOrder]) => {\n this.setBenefitDetails(flight, cartOrOrder);\n })\n );\n\n this.subscriptions.add(\n this.flight.seatMapStatus$\n .pipe(\n filter(\n (status: SeatMapStatus) =>\n status === SeatMapStatus.OK ||\n status === SeatMapStatus.LOAD_ERROR ||\n status === SeatMapStatus.OK_NO_AVAILABILITY\n )\n )\n .subscribe(() => {\n this.ancillaryLoader$.next(AncillaryLoaderStatus.OFF);\n this.isReassigningSeats.emit(false);\n })\n );\n\n this.unmodifiableSeat$ = this.selectablePassengers$.pipe(\n map((pax) => {\n const active = pax.find((p) => p.active);\n return active.paidSeat && !active.modifiableSeat;\n })\n );\n this.unmodifiableFreeSeat$ = this.selectablePassengers$.pipe(\n map((pax) => {\n const active = pax.find((p) => p.active);\n return !active.paidSeat && active.ticketedSeat && !active.modifiableSeat;\n })\n );\n\n this.operatingAirlineIdInfo$ = combineLatest([\n this.flight$.pipe(filter((flight) => !!flight)),\n this.cartOrOrder$,\n ]).pipe(\n map(([flight, cartOrOrder]) => {\n const isOrderCreated = isOrder(cartOrOrder);\n const operatingAirlineId = isOrderCreated\n ? this.getOperatingAirlineId(cartOrOrder as FinnairOrder, flight.operatingAirline.code)\n : undefined;\n return {\n operatingAirlineId,\n isOperated: isOrderCreated ? !!operatingAirlineId : flight.operatingAirline.code !== 'AY',\n isOrderIdIdentical: !!operatingAirlineId && cartOrOrder.id === operatingAirlineId.id,\n isOrder: isOrderCreated,\n };\n })\n );\n this.noSeatmapNotifications$ = combineLatest([this.availability$, this.operatingAirlineIdInfo$]).pipe(\n map(([availability, operatingAirlineIdInfo]) =>\n getServicesNotifications({}, availability, Category.SEAT, this.flight, false, operatingAirlineIdInfo.isOperated)\n ),\n finShare()\n );\n }\n\n private getOperatingAirlineId(order: FinnairOrder, operatingAirlineCode: string): FinnairOperatingAirlineId {\n return order.operatingAirlineIds.find(\n (operatingAirlineId) => operatingAirlineId.airlineCode === operatingAirlineCode\n );\n }\n\n tryScrollToFirstAvailableSeat(pax: SeatMapTraveler, attempt = 0): void {\n if (attempt >= 10) {\n this.sentryLogger.error('Failed to find the seatmap after 1000ms', {\n flightNumber: this.flight.flightNumber,\n cabinClass: this.flight.cabinClass,\n id: snapshot(this.cartOrOrder$).id,\n });\n\n return;\n }\n\n setTimeout(() => {\n const seatMap = this.seatMapElement?.seatMap?.nativeElement;\n\n if (!seatMap) {\n const nextAttempt = attempt + 1;\n this.tryScrollToFirstAvailableSeat(pax, nextAttempt);\n return;\n }\n const seatNumber =\n pax.seat?.seatNumber ??\n seatMap?.querySelector(`[data-${pax.id.toLowerCase()}=\"available\"]`).getAttribute('data-id');\n\n if (seatNumber) {\n this.scrollToSeat(seatNumber, false);\n }\n }, 100);\n }\n\n ngOnDestroy(): void {\n unsubscribe(this.subscriptions);\n }\n\n private mapPassengers(\n travelers: FinnairPassengerItem[],\n seatSelections: ServiceCatalogSelectionsForAllTravelers,\n seatMap: SeatmapSvgAndControlData,\n preSelectedPax: string | undefined\n ): SeatMapTraveler[] {\n const infants = travelers.filter((traveler) => traveler.passengerTypeCode === FinnairPassengerCode.INF);\n return travelers\n .filter((traveler) => traveler.passengerTypeCode !== FinnairPassengerCode.INF)\n .map((traveler, index) => {\n const selections = seatSelections[this.flight.id]?.find((p) => p.travelerId === traveler.id);\n const seatNumber = selections?.seatNumber;\n const originalSeatNumber = servicesForFlightAndTravelerId(this.includedSeats, this.flight.id, traveler.id)[0]\n ?.seatNumber;\n const seat = seatNumber && seatMap.seats.find((s) => s.seatNumber === seatNumber);\n const infant = infants.find((i) => i.accompanyingTravelerId === traveler.id);\n return {\n id: traveler.id,\n traveler,\n withInfant: !!infant,\n withInfantFullName: infant ? `${infant.firstName} ${infant.lastName}` : '',\n groupedServices: null,\n active: preSelectedPax ? traveler.id === preSelectedPax : index === 0,\n seat,\n seatNumber,\n originalSeatNumber,\n modifiableSeat: selections?.modifiable,\n ticketedSeat: selections?.ticketed,\n paidSeat: selections?.paid,\n };\n });\n }\n\n private getTravelerFullName(passenger: SeatMapTraveler, and: string): string {\n const withInfant = passenger.withInfant ? `(${and} ${passenger.withInfantFullName})` : '';\n return `${passenger.traveler.firstName} ${passenger.traveler.lastName} ${withInfant}`.trim();\n }\n\n selectSeat({\n passengerId,\n seatNumber,\n exitRow,\n }: {\n passengerId: string;\n seatNumber: string;\n exitRow: boolean;\n }): void {\n const isModifiableSeats: boolean =\n !this.includedSeats || isAllowedToChangeSeat(this.includedSeats, this.flight.id, passengerId);\n if (!isModifiableSeats) {\n return;\n }\n\n this.subscriptions.add(\n this.flight.seatMap$.pipe(take(1)).subscribe((seatMap) => {\n const shouldRevertSeat = !this.canClearSeats && seatNumber === null;\n const actualSeatNumber = shouldRevertSeat\n ? servicesForFlightAndTravelerId(this.includedSeats, this.flight.id, passengerId)[0]?.seatNumber\n : seatNumber;\n const seat: SeatInfo = seatMap.seats.find((s) => s.seatNumber === actualSeatNumber);\n if (seat && exitRow && actualSeatNumber) {\n this.seatDetails$.next({\n travelerId: passengerId,\n seat,\n seatNumber: actualSeatNumber,\n seatType: seat.type,\n price: getSeatPrice(seat, passengerId),\n exitRow,\n });\n this.exitRowModalOpen = true;\n this.gtmService.seatMapEvent('exit-row-modal', ElementTypes.MODAL, '', ElementActions.VIEW, {\n flightInfo: getSeatMapFlight(this.flight),\n });\n } else {\n this.confirmSeatSelection(passengerId, actualSeatNumber);\n }\n })\n );\n }\n\n confirmExitRowSeat(passengerId: string, seatNumber: string): void {\n this.confirmSeatSelection(passengerId, seatNumber);\n this.gtmService.seatMapEvent('exit-row-confirm', ElementTypes.BUTTON, 'cta', ElementActions.CLICK, {\n flightInfo: getSeatMapFlight(this.flight),\n });\n }\n\n confirmSeatSelection(passengerId: string, seatNumber: string): void {\n this.exitRowModalOpen = false;\n const currentPassengers = this.selectablePassengers$.getValue();\n const activePaxIndex = currentPassengers.findIndex((pax) => pax.active);\n const isLastPax = activePaxIndex === currentPassengers.length - 1;\n const isActive = (index: number): boolean => {\n if (seatNumber) {\n return isLastPax ? index === 0 : activePaxIndex + 1 === index;\n }\n return index === activePaxIndex;\n };\n\n this.selectablePassengers$.next(\n currentPassengers.map((pax, index) => {\n return {\n ...pax,\n ...(pax.id === passengerId && {\n seatNumber,\n }),\n active: isActive(index),\n };\n })\n );\n\n this.changeSeats.emit({\n travelerId: passengerId,\n seatNumber,\n flightId: this.flight.id,\n });\n }\n\n selectPassenger(passengerId: string): void {\n const currentPaxs = this.selectablePassengers$.getValue();\n\n this.selectablePassengers$.next(\n currentPaxs.map((pax) => {\n return {\n ...pax,\n active: pax.id === passengerId,\n };\n })\n );\n }\n\n onBundleToggle(toggled: boolean): void {\n this.selectablePassengers$.next(\n this.selectablePassengers$.getValue().map((pax) => (pax.active ? { ...pax, bundleActive: toggled } : pax))\n );\n }\n\n scrollSeatMap(direction: string): void {\n const seatMap = this.seatMapElement.seatMapWrapper.nativeElement;\n const divWidth = seatMap.clientWidth / 2;\n\n if (direction === 'left') {\n this.scrollPosition = seatMap.scrollLeft + divWidth;\n seatMap.scrollBy({\n left: divWidth,\n behavior: 'smooth',\n });\n } else {\n this.scrollPosition = seatMap.scrollLeft - divWidth;\n seatMap.scrollBy({\n left: -divWidth,\n behavior: 'smooth',\n });\n }\n\n this.gtmService.seatMapEvent('seatmap-full', ElementTypes.BUTTON, 'arrow', ElementActions.CLICK, {\n flightInfo: getSeatMapFlight(this.flight),\n });\n }\n\n scrollTo(position: number): void {\n requestAnimationFrame(() => {\n const seatMap: HTMLDivElement = this.seatMapElement.seatMapWrapper.nativeElement;\n\n seatMap.scrollTo({\n left: position,\n behavior: 'smooth',\n });\n });\n }\n\n scrollToSeat(seatNumber: string, focus = true): void {\n requestAnimationFrame(() => {\n const seatMap: HTMLDivElement = this.seatMapElement.seatMapWrapper.nativeElement;\n const seatElement: HTMLAnchorElement = seatMap.querySelector(`[data-id=\"${seatNumber}\"] a`);\n\n if (!seatElement) {\n return;\n }\n\n /**\n * Calculate if the seat can be centered or not. If this is not done this can cause bugs\n * where the slider partially moves onto the next seatmap as the browser tries to force the\n * seat to the center of the view.\n */\n let isCenterable = false;\n\n try {\n let seatGElement = seatElement.parentElement as unknown as SVGGElement;\n\n /**\n * Business seats are wrapped in 2 levels of parent SVGGElements. So we need to go to the\n * parents parent to get the actual positioning. (The `transform: translate(100, 200)` that\n * you see) in the elements panel on dev tools.\n */\n if (!seatGElement.transform.baseVal.length) {\n seatGElement = seatGElement.parentElement as unknown as SVGGElement;\n }\n\n const halfViewArea = seatMap.getBoundingClientRect().width * 0.5;\n const svgWidth = seatMap.querySelector('svg').getBoundingClientRect().width;\n const seatXCoordinate = seatGElement.transform.baseVal.consolidate().matrix.e;\n\n isCenterable = svgWidth - seatXCoordinate > halfViewArea && seatXCoordinate > halfViewArea;\n } catch (e) {\n const cartOrOrderId = snapshot(this.cartOrOrder$).id;\n this.sentryLogger.error('Failed to calculate seatmap scroll to seat', {\n message: e.message,\n stack: e.stack.substr(0, 500),\n flightNumber: this.flight.flightNumber,\n cabinClass: this.flight.cabinClass,\n // A quick filter for PNR's, so that only cart ids are reported to Sentry.\n id: cartOrOrderId.length === 6 ? null : cartOrOrderId,\n });\n }\n\n seatElement.scrollIntoView({\n behavior: 'auto',\n block: 'nearest',\n inline: isCenterable ? 'center' : 'nearest',\n });\n\n if (focus) {\n seatElement.focus({ preventScroll: true });\n }\n });\n }\n\n moveFocus(e: Event, el: string): void {\n stopPropagation(e);\n this.viewportScroller.scrollToAnchor(el);\n }\n\n enableScrollButtons(event: 'left' | 'center' | 'right'): void {\n this.isAtStart = event === 'left';\n this.isAtEnd = event === 'right';\n }\n\n openAirplaneModal(): void {\n this.aircraftModalOpen = true;\n const fragmentKey = `fragments.airCraftInfo.${this.getAircraftTranslationKey()}.url`;\n this.subscriptions.add(\n this.languageService\n .translate(fragmentKey)\n .pipe(\n filter(Boolean),\n switchMap((url) => this.templateService.load(url))\n )\n .subscribe((template) => this.aircraftInformationTemplate$.next(template))\n );\n this.gtmService.seatMapEvent('aircraft-info-modal', ElementTypes.MODAL, '', ElementActions.VIEW, {\n flightInfo: getSeatMapFlight(this.flight),\n });\n }\n\n setBenefitDetails(flight: FinnairItineraryItemFlight, order: FinnairOrder | FinnairCart): void {\n const bound = order.bounds.find((bound) =>\n bound.itinerary.some((itinerary: FinnairItineraryItemFlight) => itinerary.id === flight.id)\n );\n const hasFareFamilySeatBenefit = order.benefits?.[bound.fareFamily.code]?.translatedBenefitRows.find(\n (benefit) => benefit.key === BENEFITS.seatSelection\n )?.isPositive;\n const hasCorporateSeatBenefit =\n !hasFareFamilySeatBenefit && order.otherInformation?.corporateUserInformation?.isEligibleForSeatBenefit;\n if (this.configService.cfg.enableCorporateSeatBenefit && hasCorporateSeatBenefit) {\n this.benefitTextKey = 'seatMap.benefits.corporateBenefitDescription';\n this.benefitTag = {\n textKey: 'seatMap.benefits.corporateBenefitTag',\n theme: TagTheme.DEFAULT,\n icon: {\n name: SvgLibraryIcon.B2B,\n },\n };\n }\n }\n\n private getAircraftTranslationKey(): string | undefined {\n const code = this.flight.aircraft.code;\n if (!AIRCRAFT_TRANSLATION_MAP[code]) {\n this.sentryLogger.error('Invalid aircraft model', { aircraft: this.flight.aircraft });\n }\n\n return AIRCRAFT_TRANSLATION_MAP[code];\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.flight) {\n this.flight$.next(changes.flight.currentValue);\n }\n }\n}\n","\n

\n {{ 'seatMap.passengersTitle' | finLocalization }}\n

\n
\n \n \n
\n {{ passenger.traveler.firstName }} {{ passenger.traveler.lastName }}\n \n ({{ 'seatMap.and' | finLocalization }} {{ passenger.withInfantFullName }} )\n \n , {{ passenger.seatNumber }}\n \n \n
\n \n
\n\n
\n \n \n
\n","import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport {\n BehaviorSubject,\n combineLatest,\n distinctUntilChanged,\n map,\n Observable,\n Subscription,\n tap,\n withLatestFrom,\n} from 'rxjs';\n\nimport { unsubscribe } from '@fcom/core/utils';\nimport { ElementActions, ElementTypes, SelectOption } from '@fcom/common/interfaces';\nimport { LanguageService } from '@fcom/ui-translate';\nimport { GtmService } from '@fcom/common/gtm';\nimport { FinnairItineraryItemFlight, FinnairServiceItem } from '@fcom/dapi/api/models';\nimport { IconButtonSize, IconButtonTheme } from '@fcom/ui-components';\n\nimport { getSeatMapFlight, servicesForFlightAndTravelerId } from '../../../utils';\nimport { SeatMapTraveler } from '../../../../ancillaries/interfaces';\n\n@Component({\n selector: 'fin-seat-passengers',\n templateUrl: './seat-passengers.component.html',\n styleUrls: ['./seat-passengers.component.scss'],\n})\nexport class SeatPassengersComponent implements OnInit, OnChanges, OnDestroy {\n @Input() passengers$: Observable;\n @Input() flight: FinnairItineraryItemFlight;\n @Input() includedSeats: FinnairServiceItem | null;\n\n @Output() selectPax: EventEmitter = new EventEmitter();\n @Output() clearSeatSelection: EventEmitter<{ passengerId: string; seatNumber: string; exitRow: boolean }> =\n new EventEmitter();\n\n readonly IconButtonSize = IconButtonSize;\n readonly IconButtonTheme = IconButtonTheme;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n passengerForm: FormGroup;\n options$: Observable;\n subscriptions: Subscription = new Subscription();\n activeTravelerIndex$ = new BehaviorSubject(1);\n\n constructor(\n private formBuilder: FormBuilder,\n private languageService: LanguageService,\n private gtmService: GtmService\n ) {}\n\n ngOnInit(): void {\n this.createForm();\n this.passengerForm = this.formBuilder.group({\n activeTravelerId: new FormControl(null),\n });\n\n this.subscriptions.add(\n this.passengerForm\n .get('activeTravelerId')\n .valueChanges.pipe(withLatestFrom(this.passengers$))\n .subscribe(([activeTravelerId, passengers]) => {\n this.selectPax.emit(activeTravelerId);\n const activeTraveler = this.getActiveTraveler(passengers);\n\n if (this.activeTravelerIndex$.getValue() !== activeTraveler.index + 1) {\n this.activeTravelerIndex$.next(activeTraveler.index + 1);\n }\n })\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!changes.passengers || !this.passengerForm) {\n return;\n }\n\n const idControl = this.passengerForm.get('activeTravelerId') as FormControl;\n const activeTraveler = this.getActiveTraveler(changes.passengers.currentValue);\n\n if (idControl.value !== activeTraveler.id) {\n idControl.setValue(activeTraveler.id);\n }\n\n if (this.activeTravelerIndex$.getValue() !== activeTraveler.index + 1) {\n this.activeTravelerIndex$.next(activeTraveler.index + 1);\n }\n }\n\n ngOnDestroy(): void {\n unsubscribe(this.subscriptions);\n }\n\n getActiveTraveler(passengers: SeatMapTraveler[]): {\n id: string;\n index: number;\n } {\n return {\n id: passengers.find((traveler) => traveler.active).id,\n index: passengers.findIndex((traveler) => traveler.active),\n };\n }\n\n createForm(): void {\n this.options$ = combineLatest([this.languageService.translate('seatMap.and'), this.passengers$]).pipe(\n distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\n tap(([_withInfantLabel, passengers]) => {\n const activeTraveler = this.getActiveTraveler(passengers);\n\n this.passengerForm.get('activeTravelerId').setValue(activeTraveler.id);\n }),\n map(([withInfantLabel, passengers]) => {\n return passengers.map((passenger) => {\n const paxName = `${passenger.traveler.firstName} ${passenger.traveler.lastName}`;\n const paxNameWithInfant = `${paxName} ${withInfantLabel} ${passenger.withInfantFullName}`;\n const seatNumber = passenger.seatNumber ? `, ${passenger.seatNumber}` : '';\n\n return {\n name: `${passenger.withInfant ? paxNameWithInfant : paxName}${seatNumber}`,\n value: passenger.id,\n };\n });\n })\n );\n }\n\n handleClick(passengerId: string, index: number): void {\n this.selectPax.emit(passengerId);\n\n this.gtmService.seatMapEvent(`pax-select-${index + 1}`, ElementTypes.BUTTON, '', ElementActions.CLICK, {\n flightInfo: getSeatMapFlight(this.flight),\n });\n }\n\n clearSelection(passengerId: string): void {\n const alreadyIncludedSeat = servicesForFlightAndTravelerId(this.includedSeats, this.flight.id, passengerId)[0];\n\n this.clearSeatSelection.emit({ passengerId, seatNumber: alreadyIncludedSeat?.seatNumber ?? null, exitRow: false });\n }\n}\n","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnDestroy, Output, ViewChild } from '@angular/core';\n\nimport { BehaviorSubject, distinctUntilChanged, Observable, Subject, Subscription } from 'rxjs';\nimport { debounceTime, map, take, withLatestFrom } from 'rxjs/operators';\n\nimport { compareAsJson, unsubscribe } from '@fcom/core/utils';\nimport { ElementActions, ElementTypes, GaContext } from '@fcom/common/interfaces';\nimport { GtmService } from '@fcom/common/gtm';\nimport { FinnairServiceItem } from '@fcom/dapi/api/models';\n\nimport { getInitials, getSeatInfoForTracking, getSeatMapFlight, servicesForFlightAndTravelerId } from '../../../utils';\nimport { FlightWithStreams, SeatMapTraveler } from '../../../interfaces';\n\n@Component({\n selector: 'fin-seat-map-renderer',\n styleUrls: ['./seat-map-renderer.component.scss'],\n templateUrl: './seat-map-renderer.component.html',\n})\nexport class SeatMapRendererComponent implements AfterViewInit, OnDestroy {\n @Input() flight: FlightWithStreams;\n @Input() passengers$: Observable;\n @Input() unavailableSeatLabel: string;\n @Input() includedSeats: FinnairServiceItem | null;\n\n @Output() updatePosition: EventEmitter<'left' | 'center' | 'right'> = new EventEmitter();\n @Output() selectSeat: EventEmitter<{ passengerId: string; seatNumber: string; exitRow: boolean }> =\n new EventEmitter();\n @Output() updateScrollPosition: EventEmitter = new EventEmitter();\n\n @ViewChild('seatMap') seatMap: ElementRef;\n @ViewChild('seatMapWrapper') seatMapWrapper: ElementRef;\n\n activePax$: Observable;\n scrollPositionWatcher$ = new BehaviorSubject<'left' | 'center' | 'right'>('left');\n subscriptions: Subscription = new Subscription();\n templates: { [key: string]: () => SVGGElement } = {\n selected: () => this.seatMap.nativeElement.querySelector('.seat-selected-template')?.cloneNode(true),\n unavailable: () => this.seatMap.nativeElement.querySelector('.seat-unavailable-template')?.cloneNode(true),\n };\n\n scrollEvents$: Subject = new Subject();\n readonly scrollDebounceTime = 200;\n\n constructor(private gtmService: GtmService) {}\n\n ngAfterViewInit(): void {\n this.setWrapperWidth();\n this.activePax$ = this.passengers$.pipe(\n map((passengers) => {\n return passengers.find((passenger) => passenger.active);\n }),\n distinctUntilChanged((prev, curr) => {\n return prev.id === curr.id;\n })\n );\n\n /* Whenever there's a change in passengers, we will mark seats with correct templates (unavailable, selected) for all passengers. */\n this.subscriptions.add(\n this.passengers$.pipe(distinctUntilChanged(compareAsJson)).subscribe((passengers) => {\n this.resetSeatView(passengers[0].id);\n\n passengers.forEach((passenger) => {\n if (passenger.active) {\n this.markSeatsUnavailableForPax(passenger.id);\n this.bringSelectedSeatTemplateOnTop(passenger.id);\n }\n\n if (passenger.seatNumber) {\n this.addSelectedSeatTemplateToPax(passenger);\n }\n\n if (passenger.originalSeatNumber) {\n this.addOriginalSeatForPax(passenger);\n }\n });\n })\n );\n\n this.subscriptions.add(\n this.scrollPositionWatcher$.pipe(distinctUntilChanged()).subscribe((position) => {\n this.updatePosition.emit(position);\n })\n );\n\n this.subscriptions.add(\n this.scrollEvents$.pipe(debounceTime(this.scrollDebounceTime)).subscribe((position) => {\n this.updateScrollPosition.emit(position);\n this.gtmService.trackElement(\n 'seatmap-full',\n GaContext.SEAT_MAP,\n ElementTypes.BUTTON,\n '',\n ElementActions.SCROLL\n );\n })\n );\n }\n\n ngOnDestroy(): void {\n unsubscribe(this.subscriptions);\n }\n\n addOriginalSeatForPax(passenger: SeatMapTraveler): void {\n const seatToSelect = this.seatMap.nativeElement.querySelector(`[data-id=\"${passenger.originalSeatNumber}\"]`);\n seatToSelect.classList.add('current-seat');\n }\n\n markSeatsUnavailableForPax(paxId: string): void {\n this.seatMap.nativeElement.querySelectorAll(`[data-${paxId.toLowerCase()}=\"unavailable\"]`).forEach((seat) => {\n const seatLink = seat.querySelector('a');\n const template = this.templates.unavailable();\n const originalAriaLabel = seatLink.getAttribute('aria-label');\n const seatNumber = seat.getAttribute('data-id');\n const occupiedSeat = seat.classList.contains('seat-occupied');\n\n seatLink.setAttribute('aria-label', `${seatNumber}, ${this.unavailableSeatLabel}`);\n seatLink.setAttribute('data-original-aria-label', originalAriaLabel);\n\n if (!occupiedSeat) {\n template.classList.remove('seat-unavailable-template');\n template.classList.add('seat-unavailable');\n seatLink.appendChild(template);\n }\n });\n }\n\n addSelectedSeatTemplateToPax(passenger: SeatMapTraveler): void {\n const initials = getInitials(passenger.traveler.firstName, passenger.traveler.lastName);\n const template = this.templates.selected();\n const seatToSelect = this.seatMap.nativeElement.querySelector(`[data-id=\"${passenger.seatNumber}\"] a`);\n\n const ariaLabel = seatToSelect.getAttribute('aria-label');\n seatToSelect.setAttribute(\n 'aria-label',\n `${ariaLabel}. ${passenger.traveler.firstName} ${passenger.traveler.lastName}`\n );\n\n template.classList.remove('seat-selected-template');\n template.classList.add('seat-selected');\n template.querySelector('.pax-label').innerHTML = initials;\n template.querySelector('.code-label').innerHTML = passenger.seatNumber;\n seatToSelect.appendChild(template);\n }\n\n bringSelectedSeatTemplateOnTop(paxId: string): void {\n /* The seat-selected template is added before seat-unavailable template in the DOM.\n Thus it's not visible when changing to a pax with an infant, because we mark certain seats unavailable.\n We need to bring the selected seat template on top in the DOM. */\n this.seatMap?.nativeElement?.querySelectorAll(`[data-${paxId.toLowerCase()}=\"unavailable\"]`).forEach((seat) => {\n const seatLink = seat.querySelector('a');\n const selectedSeat = seatLink?.querySelector('.seat-selected');\n\n if (selectedSeat) {\n seatLink.removeChild(selectedSeat); // first remove selectedSeat template from underneath unavailable seat template\n seatLink.appendChild(selectedSeat);\n }\n });\n }\n\n removeSeatSelection(passengerId: string, originalSeatNumber: string = null): void {\n this.selectSeat.emit({\n passengerId,\n seatNumber: originalSeatNumber,\n exitRow: false,\n });\n }\n\n resetSeatView(paxId: string): void {\n const rootSelector = `[data-${paxId.toLowerCase()}]`;\n const selectedOrUnavailable = `${rootSelector} .seat-selected, ${rootSelector} .seat-unavailable`;\n\n this.seatMap.nativeElement.querySelectorAll(selectedOrUnavailable).forEach((node) => {\n if (node) {\n const originalAriaLabel = node.parentNode.getAttribute('data-original-aria-label');\n const ariaLabel = node.parentNode.getAttribute('aria-label');\n\n if (originalAriaLabel) {\n node.parentNode.setAttribute('aria-label', originalAriaLabel);\n node.parentNode.removeAttribute('data-original-aria-label');\n }\n\n node.parentNode.setAttribute('aria-label', ariaLabel?.split('.')[0]);\n node.parentNode.removeChild(node);\n }\n });\n }\n\n handleSeatClick(event: MouseEvent): void {\n event.preventDefault();\n const seatElement = (event.target as Element).closest('.seat');\n\n if (!seatElement) {\n return;\n }\n\n this.subscriptions.add(\n this.activePax$.pipe(take(1), withLatestFrom(this.passengers$)).subscribe(([activePax, passengers]) => {\n const isAvailableForPax = seatElement?.getAttribute(`data-${activePax.id.toLowerCase()}`) === 'available';\n const seatId = seatElement.getAttribute('data-id');\n const isExitRow = Boolean(seatElement.getAttribute('data-exitrow'));\n const currentSelectedSeat = passengers.find((pax) => pax.seatNumber === seatId);\n\n if (!isAvailableForPax && seatId !== activePax.seatNumber && seatId !== activePax.originalSeatNumber) {\n this.trackSeatSelection('seat-unavailable', seatElement, activePax);\n return;\n }\n\n if (this.isIncludedForPassenger(activePax.id, seatId) && seatId !== activePax.originalSeatNumber) {\n return;\n }\n\n if (!currentSelectedSeat || (activePax.seatNumber === seatId && activePax.originalSeatNumber)) {\n this.selectSeat.emit({\n passengerId: activePax.id,\n seatNumber: !currentSelectedSeat ? seatId : activePax.originalSeatNumber,\n exitRow: isExitRow,\n });\n this.trackSeatSelection('seat-selected', seatElement, activePax);\n return;\n }\n\n this.trackSeatSelection('seat-cleared', seatElement, activePax);\n this.removeSeatSelection(currentSelectedSeat.id, currentSelectedSeat.originalSeatNumber);\n })\n );\n }\n\n handleScroll(): void {\n const seatMapElement = this.seatMapWrapper.nativeElement;\n const divWidth = seatMapElement.clientWidth;\n const seatMapWidth = seatMapElement.scrollWidth;\n const scrollLeft = Math.round(seatMapElement.scrollLeft); // Use rounding to get rid of half pixels\n this.scrollEvents$.next(scrollLeft);\n\n const isAtStart = scrollLeft === 0;\n const isAtEnd = scrollLeft === seatMapWidth - divWidth;\n const value = isAtStart ? 'left' : isAtEnd ? 'right' : 'center';\n\n this.scrollPositionWatcher$.next(value);\n }\n\n setWrapperWidth(): void {\n const svg = this.seatMap.nativeElement.querySelector('svg');\n const svgWidth = svg?.getAttribute('data-optimal-width');\n if (svgWidth) {\n this.seatMap.nativeElement.setAttribute('style', `width: ${svgWidth}px`);\n }\n }\n\n private trackSeatSelection(\n id: 'seat-selected' | 'seat-cleared' | 'seat-unavailable',\n seatElement: Element,\n activePax: SeatMapTraveler\n ): void {\n this.subscriptions.add(\n this.flight.seatMap$.pipe(take(1)).subscribe((seatMap) => {\n this.gtmService.seatMapEvent(id, ElementTypes.BUTTON, 'cta', ElementActions.CLICK, {\n seatInfo: getSeatInfoForTracking(seatMap, seatElement, activePax),\n flightInfo: getSeatMapFlight(this.flight),\n });\n })\n );\n }\n\n private isIncludedForPassenger(passengerId: string, seatId: string): boolean {\n return servicesForFlightAndTravelerId(this.includedSeats, this.flight.id, passengerId).some(\n ({ seatNumber }) => seatNumber === seatId\n );\n }\n}\n","
\n
\n
\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { Observable, Subscription } from 'rxjs';\n\nimport { unsubscribe } from '@fcom/core/utils';\nimport { ElementActions, ElementTypes, GaContext } from '@fcom/common/interfaces';\nimport { GtmService } from '@fcom/common/gtm';\n\nimport { FlightWithStreams } from '../../../interfaces';\n\n@Component({\n selector: 'fin-seat-map-mini-map',\n templateUrl: './seat-map-mini-map.component.html',\n styleUrls: ['./seat-map-mini-map.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class SeatMapMiniMapComponent implements OnDestroy, OnChanges, AfterViewInit {\n @Input() flight: FlightWithStreams;\n @Input() viewPortWidth$: Observable;\n @Input() scrollPosition: number;\n\n @Output() scrollTo: EventEmitter = new EventEmitter();\n @Output() keyScrollDirection: EventEmitter<'left' | 'right'> = new EventEmitter();\n\n @ViewChild('selectedArea') selectedArea: ElementRef;\n @ViewChild('seatMapContainer') seatMapContainer: ElementRef;\n @ViewChild('wrapper') wrapper: ElementRef;\n\n svgWidth: number;\n subscription = new Subscription();\n\n constructor(private gtmService: GtmService) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.scrollPosition) {\n this.setNewAreaPosition();\n }\n }\n\n ngAfterViewInit(): void {\n this.subscription.add(\n this.viewPortWidth$.subscribe((viewPortWidth) => {\n if (!viewPortWidth) {\n return;\n }\n const container = this.seatMapContainer.nativeElement;\n this.svgWidth = container.querySelector('svg')?.getAttribute('data-optimal-width');\n if (this.svgWidth) {\n const visibleAreaPercentage = viewPortWidth / this.svgWidth;\n this.selectedArea.nativeElement.style.width = `${container.offsetWidth * visibleAreaPercentage}px`;\n }\n })\n );\n\n this.setNewAreaPosition();\n }\n\n ngOnDestroy(): void {\n unsubscribe(this.subscription);\n }\n\n handleClick(e: MouseEvent): void {\n const parentWidth = this.seatMapContainer.nativeElement.offsetWidth;\n const parentLeft = this.seatMapContainer.nativeElement.getBoundingClientRect().left;\n const areaWidth = this.selectedArea.nativeElement.offsetWidth;\n\n const newPosition = e.clientX - parentLeft - areaWidth / 2;\n this.setSelectedAreaPosition(newPosition);\n\n this.scrollTo.emit((Math.max(0, newPosition) / parentWidth) * this.svgWidth);\n this.gtmService.trackElement('seatmap-mini', GaContext.SEAT_MAP, ElementTypes.BUTTON, '', ElementActions.CLICK);\n }\n\n setSelectedAreaPosition(newPosition: number): void {\n const parentWidth = this.seatMapContainer.nativeElement.offsetWidth;\n const areaWidth = this.selectedArea.nativeElement.offsetWidth;\n\n const parentBorder = (this.wrapper.nativeElement.offsetWidth - this.wrapper.nativeElement.clientWidth) / 2;\n const totalBorderWidth = this.getTotalBorderWidth();\n const minPosition = totalBorderWidth * -1;\n\n if (newPosition < minPosition) {\n newPosition = minPosition;\n }\n if (newPosition + areaWidth > parentWidth + totalBorderWidth) {\n newPosition = parentWidth - areaWidth + (totalBorderWidth / 2 + parentBorder);\n }\n\n requestAnimationFrame(() => {\n this.selectedArea.nativeElement.style.left = `${newPosition}px`;\n });\n }\n\n getTotalBorderWidth(): number {\n if (!this.selectedArea) {\n return 0;\n }\n\n const selectedAreaBorder =\n (this.selectedArea.nativeElement.offsetWidth - this.selectedArea.nativeElement.clientWidth) / 2;\n const parentBorder = (this.wrapper.nativeElement.offsetWidth - this.wrapper.nativeElement.clientWidth) / 2;\n\n return selectedAreaBorder + parentBorder;\n }\n\n setNewAreaPosition(): void {\n const borderWidth = this.getTotalBorderWidth();\n\n requestAnimationFrame(() => {\n let newPosition = (this.scrollPosition / this.svgWidth) * this.seatMapContainer.nativeElement.offsetWidth;\n\n if (newPosition === 0) {\n newPosition = -borderWidth;\n }\n\n this.setSelectedAreaPosition(newPosition);\n });\n }\n\n onKeyDown(event: KeyboardEvent): void {\n if (event.key === 'ArrowRight') {\n this.keyScrollDirection.emit('left');\n } else if (event.key === 'ArrowLeft') {\n this.keyScrollDirection.emit('right');\n }\n }\n\n clickFront(): void {\n this.scrollTo.emit(0);\n }\n\n clickBack(): void {\n this.scrollTo.emit(this.svgWidth);\n }\n}\n","
\n
\n \n \n \n
\n
\n
\n \n
\n
\n
\n \n \n \n
\n\n","
\n

{{ 'seatMap.seatTypesTitle' | finLocalization }}

\n \n \n
\n\n
\n \n
\n
\n \n {{ seatType.icon }}\n \n
\n
\n
{{ seatType.label | finLocalization }}
\n
\n \n {{ seatType.originalPrice | finPrice }},\n {{ seatType.price | finPrice }}\n \n \n {{ seatType.price | finPrice }}\n \n
\n
\n
\n \n
\n\n\n\n \n
\n \n
\n \n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n \n \n\n","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\nimport { IconLibrary, SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { combineLatest, distinctUntilChanged, filter, map, Observable } from 'rxjs';\n\nimport { Cabin, FinnairAmount, SeatInfo, SeatmapSvgAndControlData, SeatPrice } from '@fcom/dapi/api/models';\nimport { AIRCRAFT_TRANSLATION_MAP } from '@fcom/common/interfaces/seat-map.interface';\nimport { ButtonSize, TagTheme, IconButtonSize, IconButtonTheme, IconPosition, ModalButtons } from '@fcom/ui-components';\nimport { equals, isPresent, uniqueBy } from '@fcom/core/utils';\nimport { CmsArticle } from '@fcom/core-api';\nimport { FragmentService } from '@fcom/common/services';\nimport { GtmService } from '@fcom/common/gtm';\nimport { ElementActions, ElementTypes } from '@fcom/common/interfaces';\n\nimport { getSeatMapFlight, getSeatPrice, getSeatType } from '../../../utils';\nimport { FlightWithStreams, SeatMapTraveler, seatTypeInfo } from '../../../interfaces';\n\nexport interface SeatChipData {\n article$: Observable;\n className: string;\n label: string;\n icon: string;\n originalPrice: FinnairAmount;\n price: FinnairAmount;\n seat: SeatInfo;\n seatType: {\n className: string;\n label: string;\n cmsKey: string;\n };\n}\n\n@Component({\n selector: 'fin-seat-map-seatchips',\n templateUrl: './seat-map-seatchips.component.html',\n styleUrls: ['./seat-map-seatchips.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SeatMapSeatChipsComponent implements OnInit {\n @Input() flight: FlightWithStreams;\n @Input() passengers$: Observable;\n @Input() seatMapElement: ElementRef;\n\n @Output() scrollToSeat: EventEmitter = new EventEmitter();\n\n availableSeatTypes$: Observable;\n availableSeatTypesInModal: SeatChipData[];\n\n readonly ButtonSize = ButtonSize;\n readonly IconButtonSize = IconButtonSize;\n readonly IconButtonTheme = IconButtonTheme;\n readonly IconLibrary = IconLibrary;\n readonly IconPosition = IconPosition;\n readonly ModalButtons = ModalButtons;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n readonly TagTheme = TagTheme;\n\n seatIconCache: Record = {};\n seatTypeModalOpen = false;\n\n constructor(\n private fragmentService: FragmentService,\n private gtmService: GtmService\n ) {}\n\n ngOnInit(): void {\n this.availableSeatTypes$ = combineLatest([this.passengers$, this.flight.seatMap$]).pipe(\n filter(([passengers, seatMap]) => Array.isArray(passengers) && isPresent(seatMap)),\n distinctUntilChanged(\n ([prevPassengers, prevSeatMapData], [nextPassengers, nextSeatMapData]) =>\n equals(prevSeatMapData, nextSeatMapData) && equals(prevPassengers, nextPassengers)\n ),\n map(([passengers, seatMapData]) => {\n const activePax = passengers.find((pax) => pax.active);\n const hasInfant = passengers.some((pax) => pax.withInfant);\n const selectedSeats = passengers\n .map((pax) => {\n return pax.seatNumber;\n })\n .filter(Boolean);\n\n return this.getSeatTypesFromData(activePax.id, hasInfant, seatMapData, selectedSeats);\n })\n );\n }\n\n getSeatTypesFromData(\n paxId: string,\n hasInfant: boolean,\n seatMap: SeatmapSvgAndControlData,\n selectedSeats: string[]\n ): SeatChipData[] {\n let seatTypeChips: SeatChipData[] = [];\n\n seatMap.seats\n .filter((seat) => {\n return seat.statuses[paxId] === 'available';\n })\n .forEach((seat) => {\n const seatType = getSeatType(seat.characteristics);\n const seatPrice = getSeatPrice(seat, paxId);\n\n const seatsOfSameTypeAndPrice = seatTypeChips.filter((addedSeat) => {\n const isSameSeatType = addedSeat.seatType.className === seatType.className;\n\n if (!isSameSeatType) {\n return false;\n }\n\n return addedSeat.price?.amount === seatPrice?.price?.amount;\n });\n\n if (seatsOfSameTypeAndPrice.length) {\n seatTypeChips = this.showSelectedSeatOnlyWhenLastOneOfThatTypeAndPrice(\n seat,\n seatType,\n seatPrice,\n selectedSeats,\n seatTypeChips\n );\n } else {\n seatTypeChips.push({\n ...seatType,\n article$: this.fragmentService.getFragment(this.getFragmentUrl(seatMap, seatType.cmsKey)),\n icon: this.getIconFromSeatMap(seat),\n price: getSeatPrice(seat, paxId).price,\n originalPrice: getSeatPrice(seat, paxId).originalPrice,\n seat,\n seatType,\n });\n }\n });\n\n // if none of the passengers has an infant, we filter out baby bassinet seat chips\n if (!hasInfant) {\n seatTypeChips = seatTypeChips.filter((chip) => chip.seatType.className !== seatTypeInfo.B.className);\n }\n\n // First, sort by type and price\n seatTypeChips.sort((a, b) => {\n if (a.className === b.className) {\n return parseFloat(a.price.amount) - parseFloat(b.price.amount);\n }\n return a.className.localeCompare(b.className);\n });\n\n // Calculate the minimum price for each type\n const minPriceByType = this.findMinPriceByType(seatTypeChips);\n\n // Sort the array based on the type and price\n seatTypeChips.sort((a, b) => {\n if (minPriceByType[a.className] === minPriceByType[b.className]) {\n return a.className.localeCompare(b.className);\n }\n return Number(minPriceByType[a.className]) - Number(minPriceByType[b.className]);\n });\n\n this.availableSeatTypesInModal = seatTypeChips.filter(uniqueBy((seatTypeChip) => seatTypeChip.className));\n\n return seatTypeChips;\n }\n\n findMinPriceByType(arr: SeatChipData[]): Record {\n return arr.reduce((minPriceByType, item) => {\n if (!minPriceByType[item.className] || item.price.amount < minPriceByType[item.className]) {\n minPriceByType[item.className] = item.price.amount;\n }\n return minPriceByType;\n }, {});\n }\n\n /**\n * For performance reasons we pass in the seatType and seatPrice, so we don't figure out the values again.\n *\n * Because this is called for every seat (so for example 300 seats on the A350) it can be quite heavy.\n */\n showSelectedSeatOnlyWhenLastOneOfThatTypeAndPrice(\n seat: SeatInfo,\n seatType: SeatChipData['seatType'],\n seatPrice: SeatPrice,\n selectedSeats: string[],\n seatTypeChips: SeatChipData[]\n ): SeatChipData[] {\n const seatToReplace = seatTypeChips.find((seatTypeChip) => {\n const isSameSeatType = seatTypeChip.seatType.className === seatType.className;\n\n return (\n isSameSeatType &&\n seatTypeChip.price?.amount === seatPrice?.price?.amount &&\n selectedSeats.includes(seatTypeChip.seat.seatNumber)\n );\n });\n\n if (!seatToReplace) {\n return seatTypeChips;\n }\n\n return seatTypeChips.map((seatTypeChip) => {\n if (seatToReplace.seat.seatNumber === seatTypeChip.seat.seatNumber) {\n seatToReplace.seat = seat;\n seatToReplace.icon = this.getIconFromSeatMap(seat);\n }\n\n return seatTypeChip;\n });\n }\n\n /**\n * Extract from the main SVG a copy of the seat icon for a specific seat.\n *\n * Removes the A tag from the seat and keeps everything else.\n * Removes xy coordinates from the seat element.\n */\n getIconFromSeatMap(seat: SeatInfo): string {\n if (this.seatIconCache[seat.seatNumber]) {\n return this.seatIconCache[seat.seatNumber];\n }\n\n const element: SVGGElement = this.seatMapElement.nativeElement\n .querySelector(`[data-id=\"${seat.seatNumber}\"]`)\n .cloneNode(true);\n\n const aTag = element.querySelector('a');\n\n Array.from(aTag.childNodes).forEach((node) => {\n if ((node as SVGGElement).classList.contains('seat-selected')) {\n return;\n }\n\n element.append(node);\n });\n element.removeAttribute('transform');\n element.removeChild(aTag);\n\n this.seatIconCache[seat.seatNumber] = element.outerHTML;\n\n return this.seatIconCache[seat.seatNumber];\n }\n\n handleClick(seatData: SeatChipData): void {\n this.scrollToSeat.emit(seatData.seat.seatNumber);\n this.gtmService.seatMapEvent(\n `seat-type-${seatData.seatType.cmsKey}`,\n ElementTypes.BUTTON,\n 'chip',\n ElementActions.CLICK,\n {\n flightInfo: getSeatMapFlight(this.flight),\n }\n );\n }\n\n openModal(): void {\n this.seatTypeModalOpen = true;\n this.gtmService.seatMapEvent('seat-type-info-modal', ElementTypes.MODAL, '', ElementActions.VIEW, {\n flightInfo: getSeatMapFlight(this.flight),\n });\n }\n\n closeModal(): void {\n this.seatTypeModalOpen = false;\n }\n\n private getFragmentUrl(seatMap: SeatmapSvgAndControlData, characteristicKey: string): string {\n const cabinClass = Cabin[this.flight.cabinClass];\n const aircraftType = AIRCRAFT_TRANSLATION_MAP[seatMap.aircraftCode];\n return `fragments.seatTypeInfos.${aircraftType}.${cabinClass.toLowerCase()}.${characteristicKey}.url`;\n }\n}\n","\n \n\n\n
\n
\n \n
\n {{ 'MMB.includedProducts.cabinBaggage.infantAllowance' | finLocalization }}\n
\n \n \n
\n \n
\n \n
\n \n
\n\n\n \n\n\n\n
    \n
  • \n \n \n
    \n {{ 'MMB.includedProducts.serviceCategory.' + cat.key + '.title' | finLocalization }}\n
    \n \n \n {{ 'actions.modify' | finLocalization }}\n \n
    \n \n
    \n \n {{ 'actions.pay' | finLocalization }}\n \n \n \n\n
      \n
    • \n
      \n \n \n \n \n \n {{ 'MMB.includedProducts.availableForSell.' + service.subCategory + '.text' | finLocalization }}\n \n \n
      \n @if (service.includedInTierBenefit && service.parameters?.isCorporate) {\n \n \n \n {{ 'MMB.includedProducts.corporateBenefitTag' | finLocalization }}\n \n \n } @else if (cat.tierLevel && service.includedInTierBenefit) {\n \n \n {{\n 'MMB.includedProducts.chip.text' | finLocalization: { tier: cat.tierLevel }\n }}\n \n }\n \n
    • \n
    \n
  • \n
\n
\n\n\n \n \n {{ 'MMB.services.seat.checkBoardingPassStatus' | finLocalization }}\n \n \n \n {{ 'MMB.services.seat.assignedAtAirportStatus' | finLocalization }}\n \n \n\n\n\n \n \n \n \n
\n \n
\n \n {{ serviceInfo.service.totalPrice | finPrice }}\n \n \n
\n
\n \n
\n \n \n
\n
\n\n\n {{\n service.includedInTierBenefit\n ? service.displayName\n : ('MMB.includedProducts.' + service.subCategory + '.text'\n | finLocalization\n : {\n seatNumber: service.seatNumber,\n amount: service.quantity,\n weight: service.parameters?.baggageWeight,\n displayName: service.displayName,\n }\n | finEmpty: service.displayName)\n }}\n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\nimport { IconLibrary, SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { Observable } from 'rxjs';\n\nimport { ButtonTheme, IconPosition, TagTheme } from '@fcom/ui-components';\nimport { SubCategory } from '@fcom/dapi/api/models/sub-category';\nimport { GroupedServices, RemovedServiceInfo } from '@fcom/dapi/interfaces';\nimport { Category } from '@fcom/dapi/api/models/category';\nimport { MediaQueryService } from '@fcom/common/services';\nimport { LoaderType } from '@fcom/common/interfaces';\nimport { FinnairPassengerServiceSelectionItem } from '@fcom/dapi/api/models';\n\nimport { isNotIncludedService } from '../../../../utils/common-booking.utils';\n\nconst CABIN_WEIGHT_VARIANTS = ['CABIN_WEIGHT', 'CABIN_WEIGHT_COMBINED', 'CABIN_WEIGHT_COMBINED_OLD'];\n\n@Component({\n selector: 'fin-grouped-services',\n templateUrl: 'grouped-services.component.html',\n styleUrls: ['../../../../assets/helper-classes.scss', 'grouped-services.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GroupedServicesComponent implements OnInit {\n readonly ButtonTheme = ButtonTheme;\n readonly Category = Category;\n readonly LoaderType = LoaderType;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n readonly TagTheme = TagTheme;\n readonly isNotIncludedService = isNotIncludedService;\n readonly IconPosition = IconPosition;\n readonly IconLibrary = IconLibrary;\n\n @Input()\n category: Category;\n\n @Input()\n groupedServices: GroupedServices[];\n\n @Input()\n loading: boolean;\n\n @Input()\n enableUpsellMMB: boolean = false;\n\n @Input()\n isCarrierConnect = false;\n\n @Input()\n isShoppingCart = false;\n\n @Input()\n isInfant: boolean;\n\n @Input()\n serviceRemovalInProgress: boolean;\n\n @Output() selectProduct: EventEmitter = new EventEmitter();\n\n @Output() removeProduct: EventEmitter = new EventEmitter();\n\n @Output() continuePurchase: EventEmitter = new EventEmitter();\n\n expandOpen = false;\n\n filteredGroupedServices: GroupedServices[];\n\n cabinWeight: number;\n\n isMobile$: Observable;\n\n constructor(private mediaQueryService: MediaQueryService) {}\n\n ngOnInit(): void {\n this.isMobile$ = this.mediaQueryService.isBreakpoint$('mobile');\n\n this.filteredGroupedServices = this.groupedServices.map((groupedService) => {\n const services = this.enableUpsellMMB\n ? groupedService.services.filter((service) => ![SubCategory.CABIN_WEIGHT].includes(service.subCategory))\n : groupedService.services;\n return {\n ...groupedService,\n services,\n };\n });\n\n this.cabinWeight = this.category === Category.CABIN_BAGGAGE ? this.getCabinWeight(this.groupedServices) : 0;\n }\n\n onSelectProduct(): void {\n this.selectProduct.emit(true);\n }\n\n private getCabinWeight(groupedServices: GroupedServices[]): number {\n return (\n groupedServices\n .flatMap((groupedService) => groupedService.services)\n .find((service) => CABIN_WEIGHT_VARIANTS.includes(service.variant))?.parameters?.baggageWeight ?? 0\n );\n }\n\n onRemoveProduct(service: FinnairPassengerServiceSelectionItem): void {\n this.removeProduct.emit({\n category: this.category,\n variant: service.variant,\n seatNumber: service.seatNumber,\n });\n }\n}\n","\n \n \n \n\n \n \n\n \n
    \n
  • {{ 'MMB.includedProducts.availableForSell.lounge.plusTireBenefit.child' | finLocalization }}
  • \n
  • {{ 'MMB.includedProducts.availableForSell.lounge.plusTireBenefit.guest' | finLocalization }}
  • \n
\n \n\n 0\"\n class=\"block ms-medium-b\"\n [title]=\"'MMB.includedProducts.availableForSell.meal.infoTitle' | finLocalization\"\n >\n
    \n
  • {{ item.displayName }}
  • \n
\n \n\n \n
\n \n
\n {{ 'MMB.includedProducts.availableForSell.seat.notAY' | finLocalization }}\n
\n
\n
\n\n \n \n \n
\n \n \n
\n\n \n \n \n
\n \n\n
\n \n\n \n {{ 'ancillaries.saf.impactOfContributionTitle' | finLocalization }}\n \n\n \n \n
\n

\n {{ 'ancillaries.saf.contributionThankYouTitle' | finLocalization }}\n

\n \n {{ 'ancillaries.saf.readMore.text' | finLocalization }}\n
\n \n
\n\n \n\n\n\n {{ pax.firstName }} {{ pax.lastName }}\n\n \n \n {{ pax.firstName }} {{ pax.lastName }} ({{\n 'passenger.withInfant' | finLocalization: { withInfantFullName: pax.associatedInfantName } | finToLowerCase: ''\n }})\n \n\n \n {{\n 'MMB.labels.travellingWithInfant'\n | finLocalization: { firstName: pax.firstName, lastName: pax.lastName, infantName: pax.associatedInfantName }\n }}\n \n \n\n\n\n
\n \n \n \n \n
\n
\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { filter, map, switchMap, take } from 'rxjs/operators';\nimport { BehaviorSubject, combineLatest, Observable, of, Subscription } from 'rxjs';\n\nimport { CmsArticle } from '@fcom/core-api/interfaces';\nimport { finShare } from '@fcom/rx';\nimport { ButtonMode, ButtonTheme, IconPosition, NotificationTheme } from '@fcom/ui-components';\nimport { compareAsJson, groupBy, toLookup, unique, unsubscribe } from '@fcom/core/utils';\nimport { ElementActions, ElementTypes, FragmentService, GaContext, GtmEvent, GtmPurchaseFlow } from '@fcom/common';\nimport { GtmService } from '@fcom/common/gtm';\nimport { getGA4ProductsFromSmpProducts } from '@fcom/common/utils/gtm.utils';\nimport {\n FinnairPassengerServiceSelectionItemWithStatus,\n FinnairServiceItemWithUpsell,\n FlightServices,\n RemovedServiceInfo,\n RemovedServiceProgress,\n SelectedServiceData,\n} from '@fcom/dapi/interfaces';\nimport {\n Category,\n FinnairBoundItem,\n FinnairCart,\n FinnairOrder,\n FinnairPassengerCode,\n FinnairPassengerItem,\n FinnairPassengerServiceItem,\n FinnairPassengerServiceSelectionItem,\n FinnairServiceItem,\n FinnairServiceSegmentItem,\n} from '@fcom/dapi/api/models';\n\nimport { SmpProduct } from '../product-list/product-list.component';\nimport { getGroupedServices, isFlight } from '../../../../utils/common-booking.utils';\nimport { getPassengerTierLevel, isBoundBasedCategory } from '../../utils';\n\n@Component({\n selector: 'fin-dapi-included-service',\n styleUrls: ['./included-service.component.scss'],\n templateUrl: './included-service.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IncludedServiceComponent implements OnDestroy, OnInit, OnChanges {\n readonly Category = Category;\n readonly FinnairPassengerCode = FinnairPassengerCode;\n readonly NotificationTheme = NotificationTheme;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n readonly ButtonTheme = ButtonTheme;\n readonly ButtonMode = ButtonMode;\n readonly IconPosition = IconPosition;\n\n private subscriptions: Subscription = new Subscription();\n\n @Input() service: FinnairServiceItemWithUpsell;\n @Input() showAsPending = false;\n @Input() cartOrOrder$: Observable;\n @Input() passengers$: Observable = of([]);\n @Input() showUpsellPerPax: boolean = false;\n @Input() showUpsellPaymentButton = true;\n @Input() includeSeatActionButtons = false;\n @Input() showClearPendingSeatsButton = false;\n @Input() products$: Observable = new BehaviorSubject([]);\n @Input() gtmFlow: GtmPurchaseFlow = GtmPurchaseFlow.MANAGE_BOOKING;\n @Input() gaContext: GaContext = GaContext.MANAGE_BOOKING;\n @Input() isCarrierConnect = false;\n @Input() includeAssignAtAirportStatus = false;\n @Input() showNonAYSeats = false;\n @Input() removeProgressInfo$: Observable = of({ removeInProgress: false });\n @Input() isShoppingCart = false;\n @Input() groupServicesByBound = false;\n\n @Output() selectProduct: EventEmitter = new EventEmitter();\n @Output() continuePurchase: EventEmitter = new EventEmitter();\n @Output() removeProduct: EventEmitter = new EventEmitter();\n @Output() viewSeatmap: EventEmitter = new EventEmitter();\n @Output() clearPendingSeats: EventEmitter = new EventEmitter();\n\n serviceSegmentItems$: Observable;\n serviceSubject$: BehaviorSubject = new BehaviorSubject(null);\n hasNonAySegments$: Observable;\n safProductInfo$: Observable;\n safThankYouForJoiningUsNotification$: Observable;\n isModalOpened = false;\n\n constructor(\n private gtmService: GtmService,\n private fragmentService: FragmentService\n ) {}\n\n ngOnInit(): void {\n this.serviceSubject$.next(this.service);\n this.serviceSegmentItems$ = this.findServiceInAllFlights();\n this.hasNonAySegments$ = this.serviceSegmentItems$.pipe(\n map((segments) => segments.some((seg) => seg.operatingAirline.code !== 'AY'))\n );\n\n this.safProductInfo$ = this.serviceSubject$.pipe(\n filter((service) => service.category === Category.SAF),\n switchMap(() => this.fragmentService.getFragment('fragments.services.productInfo.saf.contributeUrl'))\n );\n this.safThankYouForJoiningUsNotification$ = this.serviceSubject$.pipe(\n filter((service) => service.category === Category.SAF),\n switchMap(() => this.fragmentService.getFragment('fragments.thankYouForJoiningUs.url'))\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.service && !changes.service.isFirstChange()) {\n this.serviceSubject$.next(this.service);\n }\n }\n\n private findServiceInAllFlights(): Observable {\n const isPassengerSelected = (\n selectedPassengers: FinnairPassengerItem[],\n passengerServiceItem: FinnairPassengerServiceItem\n ): boolean =>\n selectedPassengers.length === 0 || selectedPassengers.some(({ id }) => id === passengerServiceItem.id);\n\n return combineLatest([\n this.cartOrOrder$,\n combineLatest([this.passengers$, this.serviceSubject$]).pipe(\n map(([passengers, service]) =>\n service.category === Category.SEAT\n ? passengers.filter((pax) => pax.passengerTypeCode !== FinnairPassengerCode.INF)\n : passengers\n )\n ),\n this.serviceSubject$,\n this.removeProgressInfo$,\n ]).pipe(\n map(([order, selectedPassengers, service, removeInProgressInfo]) => {\n const { bounds, serviceCatalog } = order;\n const variantsWeCanSell =\n serviceCatalog?.categories\n ?.flatMap((serviceCategory) =>\n Object.values(serviceCategory.services).flatMap((servicesForFragment) =>\n Object.values(servicesForFragment).flatMap((passengerServices) =>\n passengerServices.flatMap((passengerService) => passengerService.variant)\n )\n )\n )\n .filter(unique) ?? [];\n const allFlights = bounds.flatMap((bound) => bound.itinerary).filter(isFlight);\n const flightById = toLookup(allFlights, (flight) => flight.id);\n\n const serviceCatalogPerCategory = serviceCatalog?.categories.find(\n ({ category }) =>\n category === this.service.category &&\n [\n Category.CABIN_BAGGAGE,\n Category.BAGGAGE,\n Category.SEAT,\n Category.MEAL,\n Category.WIFI,\n Category.SPORT,\n Category.LOUNGE,\n Category.PET,\n Category.SAF,\n Category.COVER,\n ].includes(category)\n );\n\n const allServiceSegments: FinnairServiceSegmentItem[] = service.bounds.flatMap(({ segments }) => segments);\n const serviceSegmentsByFlightId = groupBy(allServiceSegments, (segment) => segment.id);\n\n const serviceBySegments = Object.entries(serviceSegmentsByFlightId)\n .map(([flightId, serviceSegmentsForFlight]) => {\n const passengerServices = serviceSegmentsForFlight\n .flatMap(({ passengers }) => passengers)\n .filter((passenger) => isPassengerSelected(selectedPassengers, passenger));\n\n const passengerIncludedServices = passengerServices.map((passenger) =>\n passenger.services.filter((s) => s.includedInTicketType)\n );\n\n const complimentaryServices =\n service.category === Category.MEAL\n ? passengerIncludedServices.reduce((shared, services) => {\n return shared.filter((value) => services.some((service) => service.variant === value.variant));\n })\n : [];\n\n const variantsToRemove = complimentaryServices.map((service) => service.variant);\n\n const flightPassengers = passengerServices\n .map((passenger) => {\n const boundId = Object.keys(serviceCatalogPerCategory?.lowestPrice || {}).find((boundId) =>\n boundId.includes(flightId)\n );\n\n const isAvailableForSellServices =\n boundId && serviceCatalogPerCategory?.lowestPrice[boundId][passenger.id] && this.showUpsellPerPax;\n\n const showedServices =\n service.category === Category.MEAL\n ? passenger.services.filter((service) => !variantsToRemove.includes(service.variant))\n : passenger.services;\n\n return {\n ...passenger,\n passengerTypeCode: selectedPassengers.find((p) => p.id === passenger.id)?.passengerTypeCode,\n groupedServices: getGroupedServices(\n showedServices,\n getPassengerTierLevel(passenger.id, selectedPassengers),\n variantsWeCanSell,\n isAvailableForSellServices\n ? [\n {\n id: '',\n subCategory: `${service.category}`,\n totalPrice: serviceCatalogPerCategory?.lowestPrice[boundId][passenger.id].money,\n } as unknown as FinnairPassengerServiceSelectionItem,\n ]\n : [],\n this.isCarrierConnect,\n this.includeAssignAtAirportStatus\n ),\n };\n })\n .filter((passenger) => passenger.groupedServices.length > 0);\n\n const serviceSegmentItem = serviceSegmentsForFlight[serviceSegmentsForFlight.length - 1];\n const flight = flightById[flightId];\n\n return {\n ...serviceSegmentItem,\n operatingAirline: flight.operatingAirline,\n passengers: flightPassengers,\n complimentaryServices,\n } as FlightServices;\n })\n .filter((s) => s.passengers?.length > 0 || s.complimentaryServices.length > 0);\n const flightServices =\n this.groupServicesByBound && isBoundBasedCategory(this.service.category)\n ? this.mergeServicesForBound(serviceBySegments, bounds)\n : serviceBySegments;\n return this.updateRemovalStatus(flightServices, removeInProgressInfo);\n }),\n finShare()\n );\n }\n\n private updateRemovalStatus(flightServices: FlightServices[], removedServiceInfo: RemovedServiceProgress) {\n return flightServices.map((flightService) => {\n return {\n ...flightService,\n passengers: flightService.passengers.map((pax) => {\n return {\n ...pax,\n groupedServices: pax.groupedServices.map((groupedService) => {\n return {\n ...groupedService,\n services: groupedService.services.map((service) => {\n return {\n ...service,\n removeInProgress: this.isRemoveInProgressForService(\n removedServiceInfo,\n flightService,\n pax.id,\n service\n ),\n };\n }),\n };\n }),\n };\n }),\n };\n });\n }\n\n private isRemoveInProgressForService(\n removedServiceInfo: RemovedServiceProgress,\n flightServices: FlightServices,\n paxId: string,\n service: FinnairPassengerServiceSelectionItemWithStatus\n ) {\n return (\n removedServiceInfo.removeInProgress &&\n removedServiceInfo.service.category === this.service.category &&\n paxId === removedServiceInfo.service.travelerId &&\n (flightServices.id === removedServiceInfo.service.fragmentId ||\n flightServices.id === removedServiceInfo.service.boundId) &&\n (this.service.category === Category.SEAT\n ? service.seatNumber === removedServiceInfo.service.seatNumber\n : service.variant === removedServiceInfo.service.variant)\n );\n }\n\n private mergeServicesForBound(flightServices: FlightServices[], bounds: FinnairBoundItem[]): FlightServices[] {\n return bounds\n .map((bound) => {\n const flightIds = bound.itinerary.filter(isFlight).map((f) => f.id);\n const allFlightServicesInBound = flightServices.filter((flightService) => flightIds.includes(flightService.id));\n if (allFlightServicesInBound.length === 0) {\n return null;\n }\n const servicesGroupedByBound = [\n {\n ...allFlightServicesInBound[0],\n departure: bound.departure,\n arrival: bound.arrival,\n id: bound.id,\n },\n ];\n return this.isSegmentServicesIdentical(allFlightServicesInBound)\n ? servicesGroupedByBound\n : allFlightServicesInBound;\n })\n .filter((bound) => !!bound)\n .reduce((allServices, currentServices) => {\n return [...allServices, ...currentServices];\n }, []);\n }\n\n private isSegmentServicesIdentical(flightServices: FlightServices[]): boolean {\n return flightServices.every((flightService) =>\n compareAsJson(flightService.passengers, flightServices[0].passengers)\n );\n }\n\n onContinuePurchase(): void {\n this.gtmService.trackElement(\n 'continue-to-review_view-cta',\n this.gaContext,\n ElementTypes.BUTTON,\n undefined,\n ElementActions.CLICK\n );\n this.continuePurchase.emit(true);\n }\n\n onRemoveProduct(productInfo: RemovedServiceInfo, paxId: string, segmentId: string): void {\n this.removeProduct.emit({\n ...productInfo,\n travelerId: paxId,\n fragmentId: segmentId,\n });\n }\n\n onSelectProduct(category: Category, fragmentId: string, paxId: string): void {\n this.selectProduct.emit({\n category,\n fragmentId,\n paxId,\n });\n\n this.subscriptions.add(\n combineLatest([this.products$, this.cartOrOrder$])\n .pipe(\n take(1),\n filter(([products]) => products.length > 0)\n )\n .subscribe(([products, cartOrOrder]) => {\n const matchedProduct = products.find((product) => product.category === category);\n\n this.gtmService.ecommerceEventGA4(\n GtmEvent.SELECT_ITEM,\n getGA4ProductsFromSmpProducts([matchedProduct], this.gtmFlow, cartOrOrder.bounds)\n );\n })\n );\n }\n\n ngOnDestroy(): void {\n this.subscriptions = unsubscribe(this.subscriptions);\n }\n}\n","

0\" class=\"flex flex--middle font-body-1 ms-small-x\">\n \n \n \n {{ cityName | titlecase }} - \n \n \n {{ operatedByText }}\n \n \n

\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\n\nimport { LocationInfoMap } from '@fcom/dapi/interfaces';\nimport { getCityName } from '@fcom/common/utils/booking.utils';\n\n@Component({\n selector: 'fin-included-product-heading',\n templateUrl: './included-product-heading.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IncludedProductHeadingComponent implements OnInit, OnChanges {\n @Input() locationCodes: string[] = [];\n\n @Input()\n locations: LocationInfoMap;\n\n @Input()\n operatedByText: string | undefined;\n\n showLocations: string[];\n\n ngOnInit(): void {\n this.showLocations = this.locationCodes.map((locationCode) => getCityName(locationCode, this.locations));\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!changes['locationCodes']?.firstChange) {\n this.showLocations = this.locationCodes.map((locationCode) => getCityName(locationCode, this.locations));\n }\n }\n}\n","\n {{\n useCabinClass && bound.cabinClass\n ? ('travelClass.' + bound.cabinClass.toLowerCase() | finLocalization)\n : (bound.fareFamily?.name | titlecase)\n }}\n\n\n\n \n {{ 'MMB.includedProducts.tickets.readMoreAboutEconomy.text' | finLocalization }}\n \n \n\n\n\n {{ 'MMB.includedProducts.tickets.readMoreAboutBusiness.text' | finLocalization }}\n\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\n\nimport { LocationInfoMap } from '@fcom/dapi/interfaces';\nimport { FinnairBoundItem, FinnairCabinClass } from '@fcom/dapi/api/models';\n\n@Component({\n selector: 'fin-included-tickets',\n templateUrl: './included-tickets.component.html',\n styleUrls: ['included-tickets.component.scss', '../../../../../common-booking/assets/helper-classes.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IncludedTicketsComponent {\n readonly FinnairCabinClass = FinnairCabinClass;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n @Input() locations: LocationInfoMap;\n @Input() bound: FinnairBoundItem;\n @Input() useCabinClass: boolean;\n}\n","\n
\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n {{ 'actions.from' | finLocalization }}\n
\n
\n {{ service.upsell?.lowestPrice ?? service.totalPrice | finPrice }}\n
\n
\n \n \n \n \n \n \n
\n
\n \n\n\n \n

\n
\n
\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { Observable } from 'rxjs';\n\nimport { ButtonMode, ButtonSize, ButtonTheme, IconButtonTheme, IconPosition } from '@fcom/ui-components';\nimport { FragmentService, LoaderType, MediaQueryService } from '@fcom/common';\nimport { CmsArticle } from '@fcom/core-api/interfaces';\nimport { Category } from '@fcom/dapi/api/models';\nimport { BoundWithServices, FinnairServiceItemWithUpsell } from '@fcom/dapi/interfaces';\n\n@Component({\n selector: 'fin-upsell-card',\n templateUrl: 'upsell-card.component.html',\n styleUrls: ['../../../../assets/helper-classes.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UpsellCardComponent implements OnInit {\n readonly ButtonMode = ButtonMode;\n readonly ButtonSize = ButtonSize;\n readonly ButtonTheme = ButtonTheme;\n readonly IconButtonTheme = IconButtonTheme;\n readonly Category = Category;\n readonly IconPosition = IconPosition;\n readonly LoaderType = LoaderType;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n isMobile$: Observable;\n\n @Input()\n service: FinnairServiceItemWithUpsell;\n\n @Input() boundWithServices: BoundWithServices;\n\n @Output()\n upsellClicked: EventEmitter = new EventEmitter();\n\n article$: Observable;\n\n constructor(\n private fragmentService: FragmentService,\n private mediaQueryService: MediaQueryService\n ) {\n this.isMobile$ = this.mediaQueryService.isBreakpoint$('mobile');\n }\n\n ngOnInit(): void {\n this.article$ = this.fragmentService.getFragment(this.service.upsell.articleKey);\n }\n}\n","
\n \n \n \n\n \n \n\n
\n \n \n
\n \n
\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { CmsArticle, CmsTemplate } from '@fcom/core-api/interfaces';\nimport { FragmentService } from '@fcom/common';\nimport { ButtonTheme, ModalButtons } from '@fcom/ui-components';\nimport { finShare } from '@fcom/rx';\nimport { Category } from '@fcom/dapi/api/models';\n\n@Component({\n selector: 'fin-information-modal',\n templateUrl: 'information-modal.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InformationModalComponent implements OnInit {\n readonly ModalButtons = ModalButtons;\n readonly ButtonTheme = ButtonTheme;\n\n @Input()\n category: Category;\n\n @Input()\n upsell = false;\n\n showModal = false;\n\n modalArticle$: Observable;\n\n translationPrefix: string;\n\n @Output()\n upsellClicked: EventEmitter = new EventEmitter();\n\n constructor(private fragmentService: FragmentService) {}\n\n ngOnInit(): void {\n this.translationPrefix = `ancillaries.${this.category}.moreInfo`;\n this.modalArticle$ = this.fragmentService\n .getFragment(`${this.translationPrefix}.modal.article.url`)\n .pipe(\n map((article) => {\n return {\n header: [],\n main: [article],\n footer: [],\n };\n }),\n finShare()\n );\n }\n\n emitUpsellClick(): void {\n this.upsellClicked.emit(this.category);\n this.showModal = false;\n }\n}\n","\n \n \n \n\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, OnInit } from '@angular/core';\n\nimport { Category, FinnairBoundItem, FinnairPassengerItem } from '@fcom/dapi/api/models';\nimport { FinnairServiceItemWithUpsell } from '@fcom/dapi/interfaces';\n\nimport { getSummaryForCategory } from '../../../../utils/services-summary.utils';\n\ninterface ServiceSummary {\n quantity?: number;\n description: string;\n text?: string;\n}\n\n@Component({\n selector: 'fin-included-product-item-summary',\n templateUrl: './included-product-item-summary.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IncludedProductItemSummaryComponent implements OnInit, OnChanges {\n @Input() passengers: FinnairPassengerItem[];\n @Input() bound: FinnairBoundItem;\n @Input() service: FinnairServiceItemWithUpsell;\n @Input() isShortHaulFlight: boolean;\n @Input() bodyClass = 'font-body-2';\n protected readonly Category = Category;\n protected serviceSummary: ServiceSummary[] = [];\n\n ngOnChanges(): void {\n this.update();\n }\n\n ngOnInit(): void {\n this.update();\n }\n\n private update() {\n this.serviceSummary = getSummaryForCategory(\n this.service?.category,\n this.bound,\n this.service,\n this.isShortHaulFlight\n );\n }\n}\n","\n
\n {{ 'MMB.services.seats.noneIncluded' | finLocalization }}\n
\n
\n\n \n {{ seat }}\n \n\n 1\">\n \n {{ flightSeats.flight }}:\n \n \n {{ seat }}\n \n \n / \n \n\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, OnInit } from '@angular/core';\n\nimport { FinnairBoundItem, FinnairPassengerItem } from '@fcom/dapi/api/models';\nimport { FinnairServiceItemWithUpsell } from '@fcom/dapi/interfaces';\n\nimport { FlightWithSeats, getSeatsByFlight } from '../../../../utils/services-summary.utils';\n\n@Component({\n selector: 'fin-included-product-item-summary-seat',\n templateUrl: './included-product-item-summary-seat.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IncludedProductItemSummarySeatComponent implements OnInit, OnChanges {\n @Input() passengers: FinnairPassengerItem[];\n @Input() bound: FinnairBoundItem;\n @Input() service: FinnairServiceItemWithUpsell;\n @Input() bodyClass = 'font-body-2';\n protected flightsSeats: FlightWithSeats[] = [];\n\n ngOnChanges(): void {\n this.update();\n }\n\n ngOnInit(): void {\n this.update();\n }\n\n private update() {\n this.flightsSeats = getSeatsByFlight(this.passengers, this.bound, this.service);\n }\n}\n","\n \n {{ item.quantity }} x {{ item.text }}\n {{ item.description | finLocalization: { amount: item.quantity } }}\n \n\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\nimport { ServiceSummaryTranslationKey, ServiceType } from '../../../../utils/services-summary.utils';\n\n/*\n * Used to show the summary for products others than Seats. Products\n * that have a simple way to show the summary as a comma separated\n * list of items that sometimes have a quantity */\n@Component({\n selector: 'fin-included-product-item-summary-other',\n templateUrl: './included-product-item-summary-other.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IncludedProductItemSummaryOtherComponent {\n @Input()\n summary: ServiceSummaryTranslationKey[];\n\n @Input()\n bodyClass = 'font-body-2';\n\n readonly ServiceType = ServiceType;\n}\n","
\n @if (descriptionKey) {\n {{ descriptionKey | finLocalization }}\n }\n @if (tag) {\n \n @if (tag.icon) {\n \n }\n {{ tag.textKey | finLocalization }}\n \n }\n
\n","import { Component, Input } from '@angular/core';\n\nimport { IconSet, TagTheme } from '@fcom/ui-components';\n\nexport interface SeatBenefitTag {\n textKey: string;\n theme?: TagTheme;\n icon?: IconSet;\n}\n\n@Component({\n selector: 'fin-seat-benefit',\n templateUrl: './seat-benefit.component.html',\n styleUrl: './seat-benefit.component.scss',\n})\nexport class SeatBenefitComponent {\n @Input() descriptionKey: string;\n\n @Input() tag: SeatBenefitTag;\n}\n","\n
\n @for (icon of [SvgLibraryIcon.SEAT_OR_ECONOMY, SvgLibraryIcon.PLUS, SvgLibraryIcon.WIFI]; track icon) {\n \n }\n
\n
\n

\n {{ 'ancillaries.bundle.toggle.title' | finLocalization }}\n

\n

\n {{ 'ancillaries.bundle.toggle.description' | finLocalization }}\n

\n
\n
\n
\n -{{ discountPercentage }}%\n
\n \n
\n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\n\nimport { TagTheme, ToggleSwitchStatus } from '@fcom/ui-components';\n\n@Component({\n selector: 'fin-seat-bundle-toggle',\n templateUrl: './seat-bundle-toggle.component.html',\n styleUrls: ['./seat-bundle-toggle.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SeatBundleToggleComponent {\n readonly SvgLibraryIcon = SvgLibraryIcon;\n readonly TagTheme = TagTheme;\n readonly ToggleSwitchStatus = ToggleSwitchStatus;\n\n @Input({ required: true }) discountPercentage: string;\n @Input({ required: true }) active: boolean;\n @Output() bundleToggled: EventEmitter = new EventEmitter();\n\n emitToggle(toggled: boolean): void {\n this.bundleToggled.emit(toggled);\n }\n}\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\n\nimport { Amount } from '@fcom/dapi';\n\n@Injectable()\n@Pipe({\n name: 'finNonZeroAmount',\n pure: true,\n})\nexport class NonZeroAmountPipe implements PipeTransform {\n transform(amount: Amount, active = true): Amount | undefined {\n if (active) {\n if (!amount?.amount || parseFloat(amount.amount) == 0) {\n return undefined;\n }\n }\n\n return amount;\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n/**\n * @deprecated\n *\n * This component is under review and will most likely be removed in the future. If you need to use\n * this please discuss in #design-system channel in slack!\n */\n@Component({\n selector: 'fin-titled-card',\n templateUrl: './titled-card.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TitledCardComponent {\n @Input()\n title: string;\n}\n","
\n
\n {{ title }}\n
\n
\n \n
\n
\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ButtonModule, IconsModule, ProductsModule, UiComponentsModule } from '@fcom/ui-components';\nimport { UiTranslateModule } from '@fcom/ui-translate';\nimport { PipesModule } from '@fcom/common/';\nimport { ComponentsModule } from '@fcom/common/components';\nimport { GtmModule } from '@fcom/common/gtm';\nimport { FinFormsModule } from '@fcom/common/forms';\nimport { CmsModule } from '@fcom/cms/components/cms.module';\nimport { BookingCommonModule } from '@fcom/booking/modules/common/booking-common.module';\n\nimport { CommonBookingComponentsModule } from '../../common-booking.module';\nimport {\n AdditionalInfoComponent,\n AncillaryPriceComponent,\n AncillarySelectionComponent,\n CommonProductSelectionComponent,\n MealDetailsComponent,\n ProductListComponent,\n SeatDetailsComponent,\n} from './components';\nimport { TabsModule } from '../tabs';\nimport { AncillarySubviewModule } from './components/ancillary-subview/ancillary-subview.module';\nimport { ProductExpandComponent } from './components/product-expand/product-expand.component';\nimport { SeatPreSelectionComponent } from './components/seat-map/seat-pre-selection/seat-pre-selection.component';\nimport { SeatMapViewComponent } from './components/seat-map/seat-map-view/seat-map-view.component';\nimport { SeatPassengersComponent } from './components/seat-map/seat-passengers/seat-passengers.component';\nimport { SeatMapRendererComponent } from './components/seat-map/seat-map-renderer/seat-map-renderer.component';\nimport { SeatMapMiniMapComponent } from './components/seat-map/seat-map-mini-map/seat-map-mini-map.component';\nimport { AncillarySeatMapComponent } from './components/seat-map/ancillary-seat-map/ancillary-seat-map.component';\nimport { SeatMapSeatChipsComponent } from './components/seat-map/seat-map-seatchips/seat-map-seatchips.component';\nimport { GroupedServicesComponent } from './components/grouped-services/grouped-services.component';\nimport { IncludedServiceComponent } from './components/included-service/included-service.component';\nimport { IncludedProductHeadingComponent } from './components/included-product-heading/included-product-heading.component';\nimport { IncludedProductsComponent } from './components/included-products/included-products.component';\nimport { IncludedTicketsComponent } from './components/included-tickets/included-tickets.component';\nimport { UpsellCardComponent } from './components/upsell-card/upsell-card.component';\nimport { InformationModalComponent } from './components/information-modal/information-modal.component';\nimport { IncludedProductItemComponent } from './components/included-product-item/included-product-item.component';\nimport { IncludedProductItemSummaryComponent } from './components/included-product-item-summary/included-product-item-summary.component';\nimport { IncludedProductItemSummarySeatComponent } from './components/included-product-item-summary-seat/included-product-item-summary-seat.component';\nimport { IncludedProductItemSummaryOtherComponent } from './components/included-product-item-summary-other/included-product-item-summary-other.component';\nimport { SeatBenefitComponent } from './components/seat-map/seat-benefit/seat-benefit.component';\nimport { SeatBundleToggleComponent } from './components/seat-map/seat-bundle-toggle/seat-bundle-toggle.component';\n\nconst COMPONENTS = [\n ProductListComponent,\n SeatDetailsComponent,\n AncillarySelectionComponent,\n AncillaryPriceComponent,\n MealDetailsComponent,\n AdditionalInfoComponent,\n CommonProductSelectionComponent,\n ProductExpandComponent,\n SeatBenefitComponent,\n SeatBundleToggleComponent,\n SeatPreSelectionComponent,\n SeatMapViewComponent,\n SeatPassengersComponent,\n SeatMapRendererComponent,\n SeatMapMiniMapComponent,\n AncillarySeatMapComponent,\n SeatMapSeatChipsComponent,\n GroupedServicesComponent,\n IncludedServiceComponent,\n IncludedProductHeadingComponent,\n IncludedProductsComponent,\n IncludedTicketsComponent,\n UpsellCardComponent,\n InformationModalComponent,\n IncludedProductItemComponent,\n IncludedProductItemSummaryComponent,\n IncludedProductItemSummarySeatComponent,\n IncludedProductItemSummaryOtherComponent,\n];\n\n@NgModule({\n imports: [\n ButtonModule,\n CommonModule,\n ComponentsModule,\n PipesModule,\n GtmModule,\n IconsModule,\n ProductsModule,\n UiTranslateModule,\n AncillarySubviewModule,\n TabsModule,\n FinFormsModule,\n UiComponentsModule,\n CommonBookingComponentsModule,\n CmsModule,\n BookingCommonModule,\n ],\n declarations: [...COMPONENTS],\n exports: [...COMPONENTS],\n})\nexport class CommonBookingAncillariesModule {}\n","\n
\n

\n {{ 'feedback.multiCitySurveyTitle' | finLocalization }}\n

\n

\n \n {{ 'feedback.multiCitySurveyDescription' | finLocalization }}\n \n \n {{ 'feedback.multiCitySurveyLinkText' | finLocalization }}\n \n

\n
\n\n \n
\n","import { ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit } from '@angular/core';\n\nimport { Store } from '@ngrx/store';\nimport { BehaviorSubject, map, Observable, of, startWith, Subscription, switchMap } from 'rxjs';\n\nimport { BookingAppState } from '@fcom/common/interfaces/booking';\nimport { QualtricsSurveys } from '@fcom/common/qualtrics/qualtrics.utils';\nimport { ConfigService, unsubscribe } from '@fcom/core/index';\nimport { orderData } from '@fcom/common-booking/store';\nimport { FinnairCart, FinnairOrder } from '@fcom/dapi/api/models';\nimport { CartState } from '@fcom/dapi';\nimport { finShare } from '@fcom/rx';\nimport { getProductTripTypeFromBoundsForGA4 } from '@fcom/common/utils/gtm.utils';\nimport { GA4TripType } from '@fcom/common/interfaces';\n\nimport { cartState } from '../../../../store/selectors';\n\n@Component({\n selector: 'fin-multi-city-survey',\n templateUrl: './multi-city-survey.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MultiCitySurveyComponent implements OnInit, OnDestroy {\n @Input() alwaysRender = false;\n\n survey = QualtricsSurveys.MULTI_CITY;\n openSurvey = false;\n enableSurvey$ = new BehaviorSubject(false);\n cartOrOrder$: Observable;\n\n private subscriptions: Subscription = new Subscription();\n\n constructor(\n private configService: ConfigService,\n private store$: Store\n ) {}\n\n ngOnInit(): void {\n const cartState$ = this.store$.pipe(cartState(), startWith(null), finShare());\n const order$ = this.store$.pipe(orderData(), startWith(null), finShare());\n\n this.cartOrOrder$ = order$.pipe(\n switchMap((order) => {\n return order ? of(order) : cartState$.pipe(map((state: CartState) => state?.cartData));\n })\n );\n\n this.checkIfSurveyShouldBeShown();\n }\n\n ngOnDestroy(): void {\n this.subscriptions = unsubscribe(this.subscriptions);\n }\n\n checkIfSurveyShouldBeShown(): void {\n if (!this.configService.cfg.enableMultiCity) {\n return;\n }\n\n if (this.alwaysRender) {\n this.enableSurvey$.next(true);\n return;\n }\n\n this.subscriptions.add(\n this.cartOrOrder$.subscribe((cartOrOrder) => {\n if (!cartOrOrder) {\n this.enableSurvey$.next(false);\n return;\n }\n\n const tripType = getProductTripTypeFromBoundsForGA4(cartOrOrder?.bounds);\n\n this.enableSurvey$.next(tripType === GA4TripType.MULTICITY);\n })\n );\n }\n}\n","import { Component, ContentChildren, Input, QueryList, OnInit } from '@angular/core';\n\nimport { TabComponent } from './tab.component';\nimport { TabStateService } from './tab-state.service';\n\n@Component({\n selector: 'fin-tab-group',\n templateUrl: 'tab-group.component.html',\n providers: [TabStateService],\n})\nexport class TabGroupComponent implements OnInit {\n @Input()\n tabGroupId: string;\n\n @ContentChildren(TabComponent)\n tabs: QueryList;\n\n constructor(private service: TabStateService) {}\n\n ngOnInit(): void {\n this.service.init(this.tabGroupId);\n }\n}\n","\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { UiTranslateModule } from '@fcom/ui-translate';\nimport { ComponentsModule } from '@fcom/common/components/components.module';\nimport { PipesModule } from '@fcom/common/pipes/pipes.module';\n\nimport { SubviewComponent } from './subview.component';\n\n@NgModule({\n imports: [CommonModule, ComponentsModule, PipesModule, UiTranslateModule],\n declarations: [SubviewComponent],\n exports: [SubviewComponent],\n})\nexport class SubViewModule {}\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\n\nimport { BehaviorSubject, Observable, of, Subscription } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\n\nimport {\n FinnairCart,\n FinnairItineraryItemFlight,\n FinnairOrder,\n FinnairPassengerItem,\n FinnairServiceItem,\n} from '@fcom/dapi/api/models';\nimport { Amount, ServiceCatalogSelectionsForAllTravelers, TravelerService } from '@fcom/dapi/interfaces';\nimport { unsubscribe } from '@fcom/core/utils';\nimport { BookingAppState } from '@fcom/common/interfaces/booking';\n\nimport { EligibilitiesForFragments, FlightWithStreams, SeatChangeEvent } from '../../../interfaces';\nimport { seatSelections } from '../../../../../store';\nimport { servicesForFlightAndTravelerId } from '../../../utils';\nimport { AncillaryLoaderStatus } from '../../../enums';\n\n@Component({\n selector: 'fin-ancillary-seat-map',\n templateUrl: './ancillary-seat-map.component.html',\n})\nexport class AncillarySeatMapComponent implements OnInit, OnDestroy {\n @Input() flight: FlightWithStreams;\n @Input() cartOrOrder$: Observable;\n @Input() passengers$: Observable;\n @Input() seatSelections$: Observable;\n @Input() flightIsActive$: Observable;\n @Input() includedSeats: FinnairServiceItem | null;\n @Input() availability$: Observable = of({});\n @Input() canClearSeats = true;\n @Input() preSelectedPax$: Observable = of(undefined);\n @Input() ancillaryLoader$: BehaviorSubject;\n @Input() notEligibleWhenCheckInClosed = false;\n\n @Output() changeSeats: EventEmitter = new EventEmitter();\n @Output() subtotalChange: EventEmitter = new EventEmitter();\n @Output() retrySeatmap: EventEmitter = new EventEmitter();\n @Output() finishedReassigningSeats: EventEmitter = new EventEmitter();\n\n subscriptions = new Subscription();\n\n constructor(private store$: Store) {}\n\n seatSelected(e: SeatChangeEvent): void {\n this.changeSeats.emit(e);\n this.updateSubTotal();\n }\n\n updateSubTotal(): void {\n this.subscriptions.add(\n this.store$.pipe(seatSelections(), take(1)).subscribe((allSeatSelections) => {\n const priceAndCurrencyCode = (\n allSeatSelections && allSeatSelections[this.flight.id] ? allSeatSelections[this.flight.id] : []\n )\n .filter((seatSelection) => !this.isIncludedSeatSelection(this.includedSeats, this.flight.id, seatSelection))\n .filter((seatSelection) => seatSelection.variant && seatSelection.pricePerItem && !seatSelection.paid)\n .reduce(\n (combined, currentSeatSelection) => {\n return {\n price: combined.price + Number(currentSeatSelection.pricePerItem.amount ?? 0),\n currencyCode: combined.currencyCode ?? currentSeatSelection.pricePerItem.currencyCode,\n };\n },\n { price: 0, currencyCode: undefined }\n );\n\n this.subtotalChange.emit({\n amount: String(priceAndCurrencyCode?.price),\n currencyCode: priceAndCurrencyCode?.currencyCode,\n });\n })\n );\n }\n\n ngOnInit(): void {\n this.updateSubTotal();\n }\n\n ngOnDestroy(): void {\n unsubscribe(this.subscriptions);\n }\n\n private isIncludedSeatSelection(\n includedSeats: FinnairServiceItem | null,\n flightId: string,\n seatSelection: TravelerService\n ): boolean {\n return servicesForFlightAndTravelerId(includedSeats, flightId, seatSelection.travelerId).some(\n ({ seatNumber }) => seatNumber === seatSelection.variant\n );\n }\n\n emitFinishedReassigningSeats(): void {\n this.finishedReassigningSeats.emit();\n }\n}\n","\n\n","\n
\n {{ 'ancillaries.seats.usDotMessage' | finLocalization }}\n \n
\n\n \n \n
\n\n
\n
\n \n \n \n
\n
\n\n\n\n\n\n\n \n {{ 'price.continueButtonTotal' | finLocalization }}: \n {{ totalPrice$ | async | finPrice | finEmpty: '–' }}\n \n\n\n\n \n \n\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\n\nimport { BehaviorSubject, combineLatest, Observable, of, ReplaySubject, Subscription } from 'rxjs';\nimport { map, take } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\n\nimport {\n Category,\n FinnairCart,\n FinnairItineraryItemFlight,\n FinnairOrder,\n FinnairPassengerItem,\n FinnairServiceItem,\n} from '@fcom/dapi/api/models';\nimport { ElementActions, ElementTypes, GtmPurchaseFlow, GtmTripType } from '@fcom/common/interfaces';\nimport { Amount, LocationInfoMap, ServiceCatalogSelectionsForAllTravelers } from '@fcom/dapi/interfaces';\nimport { unsubscribe } from '@fcom/core/utils';\nimport { ButtonPosition, ButtonTheme, ModalButtons } from '@fcom/ui-components';\nimport { BookingAppState } from '@fcom/common/interfaces/booking';\nimport { GtmService } from '@fcom/common/gtm';\nimport { finShare } from '@fcom/rx';\nimport { ConfigService } from '@fcom/core';\nimport { SeatMapStatus } from '@fcom/common/interfaces/seat-map.interface';\n\nimport { EligibilityWithCategory, FlightWithStreams, ItineraryModal, SeatChangeEvent } from '../../../interfaces';\nimport { SeatMapActions, seatSelections } from '../../../../../store';\nimport { calculateSubTotalPrice, getSeatMapFlightInfoFromCart } from '../../../utils';\nimport { getBoundDetailsModalData } from '../../../../../utils/ancillaries.utils';\nimport { AncillaryLoaderStatus } from '../../../enums';\n\n@Component({\n selector: 'fin-seat-pre-selection',\n templateUrl: './seat-pre-selection.component.html',\n styleUrls: ['./seat-pre-selection.component.scss'],\n})\nexport class SeatPreSelectionComponent implements OnInit, OnDestroy {\n readonly Category = Category;\n readonly ButtonTheme = ButtonTheme;\n readonly ButtonPosition = ButtonPosition;\n readonly ModalButtons = ModalButtons;\n readonly SeatMapStatus = SeatMapStatus;\n\n @Input() flights$: Observable;\n @Input() travelers$: Observable;\n @Input() tripType$: Observable;\n @Input() purchaseFlow$: Observable;\n @Input() locations: LocationInfoMap = {};\n @Input()\n flightAncillaryAvailability$: Observable<{ [fragmentId: string]: EligibilityWithCategory[] }>;\n @Input() cartOrOrder$: Observable;\n @Input()\n passengersWithPetcIncompatibleSeats$: Observable<{ [boundId: string]: string[] }> = of({});\n @Input() seatSelections$: Observable;\n @Input() combinedSeats: FinnairServiceItem | null;\n @Input() cartTotalPrice$: Observable;\n @Input() selectionLoading$: Observable;\n\n @Output() preSelectClosed = new EventEmitter();\n @Output() flightSelected = new EventEmitter();\n @Output() seatChanged = new EventEmitter();\n\n slideIndex$ = new BehaviorSubject(0);\n isSideBarOpen = false;\n itineraryModalClosed$: EventEmitter = new EventEmitter();\n subTotalPrice$: Observable;\n hasSelections$: Observable;\n totalPrice$: Observable;\n subscriptions: Subscription = new Subscription();\n itineraryModal: ItineraryModal = {\n open: false,\n data: null,\n };\n translationKey$: BehaviorSubject<{ key?: string; params?: Record }> = new BehaviorSubject(\n {}\n );\n passengers$: Observable;\n showFlightCard$: Observable = of(true);\n ancillaryLoader$: BehaviorSubject = new BehaviorSubject(AncillaryLoaderStatus.OFF);\n seatMapPreloadingEnabled = false;\n private subtotalPriceSub$: ReplaySubject = new ReplaySubject<\n Amount & { category: Category; fragmentId: string }\n >(1);\n\n constructor(\n private store$: Store,\n private gtmService: GtmService,\n private configService: ConfigService\n ) {}\n\n ngOnInit(): void {\n this.seatMapPreloadingEnabled = this.configService.cfg.enableBookingFlowSeatMapPreFetch;\n this.passengers$ = this.cartOrOrder$.pipe(map((cartOrOrder) => cartOrOrder.passengers));\n\n this.subTotalPrice$ = calculateSubTotalPrice(this.subtotalPriceSub$, of(Category.SEAT));\n\n this.totalPrice$ = combineLatest([this.cartTotalPrice$, this.subTotalPrice$]).pipe(\n map(([totalPrice, subTotalPrice]) => ({\n amount: String(Number(totalPrice.amount) + Number(subTotalPrice.amount)),\n currencyCode: totalPrice.currencyCode,\n }))\n );\n\n this.hasSelections$ = this.seatSelections$.pipe(\n map((selections) => Object.values(selections).some((selection) => selection.some((s) => s.seatNumber))),\n finShare()\n );\n\n this.subscriptions.add(\n combineLatest([this.slideIndex$, this.flights$])\n .pipe(\n map(([slideIndex, flights]) => {\n return flights[slideIndex];\n })\n )\n .subscribe((currentFlight) => {\n this.isSideBarOpen = false;\n this.flightSelected.emit(currentFlight);\n this.updateSubTotal(currentFlight.id);\n })\n );\n\n this.subscriptions.add(\n combineLatest([this.slideIndex$, this.flights$, this.hasSelections$]).subscribe(\n ([slideIndex, flights, hasSelections]) => {\n const isLast = slideIndex === flights.length - 1;\n\n this.setTitle(isLast, hasSelections);\n }\n )\n );\n }\n\n subTotalChange(amount: Amount, fragmentId: string): void {\n this.subtotalPriceSub$.next({ ...amount, fragmentId, category: Category.SEAT });\n }\n\n continue(): void {\n this.subscriptions.add(\n combineLatest([this.slideIndex$, this.flights$, this.hasSelections$])\n .pipe(take(1))\n .subscribe(([slideIndex, flights, hasSelections]) => {\n const isLast = slideIndex === flights.length - 1;\n\n if (hasSelections) {\n this.trackEvent('continue-selection');\n }\n\n if (!isLast) {\n this.slideIndex$.next(slideIndex + 1);\n } else if (hasSelections) {\n this.isSideBarOpen = true;\n } else {\n this.confirmSelection();\n }\n })\n );\n }\n\n confirmSelection(): void {\n this.trackEvent('confirm-selection');\n this.isSideBarOpen = false;\n // setTimeout so that sidebar is closed properly before this component is destroyed\n setTimeout(() => {\n this.preSelectClosed.emit(true);\n });\n }\n\n skipSeatSelection(trackElementState: string): void {\n this.trackEvent(`skip-selection-${trackElementState}`, trackElementState);\n // Clear cart only if user has made seat selection to avoid unnecessary back-end calls\n this.subscriptions.add(\n this.hasSelections$.pipe(take(1)).subscribe((hasSelections) => {\n if (hasSelections) {\n this.store$.dispatch(SeatMapActions.clearSelections());\n }\n this.preSelectClosed.emit(hasSelections);\n })\n );\n }\n\n changeSeats(e: SeatChangeEvent): void {\n this.seatChanged.emit(e);\n this.updateSubTotal(e.flightId);\n }\n\n setTitle(isLast: boolean, hasSelections: boolean): void {\n if (hasSelections) {\n if (isLast) {\n this.translationKey$.next({ key: 'actions.next' });\n } else {\n this.translationKey$.next({ key: 'ancillaries.seats.continueToFlight' });\n }\n } else if (isLast) {\n this.translationKey$.next({ key: 'ancillaries.seats.skipSeatSelection' });\n } else {\n this.translationKey$.next({ key: 'ancillaries.seats.skipFlight' });\n }\n }\n\n viewDetails(): void {\n this.itineraryModal = getBoundDetailsModalData(this.cartOrOrder$, this.slideIndex$);\n }\n\n ngOnDestroy(): void {\n unsubscribe(this.subscriptions);\n }\n\n updateSubTotal(flightId: string): void {\n this.subscriptions.add(\n this.store$.pipe(seatSelections(), take(1)).subscribe((allSeatSelections) => {\n const priceAndCurrencyCode = (\n allSeatSelections && allSeatSelections[flightId] ? allSeatSelections[flightId] : []\n )\n .filter((seatSelection) => seatSelection.variant && seatSelection.pricePerItem && !seatSelection.paid)\n .reduce(\n (combined, currentSeatSelection) => {\n return {\n price: combined.price + Number(currentSeatSelection.pricePerItem.amount ?? 0),\n currencyCode: combined.currencyCode ?? currentSeatSelection.pricePerItem.currencyCode,\n };\n },\n { price: 0, currencyCode: undefined }\n );\n\n const amount = {\n amount: String(priceAndCurrencyCode?.price),\n currencyCode: priceAndCurrencyCode?.currencyCode,\n };\n\n this.subtotalPriceSub$.next({ ...amount, fragmentId: flightId, category: Category.SEAT });\n })\n );\n }\n\n private trackEvent(elementName: string, state?: string): void {\n this.subscriptions.add(\n this.cartOrOrder$.pipe(take(1)).subscribe((cart) => {\n this.gtmService.seatMapEvent(elementName, ElementTypes.BUTTON, state, ElementActions.CLICK, {\n flightInfo: getSeatMapFlightInfoFromCart(cart),\n });\n })\n );\n }\n\n /**\n * This is a performance improvement and stops child components being destroyed and recreated when the flights array changes.\n */\n flightsTrackBy(_index: number, flight: FlightWithStreams): string {\n return flight.id;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { IconsModule } from '@fcom/ui-components';\nimport { PipesModule } from '@fcom/common/pipes/pipes.module';\nimport { ComponentsModule } from '@fcom/common/components/components.module';\n\nimport { TabGroupComponent } from './tab-group.component';\nimport { TabHeaderComponent } from './tab-header.component';\nimport { TabLabelComponent } from './tab-label.component';\nimport { TabComponent } from './tab.component';\n\n// Missing stuff that could be handy at some point:\n// - disabled tabs\n// - vertical layout\n// - custom tab styling\n\nconst COMPONENTS = [TabHeaderComponent, TabLabelComponent, TabGroupComponent, TabComponent];\n\n@NgModule({\n imports: [CommonModule, ComponentsModule, PipesModule, IconsModule],\n declarations: [...COMPONENTS],\n exports: [...COMPONENTS],\n})\nexport class TabsModule {}\n","\n \n \n
\n
\n
\n \n
\n
\n
\n
\n
\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\n\nimport { Observable } from 'rxjs';\n\nimport { CmsArticle } from '@fcom/core-api/';\nimport { FragmentService } from '@fcom/common/services';\n\n@Component({\n selector: 'fin-trip-message',\n templateUrl: './trip-message.component.html',\n styleUrls: ['./trip-message.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TripMessageComponent implements OnInit {\n @Input() fragmentKey: string;\n\n tripMessage$: Observable;\n\n constructor(private fragmentService: FragmentService) {}\n\n ngOnInit(): void {\n this.tripMessage$ = this.fragmentService.getFragment(this.fragmentKey);\n }\n}\n","\n \n \n \n\n \n \n \n {{ 'ancillaries.baggage.sportEquipmentNotIncluded' | finLocalization }}\n \n \n \n {{ notification.key | finLocalization }}\n \n \n {{ notification.reason.key | finLocalization: notification.reason.data }}\n \n \n\n \n \n\n \n \n \n \n\n
\n \n \n \n \n\n
0\" class=\"pr-small-x\">\n
1\">\n \n \n
\n \n \n {{\n filter === 'none'\n ? ('ancillaries.show.specialDiet' | finLocalization)\n : ('ancillaries.hide.specialDiet' | finLocalization)\n }}\n \n
\n
\n
\n
\n \n {{ 'ancillaries.noServicesForPax' | finLocalization }}\n \n\n \n \n \n \n \n
\n \n \n \n \n
\n

\n {{ service.translations.title }}\n

\n
\n @if (service.originalPrice) {\n \n {{\n service.originalPrice\n | finPrice\n : {\n roundPrice:\n service.originalPrice && service.originalPrice.amount === '0',\n }\n }}\n \n }\n \n {{\n service.totalPrice\n | finPrice\n : { roundPrice: service.totalPrice && service.totalPrice.amount === '0' }\n }}\n \n
\n\n @if (service.originalPrice) {\n \n \n {{ 'campaign.badge' | finLocalization }}\n \n }\n
\n\n
\n
\n
\n
\n \n \n \n \n \n \n
\n
\n \n\n \n {{ CONFIG[category].toppedQuotaKey | finLocalization }}\n \n \n {{ CONFIG[category].noQuotaLeftKey | finLocalization }}\n \n \n \n \n {{ 'ancillaries.quota.paxQuotaReached' | finLocalization }}\n \n 0 &&\n (service.totalPrice?.amount !== '0' || service.subCategory !== SubCategory.SPECIAL_DIET) &&\n service.inputType !== 'number'\n \"\n [attr.data-testid]=\"'service-notification-paid-' + service.globalId\"\n >\n {{ CONFIG[category]?.alreadyPurchased | finLocalization }}\n \n \n {{ CONFIG[category].blockSelectionNotification | finLocalization }}\n \n \n \n {{ CONFIG[category].quotaLimitKey | finLocalization: { quota: quota.count } }}\n \n \n \n \n \n \n \n \n \n
\n
\n \n \n \n \n \n \n \n\n \n
\n \n {{\n notification.key | finLocalization\n }}\n \n {{ notification.reason.key | finLocalization: notification.reason.data }}\n \n \n\n \n {{ 'services.cannotAdd' | finLocalization }}\n \n
\n \n\n\n\n
\n \n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { BehaviorSubject, combineLatest, Observable, of, Subscription } from 'rxjs';\nimport { distinctUntilChanged, filter, map, startWith, switchMap, take, withLatestFrom } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\n\nimport {\n isEmptyObjectOrHasEmptyValues,\n isNotEmpty,\n PreciseNumber,\n toBoolean,\n unique,\n unsubscribe,\n} from '@fcom/core/utils';\nimport { finShare, snapshot } from '@fcom/rx';\nimport {\n Amount,\n GroupedServices,\n NO_VARIANTS,\n SelectionsPerTraveler,\n ServiceCatalogService,\n ServicePassenger,\n ServicesPerTraveler,\n TravelerService,\n} from '@fcom/dapi/interfaces';\nimport {\n Category,\n FinnairBoundItem,\n FinnairItineraryItemFlight,\n FinnairPassengerItem,\n FinnairPassengerServiceSelectionItem,\n FinnairServiceItem,\n PaxLevelQuota,\n SubCategory,\n} from '@fcom/dapi/api/models';\nimport { LoaderType } from '@fcom/common/interfaces';\nimport {\n AspectRatios,\n ButtonMode,\n ButtonTheme,\n IconPosition,\n ModalButtons,\n NotificationTheme,\n TagTheme,\n} from '@fcom/ui-components';\nimport { BookingAppState } from '@fcom/common/interfaces/booking';\nimport { NON_SCHENGEN_LOUNGES } from '@fcom/booking/utils';\nimport { MediaQueryService, ToasterService } from '@fcom/common/services';\nimport { LanguageService } from '@fcom/ui-translate';\n\nimport {\n findServiceItemsForPassengerForFragment,\n getFilteredTravelers$,\n getPassengerTierLevel,\n getServicesNotifications,\n sumOfPricesForTravelersServiceSelection,\n} from '../../utils';\nimport { QuantityForFragmentAndPassenger, ServicesActions, serviceSelectionsForFragment } from '../../../../store';\nimport {\n ConfirmModal,\n ConfirmModalData,\n EligibilitiesForFragments,\n ExtendedService,\n Notification,\n ProductInputType,\n QuotaType,\n} from '../../interfaces';\nimport { asTravelerService } from '../../../../store/utils/services.utils';\nimport { getGroupedServices } from '../../../../utils/common-booking.utils';\n\nexport enum SelectionState {\n LOADING,\n HAS_SERVICES,\n NO_SERVICES,\n}\n\nexport interface ConfirmModalTranslationKeys {\n title: string;\n firstContentParagraph: string;\n secondContentParagraph: string;\n closeButton: string;\n continueButton: string;\n}\n\ntype TravelerServices = {\n traveler: ServicePassenger;\n services: ExtendedService[];\n selectedServices$: Observable;\n hasServiceSelected$: Observable;\n additionalInfoBlockUrl: string | undefined;\n filters: SubCategoryFilter[];\n selectedFilter$: BehaviorSubject;\n combinedGroupedServices: GroupedServices[];\n};\n\ninterface ProductConfig {\n notSelectedVariant?: string;\n selectServiceKey: string;\n toppedQuotaKey?: string;\n quotaLimitKey?: string;\n noQuotaLeftKey?: string;\n blockSelectionNotification?: string;\n alreadyPurchased: string;\n}\n\nconst CONFIG: Record = {\n [Category.WIFI]: {\n notSelectedVariant: '',\n selectServiceKey: 'ancillaries.wifi.selectWifi',\n alreadyPurchased: 'ancillaries.wifi.alreadyPurchased',\n },\n [Category.MEAL]: {\n notSelectedVariant: '',\n selectServiceKey: 'ancillaries.selectMeals',\n alreadyPurchased: 'ancillaries.meals.alreadyPurchased',\n },\n [Category.LOUNGE]: {\n selectServiceKey: 'ancillaries.selectLounge',\n alreadyPurchased: 'ancillaries.lounge.alreadyPurchased',\n },\n [Category.SPORT]: {\n selectServiceKey: 'ancillaries.selectSport',\n alreadyPurchased: 'ancillaries.sport.alreadyPurchased',\n },\n [Category.CABIN_BAGGAGE]: {\n selectServiceKey: 'ancillaries.cabinBaggage.title',\n alreadyPurchased: 'ancillaries.cabinBaggage.alreadyPurchased',\n },\n [Category.BAGGAGE]: {\n selectServiceKey: 'ancillaries.bags.extraTitle',\n alreadyPurchased: 'ancillaries.bags.alreadyPurchased',\n },\n [Category.PET]: {\n selectServiceKey: 'ancillaries.selectPet',\n quotaLimitKey: 'ancillaries.pet.quota.quotaLimit',\n toppedQuotaKey: 'ancillaries.pet.quota.toppedQuota',\n noQuotaLeftKey: 'ancillaries.pet.quota.noQuotaLeft',\n blockSelectionNotification: 'ancillaries.pet.hasIncompatibleSeat',\n alreadyPurchased: 'ancillaries.pet.alreadyPurchased',\n },\n};\n\ntype SelectionWithCategoryAndFragment = [\n SelectionsPerTraveler,\n Category,\n FinnairItineraryItemFlight | FinnairBoundItem,\n];\n\ninterface TravelerSelections {\n [variantOrRadio: string]: string | boolean | number;\n}\ntype TravelerForm = FormGroup<{ [variantOrRadio: string]: FormControl }>;\n\ntype SubCategoryFilter = SubCategory | 'all' | 'none';\n\nconst COMMON_TOASTER_ID = 'COMMON-TOASTER-ID';\n\n@Component({\n selector: 'fin-common-product-selection',\n templateUrl: 'common-product-selection.component.html',\n styleUrls: ['common-product-selection.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CommonProductSelectionComponent implements OnInit, OnDestroy {\n readonly ButtonMode = ButtonMode;\n readonly ButtonTheme = ButtonTheme;\n readonly Category = Category;\n readonly CONFIG = CONFIG;\n readonly IconPosition = IconPosition;\n readonly LoaderType = LoaderType;\n readonly ModalButtons = ModalButtons;\n readonly NotificationTheme = NotificationTheme;\n readonly QuotaType = QuotaType;\n readonly SelectionState = SelectionState;\n readonly SubCategory = SubCategory;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n readonly TagTheme = TagTheme;\n\n @Input()\n servicesReady$: Observable;\n\n @Input()\n category$: Observable;\n\n @Input()\n flightOrBound$: Observable;\n\n @Input()\n services$: Observable;\n\n @Input()\n includedServices$: Observable = of(null);\n\n @Input()\n combinedServices$: Observable = of(null);\n\n @Input()\n travelers$: Observable;\n\n @Input()\n initialSelectedTravelerId$: Observable = of(undefined);\n\n @Input()\n showConfirmationModalBeforeSelectionForPassengers$: Observable = of([]);\n\n @Input()\n blockSelectionNotification$: Observable = of([]);\n\n @Input()\n confirmModalData$: BehaviorSubject = new BehaviorSubject({ open: false });\n\n @Input()\n availability$: Observable = of({});\n\n @Input()\n serviceQuantityMap$: Observable = of({});\n\n @Input()\n paxLevelQuota$: Observable = of({ combinedQuota: 0, variants: [] });\n\n @Output()\n subtotalChange: EventEmitter = new EventEmitter();\n\n @Output()\n modalConfirmed: EventEmitter = new EventEmitter();\n\n form: FormGroup<{ [travelerId: string]: TravelerForm }>;\n state$: Observable;\n additionalText: string | undefined;\n travelersAndServices$: Observable;\n initialTravelerIdSelected$: Observable;\n serviceTabGroupId: string;\n notifications$: Observable;\n showSportNotification$: Observable;\n blockingNotifications$: Observable;\n aspectRatio$: Observable;\n isTabletDown$: Observable;\n flightOrBound: FinnairItineraryItemFlight | FinnairBoundItem;\n category: Category;\n\n private subscriptions: Subscription = new Subscription();\n\n constructor(\n private store$: Store,\n private fb: FormBuilder,\n private mediaQueryService: MediaQueryService,\n private languageService: LanguageService,\n private toasterService: ToasterService,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n this.form = new FormGroup({});\n\n this.isTabletDown$ = this.mediaQueryService.isBreakpoint$('tablet_down');\n this.aspectRatio$ = this.isTabletDown$.pipe(map((isTabletDown) => (isTabletDown ? '21x9' : '1x1')));\n\n const baseStream$ = combineLatest([this.category$, this.flightOrBound$]).pipe(\n distinctUntilChanged((a, b) => a[0] === b[0] && a[1].id === b[1].id)\n );\n this.subscriptions.add(\n baseStream$.subscribe(([category, flightOrBound]) => {\n this.category = category;\n this.flightOrBound = flightOrBound;\n this.serviceTabGroupId = `${category}-${flightOrBound.id}-travelers`;\n this.additionalText = this.getAdditionalText(category, flightOrBound);\n this.cdr.markForCheck();\n })\n );\n\n const filteredTravelers$: Observable = getFilteredTravelers$(this.travelers$);\n\n this.setupForm(baseStream$, filteredTravelers$);\n this.setupTravelersAndServices(baseStream$, filteredTravelers$);\n\n this.state$ = combineLatest([\n this.servicesReady$.pipe(startWith(false)),\n this.travelersAndServices$.pipe(map(isNotEmpty), startWith(false)),\n ]).pipe(\n map(([servicesReady, hasServices]: [boolean, boolean]) => {\n if (!servicesReady) {\n return SelectionState.LOADING;\n }\n if (hasServices) {\n return SelectionState.HAS_SERVICES;\n }\n return SelectionState.NO_SERVICES;\n }),\n distinctUntilChanged(),\n finShare()\n );\n\n // == Tabs ==\n this.initialTravelerIdSelected$ = combineLatest([this.travelersAndServices$, this.initialSelectedTravelerId$]).pipe(\n map(([travelersWithServices, initialTravelerId]) => initialTravelerId ?? travelersWithServices[0]?.traveler.id)\n );\n\n this.notifications$ = combineLatest([this.services$, this.availability$, this.category$, this.flightOrBound$]).pipe(\n map(([services, availability, category, flightOrBound]) =>\n getServicesNotifications(services, availability, category, flightOrBound)\n ),\n finShare()\n );\n\n this.blockingNotifications$ = this.notifications$.pipe(\n map((notifications) => notifications.filter((n) => n.blockSelection))\n );\n\n this.showSportNotification$ = this.category$.pipe(\n map((category) => {\n return category === Category.BAGGAGE;\n })\n );\n }\n\n ngOnDestroy(): void {\n this.toasterService.removeMessage(COMMON_TOASTER_ID);\n this.subscriptions = unsubscribe(this.subscriptions);\n }\n\n clickInput(event: Event, service: ExtendedService, flightOrBoundId: string, travelerId: string): void {\n if (service.useConfirmModal) {\n event.preventDefault();\n this.modalConfirmed.emit({\n variant: service.variant,\n flightOrBoundId: flightOrBoundId,\n travelerId: travelerId,\n });\n }\n }\n\n addQuantity(service: ExtendedService, flightOrBoundId: string, travelerId: string): void {\n const currentValue = +this.form.controls[travelerId]?.controls[service.variant].value;\n const quantity = currentValue + 1;\n\n if (service.useConfirmModal) {\n this.modalConfirmed.emit({\n variant: service.variant,\n quantity,\n flightOrBoundId: flightOrBoundId,\n travelerId: travelerId,\n });\n } else {\n this.form.controls[travelerId]?.controls[service.variant]?.setValue(quantity);\n }\n }\n\n removeQuantity(service: ExtendedService, flightOrBoundId: string, travelerId: string): void {\n const currentValue = +this.form.controls[travelerId]?.controls[service.variant].value;\n const quantity = currentValue - 1;\n\n if (service.useConfirmModal) {\n this.modalConfirmed.emit({\n variant: service.variant,\n quantity,\n flightOrBoundId: flightOrBoundId,\n travelerId: travelerId,\n });\n } else {\n this.form.controls[travelerId]?.controls[service.variant]?.setValue(quantity);\n }\n }\n\n private getAdditionalInfoBlock(services: ExtendedService[], category: Category): string | undefined {\n if (category === Category.LOUNGE) {\n return services.filter((service) => NON_SCHENGEN_LOUNGES.includes(service.variant))?.length > 0\n ? 'fragments.nonSchengenLoungeContent.url'\n : 'fragments.schengenLoungeContent.url';\n }\n return `fragments.services.productInfo.${category}.url`;\n }\n\n private getAdditionalText(\n category: Category,\n flightOrBound: FinnairItineraryItemFlight | FinnairBoundItem\n ): string | undefined {\n if (category === Category.WIFI) {\n if ((flightOrBound as FinnairItineraryItemFlight).isShortHaul) {\n return 'ancillaries.wifi.shorthaulAdditionalInformation';\n }\n return 'ancillaries.wifi.additionalInformation';\n }\n return undefined;\n }\n\n private setupForm(\n baseStream$: Observable<[Category, FinnairItineraryItemFlight | FinnairBoundItem]>,\n filteredTravelers$: Observable\n ): void {\n this.subscriptions.add(\n this.confirmModalData$\n .pipe(\n withLatestFrom(this.flightOrBound$),\n filter(\n ([data, flightOrBound]) =>\n data.confirmData?.variant &&\n data.confirmData?.travelerId &&\n flightOrBound.id === data.confirmData?.flightOrBoundId &&\n !data.open\n )\n )\n .subscribe(([{ confirmData }]) => {\n if (this.form.controls[confirmData.travelerId].controls['radio']) {\n this.form.controls[confirmData.travelerId].controls['radio'].setValue(confirmData.variant);\n } else if (confirmData.quantity) {\n this.form.controls[confirmData.travelerId].controls[confirmData.variant].setValue(confirmData.quantity);\n } else {\n this.form.controls[confirmData.travelerId].controls[confirmData.variant].setValue(true);\n }\n })\n );\n\n this.subscriptions.add(\n baseStream$\n .pipe(\n switchMap(([category, flightOrBound]) => {\n return combineLatest([\n of(category),\n this.store$.pipe(\n serviceSelectionsForFragment(flightOrBound.id, category)\n ),\n filteredTravelers$.pipe(\n map((travelers) => travelers.map((traveler) => traveler.id)),\n distinctUntilChanged()\n ),\n this.services$,\n this.includedServices$,\n ]).pipe(take(1));\n })\n )\n .subscribe(([category, initialSelections, travelerIds, services, includedServices]) => {\n travelerIds.forEach((travelerId: string) => {\n this.form.removeControl(travelerId, { emitEvent: false });\n const initialServices: TravelerService[] = [].concat(initialSelections?.[travelerId] ?? []);\n const travelerForm: TravelerForm = this.fb.group({});\n if (this.isRadioDisplay()) {\n const includedServicesForTravelerAndFragment = findServiceItemsForPassengerForFragment(\n this.category,\n includedServices,\n travelerId,\n this.flightOrBound.id\n );\n travelerForm.registerControl(\n 'radio',\n this.fb.control(\n includedServicesForTravelerAndFragment?.[0]?.variant ||\n initialServices?.[0]?.variant ||\n CONFIG[category]?.notSelectedVariant\n )\n );\n } else {\n const allServices = services?.[travelerId]?.filter((s) => s.isService) ?? [];\n allServices.forEach((is) => {\n const initialSelection = initialServices.find((s) => s.variant === is.variant);\n const initialQuantityOrBoolean =\n is.maxNumberItems > 1 ? (initialSelection?.quantity ?? 0) : !!initialSelection;\n travelerForm.registerControl(is.variant, this.fb.control(initialQuantityOrBoolean));\n });\n }\n this.form.registerControl(travelerId, travelerForm);\n });\n this.subtotalChange.emit(sumOfPricesForTravelersServiceSelection(initialSelections ?? {}));\n })\n );\n\n const selections$ = this.form.valueChanges.pipe(\n filter((model) => !isEmptyObjectOrHasEmptyValues(model)),\n withLatestFrom(this.services$),\n map(([model, services]) => {\n return Object.keys(model).reduce((selections: SelectionsPerTraveler, travelerId: string) => {\n const servicesForTraveler = services[travelerId] ?? [];\n\n const travelerSelections = servicesForTraveler\n .filter((sm: ServiceCatalogService) => {\n if (sm.maxNumberItems > 1) {\n return Number(model[travelerId][sm.variant]) > 0;\n }\n return toBoolean(model[travelerId][sm.variant]) || model[travelerId]['radio'] === sm.variant;\n })\n .map((s) => {\n if (!s.isService) {\n return undefined;\n }\n const quantity = model[travelerId][s.variant];\n return asTravelerService(s, typeof quantity === 'number' ? quantity : 1);\n });\n\n selections[travelerId] = travelerSelections;\n return selections;\n }, {});\n })\n );\n\n this.subscriptions.add(\n baseStream$\n .pipe(\n switchMap(([category, flightOrBound]) =>\n selections$.pipe(\n map((selections) => [selections, category, flightOrBound] as SelectionWithCategoryAndFragment)\n )\n ),\n withLatestFrom(this.includedServices$)\n )\n .subscribe(([[selections, category, flightOrBound], includedServices]) => {\n const selectionsToStore = this.isRadioDisplay(category)\n ? Object.entries(selections).reduce((selectionsPerTraveler, [traveledId, selectionsForFragment]) => {\n const servicesForFragments = findServiceItemsForPassengerForFragment(\n category,\n includedServices,\n traveledId,\n flightOrBound.id\n );\n\n selectionsPerTraveler[traveledId] = selectionsForFragment.filter((selection) => {\n return !servicesForFragments.some(\n ({ variant, modifiable }) => !modifiable && variant === selection.variant\n );\n });\n\n return selectionsPerTraveler;\n }, {})\n : selections;\n\n this.checkAndQueueToasterNotification(category, selectionsToStore);\n\n this.store$.dispatch(\n ServicesActions.setSelectionsForFragment({\n category: category,\n fragmentId: flightOrBound.id,\n selections: selectionsToStore,\n })\n );\n this.subtotalChange.emit(sumOfPricesForTravelersServiceSelection(selectionsToStore));\n })\n );\n }\n\n private checkAndQueueToasterNotification(\n category: Category,\n selections: SelectionsPerTraveler\n ): void {\n if (category !== Category.MEAL) {\n return;\n }\n\n const nextHasSpecialDiet: Record = Object.entries(selections).reduce(\n (all, [key, selectionsForTraveler]) => {\n all[key] = selectionsForTraveler.some((v) => v.category === SubCategory.SPECIAL_DIET);\n return all;\n },\n {}\n );\n const currentSelection: SelectionsPerTraveler = snapshot(\n this.store$.pipe(serviceSelectionsForFragment(this.flightOrBound.id, this.category))\n );\n const currentHasSpecialDiet: Record = Object.entries(currentSelection).reduce(\n (all, [key, travelerSelection]: [string, TravelerService | TravelerService[]]) => {\n const selectionsForTraveler = Array.isArray(travelerSelection) ? travelerSelection : [travelerSelection];\n all[key] = selectionsForTraveler.some((v) => v.category === SubCategory.SPECIAL_DIET);\n return all;\n },\n {}\n );\n\n const showSpecialDietSelected = Object.entries(nextHasSpecialDiet).some(\n ([key, value]) => value && !currentHasSpecialDiet[key]\n );\n const showSpecialDietUnselected = Object.entries(currentHasSpecialDiet).some(\n ([key, value]) => value && !nextHasSpecialDiet[key]\n );\n\n if (showSpecialDietSelected) {\n this.toasterService.addMessageToQueue({\n id: COMMON_TOASTER_ID,\n contentKey: 'ancillaries.specialDiet.toastMessages.selectedSpecialMeal',\n });\n }\n\n if (showSpecialDietUnselected) {\n this.toasterService.addMessageToQueue({\n id: COMMON_TOASTER_ID,\n contentKey: 'ancillaries.specialDiet.toastMessages.unSelectedSpecialMeal',\n });\n }\n }\n\n private isRadioDisplay(category: Category = this.category): boolean {\n return [Category.WIFI, Category.MEAL].includes(category);\n }\n\n private setupTravelersAndServices(\n baseStream$: Observable<[Category, FinnairItineraryItemFlight | FinnairBoundItem]>,\n filteredTravelers$: Observable\n ): void {\n const selectionsForFragmentAndCategory$ = baseStream$.pipe(\n switchMap(([category, flightOrBound]) => {\n return this.store$.pipe(serviceSelectionsForFragment(flightOrBound.id, category));\n })\n );\n\n const originalQuota = Object.values(snapshot(selectionsForFragmentAndCategory$) ?? {}).filter((item) =>\n Array.isArray(item) ? item.length > 0 : !!item\n ).length;\n\n this.travelersAndServices$ = combineLatest([\n this.services$,\n filteredTravelers$,\n this.includedServices$,\n this.combinedServices$,\n this.showConfirmationModalBeforeSelectionForPassengers$,\n this.blockSelectionNotification$,\n this.travelers$,\n baseStream$,\n ]).pipe(\n map(\n ([\n services,\n travelers,\n includedServices,\n combinedServices,\n showConfirmationModalBeforeSelectionForPassengers,\n blockSelectionNotification,\n finnairPassengers,\n [category, flightOrBound],\n ]) => {\n if (Object.values(services ?? {}).length === 0) {\n return [];\n }\n\n return travelers.map((traveler: ServicePassenger) => {\n const selection$: Observable = this.form.controls[traveler.id]?.valueChanges.pipe(\n startWith(this.form.controls[traveler.id].getRawValue()),\n finShare()\n );\n\n const includedServicesForTravelerAndFragment = findServiceItemsForPassengerForFragment(\n category,\n includedServices,\n traveler.id,\n flightOrBound.id\n );\n\n const combinedGroupedServices = getGroupedServices(\n findServiceItemsForPassengerForFragment(\n this.category,\n combinedServices,\n traveler.id,\n this.flightOrBound.id,\n false\n ),\n getPassengerTierLevel(traveler.id, finnairPassengers)\n );\n\n const servicesToDisplay =\n includedServicesForTravelerAndFragment.length > 0 && this.isRadioDisplay()\n ? (services?.[traveler.id] ?? []).filter(\n (s) =>\n !!includedServicesForTravelerAndFragment.find(({ variant, totalPrice, subCategory }) => {\n return (\n variant === s.variant ||\n (totalPrice?.amount === '0' && subCategory === SubCategory.SPECIAL_DIET)\n );\n })\n )\n : (services?.[traveler.id] ?? []);\n\n const extendedServices = this.getExtendedServices(\n traveler,\n servicesToDisplay,\n selection$,\n originalQuota,\n showConfirmationModalBeforeSelectionForPassengers,\n blockSelectionNotification,\n selectionsForFragmentAndCategory$,\n includedServicesForTravelerAndFragment,\n category,\n flightOrBound\n );\n\n const selectedServices$: Observable = this.getSelectedServices(\n selection$,\n extendedServices\n );\n\n const filters = this.getFilters(extendedServices);\n const selectedFilter$ = new BehaviorSubject(\n filters.length === 0 ? 'all' : filters.length > 1 ? filters[0] : 'none'\n );\n\n return {\n traveler,\n filters,\n selectedFilter$,\n combinedGroupedServices,\n services: extendedServices,\n selectedServices$,\n hasServiceSelected$: this.getHasServiceSelected(\n selection$,\n includedServicesForTravelerAndFragment,\n category\n ),\n additionalInfoBlockUrl: this.getAdditionalInfoBlock(extendedServices, category),\n } as TravelerServices;\n });\n }\n ),\n finShare()\n );\n }\n\n private getHasServiceSelected(\n selection$: Observable,\n includedServicesForTravelerAndFragment: FinnairPassengerServiceSelectionItem[],\n category: Category\n ): Observable {\n return selection$.pipe(\n map((selection) => {\n if (typeof selection['radio'] === 'string') {\n const alreadyPaid = !!includedServicesForTravelerAndFragment.find(\n (service) => service.variant === selection['radio']\n );\n return selection['radio'] !== CONFIG[category].notSelectedVariant || alreadyPaid;\n }\n return Object.keys(selection).some((variant) => {\n const alreadyPaid = !!includedServicesForTravelerAndFragment.find((service) => service.variant === variant);\n\n const travellerSelection = selection[variant];\n\n return (\n (typeof travellerSelection === 'number' ? travellerSelection > 0 : toBoolean(travellerSelection)) ||\n alreadyPaid\n );\n });\n })\n );\n }\n\n private getFilters(extendedServices: ExtendedService[]): SubCategoryFilter[] {\n if (this.category !== Category.MEAL) {\n return [];\n }\n const baseFilters = extendedServices.some((s) => s.subCategory === SubCategory.SPECIAL_DIET)\n ? extendedServices.flatMap((s) => s.subCategory).filter(unique)\n : [];\n\n return baseFilters.length > 1 ? [...baseFilters, 'all'] : baseFilters;\n }\n\n private getSelectedServices(\n selection$: Observable,\n extendedServices: ExtendedService[]\n ): Observable {\n return selection$.pipe(\n map((selection) => {\n return extendedServices\n .filter((service) => {\n if (service.maxNumberItems > 1) {\n return Number(selection[service.variant]) > 0;\n }\n if (this.isRadioDisplay()) {\n return service.variant === selection['radio'] && !NO_VARIANTS.includes(selection['radio']);\n }\n return toBoolean(selection[service.variant]);\n })\n .map((service) => {\n if (typeof selection[service.variant] === 'number') {\n return {\n ...service,\n quantity: Number(selection[service.variant]),\n totalPrice: {\n ...service.totalPrice,\n amount: PreciseNumber.fromString(service.totalPrice.amount)\n .multiply(PreciseNumber.fromString(String(selection[service.variant])))\n .toString(),\n },\n ...(service.originalPrice && {\n originalPrice: {\n ...service.originalPrice,\n amount: PreciseNumber.fromString(service.originalPrice.amount)\n .multiply(PreciseNumber.fromString(String(selection[service.variant])))\n .toString(),\n },\n }),\n };\n }\n return { ...service, quantity: 1 };\n })\n .filter((service) => service.paidQuantity === 0 || +service.totalPrice?.amount === 0);\n })\n );\n }\n\n private getExtendedServices(\n traveler: ServicePassenger,\n services: ServiceCatalogService[],\n selection$: Observable,\n originalQuota: number,\n showConfirmationModalBeforeSelectionForPassengers: string[],\n blockSelectionNotification: string[],\n selectionsForFragmentAndCategory$: Observable>,\n includedServicesForTravelerAndFragment: FinnairPassengerServiceSelectionItem[],\n category: Category,\n flightOrBound: FinnairItineraryItemFlight | FinnairBoundItem\n ): ExtendedService[] {\n const selectionQuota$ = selectionsForFragmentAndCategory$.pipe(\n map(\n (selections) =>\n Object.values(selections).filter((item) => (Array.isArray(item) ? item.length > 0 : !!item)).length\n ),\n finShare()\n );\n\n return services\n .map((service: ServiceCatalogService) => {\n const paidQuantity =\n includedServicesForTravelerAndFragment.find((s) => s.variant === service.variant)?.quantity ?? 0;\n const selected$ = this.getIsSelectedStream(selection$, service, paidQuantity);\n const displayTotalPrice$ = selection$.pipe(\n map((selection) => {\n const count = service.maxNumberItems > 1 ? Number(selection[service.variant]) : 1;\n\n return {\n amount: PreciseNumber.fromString(service.totalPrice.amount)\n .multiply(PreciseNumber.from(count, 0))\n .toString(),\n currencyCode: service.totalPrice.currencyCode,\n };\n })\n );\n const inputType = this.getInputType(service);\n\n return {\n ...service,\n paidQuantity,\n displayTotalPrice$,\n selected$,\n inputType,\n useConfirmModal: service.isService && showConfirmationModalBeforeSelectionForPassengers.includes(traveler.id),\n showBlockingNotification: service.isService && blockSelectionNotification.includes(traveler.id),\n quota$: combineLatest([selected$, selectionQuota$]).pipe(\n map(([isSelected, selectionQuota]) =>\n this.calculateQuota(selectionQuota, service, isSelected, originalQuota)\n ),\n finShare()\n ),\n paxLevelQuotaReached$: this.getPaxLevelQuotaReached(service.variant, this.flightOrBound.id, traveler.id),\n globalId: `${traveler.id}-${category}-${flightOrBound.id}-${service.variant}`,\n buttonText$: selected$.pipe(\n switchMap((selected) => {\n return this.languageService.translateMultiple(\n [\n `ancillaries.${service.category}.${service.variant}.${selected ? 'selected' : 'select'}`,\n `ancillaries.${service.category}.${selected ? 'selected' : 'select'}`,\n ],\n undefined,\n { logErrors: false }\n );\n }),\n map((translations) => translations[0] || translations[1])\n ),\n };\n })\n .filter((s) => s.isService);\n }\n\n removeSelections(traveler: ServicePassenger): void {\n if (this.form.controls[traveler.id].controls['radio']) {\n this.form.controls[traveler.id].controls['radio'].setValue('');\n }\n }\n\n private getPaxLevelQuotaReached(variant: string, fragmentId: string, travelerId: string) {\n return combineLatest([this.paxLevelQuota$, this.serviceQuantityMap$]).pipe(\n map(([paxLevelQuota, quantity]) => {\n if (!paxLevelQuota.variants.includes(variant)) {\n return false;\n }\n return quantity[fragmentId]?.[travelerId] >= paxLevelQuota.combinedQuota;\n }),\n startWith(false),\n distinctUntilChanged()\n );\n }\n\n private calculateQuota(\n selectionQuota: number,\n service: ServiceCatalogService,\n isSelected: boolean,\n originalQuota: number\n ) {\n const quota = service.quota === null ? undefined : service.quota;\n const availableQuota = quota + originalQuota;\n const isQuotaToppedByCustomer = selectionQuota > 0 && selectionQuota >= availableQuota;\n const type = isSelected\n ? QuotaType.SELECTED\n : availableQuota === 0\n ? QuotaType.NO\n : isQuotaToppedByCustomer\n ? QuotaType.TOPPED\n : QuotaType.FREE;\n\n return {\n type,\n count: quota !== undefined ? availableQuota - selectionQuota : undefined,\n };\n }\n\n private getInputType(service: ServiceCatalogService): ProductInputType {\n return (\n this.isRadioDisplay(service.category) ? 'radio' : service.maxNumberItems > 1 ? 'number' : 'checkbox'\n ) as ProductInputType;\n }\n\n private getIsSelectedStream(\n selection$: Observable,\n service: ServiceCatalogService,\n paidQuantity: number\n ): Observable {\n return selection$.pipe(\n map((selection): boolean => {\n if (paidQuantity > 0 && (!selection['radio'] || selection['radio'] === service.variant)) {\n return true;\n }\n return this.isRadioDisplay(service.category)\n ? selection['radio'] === service.variant\n : toBoolean(selection[service.variant]);\n }),\n finShare()\n );\n }\n}\n","
\n
\n {{ title }}\n
\n
\n {{ (bound$ | async).departure.dateTime | finDateFormat: 'FULL' }}\n
\n\n
\n \n
\n \n
\n \n
\n
\n \n
\n
\n
{{ 'bookingSummary.from.title' | finLocalization }}
\n
{{ b.departure['cityName'] }} ({{ b.departure.locationCode }})
\n
\n
\n
{{ 'bookingSummary.to.title' | finLocalization }}
\n
{{ b.arrival['cityName'] }} ({{ b.arrival.locationCode }})
\n
\n
\n
{{ 'flightDuration' | finLocalization }}
\n
\n {{ 'bookingSearch.duration' | finLocalization: (b?.duration | finTemporaryDurationPipe) }}\n
\n
\n
\n
{{ 'bookingSummary.numberOfStops' | finLocalization }}
\n
\n {{ 'bookingSummary.directFlight' | finLocalization }}\n {{ 'stopOver' | finLocalization: [b?.stops] }}\n {{ 'stopOvers' | finLocalization: [b?.stops] }}\n
\n
\n
\n
{{ 'bookingSummary.ticketType' | finLocalization }}
\n
{{ b?.fareFamily?.name }}
\n
\n
\n \n
\n
{{ 'travelClasses' | finLocalization }}
\n
\n {{ flight.departure.locationCode }}—{{ flight.arrival.locationCode }}\n \n {{ 'travelClass.' + flight.cabinClass?.toLowerCase() | finLocalization }} {{ flight.bookingClass }}\n \n \n {{ 'bookingSummary.noTravelClass' | finLocalization }}\n \n
\n
\n
\n
{{ 'bookingSummary.operatedBy' | finLocalization }}
\n
\n {{ flight.departure.locationCode }}—{{ flight.arrival.locationCode }} {{ flight.operatingAirline?.name }}\n
\n
\n
\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { Observable } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\nimport { FinnairItineraryItemFlight } from '@fcom/dapi/api/models';\n\nimport { BookingSummaryBound } from '../../../interfaces';\nimport { isBusOrTrain, isFlight } from '../../../utils/common-booking.utils';\n\n@Component({\n selector: 'fin-booking-summary-flight',\n styleUrls: ['./booking-summary-flight.component.scss'],\n templateUrl: './booking-summary-flight.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BookingSummaryFlightComponent implements OnInit {\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n @Input()\n bound$: Observable;\n @Input()\n title: string;\n\n flights$: Observable;\n icon$: Observable;\n ngOnInit(): void {\n this.flights$ = this.bound$.pipe(\n filter(Boolean),\n map((bound) =>\n bound.itinerary.filter(isFlight).map((i) => ({\n ...i,\n cabinClass: isBusOrTrain(i) ? null : i.cabinClass,\n }))\n )\n );\n this.icon$ = this.bound$.pipe(\n map((bound) =>\n bound.itinerary?.filter(isFlight).some((itinerary) => isBusOrTrain(itinerary))\n ? SvgLibraryIcon.MINUS\n : SvgLibraryIcon.AIRCRAFT_HORIZONTAL\n )\n );\n }\n}\n","
\n
\n \n
\n
\n

\n {{ title | finLocalization }}\n

\n
\n \n
\n
\n \n {{ editText || ('actions.edit' | finLocalization) }}\n \n
\n
\n
\n","import { Component, EventEmitter, Input, Output, HostBinding } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\n\nimport { AppConstants } from '@fcom/booking/app-constants';\n\n@Component({\n selector: 'fin-booking-summary-section',\n styleUrls: ['./booking-summary-section.component.scss'],\n templateUrl: './booking-summary-section.component.html',\n})\nexport class BookingSummarySectionComponent {\n public readonly C: typeof AppConstants = AppConstants;\n\n @Input()\n title: string;\n @Input()\n icon: SvgLibraryIcon;\n @Input()\n isChangeButton = true;\n @Input()\n editText: string;\n @Input()\n skipEditAlign = false;\n @Input()\n isContent = true;\n @Input()\n titleClass = 'font-heading-4';\n @Input()\n innerClass = 'pr-large-t';\n @Input()\n innerIconClass = 'nordic-blue-900-text';\n @Input()\n isDisabled = false;\n @Input()\n trackingContext: string;\n\n @HostBinding('class.block') defaultClass = true;\n @HostBinding('class.ps-medium-b')\n get padding() {\n return this.isChangeButton;\n }\n @Output()\n edit: EventEmitter = new EventEmitter();\n\n constructor() {}\n}\n","\n
\n
{{ t.type | finLocalization }}
\n
{{ t.firstName }} {{ t.lastName }}
\n
\n {{ 'passenger.withInfant' | finLocalization: { withInfantFullName: t.withInfantFullName } }}\n
\n
{{ 'passengerReview.email' | finLocalization }} {{ t.email }}
\n
\n {{ 'passengerReview.dateOfBirth' | finLocalization }} {{ t.birthDate | finDateFormat: 'DATE' }}\n
\n
{{ 'passengerReview.phone' | finLocalization }} {{ t.phone }}
\n
\n
\n","import { Component, Input, ChangeDetectionStrategy, HostBinding } from '@angular/core';\n\nimport { Observable } from 'rxjs';\n\nimport { AppConstants } from '@fcom/booking/app-constants';\n\nimport { BookingSummaryPassenger } from '../../../interfaces/booking-summary.interface';\n\n@Component({\n selector: 'fin-booking-summary-traveler',\n templateUrl: './booking-summary-traveler.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BookingSummaryTravelerComponent {\n public readonly C: typeof AppConstants = AppConstants;\n\n @HostBinding('class.block')\n @HostBinding('class.travelers')\n @HostBinding('class.font-body-1')\n @HostBinding('class.ms-xsmall-y')\n defaultClass = true;\n\n @Input()\n traveler$: Observable;\n\n constructor() {}\n}\n","
\n

{{ title | finLocalization: [] : { logErrors: false } }}

\n \n
\n {{ paxService.firstName }} {{ paxService.lastName }}\n {{ 'ancillaries.group.title' | finLocalization }}\n
\n
\n {{ 'passenger.withInfant' | finLocalization: { withInfantFullName: paxService.associatedInfantName } }}\n
\n
\n {{\n paxService.key\n | finLocalization\n : {\n wifiCount: paxService.quantity,\n loungeCount: paxService.quantity,\n mealCount: paxService.quantity,\n baggageCount: paxService.quantity,\n seatCount: paxService.quantity,\n coverCount: paxService.quantity,\n sportCount: paxService.quantity,\n petCount: paxService.quantity,\n amount: paxService.quantity,\n }\n }}: {{ paxService.price | finPrice }}\n
\n
\n\n","import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core';\n\nimport { Observable } from 'rxjs';\n\nimport { BookingSummaryService } from '../../../interfaces';\n\n@Component({\n selector: 'fin-booking-summary-ancillary',\n templateUrl: './booking-summary-ancillary.component.html',\n styleUrls: ['./booking-summary-ancillary.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BookingSummaryAncillaryComponent {\n @HostBinding('class.block')\n @HostBinding('class.ancillaries')\n @HostBinding('class.font-body-1')\n defaultClass = true;\n @Input()\n service$: Observable;\n @Input()\n title: string;\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { UiTranslateModule } from '@fcom/ui-translate';\nimport { IconsModule, UiComponentsModule } from '@fcom/ui-components';\nimport { ComponentsModule } from '@fcom/common/components/components.module';\nimport { PipesModule } from '@fcom/common/pipes/pipes.module';\nimport { GtmModule } from '@fcom/common/gtm/gtm.module';\n\nimport { BookingSummaryComponent } from './booking-summary.component';\nimport { BookingSummaryFlightComponent } from './flight/booking-summary-flight.component';\nimport { BookingSummarySectionComponent } from './section/booking-summary-section.component';\nimport { BookingSummaryTravelerComponent } from './traveler/booking-summary-traveler.component';\nimport { BookingSummaryAncillaryComponent } from './ancillary/booking-summary-ancillary.component';\nimport { CommonBookingComponentsModule } from '../../common-booking.module';\n\n@NgModule({\n imports: [\n CommonBookingComponentsModule,\n CommonModule,\n ComponentsModule,\n PipesModule,\n GtmModule,\n UiTranslateModule,\n IconsModule,\n UiComponentsModule,\n ],\n declarations: [\n BookingSummaryComponent,\n BookingSummaryFlightComponent,\n BookingSummarySectionComponent,\n BookingSummaryTravelerComponent,\n BookingSummaryAncillaryComponent,\n ],\n exports: [BookingSummaryComponent],\n})\nexport class BookingSummaryModule {}\n","
\n \n
\n \n \n
\n \n {{ buttonTranslationKey | finLocalization }}\n {{ additionalTitle }}\n \n \n
\n
\n\n \n
\n \n
\n\n\n \n
\n
\n
\n \n \n {{ 'MMB.purchase.success.seats.reassignNote.title' | finLocalization }}\n \n
\n
\n {{ 'MMB.purchase.success.seats.reassignNote.message' | finLocalization }}\n
\n
\n
\n \n \n\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { v4 as uuid } from 'uuid';\n\nimport { FinnairBoundItem, FinnairPassengerItem } from '@fcom/dapi/api/models';\nimport { FinnairServiceItemWithUpsell } from '@fcom/dapi/interfaces';\nimport { getIconForServiceCategory } from '@fcom/dapi/utils';\n\n@Component({\n selector: 'fin-included-product-item',\n styleUrls: ['./included-product-item.component.scss'],\n templateUrl: './included-product-item.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IncludedProductItemComponent {\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n uuid = uuid();\n\n @Input() category: string;\n @Input() buttonTranslationKey: string;\n @Input() additionalTitle: string;\n @Input() includePaddings = true;\n @Input() expandOpen = false;\n @Input() disabled = false;\n @Input() displaySeatReassignMessage = false;\n @Input() isShortHaulFlight: boolean;\n @Input() passengers: FinnairPassengerItem[];\n @Input() bound: FinnairBoundItem;\n @Input() service: FinnairServiceItemWithUpsell;\n\n getIconForService(): SvgLibraryIcon {\n return getIconForServiceCategory(this.category);\n }\n}\n","\n \n\n","import { Component, Input, OnInit } from '@angular/core';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { TabStateService } from './tab-state.service';\n\n@Component({\n selector: 'fin-tab',\n templateUrl: 'tab.component.html',\n})\nexport class TabComponent implements OnInit {\n @Input()\n tabId: string;\n\n selected$: Observable;\n\n constructor(private service: TabStateService) {}\n\n ngOnInit(): void {\n this.selected$ = this.service.getSelectedTabId().pipe(map((id) => id === this.tabId));\n }\n}\n","\n \n \n \n \n \n \n \n\n \n
\n
\n
\n
\n \n 0 && slideIndex >= 0\">\n \n \n {{ messageKey | finLocalization }}\n \n \n \n \n \n\n
\n
\n \n
\n
\n\n
\n
\n
\n \n
\n
\n
\n\n \n \n \n\n \n \n {{ 'subtotal' | finLocalization }}: \n {{ subTotalPrice$ | async | finPrice | finEmpty: '–' }}\n \n \n \n {{ 'subtotal' | finLocalization }}: \n {{ subTotalPrice$ | async | finPrice | finEmpty: '–' }}\n \n
\n \n
\n
\n
\n \n
\n \n \n \n
\n \n \n\n \n \n \n \n \n \n
\n

{{ confirmationModalTranslationKeys.firstContentParagraph | finLocalization }}

\n

{{ confirmationModalTranslationKeys.secondContentParagraph | finLocalization }}

\n
\n
\n \n \n
\n \n
\n \n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport {\n BehaviorSubject,\n combineLatest,\n fromEvent,\n merge,\n Observable,\n of,\n ReplaySubject,\n Subject,\n Subscription,\n} from 'rxjs';\nimport { debounceTime, delay, distinctUntilChanged, filter, map, mapTo, switchMap, take } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\n\nimport { ButtonPosition, ButtonSize, ButtonTheme, IconPosition, ModalButtons } from '@fcom/ui-components';\nimport { LoaderType, Step } from '@fcom/common/interfaces';\nimport { Amount, LocationInfoMap } from '@fcom/dapi/interfaces';\nimport { finShare, keepState } from '@fcom/rx';\nimport { unsubscribe } from '@fcom/core/utils';\nimport {\n Category,\n FinnairBoundItem,\n FinnairCart,\n FinnairCheckInEligibility,\n FinnairItineraryItemFlight,\n FinnairOrder,\n FinnairPassengerItem,\n FinnairServiceBoundItem,\n FinnairServiceItem,\n} from '@fcom/dapi/api/models';\nimport { BookingSteps } from '@fcom/common/interfaces/booking/booking-step.interface';\nimport { MediaQueryService, ScrollService } from '@fcom/common/services';\nimport { BOOKING_STEPS } from '@fcom/common/config/booking-config';\nimport { AirOffersStatus, BookingAppState } from '@fcom/common/interfaces/booking';\n\nimport { BookingSummaryService } from '../../../../interfaces';\nimport {\n ConfirmModal,\n ConfirmModalData,\n EligibilityWithCategory,\n ItineraryModal,\n PurchasedServicesForOrder,\n} from '../../interfaces';\nimport { SubviewComponent } from '../../../../components/subview/subview.component';\nimport { calculateSubTotalPrice } from '../../utils';\nimport { getBoundDetailsModalData } from '../../../../utils/ancillaries.utils';\nimport { getCheckInEligibilities, getUnpaidSeatsBySegmentId } from '../../../../store';\nimport { AncillaryLoaderStatus } from '../../enums';\n\n@Component({\n selector: 'fin-ancillary-subview',\n styleUrls: ['ancillary-subview.component.scss'],\n templateUrl: 'ancillary-subview.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AncillarySubviewComponent implements OnInit, OnChanges, OnDestroy {\n @ViewChild('scrollContainer', { static: false }) scrollContainer: ElementRef;\n\n STEPS: BookingSteps = BOOKING_STEPS;\n\n readonly ButtonPosition = ButtonPosition;\n readonly ButtonTheme = ButtonTheme;\n readonly ButtonSize = ButtonSize;\n readonly IconPosition = IconPosition;\n readonly Category = Category;\n readonly ModalButtons = ModalButtons;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n /**\n * A little bit longer than the CSS animation to ensure that the element has slid down\n */\n readonly ANIMATION_DURATION_MS = 350;\n\n /**\n * Exposes data given in the `open()` call to the template\n */\n readonly data$: Observable;\n\n readonly LoaderType = LoaderType;\n readonly AirOffersStatus = AirOffersStatus;\n readonly AncillaryLoaderStatus = AncillaryLoaderStatus;\n\n @Input()\n subviewName: string;\n\n @Input()\n showFlightCard$: Observable;\n\n @Input()\n cartTotalPrice$: Observable;\n\n @Input()\n boundsOrFlights: (FinnairBoundItem | FinnairItineraryItemFlight)[] = [];\n\n @Input()\n locations: LocationInfoMap = {};\n\n @Input()\n titleKey: string;\n\n @Input()\n category: Category;\n\n @Input()\n cartOrOrder$: Observable;\n\n @Input()\n currentStep$: Observable;\n\n @Input()\n unpaidServices$: Observable;\n\n @Input()\n subtitleMessageKey$: Observable;\n\n @Input()\n currentIncludedServices!: FinnairServiceItem | null;\n\n @Input()\n onlyShowAncillaries = false;\n\n @Input()\n showFareFamilyInAncillarySidebar = true;\n\n @Input()\n purchasedServices$: Observable = of({});\n\n @Input()\n subviewContext: string;\n\n @Input()\n maxedOutForFragment$: Observable<{ [fragmentId: string]: boolean }>;\n\n @Input()\n skipEnabled = false;\n\n @Input()\n skipText = '';\n\n @Input()\n boundOrFlightAncillaryAvailability$: Observable<{ [fragmentId: string]: EligibilityWithCategory[] }>;\n\n @Input()\n passengersWithPetcIncompatibleSeats$: Observable<{ [boundId: string]: string[] }> = of({});\n\n @Input()\n confirmModalData$ = new BehaviorSubject({\n open: false,\n });\n\n @Input()\n hideChangeButton = false;\n\n @Input()\n ancillaryLoader$: BehaviorSubject = new BehaviorSubject(\n AncillaryLoaderStatus.OFF\n );\n\n @Input()\n hideSideBar = false;\n\n @Output()\n closeConfirmModal: EventEmitter = new EventEmitter();\n\n /**\n * Called when the subview is closed after onConfirm, no matter how the subview was closed.\n */\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output()\n close: EventEmitter = new EventEmitter();\n\n @Output()\n changeStep: EventEmitter = new EventEmitter();\n\n @Output()\n reassignSeats: EventEmitter<{ currentFlightId: string }> = new EventEmitter();\n\n @Output()\n secondaryButtonClick: EventEmitter = new EventEmitter();\n\n @Output()\n flightOrBoundSelected: EventEmitter = new EventEmitter();\n\n @ViewChild('closeButton', { static: true })\n closeButton: ElementRef;\n\n @ViewChild('content', { static: true })\n content: ElementRef;\n\n @ViewChild('subview', { static: true })\n subview: SubviewComponent;\n\n @ViewChild('ctaButtonHeightFixRef', { static: false })\n ctaButtonHeightFixRef: ElementRef;\n\n initialSlideIndex: number;\n slideIndex: number;\n isSideBarOpen = false;\n ctaButtonTitle: string;\n passengers$: Observable;\n subViewVisible$: Subject = new BehaviorSubject(false);\n reassignFreeSeatsVisible$: Subject = new BehaviorSubject(false);\n unpaidSeats$: Observable;\n checkInEligibilities$: Observable;\n disableButtons$: Observable;\n subViewVisibleDelayed$: Observable;\n basketOpen$: BehaviorSubject = new BehaviorSubject(false);\n itineraryModalClosed$: EventEmitter = new EventEmitter();\n subTotalPrice$: Observable;\n itineraryModal: ItineraryModal = {\n open: false,\n data: null,\n };\n showCtaButton$: Observable;\n slideIndexSubject$ = new ReplaySubject(1);\n secondaryButtonDisabled$: Observable;\n isTabletUp$: Observable;\n\n private showCtaButtonSubject$: BehaviorSubject = new BehaviorSubject(true);\n private boundsOrFlightsSubject$: ReplaySubject<(FinnairBoundItem | FinnairItineraryItemFlight)[]> = new ReplaySubject<\n (FinnairBoundItem | FinnairItineraryItemFlight)[]\n >(1);\n private categorySubject$: ReplaySubject = new ReplaySubject(1);\n private customDataSubject$: Subject = new ReplaySubject(1);\n private subtotalPriceSub$: ReplaySubject = new ReplaySubject<\n Amount & { category: Category; fragmentId: string }\n >(1);\n private subscription: Subscription = new Subscription();\n\n constructor(\n public elementRef: ElementRef,\n private store$: Store,\n private changeDetectorRef: ChangeDetectorRef,\n private renderer: Renderer2,\n private scrollService: ScrollService,\n private mediaqueryService: MediaQueryService\n ) {\n this.showCtaButton$ = this.showCtaButtonSubject$.pipe(\n switchMap((show) => {\n return show ? of(show).pipe(delay(250)) : of(show);\n })\n );\n\n this.subViewVisibleDelayed$ = this.subViewVisible$.pipe(\n distinctUntilChanged(),\n keepState(this.ANIMATION_DURATION_MS)\n );\n\n this.disableButtons$ = this.subViewVisible$.pipe(map((visible) => !visible));\n\n this.data$ = this.customDataSubject$.pipe(finShare());\n\n this.subTotalPrice$ = calculateSubTotalPrice(this.subtotalPriceSub$, this.categorySubject$);\n }\n\n ngOnInit(): void {\n this.initialSlideIndex = -1;\n this.slideIndexSubject$.next(this.initialSlideIndex);\n this.initializeCtaButtonTitle();\n\n this.passengers$ = this.cartOrOrder$.pipe(map(({ passengers }) => passengers));\n\n this.isTabletUp$ = this.mediaqueryService.isBreakpoint$('mobile').pipe(map((isMobile) => !isMobile));\n\n this.secondaryButtonDisabled$ = this.hideSideBar\n ? combineLatest([\n this.cartOrOrder$.pipe(map((order) => order?.services?.unpaid?.length === 0)),\n this.subTotalPrice$,\n ]).pipe(map(([hasUnpaidItems, subTotal]) => hasUnpaidItems && subTotal?.amount === '0'))\n : of(false);\n\n const boundsOrFlights$ = this.boundsOrFlightsSubject$.pipe(\n distinctUntilChanged(\n (prev, next) => prev.map((value) => value.id).join() === next.map((value) => value.id).join()\n )\n );\n\n this.subscription.add(\n combineLatest([this.slideIndexSubject$, boundsOrFlights$])\n .pipe(\n map(([slideIndex, boundsOrFlights]): [number, FinnairBoundItem | FinnairItineraryItemFlight] => {\n return [slideIndex, boundsOrFlights[slideIndex]];\n })\n )\n .subscribe(([indexToGo, currentBoundOrFlight]) => {\n this.slideIndex = indexToGo;\n this.flightOrBoundSelected.emit(currentBoundOrFlight);\n this.setReassignSeatsEligible(currentBoundOrFlight?.id);\n this.closeSidebar();\n })\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['boundsOrFlights']) {\n this.boundsOrFlightsSubject$.next(changes['boundsOrFlights'].currentValue);\n }\n if (changes['category']) {\n this.categorySubject$.next(changes['category'].currentValue);\n }\n }\n\n /**\n * Whether or not the subview is visible in DOM taking the animations into account.\n */\n public get visible$(): Observable {\n return this.subViewVisible$;\n }\n\n setSubTotalPrice(amount: Amount, category: Category, fragmentId: string): void {\n this.subtotalPriceSub$.next({ ...amount, category, fragmentId });\n }\n\n updateSlideIndex(slideIndex: number, scrollTop: boolean): void {\n this.slideIndexSubject$.next(slideIndex);\n if (this.scrollContainer && scrollTop) {\n this.scrollService.scrollToImmediate(this.scrollContainer);\n }\n }\n\n /**\n * Open the subview and possibly supply custom data to the instance.\n * @param subviewName name of the subview\n * @param {T} data optional data to expose as `subview.data` in the templates\n * @param {number} slideIndex slide index to be opened\n * @return void\n */\n open(data?: T, slideIndex: number = this.initialSlideIndex): void {\n this.slideIndexSubject$.next(slideIndex);\n this.customDataSubject$.next(data);\n this.subscription = new Subscription();\n this.subViewVisible$.next(true);\n const resize$: Observable = fromEvent(window, 'resize').pipe(debounceTime(100));\n this.bindCtaButtonHeightFixHandler(resize$);\n this.bindBasketHandling(resize$);\n this.subview.open = true;\n }\n\n onClose(): void {\n if (this.category !== Category.COVER && this.hideSideBar === false) {\n this.isSideBarOpen = true;\n this.showCtaButtonSubject$.next(false);\n } else {\n this.closeSubview();\n }\n }\n\n closeSubview(): void {\n this.slideIndexSubject$.next(this.initialSlideIndex);\n this.closeSidebar();\n\n this.subViewVisible$.next(false);\n this.changeDetectorRef.detectChanges();\n\n this.subview.open = false;\n }\n\n openBasket(): void {\n this.basketOpen$.next(true);\n }\n\n closeBasket(): void {\n this.basketOpen$.next(false);\n }\n\n onEdit(step: Step): void {\n this.closeSubview();\n this.changeStep.emit(step);\n }\n\n viewDetails(): void {\n this.itineraryModal = getBoundDetailsModalData(this.cartOrOrder$, this.slideIndexSubject$);\n }\n\n closeSidebar(): void {\n this.isSideBarOpen = false;\n this.showCtaButtonSubject$.next(true);\n }\n\n handleCtaClick(showFlightCard: boolean): void {\n if (this.slideIndex >= this.boundsOrFlights.length - 1 || !showFlightCard) {\n this.onClose();\n } else {\n this.updateSlideIndex(this.slideIndex + 1, true);\n }\n }\n\n handleSecondaryCtaClick(): void {\n this.secondaryButtonClick.emit();\n }\n\n ngOnDestroy(): void {\n this.cleanUp();\n this.elementRef = null;\n this.content = null;\n this.closeButton = null;\n }\n\n private initializeCtaButtonTitle(): void {\n this.subscription.add(\n combineLatest([this.boundsOrFlightsSubject$, this.slideIndexSubject$, this.showFlightCard$]).subscribe(\n ([boundsOrFlights, slideIndex, showNewCta]) => {\n if (this.category === Category.COVER || !boundsOrFlights.length) {\n this.ctaButtonTitle = 'actions.done';\n } else if (showNewCta) {\n if (slideIndex < boundsOrFlights.length - 1) {\n this.ctaButtonTitle = 'actions.nextFlight';\n } else if (this.hideSideBar) {\n this.ctaButtonTitle = 'services.productCards.moreTravelExtras';\n } else {\n this.ctaButtonTitle = 'services.productCards.viewSummary';\n }\n } else {\n this.ctaButtonTitle = 'actions.continue';\n }\n }\n )\n );\n }\n\n private setReassignSeatsEligible(currentBoundOrFlightId: string) {\n this.unpaidSeats$ = this.store$.pipe(getUnpaidSeatsBySegmentId(currentBoundOrFlightId));\n this.checkInEligibilities$ = this.store$.pipe(getCheckInEligibilities());\n\n this.subscription.add(\n combineLatest([this.unpaidSeats$, this.checkInEligibilities$])\n .pipe(\n map(([unpaidSeats, checkInEligibilities]) => {\n const hasCheckInEligibility = checkInEligibilities.some((eligibility) => {\n const containsBoundId = eligibility.id.includes(currentBoundOrFlightId);\n const hasCheckInWindow = !!eligibility.checkinWindow;\n const hasNoReason = !eligibility.reason;\n return containsBoundId && hasCheckInWindow && hasNoReason;\n });\n\n const hasUnpaidSeatForSegment = unpaidSeats.some((boundItem) =>\n boundItem.segments.some((segment) => segment.id === currentBoundOrFlightId)\n );\n\n return hasCheckInEligibility && hasUnpaidSeatForSegment;\n })\n )\n .subscribe((showReassignFreeSeats) => this.reassignFreeSeatsVisible$.next(showReassignFreeSeats))\n );\n }\n\n // eslint-disable-next-line sonarjs/cognitive-complexity\n private bindCtaButtonHeightFixHandler(resize$: Observable) {\n const RETRY_TIMES = 1;\n const WAIT_TIME_IN_MS = 500;\n const retry$ = new Subject();\n this.subscription.add(\n merge(\n this.subViewVisibleDelayed$.pipe(filter(Boolean)),\n resize$.pipe(mapTo(true)),\n retry$.pipe(take(RETRY_TIMES))\n )\n .pipe(delay(WAIT_TIME_IN_MS))\n .subscribe(() => {\n if (this.elementRef?.nativeElement) {\n const element = this.elementRef.nativeElement.querySelector('fcom-cta-button .cta-button');\n if (element && this.ctaButtonHeightFixRef && this.ctaButtonHeightFixRef.nativeElement) {\n const rect = element.getBoundingClientRect();\n try {\n const topPaddingToExclude = 16;\n const newHeight = rect.height > topPaddingToExclude ? rect.height - topPaddingToExclude : rect.height;\n this.renderer.setStyle(this.ctaButtonHeightFixRef.nativeElement, 'height', `${newHeight}px`);\n if (rect.height === 0) {\n retry$.next(true);\n }\n } catch (e) {\n // Failed to set height\n }\n }\n }\n })\n );\n }\n\n private bindBasketHandling(resize$: Observable) {\n const hideModal$: Observable = resize$.pipe(\n map((event) => +event.target?.['innerWidth']),\n filter((width) => width >= 600),\n mapTo(false)\n );\n\n this.subscription.add(\n hideModal$.subscribe((value) => {\n this.basketOpen$.next(value);\n })\n );\n }\n\n private cleanUp() {\n this.subscription = unsubscribe(this.subscription);\n }\n\n reassignFreeSeats(): void {\n this.reassignSeats.emit({ currentFlightId: this.boundsOrFlights[this.slideIndex].id });\n }\n}\n","\n
\n
\n \n
\n\n
\n \n \n \n\n \n \n \n
\n
\n\n \n\n","import { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n Output,\n} from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport { v4 as uuid } from 'uuid';\n\nimport { keepState } from '@fcom/rx';\nimport { addClass, isVisible, removeClass } from '@fcom/core/utils';\nimport { LoaderType } from '@fcom/common/interfaces';\nimport { AirOffersStatus } from '@fcom/common/interfaces/booking';\n\nimport { AncillaryLoaderStatus } from '../../modules/ancillaries/enums';\n\n/**\n * A subview component that displays its content in a scrollable div.\n *\n * @example\n * Example with buttons from parameters\n * The button is rendered inside the scrollable content\n *\n *
\n * \n *  \n *    

This is scrollable content

\n * \n *
This is custom data passed in the open call: {{ subview.data$ | async | json }}
\n *
\n *
\n *
\n */\n\n@Component({\n selector: 'fin-subview',\n styleUrls: ['subview.component.scss'],\n templateUrl: 'subview.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SubviewComponent implements OnDestroy {\n /**\n * A little bit longer than the CSS animation to ensure that the element has slid down\n */\n readonly ANIMATION_DURATION_MS = 350;\n readonly subviewId = uuid();\n readonly AncillaryLoaderStatus = AncillaryLoaderStatus;\n readonly LoaderType = LoaderType;\n readonly AirOffersStatus = AirOffersStatus;\n\n @Output() openChange = new EventEmitter();\n\n @Input()\n subviewName: string;\n\n @Input()\n subviewContext: string;\n\n @Input()\n enableScroll = true;\n\n @Input()\n ancillaryLoader$: BehaviorSubject;\n\n @Input()\n set open(_open: boolean) {\n const open = coerceBooleanProperty(_open);\n\n if (this._openState === open) {\n return;\n }\n this._openState = open;\n\n this.openChange.emit(this._openState);\n\n if (this._openState) {\n this.openSubview();\n } else {\n this.closeSubview(true);\n }\n }\n\n get open(): boolean {\n return this._openState;\n }\n\n /**\n * Called when the subview is closed after onConfirm, no matter how the subview was closed.\n */\n @Output()\n closeSubViewEvent: EventEmitter = new EventEmitter();\n\n /**\n * Asking confirmation for close.\n */\n @Output()\n shouldCloseSubview: EventEmitter = new EventEmitter();\n\n subViewVisible$: Subject = new BehaviorSubject(false);\n subViewVisibleDelayed$: Observable;\n labelledBy: string;\n\n private removeFocusListener: () => void;\n\n /**\n * Private boolean property storing the open state\n */\n private _openState = false;\n\n constructor(\n public elementRef: ElementRef,\n private ngZone: NgZone,\n @Inject(DOCUMENT) private document: Document,\n private changeDetectorRef: ChangeDetectorRef\n ) {\n this.labelledBy = `subview-${this.subviewId}-title`;\n this.subViewVisibleDelayed$ = this.subViewVisible$.pipe(\n distinctUntilChanged(),\n keepState(this.ANIMATION_DURATION_MS)\n );\n }\n\n get visible$(): Observable {\n return this.subViewVisible$;\n }\n\n ngOnDestroy(): void {\n this.cleanUp();\n removeClass(this.document.body, 'subview-open');\n this.elementRef = null;\n }\n\n closeSubview(emitEvent: boolean): void {\n this.subViewVisible$.next(false);\n this.changeDetectorRef.detectChanges();\n this.cleanUp();\n removeClass(this.document.body, 'subview-open');\n if (emitEvent) {\n // This needs to happen after this.cleanUp() which is removing focus listening from this component\n this.closeSubViewEvent.emit();\n }\n }\n\n /**\n * Open the subview.\n * @return void\n */\n private openSubview(): void {\n this.subViewVisible$.next(true);\n this.bindEventListeners();\n this.changeDetectorRef.detectChanges();\n this.onModalFocus(null, true);\n addClass(this.document.body, 'subview-open');\n }\n\n private bindEventListeners(): void {\n this.ngZone.runOutsideAngular(() => {\n const listener = (event) => {\n return this.ngZone.run(() => {\n this.onModalFocus(event);\n });\n };\n this.document.addEventListener('focus', listener, true);\n this.document.addEventListener('focusin', listener);\n this.removeFocusListener = () => {\n this.document.removeEventListener('focus', listener, true);\n this.document.removeEventListener('focusin', listener);\n };\n });\n }\n\n private onModalFocus(event: FocusEvent | null, forceFocus = false): void {\n const el = this.elementRef?.nativeElement;\n if (!!el && (!el.contains(event?.target) || forceFocus)) {\n event?.stopPropagation();\n\n const focusSelector = 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n const focusableElements: Element[] = Array.from((el as Element).querySelectorAll(focusSelector))\n .filter((e) => e instanceof HTMLElement)\n .filter(isVisible);\n\n if (focusableElements.length !== 0) {\n setTimeout(() => (focusableElements[0] as HTMLElement).focus(), 0);\n }\n }\n }\n\n private cleanUp() {\n this.cleanUpEventHandlers();\n }\n\n private cleanUpEventHandlers() {\n if (this.removeFocusListener) {\n this.removeFocusListener();\n this.removeFocusListener = undefined;\n }\n }\n}\n","import { AfterContentInit, Component, ContentChildren, Input, OnDestroy, OnInit, QueryList } from '@angular/core';\n\nimport { Observable, Subscription, merge } from 'rxjs';\nimport { filter, withLatestFrom, map } from 'rxjs/operators';\n\nimport { isPresent, unsubscribe } from '@fcom/core/utils';\nimport { safeMap } from '@fcom/rx';\n\nimport { TabStateService } from './tab-state.service';\nimport { SelectAction, TabLabelComponent } from './tab-label.component';\n\nconst selectNextIndex = (action: SelectAction, previousIndex: number, length: number) => {\n const lastIndex = length - 1;\n switch (action) {\n case SelectAction.PREVIOUS:\n return previousIndex !== 0 ? previousIndex - 1 : lastIndex;\n case SelectAction.NEXT:\n return previousIndex !== lastIndex ? previousIndex + 1 : 0;\n case SelectAction.LAST:\n return lastIndex;\n default:\n return 0;\n }\n};\n\n@Component({\n selector: 'fin-tab-header',\n styleUrls: ['tab-header.component.scss'],\n templateUrl: 'tab-header.component.html',\n providers: [TabStateService],\n})\nexport class TabHeaderComponent implements OnInit, OnDestroy, AfterContentInit {\n @Input()\n tabGroupId: string;\n @Input()\n startWith$: Observable;\n\n @ContentChildren(TabLabelComponent)\n tabs: QueryList;\n private subscriptions: Subscription = new Subscription();\n private tabEventSubscriptions: Subscription;\n\n constructor(private service: TabStateService) {}\n\n ngOnInit(): void {\n this.service.init(this.tabGroupId);\n\n this.subscriptions.add(\n this.startWith$\n .pipe(filter((startWith: string) => isPresent(startWith)))\n .subscribe((startWith: string) => this.service.setSelectedTabId(startWith))\n );\n this.subscriptions.add(\n this.service\n .getSelectedTabId()\n .pipe(\n filter(() => isPresent(this.tabs)),\n safeMap((tabId: string) => this.tabs.find((tab) => tab.tabId === tabId)),\n filter((tab: TabLabelComponent) => isPresent(tab))\n )\n .subscribe((tab: TabLabelComponent) => tab.focus())\n );\n }\n\n ngAfterContentInit(): void {\n this.subscriptions.add(this.tabs.changes.subscribe(() => this.initTabs()));\n this.initTabs();\n }\n\n ngOnDestroy(): void {\n this.service.clear();\n this.subscriptions = unsubscribe(this.subscriptions);\n this.tabEventSubscriptions = unsubscribe(this.tabEventSubscriptions);\n }\n\n private initTabs(): void {\n unsubscribe(this.tabEventSubscriptions);\n this.tabEventSubscriptions = new Subscription();\n this.subscribeToSelections(merge(...this.tabs.map((t) => t.clicked$)));\n this.subscribeToSelectActions(merge(...this.tabs.map((t) => t.actions$)));\n }\n\n private subscribeToSelections(selections$: Observable) {\n this.tabEventSubscriptions.add(\n selections$.subscribe((selectedTab: TabLabelComponent) => this.service.setSelectedTabId(selectedTab.tabId))\n );\n }\n\n private subscribeToSelectActions(actions$: Observable) {\n const selectedTabIndex$ = this.service\n .getSelectedTabId()\n .pipe(safeMap((tabId) => this.tabs.toArray().findIndex((t) => t.tabId === tabId) || 0));\n this.tabEventSubscriptions.add(\n actions$\n .pipe(\n withLatestFrom(selectedTabIndex$),\n map(([action, previousIndex]) => selectNextIndex(action, previousIndex, this.tabs.length)),\n map((idx: number) => this.tabs.toArray()[idx].tabId)\n )\n .subscribe((tabId: string) => this.service.setSelectedTabId(tabId))\n );\n }\n}\n","
\n \n
\n","
\n \n \n

\n \n

\n
\n\n
\n \n
\n\n @if (enableSurvey && qualtricsUrl$ | async) {\n
\n\n
\n \n
\n }\n
\n","import { Component, EventEmitter, Output, OnInit, Input, TemplateRef } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { Observable, combineLatest } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { LanguageService } from '@fcom/ui-translate';\nimport { getQualtricsUrl } from '@fcom/common/qualtrics/qualtrics.utils';\nimport { ButtonMode, ButtonTheme, IconPosition } from '@fcom/ui-components';\n\n@Component({\n selector: 'fin-bound-selection-error-message',\n templateUrl: 'bound-selection-error-message.component.html',\n})\nexport class BoundSelectionErrorMessageComponent implements OnInit {\n readonly SvgLibraryIcon = SvgLibraryIcon;\n readonly ButtonTheme = ButtonTheme;\n readonly IconPosition = IconPosition;\n readonly ButtonMode = ButtonMode;\n\n @Input() fromFragment: TemplateRef;\n\n @Input({ required: true }) ctaButtonText: string;\n\n @Input() enableSurvey = true;\n\n @Input() qualtricsKey = 'feedback.generalSurveyUrl';\n\n @Input() surveyButtonText = 'feedback.title';\n\n /**\n * Emits when the CTA element has been clicked\n * @type {EventEmitter}\n */\n @Output()\n ctaClick: EventEmitter = new EventEmitter();\n\n qualtricsUrl$: Observable;\n\n constructor(private languageService: LanguageService) {}\n\n ngOnInit(): void {\n this.qualtricsUrl$ = combineLatest([\n this.languageService.langKey,\n this.languageService.translate(this.qualtricsKey),\n ]).pipe(\n map((params) => {\n return getQualtricsUrl(params[0], this.languageService.langValue, params[1]);\n })\n );\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { Observable } from 'rxjs';\nimport { delay } from 'rxjs/operators';\n\n@Pipe({\n name: 'finDelay',\n})\nexport class DelayPipe implements PipeTransform {\n transform(input: any, delayInMilliSeconds = 1): Observable {\n if (input && input instanceof Observable) {\n return input.pipe(delay(delayInMilliSeconds));\n }\n return input;\n }\n}\n","\n \n\n\n\n \n \n\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\n\nimport { ModalButtons } from '@fcom/ui-components';\nimport { BoundType } from '@fcom/dapi';\nimport { FinnairBoundItem, FinnairCabinClass, FinnairItineraryItemFlight, FinnairOrder } from '@fcom/dapi/api/models';\nimport { getTails, isByBusOnly } from '@fcom/common-booking/utils/common-booking.utils';\n\n@Component({\n selector: 'fin-booking-flight',\n templateUrl: './flight.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BookingFlightComponent implements OnInit {\n readonly ModalButtons = ModalButtons;\n readonly BoundType = BoundType;\n\n modalOpen = false;\n\n /**\n * Flight Bound Information\n */\n @Input() bound: FinnairBoundItem;\n\n /**\n * A map of the locations in the bound/booking to get city and airport names\n */\n @Input() locations: FinnairOrder['locations'];\n\n /**\n * Type of bound to render in the timeline\n */\n @Input() type: BoundType = null;\n\n @Input()\n isBookingFlow = false;\n\n tails: string[];\n isByBusOnly: boolean;\n cabin: FinnairCabinClass;\n\n ngOnInit(): void {\n this.tails = getTails(this.bound);\n this.isByBusOnly = isByBusOnly(this.bound);\n this.cabin = this.getCabinClass(this.bound);\n }\n\n openViewDetails(): void {\n this.modalOpen = true;\n }\n\n getCabinClass(bound: FinnairBoundItem): FinnairCabinClass {\n return bound.cabinClass ?? (bound.itinerary[0] as FinnairItineraryItemFlight).cabinClass;\n }\n}\n","import { Store } from '@ngrx/store';\nimport { map } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\n\nimport { ToasterMessage } from '@fcom/common/interfaces';\nimport { snapshot } from '@fcom/rx';\nimport { CustomServiceType, SeatCharacteristics } from '@fcom/dapi';\nimport {\n Category,\n FinnairBoundItem,\n FinnairCart,\n FinnairItineraryItemFlight,\n FinnairOrder,\n FinnairServiceRequestItem,\n} from '@fcom/dapi/api/models';\nimport { serviceSelectionToUpdateRequest } from '@fcom/common-booking/modules/ancillaries/utils';\nimport { seatSelectionsForFlight, serviceSelectionsForFragment } from '@fcom/common-booking/store/selectors';\nimport { NotificationTheme } from '@fcom/ui-components';\nimport { capitalizeWord } from '@fcom/core/utils';\nimport { ItineraryModal } from '@fcom/common-booking/modules/ancillaries/interfaces';\nimport { BookingAppState, SelectionPhase } from '@fcom/common/interfaces/booking';\nimport { FlightSeatSelections } from '@fcom/common/interfaces/seat-map.interface';\n\nexport interface AncillaryToasterMessages {\n error: ToasterMessage;\n}\n\nconst getRequests = (\n store$: Store,\n category: Category,\n fragmentIds: string[]\n): FinnairServiceRequestItem[] => {\n return fragmentIds.map((fragmentId) => ({\n category,\n fragmentId,\n serviceSelection: serviceSelectionToUpdateRequest(\n snapshot(store$.pipe(serviceSelectionsForFragment(fragmentId, category)))\n ),\n }));\n};\n\nconst getMessage = (category: Category, key: string, theme: ToasterMessage['theme']): ToasterMessage => ({\n id: `ANCILLARY_${category.toString()}_${key}`.toUpperCase(),\n contentKey: `ancillaries.toaster.${key}`,\n theme,\n});\n\nconst getToasterMessages = (category: Category, errorKey: string): AncillaryToasterMessages => {\n return {\n error: getMessage(category, errorKey, NotificationTheme.ALERT),\n };\n};\n\nexport const mapToSeatRequest = (\n flightId: string,\n selectionsForFlight: FlightSeatSelections\n): FinnairServiceRequestItem[] => {\n return [\n {\n category: Category.SEAT,\n fragmentId: flightId,\n serviceSelection: selectionsForFlight\n ? Object.keys(selectionsForFlight).map((travelerId) => ({\n travelerId,\n variant: selectionsForFlight[travelerId].seatType || '',\n seatNumber: selectionsForFlight[travelerId].seatNumber,\n isExitSeat: selectionsForFlight[travelerId].characteristics?.includes(SeatCharacteristics.EXIT) ?? false,\n quantity: selectionsForFlight[travelerId].seatNumber ? 1 : 0,\n }))\n : [],\n },\n ];\n};\n\nexport const containsUnpaidSeats = (order: FinnairOrder): boolean => {\n return !!order.services.unpaid?.find((s) => s.category === Category.SEAT);\n};\n\nexport const getServiceData = (\n store$: Store,\n category: Category,\n bounds: FinnairBoundItem[],\n flights: FinnairItineraryItemFlight[]\n): [FinnairServiceRequestItem[], AncillaryToasterMessages] => {\n switch (category) {\n case Category.CABIN_BAGGAGE:\n case Category.BAGGAGE:\n case Category.SPORT:\n case Category.SAF:\n case Category.PET: {\n const keySuffix = category === Category.BAGGAGE ? 'Bags' : capitalizeWord(category);\n return [\n getRequests(\n store$,\n category,\n bounds.map((b) => b.id)\n ),\n getToasterMessages(category, 'errorSaving' + keySuffix),\n ];\n }\n case Category.SEAT: {\n const requests: FinnairServiceRequestItem[] = flights.reduce((all, flight) => {\n return all.concat(mapToSeatRequest(flight.id, snapshot(store$.pipe(seatSelectionsForFlight(flight.id)))));\n }, []);\n\n return [requests, getToasterMessages(category, 'errorSavingSeats')];\n }\n case Category.LOUNGE:\n case Category.WIFI:\n case Category.MEAL: {\n const keySuffix = category === Category.MEAL ? 'Meals' : capitalizeWord(category);\n return [\n getRequests(\n store$,\n category,\n flights.map((b) => b.id)\n ),\n getToasterMessages(category, 'errorSaving' + keySuffix),\n ];\n }\n case Category.COVER: {\n return [\n getRequests(store$, category, [CustomServiceType.JOURNEY]),\n getToasterMessages(category, 'errorSavingTripCover'),\n ];\n }\n default:\n return [[], undefined];\n }\n};\n\nexport const getBoundDetailsModalData = (\n cartOrOrder$: Observable,\n slideIndex$: Observable\n): ItineraryModal => {\n const bounds$ = cartOrOrder$.pipe(map((cart) => cart.bounds));\n\n return {\n open: true,\n data: {\n outbound$: bounds$.pipe(map((bounds) => bounds[0])),\n inbound$: bounds$.pipe(map((bounds) => (bounds.length > 1 ? bounds[1] : undefined))),\n locations$: cartOrOrder$.pipe(map((c) => c.locations)),\n selectionPhase$: slideIndex$.pipe(\n map((slideIndex) => (slideIndex === 0 ? SelectionPhase.OUTBOUND : SelectionPhase.INBOUND))\n ),\n },\n };\n};\n","\n \n
\n

{{ message.teaserTitle }}

\n
\n
\n \n
\n
\n\n\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\n\nimport { IconLibrary } from '@finnairoyj/fcom-ui-styles/enums';\nimport { Observable } from 'rxjs';\n\nimport { CmsArticle } from '@fcom/core-api/';\nimport { FragmentService } from '@fcom/common/services';\nimport { ModalButtons } from '@fcom/ui-components';\n\n@Component({\n selector: 'fin-sustainability-trip-message',\n templateUrl: './sustainability-trip-message.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SustainabilityTripMessageComponent implements OnInit {\n @Input() fragmentKey: string;\n\n @Input() iconCategory: IconLibrary = IconLibrary.SVG_LIBRARY;\n\n @Input() linkText: string;\n\n modalOpen = false;\n\n tripMessage$: Observable;\n\n readonly ModalButtons = ModalButtons;\n\n constructor(private fragmentService: FragmentService) {}\n\n ngOnInit(): void {\n this.tripMessage$ = this.fragmentService.getFragment(this.fragmentKey);\n }\n\n openModal(): void {\n this.modalOpen = true;\n }\n\n closeModal(): void {\n this.modalOpen = false;\n }\n}\n"],"x_google_ignoreList":[]}