{"version":3,"file":"hotspotGrid.bundle.js","mappings":"uBAAIA,E,2FCAJ,SAASC,IAeP,OAdAA,EAAWC,OAAOC,QAAU,SAAUC,GACpC,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CACzC,IAAIG,EAASF,UAAUD,GAEvB,IAAK,IAAII,KAAOD,EACVN,OAAOQ,UAAUC,eAAeC,KAAKJ,EAAQC,KAC/CL,EAAOK,GAAOD,EAAOC,GAG3B,CAEA,OAAOL,CACT,EAEOH,EAASY,MAAMC,KAAMR,UAC9B,CAoFA,SAASS,EAAQC,GACf,IAAIC,EAAQD,EAAOC,MACfC,EAAQF,EAAOE,MACfC,EAAOH,EAAOG,KACdC,EAAMF,EAAME,IACZC,EAAMH,EAAMG,IAEZC,EAAcJ,EADPC,EAAO,OAAS,aAEvBI,EAAUD,EAAYL,GAE1B,SAASO,IACP,OAAOD,CACT,CAEA,SAASE,EAAIC,GAEX,OADAH,EAAUD,EAAYI,GACfC,CACT,CAoBA,IAAIA,EAAO,CACTC,IAnBF,SAASA,EAAIF,GACX,GAAU,IAANA,EAAS,CACX,IAAIG,EAAOH,EAAII,KAAKC,IAAIL,GAExB,OADAD,EAAID,IAAQK,GACLD,EAAIF,GAAY,EAARG,EACjB,CAEA,OAAOF,CACT,EAYEK,MAVF,WACE,OAAOjB,EAAQ,CACbE,MAAOO,IACPN,MAAOA,EACPC,KAAMA,GAEV,EAKEK,IAAKA,EACLH,IAAKA,EACLD,IAAKA,EACLK,IAAKA,GAEP,OAAOE,CACT,CAEA,SAASM,EAASC,GAChB,IAAIC,EAASD,EA0Bb,SAASE,EAAOV,GAEd,OADAS,GAAUT,EACHC,CACT,CAOA,SAASU,EAAWX,GAClB,MAAoB,iBAANA,EAAiBA,EAAIA,EAAEF,KACvC,CAEA,IAAIG,EAAO,CACTC,IA9BF,SAAaF,GAEX,OADAS,GAAUE,EAAWX,GACdC,CACT,EA4BES,OAAQA,EACRZ,IAzCF,WACE,OAAOW,CACT,EAwCEG,SAvBF,SAAkBZ,GAEhB,OADAS,GAAUT,EACHC,CACT,EAqBEY,UAdF,WAEE,OADe,IAAXJ,GAAcC,EAAOD,GAClBR,CACT,EAYEF,IAxCF,SAAaC,GAEX,OADAS,EAASE,EAAWX,GACbC,CACT,EAsCEa,SA/BF,SAAkBd,GAEhB,OADAS,GAAUE,EAAWX,GACdC,CACT,GA8BA,OAAOA,CACT,CAEA,SAASc,EAAUP,GACjB,IAAIQ,EAAYT,EAASM,EAAUL,IAGnC,SAASK,EAAUb,GACjB,OAAa,IAANA,EAAU,EAAIA,EAAII,KAAKC,IAAIL,EACpC,CAQA,IAAIC,EAAO,CACTH,IAbQkB,EAAUlB,IAclBC,IARF,SAAakB,GACX,IAAIC,EAAIL,EAAUI,EAAEnB,OAEpB,OADU,IAANoB,GAASF,EAAUjB,IAAImB,GACpBjB,CACT,GAMA,OAAOA,CACT,CAEA,SAASkB,IACP,IAAIC,EAAY,GAqBZnB,EAAO,CACTC,IApBF,SAAamB,EAAMC,EAAMC,EAASC,GAShC,YARgB,IAAZA,IACFA,GAAU,GAGZH,EAAKI,iBAAiBH,EAAMC,EAASC,GACrCJ,EAAUM,MAAK,WACb,OAAOL,EAAKM,oBAAoBL,EAAMC,EAASC,EACjD,IACOvB,CACT,EAWE2B,UATF,WAIE,OAHAR,EAAYA,EAAUS,QAAO,SAAUC,GACrC,OAAOA,GACT,IACO7B,CACT,GAMA,OAAOA,CACT,CAEA,SAAS8B,EAAMzC,GACb,IAAII,EAAMJ,EAAOI,IACbC,EAAML,EAAOK,IACbd,EAASuB,KAAKC,IAAIX,EAAMC,GAE5B,SAASqC,EAAWhC,GAClB,OAAOA,EAAIN,CACb,CAEA,SAASuC,EAAWjC,GAClB,OAAOA,EAAIL,CACb,CAEA,SAASuC,EAAWlC,GAClB,OAAOgC,EAAWhC,IAAMiC,EAAWjC,EACrC,CAqCA,MAXW,CACTmC,UANF,SAAmBnC,GACjB,OAAKkC,EAAWlC,GACTgC,EAAWhC,GAAKN,EAAMC,EADFK,CAE7B,EAIEnB,OAAQA,EACRY,KAbF,SAAcO,GACZ,OAAKkC,EAAWlC,GACTgC,EAAWhC,GAAKL,EAAMD,EADFM,CAE7B,EAWEL,IAAKA,EACLD,IAAKA,EACLwC,WAAYA,EACZD,WAAYA,EACZD,WAAYA,EACZI,aAjCF,SAAsBpC,GACpB,GAAIN,IAAQC,EAAK,OAAOK,EAExB,KAAOgC,EAAWhC,IAChBA,GAAKnB,EAGP,KAAOoD,EAAWjC,IAChBA,GAAKnB,EAGP,OAAOmB,CACT,EAwBF,CAmLA,SAASqC,EAAY/C,GACnB,IAAIgD,EAAOhD,EAAOgD,KACdC,EAAcjD,EAAOiD,YACrBC,EAAaF,EAAKG,OAClBC,EAAS,CACXC,EAAG,UACHC,EAAG,WAEDC,EAAYtC,EAAS,GACrBuC,EAAWvC,EAAS,GACpBwC,EAAWxC,EAAS,GACpByC,EAAazC,EAAS,GAItB0C,EAAc,GACdC,GAAe,IAAIC,MAAOC,UAC1BC,GAAU,EAEd,SAASC,EAAUC,EAAKjC,GACtB+B,GAAWE,EAAIC,QACf,IAAIC,EAAIf,EAAOpB,GACXd,EAAQ6C,EAAUE,EAAIE,GAAKF,EAAIC,QAAQ,GAAGC,GAC9C,OAAOT,EAAWjD,IAAIS,EACxB,CA6CA,MANW,CACTkD,YAtCF,SAAqBH,GACnB,IAAII,EAAQL,EAAUC,EAAKf,GAG3B,OAFAK,EAAU9C,IAAI4D,GACdZ,EAAShD,IAAI4D,GACNpB,EAAYqB,QAAQf,EAAU/C,MACvC,EAkCE+D,YAhCF,SAAqBN,GACnB,IAAII,EAAQL,EAAUC,EAAKf,GACvBsB,GAAU,IAAIX,MAAOC,UACrBW,EAAWD,EAAUZ,EAUzB,OARIa,GA1Bc,KA2BZA,GAzBQ,MAyBed,EAAc,IACzCA,EAAYvB,KAAKiC,EAAM7D,OACvBoD,EAAeY,GAGjBhB,EAAS/C,IAAI4D,GAAO7C,SAASiC,GAC7BA,EAAShD,IAAI4D,GACNpB,EAAYqB,QAAQd,EAAShD,MACtC,EAmBEkE,UAjBF,WACE,IACID,GADU,IAAIZ,MAAOC,UACAF,EACrBe,EAAelB,EAASjD,MACxBoE,EAAQjB,EAAYkB,OAxCR,GAwC4BC,KAAI,SAAUC,GACxD,OAAOJ,EAAeI,CACxB,IAAGC,MAAK,SAAUC,EAAIC,GACpB,OAAOpE,KAAKC,IAAIkE,GAAMnE,KAAKC,IAAImE,GAAM,GAAK,CAC5C,IAAG,GAGH,OAFAzB,EAAShD,IAAIgE,EA5CC,MA4CwBG,EAAQ,EAAIA,GAClDjB,EAAc,GACPV,EAAYqB,QAAQb,EAASjD,MACtC,EAMEwD,UAAWA,EAGf,CA+BA,SAASmB,EAAgBC,GACvB,IAAIC,EAAMvE,KAAKuE,IAAI,GAAID,GACvB,OAAO,SAAU1E,GACf,OAAOI,KAAKwE,MAAM5E,EAAI2E,GAAOA,CAC/B,CACF,CAUA,SAASE,EAAUC,GACjB,OAAOtG,OAAOuG,KAAKD,GAAOV,IAAIY,OAChC,CACA,SAASC,EAAY5D,EAAM6D,GACzB,IAAIC,EAAK9D,EAAK+D,UACVF,GAAaC,EAAGE,SAASH,IAAYC,EAAGrD,OAAOoD,EACrD,CACA,SAASI,EAASjE,EAAM6D,GACtB,IAAIC,EAAK9D,EAAK+D,UACVF,IAAcC,EAAGE,SAASH,IAAYC,EAAGjF,IAAIgF,EACnD,CA+EA,SAASK,EAAajG,GACpB,IAAIE,EAAQF,EAAOE,MACfgG,EAAWlG,EAAOkG,SAClBC,EAAanG,EAAOmG,WACpBC,EAAYpG,EAAOoG,UACnBhG,EAAMF,EAAME,IACZC,EAAMH,EAAMG,IACZqC,EAAaxC,EAAMwC,WACnBC,EAAazC,EAAMyC,WAEnB0D,GAAW,EACXC,EAAU,EA4Bd,MAJW,CACTzD,UAhBF,SAAmBlB,IAPnB,SAAyBA,GACvB,OAAI0E,IAAYC,IACZ5D,EAAWwD,EAAS1F,OAAemB,EAAEnB,QAAUJ,IAC/CuC,EAAWuD,EAAS1F,QAAemB,EAAEnB,QAAUH,EAErD,EAGOkG,CAAgB5E,KACrB2E,EAAUE,OAAOC,YAAW,WAC1B,IAAIC,EAAaxG,EAAM2C,UAAUlB,EAAEnB,OACnCmB,EAAElB,IAAIiG,GACNP,EAAWQ,SAAS,IAAIC,QAAQ,GAChCR,EAAUnG,QACVqG,EAAU,CACZ,GAnBc,IAoBhB,EAQEO,aANF,SAAsBC,GACpBT,GAAYS,CACd,EAOF,CA+DA,SAASC,EAAa/G,GACpB,IAAIgH,EAAchH,EAAOgH,YACrBd,EAAWlG,EAAOkG,SAClBhG,EAAQF,EAAOE,MACf+C,EAAcjD,EAAOiD,YAIrBgE,EAAKxE,EAAM,CACbrC,IAJQF,EAAME,IAAM6C,EAAYqB,QAAQ,IAKxCjE,IAJQH,EAAMG,IAAM4C,EAAYqB,QAAQ,MAMtC5B,EAAauE,EAAGvE,WAChBC,EAAasE,EAAGtE,WAmBpB,MAHW,CACTxC,KATF,SAAc+G,EAASxF,GACrB,GAPF,SAAoBA,GAClB,OAAkB,IAAdA,EAAwBiB,EAAWuD,EAAS1F,QAC7B,IAAfkB,GAAyBgB,EAAWwD,EAAS1F,MAEnD,CAGO2G,CAAWzF,GAAhB,CACA,IAAI0F,EAAeJ,IAA4B,EAAbtF,GAClCwF,EAAQG,SAAQ,SAAU1F,GACxB,OAAOA,EAAEf,IAAIwG,EACf,GAJkC,CAKpC,EAMF,CAuLA,SAASE,EAAYtH,GACnB,IAmDMuH,EAnDFvE,EAAOhD,EAAOgD,KACdwE,EAAiBxH,EAAOkG,SACxBuB,EAAezH,EAAOyH,aACtBT,EAAchH,EAAOgH,YACrBU,EAAW1H,EAAO0H,SAClBC,EAAa3H,EAAO2H,WACpBC,EAAc5H,EAAO4H,YACrBC,EAAWtC,EAAUoC,GACrBG,EAAYvC,EAAUoC,GAAYI,UAClCC,GA0CET,EAAMK,EAAY,GAAK,EAEpBK,EADOC,EAAYJ,EAAWP,GACN,QA5CFY,OA+C/B,WACE,IAAIZ,EAAMG,EAAWE,EAAY,GAAK,EAEtC,OAAOK,EADOC,EAAYL,EAAUN,GACL,QACjC,CAnDsCa,IAClCC,EAA4B,MAAhBrF,EAAKG,OAAiB,OAAS,MAE/C,SAASmF,EAAiBC,EAASC,GACjC,OAAOD,EAAQE,QAAO,SAAUC,EAAGrJ,GACjC,OAAOqJ,EAAIf,EAAWtI,EACxB,GAAGmJ,EACL,CAEA,SAASN,EAAYK,EAAShB,GAC5B,OAAOgB,EAAQE,QAAO,SAAUC,EAAGrJ,GAEjC,OADmBiJ,EAAiBI,EAAGnB,GACjB,EAAImB,EAAEP,OAAO,CAAC9I,IAAMqJ,CAC5C,GAAG,GACL,CAEA,SAAST,EAAeM,EAASI,GAC/B,IAAIC,EAAuB,UAATD,EACdE,EAASD,GAAe5B,EAAcA,EACtC8B,EAAcrB,EAAasB,gBAAgBF,GAC/C,OAAON,EAAQzD,KAAI,SAAUkE,GAC3B,IAAIC,EAAUL,EAAc,GAAK5B,EAC7BkC,EAAUN,EAAc5B,EAAc,EAItC3C,EAHSyE,EAAYvG,QAAO,SAAU4G,GACxC,OAAOA,EAAEH,QAAUA,CACrB,IAAG,GACgBJ,EAAc,MAAQ,SAMzC,MAAO,CACLvE,MAAOA,EACP+E,UANc,WACd,OAAO5B,EAAehH,MAAQ6D,EAAQ4E,EAAUC,CAClD,EAKEF,MAAOA,EACP9C,UAAW,EAEf,GACF,CAmDA,MANW,CACTmD,QAhCF,WACE,OAAOrB,EAAWsB,OAAM,SAAUrC,GAChC,IAAI+B,EAAQ/B,EAAG+B,MAIf,OAAOV,EAHYT,EAAStF,QAAO,SAAUlD,GAC3C,OAAOA,IAAM2J,CACf,IACsCtB,IAAa,CACrD,GACF,EAyBE6B,MATF,SAAeC,GACbxB,EAAWX,SAAQ,SAAUJ,GAC3B,IAAI+B,EAAQ/B,EAAG+B,MACfQ,EAAOR,GAAOS,MAAMpB,GAAa,EACnC,GACF,EAKElI,KAxBF,SAAcqJ,GACZxB,EAAWX,SAAQ,SAAUqC,GAC3B,IAAIN,EAAYM,EAAUN,UACtBlD,EAAWwD,EAAUxD,SACrB8C,EAAQU,EAAUV,MAClB5J,EAASgK,IAEThK,IAAW8G,IACbsD,EAAOR,GAAOS,MAAMpB,GAAajJ,EAAS,IAC1CsK,EAAUxD,SAAW9G,EAEzB,GACF,EAaE4I,WAAYA,EAGhB,CAEA,SAAS2B,EAAW3J,GAClB,IAAI4J,EAAW5J,EAAO4J,SAClBC,EAAiB7J,EAAO6J,eACxBC,EAAO9J,EAAO8J,KACdC,EAAalI,IACbmI,EAAkBD,EAAWzH,UAC7B2H,EAAmB,EAEvB,SAASC,EAAiBC,GACF,IAAlBA,EAAMC,UACVH,GAAmB,IAAIpG,MAAOC,UAChC,CAEA,SAASuG,EAAcC,EAAOtB,GAU5Be,EAAWnJ,IAAI0J,EAAO,SATV,WAGV,MAFc,IAAIzG,MAAOC,UACAmG,EACV,IAAf,CACAH,EAAKS,WAAa,EAClB,IAAIC,EAAgB1J,KAAK2J,MAAMzB,EAAQa,GACvCD,EAASZ,MAAMwB,EAAe,EAHL,CAI3B,IAEsC,EACxC,CAWA,MAJW,CACTE,oBANF,SAA6BlB,GAC3BO,EAAWnJ,IAAI+J,SAAU,UAAWT,GAAkB,GACtDV,EAAOnC,QAAQgD,EACjB,EAIEL,gBAAiBA,EAGrB,CAqDA,SAASY,EAAU5K,GACjB,IAAIgD,EAAOhD,EAAOgD,KACd6H,EAAY7K,EAAO6K,UAKnBC,EAJa,CACfzH,EASF,SAAW3C,GACT,MAAO,eAAiBA,EAAI,YAC9B,EAVE4C,EAYF,SAAW5C,GACT,MAAO,mBAAqBA,EAAI,QAClC,GAZ+BsC,EAAKG,QAChC4H,EAAqB5F,EAAgB,GACrC6F,EAAiBH,EAAUpB,MAC3BpD,GAAW,EACXH,EAAW,EAmCf,MALW,CACTqD,MANF,WACEyB,EAAeC,UAAY,GAC3B/E,EAAW,CACb,EAIEgF,GAtBF,SAAYvJ,GACV,IAAI0E,EAAJ,CACA,IAAIjH,EAAS2L,EAAmBpJ,EAAEnB,OAE9B0F,IAAa9G,IACf+L,iBAAiBN,GAAWI,UAC5BD,EAAeC,UAAYH,EAAc1L,GACzC8G,EAAW9G,EANO,CAQtB,EAcEyH,aAZF,SAAsBC,GACpBT,GAAYS,CACd,EAaF,CAEA,SAASsE,EAAOtB,EAAMe,EAAWrB,EAAQtH,EAASmJ,GAEhD,IAvrBmBC,EA+QGtL,EAClBiH,EACA5G,EACAkL,EAqaAC,EAAQtJ,EAAQsJ,MAChBtI,EAAahB,EAAQc,KACrByI,EAAavJ,EAAQuJ,WACrBC,EAAkBxJ,EAAQwJ,gBAC1BvL,EAAO+B,EAAQ/B,KACfwL,EAAQzJ,EAAQyJ,MAChBC,EAAW1J,EAAQ0J,SACnB/B,EAAiB3H,EAAQ2H,eACzBgC,EAAgB3J,EAAQ2J,cAExB7I,EA5pCN,SAAcA,GACZ,IAAIG,EAAkB,MAATH,EAAe,IAAM,IAgBlC,MALW,CACT8I,MAXmB,MAAT9I,EAAe,IAAM,IAY/BsB,QAVF,SAAiBvC,GACf,IAAIkF,EAAKlF,EAAKgK,wBACVC,EAAQ/E,EAAG+E,MACXC,EAAShF,EAAGgF,OAEhB,MAAkB,MAAX9I,EAAiB6I,EAAQC,CAClC,EAKE9I,OAAQA,EAGZ,CA0oCa+I,CAAKhJ,GACZD,GAlsBeqI,EAksBWtI,EAAKsB,QAAQuG,GA3rBhC,CACTvG,QALF,SAAiB5D,GACf,OAAOA,EAAI4K,EAHM,GAInB,EAIEa,aARiB,MAksBfzE,EAAWzE,EAAYkJ,aACvBxE,EAAa6B,EAAO1E,IAAI9B,EAAKsB,SAASQ,IAAI7B,EAAYqB,SACtD8H,EAAe7G,EAAUoC,GAEzB0E,EApqBN,SAAoB7G,EAAO8G,GAGzB,IAFA,IAAIC,EAAS,GAEJlN,EAAI,EAAGA,EAAImG,EAAMjG,OAAQF,GAAKiN,EACrCC,EAAOnK,KAAKoD,EAAMX,MAAMxF,EAAGA,EAAIiN,IAGjC,OAAOC,CACT,CA2pBqBC,CAAW7E,EAAYkC,GACb/E,KAAI,SAAU2H,GACzC,OAAOA,EAAEhE,QAAO,SAAUC,EAAGgE,GAC3B,OAAOhE,EAAIgE,CACb,GACF,IACI1F,EAAcW,EAAWc,QAAO,SAAUC,EAAGgE,GAC/C,OAAOhE,EAAIgE,CACb,GAAG,GACCC,EAxuCN,SAAmB3M,GACjB,IAAI0H,EAAW1H,EAAO0H,SAClB8D,EAAQxL,EAAOwL,MACfoB,EAAa,CACf3M,MAKF,WACE,OAAO,CACT,EANE4M,OAQF,SAAgBnM,GACd,OAAOoM,EAAIpM,GAAK,CAClB,EATEoM,IAAKA,GAWP,SAASA,EAAIpM,GACX,OAAOgH,EAAWhH,CACpB,CAcA,MAHW,CACT4D,QANF,SAAiB5D,GACf,MAAqB,iBAAV8K,EAJJ9D,EAAWhC,OAAO8F,GAKlBoB,EAAWpB,GAAO9K,EAC3B,EAMF,CAssCkBqM,CAAU,CACxBvB,MAAOA,EACP9D,SAAUA,IAERsF,EApbN,SAAoBhN,GAClB,IAWMO,EAXF8L,EAAYrM,EAAOqM,UACnBM,EAAY3M,EAAO2M,UACnBxM,EAAOH,EAAOG,KACd8M,EAAaZ,EAAUvH,IAAI6H,EAAUrI,SACrC4I,GAOE3M,EAAUR,EAAQ,CACpBG,MALUuC,EAAM,CAChBrC,IAAK,EACLC,IAAKgM,EAAU9M,OAAS,IAIxBU,MAAO,EACPE,KAAMA,IAEDkM,EAAUvH,KAAI,SAAUwH,EAAMtD,GACnC,IAAImE,EAAO5M,EAAQE,IAAIuI,EAAQ,GAAGxI,MAClC,OAAO8L,EAAOW,EAAWjE,GAASiE,EAAWE,EAC/C,KAaF,MAHW,CACT7I,QARF,SAAiB0E,GAEf,OADYkE,EAAiBrI,MAAM,EAAGmE,GACzBP,QAAO,SAAUC,EAAGgE,GAC/B,OAAOhE,EAAIgE,CACb,GAAGO,EAAW,GAChB,EAMF,CAkZmBG,CAAW,CAC1Bf,UAAWA,EACXM,UAAWA,EACXxM,KAAMA,IAEJkN,EAAe9H,EAAU8G,GAAWvH,IAAIkI,EAAW1I,SACnDgJ,EA1iBN,SAAuBtN,GACrB,IAAI2M,EAAY3M,EAAO2M,UACnB3F,EAAchH,EAAOgH,YACrBU,EAAW1H,EAAO0H,SAClB6F,EAAe9K,EAAM,CACvBrC,KAAM4G,EAAcU,EACpBrH,IAAK,IAEHmN,EAAoB,CAACb,EAAUrI,QAAQ0C,IACvCyG,EAAqBzG,EAAcU,EA4BvC,MAHW,CACTpD,QAbF,SAAiBsD,EAAa8F,GAC5B,IAAIC,EAAiB/F,EAAY9C,IAAIyI,EAAa1K,WAE9CoE,EAdN,SAAwBW,GACtB,IAAIgG,EAAYhG,EAAY,GACxBiG,EAAUjG,EAAYA,EAAYrI,OAAS,GAG/C,OAAOkD,EAAM,CACXrC,IAHQwH,EAAYkG,YAAYF,GAAa,EAI7CvN,IAHQuH,EAAYmG,QAAQF,IAKhC,CAKWG,CAAeL,GACpBvN,EAAM6G,EAAG7G,IACTC,EAAM4G,EAAG5G,IAEb,OAAKoN,EACAC,EACEC,EAAe9I,MAAMzE,EAAM,EAAGC,EAAM,GADzBsN,EADcH,CAGlC,EAMF,CAogBgBS,CAAc,CAC1BtB,UAAWA,EACX3F,YAAaA,EACbU,SAAUA,IAERwG,GAAiB/N,GAA0B,KAAlB0L,EACzBsC,EAA8B,cAAlBtC,EACZ8B,EAAiBL,EAAQhJ,QAAQ+I,EAAcc,GAC/CvG,EAAcsG,EAAgBP,EAAiBN,EAO/CrE,EAAQjJ,EAAQ,CAClBG,MALcuC,EAAM,CACpBrC,IAAK,EACLC,IAHaS,KAAKT,IAAI,EAAGuH,EAAYrI,OAAS,KAO9CU,MAAOwL,EACPtL,KAAMA,IAEJiO,EAAgBpF,EAAMhI,QAEtBqN,EAxhBN,SAAqBrO,GACnB,IAAIgH,EAAchH,EAAOgH,YACrB7G,EAAOH,EAAOG,KAgBlB,MAHW,CACTmE,QAZF,SAAiBsD,GACf,IAAIgG,EAAYhG,EAAY,GACxBiG,EAAUjG,EAAYA,EAAYrI,OAAS,GAG/C,OAAOkD,EAAM,CACXrC,IAHQD,EAAOyN,EAAY5G,EAAc6G,EAIzCxN,IAHQuN,GAKZ,EAMF,CAqgBoBU,CAAY,CAC5BnO,KAAMA,EACN6G,YAAaA,IAEX9G,EAAQmO,EAAY/J,QAAQsD,GA2B5BxB,EAnwCN,SAAmBmI,GACjB,IAAIC,EAAiB,EAErB,SAASC,EAAY3H,EAAQ4H,GAC3B,OAAO,WACD5H,MAAa0H,GAAgBE,GACnC,CACF,CAEA,SAASzO,IACPuO,EAAiBhI,OAAOmI,sBAAsBJ,EAChD,CAYA,MALW,CACTK,QAASH,GAAY,EAAMxO,GAC3BA,MAAOwO,GAAY,EAAOxO,GAC1B4O,KAAMJ,GAAY,GARpB,WACEjI,OAAOsI,qBAAqBN,GAC5BA,EAAiB,CACnB,IAQF,CA2uCkBO,EAzBH,WACXC,GAAO7I,WAAW8I,KAAK7P,IAAQ8P,SAC/B,IAAIC,EAAUH,GAAO7I,WAAWiJ,OAAOhQ,IAWvC,GATKiQ,GAAYjL,gBACVjE,GAAM6O,GAAOzB,aAAa1K,UAAUzD,IAErC+P,IACFH,GAAO5I,UAAUyI,OACjBxD,EAAOiE,KAAK,YAIZnP,EAAM,CACR,IAAIuB,EAAYsN,GAAO7I,WAAWzE,UAAUlB,MAC5CwO,GAAOO,aAAapP,KAAKqP,GAAa9N,GACtCsN,GAAOS,YAAYtP,KAAKqJ,EAC1B,CAEK2F,GAAS9D,EAAOiE,KAAK,UAC1BN,GAAOU,UAAUxE,GAAG8D,GAAO7I,WAAWD,UACtC8I,GAAO5I,UAAUwI,SACnB,IAIIe,EAAgB/H,EAAYoB,EAAMxI,OAClC0F,EAAWjF,EAAS0O,GACpBvQ,GAAS6B,EAAS0O,GAClBH,GAAc,CAACtJ,EAAU9G,IACzB+G,GA3tBN,SAAoBnG,GAClB,IAAIkG,EAAWlG,EAAOkG,SAClByF,EAAQ3L,EAAO2L,MACfiE,EAAO5P,EAAO4P,KACd7E,EAAqB5F,EAAgB,GACrC0K,EAAW5O,EAAS,GACpB6O,EAAe7O,EAAS,GACxB8O,EAAa9O,EAAS,GACtBS,EAAYD,EAAU,GACtBuO,EAAQ,CACVrE,MAAOA,EACPiE,KAAMA,GAgCR,SAASjJ,EAASjG,GAEhB,OADAsP,EAAMrE,MAAQjL,EACPC,CACT,CAOA,SAASiG,EAAQlG,GAEf,OADAsP,EAAMJ,KAAOlP,EACNC,CACT,CAOA,IAAIA,EAAO,CACTe,UAAWA,EACXwE,SAAUA,EACV+I,KAzCF,SAActN,GACZoO,EAAWtP,IAAIkB,GAAGH,SAAS0E,GAC3B,IACI+J,EAA2B,GADfF,EAAWvP,MACJ,GArE8B,KAqEnBwP,EAAMrE,MAAT,GAI/B,OAHAjK,EAAUjB,IAAIsP,GACdA,EAAWxO,YAAYD,SAAS2O,GAAGzO,SAASqO,GAV9C,SAAoBlO,GAClBA,EAAEP,OAAO4O,EAAMJ,MACfE,EAAalP,IAAIe,EACnB,CAQEuO,CAAWH,GACJpP,CACT,EAkCEyO,OAhCF,SAAgBzN,GACd,IAAIwO,EAAOxO,EAAEnB,MAAQ0F,EAAS1F,MAE1B4P,GADcrF,EAAmBoF,GAGrC,OADIC,GAAYlK,EAASzF,IAAIkB,GACtByO,CACT,EA2BElB,OAtDF,WACEW,EAASjP,IAAIkP,GACb5J,EAAStF,IAAIiP,GACbC,EAAaxO,SAAS,EACxB,EAmDE+O,eAXF,WAEE,OADAzJ,EAAQgJ,GACDjP,CACT,EASE2P,gBAtBF,WAEE,OADA3J,EAASgF,GACFhL,CACT,EAoBEiG,QAASA,EACTD,SAAUA,GAEZ,OAAOhG,CACT,CAgpBmB4P,CAAW,CAC1BrK,SAAUA,EACVyF,MAAOA,EACPiE,KAAM,IAEJY,GArdN,SAAsBxQ,GACpB,IAAIG,EAAOH,EAAOG,KACdD,EAAQF,EAAOE,MACf0H,EAAc5H,EAAO4H,YACrBZ,EAAchH,EAAOgH,YACrBrE,EAAazC,EAAMyC,WACnBC,EAAa1C,EAAM0C,WACnBE,EAAe5C,EAAM4C,aAEzB,SAAS2N,EAAYC,EAAIC,GACvB,OAAO7P,KAAKC,IAAI2P,GAAM5P,KAAKC,IAAI4P,GAAMD,EAAKC,CAC5C,CAuBA,SAASC,EAASxR,EAAQsC,GACxB,IAAImP,EAAKzR,EACL0R,EAAK1R,EAAS4H,EACd+J,EAAK3R,EAAS4H,EAClB,IAAK7G,EAAM,OAAO0Q,EAClB,IAAKnP,EAAW,OAAO+O,EAAYA,EAAYI,EAAIC,GAAKC,GACxD,IAAIC,EAAWP,EAAYI,EAAkB,IAAdnP,EAAkBoP,EAAKC,GACtD,OAAOjQ,KAAKC,IAAIiQ,GAAYtP,CAC9B,CA0CA,MALW,CACTuP,WAlBF,SAAoBC,EAAUC,GAC5B,IAAI/R,EAASY,EAAOZ,OAAOoB,MAAQ0Q,EAC/BE,EAnDN,SAAwBhS,GACtB,IAAI8R,EAAWpO,EAAa1D,GAc5B,MAAO,CACL4J,MAdoBpB,EAAY9C,KAAI,SAAUkI,GAC9C,OAAOA,EAAakE,CACtB,IAAGpM,KAAI,SAAUuM,GACf,OAAOT,EAASS,EAAY,EAC9B,IAAGvM,KAAI,SAAUqL,EAAM9Q,GACrB,MAAO,CACL8Q,KAAMA,EACNnH,MAAO3J,EAEX,IAAG2F,MAAK,SAAU0L,EAAIC,GACpB,OAAO7P,KAAKC,IAAI2P,EAAGP,MAAQrP,KAAKC,IAAI4P,EAAGR,KACzC,IAC4B,GAAGnH,MAG7BkI,SAAUA,EAEd,CAgCmBI,CAAelS,GAC5B4J,EArBN,SAAyB5J,EAAQ4J,GAE/B,GADoB7I,IAAQyC,EAAWxD,GACpB,OAAO4J,EAC1B,IAAI/B,EAAKjH,EAAOgJ,MACZ5I,EAAM6G,EAAG7G,IACTC,EAAM4G,EAAG5G,IACb,OAAOsC,EAAWvD,GAAUgB,EAAMC,CACpC,CAcckR,CAAgBnS,EAAQgS,EAAWpI,OAC3CwI,GAAgBrR,GAAQyC,EAAWxD,GACvC,OAAK+R,GAAQK,EAAqB,CAChCxI,MAAOA,EACPkI,SAAUA,GAIL,CACLlI,MAAOA,EACPkI,SAHiBA,EAAWN,EADbhJ,EAAYoB,GAASoI,EAAWF,SACE,GAKrD,EAIEO,QA5BF,SAAiBzI,EAAOtH,GAGtB,MAAO,CACLsH,MAAOA,EACPkI,SAHaN,EADEhJ,EAAYoB,GAAShJ,EAAOZ,OAAOoB,MAChBkB,GAKtC,EAsBEkP,SAAUA,EAGd,CAgYqBc,CAAa,CAC9B1K,YAAaA,EACbgC,MAAOA,EACP9I,MAAOA,EACPC,KAAMA,EACNyH,YAAaA,EACbxI,OAAQA,KAENwK,GAtYN,SAAkB5J,GAChB,IAAI2R,EAAe3R,EAAOgJ,MACtBwH,EAAexQ,EAAOwQ,aACtBpK,EAAYpG,EAAOoG,UACnBgI,EAAgBpO,EAAOoO,cACvB/C,EAASrL,EAAOqL,OAChBuG,EAAiB5R,EAAOZ,OAE5B,SAASwK,EAASxK,GAChB,IAAIyS,EAAezS,EAAO8R,SACtBY,EAAY1S,EAAO4J,QAAU2I,EAAanR,MAE1CqR,IACFzL,EAAUnG,QACV2R,EAAehR,IAAIiR,IAGjBC,IACF1D,EAAc3N,IAAIkR,EAAanR,OAC/BmR,EAAalR,IAAIrB,EAAO4J,OACxBqC,EAAOiE,KAAK,UAEhB,CAiBA,MAJW,CACT4B,SAZF,SAAkBxQ,EAAGyQ,GAEnBvH,EADa4G,EAAaS,WAAWvQ,EAAGyQ,GAE1C,EAUEnI,MARF,SAAetI,EAAGgB,GAChB,IAAIqQ,EAAcJ,EAAa3Q,QAAQP,IAAIC,GAE3CkJ,EADa4G,EAAaiB,QAAQM,EAAYvR,MAAOkB,GAEvD,EAOF,CA8ViBsQ,CAAS,CACtB5L,UAAWA,EACXiF,OAAQA,EACRrC,MAAOA,EACPoF,cAAeA,EACfoC,aAAcA,GACdpR,OAAQA,KAENqI,GAvNN,SAAsBzH,GACpB,IAAIgH,EAAchH,EAAOgH,YACrBW,EAAa3H,EAAO2H,WACpBD,EAAW1H,EAAO0H,SAClBgE,EAAkB1L,EAAO0L,gBACzBvL,EAAOH,EAAOG,KACd8R,EAAYnR,KAAKV,IAAIU,KAAKT,IAAIqL,EAAiB,KAAO,KACtD9D,EAAcrC,EAAUoC,GAAY7C,KAMxC,SAAoBkE,GAElB,OADWrB,EAAW9C,MAAM,EAAGmE,GACnBP,QAAO,SAAUC,EAAGgE,GAC9B,OAAOhE,EAAIgE,CACb,GAAG,EACL,IATI5D,GADU3I,EAAO,CAAC,EAAG6G,GAAcA,GAAe,CAAC,IAC7ByB,QAAO,SAAUC,EAAGwJ,GAC5C,OAAOxJ,EAAEP,OAAOY,EAAgBmJ,EAAYD,GAC9C,GAAG,IASH,SAASlJ,EAAgBF,EAAQoJ,GAC/B,IAAIE,EAAaxK,EAAW7C,KAAI,SAAU4H,GACxC,OAAOA,GAAKuF,GAAa,EAC3B,IACA,OAAOrK,EAAY9C,KAAI,SAAUqM,EAAMnI,GACrC,MAAO,CACL/I,MAAOkR,EAAOxJ,EAAWqB,GAASmJ,EAAWnJ,GAASH,EACtDiE,IAAKqE,EAAOzJ,EAAWyK,EAAWnJ,GAASH,EAC3CG,MAAOA,EAEX,GACF,CAiBA,MAJW,CACToJ,MAZF,SAAelM,GACb,OAAO4C,EAAYL,QAAO,SAAU4J,EAAMC,GACxC,IAAItJ,EAAQsJ,EAAWtJ,MACnB/I,EAAQqS,EAAWrS,MACnB6M,EAAMwF,EAAWxF,IAGrB,OAFsC,IAAzBuF,EAAKtE,QAAQ/E,IACb/I,EAAQiG,GAAY4G,EAAM5G,EACZmM,EAAKlK,OAAO,CAACa,IAAUqJ,CACpD,GAAG,GACL,EAIEtJ,gBAAiBA,EAGrB,CAsKqBwJ,CAAa,CAC9BvL,YAAaA,EACb0E,gBAAiBA,EACjBvL,KAAMA,EACNwH,WAAYA,EACZD,SAAUA,IAGR2H,GAziCN,SAAqBrP,GACnB,IAAIZ,EAASY,EAAOZ,OAChB+G,EAAanG,EAAOmG,WACpByF,EAAW5L,EAAO4L,SAClBxF,EAAYpG,EAAOoG,UACnBpD,EAAOhD,EAAOgD,KACdwP,EAAUxS,EAAOwS,QACjBC,EAAczS,EAAOyS,YACrBvM,EAAWlG,EAAOkG,SAClBmF,EAASrL,EAAOqL,OAChBnL,EAAQF,EAAOE,MACfgD,EAAaF,EAAKG,OAClBuP,EAAY1P,EAAK8I,MACjB6G,EAAa,CAAC,QAAS,SAAU,YACjCC,EAAc3R,EAAS,GACvB4R,EAAa5R,EAAS,GACtB6R,EAAiB7R,EAAS,GAC1B8R,EAAmBlR,IACnBmR,EAAoBnR,IACpBoR,EAAiB,CACnBC,MAAO,IACPC,MAAO,KAELC,EAAiB,CACnBF,MAAO,EACPC,MAAO,GAELE,EAAYzH,EAAW,EAAI,GAE3B0H,EAAY7Q,EAAM,CACpBrC,IAAKF,EAAME,IAAM,GACjBC,IAAKH,EAAMG,IAAM,KAEfkT,GAAgB,EAChBC,GAAgB,EAChBC,GAAe,EACf1P,GAAU,EA4Dd,SAAS2P,EAAKzP,GAEZ,KADAF,EAAuB,cAAbE,EAAIjC,OACgB,IAAfiC,EAAI0P,OAAnB,CACA,IAzCIC,EAyCAC,EAAWC,EAAM1U,EAAOoB,MAAO0F,EAAS1F,QAAU,EAClDuT,EAAoBhQ,IAAY8P,EAChCG,GA3CAJ,EA2C8B3P,EAAI7E,OA3CtB6U,UAAY,KACrBtB,EAAW5E,QAAQ6F,IAAS,IA2C/BM,EAAiBL,GAAY9P,GAAWiQ,EAC5CT,GAAgB,EAChBd,EAAYrO,YAAYH,GACxB6O,EAAerS,IAAIrB,GACnBA,EAAOqB,IAAIyF,GACXC,EAAWkK,iBAAiB1J,SAAS,IA3DjC5E,EAAQgC,EAAoB4G,SAAV6H,EACtBQ,EAAkBpS,IAAImB,EAAM,YAAaoS,GAAMvT,IAAImB,EAAM,WAAYqS,GAAIxT,IAAImB,EAAM,YAAaoS,GAAMvT,IAAImB,EAAM,UAAWqS,GA4D3HxB,EAAYnS,IAAIgS,EAAYzO,UAAUC,EAAKf,IAC3C2P,EAAWpS,IAAIgS,EAAYzO,UAAUC,EAAKyO,IAC1CrH,EAAOiE,KAAK,eACRyE,IAAmBN,GAAe,GAClCS,GAAgBjQ,EAAIiQ,gBAfe,CAnDzC,IACMnS,CAkEN,CAEA,SAASoS,EAAKlQ,GACZ,IAAKuP,IAAkBzP,EAAS,CAC9B,IAAKE,EAAIoQ,WAAY,OAAOD,IAC5B,IAAIE,EAAa7B,EAAYzO,UAAUC,EAAKf,GAAY1C,MACpD+T,EAAY9B,EAAYzO,UAAUC,EAAKyO,GAAWlS,MAClDgU,EAAaV,EAAMQ,EAAY1B,EAAYpS,OAC3CiU,EAAYX,EAAMS,EAAW1B,EAAWrS,OAE5C,KADAgT,EAAgBgB,EAAaC,KACNhB,EAAc,OAAOW,GAC9C,CAEA,IAAIjE,EAAOsC,EAAYlO,YAAYN,GAC/ByQ,EAAexU,EAAM0C,WAAWsD,EAAS1F,OACzCmU,GAAU3U,EAAOG,MAAQuU,EAAe,EAAI,GAC3CjB,GAAgBtD,IAAMsD,GAAe,GAC1CrN,EAAUnG,QACVb,EAAOwB,IAAIuP,EAAOwE,GAClB1Q,EAAIiQ,gBACN,CAEA,SAASE,IACP,IArEmBQ,EAAQC,EACvB1E,EAoEAvG,EAAW5J,EAAO4J,SAClBkL,EAAWrC,EAAY/N,aA3EfkH,EAAWwH,EAAiBH,GAC7BlP,EAAU,QAAU,SA2E3Ba,EAhEN,SAAsBA,GACpB,IAAI4L,EAAexQ,EAAOwQ,aACtBxH,EAAQhJ,EAAOgJ,MAGf+L,IAFkBvE,EAAaS,WAAW,GAAG,GACbjI,QAAUA,EAAMxI,QACnBM,KAAKC,IAAI6D,GApDxB,EAqDdoQ,EAAcpQ,EAAQsB,EAAS1F,MAEnC,GAAIuU,IAAanJ,IAAa1L,EAAM0C,WAAWoS,GAAc,CAC3D,IAAI7H,EAAOnE,EAAMhI,QAAQJ,KAA8B,EAA1Ba,EAAUmD,GAAOpE,OAC9C,OAAOgQ,EAAaiB,QAAQtE,EAAK3M,MAAO,GAAG0Q,QAC7C,CAEA,IAAKlR,EAAOG,MAAQmT,EAAU1Q,WAAWoS,GAAc,CACrD,IAAIrM,EAAO2K,EAAU3Q,WAAWqS,GAAe,MAAQ,MACvD,OAAO1B,EAAU3K,GAAQvJ,EAAOoB,KAClC,CAEA,OAAOgQ,EAAaS,WAAWrM,GAAQgH,GAAUsF,QACnD,CA6Cc+D,CAAaH,GACrBI,GAxEeN,EAwEME,EAxEED,EAwEQjQ,EAvE/BuL,EAAO2D,EAAMhT,KAAKC,IAAI6T,GAAS9T,KAAKC,IAAI8T,IACxC/T,KAAKC,IAAI6T,IAAW9T,KAAKC,IAAI8T,IAClB,IAAXD,GAA2B,IAAXC,EAD6B,EAE1C/T,KAAKC,IAAIoP,EAAOyE,IAqERd,EAAM1U,EAAOoB,MAAOsS,EAAetS,QAAU,KAC3CuD,IAAS0P,GAAe,GACzCD,GAAgB,EAChBD,GAAgB,EAChBP,EAAkB1Q,YAClB6D,EAAWQ,SAAS0M,EAAYA,EAAY6B,GAC5CtL,EAASsH,SAAStM,GAAQgH,GAC1B7H,GAAU,EACVsH,EAAOiE,KAAK,YACd,CAEA,SAASwE,EAAMqB,EAAQC,GACrB,OAAOtU,KAAKC,IAAIoU,EAASC,EAC3B,CAEA,SAASC,EAAMpR,GACTwP,GAAcxP,EAAIiQ,gBACxB,CAgBA,MANW,CACTxJ,oBAnIF,WACE,IAAI3I,EAAOyQ,EACXO,EAAiBnS,IAAImB,EAAM,aAAa,WAExC,IAAGnB,IAAImB,EAAM,YAAY,WAEzB,IAAGnB,IAAImB,EAAM,aAAc2R,GAAM9S,IAAImB,EAAM,YAAa2R,GAAM9S,IAAImB,EAAM,cAAeqS,GAAIxT,IAAImB,EAAM,cAAeqS,GAAIxT,IAAImB,EAAM,QAASsT,EAC7I,EA6HEC,aAVF,WACE,OAAQ7B,CACV,EASErP,YAPF,WACE,OAAOmP,CACT,EAMEvJ,gBAxHF,WACE+I,EAAiBzQ,YACjB0Q,EAAkB1Q,WACpB,EAwHF,CA03BoBiT,CAAY,CAC5BnP,UAAWA,EACXpD,KAAMA,EACN4I,SAAUA,EACV6G,YAAa1P,EAAY,CACvBC,KAAMA,EACNC,YAAaA,IAEfuP,QAAS1I,EACTuB,OAAQA,EACRrC,MAAOA,EACP9I,MAAOA,EACPgG,SAAUA,EACV/F,KAAMA,EACNgG,WAAYA,GACZyD,SAAUA,GACV4G,aAAcA,GACdpR,OAAQA,KAGN4P,GAAS,CACX5I,UAAWA,EACXpD,KAAMA,EACNqM,YAAaA,GACbpM,YAAaA,EACb+F,MAAOA,EACPoF,cAAeA,EACflO,MAAOA,EACPgG,SAAUA,EACVhE,QAASA,EACTiE,WAAYA,GACZoH,aAActH,EAAa,CACzBG,UAAWA,EACXlG,MAAOA,EACPgG,SAAUA,EACVC,WAAYA,KAEdoJ,aAAcxI,EAAa,CACzBC,YAAaA,EACb9G,MAAOA,EACPgG,SAAUA,EACVjD,YAAaA,IAEfuS,gBA5kBoBxV,EA4kBW,CAC7BE,MAAOA,GA5kBP+G,EAAKjH,EAAOE,MACZG,EAAM4G,EAAG5G,IACTkL,EAAetE,EAAG1H,OAOX,CACTiB,IANF,SAAaE,GAEX,OADsBA,EAAIL,IACAkL,CAC5B,IAukBE3D,YAAaA,EACb4I,aAAcA,GACd5G,SAAUA,GACV6L,WAAY9L,EAAW,CACrBG,KAAMA,EACNF,SAAUA,GACVC,eAAgBA,IAElB4F,YAAanI,EAAY,CACvBtE,KAAMA,EACNgE,YAAaA,EACbd,SAAUA,EACV0B,YAAaA,EACbD,WAAYA,EACZF,aAAcA,GACdC,SAAUA,IAEZD,aAAcA,GACd2E,aAAcA,EACdhN,OAAQA,GACRsQ,UAAW9E,EAAU,CACnB5H,KAAMA,EACN6H,UAAWA,KAGf,OAAOmE,EACT,ECnyC0B,IAAA0G,UAAS,KAAK,SAAOC,GAAS,gD,uEAC9CC,EAAaD,EAAKE,YAAYD,WAAW1U,MACzC4U,EAAcH,EAAKE,YAAYC,YAAY5U,MAE7C0U,GAAcE,EACd,IAAM,IAAAtV,KAAY,WAAIgG,OAAgB,QAAC,6CAAqCoP,EAAU,wBAAgBE,IACjGC,MAAK,SAAAC,GAAO,OAAAC,KAAKC,MAAMF,EAAX,IACZD,MAAK,SAAAC,GACEA,EAAIG,QAAUH,EAAII,OAClBT,EAAKE,YAAYM,OAAOjV,MAAQ8U,EAAIG,OACpCR,EAAKE,YAAYO,KAAKlV,MAAQ8U,EAAII,MAEtCT,EAAKE,YAAYM,OAAOE,SAASC,UAAW,EAC5CX,EAAKE,YAAYO,KAAKC,SAASC,UAAW,EAC1C,YACJ,KAXJ,M,OACA,S,qCDw0CR,IAAIC,EAAiB,CACnB/K,MAAO,SACPxI,KAAM,IACN6I,cAAe,GACf2K,kBAAmB,IACnB5K,UAAU,EACV6K,WAAW,EACXC,eAAgB,eAChBC,cAAe,cACfjL,gBAAiB,EACjBvL,MAAM,EACNyW,cAAe,cACf/M,eAAgB,EAChB8B,MAAO,GACPF,WAAY,GAwOd,QArOA,SAAuBoL,EAAYC,GACjC,IAh6BgBvI,EACZjI,EAq6BA0I,EAMAnE,EACArB,EAbA6B,EA1DN,WACE,IAAIvJ,EAAY,CACdiV,QAAS,GACT3S,YAAa,GACbM,UAAW,GACXsS,KAAM,GACNC,OAAQ,GACRC,OAAQ,GACR/T,OAAQ,GACRgU,OAAQ,GACR/H,OAAQ,IAsBNzO,EAAO,CACT2O,KApBF,SAAcrL,GAIZ,OAHAnC,EAAUmC,GAAKoD,SAAQ,SAAU+P,GAC/B,OAAOA,EAAEnT,EACX,IACOtD,CACT,EAgBE0W,IATF,SAAapT,EAAKyK,GAIhB,OAHA5M,EAAUmC,GAAOnC,EAAUmC,GAAK1B,QAAO,SAAU6U,GAC/C,OAAOA,IAAM1I,CACf,IACO/N,CACT,EAKE2W,GAfF,SAAYrT,EAAKyK,GAEf,OADA5M,EAAUmC,GAAOnC,EAAUmC,GAAKkE,OAAO,CAACuG,IACjC/N,CACT,GAcA,OAAOA,CACT,CAoBe4W,GACTxN,EAAalI,IACb2V,GAl6BYjJ,EA+hChB,WACE,GAAKkJ,EAAL,CACA,IAAIC,EAAqB1I,EAAOhM,KAAKsB,QAAQuS,GACzCc,IAAoBD,GAAoBE,IAC5CvM,EAAOiE,KAAK,SAHU,CAIxB,EAniCIhJ,EAAU,CACZuR,GAAI,GAEC,WACLrR,OAAOsR,aAAaxR,EAAQuR,IAC5BvR,EAAQuR,GAAKrR,OAAOC,WAAW8H,EA45BM,MA55Ba,CACpD,GA45BI0I,EAASW,EACTN,EAAKjM,EAAOiM,GACZD,EAAMhM,EAAOgM,IAEbI,GAAY,EAEZvV,EAAUjD,EAAS,CAAC,EAAGsX,GAEvBoB,EAAkB,EActB,SAASI,EAASC,GAQhB,GAjBF,WACE,IAAKnB,EAAY,MAAM,IAAIoB,MAAM,wBACjC,IAr7ByBC,EAq7BrBC,EAAWjW,EAAQsU,kBACnB4B,EAAkBvB,EAAWwB,cAAcF,GAC/C,IAAKC,EAAiB,MAAM,IAAIH,MAAM,6BAv7BbC,GAw7BzBrN,EAAYuN,GAC2BE,SAAvC9O,EAx7BK+O,MAAM7Y,UAAUmF,MAAMjF,KAAKsY,EAy7BlC,CAGEM,GACAtW,EAAUjD,EAASiD,EAAS8V,GAC5BhJ,EAAS5D,EAAOyL,EAAYhM,EAAWrB,EAAQtH,EAASmJ,GACxDsM,EAAkB3I,EAAOhM,KAAKsB,QAAQuS,GACtC9M,EAAWnJ,IAAI4F,OAAQ,SAAUgR,GACjCxI,EAAOU,UAAUxE,GAAG8D,EAAO7I,WAAWD,UAElChE,EAAQ/B,KAAM,CAChB,IAAK6O,EAAOS,YAAYpG,UAEtB,OADAoP,IACOV,EAAS,CACd5X,MAAM,IAIV6O,EAAOS,YAAYtP,KAAKqJ,EAC1B,CAEItH,EAAQuU,WAAajN,EAAOjK,SAC9ByP,EAAOK,YAAY3E,sBAEfxI,EAAQwU,gBACV1Q,EAAS6Q,EAAY3U,EAAQwU,gBAG3BxU,EAAQyU,eACVtL,EAAOiM,GAAG,cAAeoB,GAAqBpB,GAAG,YAAaoB,IAI9DlP,EAAOjK,QACTyP,EAAOyG,WAAW/K,oBAAoBlB,GAGpCtH,EAAQ0U,gBACV+B,IACAtN,EAAOiM,GAAG,SAAUqB,GAAqBrB,GAAG,YAAaqB,IAGtDlB,IACHhR,YAAW,WACT,OAAO4E,EAAOiE,KAAK,OACrB,GAAG,GACHmI,GAAY,EAEhB,CAEA,SAASiB,EAAoBzU,GAC3B,IAAI0S,EAAgBzU,EAAQyU,cAChB,gBAAR1S,EAAuB+B,EAAS6Q,EAAYF,GAAoBhR,EAAYkR,EAAYF,EAC9F,CAEA,SAASgC,IACP,IAAI/B,EAAgB1U,EAAQ0U,cACxBgC,EAASnR,GAAa,GACVoR,GAAgB,GACtBxR,SAAQ,SAAUhI,GAC1B,OAAOsG,EAAY6D,EAAOnK,GAAIuX,EAChC,IACAgC,EAAOvR,SAAQ,SAAUhI,GACvB,OAAO2G,EAASwD,EAAOnK,GAAIuX,EAC7B,GACF,CAEA,SAAS6B,IACPzJ,EAAOK,YAAYrF,kBACnBgF,EAAOyG,WAAWzL,kBAClBgF,EAAO5I,UAAUyI,OACjB9E,EAAWzH,YACX0M,EAAOU,UAAUnG,QACjByF,EAAOS,YAAYlG,MAAMC,GACzB7D,EAAYkR,EAAY3U,EAAQwU,gBAChClN,EAAOnC,SAAQ,SAAUqF,GACvB,OAAO/G,EAAY+G,EAAGxK,EAAQ0U,cAChC,IACAvL,EAAOgM,IAAI,SAAUsB,GACrBtN,EAAOgM,IAAI,YAAasB,GACxBtN,EAAOgM,IAAI,cAAeqB,GAC1BrN,EAAOgM,IAAI,YAAaqB,EAC1B,CAEA,SAASd,EAAWI,GAClB,GAAKP,EAAL,CACA,IAEIqB,EAAa7Z,EAAS,CACxBwM,WAHesN,KAIdf,GAEHS,IACAV,EAASe,GACTzN,EAAOiE,KAAK,SATU,CAUxB,CAgBA,SAAS7H,EAAarI,GACpB,IAAI8G,EAAW8I,EAAO5P,EAAS,SAAW,YAAYoB,MAClDwB,EAAOE,EAAQ/B,KAAO,eAAiB,YAC3C,OAAO6O,EAAOvH,aAAa2K,MAAMpD,EAAO9O,MAAM8B,GAAMkE,GACtD,CAEA,SAAS2S,EAAgBzZ,GACvB,IAAIwZ,EAASnR,EAAarI,GAC1B,OAAO4P,EAAO5C,aAAa7J,QAAO,SAAUlD,GAC1C,OAA8B,IAAvBuZ,EAAO7K,QAAQ1O,EACxB,GACF,CAEA,SAASuK,EAASZ,EAAOtH,GACvBsN,EAAO7I,WAAWkK,iBAAiBC,kBAC/BmH,GAAWzI,EAAOpF,SAASZ,MAAMA,EAAOtH,GAAa,EAC3D,CA8BA,SAASqX,IACP,OAAO/J,EAAOhG,MAAMxI,KACtB,CA2CA,OAnNAuX,EAASjB,GA8LE,CACTkC,cA3CF,WAEE,OADWhK,EAAOhG,MAAMhI,QAAQJ,IAAI,GACxBJ,QAAUuY,GACxB,EAyCEE,cAvCF,WAEE,OADWjK,EAAOhG,MAAMhI,QAAQJ,KAAK,GACzBJ,QAAUuY,GACxB,EAqCEzD,aAnBF,WACE,OAAOtG,EAAOK,YAAYiG,cAC5B,EAkBE4D,cAZF,WACE,OAAOrO,CACT,EAWEsO,qBAjBF,WACE,OAAOnK,CACT,EAgBE+H,QA1FF,WACOU,IACLgB,IACAhB,GAAY,EACZpM,EAAOiE,KAAK,WACd,EAsFE+H,IAAKA,EACLC,GAAIA,EACJ8B,mBA7BF,WACE,OAAOpK,EAAOZ,cAAc5N,KAC9B,EA4BEyW,OAAQA,EACRoC,WA/DF,WAEEzP,EADWoF,EAAOhG,MAAMhI,QAAQJ,IAAI,GACtBJ,OAAQ,EACxB,EA6DE8Y,WA3DF,WAEE1P,EADWoF,EAAOhG,MAAMhI,QAAQJ,KAAK,GACvBJ,MAAO,EACvB,EAyDEgV,eAzCF,WACE,OAAOxG,EAAOwG,eAAehV,IAAIwO,EAAO9I,SAAS1F,MACnD,EAwCE+Y,eA9CF,WACE,OAAOvK,EAAOpH,YAAY9C,IAAIkK,EAAOwG,eAAehV,IACtD,EA6CEoJ,SAAUA,EACVmP,mBAAoBA,EACpBS,WArBF,WACE,OAAOhQ,CACT,EAoBE/B,aAAcA,EACdoR,gBAAiBA,EAGrB,EEzrDA,ICkDKY,EAKAC,EDvDL,2B,8CAwCA,QAxCyB,aAIvB,YAAAC,KAAA,SAAKhY,GACH,GAAK7B,KAAK8Z,IAGV,OAAO,UAAQ9Z,KAAK8Z,IACtB,EAEA,YAAAC,OAAA,SAAOlY,GACL7B,KAAKga,KAAKnY,EACZ,EAEA,YAAAoY,eAAA,SAAepY,EAAkBqY,GAC3BrY,EAAEsY,MAAMC,MAAQF,EAAEC,MAAMC,KAC1Bpa,KAAKga,KAAKnY,EACd,EAEA,YAAAwY,SAAA,SAASxY,G,QACF7B,KAAK8Z,MAAO9Z,KAAKsa,QAGlBta,KAAK8Z,MACP9Z,KAAKsa,QAAS,EACA,QAAd,KAAAzY,EAAEsY,OAAMI,cAAM,gBAAG1Y,EAAE2Y,KACnB3Y,EAAE2Y,IAAIC,aAAa,cAAe,QAClC5Y,EAAE2Y,IAAIC,aAAa,YAAa,SAEpC,EAEM,YAAAT,KAAN,SAAWnY,G,4GACT,OAAKA,EAAEsY,MAAMC,KAGbpa,KAAKsa,QAAS,EACd,EAAAta,KAAW,GAAM0a,MAAM7Y,EAAEsY,MAAMC,KAAKnE,MAAK,SAAA1S,GAAK,OAAAA,EAAEoX,MAAF,MAH5C,I,cAGF,EAAKb,IAAM,SACX,a,YAEJ,EAxCA,CAAyB,KEOzB,2B,8CAgDA,QAhD8B,aAI1B,YAAAD,KAAA,SAAKhY,GACD,IAAMsX,EAAgBtX,EAAEsY,MAAMS,YAAc5a,KAAK6a,OAAS7a,KAAK6a,MAAM1B,gBAC/DD,EAAgBrX,EAAEsY,MAAMS,YAAc5a,KAAK6a,OAAS7a,KAAK6a,MAAM3B,gBAErE,OAAO,WAAKpT,UAAU,iBAClB,WAAKA,WAAW,IAAAgV,aAAY,QAASjZ,EAAEsY,MAAMrU,UAAWqT,GAAiB,WAAYD,GAAiB,aAClG,WAAKpT,UAAU,oBACVjE,EAAE2W,WAGV3W,EAAEsY,MAAMS,YAAc5a,KAAK6a,OACxB,IAACE,EAAW,CACR5B,cAAeA,EACfD,cAAeA,EACfM,WAAYxZ,KAAK6a,MAAMrB,WACvBD,WAAYvZ,KAAK6a,MAAMtB,aAIvC,EAEA,YAAAyB,SAAA,SAASnZ,G,UACCoZ,EAAYpQ,SAAS0N,cAAc,yBAGzCvY,KAAK6a,MAAQ,EAAcI,GAAW,SAClCvP,MAAO,SACPK,cAAe,YACf4K,WAAY9U,EAAEsY,MAAMe,cACG,QAApB,EAAArZ,EAAEsY,MAAMgB,oBAAY,QAAI,CAAC,IAGhCnb,KAAK6a,MAAMrD,GAAG,QAAQ,WAAM,OAAA7Q,WAAW,WAAU,GAArB,IAC5B3G,KAAK6a,MAAMrD,GAAG,UAAU,WAAM,OAAA7Q,WAAW,WAAU,GAArB,IAC9B3G,KAAK6a,MAAMrD,GAAG,UAAU,WAAM,OAAA7Q,WAAW,WAAU,GAArB,IAEhB,QAAd,KAAA9E,EAAEsY,OAAMI,cAAM,gBAAG,CAAEC,IAAKS,EAAWJ,MAAO7a,KAAK6a,QAC/C,CAAC,IAAM,KAAMtT,SAAQ,SAAAhE,GAAK,OAAAoD,WAAW,WAAUpD,EAArB,GAC9B,EAEA,YAAA0W,eAAA,SAAepY,EAA0BqY,GACjCrY,EAAEsY,MAAMe,eAAiBhB,EAAEC,MAAMe,cACjClb,KAAK6a,MAAM1D,OAAO,CAAER,WAAY9U,EAAEsY,MAAMe,cAChD,EACJ,EAhDA,CAA8B,KAyD9B,2B,8CAWA,QAXiC,aAC7B,YAAArB,KAAA,SAAKhY,GACD,MAAO,CACH,2BAAmB,iBAAiBiE,WAAW,IAAAgV,aAAY,4CAA6CvU,UAAW1E,EAAEsY,MAAMhB,cAAeiC,QAASvZ,EAAEsY,MAAMX,YACvJ,SAAG1T,UAAU,QAAO,IAACuV,EAAG,CAACjB,IAAI,2DAEjC,2BAAmB,aAAatU,WAAW,IAAAgV,aAAY,4CAA6CvU,UAAW1E,EAAEsY,MAAMjB,cAAekC,QAASvZ,EAAEsY,MAAMZ,YACnJ,SAAGzT,UAAU,QAAO,IAACuV,EAAG,CAACjB,IAAI,4DAGzC,EACJ,EAXA,CAAiC,KAiBjC,2B,8CAMA,QANkC,aAC9B,YAAAP,KAAA,SAAKhY,GACD,OAAO,WAAKiE,WAAW,IAAAgV,aAAY,4BAA6BjZ,EAAEsY,MAAMrU,YACnEjE,EAAE2W,SAEX,EACJ,EANA,CAAkC,KCtFrB8C,GDmGb,yB,8CAMA,EANuC,aACnC,YAAAzB,KAAA,SAAKhY,GACD,OAAO,IAAC0Z,GAAY,WAAK1Z,EAAEsY,OACvB,WAAKrU,UAAU,oBAAoB0V,QAAS3Z,EAAEsY,MAAMsB,MAAQ,QAAU,OAAQrB,IAAKvY,EAAEsY,MAAMC,MAEnG,CACJ,CANA,CAAuC,MCnGL,IAAAsB,UAAQ,SAACxP,QAAA,IAAAA,IAAAA,EAAA,KACvC,IAAMyP,EAAiBjV,OAAOkV,WAAW,sBAAe1P,EAAK,QACzD2P,EAAUF,EAAeE,QAM7B,OAJAF,EAAeG,SAAW,SAACzR,GACvB,aACAwR,EAAUxR,EAAMwR,OACpB,EACO,WAAM,OAACA,CAAD,CACjB,KCwEME,EAAqD,CACvDC,GArFO,CACPC,KAAM,WACNC,SAAU,cACVC,SAAU,eACVrb,IAAK,YACLsb,eAAgB,gBAChBC,mBAAoB,aACpBC,KAAM,YACNC,eAAgB,gBAChBC,qBAAsB,SACtBC,uBAAwB,sBACxBC,eAAgB,OAChBC,iBAAkB,oBAClBC,uBAAwB,cACxBC,kBAAmB,sBACnBC,oBAAqB,WACrBC,sBAAuB,wBACvBC,sBAAuB,cACvBC,wBAAyB,2BACzBC,mBAAoB,uBACpBC,qBAAsB,iBACtBC,kBAAmB,YACnBC,oBAAqB,yBACrBC,sBAAuB,gCACvBC,wBAAyB,wBACzBC,gBAAiB,YACjBC,gBAAiB,OACjBC,kBAAmB,WACnBC,kBAAmB,SACnBC,kBAAmB,UACnBC,aAAc,0BACdC,mBAAoB,4DACpBC,gBAAiB,6CACjBC,sBAAuB,iEACvBC,oBAAqB,cACrBC,iBAAkB,gBAClBC,kBAAmB,iDACnBC,aAAc,iCACdC,OAAQ,gBAgDRC,GA7CkB,CAClBrC,KAAM,cACNC,SAAU,cACVC,SAAU,iBACVrb,IAAK,UACLsb,eAAgB,kBAChBC,mBAAoB,iBACpBC,KAAM,WACNC,eAAgB,qBAChBC,qBAAsB,QACtBC,uBAAwB,qBACxBC,eAAgB,MAChBC,iBAAkB,mBAClBC,uBAAwB,cACxBC,kBAAmB,sBACnBC,oBAAqB,YACrBC,sBAAuB,yBACvBC,sBAAuB,qBACvBC,wBAAyB,kCACzBC,mBAAoB,uBACpBC,qBAAsB,uBACtBC,kBAAmB,QACnBC,oBAAqB,qBACrBC,sBAAuB,mCACvBC,wBAAyB,gDACzBC,gBAAiB,aACjBC,gBAAiB,OACjBC,kBAAmB,SACnBC,kBAAmB,WACnBC,kBAAmB,SACnBC,aAAc,6BACdC,mBAAoB,8DACpBC,gBAAiB,4CACjBC,sBAAuB,+DACvBC,oBAAqB,cACrBC,iBAAkB,iBAClBC,kBAAmB,qDACnBC,aAAc,yCACdC,OAAQ,cAUCE,EAAiB,SAAwB5e,GAClD,MAAuB,UAAnB+G,OAAO8X,QACAzC,EAAiB,GAAEpc,GAEvBoc,EAAiB,GAAEpc,EAC9B,ECrFA,2B,8CAYA,QAZoC,aAEhC,YAAAka,KAAA,SAAKhY,GACD,OAAO,eAASiE,WAAW,IAAAgV,aAAYjZ,EAAEsY,MAAMrU,YAC1CjE,EAAEsY,MAAMsE,MAAMzZ,KAAI,SAACzB,EAAGhE,GACnB,OAAIsC,EAAEsY,MAAMsE,MAAMhf,OAAS,IAAMF,EACtB,WAAK2M,MAAOrK,EAAEsY,MAAMsE,MAAM,GAAGvS,MAAOC,OAAQtK,EAAEsY,MAAMsE,MAAM,GAAGtS,OAAQiO,IAAK7W,EAAEmb,SAAUC,OAAQ,UAAGpb,EAAEmb,SAAQ,gBAAQnb,EAAEqb,UAAS,OAAOpD,QAAQ,OAAOqD,IAAKtb,EAAEub,UAE3J,cAAQH,OAAQ,UAAGpb,EAAEmb,SAAQ,gBAAQnb,EAAEqb,UAAS,OAAO1c,KAAK,aAAa6c,MAAOxb,EAAEyb,UACjG,IAER,EACJ,EAZA,CAAoC,MJiDpC,SAAKrF,GACD,yBACA,wBACH,CAHD,CAAKA,IAAAA,EAAW,KAKhB,SAAKC,GACD,iBACA,mBACA,uBACA,sBACH,CALD,CAAKA,IAAAA,EAAY,KAOjB,IF1DwDhL,EE0DlDqQ,EAAW3D,EAAmB,KAEpC,2B,8CA6DA,QA7DiC,aAC7B,YAAAvB,OAAA,SAAOlY,GACH6E,OAAOrE,iBAAiB,UAAU,IAAAuT,UAAS,KAAM,WAC7C,YACJ,IACJ,EAEA,YAAAiE,KAAA,SAAKhY,GACD,IAAMqd,EAAsBrd,EAAEsY,MAE9B,GAA8B,IAA1B+E,EAAST,MAAMhf,OAGnB,MAAO,EACFoC,EAAEsY,MAAMgF,OAAStd,EAAEsY,MAAMiF,WAAa,cAAQtZ,UAAU,2BACrD,eACKjE,EAAEsY,MAAMgF,OAAS,UAAIrZ,UAAU,YAAYoZ,EAASC,OACpDtd,EAAEsY,MAAMiF,UAAY,SAAGtZ,UAAU,eAAejE,EAAEsY,MAAMiF,WAE3Dvd,EAAEsY,MAAMkF,YAAcxd,EAAEsY,MAAMmF,aAAgB,SAAGxZ,UAAU,OAAOyZ,KAAM1d,EAAEsY,MAAMmF,YAAahgB,OAAO,QAAO,aAAaif,EAAe,YACnIU,KAAc,gBAAOV,EAAe,WACtC,SAAGzY,UAAU,QAAO,IAACuV,EAAG,CAACjB,IAAI,6DAErCvY,EAAEsY,MAAMkF,WACF,WAAKvZ,UAAU,iBAAiB6D,MAAO,4BAAqBkB,SAAS2U,gBAAgBC,YAAW,OAAM,IAACC,EAAQ,CAACC,qBAAqB,EAAMzE,cAAgB+D,KAAcC,EAAST,MAAMhf,QAAU,EAAImb,YAAU,EAACO,aAAc,CAC7NpR,eAAgB,EAChB2B,MAAO,QACPE,gBAAiB,EACjBC,MAAO,IAEP0O,OAAQ,SAACqF,GACLA,EAAK/E,MAAM1D,OAAO,CAAEpN,eAAgB6V,EAAK/E,MAAMlT,eAAelI,SAE9DmgB,EAAK/E,MAAMrD,GAAG,UAAU,IAAA5B,UAAS,KAAM,WACnCgK,EAAK/E,MAAM1D,OAAO,CAAEpN,eAAgB6V,EAAK/E,MAAMlT,eAAelI,QAClE,IACJ,IACF,oBAAIyf,EAAST,QAAK,GAAEhc,QAAO,SAAAod,GAAQ,OAAAA,EAAK3d,OAASyX,EAAYmG,OAA1B,IAAmC9a,KAAI,SAACzB,EAAGhE,GAC5E,WAACgc,EAAY,KACT,IAACwE,GAAW,WAAKxc,EAAiB,CAAEhE,EAAGA,EAAGgT,KAAM2M,EAASC,SAD7D,IAKCtd,EAAEsY,MAAMmF,aAAe,IAAC/D,EAAY,KACjC,SAAGzV,UAAU,eAAeyZ,KAAM1d,EAAEsY,MAAMmF,YAAahgB,OAAO,SAC1D,SAAGwG,UAAU,QAAO,IAACuV,EAAG,CAACjB,IAAI,2DAC7B,gBAAOmE,EAAe,eAIhC,WAAKzY,UAAU,oBACZoZ,EAAST,MAAMzZ,KAAI,SAACzB,EAAGhE,GACpB,OAAIgE,EAAErB,OAASyX,EAAYmG,QAChB,IAACC,GAAW,WAAKxc,EAAiB,CAAEhE,EAAGA,EAAGgT,KAAM2M,EAASC,SAEzD,IAACa,GAAW,WAAKzc,GAChC,KAIhB,EACJ,EA7DA,CAAiC,KAoEjC,2B,8CA2FA,QA3FiC,aAK7B,YAAAwW,OAAA,SAAOlY,GACH7B,KAAKigB,MAAQpe,EAAEsY,MAAM+F,aAAere,EAAEsY,MAAM8F,MAC5CjgB,KAAKmgB,cAActe,EACvB,EAEA,YAAAgY,KAAA,SAAKhY,GAAL,I,EF7D4Boe,EAItBG,EEyDN,OACUC,EAA4Bxe,EAAEsY,MAEpC,OAAO,WAAKrU,UAAU,eAAc,kBACf,0DAAmDqQ,KAAKmK,WAAU,WAAKtgB,KAAKugB,WAAW,iBAASvgB,KAAKugB,SAASC,eAAc,OAE7I,SACI1a,UAAU,QACVyZ,KAAMc,EAAYf,YAClBH,MAAOkB,EAAYlB,MACnB7f,OAAQ+gB,EAAYI,aAAe,SAAW,QAC9CC,IAAKL,EAAYI,aAAe,sBAAwB,GACxDrF,QAAS,WACL1U,OAAOia,MAAM,cAAe,CAAElC,MAAO,EAAC,WAAK,EAAK8B,aAE5CF,EAAYO,eACZla,OAAOia,MAAM,mBAAoB,CAAElC,MAAO,CAAC,EAAKoB,MAAOgB,MAAO,CAAC,CAAE/M,KAAMuM,EAAYO,iBAC3F,GAECP,EAAYS,QAAU,IAACC,GAAc,WAAKV,EAAYS,SACtDT,EAAYW,aAAe,IAACD,GAAc,WAAKV,EAAYW,YAAW,CAAElb,UAAU,YAEhE,QAAlB,EAAAua,EAAYY,cAAM,eAAExhB,QAAS,GAAK,WAAKqG,UAAU,YAE7Cua,EAAYY,OAAOjc,KAAI,SAAAzB,GACpB,mBAAMuC,UAAU,UAAU6D,MAAO,oBAAapG,EAAE2d,SAAQ,MACnD3d,EAAE4d,MADP,MAOZ,SACIrb,UAAU,OACVyZ,KAAMc,EAAYf,YAClBH,MAAOkB,EAAYlB,MACnB7f,OAAQ+gB,EAAYI,aAAe,SAAW,QAC9CC,IAAKL,EAAYI,aAAe,sBAAwB,GACxDrF,QAAS,WACL1U,OAAOia,MAAM,cAAe,CAAElC,MAAO,EAAC,WAAK,EAAK8B,aAE5CF,EAAYO,eACZla,OAAOia,MAAM,mBAAoB,CAAElC,MAAO,CAAC,EAAKoB,MAAOgB,MAAO,CAAC,CAAE/M,KAAMuM,EAAYO,iBAC3F,GAEA,YAAM9a,UAAU,SAASua,EAAYlB,OACrC,YAAMrZ,UAAU,YAAYua,EAAYe,WAG3CphB,KAAKigB,OAAS,WAAKna,UAAU,WACzBua,EAAYH,aAAe,YAAMpa,UAAU,UAAU,UF3H3C,SAACma,EAAeoB,QAAA,IAAAA,IAAAA,GAAA,GACvC,IAAMC,EAAgB,IAAIC,KAAKC,aAAa9a,OAAO8X,QAAS,CACxD7U,MAAO,WACP0X,SAAU,QACXI,OAAOxB,GAEV,OAAIoB,EACOC,EAAcI,QAAQ,IAAK,KAE3BJ,EAAcI,QAAQ,IAAK,KAAKA,QAAQ,IAAK,IAAI9T,MAChE,CEiH8E+T,CAAYtB,EAAYJ,OAAO,KAC5FI,EAAYuB,WAAa,YAAM9b,UAAU,SAASua,EAAYuB,WAC/D,YAAM9b,UAAU,SAAS,WFjHTma,EEiHiCjgB,KAAKigB,MF3G7C,OAFfG,EAHe,IAAImB,KAAKC,aAAa9a,OAAgB,QAAG,CAAEmb,sBAAuB,IAAKJ,OACxFxB,GAE4B6B,WAAWJ,QAAQ,IAAK,IAAIK,MAAM,MAEnD,GACJ,gBAAS3B,EAAW,GAAE,wBAAgBA,EAAW,GAAE,UAEnD,gBAASA,EAAW,GAAE,gDE2GjC,EAEA,YAAAD,cAAA,SAActe,G,YACJwe,EAA4Bxe,EAAEsY,MAE9B6H,EAAmE,QAA5D,EAAoB,QAApB,EAAA3B,EAAY4B,gBAAQ,eAAEF,MAAM,KAAKtf,QAAO,SAAAc,GAAK,OAAAA,GAAW,MAANA,CAAL,WAAe,QAAI,CAAC,IACxE2e,EAA2B,QAAhB,EAAA7B,EAAY9N,YAAI,QAAI1Q,EAAEsY,MAAM5H,KAE7CvS,KAAK6f,KAAO,CACRsC,QAA2B,QAAlB,EAAA9B,EAAY+B,cAAM,QAAI/B,EAAYgC,UAC3CC,UAAWjC,EAAYlB,MACvBoD,cAAeP,EAAKviB,OAAS,EAAIuiB,EAAK,GAAK,KAC3CQ,eAAgBR,EAAKviB,OAAS,EAAIuiB,EAAK,GAAK,KAC5CS,eAAgBT,EAAKviB,OAAS,EAAIuiB,EAAK,GAAK,KAC5C/B,MAAOI,EAAYqC,cAAgB,KACnCC,SAAUtC,EAAYuC,eAAiB,KACvCC,YAAaxC,EAAYyC,YAG7B,IAAMvQ,EAAO,CACTiO,eAAgB0B,EAChBhZ,OAAQmX,EAAY9gB,EAAI,GAAGuiB,YAG/B9hB,KAAKugB,UAAW,oBAAKvgB,KAAK6f,MAAStN,EACvC,EACJ,EA3FA,CAAiC,KA8FjC,2B,8CAUA,QAV0B,aACtB,YAAAsH,KAAA,SAAKhY,GACK,MAAyEA,EAAEsY,MAAzEgF,EAAK,QAAWG,EAAW,UAAEmB,EAAY,eAAEsC,EAAQ,WAAEjC,EAAM,SAAEkC,EAAK,QAE1E,OAAO,SAAGld,UAAU,eAAe6D,MAAO,sBAAeqZ,GAASzD,KAAMD,EAAahgB,OAAQmhB,EAAe,SAAW,QAASC,IAAKD,EAAe,sBAAwB,GAAItB,MAAOA,GACnL,YAAMrZ,UAAU,YAAYqZ,GAC5B,YAAMrZ,UAAU,eAAeid,GAC/B,IAAChC,GAAc,WAAKD,IAE5B,EACJ,EAVA,CAA0B,KF9N8BlS,EE0OV,SAACqU,EAAGnhB,GAC9C,UAAQmhB,EAAG,CACPpJ,KAAM,SAAAhY,GAAK,WAACqhB,GAAW,WAAKphB,GAAjB,GAEnB,GF7OI,QEyOe,2BFxOVyF,SAAQ,SAAAhE,GACL,IAAM4f,EAAS1K,MAAM/P,KAAKnF,EAAE6f,iBAAiB,UACzCxD,EAAY,KAChB,GAAIuD,EAAO1jB,OAAS,EAChBmgB,EAAOuD,EAAOne,KAAI,SAAAzB,GACd,IACI,OAAO4S,KAAKC,MAAM7S,EAAEnC,MACxB,CAAE,MAAOiiB,GACL,OAAO9f,EAAEnC,KACb,CACJ,SACC,GAAI+hB,EAAO,aAAcG,iBAC1B,IACI1D,EAAOzJ,KAAKC,MAAM+M,EAAO,GAAG/hB,MAChC,CAAE,MAAOiiB,GACLzD,EAAOuD,EAAO,GAAG/hB,KACrB,CACJwN,EAAGrL,EAAGqc,EACV,G,GO/BJ2D,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAaE,QAGrB,IAAIC,EAASN,EAAyBE,GAAY,CAGjDG,QAAS,CAAC,GAOX,OAHAE,EAAoBL,GAAU3jB,KAAK+jB,EAAOD,QAASC,EAAQA,EAAOD,QAASJ,GAGpEK,EAAOD,OACf,CAGAJ,EAAoBrT,EAAI2T,ETzBpB5kB,EAAW,GACfskB,EAAoBO,EAAI,CAACC,EAAQC,EAAUC,EAAIC,KAC9C,IAAGF,EAAH,CAMA,IAAIG,EAAeC,IACnB,IAAS9kB,EAAI,EAAGA,EAAIL,EAASO,OAAQF,IAAK,CAGzC,IAFA,IAAK0kB,EAAUC,EAAIC,GAAYjlB,EAASK,GACpC+kB,GAAY,EACPC,EAAI,EAAGA,EAAIN,EAASxkB,OAAQ8kB,MACpB,EAAXJ,GAAsBC,GAAgBD,IAAa/kB,OAAOuG,KAAK6d,EAAoBO,GAAGva,OAAO7J,GAAS6jB,EAAoBO,EAAEpkB,GAAKskB,EAASM,MAC9IN,EAASO,OAAOD,IAAK,IAErBD,GAAY,EACTH,EAAWC,IAAcA,EAAeD,IAG7C,GAAGG,EAAW,CACbplB,EAASslB,OAAOjlB,IAAK,GACrB,IAAI0jB,EAAIiB,SACEP,IAANV,IAAiBe,EAASf,EAC/B,CACD,CACA,OAAOe,CAnBP,CAJCG,EAAWA,GAAY,EACvB,IAAI,IAAI5kB,EAAIL,EAASO,OAAQF,EAAI,GAAKL,EAASK,EAAI,GAAG,GAAK4kB,EAAU5kB,IAAKL,EAASK,GAAKL,EAASK,EAAI,GACrGL,EAASK,GAAK,CAAC0kB,EAAUC,EAAIC,EAqBjB,EUzBdX,EAAoB5iB,EAAKijB,IACxB,IAAIY,EAASZ,GAAUA,EAAOa,WAC7B,IAAOb,EAAiB,QACxB,IAAM,EAEP,OADAL,EAAoB1hB,EAAE2iB,EAAQ,CAAE7b,EAAG6b,IAC5BA,CAAM,ECLdjB,EAAoB1hB,EAAI,CAAC8hB,EAASe,KACjC,IAAI,IAAIhlB,KAAOglB,EACXnB,EAAoBtJ,EAAEyK,EAAYhlB,KAAS6jB,EAAoBtJ,EAAE0J,EAASjkB,IAC5EP,OAAOwlB,eAAehB,EAASjkB,EAAK,CAAEklB,YAAY,EAAMnkB,IAAKikB,EAAWhlB,IAE1E,ECND6jB,EAAoB7W,EAAI,WACvB,GAA0B,iBAAfmY,WAAyB,OAAOA,WAC3C,IACC,OAAO9kB,MAAQ,IAAI+kB,SAAS,cAAb,EAChB,CAAE,MAAOzN,GACR,GAAsB,iBAAX5Q,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxB8c,EAAoBtJ,EAAI,CAAC8K,EAAKC,IAAU7lB,OAAOQ,UAAUC,eAAeC,KAAKklB,EAAKC,G,MCKlF,IAAIC,EAAkB,CACrB,YAAe,GAahB1B,EAAoBO,EAAEQ,EAAKY,GAA0C,IAA7BD,EAAgBC,GAGxD,IAAIC,EAAuB,CAACC,EAA4BzF,KACvD,IAGI6D,EAAU0B,GAHTlB,EAAUqB,EAAaC,GAAW3F,EAGhBrgB,EAAI,EAC3B,GAAG0kB,EAASuB,MAAMzN,GAAgC,IAAxBmN,EAAgBnN,KAAa,CACtD,IAAI0L,KAAY6B,EACZ9B,EAAoBtJ,EAAEoL,EAAa7B,KACrCD,EAAoBrT,EAAEsT,GAAY6B,EAAY7B,IAGhD,GAAG8B,EAAS,IAAIvB,EAASuB,EAAQ/B,EAClC,CAEA,IADG6B,GAA4BA,EAA2BzF,GACrDrgB,EAAI0kB,EAASxkB,OAAQF,IACzB4lB,EAAUlB,EAAS1kB,GAChBikB,EAAoBtJ,EAAEgL,EAAiBC,IAAYD,EAAgBC,IACrED,EAAgBC,GAAS,KAE1BD,EAAgBC,GAAW,EAE5B,OAAO3B,EAAoBO,EAAEC,EAAO,EAGjCyB,EAAqB5kB,KAAqC,+BAAIA,KAAqC,gCAAK,GAC5G4kB,EAAmBle,QAAQ6d,EAAqBM,KAAK,KAAM,IAC3DD,EAAmBnjB,KAAO8iB,EAAqBM,KAAK,KAAMD,EAAmBnjB,KAAKojB,KAAKD,G,KC7CvF,IAAIE,EAAsBnC,EAAoBO,OAAEJ,EAAW,CAAC,WAAW,IAAOH,EAAoB,QAClGmC,EAAsBnC,EAAoBO,EAAE4B,E","sources":["webpack://hema-foto-shopping/webpack/runtime/chunk loaded","webpack://hema-foto-shopping/./node_modules/embla-carousel/embla-carousel.esm.js","webpack://hema-foto-shopping/./src/ts/utils.ts","webpack://hema-foto-shopping/./src/ts/svg.tsx","webpack://hema-foto-shopping/./src/ts/entries/hotspotGrid.tsx","webpack://hema-foto-shopping/./src/ts/components/Carousel/Carousel.tsx","webpack://hema-foto-shopping/./src/ts/mobile.ts","webpack://hema-foto-shopping/./src/ts/translation.ts","webpack://hema-foto-shopping/./src/ts/components/images/picture.tsx","webpack://hema-foto-shopping/webpack/bootstrap","webpack://hema-foto-shopping/webpack/runtime/compat get default export","webpack://hema-foto-shopping/webpack/runtime/define property getters","webpack://hema-foto-shopping/webpack/runtime/global","webpack://hema-foto-shopping/webpack/runtime/hasOwnProperty shorthand","webpack://hema-foto-shopping/webpack/runtime/jsonp chunk loading","webpack://hema-foto-shopping/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction Alignment(params) {\n var viewSize = params.viewSize,\n align = params.align;\n var predefined = {\n start: start,\n center: center,\n end: end\n };\n\n function start() {\n return 0;\n }\n\n function center(n) {\n return end(n) / 2;\n }\n\n function end(n) {\n return viewSize - n;\n }\n\n function percent() {\n return viewSize * Number(align);\n }\n\n function measure(n) {\n if (typeof align === 'number') return percent();\n return predefined[align](n);\n }\n\n var self = {\n measure: measure\n };\n return self;\n}\n\nfunction Animation(callback) {\n var animationFrame = 0;\n\n function ifAnimating(active, cb) {\n return function () {\n if (active === !!animationFrame) cb();\n };\n }\n\n function start() {\n animationFrame = window.requestAnimationFrame(callback);\n }\n\n function stop() {\n window.cancelAnimationFrame(animationFrame);\n animationFrame = 0;\n }\n\n var self = {\n proceed: ifAnimating(true, start),\n start: ifAnimating(false, start),\n stop: ifAnimating(true, stop)\n };\n return self;\n}\n\nfunction Axis(axis) {\n var scroll = axis === 'y' ? 'y' : 'x';\n var cross = axis === 'y' ? 'x' : 'y';\n\n function measure(node) {\n var _a = node.getBoundingClientRect(),\n width = _a.width,\n height = _a.height;\n\n return scroll === 'x' ? width : height;\n }\n\n var self = {\n cross: cross,\n measure: measure,\n scroll: scroll\n };\n return self;\n}\n\nfunction Counter(params) {\n var start = params.start,\n limit = params.limit,\n loop = params.loop;\n var min = limit.min,\n max = limit.max;\n var type = loop ? 'loop' : 'constrain';\n var withinLimit = limit[type];\n var counter = withinLimit(start);\n\n function get() {\n return counter;\n }\n\n function set(n) {\n counter = withinLimit(n);\n return self;\n }\n\n function add(n) {\n if (n !== 0) {\n var sign = n / Math.abs(n);\n set(get() + sign);\n return add(n + sign * -1);\n }\n\n return self;\n }\n\n function clone() {\n return Counter({\n start: get(),\n limit: limit,\n loop: loop\n });\n }\n\n var self = {\n add: add,\n clone: clone,\n get: get,\n max: max,\n min: min,\n set: set\n };\n return self;\n}\n\nfunction Vector1D(value) {\n var vector = value;\n\n function get() {\n return vector;\n }\n\n function set(n) {\n vector = readNumber(n);\n return self;\n }\n\n function add(n) {\n vector += readNumber(n);\n return self;\n }\n\n function subtract(n) {\n vector -= readNumber(n);\n return self;\n }\n\n function multiply(n) {\n vector *= n;\n return self;\n }\n\n function divide(n) {\n vector /= n;\n return self;\n }\n\n function normalize() {\n if (vector !== 0) divide(vector);\n return self;\n }\n\n function readNumber(n) {\n return typeof n === 'number' ? n : n.get();\n }\n\n var self = {\n add: add,\n divide: divide,\n get: get,\n multiply: multiply,\n normalize: normalize,\n set: set,\n subtract: subtract\n };\n return self;\n}\n\nfunction Direction(value) {\n var direction = Vector1D(normalize(value));\n var get = direction.get;\n\n function normalize(n) {\n return n === 0 ? 0 : n / Math.abs(n);\n }\n\n function set(v) {\n var d = normalize(v.get());\n if (d !== 0) direction.set(d);\n return self;\n }\n\n var self = {\n get: get,\n set: set\n };\n return self;\n}\n\nfunction EventStore() {\n var listeners = [];\n\n function add(node, type, handler, options) {\n if (options === void 0) {\n options = false;\n }\n\n node.addEventListener(type, handler, options);\n listeners.push(function () {\n return node.removeEventListener(type, handler, options);\n });\n return self;\n }\n\n function removeAll() {\n listeners = listeners.filter(function (remove) {\n return remove();\n });\n return self;\n }\n\n var self = {\n add: add,\n removeAll: removeAll\n };\n return self;\n}\n\nfunction Limit(params) {\n var min = params.min,\n max = params.max;\n var length = Math.abs(min - max);\n\n function reachedMin(n) {\n return n < min;\n }\n\n function reachedMax(n) {\n return n > max;\n }\n\n function reachedAny(n) {\n return reachedMin(n) || reachedMax(n);\n }\n\n function removeOffset(n) {\n if (min === max) return n;\n\n while (reachedMin(n)) {\n n += length;\n }\n\n while (reachedMax(n)) {\n n -= length;\n }\n\n return n;\n }\n\n function loop(n) {\n if (!reachedAny(n)) return n;\n return reachedMin(n) ? max : min;\n }\n\n function constrain(n) {\n if (!reachedAny(n)) return n;\n return reachedMin(n) ? min : max;\n }\n\n var self = {\n constrain: constrain,\n length: length,\n loop: loop,\n max: max,\n min: min,\n reachedAny: reachedAny,\n reachedMax: reachedMax,\n reachedMin: reachedMin,\n removeOffset: removeOffset\n };\n return self;\n}\n\nfunction DragHandler(params) {\n var target = params.target,\n scrollBody = params.scrollBody,\n dragFree = params.dragFree,\n animation = params.animation,\n axis = params.axis;\n var element = params.element,\n dragTracker = params.dragTracker,\n location = params.location,\n events = params.events,\n limit = params.limit;\n var scrollAxis = axis.scroll,\n crossAxis = axis.cross;\n var focusNodes = ['INPUT', 'SELECT', 'TEXTAREA'];\n var startScroll = Vector1D(0);\n var startCross = Vector1D(0);\n var dragStartPoint = Vector1D(0);\n var activationEvents = EventStore();\n var interactionEvents = EventStore();\n var snapForceBoost = {\n mouse: 2.5,\n touch: 3.5\n };\n var freeForceBoost = {\n mouse: 5,\n touch: 7\n };\n var baseSpeed = dragFree ? 5 : 12;\n var dragThreshold = 4;\n var edgeLimit = Limit({\n min: limit.min - 70,\n max: limit.max + 70\n });\n var pointerIsDown = false;\n var preventScroll = false;\n var preventClick = false;\n var isMouse = false;\n\n function addActivationEvents() {\n var node = element;\n activationEvents.add(node, 'touchmove', function () {\n return undefined;\n }).add(node, 'touchend', function () {\n return undefined;\n }).add(node, 'touchstart', down).add(node, 'mousedown', down).add(node, 'touchcancel', up).add(node, 'contextmenu', up).add(node, 'click', click);\n }\n\n function addInteractionEvents() {\n var node = !isMouse ? element : document;\n interactionEvents.add(node, 'touchmove', move).add(node, 'touchend', up).add(node, 'mousemove', move).add(node, 'mouseup', up);\n }\n\n function removeAllEvents() {\n activationEvents.removeAll();\n interactionEvents.removeAll();\n }\n\n function isFocusNode(node) {\n var name = node.nodeName || '';\n return focusNodes.indexOf(name) > -1;\n }\n\n function forceBoost() {\n var boost = dragFree ? freeForceBoost : snapForceBoost;\n var type = isMouse ? 'mouse' : 'touch';\n return boost[type];\n }\n\n function speedFactor(forceB, forceA) {\n var diff = delta(Math.abs(forceB), Math.abs(forceA));\n if (Math.abs(forceB) <= Math.abs(forceA)) return 0;\n if (forceB === 0 || forceA === 0) return 0;\n return Math.abs(diff / forceB);\n }\n\n function allowedForce(force) {\n var scrollTarget = params.scrollTarget,\n index = params.index;\n var currentLocation = scrollTarget.byDistance(0, false);\n var targetChanged = currentLocation.index !== index.get();\n var seekNext = !targetChanged && Math.abs(force) > dragThreshold;\n var destination = force + location.get();\n\n if (seekNext && !dragFree && !limit.reachedAny(destination)) {\n var next = index.clone().add(Direction(force).get() * -1);\n return scrollTarget.byIndex(next.get(), 0).distance;\n }\n\n if (!params.loop && edgeLimit.reachedAny(destination)) {\n var edge = edgeLimit.reachedMax(destination) ? 'max' : 'min';\n return edgeLimit[edge] - target.get();\n }\n\n return scrollTarget.byDistance(force, !dragFree).distance;\n }\n\n function down(evt) {\n isMouse = evt.type === 'mousedown';\n if (isMouse && evt.button !== 0) return;\n var isMoving = delta(target.get(), location.get()) >= 2;\n var clearPreventClick = isMouse || !isMoving;\n var isNotFocusNode = !isFocusNode(evt.target);\n var preventDefault = isMoving || isMouse && isNotFocusNode;\n pointerIsDown = true;\n dragTracker.pointerDown(evt);\n dragStartPoint.set(target);\n target.set(location);\n scrollBody.useDefaultMass().useSpeed(80);\n addInteractionEvents();\n startScroll.set(dragTracker.readPoint(evt, scrollAxis));\n startCross.set(dragTracker.readPoint(evt, crossAxis));\n events.emit('pointerDown');\n if (clearPreventClick) preventClick = false;\n if (preventDefault) evt.preventDefault();\n }\n\n function move(evt) {\n if (!preventScroll && !isMouse) {\n if (!evt.cancelable) return up();\n var moveScroll = dragTracker.readPoint(evt, scrollAxis).get();\n var moveCross = dragTracker.readPoint(evt, crossAxis).get();\n var diffScroll = delta(moveScroll, startScroll.get());\n var diffCross = delta(moveCross, startCross.get());\n preventScroll = diffScroll > diffCross;\n if (!preventScroll && !preventClick) return up();\n }\n\n var diff = dragTracker.pointerMove(evt);\n var reachedLimit = limit.reachedAny(location.get());\n var resist = !params.loop && reachedLimit ? 2 : 1;\n if (!preventClick && diff) preventClick = true;\n animation.start();\n target.add(diff / resist);\n evt.preventDefault();\n }\n\n function up() {\n var scrollTo = params.scrollTo;\n var rawForce = dragTracker.pointerUp() * forceBoost();\n var force = allowedForce(rawForce);\n var factor = speedFactor(rawForce, force);\n var isMoving = delta(target.get(), dragStartPoint.get()) >= 0.5;\n if (isMoving && !isMouse) preventClick = true;\n preventScroll = false;\n pointerIsDown = false;\n interactionEvents.removeAll();\n scrollBody.useSpeed(baseSpeed + baseSpeed * factor);\n scrollTo.distance(force, !dragFree);\n isMouse = false;\n events.emit('pointerUp');\n }\n\n function delta(pointB, pointA) {\n return Math.abs(pointB - pointA);\n }\n\n function click(evt) {\n if (preventClick) evt.preventDefault();\n }\n\n function clickAllowed() {\n return !preventClick;\n }\n\n function pointerDown() {\n return pointerIsDown;\n }\n\n var self = {\n addActivationEvents: addActivationEvents,\n clickAllowed: clickAllowed,\n pointerDown: pointerDown,\n removeAllEvents: removeAllEvents\n };\n return self;\n}\n\nfunction DragTracker(params) {\n var axis = params.axis,\n pxToPercent = params.pxToPercent;\n var scrollAxis = axis.scroll;\n var coords = {\n x: 'clientX',\n y: 'clientY'\n };\n var startDrag = Vector1D(0);\n var diffDrag = Vector1D(0);\n var lastDrag = Vector1D(0);\n var pointValue = Vector1D(0);\n var trackInterval = 10;\n var trackLength = 5;\n var trackTime = 100;\n var trackPoints = [];\n var lastMoveTime = new Date().getTime();\n var isMouse = false;\n\n function readPoint(evt, type) {\n isMouse = !evt.touches;\n var c = coords[type];\n var value = isMouse ? evt[c] : evt.touches[0][c];\n return pointValue.set(value);\n }\n\n function pointerDown(evt) {\n var point = readPoint(evt, scrollAxis);\n startDrag.set(point);\n lastDrag.set(point);\n return pxToPercent.measure(startDrag.get());\n }\n\n function pointerMove(evt) {\n var point = readPoint(evt, scrollAxis);\n var nowTime = new Date().getTime();\n var diffTime = nowTime - lastMoveTime;\n\n if (diffTime >= trackInterval) {\n if (diffTime >= trackTime) trackPoints = [];\n trackPoints.push(point.get());\n lastMoveTime = nowTime;\n }\n\n diffDrag.set(point).subtract(lastDrag);\n lastDrag.set(point);\n return pxToPercent.measure(diffDrag.get());\n }\n\n function pointerUp() {\n var nowTime = new Date().getTime();\n var diffTime = nowTime - lastMoveTime;\n var currentPoint = lastDrag.get();\n var force = trackPoints.slice(-trackLength).map(function (trackPoint) {\n return currentPoint - trackPoint;\n }).sort(function (p1, p2) {\n return Math.abs(p1) < Math.abs(p2) ? 1 : -1;\n })[0];\n lastDrag.set(diffTime > trackTime || !force ? 0 : force);\n trackPoints = [];\n return pxToPercent.measure(lastDrag.get());\n }\n\n var self = {\n pointerDown: pointerDown,\n pointerMove: pointerMove,\n pointerUp: pointerUp,\n readPoint: readPoint\n };\n return self;\n}\n\nfunction PxToPercent(viewInPx) {\n var totalPercent = 100;\n\n function measure(n) {\n return n / viewInPx * totalPercent;\n }\n\n var self = {\n measure: measure,\n totalPercent: totalPercent\n };\n return self;\n}\n\nfunction map(value, iStart, iStop, oStart, oStop) {\n return oStart + (oStop - oStart) * ((value - iStart) / (iStop - iStart));\n}\nfunction arrayFromCollection(nodeList) {\n return Array.prototype.slice.call(nodeList);\n}\nfunction debounce(callback, time) {\n var timeout = {\n id: 0\n };\n return function () {\n window.clearTimeout(timeout.id);\n timeout.id = window.setTimeout(callback, time) || 0;\n };\n}\nfunction roundToDecimals(decimalPoints) {\n var pow = Math.pow(10, decimalPoints);\n return function (n) {\n return Math.round(n * pow) / pow;\n };\n}\nfunction groupArray(array, size) {\n var groups = [];\n\n for (var i = 0; i < array.length; i += size) {\n groups.push(array.slice(i, i + size));\n }\n\n return groups;\n}\nfunction arrayKeys(array) {\n return Object.keys(array).map(Number);\n}\nfunction removeClass(node, className) {\n var cl = node.classList;\n if (className && cl.contains(className)) cl.remove(className);\n}\nfunction addClass(node, className) {\n var cl = node.classList;\n if (className && !cl.contains(className)) cl.add(className);\n}\n\nfunction ScrollBody(params) {\n var location = params.location,\n speed = params.speed,\n mass = params.mass;\n var roundToTwoDecimals = roundToDecimals(2);\n var velocity = Vector1D(0);\n var acceleration = Vector1D(0);\n var attraction = Vector1D(0);\n var direction = Direction(0);\n var state = {\n speed: speed,\n mass: mass\n };\n\n function update() {\n velocity.add(acceleration);\n location.add(velocity);\n acceleration.multiply(0);\n }\n\n function applyForce(v) {\n v.divide(state.mass);\n acceleration.add(v);\n }\n\n function seek(v) {\n attraction.set(v).subtract(location);\n var magnitude = attraction.get();\n var m = map(magnitude, 0, 100, 0, state.speed);\n direction.set(attraction);\n attraction.normalize().multiply(m).subtract(velocity);\n applyForce(attraction);\n return self;\n }\n\n function settle(v) {\n var diff = v.get() - location.get();\n var diffRounded = roundToTwoDecimals(diff);\n var hasSettled = !diffRounded;\n if (hasSettled) location.set(v);\n return hasSettled;\n }\n\n function useSpeed(n) {\n state.speed = n;\n return self;\n }\n\n function useDefaultSpeed() {\n useSpeed(speed);\n return self;\n }\n\n function useMass(n) {\n state.mass = n;\n return self;\n }\n\n function useDefaultMass() {\n useMass(mass);\n return self;\n }\n\n var self = {\n direction: direction,\n location: location,\n seek: seek,\n settle: settle,\n update: update,\n useDefaultMass: useDefaultMass,\n useDefaultSpeed: useDefaultSpeed,\n useMass: useMass,\n useSpeed: useSpeed\n };\n return self;\n}\n\nfunction ScrollBounds(params) {\n var limit = params.limit,\n location = params.location,\n scrollBody = params.scrollBody,\n animation = params.animation;\n var min = limit.min,\n max = limit.max,\n reachedMin = limit.reachedMin,\n reachedMax = limit.reachedMax;\n var tolerance = 50;\n var disabled = false;\n var timeout = 0;\n\n function shouldConstrain(v) {\n if (disabled || timeout) return false;\n if (reachedMin(location.get())) return v.get() !== min;\n if (reachedMax(location.get())) return v.get() !== max;\n return false;\n }\n\n function constrain(v) {\n if (!shouldConstrain(v)) return;\n timeout = window.setTimeout(function () {\n var constraint = limit.constrain(v.get());\n v.set(constraint);\n scrollBody.useSpeed(10).useMass(3);\n animation.start();\n timeout = 0;\n }, tolerance);\n }\n\n function toggleActive(active) {\n disabled = !active;\n }\n\n var self = {\n constrain: constrain,\n toggleActive: toggleActive\n };\n return self;\n}\n\nfunction ScrollContain(params) {\n var alignment = params.alignment,\n contentSize = params.contentSize,\n viewSize = params.viewSize;\n var scrollBounds = Limit({\n min: -contentSize + viewSize,\n max: 0\n });\n var alignedWithinView = [alignment.measure(contentSize)];\n var contentExceedsView = contentSize > viewSize;\n\n function findDuplicates(scrollSnaps) {\n var startSnap = scrollSnaps[0];\n var endSnap = scrollSnaps[scrollSnaps.length - 1];\n var min = scrollSnaps.lastIndexOf(startSnap) + 1;\n var max = scrollSnaps.indexOf(endSnap);\n return Limit({\n min: min,\n max: max\n });\n }\n\n function measure(scrollSnaps, trim) {\n var containedSnaps = scrollSnaps.map(scrollBounds.constrain);\n\n var _a = findDuplicates(containedSnaps),\n min = _a.min,\n max = _a.max;\n\n if (!contentExceedsView) return alignedWithinView;\n if (!trim) return containedSnaps;\n return containedSnaps.slice(min - 1, max + 1);\n }\n\n var self = {\n measure: measure\n };\n return self;\n}\n\nfunction ScrollLimit(params) {\n var contentSize = params.contentSize,\n loop = params.loop;\n\n function measure(scrollSnaps) {\n var startSnap = scrollSnaps[0];\n var endSnap = scrollSnaps[scrollSnaps.length - 1];\n var min = loop ? startSnap - contentSize : endSnap;\n var max = startSnap;\n return Limit({\n min: min,\n max: max\n });\n }\n\n var self = {\n measure: measure\n };\n return self;\n}\n\nfunction ScrollLooper(params) {\n var contentSize = params.contentSize,\n location = params.location,\n limit = params.limit,\n pxToPercent = params.pxToPercent;\n var min = limit.min + pxToPercent.measure(0.1);\n var max = limit.max + pxToPercent.measure(0.1);\n\n var _a = Limit({\n min: min,\n max: max\n }),\n reachedMin = _a.reachedMin,\n reachedMax = _a.reachedMax;\n\n function shouldLoop(direction) {\n if (direction === 1) return reachedMax(location.get());\n if (direction === -1) return reachedMin(location.get());\n return false;\n }\n\n function loop(vectors, direction) {\n if (!shouldLoop(direction)) return;\n var loopDistance = contentSize * (direction * -1);\n vectors.forEach(function (v) {\n return v.add(loopDistance);\n });\n }\n\n var self = {\n loop: loop\n };\n return self;\n}\n\nfunction ScrollProgress(params) {\n var _a = params.limit,\n max = _a.max,\n scrollLength = _a.length;\n\n function get(n) {\n var currentLocation = n - max;\n return currentLocation / -scrollLength;\n }\n\n var self = {\n get: get\n };\n return self;\n}\n\nfunction ScrollSnap(params) {\n var snapSizes = params.snapSizes,\n alignment = params.alignment,\n loop = params.loop;\n var alignments = snapSizes.map(alignment.measure);\n var distancesBetween = distancesBetweenScrollSnaps();\n\n function distancesBetweenScrollSnaps() {\n var limit = Limit({\n min: 0,\n max: snapSizes.length - 1\n });\n var counter = Counter({\n limit: limit,\n start: 0,\n loop: loop\n });\n return snapSizes.map(function (size, index) {\n var next = counter.set(index + 1).get();\n return size + alignments[index] - alignments[next];\n });\n }\n\n function measure(index) {\n var sizes = distancesBetween.slice(0, index);\n return sizes.reduce(function (a, s) {\n return a - s;\n }, alignments[0]);\n }\n\n var self = {\n measure: measure\n };\n return self;\n}\n\nfunction ScrollTarget(params) {\n var loop = params.loop,\n limit = params.limit,\n scrollSnaps = params.scrollSnaps,\n contentSize = params.contentSize;\n var reachedMax = limit.reachedMax,\n reachedAny = limit.reachedAny,\n removeOffset = limit.removeOffset;\n\n function minDistance(d1, d2) {\n return Math.abs(d1) < Math.abs(d2) ? d1 : d2;\n }\n\n function findTargetSnap(target) {\n var distance = removeOffset(target);\n var ascDiffsToSnaps = scrollSnaps.map(function (scrollSnap) {\n return scrollSnap - distance;\n }).map(function (diffToSnap) {\n return shortcut(diffToSnap, 0);\n }).map(function (diff, i) {\n return {\n diff: diff,\n index: i\n };\n }).sort(function (d1, d2) {\n return Math.abs(d1.diff) - Math.abs(d2.diff);\n });\n var index = ascDiffsToSnaps[0].index;\n return {\n index: index,\n distance: distance\n };\n }\n\n function shortcut(target, direction) {\n var t1 = target;\n var t2 = target + contentSize;\n var t3 = target - contentSize;\n if (!loop) return t1;\n if (!direction) return minDistance(minDistance(t1, t2), t3);\n var shortest = minDistance(t1, direction === 1 ? t2 : t3);\n return Math.abs(shortest) * direction;\n }\n\n function findTargetIndex(target, index) {\n var reachedBound = !loop && reachedAny(target);\n if (!reachedBound) return index;\n var _a = params.index,\n min = _a.min,\n max = _a.max;\n return reachedMax(target) ? min : max;\n }\n\n function byIndex(index, direction) {\n var diffToSnap = scrollSnaps[index] - params.target.get();\n var distance = shortcut(diffToSnap, direction);\n return {\n index: index,\n distance: distance\n };\n }\n\n function byDistance(distance, snap) {\n var target = params.target.get() + distance;\n var targetSnap = findTargetSnap(target);\n var index = findTargetIndex(target, targetSnap.index);\n var reachedBound = !loop && reachedAny(target);\n if (!snap || reachedBound) return {\n index: index,\n distance: distance\n };\n var diffToSnap = scrollSnaps[index] - targetSnap.distance;\n var snapDistance = distance + shortcut(diffToSnap, 0);\n return {\n index: index,\n distance: snapDistance\n };\n }\n\n var self = {\n byDistance: byDistance,\n byIndex: byIndex,\n shortcut: shortcut\n };\n return self;\n}\n\nfunction ScrollTo(params) {\n var indexCurrent = params.index,\n scrollTarget = params.scrollTarget,\n animation = params.animation;\n var indexPrevious = params.indexPrevious,\n events = params.events,\n targetDistance = params.target;\n\n function scrollTo(target) {\n var distanceDiff = target.distance;\n var indexDiff = target.index !== indexCurrent.get();\n\n if (distanceDiff) {\n animation.start();\n targetDistance.add(distanceDiff);\n }\n\n if (indexDiff) {\n indexPrevious.set(indexCurrent.get());\n indexCurrent.set(target.index);\n events.emit('select');\n }\n }\n\n function distance(n, snap) {\n var target = scrollTarget.byDistance(n, snap);\n scrollTo(target);\n }\n\n function index(n, direction) {\n var targetIndex = indexCurrent.clone().set(n);\n var target = scrollTarget.byIndex(targetIndex.get(), direction);\n scrollTo(target);\n }\n\n var self = {\n distance: distance,\n index: index\n };\n return self;\n}\n\nfunction SlideLooper(params) {\n var axis = params.axis,\n scrollLocation = params.location,\n slidesInView = params.slidesInView;\n var contentSize = params.contentSize,\n viewSize = params.viewSize,\n slideSizes = params.slideSizes,\n scrollSnaps = params.scrollSnaps;\n var ascItems = arrayKeys(slideSizes);\n var descItems = arrayKeys(slideSizes).reverse();\n var loopPoints = startPoints().concat(endPoints());\n var loopStyle = axis.scroll === 'x' ? 'left' : 'top';\n\n function removeSlideSizes(indexes, from) {\n return indexes.reduce(function (a, i) {\n return a - slideSizes[i];\n }, from);\n }\n\n function slidesInGap(indexes, gap) {\n return indexes.reduce(function (a, i) {\n var remainingGap = removeSlideSizes(a, gap);\n return remainingGap > 0 ? a.concat([i]) : a;\n }, []);\n }\n\n function findLoopPoints(indexes, edge) {\n var isStartEdge = edge === 'start';\n var offset = isStartEdge ? -contentSize : contentSize;\n var slideBounds = slidesInView.findSlideBounds(offset);\n return indexes.map(function (index) {\n var initial = isStartEdge ? 0 : -contentSize;\n var altered = isStartEdge ? contentSize : 0;\n var bounds = slideBounds.filter(function (b) {\n return b.index === index;\n })[0];\n var point = bounds[isStartEdge ? 'end' : 'start'];\n\n var getTarget = function getTarget() {\n return scrollLocation.get() > point ? initial : altered;\n };\n\n return {\n point: point,\n getTarget: getTarget,\n index: index,\n location: -1\n };\n });\n }\n\n function startPoints() {\n var gap = scrollSnaps[0] - 1;\n var indexes = slidesInGap(descItems, gap);\n return findLoopPoints(indexes, 'end');\n }\n\n function endPoints() {\n var gap = viewSize - scrollSnaps[0] - 1;\n var indexes = slidesInGap(ascItems, gap);\n return findLoopPoints(indexes, 'start');\n }\n\n function canLoop() {\n return loopPoints.every(function (_a) {\n var index = _a.index;\n var otherIndexes = ascItems.filter(function (i) {\n return i !== index;\n });\n return removeSlideSizes(otherIndexes, viewSize) <= 0;\n });\n }\n\n function loop(slides) {\n loopPoints.forEach(function (loopPoint) {\n var getTarget = loopPoint.getTarget,\n location = loopPoint.location,\n index = loopPoint.index;\n var target = getTarget();\n\n if (target !== location) {\n slides[index].style[loopStyle] = target + \"%\";\n loopPoint.location = target;\n }\n });\n }\n\n function clear(slides) {\n loopPoints.forEach(function (_a) {\n var index = _a.index;\n slides[index].style[loopStyle] = '';\n });\n }\n\n var self = {\n canLoop: canLoop,\n clear: clear,\n loop: loop,\n loopPoints: loopPoints\n };\n return self;\n}\n\nfunction SlideFocus(params) {\n var scrollTo = params.scrollTo,\n slidesToScroll = params.slidesToScroll,\n root = params.root;\n var eventStore = EventStore();\n var removeAllEvents = eventStore.removeAll;\n var lastTabPressTime = 0;\n\n function registerTabPress(event) {\n if (event.keyCode !== 9) return;\n lastTabPressTime = new Date().getTime();\n }\n\n function addFocusEvent(slide, index) {\n var focus = function focus() {\n var nowTime = new Date().getTime();\n var diffTime = nowTime - lastTabPressTime;\n if (diffTime > 10) return;\n root.scrollLeft = 0;\n var selectedIndex = Math.floor(index / slidesToScroll);\n scrollTo.index(selectedIndex, 0);\n };\n\n eventStore.add(slide, 'focus', focus, true);\n }\n\n function addActivationEvents(slides) {\n eventStore.add(document, 'keydown', registerTabPress, false);\n slides.forEach(addFocusEvent);\n }\n\n var self = {\n addActivationEvents: addActivationEvents,\n removeAllEvents: removeAllEvents\n };\n return self;\n}\n\nfunction SlidesInView(params) {\n var contentSize = params.contentSize,\n slideSizes = params.slideSizes,\n viewSize = params.viewSize;\n var inViewThreshold = params.inViewThreshold,\n loop = params.loop;\n var threshold = Math.min(Math.max(inViewThreshold, 0.01), 0.99);\n var scrollSnaps = arrayKeys(slideSizes).map(scrollSnap);\n var offsets = loop ? [0, contentSize, -contentSize] : [0];\n var slideBounds = offsets.reduce(function (a, loopOffset) {\n return a.concat(findSlideBounds(loopOffset, threshold));\n }, []);\n\n function scrollSnap(index) {\n var span = slideSizes.slice(0, index);\n return span.reduce(function (a, s) {\n return a - s;\n }, 0);\n }\n\n function findSlideBounds(offset, threshold) {\n var thresholds = slideSizes.map(function (s) {\n return s * (threshold || 0);\n });\n return scrollSnaps.map(function (snap, index) {\n return {\n start: snap - slideSizes[index] + thresholds[index] + offset,\n end: snap + viewSize - thresholds[index] + offset,\n index: index\n };\n });\n }\n\n function check(location) {\n return slideBounds.reduce(function (list, slideBound) {\n var index = slideBound.index,\n start = slideBound.start,\n end = slideBound.end;\n var inList = list.indexOf(index) !== -1;\n var inView = start < location && end > location;\n return !inList && inView ? list.concat([index]) : list;\n }, []);\n }\n\n var self = {\n check: check,\n findSlideBounds: findSlideBounds\n };\n return self;\n}\n\nfunction Translate(params) {\n var axis = params.axis,\n container = params.container;\n var translates = {\n x: x,\n y: y\n };\n var translateAxis = translates[axis.scroll];\n var roundToTwoDecimals = roundToDecimals(2);\n var containerStyle = container.style;\n var disabled = false;\n var location = 0;\n\n function x(n) {\n return \"translate3d(\" + n + \"%,0px,0px)\";\n }\n\n function y(n) {\n return \"translate3d(0px,\" + n + \"%,0px)\";\n }\n\n function to(v) {\n if (disabled) return;\n var target = roundToTwoDecimals(v.get());\n\n if (location !== target) {\n getComputedStyle(container).transform;\n containerStyle.transform = translateAxis(target);\n location = target;\n }\n }\n\n function toggleActive(active) {\n disabled = !active;\n }\n\n function clear() {\n containerStyle.transform = '';\n location = 0;\n }\n\n var self = {\n clear: clear,\n to: to,\n toggleActive: toggleActive\n };\n return self;\n}\n\nfunction Engine(root, container, slides, options, events) {\n // Options\n var align = options.align,\n scrollAxis = options.axis,\n startIndex = options.startIndex,\n inViewThreshold = options.inViewThreshold,\n loop = options.loop,\n speed = options.speed,\n dragFree = options.dragFree,\n slidesToScroll = options.slidesToScroll,\n containScroll = options.containScroll; // Measurements\n\n var axis = Axis(scrollAxis);\n var pxToPercent = PxToPercent(axis.measure(container));\n var viewSize = pxToPercent.totalPercent;\n var slideSizes = slides.map(axis.measure).map(pxToPercent.measure);\n var slideIndexes = arrayKeys(slideSizes);\n var groupedSizes = groupArray(slideSizes, slidesToScroll);\n var snapSizes = groupedSizes.map(function (g) {\n return g.reduce(function (a, s) {\n return a + s;\n });\n });\n var contentSize = slideSizes.reduce(function (a, s) {\n return a + s;\n }, 0);\n var alignment = Alignment({\n align: align,\n viewSize: viewSize\n });\n var scrollSnap = ScrollSnap({\n snapSizes: snapSizes,\n alignment: alignment,\n loop: loop\n });\n var defaultSnaps = arrayKeys(snapSizes).map(scrollSnap.measure);\n var contain = ScrollContain({\n alignment: alignment,\n contentSize: contentSize,\n viewSize: viewSize\n });\n var shouldContain = !loop && containScroll !== '';\n var trimSnaps = containScroll === 'trimSnaps';\n var containedSnaps = contain.measure(defaultSnaps, trimSnaps);\n var scrollSnaps = shouldContain ? containedSnaps : defaultSnaps; // Index\n\n var indexMax = Math.max(0, scrollSnaps.length - 1);\n var indexSpan = Limit({\n min: 0,\n max: indexMax\n });\n var index = Counter({\n limit: indexSpan,\n start: startIndex,\n loop: loop\n });\n var indexPrevious = index.clone(); // ScrollLimit\n\n var scrollLimit = ScrollLimit({\n loop: loop,\n contentSize: contentSize\n });\n var limit = scrollLimit.measure(scrollSnaps); // Draw\n\n var update = function update() {\n engine.scrollBody.seek(target).update();\n var settled = engine.scrollBody.settle(target);\n\n if (!dragHandler.pointerDown()) {\n if (!loop) engine.scrollBounds.constrain(target);\n\n if (settled) {\n engine.animation.stop();\n events.emit('settle');\n }\n }\n\n if (loop) {\n var direction = engine.scrollBody.direction.get();\n engine.scrollLooper.loop(loopVectors, direction);\n engine.slideLooper.loop(slides);\n }\n\n if (!settled) events.emit('scroll');\n engine.translate.to(engine.scrollBody.location);\n engine.animation.proceed();\n }; // Shared\n\n\n var animation = Animation(update);\n var startLocation = scrollSnaps[index.get()];\n var location = Vector1D(startLocation);\n var target = Vector1D(startLocation);\n var loopVectors = [location, target];\n var scrollBody = ScrollBody({\n location: location,\n speed: speed,\n mass: 1\n });\n var scrollTarget = ScrollTarget({\n contentSize: contentSize,\n index: index,\n limit: limit,\n loop: loop,\n scrollSnaps: scrollSnaps,\n target: target\n });\n var scrollTo = ScrollTo({\n animation: animation,\n events: events,\n index: index,\n indexPrevious: indexPrevious,\n scrollTarget: scrollTarget,\n target: target\n });\n var slidesInView = SlidesInView({\n contentSize: contentSize,\n inViewThreshold: inViewThreshold,\n loop: loop,\n slideSizes: slideSizes,\n viewSize: viewSize\n }); // DragHandler\n\n var dragHandler = DragHandler({\n animation: animation,\n axis: axis,\n dragFree: dragFree,\n dragTracker: DragTracker({\n axis: axis,\n pxToPercent: pxToPercent\n }),\n element: root,\n events: events,\n index: index,\n limit: limit,\n location: location,\n loop: loop,\n scrollBody: scrollBody,\n scrollTo: scrollTo,\n scrollTarget: scrollTarget,\n target: target\n }); // Slider\n\n var engine = {\n animation: animation,\n axis: axis,\n dragHandler: dragHandler,\n pxToPercent: pxToPercent,\n index: index,\n indexPrevious: indexPrevious,\n limit: limit,\n location: location,\n options: options,\n scrollBody: scrollBody,\n scrollBounds: ScrollBounds({\n animation: animation,\n limit: limit,\n location: location,\n scrollBody: scrollBody\n }),\n scrollLooper: ScrollLooper({\n contentSize: contentSize,\n limit: limit,\n location: location,\n pxToPercent: pxToPercent\n }),\n scrollProgress: ScrollProgress({\n limit: limit\n }),\n scrollSnaps: scrollSnaps,\n scrollTarget: scrollTarget,\n scrollTo: scrollTo,\n slideFocus: SlideFocus({\n root: root,\n scrollTo: scrollTo,\n slidesToScroll: slidesToScroll\n }),\n slideLooper: SlideLooper({\n axis: axis,\n contentSize: contentSize,\n location: location,\n scrollSnaps: scrollSnaps,\n slideSizes: slideSizes,\n slidesInView: slidesInView,\n viewSize: viewSize\n }),\n slidesInView: slidesInView,\n slideIndexes: slideIndexes,\n target: target,\n translate: Translate({\n axis: axis,\n container: container\n })\n };\n return engine;\n}\n\nfunction EventEmitter() {\n var listeners = {\n destroy: [],\n pointerDown: [],\n pointerUp: [],\n init: [],\n reInit: [],\n resize: [],\n scroll: [],\n select: [],\n settle: []\n };\n\n function emit(evt) {\n listeners[evt].forEach(function (e) {\n return e(evt);\n });\n return self;\n }\n\n function on(evt, cb) {\n listeners[evt] = listeners[evt].concat([cb]);\n return self;\n }\n\n function off(evt, cb) {\n listeners[evt] = listeners[evt].filter(function (e) {\n return e !== cb;\n });\n return self;\n }\n\n var self = {\n emit: emit,\n off: off,\n on: on\n };\n return self;\n}\n\nvar defaultOptions = {\n align: 'center',\n axis: 'x',\n containScroll: '',\n containerSelector: '*',\n dragFree: false,\n draggable: true,\n draggableClass: 'is-draggable',\n draggingClass: 'is-dragging',\n inViewThreshold: 0,\n loop: false,\n selectedClass: 'is-selected',\n slidesToScroll: 1,\n speed: 10,\n startIndex: 0\n};\n\nfunction EmblaCarousel(sliderRoot, userOptions) {\n var events = EventEmitter();\n var eventStore = EventStore();\n var debouncedResize = debounce(resize, 500);\n var reInit = reActivate;\n var on = events.on,\n off = events.off;\n var engine;\n var activated = false;\n\n var options = _extends({}, defaultOptions);\n\n var rootElementSize = 0;\n var container;\n var slides;\n activate(userOptions);\n\n function storeElements() {\n if (!sliderRoot) throw new Error('Missing root node 😢');\n var selector = options.containerSelector;\n var sliderContainer = sliderRoot.querySelector(selector);\n if (!sliderContainer) throw new Error('Missing container node 😢');\n container = sliderContainer;\n slides = arrayFromCollection(container.children);\n }\n\n function activate(partialOptions) {\n storeElements();\n options = _extends(options, partialOptions);\n engine = Engine(sliderRoot, container, slides, options, events);\n rootElementSize = engine.axis.measure(sliderRoot);\n eventStore.add(window, 'resize', debouncedResize);\n engine.translate.to(engine.scrollBody.location);\n\n if (options.loop) {\n if (!engine.slideLooper.canLoop()) {\n deActivate();\n return activate({\n loop: false\n });\n }\n\n engine.slideLooper.loop(slides);\n }\n\n if (options.draggable && slides.length) {\n engine.dragHandler.addActivationEvents();\n\n if (options.draggableClass) {\n addClass(sliderRoot, options.draggableClass);\n }\n\n if (options.draggingClass) {\n events.on('pointerDown', toggleDraggingClass).on('pointerUp', toggleDraggingClass);\n }\n }\n\n if (slides.length) {\n engine.slideFocus.addActivationEvents(slides);\n }\n\n if (options.selectedClass) {\n toggleSelectedClass();\n events.on('select', toggleSelectedClass).on('pointerUp', toggleSelectedClass);\n }\n\n if (!activated) {\n setTimeout(function () {\n return events.emit('init');\n }, 0);\n activated = true;\n }\n }\n\n function toggleDraggingClass(evt) {\n var draggingClass = options.draggingClass;\n if (evt === 'pointerDown') addClass(sliderRoot, draggingClass);else removeClass(sliderRoot, draggingClass);\n }\n\n function toggleSelectedClass() {\n var selectedClass = options.selectedClass;\n var inView = slidesInView(true);\n var notInView = slidesNotInView(true);\n notInView.forEach(function (i) {\n return removeClass(slides[i], selectedClass);\n });\n inView.forEach(function (i) {\n return addClass(slides[i], selectedClass);\n });\n }\n\n function deActivate() {\n engine.dragHandler.removeAllEvents();\n engine.slideFocus.removeAllEvents();\n engine.animation.stop();\n eventStore.removeAll();\n engine.translate.clear();\n engine.slideLooper.clear(slides);\n removeClass(sliderRoot, options.draggableClass);\n slides.forEach(function (s) {\n return removeClass(s, options.selectedClass);\n });\n events.off('select', toggleSelectedClass);\n events.off('pointerUp', toggleSelectedClass);\n events.off('pointerDown', toggleDraggingClass);\n events.off('pointerUp', toggleDraggingClass);\n }\n\n function reActivate(partialOptions) {\n if (!activated) return;\n var startIndex = selectedScrollSnap();\n\n var newOptions = _extends({\n startIndex: startIndex\n }, partialOptions);\n\n deActivate();\n activate(newOptions);\n events.emit('reInit');\n }\n\n function destroy() {\n if (!activated) return;\n deActivate();\n activated = false;\n events.emit('destroy');\n }\n\n function resize() {\n if (!activated) return;\n var newRootElementSize = engine.axis.measure(sliderRoot);\n if (rootElementSize !== newRootElementSize) reActivate();\n events.emit('resize');\n }\n\n function slidesInView(target) {\n var location = engine[target ? 'target' : 'location'].get();\n var type = options.loop ? 'removeOffset' : 'constrain';\n return engine.slidesInView.check(engine.limit[type](location));\n }\n\n function slidesNotInView(target) {\n var inView = slidesInView(target);\n return engine.slideIndexes.filter(function (i) {\n return inView.indexOf(i) === -1;\n });\n }\n\n function scrollTo(index, direction) {\n engine.scrollBody.useDefaultMass().useDefaultSpeed();\n if (activated) engine.scrollTo.index(index, direction || 0);\n }\n\n function scrollNext() {\n var next = engine.index.clone().add(1);\n scrollTo(next.get(), -1);\n }\n\n function scrollPrev() {\n var prev = engine.index.clone().add(-1);\n scrollTo(prev.get(), 1);\n }\n\n function canScrollNext() {\n var next = engine.index.clone().add(1);\n return next.get() !== selectedScrollSnap();\n }\n\n function canScrollPrev() {\n var prev = engine.index.clone().add(-1);\n return prev.get() !== selectedScrollSnap();\n }\n\n function scrollSnapList() {\n return engine.scrollSnaps.map(engine.scrollProgress.get);\n }\n\n function scrollProgress() {\n return engine.scrollProgress.get(engine.location.get());\n }\n\n function selectedScrollSnap() {\n return engine.index.get();\n }\n\n function previousScrollSnap() {\n return engine.indexPrevious.get();\n }\n\n function clickAllowed() {\n return engine.dragHandler.clickAllowed();\n }\n\n function dangerouslyGetEngine() {\n return engine;\n }\n\n function containerNode() {\n return container;\n }\n\n function slideNodes() {\n return slides;\n }\n\n var self = {\n canScrollNext: canScrollNext,\n canScrollPrev: canScrollPrev,\n clickAllowed: clickAllowed,\n containerNode: containerNode,\n dangerouslyGetEngine: dangerouslyGetEngine,\n destroy: destroy,\n off: off,\n on: on,\n previousScrollSnap: previousScrollSnap,\n reInit: reInit,\n scrollNext: scrollNext,\n scrollPrev: scrollPrev,\n scrollProgress: scrollProgress,\n scrollSnapList: scrollSnapList,\n scrollTo: scrollTo,\n selectedScrollSnap: selectedScrollSnap,\n slideNodes: slideNodes,\n slidesInView: slidesInView,\n slidesNotInView: slidesNotInView\n };\n return self;\n}\n\nexport default EmblaCarousel;\n//# sourceMappingURL=embla-carousel.esm.js.map\n","import { get } from \"oj-ajax\"\r\nimport { getRootElements } from \"oj-dom-utils\"\r\nimport { debounce } from \"oj-utils\"\r\nimport m from \"mithril\"\r\n\r\nexport const isTouchDevice = () =>\r\n \"ontouchstart\" in window\r\n\r\n\r\nexport const getFileExtensionFromString = (str: string) =>\r\n str.split(\".\")[1]\r\n\r\nexport const mounter = (selector: string, cb: (root: HTMLElement, data: T | null) => void) =>\r\n getRootElements(selector)\r\n .forEach(x => {\r\n const inputs = Array.from(x.querySelectorAll(\"input\"))\r\n let data: any = null\r\n if (inputs.length > 1)\r\n data = inputs.map(x => {\r\n try {\r\n return JSON.parse(x.value)\r\n } catch (err) {\r\n return x.value\r\n }\r\n })\r\n else if (inputs[0] instanceof HTMLInputElement)\r\n try {\r\n data = JSON.parse(inputs[0].value)\r\n } catch (err) {\r\n data = inputs[0].value\r\n }\r\n cb(x, data)\r\n })\r\n\r\nexport const downloadFile = (response: any, name: string) => {\r\n if (navigator.appVersion.toString().indexOf('.NET') > 0)\r\n window.navigator[\"msSaveBlob\"](response, name)\r\n else {\r\n const blob = new Blob([response], { type: response.type })\r\n const objectUrl = URL.createObjectURL(blob)\r\n const a = document.createElement(\"a\")\r\n a.style.display = \"none\"\r\n document.body.appendChild(a)\r\n a.href = objectUrl\r\n a.download = name\r\n a.click()\r\n URL.revokeObjectURL(objectUrl)\r\n }\r\n}\r\n\r\nexport const testMailAddress = (mail: string) =>\r\n /^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$/.test(mail)\r\n\r\nexport const loadScript = (src: string) =>\r\n new Promise((resolve, reject) => {\r\n const script = document.createElement(\"script\")\r\n script.type = \"text/javascript\"\r\n script.onload = resolve\r\n script.onerror = reject\r\n script.src = src\r\n document.body.appendChild(script)\r\n })\r\n\r\nexport const loadScriptSource = (txt: string) =>\r\n new Promise((resolve, reject) => {\r\n const script = document.createElement(\"script\")\r\n script.type = \"text/javascript\"\r\n script.onload = resolve\r\n script.onerror = reject\r\n script.innerHTML = txt\r\n document.body.appendChild(script)\r\n })\r\n\r\nexport const hideScrollbars = (hide: boolean) => {\r\n document.querySelector(\"body\").classList.toggle(\"hide-scrollbars\", hide);\r\n}\r\n\r\nexport const formatPrice = (price: number, currency = true) => {\r\n const formatedPrice = new Intl.NumberFormat(window.culture, {\r\n style: 'currency',\r\n currency: 'EUR',\r\n }).format(price);\r\n\r\n if (currency)\r\n return formatedPrice.replace(\",\", \".\")\r\n else\r\n return formatedPrice.replace(\",\", \".\").replace(\"€\", \"\").trim()\r\n}\r\n\r\nexport const formatHtmlPrice = (price: number) => {\r\n const formatNumber = new Intl.NumberFormat(window[\"culture\"], { minimumFractionDigits: 2 }).format(\r\n price,\r\n )\r\n const priceParts = formatNumber.toString().replace(\".\", \"\").split(\",\");\r\n\r\n if (priceParts[1] != \"00\") {\r\n return `${priceParts[0]}.${priceParts[1]}`\r\n } else {\r\n return `${priceParts[0]}`\r\n }\r\n}\r\n\r\ninterface ImageDimensions {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport const getImageDimensions = (imageUrl): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const img = new Image(); // Create a new image object\r\n\r\n img.onload = function () {\r\n // Once the image is loaded, resolve the promise with the width and height\r\n resolve({ width: img.width, height: img.height });\r\n img.onload = null;\r\n img.src = '';\r\n };\r\n\r\n img.onerror = function () {\r\n // Reject the promise if there is an error loading the image\r\n reject(new Error(\"Error loading image.\"));\r\n };\r\n\r\n // Set the image source to the URL, which triggers the loading process\r\n img.src = imageUrl;\r\n });\r\n}\r\n\r\nexport const getAddress = debounce(500, async (form: any) => {\r\n const postalCode = form.getFields().postalCode.value\r\n const houseNumber = form.getFields().houseNumber.value\r\n\r\n if (postalCode && houseNumber) {\r\n await get(`/${window[\"culture\"]}/Checkout/FindAddress/?PostalCode=${postalCode}&HouseNumber=${houseNumber}`)\r\n .then(res => JSON.parse(res))\r\n .then(res => {\r\n if (res.street && res.city) {\r\n form.getFields().street.value = res.street\r\n form.getFields().city.value = res.city\r\n }\r\n form.getFields().street.validate.readonly = false\r\n form.getFields().city.validate.readonly = false\r\n m.redraw()\r\n })\r\n }\r\n})","import m from \"mithril\"\r\nimport { MithrilTsxComponent } from \"mithril-tsx-component\"\r\n\r\nexport interface ISvg {\r\n src: string\r\n onload?: (svg: SVGElement) => any\r\n}\r\n\r\nexport class Svg extends MithrilTsxComponent {\r\n svg: string\r\n loaded: boolean\r\n\r\n view(v: m.Vnode) {\r\n if (!this.svg)\r\n return\r\n\r\n return m.trust(this.svg)\r\n }\r\n\r\n oninit(v: m.Vnode) {\r\n this.load(v)\r\n }\r\n\r\n onbeforeupdate(v: m.Vnode, o: m.Vnode) {\r\n if (v.attrs.src !== o.attrs.src)\r\n this.load(v)\r\n }\r\n\r\n onupdate(v: m.VnodeDOM) {\r\n if (!this.svg || this.loaded)\r\n return\r\n\r\n if (this.svg) {\r\n this.loaded = true\r\n v.attrs.onload?.(v.dom as SVGElement)\r\n v.dom.setAttribute('aria-hidden', 'true')\r\n v.dom.setAttribute('focusable', 'false')\r\n }\r\n }\r\n\r\n async load(v: m.Vnode) {\r\n if (!v.attrs.src)\r\n return\r\n\r\n this.loaded = false\r\n this.svg = await fetch(v.attrs.src).then(x => x.text())\r\n m.redraw()\r\n }\r\n}\r\n","import m, { Vnode } from \"mithril\"\r\nimport { MithrilTsxComponent } from \"mithril-tsx-component\"\r\nimport { formatHtmlPrice, formatPrice, mounter } from \"../utils\"\r\nimport { debounce } from \"oj-utils\"\r\nimport { Carousel, CarouselItem } from \"../components/Carousel/Carousel\"\r\nimport { IItem } from \"./trackingTypes\"\r\nimport { redrawOnBreakpoint } from \"../mobile\"\r\nimport { Svg } from \"../svg\"\r\nimport { getTranslation } from \"../translation\"\r\nimport { type IPictureElement, PictureElement } from \"../components/images/picture\"\r\n\r\ninterface IOverview {\r\n title: string,\r\n subTitle: string,\r\n navigateUrl: string,\r\n items: (IHotspotItem | IContentItem)[],\r\n isCarousel?: boolean\r\n}\r\n\r\ninterface IHotspotItem {\r\n navigateUrl: string,\r\n openInNewTab: boolean,\r\n title: string,\r\n labels: ILabel[]\r\n images: IPictureElement,\r\n hoverImages: IPictureElement,\r\n subtitle: string,\r\n actionPrice: number,\r\n price: number,\r\n priceText: string,\r\n i?: number\r\n list?: string\r\n productId?: string\r\n editorType?: string\r\n category?: string\r\n fujiId?: string\r\n campaignLabel?: string\r\n regularPrice?: string\r\n discountPrice?: string\r\n type?: HotspotType\r\n}\r\n\r\ninterface ILabel {\r\n color: HotspotColor,\r\n colorHex: string,\r\n label: string\r\n}\r\n\r\ninterface IContentItem {\r\n title: string,\r\n images: IPictureElement,\r\n linkUrl: string,\r\n openInNewTab: boolean,\r\n linkText: string,\r\n color: string,\r\n type?: HotspotType\r\n}\r\n\r\nenum HotspotType {\r\n Product = 0,\r\n Content = 1,\r\n}\r\n\r\nenum HotspotColor {\r\n Red = 0,\r\n Blue = 1,\r\n Purple = 2,\r\n Yellow = 3\r\n}\r\n\r\nconst isMobile = redrawOnBreakpoint(830)\r\n\r\nexport class HotspotGrid extends MithrilTsxComponent {\r\n oninit(v: Vnode) {\r\n window.addEventListener('resize', debounce(1000, () => {\r\n m.redraw()\r\n }))\r\n }\r\n\r\n view(v: Vnode) {\r\n const overview: IOverview = v.attrs\r\n\r\n if (overview.items.length === 0)\r\n return\r\n\r\n return [\r\n (v.attrs.title || v.attrs.subTitle) &&
\r\n
\r\n {v.attrs.title &&

{overview.title}

}\r\n {v.attrs.subTitle &&

{v.attrs.subTitle}

}\r\n
\r\n {(v.attrs.isCarousel && v.attrs.navigateUrl) && \r\n {!isMobile() && {getTranslation(\"seeAll\")}}\r\n }\r\n
,\r\n v.attrs.isCarousel\r\n ?
{\r\n data.embla.reInit({ slidesToScroll: data.embla.slidesInView().length })\r\n\r\n data.embla.on(\"resize\", debounce(1000, () => {\r\n data.embla.reInit({ slidesToScroll: data.embla.slidesInView().length })\r\n }))\r\n }}\r\n >{[...overview.items].filter(item => item.type === HotspotType.Product).map((x, i) =>\r\n \r\n \r\n \r\n\r\n )}\r\n {v.attrs.navigateUrl && \r\n \r\n \r\n {getTranslation(\"seeAll\")}\r\n \r\n }\r\n
\r\n :
\r\n {overview.items.map((x, i) => {\r\n if (x.type === HotspotType.Product)\r\n return \r\n else\r\n return \r\n }\r\n )}\r\n
\r\n ]\r\n }\r\n}\r\n\r\ninterface ItemList extends IItem {\r\n item_list_name: string,\r\n index: string\r\n}\r\n\r\nexport class HotspotItem extends MithrilTsxComponent {\r\n price\r\n item: IItem\r\n itemList: ItemList\r\n\r\n oninit(v: Vnode) {\r\n this.price = v.attrs.actionPrice || v.attrs.price\r\n this.formatGtmData(v)\r\n }\r\n\r\n view(v: Vnode) {\r\n const hotspotItem: IHotspotItem = v.attrs;\r\n\r\n return
\r\n {\r\n window.ojtag(\"select_item\", { items: [{ ...this.itemList }] })\r\n\r\n if (hotspotItem.campaignLabel)\r\n window.ojtag(\"select_promotion\", { items: [this.item], promo: [{ name: hotspotItem.campaignLabel }] })\r\n }}\r\n >\r\n {hotspotItem.images && }\r\n {hotspotItem.hoverImages && }\r\n\r\n {hotspotItem.labels?.length > 0 &&
\r\n {/* xd */}\r\n {hotspotItem.labels.map(x =>\r\n \r\n {x.label}\r\n \r\n )}\r\n
}\r\n \r\n\r\n {\r\n window.ojtag(\"select_item\", { items: [{ ...this.itemList }] })\r\n\r\n if (hotspotItem.campaignLabel)\r\n window.ojtag(\"select_promotion\", { items: [this.item], promo: [{ name: hotspotItem.campaignLabel }] })\r\n }}\r\n >\r\n {hotspotItem.title}\r\n {hotspotItem.subtitle}\r\n \r\n\r\n {this.price &&
\r\n {hotspotItem.actionPrice && {m.trust(formatPrice(hotspotItem.price, false))}}\r\n {hotspotItem.priceText && {hotspotItem.priceText}}\r\n {m.trust(formatHtmlPrice(this.price))}\r\n
}\r\n
\r\n }\r\n\r\n formatGtmData(v: Vnode) {\r\n const hotspotItem: IHotspotItem = v.attrs\r\n\r\n const cats = hotspotItem.category?.split(\"/\").filter(x => x && x !== \" \") ?? [\"\"]\r\n const listName = hotspotItem.list ?? v.attrs.list;\r\n\r\n this.item = {\r\n item_id: hotspotItem.fujiId ?? hotspotItem.productId,\r\n item_name: hotspotItem.title,\r\n item_category: cats.length > 0 ? cats[0] : null,\r\n item_category2: cats.length > 1 ? cats[1] : null,\r\n item_category3: cats.length > 2 ? cats[2] : null,\r\n price: hotspotItem.regularPrice || null,\r\n discount: hotspotItem.discountPrice || null,\r\n editor_type: hotspotItem.editorType,\r\n }\r\n\r\n const list = {\r\n item_list_name: listName,\r\n index: (hotspotItem.i + 1).toString()\r\n }\r\n\r\n this.itemList = { ...this.item, ...list }\r\n }\r\n}\r\n\r\n\r\nclass ContentItem extends MithrilTsxComponent {\r\n view(v: m.Vnode) {\r\n const { title, linkUrl: navigateUrl, openInNewTab, linkText, images, color } = v.attrs;\r\n\r\n return \r\n {title}\r\n {linkText}\r\n \r\n \r\n }\r\n}\r\n\r\nmounter(`[data-m-hotspot-slider]`, (r, d) => {\r\n m.mount(r, {\r\n view: v => \r\n })\r\n})","import m from \"mithril\"\r\nimport { MithrilTsxComponent } from \"mithril-tsx-component\"\r\nimport { cleanString } from \"oj-utils\"\r\nimport EmblaCarousel, { EmblaCarouselType, EmblaOptionsType } from \"embla-carousel\"\r\nimport { Svg } from \"../../svg\"\r\n\r\nexport interface ICarousel {\r\n className?: string,\r\n navigation?: boolean,\r\n emblaOptions?: Partial,\r\n disableSwipe?: boolean,\r\n scrollVisibleSlides?: boolean\r\n onload?: (data: { dom: HTMLElement, embla: EmblaCarouselType }) => void\r\n}\r\n\r\nexport class Carousel extends MithrilTsxComponent {\r\n embla: EmblaCarouselType\r\n slidesInView: number\r\n\r\n view(v: m.Vnode) {\r\n const canScrollPrev = v.attrs.navigation && this.embla && this.embla.canScrollPrev()\r\n const canScrollNext = v.attrs.navigation && this.embla && this.embla.canScrollNext()\r\n\r\n return
\r\n
\r\n
\r\n {v.children}\r\n
\r\n
\r\n {v.attrs.navigation && this.embla &&\r\n \r\n }\r\n
\r\n }\r\n\r\n oncreate(v: m.VnodeDOM) {\r\n const emblaNode = document.querySelector('.emblaCarousel .embla') as HTMLDivElement;\r\n\r\n\r\n this.embla = EmblaCarousel(emblaNode, {\r\n align: \"center\",\r\n containScroll: \"trimSnaps\",\r\n draggable: !v.attrs.disableSwipe,\r\n ...v.attrs.emblaOptions ?? {},\r\n })\r\n\r\n this.embla.on(\"init\", () => setTimeout(m.redraw, 80))\r\n this.embla.on(\"select\", () => setTimeout(m.redraw, 80))\r\n this.embla.on(\"resize\", () => setTimeout(m.redraw, 80))\r\n\r\n v.attrs.onload?.({ dom: emblaNode, embla: this.embla });\r\n [1000, 2000].forEach(x => setTimeout(m.redraw, x))\r\n }\r\n\r\n onbeforeupdate(v: m.VnodeDOM, o: m.VnodeDOM) {\r\n if (v.attrs.disableSwipe !== o.attrs.disableSwipe)\r\n this.embla.reInit({ draggable: !v.attrs.disableSwipe })\r\n }\r\n}\r\n\r\nexport interface ICarouselNav {\r\n canScrollPrev: boolean,\r\n scrollPrev: Function,\r\n canScrollNext: boolean,\r\n scrollNext: Function,\r\n}\r\n\r\nexport class CarouselNav extends MithrilTsxComponent {\r\n view(v: m.Vnode) {\r\n return [\r\n ,\r\n \r\n ]\r\n }\r\n}\r\n\r\nexport interface ICarouselItem {\r\n className?: string,\r\n}\r\n\r\nexport class CarouselItem extends MithrilTsxComponent {\r\n view(v: m.Vnode) {\r\n return
\r\n {v.children}\r\n
\r\n }\r\n}\r\n\r\nexport interface ICarouselImageItem extends ICarouselItem {\r\n eager?: boolean\r\n src: string\r\n}\r\n\r\nexport class CarouselImageItem extends MithrilTsxComponent {\r\n view(v: m.Vnode) {\r\n return \r\n \r\n \r\n }\r\n}","import m from \"mithril\"\r\nimport { memoize } from \"oj-utils\"\r\n\r\nexport const redrawOnBreakpoint = memoize((width: number = 768) => {\r\n const mediaQueryList = window.matchMedia(`(min-width: ${width}px)`)\r\n let matches = mediaQueryList.matches\r\n\r\n mediaQueryList.onchange = (event) => {\r\n m.redraw()\r\n matches = event.matches\r\n }\r\n return () => !matches\r\n})\r\n","const NL = {\r\n none: '- Geen -',\r\n optional: '(optioneel)',\r\n fileName: 'Bestandsnaam',\r\n add: \"Toevoegen\",\r\n headerYourInfo: 'jouw gegevens',\r\n headerYourQuestion: 'jouw vraag',\r\n send: 'Verzenden',\r\n makeYourChoice: \"maak je keuze\",\r\n fieldSalutationLabel: 'Aanhef',\r\n fieldSalutationMessage: 'Aanhef is verplicht',\r\n fieldNameLabel: 'Naam',\r\n fieldNameMessage: 'Naam is verplicht',\r\n fieldEmailAddressLabel: 'e-mailadres',\r\n fieldEmailMessage: 'E-mail is verplicht',\r\n fieldTelephoneLabel: 'Telefoon',\r\n fieldTelephoneMessage: 'Telefoon is verplicht',\r\n fieldOrderNumberLabel: 'Ordernummer',\r\n fieldOrderNumberMessage: 'Ordernummer is verplicht',\r\n fieldPlatformLabel: 'Mijn vraag gaat over',\r\n fieldPlatformMessage: 'Maak een keuze',\r\n fieldSubjectLabel: 'Onderwerp',\r\n fieldSubjectMessage: 'Onderwerp is verplicht',\r\n fieldDescriptionLabel: 'Vraag, opmerking of suggestie',\r\n fieldDescriptionMessage: 'Dit veld is verplicht',\r\n optionPlatform1: 'HEMA Foto',\r\n optionPlatform2: 'HEMA',\r\n optionSalutation1: 'Neutraal',\r\n optionSalutation2: 'Meneer',\r\n optionSalutation3: 'Mevrouw',\r\n successTitle: 'je bericht is verzonden',\r\n successDescription: 'Wij proberen je bericht zo snel mogelijk te beantwoorden.',\r\n newsletterTitle: \"blijft altijd op de hoogte van onze acties\",\r\n newsletterDescription: \"Schrijf je in voor de HEMA nieuwsbrief en mis nooit meer iets.\",\r\n newsletterSubscribe: \"meld je aan\",\r\n newsletterSignIn: \"schrijf je in\",\r\n newsletterSuccess: \"Gelukt! Je ontvangt vanaf nu onze nieuwsbrief.\",\r\n invalidEmail: \"Dit is geen geldig e-mailadres\",\r\n seeAll: \"bekijk alles\"\r\n}\r\n\r\nconst FR: typeof NL = {\r\n none: '-- Aucun --',\r\n optional: '(optionnel)',\r\n fileName: 'Nom de fichier',\r\n add: \"Ajouter\",\r\n headerYourInfo: 'vos coordonnées',\r\n headerYourQuestion: 'votre question',\r\n send: 'Expédier',\r\n makeYourChoice: \"faites votre choix\",\r\n fieldSalutationLabel: 'Titre',\r\n fieldSalutationMessage: 'Entrez votre titre',\r\n fieldNameLabel: 'Nom',\r\n fieldNameMessage: 'Entrez votre nom',\r\n fieldEmailAddressLabel: 'e-mailadres',\r\n fieldEmailMessage: 'Entrez votre e-mail',\r\n fieldTelephoneLabel: 'Téléphone',\r\n fieldTelephoneMessage: 'Entrez votre téléphone',\r\n fieldOrderNumberLabel: 'Numéro de commande',\r\n fieldOrderNumberMessage: 'Entrez votre numéro de commande',\r\n fieldPlatformLabel: 'Ma question concerne',\r\n fieldPlatformMessage: 'Ma question concerne',\r\n fieldSubjectLabel: 'Sujet',\r\n fieldSubjectMessage: 'Entrez votre sujet',\r\n fieldDescriptionLabel: 'Question, remarque ou suggestion',\r\n fieldDescriptionMessage: 'Entrez votre question, remarque ou suggestion',\r\n optionPlatform1: 'HEMA Photo',\r\n optionPlatform2: 'HEMA',\r\n optionSalutation1: 'Neutre',\r\n optionSalutation2: 'Monsieur',\r\n optionSalutation3: 'Madame',\r\n successTitle: 'votre message a été envoyé',\r\n successDescription: 'Nous essayons de répondre à votre message dès que possible.',\r\n newsletterTitle: \"restez toujours informé de nos promotions\",\r\n newsletterDescription: \"Inscrivez-vous à la newsletter HEMA et ne manquez plus rien.\",\r\n newsletterSubscribe: \"inscris-toi\",\r\n newsletterSignIn: \"inscrivez-vous\",\r\n newsletterSuccess: \"Réussi ! Vous recevrez désormais notre newsletter.\",\r\n invalidEmail: \"Ce n'est pas une adresse e-mail valide\",\r\n seeAll: \"voir tout\"\r\n}\r\n\r\n\r\n\r\nconst translations: Record = {\r\n NL,\r\n FR\r\n}\r\n\r\nexport const getTranslation = (key: T): typeof NL[T] => {\r\n if (window.culture === \"fr-BE\")\r\n return translations[\"FR\"][key]\r\n\r\n return translations[\"NL\"][key]\r\n}\r\n\r\nexport type LanguageKey = keyof typeof NL\r\n","import m, { Vnode, VnodeDOM } from \"mithril\"\r\nimport { MithrilTsxComponent } from \"mithril-tsx-component\"\r\nimport { type IImage } from \"../../types\"\r\nimport { cleanString } from \"oj-utils\"\r\n\r\nexport interface IPictureElement {\r\n className?: string,\r\n items: IImage[]\r\n}\r\nexport class PictureElement extends MithrilTsxComponent {\r\n \r\n view(v: Vnode) {\r\n return \r\n {v.attrs.items.map((x, i) => {\r\n if (v.attrs.items.length - 1 === i)\r\n return {x.altText}\r\n else\r\n return \r\n })}\r\n \r\n }\r\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t\"hotspotGrid\": 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkhema_foto_shopping\"] = self[\"webpackChunkhema_foto_shopping\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [\"vendor\"], () => (__webpack_require__(6031)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","Counter","params","start","limit","loop","min","max","withinLimit","counter","get","set","n","self","add","sign","Math","abs","clone","Vector1D","value","vector","divide","readNumber","multiply","normalize","subtract","Direction","direction","v","d","EventStore","listeners","node","type","handler","options","addEventListener","push","removeEventListener","removeAll","filter","remove","Limit","reachedMin","reachedMax","reachedAny","constrain","removeOffset","DragTracker","axis","pxToPercent","scrollAxis","scroll","coords","x","y","startDrag","diffDrag","lastDrag","pointValue","trackPoints","lastMoveTime","Date","getTime","isMouse","readPoint","evt","touches","c","pointerDown","point","measure","pointerMove","nowTime","diffTime","pointerUp","currentPoint","force","slice","map","trackPoint","sort","p1","p2","roundToDecimals","decimalPoints","pow","round","arrayKeys","array","keys","Number","removeClass","className","cl","classList","contains","addClass","ScrollBounds","location","scrollBody","animation","disabled","timeout","shouldConstrain","window","setTimeout","constraint","useSpeed","useMass","toggleActive","active","ScrollLooper","contentSize","_a","vectors","shouldLoop","loopDistance","forEach","SlideLooper","gap","scrollLocation","slidesInView","viewSize","slideSizes","scrollSnaps","ascItems","descItems","reverse","loopPoints","findLoopPoints","slidesInGap","concat","endPoints","loopStyle","removeSlideSizes","indexes","from","reduce","a","edge","isStartEdge","offset","slideBounds","findSlideBounds","index","initial","altered","b","getTarget","canLoop","every","clear","slides","style","loopPoint","SlideFocus","scrollTo","slidesToScroll","root","eventStore","removeAllEvents","lastTabPressTime","registerTabPress","event","keyCode","addFocusEvent","slide","scrollLeft","selectedIndex","floor","addActivationEvents","document","Translate","container","translateAxis","roundToTwoDecimals","containerStyle","transform","to","getComputedStyle","Engine","events","viewInPx","scrollLength","align","startIndex","inViewThreshold","speed","dragFree","containScroll","cross","getBoundingClientRect","width","height","Axis","totalPercent","slideIndexes","snapSizes","size","groups","groupArray","g","s","alignment","predefined","center","end","Alignment","scrollSnap","alignments","distancesBetween","next","ScrollSnap","defaultSnaps","contain","scrollBounds","alignedWithinView","contentExceedsView","trim","containedSnaps","startSnap","endSnap","lastIndexOf","indexOf","findDuplicates","ScrollContain","shouldContain","trimSnaps","indexPrevious","scrollLimit","ScrollLimit","callback","animationFrame","ifAnimating","cb","requestAnimationFrame","proceed","stop","cancelAnimationFrame","Animation","engine","seek","update","settled","settle","dragHandler","emit","scrollLooper","loopVectors","slideLooper","translate","startLocation","mass","velocity","acceleration","attraction","state","m","applyForce","diff","hasSettled","useDefaultMass","useDefaultSpeed","ScrollBody","scrollTarget","minDistance","d1","d2","shortcut","t1","t2","t3","shortest","byDistance","distance","snap","targetSnap","diffToSnap","findTargetSnap","findTargetIndex","reachedBound","byIndex","ScrollTarget","indexCurrent","targetDistance","distanceDiff","indexDiff","targetIndex","ScrollTo","threshold","loopOffset","thresholds","check","list","slideBound","SlidesInView","element","dragTracker","crossAxis","focusNodes","startScroll","startCross","dragStartPoint","activationEvents","interactionEvents","snapForceBoost","mouse","touch","freeForceBoost","baseSpeed","edgeLimit","pointerIsDown","preventScroll","preventClick","down","button","name","isMoving","delta","clearPreventClick","isNotFocusNode","nodeName","preventDefault","move","up","cancelable","moveScroll","moveCross","diffScroll","diffCross","reachedLimit","resist","forceB","forceA","rawForce","seekNext","destination","allowedForce","factor","pointB","pointA","click","clickAllowed","DragHandler","scrollProgress","slideFocus","debounce","form","postalCode","getFields","houseNumber","then","res","JSON","parse","street","city","validate","readonly","defaultOptions","containerSelector","draggable","draggableClass","draggingClass","selectedClass","sliderRoot","userOptions","destroy","init","reInit","resize","select","e","off","on","EventEmitter","debouncedResize","activated","newRootElementSize","rootElementSize","reActivate","id","clearTimeout","activate","partialOptions","Error","nodeList","selector","sliderContainer","querySelector","children","Array","storeElements","deActivate","toggleDraggingClass","toggleSelectedClass","inView","slidesNotInView","newOptions","selectedScrollSnap","canScrollNext","canScrollPrev","containerNode","dangerouslyGetEngine","previousScrollSnap","scrollNext","scrollPrev","scrollSnapList","slideNodes","HotspotType","HotspotColor","view","svg","oninit","load","onbeforeupdate","o","attrs","src","onupdate","loaded","onload","dom","setAttribute","fetch","text","navigation","embla","cleanString","CarouselNav","oncreate","emblaNode","disableSwipe","emblaOptions","onclick","Svg","redrawOnBreakpoint","CarouselItem","loading","eager","memoize","mediaQueryList","matchMedia","matches","onchange","translations","NL","none","optional","fileName","headerYourInfo","headerYourQuestion","send","makeYourChoice","fieldSalutationLabel","fieldSalutationMessage","fieldNameLabel","fieldNameMessage","fieldEmailAddressLabel","fieldEmailMessage","fieldTelephoneLabel","fieldTelephoneMessage","fieldOrderNumberLabel","fieldOrderNumberMessage","fieldPlatformLabel","fieldPlatformMessage","fieldSubjectLabel","fieldSubjectMessage","fieldDescriptionLabel","fieldDescriptionMessage","optionPlatform1","optionPlatform2","optionSalutation1","optionSalutation2","optionSalutation3","successTitle","successDescription","newsletterTitle","newsletterDescription","newsletterSubscribe","newsletterSignIn","newsletterSuccess","invalidEmail","seeAll","FR","getTranslation","culture","items","imageUrl","srcset","retinaUrl","alt","altText","media","minWidth","isMobile","overview","title","subTitle","isCarousel","navigateUrl","href","documentElement","clientWidth","Carousel","scrollVisibleSlides","data","item","Product","HotspotItem","ContentItem","price","actionPrice","formatGtmData","priceParts","hotspotItem","stringify","itemList","item_list_name","openInNewTab","rel","ojtag","campaignLabel","promo","images","PictureElement","hoverImages","labels","colorHex","label","subtitle","currency","formatedPrice","Intl","NumberFormat","format","replace","formatPrice","priceText","minimumFractionDigits","toString","split","cats","category","listName","item_id","fujiId","productId","item_name","item_category","item_category2","item_category3","regularPrice","discount","discountPrice","editor_type","editorType","linkText","color","r","HotspotGrid","inputs","querySelectorAll","err","HTMLInputElement","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","splice","getter","__esModule","definition","defineProperty","enumerable","globalThis","Function","obj","prop","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","__webpack_exports__"],"sourceRoot":""}