{"version":3,"file":"chunks/8bbd66b32a6c7f.js","mappings":";yDAqBA,SAASA,IACPC,KAAKC,QAAUD,KAAKC,SAAW,CAAC,EAChCD,KAAKE,cAAgBF,KAAKE,oBAAiBC,CAC7C,CAuQA,SAASC,EAAWC,GAClB,MAAsB,mBAARA,CAChB,CAMA,SAASC,EAASD,GAChB,MAAsB,iBAARA,GAA4B,OAARA,CACpC,CAEA,SAASE,EAAYF,GACnB,YAAe,IAARA,CACT,CApRAG,EAAOC,QAAUV,EAKjBA,EAAaW,UAAUT,aAAUE,EACjCJ,EAAaW,UAAUR,mBAAgBC,EAIvCJ,EAAaY,oBAAsB,GAInCZ,EAAaW,UAAUE,gBAAkB,SAASC,GAChD,GA4PsB,iBA5PRA,GAAMA,EAAI,GAAKC,MAAMD,GACjC,MAAME,UAAU,+BAElB,OADAf,KAAKE,cAAgBW,EACdb,IACT,EAEAD,EAAaW,UAAUM,KAAO,SAASC,GACrC,IAAIC,EAAIC,EAASC,EAAKC,EAAMC,EAAGC,EAM/B,GAJKvB,KAAKC,UACRD,KAAKC,QAAU,CAAC,GAGL,UAATgB,KACGjB,KAAKC,QAAQuB,OACblB,EAASN,KAAKC,QAAQuB,SAAWxB,KAAKC,QAAQuB,MAAMC,QAAS,CAEhE,IADAP,EAAKQ,UAAU,cACGC,MAChB,MAAMT,EAGN,IAAIU,EAAM,IAAID,MAAM,yCAA2CT,EAAK,KAEpE,MADAU,EAAIC,QAAUX,EACRU,CAEV,CAKF,GAAIrB,EAFJY,EAAUnB,KAAKC,QAAQgB,IAGrB,OAAO,EAET,GAAIb,EAAWe,GACb,OAAQO,UAAUD,QAEhB,KAAK,EACHN,EAAQW,KAAK9B,MACb,MACF,KAAK,EACHmB,EAAQW,KAAK9B,KAAM0B,UAAU,IAC7B,MACF,KAAK,EACHP,EAAQW,KAAK9B,KAAM0B,UAAU,GAAIA,UAAU,IAC3C,MAEF,QACEL,EAAOU,MAAMrB,UAAUsB,MAAMF,KAAKJ,UAAW,GAC7CP,EAAQc,MAAMjC,KAAMqB,QAEnB,GAAIf,EAASa,GAIlB,IAHAE,EAAOU,MAAMrB,UAAUsB,MAAMF,KAAKJ,UAAW,GAE7CN,GADAG,EAAYJ,EAAQa,SACJP,OACXH,EAAI,EAAGA,EAAIF,EAAKE,IACnBC,EAAUD,GAAGW,MAAMjC,KAAMqB,GAG7B,OAAO,CACT,EAEAtB,EAAaW,UAAUwB,YAAc,SAASjB,EAAMkB,GAClD,IAAIC,EAEJ,IAAKhC,EAAW+B,GACd,MAAMpB,UAAU,+BA2ClB,OAzCKf,KAAKC,UACRD,KAAKC,QAAU,CAAC,GAIdD,KAAKC,QAAQoC,aACfrC,KAAKgB,KAAK,cAAeC,EACfb,EAAW+B,EAASA,UACpBA,EAASA,SAAWA,GAE3BnC,KAAKC,QAAQgB,GAGTX,EAASN,KAAKC,QAAQgB,IAE7BjB,KAAKC,QAAQgB,GAAMqB,KAAKH,GAGxBnC,KAAKC,QAAQgB,GAAQ,CAACjB,KAAKC,QAAQgB,GAAOkB,GAN1CnC,KAAKC,QAAQgB,GAAQkB,EASnB7B,EAASN,KAAKC,QAAQgB,MAAWjB,KAAKC,QAAQgB,GAAMsB,SAIpDH,EAHG7B,EAAYP,KAAKE,eAGhBH,EAAaY,oBAFbX,KAAKE,gBAKFkC,EAAI,GAAKpC,KAAKC,QAAQgB,GAAMQ,OAASW,IAC5CpC,KAAKC,QAAQgB,GAAMsB,QAAS,EAC5BC,QAAQhB,MAAM,mIAGAxB,KAAKC,QAAQgB,GAAMQ,QACJ,mBAAlBe,QAAQC,OAEjBD,QAAQC,SAKPzC,IACT,EAEAD,EAAaW,UAAUgC,GAAK3C,EAAaW,UAAUwB,YAEnDnC,EAAaW,UAAUiC,KAAO,SAAS1B,EAAMkB,GAC3C,IAAK/B,EAAW+B,GACd,MAAMpB,UAAU,+BAElB,IAAI6B,GAAQ,EAEZ,SAASC,IACP7C,KAAK8C,eAAe7B,EAAM4B,GAErBD,IACHA,GAAQ,EACRT,EAASF,MAAMjC,KAAM0B,WAEzB,CAKA,OAHAmB,EAAEV,SAAWA,EACbnC,KAAK0C,GAAGzB,EAAM4B,GAEP7C,IACT,EAGAD,EAAaW,UAAUoC,eAAiB,SAAS7B,EAAMkB,GACrD,IAAIY,EAAMC,EAAUvB,EAAQH,EAE5B,IAAKlB,EAAW+B,GACd,MAAMpB,UAAU,+BAElB,IAAKf,KAAKC,UAAYD,KAAKC,QAAQgB,GACjC,OAAOjB,KAMT,GAHAyB,GADAsB,EAAO/C,KAAKC,QAAQgB,IACNQ,OACduB,GAAY,EAERD,IAASZ,GACR/B,EAAW2C,EAAKZ,WAAaY,EAAKZ,WAAaA,SAC3CnC,KAAKC,QAAQgB,GAChBjB,KAAKC,QAAQ6C,gBACf9C,KAAKgB,KAAK,iBAAkBC,EAAMkB,QAE/B,GAAI7B,EAASyC,GAAO,CACzB,IAAKzB,EAAIG,EAAQH,KAAM,GACrB,GAAIyB,EAAKzB,KAAOa,GACXY,EAAKzB,GAAGa,UAAYY,EAAKzB,GAAGa,WAAaA,EAAW,CACvDa,EAAW1B,EACX,KACF,CAGF,GAAI0B,EAAW,EACb,OAAOhD,KAEW,IAAhB+C,EAAKtB,QACPsB,EAAKtB,OAAS,SACPzB,KAAKC,QAAQgB,IAEpB8B,EAAKE,OAAOD,EAAU,GAGpBhD,KAAKC,QAAQ6C,gBACf9C,KAAKgB,KAAK,iBAAkBC,EAAMkB,EACtC,CAEA,OAAOnC,IACT,EAEAD,EAAaW,UAAUwC,mBAAqB,SAASjC,GACnD,IAAIkC,EAAK5B,EAET,IAAKvB,KAAKC,QACR,OAAOD,KAGT,IAAKA,KAAKC,QAAQ6C,eAKhB,OAJyB,IAArBpB,UAAUD,OACZzB,KAAKC,QAAU,CAAC,EACTD,KAAKC,QAAQgB,WACbjB,KAAKC,QAAQgB,GACfjB,KAIT,GAAyB,IAArB0B,UAAUD,OAAc,CAC1B,IAAK0B,KAAOnD,KAAKC,QACH,mBAARkD,GACJnD,KAAKkD,mBAAmBC,GAI1B,OAFAnD,KAAKkD,mBAAmB,kBACxBlD,KAAKC,QAAU,CAAC,EACTD,IACT,CAIA,GAAII,EAFJmB,EAAYvB,KAAKC,QAAQgB,IAGvBjB,KAAK8C,eAAe7B,EAAMM,QACrB,GAAIA,EAET,KAAOA,EAAUE,QACfzB,KAAK8C,eAAe7B,EAAMM,EAAUA,EAAUE,OAAS,IAI3D,cAFOzB,KAAKC,QAAQgB,GAEbjB,IACT,EAEAD,EAAaW,UAAUa,UAAY,SAASN,GAQ1C,OANKjB,KAAKC,SAAYD,KAAKC,QAAQgB,GAE1Bb,EAAWJ,KAAKC,QAAQgB,IACzB,CAACjB,KAAKC,QAAQgB,IAEdjB,KAAKC,QAAQgB,GAAMe,QAJnB,EAMV,EAEAjC,EAAaW,UAAU0C,cAAgB,SAASnC,GAC9C,GAAIjB,KAAKC,QAAS,CAChB,IAAIoD,EAAarD,KAAKC,QAAQgB,GAE9B,GAAIb,EAAWiD,GACb,OAAO,EACJ,GAAIA,EACP,OAAOA,EAAW5B,MACtB,CACA,OAAO,CACT,EAEA1B,EAAaqD,cAAgB,SAASE,EAASrC,GAC7C,OAAOqC,EAAQF,cAAcnC,EAC/B,+BC3RA,IAAIsC,EAAsB,EAAQ,OAC9BC,EAAsB,EAAQ,OAC9BC,EAAmB,EAAQ,OAC3BC,EAAmB,EAAQ,OAC3BC,EAAgB,EAAQ,OAkC5B,SAASC,EAAoBC,EAAQC,EAAOC,EAAMC,GAChD,OAAO,IAAIT,EAAoBM,EAAQC,EAAOC,EAAMC,EACtD,CAOAJ,EAAoBK,QAAU,EAAQ,OAOtCL,EAAoBL,oBAAsBA,EAO1CK,EAAoBF,iBAAmBA,EAOvCE,EAAoBJ,oBAAsBA,EAO1CI,EAAoBD,cAAgBA,EAOpCC,EAAoBH,iBAAmBA,EAEvCjD,EAAOC,QAAUmD,gCCpFjB,IAAI7D,EAAe,EAAQ,OAiB3B,SAASmE,EAAcC,EAAYC,EAAIC,GACrCrE,KAAKsE,KAAOH,EACZnE,KAAKoE,GAAKA,EACVpE,KAAKqE,YAAcA,EACnBrE,KAAKuE,YAAc,KACnBvE,KAAKwE,qBAAuB,IAC9B,CArBe,EAAQ,MAuBvBC,CAASP,EAAenE,GAOxBmE,EAAcxD,UAAUgE,OAAS,WAC/B1E,KAAKkD,qBACLlD,KAAKsE,KAAKK,oBAAoB3E,KAChC,EAEAkE,EAAcxD,UAAUkE,iBAAmB,SAAUC,GACnD,OAAO7E,KAAKoE,GAAGS,EACjB,EAEAX,EAAcxD,UAAUoE,0BAA4B,SAAUD,GAC5D,OAAO7E,KAAKqE,YAAYQ,EAC1B,EAEArE,EAAOC,QAAUyD,0BChCjB,SAASV,EAAoBO,GAC3BA,EAAOA,GAAQ,CAAC,EAChB/D,KAAK+E,OAAShB,EAAKgB,QAAU,EAC/B,CAEAvB,EAAoB9C,UAAY,CAC9BsE,YAAaxB,EAEbyB,UAAW,SAAUF,GACnB,IAAIG,EAAYlF,KAAK+E,OAAO/C,QAI5B,OAFAkD,EAAU5C,KAAKyC,GAER,IAAIvB,EAAoB,CAAEuB,OAAQG,GAC3C,EAEAC,aAAc,SAAUC,GACtB,OAAO,IAAI5B,EAAoB,CAC7BuB,OAAQ/E,KAAK+E,OAAOM,QAAO,SAAUC,GACnC,OAAOA,EAAMC,OAASH,CACxB,KAEJ,EAEAI,4BAA6B,SAAUT,GACrC,OAAO/E,KAAKiF,UACVQ,OAAOC,OAAO,CAAC,EAAGX,EAAQ,CAAEY,MAAO,oBAEvC,EAEAC,mBAAoB,SAAUb,GAC5B,OAAO/E,KAAKiF,UACVQ,OAAOC,OAAO,CAAC,EAAGX,EAAQ,CAAEY,MAAO,qBAEvC,EAEAE,iBAAkB,SAAUd,GAC1B,OAAO/E,KAAKiF,UACVQ,OAAOC,OAAO,CAAC,EAAGX,EAAQ,CAAEY,MAAO,mBAEvC,EAEAG,kBAAmB,SAAUf,GAC3B,OAAO/E,KAAKiF,UACVQ,OAAOC,OAAO,CAAC,EAAGX,EAAQ,CAAEY,MAAO,oBAEvC,EAEAI,kBAAmB,SAAUhB,GAC3B,OAAO/E,KAAKiF,UACVQ,OAAOC,OAAO,CAAC,EAAGX,EAAQ,CAAEY,MAAO,oBAEvC,EAEAK,cAAe,SAAUC,EAAWC,GAClC,OAAOlG,KAAK+E,OACTM,QAAO,SAAUN,GAChB,YAA8B5E,IAAvB+F,EAAMnB,EAAOQ,KACtB,IACCY,KAAI,SAAUpB,GACb,IAAIqB,EAAQX,OAAOC,OAAO,CAAC,EAAGX,EAAQ,CACpCkB,UAAWA,EAEXI,UAAWtB,EAAOsB,WAAa,IAIjC,cAFOD,EAAMb,KAENa,CACT,GACJ,GAGF5F,EAAOC,QAAU+C,0BC7EjB,SAASC,EAAiB6C,EAAOC,GAC/BvG,KAAKwG,OAASF,EACdtG,KAAKyG,YAAc,CAAC,EAGpB,IAAIC,EAAO1G,KAEXsG,EAAMvB,OAAO4B,SAAQ,SAAUrB,GAC7B,IAAIF,EAAKE,EAAMC,KACfmB,EAAKtB,GAAMmB,EAAQnB,GACnBsB,EAAKD,YAAYrB,GAAMmB,EAAQnB,EACjC,GACF,CAEA3B,EAAiB/C,UAAY,CAC3BsE,YAAavB,GAGfjD,EAAOC,QAAUgD,gCCdjB,IAAImD,EAAe,EAAQ,OACvBC,EAAgB,EAAQ,OACxBC,EAAO,EAAQ,OAEfC,EAAM,CAQRC,cAAe,SAAuBC,EAAgBC,EAAWC,GAC/D,GAAIJ,EAAIK,UAAUH,EAAgBC,EAAWC,GAC3C,OAAOF,EAGT,IAAII,EAAgB,GAAKF,EAErBG,EAAmBL,EAAeC,GAElCD,EAAeC,GAAWK,OAAOF,GADjC,CAACA,GAGDG,EAAM,CAAC,EAIX,OAFAA,EAAIN,GAAaI,EAEVV,EAAa,CAAC,EAAGY,EAAKP,EAC/B,EAUAQ,iBAAkB,SAChBR,EACAC,EACAC,GAEA,QAAchH,IAAVgH,EAGF,OAAOJ,EAAIW,gBAAgBT,GAAgB,SAAUU,EAAGC,GACtD,OAAOV,IAAcU,CACvB,IAGF,IAAIP,EAAgB,GAAKF,EAEzB,OAAOJ,EAAIW,gBAAgBT,GAAgB,SAAUU,EAAGC,GACtD,OAAOV,IAAcU,GAAKP,IAAkBM,CAC9C,GACF,EAQAE,iBAAkB,SAChBZ,EACAC,EACAC,GAEA,QAAchH,IAAVgH,EACF,MAAM,IAAIxF,MAAM,gDAElB,OAAIoF,EAAIK,UAAUH,EAAgBC,EAAWC,GACpCJ,EAAIU,iBAAiBR,EAAgBC,EAAWC,GAGlDJ,EAAIC,cAAcC,EAAgBC,EAAWC,EACtD,EAYAO,gBAAiB,SACfT,EACAC,EACAY,GAEA,QAAkB3H,IAAd+G,EAGF,OAAKL,EAAcI,GAGZ,CAAC,EAFCA,EAGJ,GAAyB,iBAAdC,EAChB,OAAOJ,EAAKG,EAAgB,CAACC,IACxB,GAAyB,mBAAdA,EAA0B,CAC1C,IAAIa,GAAa,EAEbC,EAAoBvC,OAAOwC,KAAKhB,GAAgBiB,QAAO,SACzDC,EACAhF,GAEA,IAAIiF,EAASnB,EAAe9D,IAAQ,GAChCkF,EAAYD,EAAO/C,QAAO,SAAU8B,GACtC,OAAQD,EAAUC,EAAOhE,EAAK2E,EAChC,IAQA,OANIO,EAAU5G,SAAW2G,EAAO3G,SAC9BsG,GAAa,GAGfI,EAAKhF,GAAOkF,EAELF,CACT,GACA,CAAC,GAED,OAAIJ,EAAmBC,EAChBf,CACT,CAKF,EAUAG,UAAW,SAAmBH,EAAgBC,EAAWoB,GACvD,IAAIC,EACFC,QAAQvB,EAAeC,KACvBD,EAAeC,GAAWzF,OAAS,EAErC,QAAwBtB,IAApBmI,IAAkCC,EACpC,OAAOA,EAGT,IAAIE,EAA0B,GAAKH,EAEnC,OAAuE,IAAhErB,EAAeC,GAAWwB,QAAQD,EAC3C,GAGFjI,EAAOC,QAAUsG,gCCzKjB,IAAIH,EAAe,EAAQ,OACvB+B,EAAO,EAAQ,MACfC,EAAe,EAAQ,OACvBC,EAAQ,EAAQ,OAChBhC,EAAgB,EAAQ,OACxBC,EAAO,EAAQ,OACfgC,EAAc,EAAQ,OACtBC,EAAmB,EAAQ,OAE3BC,EAAiB,EAAQ,OAY7B,SAASC,EAAyBC,EAAGC,GACnC,OAAIpH,MAAMqH,QAAQF,IAAMnH,MAAMqH,QAAQD,GAElCD,EAAEzH,SAAW0H,EAAE1H,QACfyH,EAAEG,OAAM,SAAUC,EAAIhI,GACpB,OAAO2H,EAAyBE,EAAE7H,GAAIgI,EACxC,IAGGJ,IAAMC,CACf,CA+DA,SAASzF,EAAiB6F,GACxB,IAAIxE,EAASwE,EACT7F,EAAiB8F,cAAcD,GAC/B,CAAC,OAEoBpJ,IAArB4E,EAAO0E,WAA4BV,EAAiBhE,EAAO0E,YAE7DjH,QAAQkH,KACN,mIASJ1J,KAAK2J,OAAS5E,EAAO4E,QAAU,GAO/B3J,KAAK4J,kBAAoB7E,EAAO6E,mBAAqB,GASrD5J,KAAK6J,mBAAqB9E,EAAO8E,oBAAsB,GAevD7J,KAAK8J,kBAAoB/E,EAAO+E,mBAAqB,CAAC,EAatD9J,KAAK+J,eAAiBhF,EAAOgF,gBAAkB,CAAC,EAahD/J,KAAKgK,6BAA+BjF,EAAOiF,8BAAgC,CAAC,EAY5EhK,KAAKiK,mBAAqBlF,EAAOkF,oBAAsB,CAAC,EAQxDjK,KAAKkK,eAAiBnF,EAAOmF,gBAAkB,GAe/ClK,KAAKmK,8BACHpF,EAAOoF,+BAAiC,CAAC,EAG3C,IAAIzD,EAAO1G,KACXyF,OAAOwC,KAAKlD,GAAQ4B,SAAQ,SAAUyD,GACpC,IAAIC,GAAiE,IAApD3G,EAAiB4G,WAAW5B,QAAQ0B,GACjDG,OAAuCpK,IAAtB4E,EAAOqF,IAEvBC,GAAcE,IACjB7D,EAAK0D,GAAarF,EAAOqF,GAE7B,GACF,CAOA1G,EAAiB4G,WAAa7E,OAAOwC,KAAK,IAAIvE,GAO9CA,EAAiB8F,cAAgB,SAAUgB,GAEzC,GAAIA,aAAwB9G,EAAkB,OAAO8G,EAErD,IAAIC,EAAU,CAAC,EAwCf,GAtCiB,CACf,kBACA,eACA,iBACA,uBACA,sBACA,OACA,oBACA,WACA,sBACA,cACA,gBAGS9D,SAAQ,SAAU+D,GAC3B,IAAIvD,EAAQqD,EAAaE,GACzB,GAAqB,iBAAVvD,EAAoB,CAC7B,IAAIwD,EAAcC,WAAWzD,GAE7BsD,EAAQC,GAAK5J,MAAM6J,GAAexD,EAAQwD,CAC5C,CACF,IAII5I,MAAMqH,QAAQoB,EAAaK,qBAC7BJ,EAAQI,kBAAoBL,EAAaK,kBAAkB1E,KAAI,SAC7D2E,GAEA,OAAI/I,MAAMqH,QAAQ0B,GACTA,EAAQ3E,KAAI,SAAUgB,GAC3B,OAAOyD,WAAWzD,EACpB,IAEK2D,CACT,KAGEN,EAAaP,mBAAoB,CACnC,IAAIA,EAAqB,CAAC,EAC1BxE,OAAOwC,KAAKuC,EAAaP,oBAAoBtD,SAAQ,SAAUO,GAC7D,IAAI6D,EAAYP,EAAaP,mBAAmB/C,IAAc,CAAC,EAC/D+C,EAAmB/C,GAAa,CAAC,EACjCzB,OAAOwC,KAAK8C,GAAWpE,SAAQ,SAAUqE,GACvC,IACIC,EADSF,EAAUC,GACG7E,KAAI,SAAUwB,GACtC,OAAI5F,MAAMqH,QAAQzB,GACTA,EAAExB,KAAI,SAAU+E,GACrB,MAAsB,iBAAXA,EACFN,WAAWM,GAEbA,CACT,IACsB,iBAANvD,EACTiD,WAAWjD,GAEbA,CACT,IACAsC,EAAmB/C,GAAW8D,GAAYC,CAC5C,GACF,IACAR,EAAQR,mBAAqBA,CAC/B,CAEA,OAAOpB,EAAM2B,EAAcC,EAC7B,EAQA/G,EAAiByH,KAAO,SAA8B5B,GACpD,IAAI6B,EAAW,IAAI1H,EAAiB6F,GAyBpC,OAvByBA,EAAcM,oBAAsB,IAC1ClD,SAAQ,SAAU0E,GACnC,GAAIA,EAAMC,SAAU,CAClB,IAAIC,EAAoBH,EAASI,0BAA0BH,EAAMI,MAG/DF,EAAkB9J,OAAS,GACsB,IAAjD8J,EAAkB,GAAG7C,QAAQ2C,EAAMC,YAEnCF,EAAWA,EAASM,iBAAiBL,EAAMI,OAKZ,KADjCF,EAAoBH,EAASI,0BAA0BH,EAAMI,OACvChK,SACpB2J,EAAWA,EAASO,kCAClBN,EAAMI,KACNJ,EAAMC,UAGZ,CACF,IAEOF,CACT,EAQA1H,EAAiBkI,SAAW,SAAUC,EAAchH,GAClD,IAAIE,EAASF,GAAc,CAAC,EAE5B,OACEgH,EAAaC,YACb/G,EAAOmF,gBACPnF,EAAOmF,eAAezI,OAAS,EAExB,IAAIE,MACT,qLAKAkK,EAAa3B,eAAezI,OAAS,GAAKsD,EAAO+G,WAC5C,IAAInK,MACT,oKAMFkK,EAAaE,gBACbhH,EAAOkF,oBACPpD,EAAc9B,EAAOkF,oBAEd,IAAItI,MACT,+KAMAkF,EAAcgF,EAAa5B,qBAAuBlF,EAAOgH,eACpD,IAAIpK,MACT,+KAMG,IACT,EAEA+B,EAAiBhD,UAAY,CAC3BsE,YAAatB,EAWbgI,iBAAkB,SAA0BxE,GAC1C,IAAI8E,EAAQ,CACV/B,mBAAoBjK,KAAKiM,yBAAyB/E,GAClD4C,kBAAmBd,EAAetB,gBAChC1H,KAAK8J,kBACL5C,EACA,oBAEF6C,eAAgBf,EAAetB,gBAC7B1H,KAAK+J,eACL7C,EACA,WAEF8C,6BAA8BhB,EAAetB,gBAC3C1H,KAAKgK,6BACL9C,EACA,oBAEFiD,8BAA+BnB,EAAetB,gBAC5C1H,KAAKmK,8BACLjD,EACA,sBAGJ,OACE8E,EAAM/B,qBAAuBjK,KAAKiK,oBAClC+B,EAAMlC,oBAAsB9J,KAAK8J,mBACjCkC,EAAMjC,iBAAmB/J,KAAK+J,gBAC9BiC,EAAMhC,+BACJhK,KAAKgK,8BACPgC,EAAM7B,gCAAkCnK,KAAKmK,8BAEtCnK,KAEFA,KAAKkM,mBAAmBF,EACjC,EAMAG,UAAW,WACT,YAAwBhM,IAApBH,KAAK8L,YAA2D,IAA/B9L,KAAKkK,eAAezI,OAChDzB,KAEFA,KAAKkM,mBAAmB,CAC7BJ,gBAAY3L,EACZ+J,eAAgB,IAEpB,EAOAkC,SAAU,SAAkBtI,GAC1B,OAAIA,IAAU9D,KAAK8D,MAAc9D,KAE1BA,KAAKkM,mBAAmB,CAC7BpI,MAAOA,GAEX,EAOAuI,SAAU,SAAkBC,GAC1B,OAAIA,IAAatM,KAAKoG,MAAcpG,KAE7BA,KAAKkM,mBAAmB,CAC7B9F,MAAOkG,GAEX,EAOAC,QAAS,SAAiBC,GACxB,OAAIA,IAAYxM,KAAKyM,KAAazM,KAE3BA,KAAKkM,mBAAmB,CAC7BO,KAAMD,GAEV,EAQAE,UAAW,SAAmB/C,GAC5B,OAAO3J,KAAKkM,mBAAmB,CAC7BvC,OAAQA,GAEZ,EAQAgD,qBAAsB,SAA8BhD,GAClD,OAAO3J,KAAKkM,mBAAmB,CAC7BtC,kBAAmBD,GAEvB,EAQAiD,eAAgB,SAAwB/L,GACtC,OAAIb,KAAK6M,cAAgBhM,EAAUb,KAE5BA,KAAKkM,mBAAmB,CAC7BW,YAAahM,GAEjB,EAQAiM,iBAAkB,SAA0BC,GAC1C,OAAI/M,KAAK+M,gBAAkBA,EAAsB/M,KAE1CA,KAAKkM,mBAAmB,CAC7Ba,cAAeA,GAEnB,EAkBAC,qBAAsB,SAAU9F,EAAW8D,EAAU7D,GACnD,IAAI8F,EAAMnE,EAAY3B,GAEtB,GAAInH,KAAKkN,iBAAiBhG,EAAW8D,EAAUiC,GAAM,OAAOjN,KAE5D,IAAIwH,EAAMqB,EAAM,CAAC,EAAG7I,KAAKiK,oBAazB,OAXAzC,EAAIN,GAAa2B,EAAM,CAAC,EAAGrB,EAAIN,IAE3BM,EAAIN,GAAW8D,IAEjBxD,EAAIN,GAAW8D,GAAYxD,EAAIN,GAAW8D,GAAUhJ,QAEpDwF,EAAIN,GAAW8D,GAAU1I,KAAK2K,IAE9BzF,EAAIN,GAAW8D,GAAY,CAACiC,GAGvBjN,KAAKkM,mBAAmB,CAC7BjC,mBAAoBzC,GAExB,EAMA2F,0BAA2B,SAAUC,GACnC,OAAKpN,KAAKqN,mBAAmBD,IAGtBpN,KAAK8J,kBAAkBsD,IAFrB,EAGX,EAMAE,0BAA2B,SAAUF,GACnC,OAAKpN,KAAKuN,mBAAmBH,IAGtBpN,KAAKgK,6BAA6BoD,IAFhC,EAGX,EAMA5B,0BAA2B,SAAU4B,GAGnC,OAAOpN,KAAKmK,8BAA8BiD,IAAc,EAC1D,EAMAI,sBAAuB,SAAUJ,GAC/B,OAAKpN,KAAKqN,mBAAmBD,IAGtBpN,KAAK+J,eAAeqD,IAFlB,EAGX,EAUAK,wBAAyB,SAAUvG,EAAW8D,EAAU0C,GACtD,IAAIC,EAAaD,EACjB,YAAmBvN,IAAfwN,EACG3N,KAAKkN,iBAAiBhG,EAAW8D,EAAU2C,GAGzC3N,KAAKkM,mBAAmB,CAC7BjC,mBAAoBjK,KAAKiM,0BAAyB,SAChD9E,EACAhE,GAEA,OACEA,IAAQ+D,GACRC,EAAMyG,KAAO5C,GACb/B,EAAyB9B,EAAM8F,IAAKnE,EAAY6E,GAEpD,MAZO3N,UAcaG,IAAb6K,EACJhL,KAAKkN,iBAAiBhG,EAAW8D,GAC/BhL,KAAKkM,mBAAmB,CAC7BjC,mBAAoBjK,KAAKiM,0BAAyB,SAChD9E,EACAhE,GAEA,OAAOA,IAAQ+D,GAAaC,EAAMyG,KAAO5C,CAC3C,MAPsDhL,KAWrDA,KAAKkN,iBAAiBhG,GACpBlH,KAAKkM,mBAAmB,CAC7BjC,mBAAoBjK,KAAKiM,0BAAyB,SAAU9E,EAAOhE,GACjE,OAAOA,IAAQ+D,CACjB,MAJ4ClH,IAMhD,EAMA6N,sBAAuB,SAAUT,GAC/B,OAAOpN,KAAKiK,mBAAmBmD,IAAc,CAAC,CAChD,EAOAU,qBAAsB,SAAU5G,EAAW8D,GACzC,OACEhL,KAAKiK,mBAAmB/C,IACxBlH,KAAKiK,mBAAmB/C,GAAW8D,EAEvC,EAWAiB,yBAA0B,SAAkC/E,GAC1D,QAAkB/G,IAAd+G,EACF,OAAKL,EAAc7G,KAAKiK,oBAGjB,CAAC,EAFCjK,KAAKiK,mBAGT,GAAyB,iBAAd/C,EAChB,OAAOJ,EAAK9G,KAAKiK,mBAAoB,CAAC/C,IACjC,GAAyB,mBAAdA,EAA0B,CAC1C,IAAIa,GAAa,EACbkC,EAAqBjK,KAAKiK,mBAC1B8D,EAAwBtI,OAAOwC,KAAKgC,GAAoB/B,QAC1D,SAAUC,EAAMhF,GACd,IAAI4H,EAAYd,EAAmB9G,GAC/B6K,EAAe,CAAC,EAsBpB,OApBAjD,EAAYA,GAAa,CAAC,EAC1BtF,OAAOwC,KAAK8C,GAAWpE,SAAQ,SAAUqE,GACvC,IAAI5C,EAAS2C,EAAUC,IAAa,GAChCiD,EAAY,GAChB7F,EAAOzB,SAAQ,SAAUQ,GACDD,EACpB,CAAE+F,IAAK9F,EAAOyG,GAAI5C,GAClB7H,EACA,YAEoB8K,EAAU3L,KAAK6E,EACvC,IACI8G,EAAUxM,SAAW2G,EAAO3G,SAC9BsG,GAAa,GAEfiG,EAAahD,GAAYiD,CAC3B,IAEA9F,EAAKhF,GAAO6K,EAEL7F,CACT,GACA,CAAC,GAGH,OAAIJ,EAAmBgG,EAChB/N,KAAKiK,kBACd,CAKF,EAQAiE,SAAU,SAAkB7C,GAC1B,OAAIrL,KAAKqN,mBAAmBhC,GACnBrL,KAGFA,KAAKkM,mBAAmB,CAC7BvC,OAAQ3J,KAAK2J,OAAOpC,OAAO,CAAC8D,KAEhC,EAQA8C,oBAAqB,SAA6B9C,GAChD,OAAIrL,KAAKuN,mBAAmBlC,GACnBrL,KAGFA,KAAKkM,mBAAmB,CAC7BtC,kBAAmB5J,KAAK4J,kBAAkBrC,OAAO,CAAC8D,KAEtD,EASA+C,qBAAsB,SAA8BC,GAClD,GAAIrO,KAAKsO,oBAAoBD,EAAkB5C,MAC7C,MAAM,IAAI9J,MACR,+DACE0M,EAAkB5C,KAClB,KAIN,OAAOzL,KAAKkM,mBAAmB,CAC7BrC,mBAAoB7J,KAAK6J,mBAAmBtC,OAAO,CAAC8G,KAExD,EAQAE,mBAAoB,SAA4BlD,EAAOlE,GACrD,IAAKnH,KAAKqN,mBAAmBhC,GAC3B,MAAM,IAAI1J,MACR0J,EACE,uEAGN,OAAIrC,EAAe5B,UAAUpH,KAAK8J,kBAAmBuB,EAAOlE,GACnDnH,KAEFA,KAAKkM,mBAAmB,CAC7BpC,kBAAmBd,EAAehC,cAChChH,KAAK8J,kBACLuB,EACAlE,IAGN,EAQAqH,qBAAsB,SAA8BnD,EAAOlE,GACzD,IAAKnH,KAAKqN,mBAAmBhC,GAC3B,MAAM,IAAI1J,MACR0J,EACE,uEAGN,OAAIrC,EAAe5B,UAAUpH,KAAK+J,eAAgBsB,EAAOlE,GAChDnH,KAEFA,KAAKkM,mBAAmB,CAC7BnC,eAAgBf,EAAehC,cAC7BhH,KAAK+J,eACLsB,EACAlE,IAGN,EAQAsH,8BAA+B,SAC7BpD,EACAlE,GAEA,IAAKnH,KAAKuN,mBAAmBlC,GAC3B,MAAM,IAAI1J,MACR0J,EACE,kFAIN,OACErC,EAAe5B,UAAUpH,KAAKgK,6BAA8BqB,EAAOlE,GAE5DnH,KAEFA,KAAKkM,mBAAmB,CAC7BlC,6BAA8BhB,EAAehC,cAC3ChH,KAAKgK,6BACLqB,EACAlE,IAGN,EAMAuH,iBAAkB,SAA0BC,GAC1C,GAAI3O,KAAK4O,aAAaD,GAAM,OAAO3O,KAEnC,IAAI6O,EAAe,CACjB3E,eAAgBlK,KAAKkK,eAAe3C,OAAOoH,IAG7C,OAAO3O,KAAKkM,mBAAmB2C,EACjC,EAQAC,YAAa,SAAqBzD,GAChC,OAAKrL,KAAKqN,mBAAmBhC,GAItBrL,KAAK0L,iBAAiBL,GAAOa,mBAAmB,CACrDvC,OAAQ3J,KAAK2J,OAAOtE,QAAO,SAAUuC,GACnC,OAAOA,IAAMyD,CACf,MANOrL,IAQX,EAQA+O,uBAAwB,SAAgC1D,GACtD,OAAKrL,KAAKuN,mBAAmBlC,GAItBrL,KAAK0L,iBAAiBL,GAAOa,mBAAmB,CACrDtC,kBAAmB5J,KAAK4J,kBAAkBvE,QAAO,SAAUuC,GACzD,OAAOA,IAAMyD,CACf,MANOrL,IAQX,EAQAgP,wBAAyB,SAAiC3D,GACxD,OAAKrL,KAAKsO,oBAAoBjD,GAIvBrL,KAAK0L,iBAAiBL,GAAOa,mBAAmB,CACrDrC,mBAAoB7J,KAAK6J,mBAAmBxE,QAAO,SAAUuC,GAC3D,OAAOA,EAAE6D,OAASJ,CACpB,MANOrL,IAQX,EAUAiP,sBAAuB,SAA+B5D,EAAOlE,GAC3D,IAAKnH,KAAKqN,mBAAmBhC,GAC3B,MAAM,IAAI1J,MACR0J,EACE,uEAGN,OAAKrC,EAAe5B,UAAUpH,KAAK8J,kBAAmBuB,EAAOlE,GAGtDnH,KAAKkM,mBAAmB,CAC7BpC,kBAAmBd,EAAevB,iBAChCzH,KAAK8J,kBACLuB,EACAlE,KANKnH,IASX,EAQAkP,wBAAyB,SAAiC7D,EAAOlE,GAC/D,IAAKnH,KAAKqN,mBAAmBhC,GAC3B,MAAM,IAAI1J,MACR0J,EACE,uEAGN,OAAKrC,EAAe5B,UAAUpH,KAAK+J,eAAgBsB,EAAOlE,GAGnDnH,KAAKkM,mBAAmB,CAC7BnC,eAAgBf,EAAevB,iBAC7BzH,KAAK+J,eACLsB,EACAlE,KANKnH,IASX,EAQAmP,iCAAkC,SAChC9D,EACAlE,GAEA,IAAKnH,KAAKuN,mBAAmBlC,GAC3B,MAAM,IAAI1J,MACR0J,EACE,kFAGN,OACGrC,EAAe5B,UAAUpH,KAAKgK,6BAA8BqB,EAAOlE,GAI/DnH,KAAKkM,mBAAmB,CAC7BlC,6BAA8BhB,EAAevB,iBAC3CzH,KAAKgK,6BACLqB,EACAlE,KANKnH,IASX,EAOAoP,oBAAqB,SAA6BT,GAChD,IAAK3O,KAAK4O,aAAaD,GAAM,OAAO3O,KAEpC,IAAI6O,EAAe,CACjB3E,eAAgBlK,KAAKkK,eAAe7E,QAAO,SAAUgK,GACnD,OAAOA,IAAMV,CACf,KAGF,OAAO3O,KAAKkM,mBAAmB2C,EACjC,EAUAhH,iBAAkB,SAA0BwD,EAAOlE,GACjD,OAAOnH,KAAKsP,sBAAsBjE,EAAOlE,EAC3C,EASAmI,sBAAuB,SAA+BjE,EAAOlE,GAC3D,GAAInH,KAAKsO,oBAAoBjD,GAC3B,OAAOrL,KAAK2L,kCAAkCN,EAAOlE,GAChD,GAAInH,KAAKqN,mBAAmBhC,GACjC,OAAOrL,KAAKuP,iCAAiClE,EAAOlE,GAC/C,GAAInH,KAAKuN,mBAAmBlC,GACjC,OAAOrL,KAAKwP,iCAAiCnE,EAAOlE,GAGtD,MAAM,IAAIxF,MACR,sCACE0J,EACA,6FAEN,EAQAkE,iCAAkC,SAChClE,EACAlE,GAEA,IAAKnH,KAAKqN,mBAAmBhC,GAC3B,MAAM,IAAI1J,MACR0J,EACE,uEAIN,OAAOrL,KAAKkM,mBAAmB,CAC7BpC,kBAAmBd,EAAenB,iBAChC7H,KAAK8J,kBACLuB,EACAlE,IAGN,EAQAsI,6BAA8B,SAC5BpE,EACAlE,GAEA,IAAKnH,KAAKqN,mBAAmBhC,GAC3B,MAAM,IAAI1J,MACR0J,EACE,uEAIN,OAAOrL,KAAKkM,mBAAmB,CAC7BnC,eAAgBf,EAAenB,iBAC7B7H,KAAK+J,eACLsB,EACAlE,IAGN,EAQAqI,iCAAkC,SAChCnE,EACAlE,GAEA,IAAKnH,KAAKuN,mBAAmBlC,GAC3B,MAAM,IAAI1J,MACR0J,EACE,kFAIN,OAAOrL,KAAKkM,mBAAmB,CAC7BlC,6BAA8BhB,EAAenB,iBAC3C7H,KAAKgK,6BACLqB,EACAlE,IAGN,EAQAwE,kCAAmC,SACjCN,EACAlE,GAEA,IAAKnH,KAAKsO,oBAAoBjD,GAC5B,MAAM,IAAI1J,MACR0J,EACE,mFAIN,IAAIqE,EAAY1P,KAAK2P,+BACnB3P,KAAK4P,2BAA2BvE,IAG9B7D,EAAM,CAAC,EA2BX,YAxBgDrH,IAA9CH,KAAKmK,8BAA8BkB,IACnCrL,KAAKmK,8BAA8BkB,GAAO5J,OAAS,IAGlDzB,KAAKmK,8BAA8BkB,GAAO,KAAOlE,GAO1C,IAFNnH,KAAKmK,8BAA8BkB,GAAO,GAAG3C,QAC3CvB,EAAQuI,KAIsB,IAA9BvI,EAAMuB,QAAQgH,GAEhBlI,EAAI6D,GAAS,GAEb7D,EAAI6D,GAAS,CAAClE,EAAMnF,MAAM,EAAGmF,EAAM0I,YAAYH,KAGjDlI,EAAI6D,GAAS,CAAClE,GAGTnH,KAAKkM,mBAAmB,CAC7B/B,8BAA+BvD,EAC7B,CAAC,EACDY,EACAxH,KAAKmK,gCAGX,EASA2F,+BAAgC,SAAUzE,EAAO0E,GAC/C,GAAI/P,KAAKgQ,2BAA2B3E,GAClC,MAAM,IAAI1J,MAAM0J,EAAQ,wBAE1B,IAAKrL,KAAKsO,oBAAoBjD,GAC5B,MAAM,IAAI1J,MACR0J,EACE,oFAGN,IAAI7D,EAAM,CAAC,EAEX,OADAA,EAAI6D,GAAS,CAAC0E,GACP/P,KAAKkM,mBAAmB,CAC7B/B,8BAA+BvD,EAC7B,CAAC,EACDY,EACAxH,KAAKmK,gCAGX,EAQA8F,kCAAmC,SAAU5E,GAC3C,IAAKrL,KAAKgQ,2BAA2B3E,GACnC,OAAOrL,KAET,IAAIwH,EAAM,CAAC,EAEX,OADAA,EAAI6D,GAAS,GACNrL,KAAKkM,mBAAmB,CAC7B/B,8BAA+BvD,EAC7B,CAAC,EACDY,EACAxH,KAAKmK,gCAGX,EAOA+F,oBAAqB,SAA6BvB,GAChD,OAAI3O,KAAK4O,aAAaD,GACb3O,KAAKoP,oBAAoBT,GAG3B3O,KAAK0O,iBAAiBC,EAC/B,EAOApB,mBAAoB,SAAUlC,GAC5B,OAAOrL,KAAK4J,kBAAkBlB,QAAQ2C,IAAU,CAClD,EAOAiD,oBAAqB,SAAUlB,GAC7B,YAAsDjN,IAA/CH,KAAK4P,2BAA2BxC,EACzC,EAOAC,mBAAoB,SAAUhC,GAC5B,OAAOrL,KAAK2J,OAAOjB,QAAQ2C,IAAU,CACvC,EAUA8E,eAAgB,SAAwB9E,EAAOlE,GAC7C,QAAKnH,KAAKqN,mBAAmBhC,IAGtBrC,EAAe5B,UAAUpH,KAAK8J,kBAAmBuB,EAAOlE,EACjE,EAWAiJ,iBAAkB,SAA0B/E,EAAOlE,GACjD,QAAKnH,KAAKqN,mBAAmBhC,IAGtBrC,EAAe5B,UAAUpH,KAAK+J,eAAgBsB,EAAOlE,EAC9D,EAUAkJ,0BAA2B,SAAmChF,EAAOlE,GACnE,QAAKnH,KAAKuN,mBAAmBlC,IAGtBrC,EAAe5B,UACpBpH,KAAKgK,6BACLqB,EACAlE,EAEJ,EAUA6I,2BAA4B,SAC1B3E,EACAlE,GAEA,IAAKnH,KAAKsO,oBAAoBjD,GAC5B,OAAO,EAGT,IAAIiF,EAActQ,KAAKwL,0BAA0BH,GAEjD,OAAKlE,GAIkC,IAAhCmJ,EAAY5H,QAAQvB,GAHlBmJ,EAAY7O,OAAS,CAIhC,EAWAyL,iBAAkB,SAA0BhG,EAAW8D,EAAU7D,GAC/D,QAAchH,IAAVgH,QAAoChH,IAAb6K,EACzB,OAAOxC,QAAQxI,KAAKiK,mBAAmB/C,IAGzC,IAAIqJ,EACFvQ,KAAKiK,mBAAmB/C,SACyB/G,IAAjDH,KAAKiK,mBAAmB/C,GAAW8D,GAErC,QAAc7K,IAAVgH,IAAwBoJ,EAC1B,OAAOA,EAGT,IAr1CeC,EAAOC,EAq1ClB9F,EAAc7B,EAAY3B,GAC1BuJ,OAEFvQ,KAx1CaqQ,EAu1CHxQ,KAAKiK,mBAAmB/C,GAAW8D,GAv1CzByF,EAu1CoC9F,EAt1CrDhC,EAAK6H,GAAO,SAAUG,GAC3B,OAAO1H,EAAyB0H,EAAcF,EAChD,KAu1CE,OAAOF,GAAqBG,CAC9B,EAOA9B,aAAc,SAAsBD,GAClC,OAA6C,IAAtC3O,KAAKkK,eAAexB,QAAQiG,EACrC,EAQAiC,4BAA6B,WAE3B,IAAIlK,EAAO1G,KAGP6Q,EAAkCjI,EACpCnD,OAAOwC,KAAKjI,KAAKiK,oBAAoB5E,QAAO,SAAUgG,GACpD,OAAO5F,OAAOwC,KAAKvB,EAAKuD,mBAAmBoB,IAAQ5J,OAAS,CAC9D,IACAzB,KAAK4J,mBAGP,OAAOnE,OAAOwC,KAAKjI,KAAKgK,8BACrB3E,QAAO,SAAUgG,GAChB,OAAO3E,EAAKsD,6BAA6BqB,GAAO5J,OAAS,CAC3D,IACC8F,OAAOsJ,GACPtJ,OAAOvH,KAAK8Q,gCACZC,MACL,EAQAD,6BAA8B,WAE5B,IAAIpK,EAAO1G,KACX,OAAO4I,EAGL5I,KAAK6J,mBAAmB1D,KAAI,SAAUkF,GACpC,OAAOA,EAAMI,IACf,IACAhG,OAAOwC,KAAKjI,KAAKmK,+BAA+B9E,QAAO,SAAUgG,GAC/D,OAAO3E,EAAKyD,8BAA8BkB,GAAO5J,OAAS,CAC5D,KACAsP,MACJ,EAMAC,8BAA+B,WAC7B,IAAIC,EAAgBjR,KAAK4Q,8BAEzB,OAAO5Q,KAAK4J,kBAAkBvE,QAAO,SAAUuC,GAC7C,OAAqC,IAA9BqJ,EAAcvI,QAAQd,EAC/B,GACF,EAEAsJ,kBAAmB,CACjB,QAEA,SACA,oBACA,oBACA,qBACA,iBAEA,+BACA,qBACA,iBACA,iCAGFC,eAAgB,WACd,IAAID,EAAoBlR,KAAKkR,kBAEzBE,EAAc,CAAC,EAGf1K,EAAO1G,KAWX,OAVAyF,OAAOwC,KAAKjI,MAAM2G,SAAQ,SAAUyD,GAClC,IAAIuD,EAAajH,EAAK0D,IAEsB,IAA1C8G,EAAkBxI,QAAQ0B,SACXjK,IAAfwN,IAEAyD,EAAYhH,GAAauD,EAE7B,IAEOyD,CACT,EAWAC,kBAAmB,SAAsBC,EAAWnK,GAClD,GAAInH,KAAKsR,KAAenK,EAAO,OAAOnH,KAEtC,IAAI6O,EAAe,CAAC,EAIpB,OAFAA,EAAayC,GAAanK,EAEnBnH,KAAKkM,mBAAmB2C,EACjC,EAOA3C,mBAAoB,SAA4BnH,GAC9C,IAAKA,EAAQ,OAAO/E,KAEpB,IAAIwB,EAAQkC,EAAiBkI,SAAS5L,KAAM+E,GAE5C,GAAIvD,EACF,MAAMA,EAIR,IAAIkF,EAAO1G,KACPuR,EAAkB7N,EAAiB8F,cAAczE,GACjDyM,EAAsB/L,OAAOwC,KAAKjI,MAAMkI,QAAO,SAAUuJ,EAAKtO,GAEhE,OADAsO,EAAItO,GAAOuD,EAAKvD,GACTsO,CACT,GAAG,CAAC,GAEAC,EAAkBjM,OAAOwC,KAAKsJ,GAAiBrJ,QAAO,SACxDyJ,EACAxO,GAEA,IAAIyO,OAA2CzR,IAAlBwR,EAASxO,GAClC0O,OAA8C1R,IAAzBoR,EAAgBpO,GAEzC,OAAIyO,IAA2BC,EACtB/K,EAAK6K,EAAU,CAACxO,KAGrB0O,IACFF,EAASxO,GAAOoO,EAAgBpO,IAG3BwO,EACT,GACAH,GAEA,OAAO,IAAIxR,KAAKgF,YAAY0M,EAC9B,EAQAI,UAAW,WACT,YAAkB3R,IAAdH,KAAKyM,KACAzM,KAGFA,KAAKuM,QAAQ,EACtB,EAOAwF,4BAA6B,SAAU1D,GACrC,OAAOA,EAAkB2D,QAAU,CAAC,iBAAkB,WACxD,EAQArC,+BAAgC,SAAUtB,GACxC,OAAOA,EAAkBqB,WAAa,KACxC,EAQAuC,yBAA0B,SAAU5D,GAClC,OAAOA,EAAkB/C,UAAY,IACvC,EAQA4G,gCAAiC,SAAU7D,GACzC,MAAiD,kBAAtCA,EAAkB8D,iBACpB9D,EAAkB8D,eAG7B,EAOAvC,2BAA4B,SAAUwC,GACpC,OAAOzJ,EAAK3I,KAAK6J,oBAAoB,SAAUjC,GAC7C,OAAOA,EAAE6D,OAAS2G,CACpB,GACF,EAOAC,+BAAgC,SAAUjF,GACxC,IAAKpN,KAAKsO,oBAAoBlB,GAC5B,MAAO,GAGT,IAAIkF,EAAatS,KAAKwL,0BAA0B4B,GAAW,GAC3D,IAAKkF,EAAY,MAAO,GAExB,IAAI5C,EAAY1P,KAAK2P,+BACnB3P,KAAK4P,2BAA2BxC,IAGlC,OADWkF,EAAWC,MAAM7C,GAChBvJ,KAAI,SAAUqM,GACxB,OAAOA,EAAKC,MACd,GACF,EAEAC,SAAU,WACR,OAAOC,KAAKC,UAAU5S,KAAM,KAAM,EACpC,GAYFQ,EAAOC,QAAUiD,gCCppDjBlD,EAAOC,QASP,SAAuB6F,GACrB,OAAO,SAAkBuM,EAAyBC,GAChD,IAAIzE,EAAoB/H,EAAMuD,mBAAmBiJ,GAC7CC,EACDzM,EAAM6D,8BAA8BkE,EAAkB5C,OACrDnF,EAAM6D,8BAA8BkE,EAAkB5C,MAAM,IAC9D,GACEuH,EACF1M,EAAMqJ,+BAA+BtB,GACnC4E,EACF3M,EAAM2L,yBAAyB5D,GAC7B6E,EACF5M,EAAM4L,gCAAgC7D,GACpC2D,EAASmB,EACX7M,EAAMyL,4BAA4B1D,IAGhC+E,EAAiBP,EAAwBxJ,OAAM,SAAUgK,GAC3D,OAAOA,EAAYC,UACrB,IAEIC,EA4BR,SACEvB,EACAgB,EACAC,EACAC,EACA3H,GAEA,OAAO,SACLiI,EACAX,EACAY,GAEA,IAAIC,EAASF,EAEb,GAAIC,EAA2B,EAAG,CAChC,IAAIE,EAAQ,EAIZ,IAFAD,EAASF,EAEFG,EAAQF,GAA0B,CAIvC,IAAIG,EAAOF,GAAU3R,MAAMqH,QAAQsK,EAAOE,MAAQF,EAAOE,KAAO,GAChEF,EAAS/K,EAAKiL,GAAM,SAAUC,GAC5B,OAAOA,EAAQzM,SACjB,IACAuM,GACF,CACF,CAGA,GAAID,EAAQ,CAYV,IAAII,EAASrO,OAAOwC,KAAK4K,EAAwBe,MAC9CzN,KAAI,SAAU4N,GACb,MAAO,CAACA,EAAYlB,EAAwBe,KAAKG,GACnD,IACC1O,QAAO,SAAU2O,GAEhB,OAiCV,SACED,EACAE,EACA1I,EACAyH,EACAC,EACAC,GAGA,QACED,GAC8C,IAA7Cc,EAAWrL,QAAQuK,IAClBA,IAAyBc,MAOzBd,IAC+C,IAA/Cc,EAAWrL,QAAQsK,IAEpBC,GACCc,EAAWxB,MAAMS,GAAuBvR,OACtCwR,EAAqBV,MAAMS,GAAuBvR,QAClD,IAG4C,IAA/CsS,EAAWrL,QAAQsK,KACoC,IAAtDzH,EAAkB7C,QAAQsK,IAEc,IAA1CzH,EAAkB7C,QAAQqL,IAEkC,IAA3DA,EAAWrL,QAAQuL,EAAajB,KAC9BE,GAC2C,IAA1Ca,EAAWrL,QAAQ6C,IAE3B,CAtEiB2I,CADUF,EAAM,GAGrBN,EAAO3D,MAAQkD,EACf1H,EACAyH,EACAC,EACAC,EAEJ,IAEFQ,EAAOE,KAAOO,EACZL,EAAO3N,KAAI,SAAU6N,GACnB,IAAID,EAAaC,EAAM,GAGvB,OAyDV,SACEI,EACAL,EACAf,EACAzH,EACA+H,GAEA,IAAIe,EAAQN,EAAWxB,MAAMS,GAC7B,MAAO,CACLvH,KAAM4I,EAAMA,EAAM5S,OAAS,GAAGgR,OAC9B1C,KAAMgE,EACNO,aAAcC,EAAiBR,GAC/BS,MAAOJ,EACPhN,UACEmE,IAAsBwI,GAC4C,IAAlExI,EAAkB7C,QAAQqL,EAAaf,GACzCM,WAAYA,EACZM,KAAM,KAEV,CA5EiBa,CAFUT,EAAM,GAIrBD,EACAf,EACA0B,EAAmBnJ,GACnBsH,EAAwBS,WAE5B,IACAtB,EAAO,GACPA,EAAO,GAEX,CAEA,OAAOwB,CACT,CACF,CA5GyBmB,CACnB3C,EACAgB,EACAC,EACAC,EACAH,GAGExM,EAAUsM,EAQd,OANII,IACF1M,EAAUsM,EAAwB7Q,MAChCiR,EAAqBV,MAAMS,GAAuBvR,SAI/C8E,EAAQ2B,OAAOqL,EAAgB,CACpC9H,KAAMnF,EAAMuD,mBAAmBiJ,GAAwBrH,KACvD+I,MAAO,KACPpN,WAAW,EACX2I,KAAM,KACNuE,aAAc,KACdhB,WAAYF,EACZQ,KAAM,MAEV,CACF,EAtDA,IAAIgB,EAAK,EAAQ,OACbjM,EAAO,EAAQ,MACfwK,EAAiC,EAAQ,OACzCgB,EAAU,EAAQ,OAClBI,EAAmBK,EAAGL,iBACtBG,EAAqBE,EAAGF,iDCP5B,IAAIG,EAAU,EAAQ,OAClBjO,EAAe,EAAQ,OACvBgO,EAAK,EAAQ,OACbjM,EAAO,EAAQ,MACfmM,EAAY,EAAQ,OACpBC,EAAa,EAAQ,OACrBlM,EAAQ,EAAQ,OAChBsL,EAAU,EAAQ,OAClBI,EAAmBK,EAAGL,iBACtBG,EAAqBE,EAAGF,mBAExBC,EAA2B,EAAQ,OAgDvC,SAASK,EAAWC,GAClB,IAAIC,EAAU,CAAC,EAMf,OAJAD,EAAWtO,SAAQ,SAAUsG,EAAKkI,GAChCD,EAAQjI,GAAOkI,CACjB,IAEOD,CACT,CAEA,SAASE,EAAiBC,EAAMC,EAAYnS,GACtCmS,GAAcA,EAAWnS,KAC3BkS,EAAKE,MAAQD,EAAWnS,GAE5B,CA6JA,SAASQ,EAAc2C,EAAOC,EAASiP,GACrC,IAAIC,EAAkBlP,EAAQ,IAAM,CAAC,EAErCvG,KAAKyG,YAAcF,EAGnB,IAAIG,EAAO1G,KAGXyF,OAAOwC,KAAKwN,GAAiB9O,SAAQ,SAAUxD,GAC7CuD,EAAKvD,GAAOsS,EAAgBtS,EAC9B,IAGA,IAAIY,EAAO8E,EACT,CACE6M,8BAA8B,GAEhCF,GAEF/P,OAAOwC,KAAKlE,GAAM4C,SAAQ,SAAUxD,GAClCuD,EAAKvD,GAAOY,EAAKZ,EACnB,IA8IAnD,KAAK2V,iBAAmBpP,EAAQ2B,QAAO,SAAU0N,EAAKC,GACpD,YAAmC1V,IAA5B0V,EAAOF,iBACVC,EACAA,EAAMC,EAAOF,gBACnB,GAAG,GAMH3V,KAAK4J,kBAAoB,GAKzB5J,KAAK6J,mBAAqBvD,EAAMuD,mBAAmB1D,KACjD,WACE,MAAO,EACT,IAMFnG,KAAK2J,OAAS,GAEd,IAAIC,EAAoBtD,EAAMsK,8BAE1BkF,EAAgBd,EAAW1O,EAAMqD,QACjCoM,EAA2Bf,EAAW1O,EAAMsD,mBAC5CoM,EAAwB,EAKxBC,EAAaR,EAAgB9L,QAAU,CAAC,EAE5ClE,OAAOwC,KAAKgO,GAAYtP,SAAQ,SAAUuP,GACxC,IAzVFrM,EACAsM,EAwVMC,EAAmBH,EAAWC,GAE9B7H,GA3VNxE,EA4VIvD,EAAMuD,mBA3VVsM,EA4VID,EA1VGvN,EACLkB,GACA,SAAkCwE,GAEhC,OADiBA,EAAkB4G,YAAc,IAC/BvM,QAAQyN,IAA8B,CAC1D,KAwVA,GAAI9H,EAAmB,CAGrB,IAAIgI,EAAahI,EAAkB4G,WAAWvM,QAAQwN,GAClDI,EAAmBxB,EAAUxO,EAAMuD,oBAAoB,SAAUjC,GACnE,OAAOA,EAAE6D,OAAS4C,EAAkB5C,IACtC,IACA/E,EAAKmD,mBAAmByM,GAAkBD,GAAc,CACtDnP,UAAWgP,EACXtC,KAAMwC,EACN9C,WAAYmC,EAAgBc,sBAEhC,KAAO,CACL,IAEIvT,EAFAwT,GAAoE,IAA/ClQ,EAAMsD,kBAAkBlB,QAAQwN,GACrDO,GAAyD,IAApCnQ,EAAMqD,OAAOjB,QAAQwN,GAG1CM,IACFxT,EAAW+S,EAAyBG,GACpCxP,EAAKkD,kBAAkB5G,GAAY,CACjCyI,KAAMyK,EACNtC,KAAMwC,EACN9C,WAAYmC,EAAgBc,uBAE9BnB,EACE1O,EAAKkD,kBAAkB5G,GACvByS,EAAgBiB,aAChBR,IAGAO,IACFzT,EAAW8S,EAAcI,GACzBxP,EAAKiD,OAAO3G,GAAY,CACtByI,KAAMyK,EACNtC,KAAMwC,EACN9C,WAAYmC,EAAgBc,uBAE9BnB,EACE1O,EAAKiD,OAAO3G,GACZyS,EAAgBiB,aAChBR,GAGN,CACF,IAGAlW,KAAK6J,mBAAqBgL,EAAQ7U,KAAK6J,oBAGvCD,EAAkBjD,SAAQ,SAAUgQ,GAClC,IAAId,EAAStP,EAAQyP,GACjBrM,EAASkM,GAAUA,EAAOlM,OAASkM,EAAOlM,OAAS,CAAC,EACpD0E,EAAoB/H,EAAMsJ,2BAA2B+G,GAGzDlR,OAAOwC,KAAK0B,GAAQhD,SAAQ,SAAUiQ,GACpC,IAEI5T,EAFA6T,EAAelN,EAAOiN,GAI1B,GAAIvI,EAAmB,CACrBrL,EAAW8R,EAAUxO,EAAMuD,oBAAoB,SAAUjC,GACvD,OAAOA,EAAE6D,OAAS4C,EAAkB5C,IACtC,IACA,IAAIqL,EAAiBhC,EACnBpO,EAAKmD,mBAAmB7G,IACxB,SAAU4E,GACR,OAAOA,EAAEV,YAAc0P,CACzB,IAIF,IAAwB,IAApBE,EACF,OAGFpQ,EAAKmD,mBAAmB7G,GAAU8T,GAAgBlD,KAAO/K,EACvD,CAAC,EACDnC,EAAKmD,mBAAmB7G,GAAU8T,GAAgBlD,KAClDiD,EAEJ,KAAO,CACL7T,EAAW+S,EAAyBa,GAEpC,IAAIG,EACDtB,EAAgB9L,QAAU8L,EAAgB9L,OAAOiN,IAAY,CAAC,EAEjElQ,EAAKkD,kBAAkB5G,GAAY,CACjCyI,KAAMmL,EACNhD,KAAMhN,EAAa,CAAC,EAAGiQ,EAAcE,GACrCzD,WAAYuC,EAAOU,uBAErBnB,EACE1O,EAAKkD,kBAAkB5G,GACvB6S,EAAOa,aACPE,GAGEtQ,EAAM0D,6BAA6B4M,IACrCtQ,EAAM0D,6BAA6B4M,GAAQjQ,SAAQ,SACjD2B,IAIG5B,EAAKkD,kBAAkB5G,GAAU4Q,KAAKtL,IACvChC,EAAM0D,6BAA6B4M,GAAQlO,QACzCgM,EAAmBpM,KAChB,IAEL5B,EAAKkD,kBAAkB5G,GAAU4Q,KAAKtL,GAAmB,EAE7D,GAEJ,CACF,IACA0N,GACF,IAGA1P,EAAMwK,+BAA+BnK,SAAQ,SAAUqQ,GACrD,IAAI3I,EAAoB/H,EAAMsJ,2BAA2BoH,GACrDtH,EAAYpJ,EAAMqJ,+BAA+BtB,GAEjD9C,EAAoBjF,EAAMkF,0BAA0BwL,GAIzB,IAA7BzL,EAAkB9J,QAClB8J,EAAkB,GAAGgH,MAAM7C,GAAWjO,OAAS,GAKjD8E,EAAQvE,MAAMgU,GAAuBrP,SAAQ,SAAUkP,GACrD,IAAIlM,EAASkM,GAAUA,EAAOlM,OAASkM,EAAOlM,OAAS,CAAC,EAExDlE,OAAOwC,KAAK0B,GAAQhD,SAAQ,SAAUiQ,GACpC,IAAIC,EAAelN,EAAOiN,GACtB5T,EAAW8R,EAAUxO,EAAMuD,oBAAoB,SAAUjC,GAC3D,OAAOA,EAAE6D,OAAS4C,EAAkB5C,IACtC,IACIqL,EAAiBhC,EACnBpO,EAAKmD,mBAAmB7G,IACxB,SAAU4E,GACR,OAAOA,EAAEV,YAAc0P,CACzB,IAIF,IAAwB,IAApBE,EAAJ,CAaA,IAAIG,EAAc,CAAC,EAEnB,GACE1L,EAAkB9J,OAAS,IAC1BiF,EAAKgP,6BACN,CACA,IAAIwB,EAAO3L,EAAkB,GAAGgH,MAAM7C,GAAW,GACjDuH,EAAYC,GACVxQ,EAAKmD,mBAAmB7G,GAAU8T,GAAgBlD,KAAKsD,EAC3D,CAEAxQ,EAAKmD,mBAAmB7G,GAAU8T,GAAgBlD,KAAOhN,EACvDqQ,EACAJ,EACAnQ,EAAKmD,mBAAmB7G,GAAU8T,GAAgBlD,KAzBpD,CA2BF,IAEAoC,GACF,GACF,IAGAvQ,OAAOwC,KAAK3B,EAAMyD,gBAAgBpD,SAAQ,SAAUyG,GAClD,IAAI+J,EAAW7Q,EAAMyD,eAAeqD,GAChCpK,EAAW8S,EAAc1I,GAE7B1G,EAAKiD,OAAO3G,GAAY,CACtByI,KAAM2B,EACNwG,KAAMqC,EAAW7I,GACjBkG,WAAYmC,EAAgBc,uBAE9BY,EAASxQ,SAAQ,SAAUoN,GACzBrN,EAAKiD,OAAO3G,GAAY0D,EAAKiD,OAAO3G,IAAa,CAAEyI,KAAM2B,GACzD1G,EAAKiD,OAAO3G,GAAU4Q,KAAOlN,EAAKiD,OAAO3G,GAAU4Q,MAAQ,CAAC,EAC5DlN,EAAKiD,OAAO3G,GAAU4Q,KAAKG,GAAc,CAC3C,GACF,IAKA/T,KAAK6J,mBAAqB7J,KAAK6J,mBAAmB1D,IAChDwO,EAAyBrO,IAM3BtG,KAAK2J,OAASkL,EAAQ7U,KAAK2J,QAI3B3J,KAAK4J,kBAAoBiL,EAAQ7U,KAAK4J,mBAEtC5J,KAAKwG,OAASF,CAChB,CA2BA,SAAS8Q,EAA6B7Q,EAASW,GAC7C,SAASmQ,EAAUhM,GACjB,OAAOA,EAAMI,OAASvE,CACxB,CAEA,GAAIX,EAAQC,OAAO6G,mBAAmBnG,GAAY,CAChD,IAAImE,EAAQ1C,EAAKpC,EAAQoD,OAAQ0N,GACjC,OAAKhM,EAEE5F,OAAOwC,KAAKoD,EAAMuI,MAAMzN,KAAI,SAAUsF,GAC3C,IAAItE,EAAQoN,EAAiB9I,GAC7B,MAAO,CACLA,KAAMA,EACN6I,aAAcnN,EACdqN,MAAOnJ,EAAMuI,KAAKnI,GAClBrE,UAAWb,EAAQC,OAAO2J,eAAejJ,EAAWC,GACpDmQ,WAAY/Q,EAAQC,OAAO4J,iBAAiBlJ,EAAWuE,GAE3D,IAXmB,EAYrB,CAAO,GAAIlF,EAAQC,OAAO+G,mBAAmBrG,GAAY,CACvD,IAAIyP,EAAmBhO,EAAKpC,EAAQqD,kBAAmByN,GACvD,OAAKV,EAEElR,OAAOwC,KAAK0O,EAAiB/C,MAAMzN,KAAI,SAAUsF,GACtD,IAAItE,EAAQoN,EAAiB9I,GAC7B,MAAO,CACLA,KAAMA,EACN6I,aAAcnN,EACdqN,MAAOmC,EAAiB/C,KAAKnI,GAC7BrE,UAAWb,EAAQC,OAAO6J,0BAA0BnJ,EAAWC,GAEnE,IAV8B,EAWhC,CAAO,GAAIZ,EAAQC,OAAO8H,oBAAoBpH,GAAY,CACxD,IAAIqQ,EAA0B5O,EAAKpC,EAAQsD,mBAAoBwN,GAC/D,IAAKE,EAAyB,OAAOA,EAErC,IAAIlJ,EACF9H,EAAQC,OAAOoJ,2BAA2B1I,GACxCwI,EACFnJ,EAAQC,OAAOmJ,+BAA+BtB,GAC5C9C,EAAoBmJ,EACtBnO,EAAQC,OAAOgF,0BAA0BtE,GAAW,IAAM,IAGE,IAA1DqE,EAAkB7C,QAAQ2F,EAAkB/C,YAC9CC,EAAoBA,EAAkBiM,QACpCnJ,EAAkB/C,SAAWoE,EAC7B,KAIJ,IAAI+H,EAAyBlM,EAAkBgH,MAAM7C,GAKrD,OAJA+H,EAAuBC,QAAQxQ,GAE/ByQ,EAAaJ,EAAyBE,EAAwB,GAEvDF,CACT,CAGF,CASA,SAASI,EAAaC,EAAMrM,EAAmBsM,GAC7CD,EAAKxQ,UACHwQ,EAAKnM,QAAUF,EAAkBsM,IAAUtM,EAAkBsM,GAAOpF,QAClEmF,EAAKhE,MACPgE,EAAKhE,KAAKjN,SAAQ,SAAUmR,GAC1BH,EAAaG,EAAOvM,EAAmBsM,EAAQ,EACjD,GAEJ,CAWA,SAASE,EAAQC,EAAQC,EAAMC,EAAOvE,GAGpC,GAFAA,EAAQA,GAAS,EAEb5R,MAAMqH,QAAQ6O,GAChB,OAAOD,EAAOC,EAAMC,EAAMvE,IAG5B,IAAKsE,EAAKrE,MAA6B,IAArBqE,EAAKrE,KAAKnS,OAC1B,OAAOwW,EAGT,IAAIE,EAAWF,EAAKrE,KAAKzN,KAAI,SAAUiS,GACrC,OAAOL,EAAQC,EAAQI,EAAWF,EAAOvE,EAAQ,EACnD,IACI0E,EAAiBL,EAAOG,EAAUD,EAAMvE,IAE5C,OADc/M,EAAa,CAAEgN,KAAMyE,GAAkBJ,EAEvD,CA6MA,SAASK,EAAyBjQ,EAAW+E,GAC3C,IAAIwG,EAAOjL,EAAKN,GAAW,SAAUgD,GACnC,OAAOA,EAAMI,OAAS2B,CACxB,IACA,OAAOwG,GAAQA,EAAK2B,KACtB,CAwGA,SAASgD,EAAcjS,EAAOrF,EAAMuX,EAAe/M,EAAMgN,GACvD,IAAIpN,EAAQ1C,EAAK8P,GAAe,SAAU7Q,GACxC,OAAOA,EAAE6D,OAAS+M,CACpB,IACIhE,EAAQnJ,GAASA,EAAMuI,MAAQvI,EAAMuI,KAAKnI,GAAQJ,EAAMuI,KAAKnI,GAAQ,EACrE6H,EAAcjI,GAASA,EAAMiI,aAAe,EAEhD,MAAO,CACLrS,KAAMA,EACNuX,cAAeA,EACf/M,KAAMA,EACN+I,MAAOA,EACPlB,WAAYA,EAEhB,CApcA3P,EAAcjD,UAAUgY,eAAiB,SAAUjN,GACjD,SAAS4L,EAAUhM,GACjB,OAAOA,EAAMI,OAASA,CACxB,CAEA,OACE9C,EAAK3I,KAAK2J,OAAQ0N,IAClB1O,EAAK3I,KAAK4J,kBAAmByN,IAC7B1O,EAAK3I,KAAK6J,mBAAoBwN,EAElC,EAoHA1T,EAAcgV,aAAe,CAAC,iBAAkB,aAAc,YAiI9DhV,EAAcjD,UAAUkY,eAAiB,SAAU1R,EAAWnD,GAC5D,IAAI8U,EAAczB,EAA6BpX,KAAMkH,GACrD,GAAK2R,EAAL,CAIA,IAAIrD,EAAU5O,EAAa,CAAC,EAAG7C,EAAM,CACnCiO,OAAQrO,EAAcgV,aAGtBG,gBAAiB/U,GAAQA,EAAKiO,UAI5BzL,EAAUvG,KASd,OAAO+X,GACL,SAAUnE,EAAMxG,GACd,GAAIoI,EAAQsD,cAAe,CACzB,IAAIA,EAnFZ,SAA0BvS,EAASW,GACjC,OACEX,EAAQwS,kBACRxS,EAAQwS,iBAAiBD,eACzBvS,EAAQwS,iBAAiBD,cAAc1Q,QACvC7B,EAAQwS,iBAAiBD,cAAc1Q,OAAOlB,EAElD,CA4E4B8R,CAAiBzS,EAAS6G,GAC9C,GAAI0L,EACF,OA1IV,SAA8BD,EAAaC,GACzC,IAAIG,EAAgB,GAChBC,EAAkB,GAClBC,EAAOL,EAAcK,MAAQ,GAO7BC,GANQN,EAAcO,OAAS,IAMVnR,QAAO,SAAUuJ,EAAKhG,EAAMnK,GAEnD,OADAmQ,EAAIhG,GAAQnK,EACLmQ,CACT,GAAG,CAAC,GAEJoH,EAAYlS,SAAQ,SAAUiR,GAE5B,IAAInM,EAAOmM,EAAK7H,MAAQ6H,EAAKnM,KACzB6N,EAASH,EAAKzQ,QAAQ+C,IAAS,EAC9B6N,QAAiCnZ,IAAvBiZ,EAAa3N,GAEhB6N,GACVJ,EAAgB5W,KAAKsV,GAFrBqB,EAAcG,EAAa3N,IAASmM,CAIxC,IAEAqB,EAAgBA,EAAc5T,QAAO,SAAUgG,GAC7C,OAAOA,CACT,IAEA,IACIkO,EADAC,EAAkBV,EAAcU,gBAEpC,MAAwB,WAApBA,EACKP,GAEPM,EAD6B,UAApBC,EACE,CACT,CAAC,OAAQ,QACT,CAAC,MAAO,QAGC,CAAC,CAAC,SAAU,CAAC,SAGnBP,EAAc1R,OACnB4M,EAAQ+E,EAAiBK,EAAS,GAAIA,EAAS,KAEnD,CA4FiBE,CAAqB7F,EAAMkF,EAEtC,CAEA,GAAI/W,MAAMqH,QAAQoM,EAAQxD,QAAS,CACjC,IAAIqH,EAAQtE,EAAWS,EAAQxD,OAAQrO,EAAcgV,cACrD,OAAOxE,EAAQP,EAAMyF,EAAM,GAAIA,EAAM,GACvC,CAAO,GAA8B,mBAAnB7D,EAAQxD,OACxB,OAnKR,SAAuBqH,EAAOzF,GAC5B,OAAOA,EAAK7C,KAAKsI,EACnB,CAiKeK,CAAclE,EAAQxD,OAAQ4B,GAEvC,MAAM,IAAIjS,MACR,oHAGJ,GACAkX,EA3BE9W,MAAMqH,QAAQyP,GACH,CAAC3R,GAEDX,EAAQC,OAAOoJ,2BAA2BiJ,EAAYpN,MAC/CwJ,WAhBtB,CA0CF,EAQAtR,EAAcjD,UAAUiZ,cAAgB,SAAUzS,GAChD,OAAIlH,KAAKwG,OAAO6G,mBAAmBnG,GAC1BoR,EAAyBtY,KAAK2J,OAAQzC,GACpClH,KAAKwG,OAAO+G,mBAAmBrG,GACjCoR,EAAyBtY,KAAK4J,kBAAmB1C,QADnD,CAKT,EA+BAvD,EAAcjD,UAAUkZ,eAAiB,WACvC,IAAItT,EAAQtG,KAAKwG,OAEbD,EAAUvG,KACV6Z,EAAM,GAoEV,OAlEApU,OAAOwC,KAAK3B,EAAMwD,mBAAmBnD,SAAQ,SAAU6R,GACrDlS,EAAMwD,kBAAkB0O,GAAe7R,SAAQ,SAAU8E,GACvDoO,EAAIvX,KACFiW,EAAcjS,EAAO,QAASkS,EAAe/M,EAAMlF,EAAQoD,QAE/D,GACF,IAEAlE,OAAOwC,KAAK3B,EAAMyD,gBAAgBpD,SAAQ,SAAU6R,GAClDlS,EAAMyD,eAAeyO,GAAe7R,SAAQ,SAAU8E,GACpDoO,EAAIvX,KACFiW,EAAcjS,EAAO,UAAWkS,EAAe/M,EAAMlF,EAAQoD,QAEjE,GACF,IAEAlE,OAAOwC,KAAK3B,EAAM0D,8BAA8BrD,SAAQ,SACtD6R,GAEAlS,EAAM0D,6BAA6BwO,GAAe7R,SAAQ,SAAU8E,GAClEoO,EAAIvX,KACFiW,EACEjS,EACA,cACAkS,EACA/M,EACAlF,EAAQqD,mBAGd,GACF,IAEAnE,OAAOwC,KAAK3B,EAAM6D,+BAA+BxD,SAAQ,SACvD6R,GAEAlS,EAAM6D,8BAA8BqO,GAAe7R,SAAQ,SAAU8E,GACnEoO,EAAIvX,KAuEV,SAAmCgE,EAAOkS,EAAe/M,EAAMgN,GAC7D,IAAIqB,EAAmBxT,EAAMsJ,2BAA2B4I,GACpD9I,EAAYpJ,EAAMqJ,+BAA+BmK,GACjDvH,EAAQ9G,EAAK8G,MAAM7C,GACnBqK,EAAYpR,EAAK8P,GAAe,SAAUpN,GAC5C,OAAOA,EAAMI,OAAS+M,CACxB,IAEInN,EAAQkH,EAAMrK,QAAO,SAAU8R,EAAmBxH,GACpD,IAAIyH,EACFD,GACArR,EAAKqR,EAAkBpG,MAAM,SAAUhM,GACrC,OAAOA,EAAE6D,OAAS+G,CACpB,IACF,YAAoBrS,IAAb8Z,EAAyBA,EAAWD,CAC7C,GAAGD,GAECvF,EAASnJ,GAASA,EAAMmJ,OAAU,EAClClB,EAAcjI,GAASA,EAAMiI,aAAe,EAC5CvD,EAAQ1E,GAASA,EAAM0E,MAAS,GAEpC,MAAO,CACL9O,KAAM,eACNuX,cAAeA,EACf/M,KAAMsE,EACNyE,MAAOA,EACPlB,WAAYA,EAEhB,CAlGQ9H,CACElF,EACAkS,EACA/M,EACAlF,EAAQsD,oBAGd,GACF,IAEApE,OAAOwC,KAAK3B,EAAM2D,oBAAoBtD,SAAQ,SAAU6R,GACtD,IAAIzN,EAAYzE,EAAM2D,mBAAmBuO,GACzC/S,OAAOwC,KAAK8C,GAAWpE,SAAQ,SAAUqE,GACvCD,EAAUC,GAAUrE,SAAQ,SAAUQ,GACpC0S,EAAIvX,KAAK,CACPrB,KAAM,UACNuX,cAAeA,EACf/M,KAAMtE,EACN+S,aAAc/S,EACd6D,SAAUA,GAEd,GACF,GACF,IAEA1E,EAAM4D,eAAevD,SAAQ,SAAU8E,GACrCoO,EAAIvX,KAAK,CAAErB,KAAM,MAAOuX,cAAe,QAAS/M,KAAMA,GACxD,IAEOoO,CACT,EAsEArZ,EAAOC,QAAUkD,gCCroCjB,IAAI5D,EAAe,EAAQ,OAEvBmE,EAAgB,EAAQ,OACxBqQ,EAAmB,0BACnB9P,EAAW,EAAQ,OACnBoE,EAAQ,EAAQ,OAChBhC,EAAgB,EAAQ,OACxBC,EAAO,EAAQ,OACftD,EAAsB,EAAQ,OAC9BC,EAAmB,EAAQ,OAC3B0W,EAAiB,EAAQ,OACzBzW,EAAmB,EAAQ,OAC3BC,EAAgB,EAAQ,OACxByW,EAA8B,EAAQ,OACtCnW,EAAU,EAAQ,OA0GtB,SAASV,EAAoBM,EAAQC,EAAO0R,EAASxR,GACb,mBAA3BH,EAAOwW,iBAChBxW,EAAOwW,gBAAgB,cAAgBpW,EAAU,KAGnDjE,KAAKsa,UAAUzW,GACf,IAAIE,EAAOyR,GAAW,CAAC,EACvBzR,EAAKD,MAAQA,EACb9D,KAAKsG,MAAQ5C,EAAiByH,KAAKpH,GACnC/D,KAAKua,eAAiB,IAAI/W,EAAoB,CAC5CuB,OAAQhB,EAAKwW,iBAEfva,KAAKuE,YAAc,KACnBvE,KAAKwE,qBAAuB,KAC5BxE,KAAKwa,SAAW,EAChBxa,KAAKya,kBAAoB,EACzBza,KAAK0a,sBAAwB,EAC7B1a,KAAK2a,+BAAiC,EACtC3a,KAAK4a,eAAiB,GACtB5a,KAAK6a,kBAAoB,EACzB7a,KAAK8a,2BAA6B,EAClC9a,KAAK+a,sBAAwB/W,EAC7BhE,KAAKgb,gBAAkB,CAAC,CAC1B,CAq+BA,SAASC,EAAexO,GACtB,GAAIA,EAAO,EAAG,MAAM,IAAI9K,MAAM,2BAO9B,OALA3B,KAAKkb,QAAQ,CACX5U,MAAOtG,KAAKsG,MAAMiG,QAAQE,GAC1B0O,aAAa,IAGRnb,IACT,CA8MA,SAASob,IACP,OAAOpb,KAAKsG,MAAMmG,IACpB,CA5rCAhI,EAASlB,EAAqBxD,GAa9BwD,EAAoB7C,UAAU2a,OAAS,WAErC,OADArb,KAAKsb,QAAQ,CAAEC,wBAAwB,IAChCvb,IACT,EAEAuD,EAAoB7C,UAAU8a,6BAA+B,WAE3D,OADAxb,KAAKsb,QAAQ,CAAEC,wBAAwB,IAChCvb,IACT,EAYAuD,EAAoB7C,UAAU+a,UAAY,WAExC,OADAzb,KAAK0b,aACE1b,IACT,EAOAuD,EAAoB7C,UAAUib,SAAW,WACvC,IAAIrV,EAAQtG,KAAKsG,MACjB,OAAO6T,EAAeyB,qBAAqBtV,EAC7C,EAsCA/C,EAAoB7C,UAAUmb,WAAa,SAAUrG,EAASsG,GAC5D,IAAIC,EAAavG,EAEbxV,KAAKsG,MAAM4F,mBAAmBsJ,GAD9BxV,KAAKsG,MAEL0V,EAAU7B,EAAe8B,YAAYF,EAAUjY,MAAOiY,GAEtDrV,EAAO1G,KAQX,GANAA,KAAK6a,oBAEL7a,KAAKgB,KAAK,aAAc,CACtBsF,MAAOyV,KAGLD,EAuBJ,OAAO9b,KAAK6D,OAAOwX,OAAOW,GAASE,MACjC,SAAUC,GAGR,OAFAzV,EAAKmU,oBAC0B,IAA3BnU,EAAKmU,mBAAyBnU,EAAK1F,KAAK,oBACrC,CACLmb,QAAS,IAAIxY,EAAcoY,EAAWI,EAAQ5V,SAC9CD,MAAOyV,EACPK,kBAAmBD,EAEvB,IACA,SAAUE,GAGR,MAFA3V,EAAKmU,oBAC0B,IAA3BnU,EAAKmU,mBAAyBnU,EAAK1F,KAAK,oBACtCqb,CACR,IApCArc,KAAK6D,OACFwX,OAAOW,GACPE,MAAK,SAAUC,GACdzV,EAAKmU,oBAC0B,IAA3BnU,EAAKmU,mBACPnU,EAAK1F,KAAK,oBAGZ8a,EAAG,KAAM,IAAInY,EAAcoY,EAAWI,EAAQ5V,SAAUwV,EAC1D,IACCO,OAAM,SAAU1a,GACf8E,EAAKmU,oBAC0B,IAA3BnU,EAAKmU,mBACPnU,EAAK1F,KAAK,oBAGZ8a,EAAGla,EAAK,KAAMma,EAChB,GAqBN,EAaAxY,EAAoB7C,UAAU6b,YAAc,SAAU/G,GAEpDhT,QAAQkH,KAAK,yDACb,IAAIpD,EAAQtG,KAAKsG,MACbkW,EAAgBxc,KAAK4a,eAAe,GACxC,IAAK4B,EACH,OAAOC,QAAQC,QAAQ,IAEzB,IAAIC,EAAeH,EAAc5X,iBAAiB0B,GAC9CsN,EAAO/K,EACT,CACE+T,wBAAyBpH,EAAQoH,wBACjCC,OAAQrH,EAAQqH,QAElB,CACE9X,OAAQ+B,EAAKqT,EAAeyB,qBAAqBe,GAAe,CAC9D,sBACA,cACA,+BACA,0BAKFG,EACF,8GACF,GAAqC,mBAA1B9c,KAAK6D,OAAOkZ,UACrB,MAAM,IAAIpb,MAAMmb,GAElB,IAAIhZ,EAAQ9D,KAAK6D,OAAOkZ,UAAUJ,EAAa7Y,OAC/C,GAAiC,mBAAtBA,EAAMyY,YACf,MAAM,IAAI5a,MAAMmb,GAElB,OAAOhZ,EAAMyY,YAAYI,EAAavW,MAAOoP,EAAQwH,eAAgBpJ,EACvE,EAoCArQ,EAAoB7C,UAAUuc,qBAAuB,SACnD5R,EACAjF,EACA8W,EACAC,GAEA,IAAIC,EAA4D,mBAArCpd,KAAK6D,OAAOoZ,qBACnCI,EAAsD,mBAA1Brd,KAAK6D,OAAOkZ,UAC5C,IACGK,IACAC,GAC6B,mBAAvBrd,KAAK6D,OAAOwX,OAEnB,MAAM,IAAI1Z,MACR,yKAIJ,IAAI2E,EAAQtG,KAAKsG,MAAM4F,mBAAmBiR,GAAa,CAAC,GACpDG,EAAgBhX,EAAMiH,mBAAmBlC,GACzCkS,EAAepD,EAAeqD,uBAChCnS,EACAjF,EACA8W,EACA5W,GAGFtG,KAAK6a,oBAEL,IACI4C,EADA/W,EAAO1G,KAoCX,OAjCIod,EACFK,EAA8Bzd,KAAK6D,OAAOoZ,qBAAqB,CAC7D,CAAEhX,UAAWK,EAAMxC,MAAOiB,OAAQwY,KAG3BF,EACTI,EAA8Bzd,KAAK6D,OAChCkZ,UAAUzW,EAAMxC,OAChBmZ,qBAAqBM,WAIjBA,EAAanQ,UACpBqQ,EAA8Bzd,KAAK6D,OAChCwX,OAAO,CACN,CACEpa,KAAM,QACNoK,MAAOA,EACPpF,UAAWK,EAAMxC,MACjBiB,OAAQwY,KAGXrB,MAAK,SAAyBwB,GAC7B,OAAOA,EAASnX,QAAQ,EAC1B,KAGJvG,KAAKgB,KAAK,uBAAwB,CAChCsF,MAAOA,EACP+E,MAAOA,EACPjF,MAAOA,IAGFqX,EAA4BvB,MACjC,SAAsBC,GAapB,OAZAzV,EAAKmU,oBAC0B,IAA3BnU,EAAKmU,mBAAyBnU,EAAK1F,KAAK,qBAE5Cmb,EAAUpa,MAAMqH,QAAQ+S,GAAWA,EAAQ,GAAKA,GAExCwB,UAAUhX,SAAQ,SAAUiB,GAClCA,EAAE0M,aAAeC,EAAiB3M,EAAET,OACpCS,EAAER,UAAYkW,EACVhX,EAAM+J,0BAA0BhF,EAAOzD,EAAE0M,cACzChO,EAAM6J,eAAe9E,EAAOzD,EAAE0M,aACpC,IAEO6H,CACT,IACA,SAAUE,GAGR,MAFA3V,EAAKmU,oBAC0B,IAA3BnU,EAAKmU,mBAAyBnU,EAAK1F,KAAK,oBACtCqb,CACR,GAEJ,EAWA9Y,EAAoB7C,UAAU2L,SAAW,SAAUuR,GAMjD,OALA5d,KAAKkb,QAAQ,CACX5U,MAAOtG,KAAKsG,MAAMwL,YAAYzF,SAASuR,GACvCzC,aAAa,IAGRnb,IACT,EAyBAuD,EAAoB7C,UAAUgL,iBAAmB,SAAUD,GAMzD,OALAzL,KAAKkb,QAAQ,CACX5U,MAAOtG,KAAKsG,MAAMwL,YAAYpG,iBAAiBD,GAC/C0P,aAAa,IAGRnb,IACT,EAUAuD,EAAoB7C,UAAUyL,UAAY,WAMxC,OALAnM,KAAKkb,QAAQ,CACX5U,MAAOtG,KAAKsG,MAAMwL,YAAY3F,YAC9BgP,aAAa,IAGRnb,IACT,EAaAuD,EAAoB7C,UAAU+N,8BAAgC,SAC5DpD,EACAlE,GAOA,OALAnH,KAAKkb,QAAQ,CACX5U,MAAOtG,KAAKsG,MAAMwL,YAAYrD,8BAA8BpD,EAAOlE,GACnEgU,aAAa,IAGRnb,IACT,EAMAuD,EAAoB7C,UAAUmd,qBAAuB,WACnD,OAAO7d,KAAKyO,8BAA8BxM,MAAMjC,KAAM0B,UACxD,EAeA6B,EAAoB7C,UAAUoP,+BAAiC,SAC7DzE,EACA0E,GAOA,OALA/P,KAAKkb,QAAQ,CACX5U,MAAOtG,KAAKsG,MAAMwL,YAAYhC,+BAA+BzE,EAAO0E,GACpEoL,aAAa,IAGRnb,IACT,EAcAuD,EAAoB7C,UAAUsM,qBAAuB,SACnD9F,EACA8D,EACA7D,GASA,OAPAnH,KAAKkb,QAAQ,CACX5U,MAAOtG,KAAKsG,MACTwL,YACA9E,qBAAqB9F,EAAW8D,EAAU7D,GAC7CgU,aAAa,IAGRnb,IACT,EAaAuD,EAAoB7C,UAAU6N,mBAAqB,SAAUlD,EAAOlE,GAMlE,OALAnH,KAAKkb,QAAQ,CACX5U,MAAOtG,KAAKsG,MAAMwL,YAAYvD,mBAAmBlD,EAAOlE,GACxDgU,aAAa,IAGRnb,IACT,EAMAuD,EAAoB7C,UAAUod,UAAY,WACxC,OAAO9d,KAAKuO,mBAAmBtM,MAAMjC,KAAM0B,UAC7C,EAaA6B,EAAoB7C,UAAUqd,kBAAoB,SAAU1S,EAAOlE,GAMjE,OALAnH,KAAKkb,QAAQ,CACX5U,MAAOtG,KAAKsG,MAAMwL,YAAYtD,qBAAqBnD,EAAOlE,GAC1DgU,aAAa,IAGRnb,IACT,EAMAuD,EAAoB7C,UAAUsd,WAAa,WACzC,OAAOhe,KAAK+d,kBAAkB9b,MAAMjC,KAAM0B,UAC5C,EAYA6B,EAAoB7C,UAAUud,OAAS,SAAUtP,GAM/C,OALA3O,KAAKkb,QAAQ,CACX5U,MAAOtG,KAAKsG,MAAMwL,YAAYpD,iBAAiBC,GAC/CwM,aAAa,IAGRnb,IACT,EAUAuD,EAAoB7C,UAAU8E,4BAA8B,SAAUT,GAKpE,OAJA/E,KAAKke,iBAAiB,CACpB5X,MAAOtG,KAAKua,eAAe/U,4BAA4BT,KAGlD/E,IACT,EAUAuD,EAAoB7C,UAAUkF,mBAAqB,SAAUb,GAK3D,OAJA/E,KAAKke,iBAAiB,CACpB5X,MAAOtG,KAAKua,eAAe3U,mBAAmBb,KAGzC/E,IACT,EAUAuD,EAAoB7C,UAAUmF,iBAAmB,SAAUd,GAKzD,OAJA/E,KAAKke,iBAAiB,CACpB5X,MAAOtG,KAAKua,eAAe1U,iBAAiBd,KAGvC/E,IACT,EAUAuD,EAAoB7C,UAAUoF,kBAAoB,SAAUf,GAK1D,OAJA/E,KAAKke,iBAAiB,CACpB5X,MAAOtG,KAAKua,eAAezU,kBAAkBf,KAGxC/E,IACT,EAUAuD,EAAoB7C,UAAUqF,kBAAoB,SAAUhB,GAK1D,OAJA/E,KAAKke,iBAAiB,CACpB5X,MAAOtG,KAAKua,eAAexU,kBAAkBhB,KAGxC/E,IACT,EAoBAuD,EAAoB7C,UAAU+M,wBAA0B,SACtDvG,EACA8D,EACA7D,GASA,OAPAnH,KAAKkb,QAAQ,CACX5U,MAAOtG,KAAKsG,MACTwL,YACArE,wBAAwBvG,EAAW8D,EAAU7D,GAChDgU,aAAa,IAGRnb,IACT,EAgBAuD,EAAoB7C,UAAUyO,iCAAmC,SAC/D9D,EACAlE,GASA,OAPAnH,KAAKkb,QAAQ,CACX5U,MAAOtG,KAAKsG,MACTwL,YACA3C,iCAAiC9D,EAAOlE,GAC3CgU,aAAa,IAGRnb,IACT,EAMAuD,EAAoB7C,UAAUyd,wBAA0B,WACtD,OAAOne,KAAKmP,iCAAiClN,MAAMjC,KAAM0B,UAC3D,EAUA6B,EAAoB7C,UAAUuP,kCAAoC,SAChE5E,GAOA,OALArL,KAAKkb,QAAQ,CACX5U,MAAOtG,KAAKsG,MAAMwL,YAAY7B,kCAAkC5E,GAChE8P,aAAa,IAGRnb,IACT,EAgBAuD,EAAoB7C,UAAUuO,sBAAwB,SAAU5D,EAAOlE,GAMrE,OALAnH,KAAKkb,QAAQ,CACX5U,MAAOtG,KAAKsG,MAAMwL,YAAY7C,sBAAsB5D,EAAOlE,GAC3DgU,aAAa,IAGRnb,IACT,EAMAuD,EAAoB7C,UAAU0d,aAAe,WAC3C,OAAOpe,KAAKiP,sBAAsBhN,MAAMjC,KAAM0B,UAChD,EAgBA6B,EAAoB7C,UAAU2d,qBAAuB,SAAUhT,EAAOlE,GAMpE,OALAnH,KAAKkb,QAAQ,CACX5U,MAAOtG,KAAKsG,MAAMwL,YAAY5C,wBAAwB7D,EAAOlE,GAC7DgU,aAAa,IAGRnb,IACT,EAMAuD,EAAoB7C,UAAU4d,cAAgB,WAC5C,OAAOte,KAAKqe,qBAAqBpc,MAAMjC,KAAM0B,UAC/C,EAYA6B,EAAoB7C,UAAU6d,UAAY,SAAU5P,GAMlD,OALA3O,KAAKkb,QAAQ,CACX5U,MAAOtG,KAAKsG,MAAMwL,YAAY1C,oBAAoBT,GAClDwM,aAAa,IAGRnb,IACT,EAUAuD,EAAoB7C,UAAU8d,+BAAiC,SAAUpZ,GAKvE,OAJApF,KAAKke,iBAAiB,CACpB5X,MAAOtG,KAAKua,eAAepV,aAAaC,KAGnCpF,IACT,EAUAuD,EAAoB7C,UAAU+d,sBAAwB,SAAUrZ,GAK9D,OAJApF,KAAKke,iBAAiB,CACpB5X,MAAOtG,KAAKua,eAAepV,aAAaC,KAGnCpF,IACT,EAUAuD,EAAoB7C,UAAUge,oBAAsB,SAAUtZ,GAK5D,OAJApF,KAAKke,iBAAiB,CACpB5X,MAAOtG,KAAKua,eAAepV,aAAaC,KAGnCpF,IACT,EAUAuD,EAAoB7C,UAAUie,qBAAuB,SAAUvZ,GAK7D,OAJApF,KAAKke,iBAAiB,CACpB5X,MAAOtG,KAAKua,eAAepV,aAAaC,KAGnCpF,IACT,EAUAuD,EAAoB7C,UAAUke,qBAAuB,SAAUxZ,GAK7D,OAJApF,KAAKke,iBAAiB,CACpB5X,MAAOtG,KAAKua,eAAepV,aAAaC,KAGnCpF,IACT,EAaAuD,EAAoB7C,UAAUme,qBAAuB,SAAUxT,EAAOlE,GAMpE,OALAnH,KAAKkb,QAAQ,CACX5U,MAAOtG,KAAKsG,MAAMwL,YAAYrC,6BAA6BpE,EAAOlE,GAClEgU,aAAa,IAGRnb,IACT,EAMAuD,EAAoB7C,UAAUoe,cAAgB,WAC5C,OAAO9e,KAAK6e,qBAAqB5c,MAAMjC,KAAM0B,UAC/C,EAiBA6B,EAAoB7C,UAAUmH,iBAAmB,SAAUwD,EAAOlE,GAChE,OAAOnH,KAAKsP,sBAAsBjE,EAAOlE,EAC3C,EAgBA5D,EAAoB7C,UAAU4O,sBAAwB,SAAUjE,EAAOlE,GAMrE,OALAnH,KAAKkb,QAAQ,CACX5U,MAAOtG,KAAKsG,MAAMwL,YAAYxC,sBAAsBjE,EAAOlE,GAC3DgU,aAAa,IAGRnb,IACT,EAMAuD,EAAoB7C,UAAUqe,aAAe,WAC3C,OAAO/e,KAAKsP,sBAAsBrN,MAAMjC,KAAM0B,UAChD,EAYA6B,EAAoB7C,UAAUse,UAAY,SAAUrQ,GAMlD,OALA3O,KAAKkb,QAAQ,CACX5U,MAAOtG,KAAKsG,MAAMwL,YAAY5B,oBAAoBvB,GAClDwM,aAAa,IAGRnb,IACT,EAWAuD,EAAoB7C,UAAUue,SAAW,WACvC,IAAIxS,EAAOzM,KAAKsG,MAAMmG,MAAQ,EAC9B,OAAOzM,KAAKuM,QAAQE,EAAO,EAC7B,EAWAlJ,EAAoB7C,UAAUwe,aAAe,WAC3C,IAAIzS,EAAOzM,KAAKsG,MAAMmG,MAAQ,EAC9B,OAAOzM,KAAKuM,QAAQE,EAAO,EAC7B,EA4BAlJ,EAAoB7C,UAAUua,eAAiBA,EAU/C1X,EAAoB7C,UAAU6L,QAAU0O,EAWxC1X,EAAoB7C,UAAU0L,SAAW,SAAUX,GAMjD,OALAzL,KAAKkb,QAAQ,CACX5U,MAAOtG,KAAKsG,MAAMwL,YAAY1F,SAASX,GACvC0P,aAAa,IAGRnb,IACT,EAmBAuD,EAAoB7C,UAAU2Q,kBAAoB,SAAUC,EAAWnK,GAMrE,OALAnH,KAAKkb,QAAQ,CACX5U,MAAOtG,KAAKsG,MAAMwL,YAAYT,kBAAkBC,EAAWnK,GAC3DgU,aAAa,IAGRnb,IACT,EASAuD,EAAoB7C,UAAUye,SAAW,SAAUC,GAMjD,OALApf,KAAKkb,QAAQ,CACX5U,MAAO5C,EAAiByH,KAAKiU,GAC7BjE,aAAa,IAGRnb,IACT,EAmBAuD,EAAoB7C,UAAU2e,0CAC5B,SAAUD,GAER,OADApf,KAAKsG,MAAQ,IAAI5C,EAAiB0b,GAC3Bpf,IACT,EAyBFuD,EAAoB7C,UAAU4e,eAAiB,SAAUpY,GACvD,QAAIL,EAAc7G,KAAKsG,MAAMuH,sBAAsB3G,MAExClH,KAAKsG,MAAM+G,mBAAmBnG,GAChClH,KAAKsG,MAAM6J,eAAejJ,GACxBlH,KAAKsG,MAAMiH,mBAAmBrG,GAChClH,KAAKsG,MAAM+J,0BAA0BnJ,KACnClH,KAAKsG,MAAMgI,oBAAoBpH,IACjClH,KAAKsG,MAAM0J,2BAA2B9I,GASjD,EAqBA3D,EAAoB7C,UAAU4W,WAAa,SAAUjM,EAAOlE,GAC1D,OAAOnH,KAAKsG,MAAM8J,iBAAiB/E,EAAOlE,EAC5C,EAMA5D,EAAoB7C,UAAU6e,qBAAuB,SAAUlU,EAAOlE,GACpE,OAAOnH,KAAKsG,MAAM+J,0BAA0BhF,EAAOlE,EACrD,EAOA5D,EAAoB7C,UAAU8e,OAAS,SAAU7Q,GAC/C,OAAO3O,KAAKsG,MAAMsI,aAAaD,EACjC,EAMApL,EAAoB7C,UAAUkO,aAAe,WAC3C,OAAO5O,KAAKyf,kBAAkBxd,MAAMjC,KAAM0B,UAC5C,EASA6B,EAAoB7C,UAAUgf,SAAW,WACvC,OAAO1f,KAAKsG,MAAMxC,KACpB,EAWAP,EAAoB7C,UAAU0a,eAAiBA,EAM/C7X,EAAoB7C,UAAUif,QAAUvE,EAOxC7X,EAAoB7C,UAAUkf,QAAU,WACtC,OAAO5f,KAAKsG,MAAM4D,cACpB,EA8CA3G,EAAoB7C,UAAUkZ,eAAiB,SAAUxM,GACvD,IAAIkD,EAAc,GAEdtQ,KAAKsG,MAAM+G,mBAAmBD,IACVpN,KAAKsG,MAAM6G,0BAA0BC,GAE3CzG,SAAQ,SAAUkZ,GAChCvP,EAAYhO,KAAK,CACf6E,MAAO0Y,EACP5e,KAAM,eAEV,IAEyBjB,KAAKsG,MAAMkH,sBAAsBJ,GAEvCzG,SAAQ,SAAUkZ,GACnCvP,EAAYhO,KAAK,CACf6E,MAAO0Y,EACP5e,KAAM,WAEV,KACSjB,KAAKsG,MAAMiH,mBAAmBH,IAErCpN,KAAKsG,MAAMgH,0BAA0BF,GAEhBzG,SAAQ,SAAUkZ,GACvCvP,EAAYhO,KAAK,CACf6E,MAAO0Y,EACP5e,KAAM,eAEV,IAGF,IAAIgJ,EAAqBjK,KAAKsG,MAAMuH,sBAAsBT,GAY1D,OAVA3H,OAAOwC,KAAKgC,GAAoBtD,SAAQ,SAAUqE,GAChD,IAAI7D,EAAQ8C,EAAmBe,GAE/BsF,EAAYhO,KAAK,CACf6E,MAAOA,EACP6D,SAAUA,EACV/J,KAAM,WAEV,IAEOqP,CACT,EAQA/M,EAAoB7C,UAAUoN,qBAAuB,SACnD5G,EACA8D,GAEA,OAAOhL,KAAKsG,MAAMwH,qBAAqB5G,EAAW8D,EACpD,EAOAzH,EAAoB7C,UAAU2R,+BAAiC,SAC7DjF,GAEA,OAAOpN,KAAKsG,MAAM+L,+BAA+BjF,EACnD,EAcA7J,EAAoB7C,UAAU4a,QAAU,SAAU9F,GAChD,IAAIlP,EAAQtG,KAAKsG,MACbwZ,EAAS,GACTC,EAAc,GAEbvK,EAAQ+F,yBACXwE,EAAc5F,EAAe8B,YAAY3V,EAAMxC,MAAOwC,GAEtDwZ,EAAOxd,KAAK,CACVgE,MAAOA,EACP0Z,aAAcD,EAAYte,OAC1Bwe,OAAQjgB,OAGVA,KAAKgB,KAAK,SAAU,CAClBsF,MAAOA,EACPC,QAASvG,KAAKuE,eAIlB,IAAI2b,EAAiBlgB,KAAK4a,eAAezU,KAAI,SAAUqW,GACrD,IAAIG,EAAeH,EAAc5X,iBAAiB0B,GAC9C6Z,EAAsBxD,EAAa7Y,MACnCqW,EAAe8B,YAAYU,EAAa7Y,MAAO6Y,GAC/C,GAaJ,OAXAmD,EAAOxd,KAAK,CACVgE,MAAOqW,EACPqD,aAAcG,EAAoB1e,OAClCwe,OAAQzD,IAGVA,EAAcxb,KAAK,SAAU,CAC3BsF,MAAOqW,EACPpW,QAASiW,EAAcjY,cAGlB4b,CACT,IAEInE,EAAUja,MAAMrB,UAAU6G,OAAOtF,MAAM8d,EAAaG,GAEpDE,EAAUpgB,KAAKwa,WAGnB,GAFAxa,KAAK6a,qBAEAmB,EAAQva,OACX,OAAOgb,QAAQC,QAAQ,CAAEnW,QAAS,KAAM2V,KACtClc,KAAKqgB,yBAAyBC,KAAKtgB,KAAM8f,EAAQM,IAIrD,IACEpgB,KAAK6D,OACFwX,OAAOW,GACPE,KAAKlc,KAAKqgB,yBAAyBC,KAAKtgB,KAAM8f,EAAQM,IACtD9D,MAAMtc,KAAKugB,sBAAsBD,KAAKtgB,KAAMogB,GACjD,CAAE,MAAO5e,GAEPxB,KAAKgB,KAAK,QAAS,CACjBQ,MAAOA,GAEX,CAGF,EAEA+B,EAAoB7C,UAAUgb,WAAa,WACzC,IAAI8E,EAAcxgB,KAAKsG,MACnBiU,EAAiBva,KAAKua,eACtBzW,EAAQ9D,KAAK0f,WACbI,EAAS,CAAC,CAAExZ,MAAOiU,EAAgBzW,MAAOA,EAAOmc,OAAQjgB,OACzDygB,EAAMlG,EAAexV,OAAOoB,KAAI,SAAUb,GAC5C,OAAOA,EAAMC,IACf,IAEAvF,KAAKgB,KAAK,QAAS,CACjBya,UAAW,CACTnV,MAAOiU,EACPhU,QAASvG,KAAKwE,wBAIlB,IAAI0B,EAAQlG,KAAKgb,gBAEbkF,EAAiBlgB,KAAK4a,eAAezU,KAAI,SAAUqW,GACrD,IAAIkE,EAAelE,EAAc5X,iBAAiB4b,GAAa1c,MAC/D,IAAK4c,EACH,MAAO,GAMT,IAAI/D,EAAeH,EAAc1X,0BAC/B,IAAItB,GAsBN,OApBAsc,EAAOxd,KAAK,CACVgE,MAAOqW,EACP7Y,MAAO4c,EACPT,OAAQzD,IAGViE,EAAM1e,MAAMrB,UAAU6G,OAAOtF,MAC3Bwe,EACA9D,EAAa5X,OAAOoB,KAAI,SAAUb,GAChC,OAAOA,EAAMC,IACf,KAGFiX,EAAcxb,KAAK,QAAS,CAC1Bya,UAAW,CACTnV,MAAOqW,EACPpW,QAASiW,EAAchY,wBAIpBmY,EAAa3W,cAAc0a,EAAcxa,EAClD,IAEI8V,EAAUja,MAAMrB,UAAU6G,OAAOtF,MACnCjC,KAAKua,eAAevU,cAAclC,EAAOoC,GACzCga,GAGF,GAAuB,IAAnBlE,EAAQva,OAIZ,GACEua,EAAQva,OAAS,QACyB,IAAnCzB,KAAK6D,OAAO8c,mBAGnBne,QAAQkH,KACN,iGANJ,CAWA,IAAI0W,EAAUpgB,KAAKya,oBACnBza,KAAK8a,6BAEL,IACE9a,KAAK6D,OACF8c,mBAAmB3E,GACnBE,KAAKlc,KAAK4gB,2BAA2BN,KAAKtgB,KAAMogB,EAASN,EAAQW,IACjEnE,MAAMtc,KAAK6gB,wBAAwBP,KAAKtgB,KAAMogB,GACnD,CAAE,MAAO5e,GAEPxB,KAAKgB,KAAK,QAAS,CACjBQ,MAAOA,GAEX,CAfA,CAkBF,EAYA+B,EAAoB7C,UAAU2f,yBAA2B,SACvDP,EACAM,EACAjE,GAGA,IAAIzV,EAAO1G,KAIX,KAAIogB,EAAUpgB,KAAK0a,sBAAnB,CAKA1a,KAAK6a,mBAAqBuF,EAAUpgB,KAAK0a,qBACzC1a,KAAK0a,qBAAuB0F,EAEG,IAA3BpgB,KAAK6a,mBAAyB7a,KAAKgB,KAAK,oBAE5C,IAAIuF,EAAU4V,EAAQ5V,QAAQvE,QAE9B8d,EAAOnZ,SAAQ,SAAUma,GACvB,IAAIxa,EAAQwa,EAAExa,MACV0Z,EAAec,EAAEd,aACjBC,EAASa,EAAEb,OACXc,EAAkBxa,EAAQtD,OAAO,EAAG+c,GAEnC1Z,EAAMxC,OAQXmc,EAAO1b,YAAc,IAAIZ,EACvB2C,EACAya,EACAra,EAAKqU,uBAGPkF,EAAOjf,KAAK,SAAU,CACpBuF,QAAS0Z,EAAO1b,YAChB+B,MAAOA,KAfP2Z,EAAOjf,KAAK,SAAU,CACpBuF,QAAS,KACTD,MAAOA,GAeb,GAjCA,CAkCF,EAEA/C,EAAoB7C,UAAUkgB,2BAA6B,SACzDR,EACAN,EACAW,EACAtE,GAIA,KAAIiE,EAAUpgB,KAAK2a,+BAAnB,CAKA3a,KAAK8a,4BACHsF,EAAUpgB,KAAK2a,8BACjB3a,KAAK2a,8BAAgCyF,EAEG,IAApCpgB,KAAK8a,4BAAkC9a,KAAKgB,KAAK,uBAErD,IAAIkF,EAAQlG,KAAKgb,gBAEbgG,EAAS,CAAC,EACdP,EACGpb,QAAO,SAAUD,GAChB,YAAqBjF,IAAd+F,EAAMd,EACf,IACCuB,SAAQ,SAAUvB,EAAItB,GAChBkd,EAAO5b,KAAK4b,EAAO5b,GAAM,IAE9B4b,EAAO5b,GAAI9C,KAAKwB,EAClB,IAEF2B,OAAOwC,KAAK+Y,GAAQra,SAAQ,SAAUvB,GACpC,IAAI8P,EAAU8L,EAAO5b,GACjB6b,EAAc9E,EAAQ5V,QAAQ2O,EAAQ,IACnB,IAAnBA,EAAQzT,OAIZyE,EAAMd,GAAMK,OAAOC,OAAO,CAAC,EAAGub,EAAa,CACzCC,KAAM9G,EACJlF,EAAQ/O,KAAI,SAAUgP,GACpB,OAAOgH,EAAQ5V,QAAQ4O,GAAK+L,IAC9B,OAPFhb,EAAMd,GAAM6b,CAUhB,IAEA,IAAI1a,EAAU,CAAC,EACfka,EAAI9Z,SAAQ,SAAUvB,GACpBmB,EAAQnB,GAAMc,EAAMd,EACtB,IAEA0a,EAAOnZ,SAAQ,SAAUma,GACvB,IAAIxa,EAAQwa,EAAExa,MACV2Z,EAASa,EAAEb,OAEVa,EAAEhd,OAUPmc,EAAOzb,qBAAuB,IAAIf,EAAiB6C,EAAOC,GAI1D0Z,EAAOjf,KAAK,mBAAoB,CAC9Bya,UAAW,CACTlV,QAAS0Z,EAAOzb,qBAChB8B,MAAOA,MAdT2Z,EAAOjf,KAAK,mBAAoB,CAC9BuF,QAAS,KACTD,MAAOA,GAeb,GAlEA,CAmEF,EAEA/C,EAAoB7C,UAAU6f,sBAAwB,SACpDH,EACA5e,GAEI4e,EAAUpgB,KAAK0a,uBAKnB1a,KAAK6a,mBAAqBuF,EAAUpgB,KAAK0a,qBACzC1a,KAAK0a,qBAAuB0F,EAE5BpgB,KAAKgB,KAAK,QAAS,CACjBQ,MAAOA,IAGsB,IAA3BxB,KAAK6a,mBAAyB7a,KAAKgB,KAAK,oBAC9C,EAEAuC,EAAoB7C,UAAUmgB,wBAA0B,SACtDT,EACA5e,GAEI4e,EAAUpgB,KAAK2a,gCAKnB3a,KAAK8a,4BACHsF,EAAUpgB,KAAK2a,8BACjB3a,KAAK2a,8BAAgCyF,EAErCpgB,KAAKgB,KAAK,QAAS,CACjBQ,MAAOA,IAG+B,IAApCxB,KAAK8a,4BAAkC9a,KAAKgB,KAAK,uBACvD,EAEAuC,EAAoB7C,UAAUygB,mBAAqB,SACjD/a,EACAgb,EACArV,EACAD,GAEA,OACE1F,GACwB,IAAxBgb,EAAa3f,QACa,IAA1BsK,EAAetK,QACO,IAAtBqK,EAAWrK,MAEf,EAQA8B,EAAoB7C,UAAU2gB,2BAA6B,SAAUhW,GACnE,OACErL,KAAKsG,MAAMgb,uBAAuBjW,IAClCrL,KAAKsG,MAAMgb,uBAAuBjW,GAAO5J,OAAS,CAEtD,EAEA8B,EAAoB7C,UAAUwa,QAAU,SAAUqG,GAChD,IAAIjb,EAAQib,EAAMjb,MACd6U,EAAcoG,EAAMpG,YAEpB7U,IAAUtG,KAAKsG,QACjBtG,KAAKsG,MAAQA,EAEbtG,KAAKgB,KAAK,SAAU,CAClBsF,MAAOtG,KAAKsG,MACZC,QAASvG,KAAKuE,YACd4W,YAAaA,IAGnB,EAEA5X,EAAoB7C,UAAUwd,iBAAmB,SAAUqD,GACzD,IAAIjb,EAAQib,EAAMjb,MAEdA,IAAUtG,KAAKua,iBACjBva,KAAKua,eAAiBjU,EAItBtG,KAAKgB,KAAK,mBAAoB,CAC5Bqa,OAAQ,CACN9U,QAASvG,KAAKuE,YACd+B,MAAOtG,KAAKsG,OAEdmV,UAAW,CACTlV,QAASvG,KAAKwE,qBACd8B,MAAOtG,KAAKua,kBAIpB,EAMAhX,EAAoB7C,UAAU8gB,WAAa,WAEzC,OADIxhB,KAAK6D,OAAO2d,YAAYxhB,KAAK6D,OAAO2d,aACjCxhB,IACT,EAQAuD,EAAoB7C,UAAU4Z,UAAY,SAAUmH,GAClD,OAAIzhB,KAAK6D,SAAW4d,IAEqB,mBAA9BA,EAAUpH,iBACnBoH,EAAUpH,gBAAgB,cAAgBpW,EAAU,KAEtDjE,KAAK6D,OAAS4d,GALwBzhB,IAQxC,EAMAuD,EAAoB7C,UAAUghB,UAAY,WACxC,OAAO1hB,KAAK6D,MACd,EAsBAN,EAAoB7C,UAAUihB,OAAS,SAAUvd,EAAIC,GACnD,IAAImY,EAAgB,IAAItY,EAAclE,KAAMoE,EAAIC,GAEhD,OADArE,KAAK4a,eAAetY,KAAKka,GAClBA,CACT,EAUAjZ,EAAoB7C,UAAUiE,oBAAsB,SAAU6X,GAC5D,IAAIoF,EAAM5hB,KAAK4a,eAAelS,QAAQ8T,GACtC,IAAa,IAAToF,EAAY,MAAM,IAAIjgB,MAAM,mCAChC3B,KAAK4a,eAAe3X,OAAO2e,EAAK,EAClC,EAMAre,EAAoB7C,UAAUmhB,mBAAqB,WACjD,OAAO7hB,KAAK6a,kBAAoB,CAClC,EAkBAra,EAAOC,QAAU8C,0BCr9DjB/C,EAAOC,QAAU,SAAiB+P,GAChC,OAAKzO,MAAMqH,QAAQoH,GAIZA,EAAMnL,OAAOmD,SAHX,EAIX,0BCJAhI,EAAOC,QAAU,WAGf,OAFcsB,MAAMrB,UAAUsB,MAAMF,KAAKJ,WAE1BogB,aAAY,SAAUrQ,EAAKsQ,GAWxC,OAVAtc,OAAOwC,KAAKxC,OAAOsc,IAASpb,SAAQ,SAAUxD,QACxBhD,IAAhB4hB,EAAO5e,UAGMhD,IAAbsR,EAAItO,WAECsO,EAAItO,GAEbsO,EAAItO,GAAO4e,EAAO5e,GACpB,IACOsO,CACT,GAAG,CAAC,EACN,0BCMAjR,EAAOC,QAAU,CACf8T,iBAnBF,SAA0BpN,GACxB,MAAqB,iBAAVA,EAA2BA,EAE/B6a,OAAO7a,GAAOqQ,QAAQ,KAAM,MACrC,EAgBE9C,mBARF,SAA4BvN,GAC1B,MAAqB,iBAAVA,EAA2BA,EAE/BA,EAAMqQ,QAAQ,OAAQ,IAC/B,0BCrBAhX,EAAOC,QAAU,SAAc+P,EAAOyR,GACpC,GAAKlgB,MAAMqH,QAAQoH,GAInB,IAAK,IAAIlP,EAAI,EAAGA,EAAIkP,EAAM/O,OAAQH,IAChC,GAAI2gB,EAAWzR,EAAMlP,IACnB,OAAOkP,EAAMlP,EAKnB,0BCZAd,EAAOC,QAAU,SAAc+P,EAAOyR,GACpC,IAAKlgB,MAAMqH,QAAQoH,GACjB,OAAQ,EAGV,IAAK,IAAIlP,EAAI,EAAGA,EAAIkP,EAAM/O,OAAQH,IAChC,GAAI2gB,EAAWzR,EAAMlP,IACnB,OAAOA,EAGX,OAAQ,CACV,YCbAd,EAAOC,QAAU,SAAcyhB,GAC7B,OAAOA,EAAIha,QAAO,SAAUuJ,EAAKxE,GAC/B,OAAOwE,EAAIlK,OAAO0F,EACpB,GAAG,GACL,gCCHA,IAAItE,EAAO,EAAQ,MAQnBnI,EAAOC,QAAU,SAAoBuR,EAAQmQ,GAC3C,IAAIC,GAAuBD,GAAY,IAAIhc,KAAI,SAAU4K,GACvD,OAAOA,EAAKwB,MAAM,IACpB,IAEA,OAAOP,EAAO9J,QACZ,SAA0Bma,EAAKtR,GAC7B,IAAIuR,EAAkBvR,EAAKwB,MAAM,KAE7BgQ,EAAkB5Z,EACpByZ,GACA,SAAUI,GACR,OAAOA,EAAmB,KAAOF,EAAgB,EACnD,IAGF,OAAIA,EAAgB7gB,OAAS,IAAM8gB,GACjCF,EAAI,GAAG/f,KAAKggB,EAAgB,IAC5BD,EAAI,GAAG/f,KAAKggB,EAAgB,IACrBD,IAGTA,EAAI,GAAG/f,KAAKigB,EAAgB,IAC5BF,EAAI,GAAG/f,KAAKigB,EAAgB,IACrBF,EACT,GACA,CAAC,GAAI,IAET,0BCzBA7hB,EAAOC,QAXP,SAAkBgiB,EAAMC,GACtBD,EAAK/hB,UAAY+E,OAAOkd,OAAOD,EAAUhiB,UAAW,CAClDsE,YAAa,CACXmC,MAAOsb,EACPG,YAAY,EACZC,UAAU,EACVC,cAAc,IAGpB,0BCAAtiB,EAAOC,QATP,SAAsBsiB,EAAMC,GAC1B,OAAOD,EAAK1d,QAAO,SAAU8B,EAAOrD,GAClC,OACEkf,EAAKta,QAAQvB,IAAU,GACvB4b,EAAKra,QAAQvB,KAAWrD,CAE5B,GACF,0BCAA,SAASmf,EAA0B9b,GACjC,MACmB,mBAAVA,GACPpF,MAAMqH,QAAQjC,IAC4B,oBAA1C1B,OAAO/E,UAAUgS,SAAS5Q,KAAKqF,EAEnC,CAEA,SAAS+b,EAAOC,EAAQpB,GACtB,GAAIoB,IAAWpB,EACb,OAAOoB,EAIT,IAAK,IAAIhgB,KAAO4e,EACd,GACGtc,OAAO/E,UAAU0iB,eAAethB,KAAKigB,EAAQ5e,IACtC,cAARA,GACQ,gBAARA,EAHF,CASA,IAAIkgB,EAAYtB,EAAO5e,GACnBmgB,EAAYH,EAAOhgB,QAEE,IAAdmgB,QAAkD,IAAdD,IAM7CJ,EAA0BK,IAC1BL,EAA0BI,GAE1BF,EAAOhgB,GAAO+f,EAAOI,EAAWD,GAEhCF,EAAOhgB,GA5CU,iBADRgE,EA6CWkc,IA5CmB,OAAVlc,EACxB+b,EAAOnhB,MAAMqH,QAAQjC,GAAS,GAAK,CAAC,EAAGA,GAEzCA,EAyBL,CA7BJ,IAAeA,EAgDb,OAAOgc,CACT,CAgCA3iB,EAAOC,QAfP,SAAe0iB,GACRF,EAA0BE,KAC7BA,EAAS,CAAC,GAGZ,IAAK,IAAI7hB,EAAI,EAAGiiB,EAAI7hB,UAAUD,OAAQH,EAAIiiB,EAAGjiB,IAAK,CAChD,IAAIygB,EAASrgB,UAAUJ,GAEnB2hB,EAA0BlB,IAC5BmB,EAAOC,EAAQpB,EAEnB,CACA,OAAOoB,CACT,0BC3EA3iB,EAAOC,QAJP,SAAuB+iB,GACrB,OAAOA,GAAO/d,OAAOwC,KAAKub,GAAK/hB,OAAS,CAC1C,0BCcAjB,EAAOC,QAfP,SAAuCshB,EAAQ0B,GAC7C,GAAe,OAAX1B,EAAiB,MAAO,CAAC,EAC7B,IAEI5e,EACA7B,EAHA6hB,EAAS,CAAC,EACVO,EAAaje,OAAOwC,KAAK8Z,GAG7B,IAAKzgB,EAAI,EAAGA,EAAIoiB,EAAWjiB,OAAQH,IACjC6B,EAAMugB,EAAWpiB,GAEbmiB,EAAS/a,QAAQvF,IAAQ,IAC7BggB,EAAOhgB,GAAO4e,EAAO5e,IAEvB,OAAOggB,CACT,0BCdA,SAASQ,EAAiBxc,EAAOyc,GAC/B,GAAIzc,IAAUyc,EAAO,CACnB,IAAIC,OAAyB1jB,IAAVgH,EACf2c,EAAsB,OAAV3c,EAEZ4c,OAAyB5jB,IAAVyjB,EACfI,EAAsB,OAAVJ,EAEhB,IACII,GAAa7c,EAAQyc,GACtBE,GAAaC,IACbF,EAED,OAAO,EAET,IACIC,GAAa3c,EAAQyc,GACtBI,GAAaH,IACbE,EAED,OAAQ,CAEZ,CACA,OAAO,CACT,CAqDAvjB,EAAOC,QA7CP,SAAiBwjB,EAAYC,EAAWC,GACtC,IAAKpiB,MAAMqH,QAAQ6a,GACjB,MAAO,GAGJliB,MAAMqH,QAAQ+a,KACjBA,EAAS,IAGX,IAAItO,EAASoO,EAAW9d,KAAI,SAAUgB,EAAOrD,GAC3C,MAAO,CACLsgB,SAAUF,EAAU/d,KAAI,SAAUke,GAChC,OAAOld,EAAMkd,EACf,IACAvgB,MAAOA,EACPqD,MAAOA,EAEX,IAuBA,OArBA0O,EAAO9E,MAAK,SAAkBuT,EAAQV,GAGpC,IAFA,IAAI9f,GAAS,IAEJA,EAAQwgB,EAAOF,SAAS3iB,QAAQ,CACvC,IAAIoY,EAAM8J,EAAiBW,EAAOF,SAAStgB,GAAQ8f,EAAMQ,SAAStgB,IAClE,GAAI+V,EACF,OAAI/V,GAASqgB,EAAO1iB,OACXoY,EAEa,SAAlBsK,EAAOrgB,IACD+V,EAEHA,CAEX,CAIA,OAAOyK,EAAOxgB,MAAQ8f,EAAM9f,KAC9B,IAEO+R,EAAO1P,KAAI,SAAU0T,GAC1B,OAAOA,EAAI1S,KACb,GACF,0BC7DA3G,EAAOC,QAdP,SAASqI,EAAYnB,GACnB,GAAiB,iBAANA,EACT,OAAOA,EACF,GAAiB,iBAANA,EAChB,OAAOiD,WAAWjD,GACb,GAAI5F,MAAMqH,QAAQzB,GACvB,OAAOA,EAAExB,IAAI2C,GAGf,MAAM,IAAInH,MACR,wEAEJ,gCCZA,IAAIkH,EAAQ,EAAQ,OAEpB,SAAS0b,EAAWf,GAClB,OAAO/d,OAAOwC,KAAKub,GAChBzS,OACA7I,QAAO,SAAUuJ,EAAK+S,GAErB,OADA/S,EAAI+S,GAAQhB,EAAIgB,GACT/S,CACT,GAAG,CAAC,EACR,CAEA,IAAI0I,EAAiB,CASnB8B,YAAa,SAAoBnY,EAAOwC,GACtC,IAAI0V,EAAU,GAmGd,OAhGAA,EAAQ1Z,KAAK,CACX2D,UAAWnC,EACXiB,OAAQoV,EAAeyB,qBAAqBtV,KAI9CA,EAAMsK,8BAA8BjK,SAAQ,SAAUqQ,GACpDgF,EAAQ1Z,KAAK,CACX2D,UAAWnC,EACXiB,OAAQoV,EAAesK,iCACrBne,EACA0Q,IAGN,IAGA1Q,EAAMwK,+BAA+BnK,SAAQ,SAAUqQ,GACrD,IAAI3I,EAAoB/H,EAAMsJ,2BAA2BoH,GACrDzL,EAAoBjF,EAAMkF,0BAA0BwL,GACpDtH,EAAYpJ,EAAMqJ,+BAA+BtB,GAIrD,GACE9C,EAAkB9J,OAAS,GAC3B8J,EAAkB,GAAGgH,MAAM7C,GAAWjO,OAAS,EAC/C,CAEA,IAAIijB,EAAanZ,EAAkB,GAChCgH,MAAM7C,GACN1N,MAAM,GAAI,GACVkG,QAAO,SAA0B/B,EAAKwe,EAAShR,GAC9C,OAAOxN,EAAIoB,OAAO,CAChBL,UAAWmH,EAAkB4G,WAAWtB,GACxCxM,MACY,IAAVwM,EACIgR,EACA,CAACxe,EAAIA,EAAI1E,OAAS,GAAG0F,MAAOwd,GAASC,KAAKlV,IAEpD,GAAG,IAELgV,EAAW/d,SAAQ,SAAUtB,EAAQsO,GACnC,IAAI5O,EAASoV,EAAesK,iCAC1Bne,EACAjB,EAAO6B,UACG,IAAVyM,GAIF,SAASkR,EAA2B1d,GAClC,OAAOkH,EAAkB4G,WAAW6P,MAAK,SAAU5d,GACjD,OAAOA,IAAcC,EAAMoL,MAAM,KAAK,EACxC,GACF,CAEA,IAAIwS,GAAwBhgB,EAAOqc,cAAgB,IAAIlZ,QACrD,SAAUuJ,EAAKuT,GACb,GAAIjjB,MAAMqH,QAAQ4b,GAAc,CAC9B,IAAIC,EAAWD,EAAY3f,QAAO,SAAU6f,GAC1C,OAAQL,EAA2BK,EACrC,IAEID,EAASxjB,OAAS,GACpBgQ,EAAInP,KAAK2iB,EAEb,CASA,MANyB,iBAAhBD,GACNH,EAA2BG,IAE5BvT,EAAInP,KAAK0iB,GAGJvT,CACT,GACA,IAGEiC,EAASgR,EAAW/Q,EAAQ,GAC5BA,EAAQ,EACV5O,EAAOqc,aAAe2D,EAAqBxd,OACzCmM,EAAOxM,UAAY,IAAMwM,EAAOvM,OAEzB4d,EAAqBtjB,OAAS,EACvCsD,EAAOqc,aAAe2D,SAEfhgB,EAAOqc,aAGhBpF,EAAQ1Z,KAAK,CAAE2D,UAAWnC,EAAOiB,OAAQA,GAC3C,GACF,CACF,IAEOiX,CACT,EAQAJ,qBAAsB,SAAUtV,GAC9B,IAAIqD,EAASrD,EAAMqD,OAChBpC,OAAOjB,EAAMsD,mBACbrC,OAAO4S,EAAegL,qCAAqC7e,IAC3DyK,OAECqQ,EAAejH,EAAeiL,iBAAiB9e,GAC/CyF,EAAiBoO,EAAekL,mBAAmB/e,GACnDwF,EAAaqO,EAAemL,eAAehf,GAC3Cif,EAAmB,CAAC,EAkBxB,OAhBI5b,EAAOlI,OAAS,IAClB8jB,EAAiB5b,OAASA,EAAOjB,QAAQ,MAAQ,EAAI,CAAC,KAAOiB,GAG3DmC,EAAWrK,OAAS,IACtB8jB,EAAiBzZ,WAAaA,GAG5BsV,EAAa3f,OAAS,IACxB8jB,EAAiBnE,aAAeA,GAG9BrV,EAAetK,OAAS,IAC1B8jB,EAAiBxZ,eAAiBA,GAG7BwY,EAAW1b,EAAM,CAAC,EAAGvC,EAAM6K,iBAAkBoU,GACtD,EAUAd,iCAAkC,SAChCne,EACA+E,EACAma,GAEA,IAAIpE,EAAejH,EAAeiL,iBAChC9e,EACA+E,EACAma,GAEEzZ,EAAiBoO,EAAekL,mBAAmB/e,EAAO+E,GAC1DS,EAAaqO,EAAemL,eAAehf,GAC3Cif,EAAmB,CACrB1Y,YAAa,EACbJ,KAAM,EACNgZ,WAAW,EACXC,gBAAgB,GAGd5Z,EAAWrK,OAAS,IACtB8jB,EAAiBzZ,WAAaA,GAGhC,IAAIuC,EAAoB/H,EAAMsJ,2BAA2BvE,GAqBzD,OAlBEka,EAAiB5b,OADf0E,EAEA8L,EAAewL,0CACbrf,EACA+H,EACAmX,GAGsBna,EAGxBU,EAAetK,OAAS,IAC1B8jB,EAAiBxZ,eAAiBA,GAGhCqV,EAAa3f,OAAS,IACxB8jB,EAAiBnE,aAAeA,GAG3BmD,EAAW1b,EAAM,CAAC,EAAGvC,EAAM6K,iBAAkBoU,GACtD,EASAF,mBAAoB,SAAU/e,EAAO8G,GACnC,GAAI9G,EAAMyF,eACR,OAAOzF,EAAMyF,eAGf,IAAIA,EAAiB,GAqBrB,OAnBAtG,OAAOwC,KAAK3B,EAAM2D,oBAAoBtD,SAAQ,SAAUO,GACtD,IAAI6D,EAAYzE,EAAM2D,mBAAmB/C,IAAc,CAAC,EACxDzB,OAAOwC,KAAK8C,GAAWpE,SAAQ,SAAUqE,GACvC,IAAI5C,EAAS2C,EAAUC,IAAa,GAChCoC,IAAclG,GAChBkB,EAAOzB,SAAQ,SAAUQ,GACvB,GAAIpF,MAAMqH,QAAQjC,GAAQ,CACxB,IAAIye,EAAKze,EAAMhB,KAAI,SAAUwB,GAC3B,OAAOT,EAAY8D,EAAWrD,CAChC,IACAoE,EAAezJ,KAAKsjB,EACtB,MACE7Z,EAAezJ,KAAK4E,EAAY8D,EAAW7D,EAE/C,GAEJ,GACF,IAEO4E,CACT,EAQAuZ,eAAgB,SAAUhf,GACxB,OAAIA,EAAMwF,WACDxF,EAAMwF,WAGRxF,EAAM4D,eAAe0a,KAAK,IACnC,EAWAQ,iBAAkB,SAAU9e,EAAO+E,EAAOma,GACxC,IAAIpE,EAAe,GAEftX,EAAoBxD,EAAMwD,mBAAqB,CAAC,EACpDrE,OAAOwC,KAAK6B,GACTiH,OACApK,SAAQ,SAAUyG,IACCtD,EAAkBsD,IAAc,IAE/CpL,QACA+O,OACApK,SAAQ,SAAUoN,GACjBqN,EAAa9e,KAAK8K,EAAY,IAAM2G,EACtC,GACJ,IAEF,IAAIhK,EAAiBzD,EAAMyD,gBAAkB,CAAC,EAC9CtE,OAAOwC,KAAK8B,GACTgH,OACApK,SAAQ,SAAUyG,IACCrD,EAAeqD,IAAc,IACnC2D,OAAOpK,SAAQ,SAAUoN,GACnCqN,EAAa9e,KAAK8K,EAAY,KAAO2G,EACvC,GACF,IAEF,IAAI/J,EAA+B1D,EAAM0D,8BAAgC,CAAC,EAC1EvE,OAAOwC,KAAK+B,GACT+G,OACApK,SAAQ,SAAUyG,GACjB,IAAIyL,EAAc7O,EAA6BoD,IAAc,GAC7D,GAAIA,IAAc/B,GAAUwN,GAAsC,IAAvBA,EAAYpX,OAAvD,CAGA,IAAIokB,EAAY,GAEhBhN,EACG7W,QACA+O,OACApK,SAAQ,SAAUoN,GACjB8R,EAAUvjB,KAAK8K,EAAY,IAAM2G,EACnC,IAEFqN,EAAa9e,KAAKujB,EAVlB,CAWF,IAEF,IAAI1b,EACF7D,EAAM6D,+BAAiC,CAAC,EAmD1C,OAlDA1E,OAAOwC,KAAKkC,GACT4G,OACApK,SAAQ,SAAUyG,GACjB,IACI2G,GADc5J,EAA8BiD,IAAc,IACjC,GAE7B,QAAmBjN,IAAf4T,EAAJ,CAIA,IAGI+R,EACAC,EAJA1X,EAAoB/H,EAAMsJ,2BAA2BxC,GACrDsC,EAAYpJ,EAAMqJ,+BAA+BtB,GACjD/C,EAAWhF,EAAM2L,yBAAyB5D,GAK9C,GAAIhD,IAAU+B,EAAW,CAGvB,IACqC,IAAnC2G,EAAWrL,QAAQgH,KACjBpE,IAAsC,IAA1Bka,GACbla,GACCA,EAASiH,MAAM7C,GAAWjO,SACxBsS,EAAWxB,MAAM7C,GAAWjO,OAEhC,OAGG6J,GAIHya,EAAkBza,EAASiH,MAAM7C,GAAWjO,OAAS,EACrDsS,EAAazI,IAJbya,EAAkBhS,EAAWxB,MAAM7C,GAAWjO,OAAS,EACvDsS,EAAaA,EAAW/R,MAAM,EAAG+R,EAAWlE,YAAYH,KAM1DoW,EAAoBzX,EAAkB4G,WAAW8Q,EACnD,MACEA,EAAkBhS,EAAWxB,MAAM7C,GAAWjO,OAAS,EAEvDqkB,EAAoBzX,EAAkB4G,WAAW8Q,GAG/CD,GACF1E,EAAa9e,KAAK,CAACwjB,EAAoB,IAAM/R,GAtC/C,CAwCF,IAEKqN,CACT,EAEA+D,qCAAsC,SAAU7e,GAG9C,OAAOA,EAAMuD,mBAAmB3B,QAE9B,SACE8d,EACA3X,GAEA,IAAI4X,EAAyB3f,EAAMkF,0BACjC6C,EAAkB5C,MAClB,GAGF,IAAKwa,EAEH,OADAD,EAAc1jB,KAAK+L,EAAkB4G,WAAW,IACzC+Q,EAGT,IAAItW,EAAYpJ,EAAMqJ,+BAA+BtB,GACjDsF,EAAQsS,EAAuB1T,MAAM7C,GAAWjO,OAChDykB,EAAgB7X,EAAkB4G,WAAWjT,MAAM,EAAG2R,EAAQ,GAElE,OAAOqS,EAAcze,OAAO2e,EAC9B,GAvBQ,GA0BZ,EAEAP,0CAA2C,SACzCrf,EACA+H,EACA8X,GAEA,IAAIzW,EAAYpJ,EAAMqJ,+BAA+BtB,GACrD,IAAkB,IAAd8X,EAAoB,CACtB,IAAI7a,EAAWhF,EAAM2L,yBAAyB5D,GAC1CyI,EAAiB,EAKrB,OAHIxL,IACFwL,EAAiBxL,EAASiH,MAAM7C,GAAWjO,QAEtC,CAAC4M,EAAkB4G,WAAW6B,GACvC,CAEA,IAKIsP,GAJF9f,EAAMkF,0BAA0B6C,EAAkB5C,MAAM,IAAM,IAIvB8G,MAAM7C,GAAWjO,OAAS,EACnE,OAAO4M,EAAkB4G,WAAWjT,MAAM,EAAGokB,EAAc,EAC7D,EAEA5I,uBAAwB,SAAUpQ,EAAWhH,EAAO8W,EAAc5W,GAChE,IAAI+f,EAA+B/f,EAAMiH,mBAAmBH,GACxD9G,EAAMoF,iBAAiB0B,GACvB9G,EACAggB,EAAiC,CACnCC,WAAYngB,EACZgH,UAAWA,GAKb,MAH4B,iBAAjB8P,IACToJ,EAA+BpJ,aAAeA,GAEzCqH,EACL1b,EACE,CAAC,EACDsR,EAAeyB,qBAAqByK,GACpCC,GAGN,GAGF9lB,EAAOC,QAAU0Z,0BCjcjB3Z,EAAOC,QAAU,SAA0BgJ,GACzC,OAAkB,OAAdA,GAGG,wBAAwB+c,KAAK/c,EACtC,gCCLA,IAAId,EAAO,EAAQ,MACf8d,EAAO,EAAQ,MAoDnBjmB,EAAOC,QAhCP,SAAqC8F,GACnC,IAAImgB,EAAe,CAAC,EA4BpB,OA1BAngB,EAAQI,SAAQ,SAAUua,GACxBA,EAAKva,SAAQ,SAAUggB,EAAK7iB,GACrB4iB,EAAaC,EAAIC,UAGpBF,EAAaC,EAAIC,UAAY,CAC3BC,SAAUH,EAAaC,EAAIC,UAAUC,SAAW/iB,EAChD0Q,MAAOkS,EAAaC,EAAIC,UAAUpS,MAAQ,GAJ5CkS,EAAaC,EAAIC,UAAY,CAAEC,SAAU/iB,EAAO0Q,MAAO,EAO3D,GACF,IAhCF,SAA2BkS,EAAcI,GACvC,IAAIC,EAAa,GAYjB,OAVAthB,OAAOwC,KAAKye,GAAc/f,SAAQ,SAAUxD,GACtCujB,EAAavjB,GAAKqR,MAAQ,IAC5BkS,EAAavjB,GAAK0jB,UAAY,KAEhCE,EAAWzkB,KAAK,CACdskB,SAAUzjB,EACV6jB,aAAcN,EAAavjB,GAAK0jB,SAAWC,GAE/C,IAEOC,EAAWhW,MAAK,SAAU7H,EAAGC,GAClC,OAAOD,EAAE8d,aAAe7d,EAAE6d,aAAe,GAAK,CAChD,GACF,CAkB6BC,CAAkBP,EAAcngB,EAAQ9E,QAE7ByG,QAAO,SAC3Cgf,EACAC,GAEA,IAAItR,EAASlN,EAAK8d,EAAKlgB,IAAU,SAAUogB,GACzC,OAAOA,EAAIC,WAAaO,EAAYP,QACtC,IACA,OAAO/Q,EAASqR,EAAY3f,OAAOsO,GAAUqR,CAC/C,GACA,GAGF,0BCnDA1mB,EAAOC,QAAU,4BCDmDD,EAAOC,QAAgG,WAAY,aAAa,SAAS4O,EAAEA,EAAEgN,EAAEwD,GAAG,OAAOxD,KAAKhN,EAAE5J,OAAO2hB,eAAe/X,EAAEgN,EAAE,CAAClV,MAAM0Y,EAAE+C,YAAW,EAAGE,cAAa,EAAGD,UAAS,IAAKxT,EAAEgN,GAAGwD,EAAExQ,CAAC,CAAC,SAASgN,EAAEhN,EAAEgN,GAAG,IAAIwD,EAAEpa,OAAOwC,KAAKoH,GAAG,GAAG5J,OAAO4hB,sBAAsB,CAAC,IAAIxmB,EAAE4E,OAAO4hB,sBAAsBhY,GAAGgN,IAAIxb,EAAEA,EAAEwE,QAAO,SAAUgX,GAAG,OAAO5W,OAAO6hB,yBAAyBjY,EAAEgN,GAAGuG,UAAW,KAAI/C,EAAEvd,KAAKL,MAAM4d,EAAEhf,EAAE,CAAC,OAAOgf,CAAC,CAAC,SAASA,EAAEA,GAAG,IAAI,IAAIhf,EAAE,EAAEA,EAAEa,UAAUD,OAAOZ,IAAI,CAAC,IAAIqI,EAAE,MAAMxH,UAAUb,GAAGa,UAAUb,GAAG,CAAC,EAAEA,EAAE,EAAEwb,EAAE5W,OAAOyD,IAAG,GAAIvC,SAAQ,SAAU0V,GAAGhN,EAAEwQ,EAAExD,EAAEnT,EAAEmT,GAAI,IAAG5W,OAAO8hB,0BAA0B9hB,OAAO+hB,iBAAiB3H,EAAEpa,OAAO8hB,0BAA0Bre,IAAImT,EAAE5W,OAAOyD,IAAIvC,SAAQ,SAAU0I,GAAG5J,OAAO2hB,eAAevH,EAAExQ,EAAE5J,OAAO6hB,yBAAyBpe,EAAEmG,GAAI,GAAE,CAAC,OAAOwQ,CAAC,CAAC,SAAShf,EAAEwO,EAAEgN,GAAG,GAAG,MAAMhN,EAAE,MAAM,CAAC,EAAE,IAAIwQ,EAAEhf,EAAEqI,EAAE,SAASmG,EAAEgN,GAAG,GAAG,MAAMhN,EAAE,MAAM,CAAC,EAAE,IAAIwQ,EAAEhf,EAAEqI,EAAE,CAAC,EAAEue,EAAEhiB,OAAOwC,KAAKoH,GAAG,IAAIxO,EAAE,EAAEA,EAAE4mB,EAAEhmB,OAAOZ,IAAIgf,EAAE4H,EAAE5mB,GAAGwb,EAAE3T,QAAQmX,IAAI,IAAI3W,EAAE2W,GAAGxQ,EAAEwQ,IAAI,OAAO3W,CAAC,CAAnI,CAAqImG,EAAEgN,GAAG,GAAG5W,OAAO4hB,sBAAsB,CAAC,IAAII,EAAEhiB,OAAO4hB,sBAAsBhY,GAAG,IAAIxO,EAAE,EAAEA,EAAE4mB,EAAEhmB,OAAOZ,IAAIgf,EAAE4H,EAAE5mB,GAAGwb,EAAE3T,QAAQmX,IAAI,GAAGpa,OAAO/E,UAAUgnB,qBAAqB5lB,KAAKuN,EAAEwQ,KAAK3W,EAAE2W,GAAGxQ,EAAEwQ,GAAG,CAAC,OAAO3W,CAAC,CAAC,SAASA,EAAEmG,EAAEgN,GAAG,OAAO,SAAShN,GAAG,GAAGtN,MAAMqH,QAAQiG,GAAG,OAAOA,CAAC,CAAxC,CAA0CA,IAAI,SAASA,EAAEgN,GAAG,GAAKsL,OAAOC,YAAYniB,OAAO4J,IAAI,uBAAuB5J,OAAO/E,UAAUgS,SAAS5Q,KAAKuN,GAAzF,CAAoG,IAAIwQ,EAAE,GAAGhf,GAAE,EAAGqI,GAAE,EAAGue,OAAE,EAAO,IAAI,IAAI,IAAInmB,EAAEumB,EAAExY,EAAEsY,OAAOC,cAAc/mB,GAAGS,EAAEumB,EAAEC,QAAQC,QAAQlI,EAAEvd,KAAKhB,EAAE6F,QAAQkV,GAAGwD,EAAEpe,SAAS4a,GAAGxb,GAAE,GAAI,CAAC,MAAMwO,GAAGnG,GAAE,EAAGue,EAAEpY,CAAC,CAAC,QAAQ,IAAIxO,GAAG,MAAMgnB,EAAEG,QAAQH,EAAEG,QAAQ,CAAC,QAAQ,GAAG9e,EAAE,MAAMue,CAAC,CAAC,CAAC,OAAO5H,CAA7N,CAA8N,CAA/U,CAAiVxQ,EAAEgN,IAAI,WAAW,MAAM,IAAItb,UAAU,uDAAuD,CAAtF,EAAyF,CAAC,SAAS0mB,EAAEpY,GAAG,OAAO,SAASA,GAAG,GAAGtN,MAAMqH,QAAQiG,GAAG,CAAC,IAAI,IAAIgN,EAAE,EAAEwD,EAAE,IAAI9d,MAAMsN,EAAE5N,QAAQ4a,EAAEhN,EAAE5N,OAAO4a,IAAIwD,EAAExD,GAAGhN,EAAEgN,GAAG,OAAOwD,CAAC,CAAC,CAArG,CAAuGxQ,IAAI,SAASA,GAAG,GAAGsY,OAAOC,YAAYniB,OAAO4J,IAAI,uBAAuB5J,OAAO/E,UAAUgS,SAAS5Q,KAAKuN,GAAG,OAAOtN,MAAMkmB,KAAK5Y,EAAE,CAA1H,CAA4HA,IAAI,WAAW,MAAM,IAAItO,UAAU,kDAAkD,CAAjF,EAAoF,CAAC,SAASO,EAAE+N,GAAG,IAAIgN,EAAEwD,EAAE,2BAA2BtY,OAAO8H,EAAElM,KAAKtC,EAAE,WAAW,YAAO,IAASwb,IAAIA,EAAEhN,EAAE6Y,cAAcC,OAAOD,cAAc7L,CAAC,EAAEoL,EAAE,WAAW,OAAO9U,KAAKyV,MAAMvnB,IAAIwnB,QAAQxI,IAAI,KAAK,EAAEve,EAAE,SAAS+N,GAAGxO,IAAIynB,QAAQzI,EAAElN,KAAKC,UAAUvD,GAAG,EAAEwY,EAAE,WAAW,IAAIxL,EAAEhN,EAAEkZ,WAAW,IAAIlZ,EAAEkZ,WAAW,KAAK1I,EAAE4H,IAAI5mB,EAAE4E,OAAO+iB,YAAY/iB,OAAOgjB,QAAQ5I,GAAGxa,QAAO,SAAUgK,GAAG,YAAO,IAASnG,EAAEmG,EAAE,GAAG,GAAGqZ,SAAU,KAAI,GAAGpnB,EAAET,GAAGwb,EAAE,CAAC,IAAIwL,EAAEpiB,OAAO+iB,YAAY/iB,OAAOgjB,QAAQ5nB,GAAGwE,QAAO,SAAUgK,GAAG,IAAIwQ,EAAE3W,EAAEmG,EAAE,GAAG,GAAGxO,GAAE,IAAK8nB,MAAMC,UAAU,QAAQ/I,EAAE6I,UAAUrM,EAAExb,EAAG,KAAIS,EAAEumB,EAAE,CAAC,EAAE,MAAM,CAACgB,IAAI,SAASxZ,EAAEgN,GAAG,IAAIwD,EAAEne,UAAUD,OAAO,QAAG,IAASC,UAAU,GAAGA,UAAU,GAAG,CAAConB,KAAK,WAAW,OAAOrM,QAAQC,SAAS,GAAG,OAAOD,QAAQC,UAAUR,MAAK,WAAY2L,IAAI,IAAIxL,EAAE1J,KAAKC,UAAUvD,GAAG,OAAOoY,IAAIpL,EAAG,IAAGH,MAAK,SAAU7M,GAAG,OAAOoN,QAAQsM,IAAI,CAAC1Z,EAAEA,EAAElI,MAAMkV,SAAI,IAAShN,GAAI,IAAG6M,MAAK,SAAU7M,GAAG,IAAIgN,EAAEnT,EAAEmG,EAAE,GAAGxO,EAAEwb,EAAE,GAAGoL,EAAEpL,EAAE,GAAG,OAAOI,QAAQsM,IAAI,CAACloB,EAAE4mB,GAAG5H,EAAEiJ,KAAKjoB,IAAK,IAAGqb,MAAK,SAAU7M,GAAG,OAAOnG,EAAEmG,EAAE,GAAG,EAAG,GAAE,EAAE2Z,IAAI,SAAS3Z,EAAEgN,GAAG,OAAOI,QAAQC,UAAUR,MAAK,WAAY,IAAIhT,EAAEue,IAAI,OAAOve,EAAEyJ,KAAKC,UAAUvD,IAAI,CAACqZ,WAAU,IAAKC,MAAMC,UAAUzhB,MAAMkV,GAAGxb,IAAIynB,QAAQzI,EAAElN,KAAKC,UAAU1J,IAAImT,CAAE,GAAE,EAAE4M,OAAO,SAAS5Z,GAAG,OAAOoN,QAAQC,UAAUR,MAAK,WAAY,IAAIG,EAAEoL,WAAWpL,EAAE1J,KAAKC,UAAUvD,IAAIxO,IAAIynB,QAAQzI,EAAElN,KAAKC,UAAUyJ,GAAI,GAAE,EAAE6M,MAAM,WAAW,OAAOzM,QAAQC,UAAUR,MAAK,WAAYrb,IAAIsoB,WAAWtJ,EAAG,GAAE,EAAE,CAAC,SAASgI,EAAExY,GAAG,IAAIgN,EAAEoL,EAAEpY,EAAE+Z,QAAQvJ,EAAExD,EAAEgN,QAAQ,YAAO,IAASxJ,EAAE,CAACgJ,IAAI,SAASxZ,EAAEgN,GAAG,IAAIwD,EAAEne,UAAUD,OAAO,QAAG,IAASC,UAAU,GAAGA,UAAU,GAAG,CAAConB,KAAK,WAAW,OAAOrM,QAAQC,SAAS,GAAS,OAAJL,IAAaH,MAAK,SAAU7M,GAAG,OAAOoN,QAAQsM,IAAI,CAAC1Z,EAAEwQ,EAAEiJ,KAAKzZ,IAAK,IAAG6M,MAAK,SAAU7M,GAAG,OAAOnG,EAAEmG,EAAE,GAAG,EAAG,GAAE,EAAE2Z,IAAI,SAAS3Z,EAAEgN,GAAG,OAAOI,QAAQC,QAAQL,EAAE,EAAE4M,OAAO,SAAS5Z,GAAG,OAAOoN,QAAQC,SAAS,EAAEwM,MAAM,WAAW,OAAOzM,QAAQC,SAAS,GAAG,CAACmM,IAAI,SAASxZ,EAAExO,GAAG,IAAIqI,EAAExH,UAAUD,OAAO,QAAG,IAASC,UAAU,GAAGA,UAAU,GAAG,CAAConB,KAAK,WAAW,OAAOrM,QAAQC,SAAS,GAAG,OAAOmD,EAAEgJ,IAAIxZ,EAAExO,EAAEqI,GAAGoT,OAAM,WAAY,OAAOuL,EAAE,CAACuB,OAAO/M,IAAIwM,IAAIxZ,EAAExO,EAAEqI,EAAG,GAAE,EAAE8f,IAAI,SAAS3Z,EAAExO,GAAG,OAAOgf,EAAEmJ,IAAI3Z,EAAExO,GAAGyb,OAAM,WAAY,OAAOuL,EAAE,CAACuB,OAAO/M,IAAI2M,IAAI3Z,EAAExO,EAAG,GAAE,EAAEooB,OAAO,SAAS5Z,GAAG,OAAOwQ,EAAEoJ,OAAO5Z,GAAGiN,OAAM,WAAY,OAAOuL,EAAE,CAACuB,OAAO/M,IAAI4M,OAAO5Z,EAAG,GAAE,EAAE6Z,MAAM,WAAW,OAAOrJ,EAAEqJ,QAAQ5M,OAAM,WAAY,OAAOuL,EAAE,CAACuB,OAAO/M,IAAI6M,OAAQ,GAAE,EAAE,CAAC,SAASpI,IAAI,IAAIzR,EAAE3N,UAAUD,OAAO,QAAG,IAASC,UAAU,GAAGA,UAAU,GAAG,CAAC4nB,cAAa,GAAIjN,EAAE,CAAC,EAAE,MAAM,CAACwM,IAAI,SAAShJ,EAAEhf,GAAG,IAAIqI,EAAExH,UAAUD,OAAO,QAAG,IAASC,UAAU,GAAGA,UAAU,GAAG,CAAConB,KAAK,WAAW,OAAOrM,QAAQC,SAAS,GAAG+K,EAAE9U,KAAKC,UAAUiN,GAAG,GAAG4H,KAAKpL,EAAE,OAAOI,QAAQC,QAAQrN,EAAEia,aAAa3W,KAAKyV,MAAM/L,EAAEoL,IAAIpL,EAAEoL,IAAI,IAAInmB,EAAET,IAAIgnB,EAAE3e,GAAGA,EAAE4f,MAAM,WAAW,OAAOrM,QAAQC,SAAS,EAAE,OAAOpb,EAAE4a,MAAK,SAAU7M,GAAG,OAAOwY,EAAExY,EAAG,IAAG6M,MAAK,WAAY,OAAO5a,CAAE,GAAE,EAAE0nB,IAAI,SAASnJ,EAAEhf,GAAG,OAAOwb,EAAE1J,KAAKC,UAAUiN,IAAIxQ,EAAEia,aAAa3W,KAAKC,UAAU/R,GAAGA,EAAE4b,QAAQC,QAAQ7b,EAAE,EAAEooB,OAAO,SAAS5Z,GAAG,cAAcgN,EAAE1J,KAAKC,UAAUvD,IAAIoN,QAAQC,SAAS,EAAEwM,MAAM,WAAW,OAAO7M,EAAE,CAAC,EAAEI,QAAQC,SAAS,EAAE,CAAC,SAAS6M,EAAEla,EAAEgN,EAAEwD,GAAG,IAAIhf,EAAE,CAAC,oBAAoBgf,EAAE,2BAA2BxD,GAAG,MAAM,CAACmN,QAAQ,WAAW,OAAOna,IAAIjN,EAAEqnB,cAAc5oB,EAAE,CAAC,CAAC,EAAE6oB,gBAAgB,WAAW,OAAOra,IAAIjN,EAAEunB,sBAAsB9oB,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS+G,EAAEyH,GAAG,IAAIgN,EAAE,EAAE,OAAOhN,GAAE,SAAUwQ,IAAI,OAAOxD,IAAI,IAAII,SAAQ,SAAU5b,GAAG+oB,YAAW,WAAY/oB,EAAEwO,EAAEwQ,GAAI,GAAEgK,KAAKC,IAAI,IAAIzN,EAAE,KAAM,GAAG,GAAE,CAAC,SAAS0N,EAAE1a,GAAG,IAAIgN,EAAE3a,UAAUD,OAAO,QAAG,IAASC,UAAU,GAAGA,UAAU,GAAG,SAAS2N,EAAEgN,GAAG,OAAOI,QAAQC,SAAS,EAAE,OAAOjX,OAAOC,OAAO2J,EAAE,CAAC2a,KAAK,SAASnK,GAAG,OAAOkK,EAAE1a,EAAE6M,MAAK,SAAU7M,GAAG,OAAOoN,QAAQsM,IAAI,CAAC1M,EAAEhN,EAAEwQ,GAAGxQ,GAAI,IAAG6M,MAAK,SAAU7M,GAAG,OAAOA,EAAE,EAAG,IAAG,GAAG,CAAC,SAASkU,EAAElU,GAAG,IAAI,IAAIgN,EAAEhN,EAAE5N,OAAO,EAAE4a,EAAE,EAAEA,IAAI,CAAC,IAAIwD,EAAEgK,KAAKI,MAAMJ,KAAKK,UAAU7N,EAAE,IAAIxb,EAAEwO,EAAEgN,GAAGhN,EAAEgN,GAAGhN,EAAEwQ,GAAGxQ,EAAEwQ,GAAGhf,CAAC,CAAC,OAAOwO,CAAC,CAAC,SAAS8a,EAAE9a,EAAEgN,GAAG,OAAOA,GAAG5W,OAAOwC,KAAKoU,GAAG1V,SAAQ,SAAUkZ,GAAGxQ,EAAEwQ,GAAGxD,EAAEwD,GAAGxQ,EAAG,IAAGA,GAAGA,CAAC,CAAC,SAAS+a,EAAE/a,GAAG,IAAI,IAAIgN,EAAE3a,UAAUD,OAAOoe,EAAE,IAAI9d,MAAMsa,EAAE,EAAEA,EAAE,EAAE,GAAGxb,EAAE,EAAEA,EAAEwb,EAAExb,IAAIgf,EAAEhf,EAAE,GAAGa,UAAUb,GAAG,IAAIqI,EAAE,EAAE,OAAOmG,EAAEmI,QAAQ,OAAM,WAAY,OAAO6S,mBAAmBxK,EAAE3W,KAAM,GAAE,CAAC,IAAI9G,EAAE,CAACunB,sBAAsB,EAAEF,cAAc,GAAG,SAASa,EAAEjb,EAAEgN,GAAG,IAAIwD,EAAExQ,GAAG,CAAC,EAAExO,EAAEgf,EAAEjM,MAAM,CAAC,EAAE,OAAOnO,OAAOwC,KAAK4X,GAAGlZ,SAAQ,SAAU0I,IAAI,IAAI,CAAC,UAAU,UAAU,kBAAkB,OAAO,aAAa3G,QAAQ2G,KAAKxO,EAAEwO,GAAGwQ,EAAExQ,GAAI,IAAG,CAACuE,KAAKnO,OAAOgjB,QAAQ5nB,GAAGY,OAAO,EAAEZ,OAAE,EAAO0pB,QAAQ1K,EAAE0K,SAASlO,EAAEmN,QAAQ3J,EAAE2J,SAAS,CAAC,EAAEE,gBAAgB7J,EAAE6J,iBAAiB,CAAC,EAAEc,UAAU3K,EAAE2K,UAAU,CAAC,IAAI3nB,EAAE,CAAC4nB,KAAK,EAAEC,MAAM,EAAEC,IAAI,GAAGhjB,EAAE,EAAEwB,EAAE,EAAEyhB,EAAE,EAAE,SAASC,EAAExb,GAAG,IAAIgN,EAAE3a,UAAUD,OAAO,QAAG,IAASC,UAAU,GAAGA,UAAU,GAAGiG,EAAE,OAAOkY,EAAEA,EAAE,CAAC,EAAExQ,GAAG,CAAC,EAAE,CAACyb,OAAOzO,EAAE0O,WAAWpC,KAAKqC,OAAO,CAAC,SAASC,EAAE5b,GAAG,MAAM,iBAAiBA,EAAE,CAAC6b,SAAS,QAAQC,IAAI9b,EAAE+b,OAAOvoB,EAAE8nB,KAAK,CAACO,SAAS7b,EAAE6b,UAAU,QAAQC,IAAI9b,EAAE8b,IAAIC,OAAO/b,EAAE+b,QAAQvoB,EAAE8nB,IAAI,CAAC,IAAIU,EAAE,SAASC,EAAE,MAAMC,EAAE,OAAOC,EAAE,MAAigB,SAASC,EAAEpc,EAAEgN,EAAExb,EAAEqI,GAAG,IAAI5H,EAAE,GAAGumB,EAAE,SAASxY,EAAEgN,GAAG,GAAGhN,EAAEqc,SAASJ,SAAG,IAASjc,EAAEuE,WAAM,IAASyI,EAAEzI,MAA7C,CAAyD,IAAI/S,EAAEkB,MAAMqH,QAAQiG,EAAEuE,MAAMvE,EAAEuE,KAAKiM,EAAEA,EAAE,CAAC,EAAExQ,EAAEuE,MAAMyI,EAAEzI,MAAM,OAAOjB,KAAKC,UAAU/R,EAAjF,CAAmF,CAAzJ,CAA2JA,EAAEqI,GAAG4X,EAAE,SAASzR,EAAEgN,GAAG,IAAIxb,EAAEgf,EAAEA,EAAE,CAAC,EAAExQ,EAAEma,SAASnN,EAAEmN,SAAStgB,EAAE,CAAC,EAAE,OAAOzD,OAAOwC,KAAKpH,GAAG8F,SAAQ,SAAU0I,GAAG,IAAIgN,EAAExb,EAAEwO,GAAGnG,EAAEmG,EAAEsc,eAAetP,CAAE,IAAGnT,CAAC,CAArI,CAAuImG,EAAEnG,GAAGqgB,EAAE1oB,EAAE6qB,OAAO9jB,EAAE/G,EAAE6qB,SAASJ,EAAE,CAAC,EAAEzL,EAAEA,EAAE,CAAC,EAAEhf,EAAE+S,MAAM1K,EAAE0K,MAAMmW,EAAElK,EAAEA,EAAEA,EAAE,CAAC,kBAAkBxQ,EAAEuc,UAAUzkB,OAAOkI,EAAEqa,iBAAiB9hB,GAAGsB,EAAEwgB,iBAAiBnG,EAAE,EAAE4G,EAAE,SAAS9N,EAAEwD,EAAE4H,GAAG,IAAI7f,EAAEiY,EAAEgM,MAAM,QAAG,IAASjkB,EAAE,KAAK,CAAC6D,KAAK,aAAaqgB,QAAQ,0JAA0JC,sBAAsBC,EAAE1qB,IAAI,IAAI6oB,EAAE,CAACvW,KAAKiU,EAAE2B,QAAQ1I,EAAE4K,OAAOnC,EAAE4B,IAAIc,EAAErkB,EAAE/G,EAAEkP,KAAKga,GAAGmC,eAAezE,EAAElE,EAAElU,EAAE8c,SAASC,SAASC,gBAAgB5E,EAAElE,EAAEra,EAAEqhB,UAAUH,EAAE,SAAS/a,GAAG,IAAIgN,EAAE,CAACiQ,QAAQnC,EAAEzM,SAASrO,EAAEkd,KAAK3kB,EAAE4kB,UAAU3M,EAAEpe,QAAQ,OAAOH,EAAEgB,KAAK+Z,GAAGA,CAAC,EAAEja,EAAE,CAACqqB,UAAU,SAASpd,GAAG,OAAO,SAASA,GAAG,IAAI,OAAOsD,KAAKyV,MAAM/Y,EAAE8M,QAAQ,CAAC,MAAME,GAAG,MAAM,SAAShN,EAAEgN,GAAG,MAAM,CAAC5Q,KAAK,uBAAuBqgB,QAAQzc,EAAEqO,SAASrB,EAAE,CAAtE,CAAwEA,EAAEyP,QAAQzc,EAAE,CAAC,CAAjJ,CAAmJA,EAAE,EAAEqd,QAAQ,SAAS7rB,GAAG,IAAIqI,EAAEkhB,EAAEvpB,GAAG,OAAOA,EAAE8rB,YAAYpJ,IAAI9G,QAAQsM,IAAI,CAAC1Z,EAAEud,OAAOC,KAAK,oBAAoBC,EAAE5jB,IAAImG,EAAE0d,WAAW/D,IAAIphB,EAAEijB,EAAEjjB,EAAE/G,EAAE8rB,WAAW/B,EAAEzhB,MAAM+S,MAAK,WAAY,OAAOG,EAAEwD,EAAE4H,EAAG,GAAE,EAAEuF,OAAO,SAAS3d,GAAG,MAAM+a,EAAE/a,GAAG,SAASA,EAAEgN,GAAG,IAAIwD,EAAExQ,EAAE8M,QAAQtb,EAAEwO,EAAEyb,OAAO5hB,EAAE2W,EAAE,IAAI3W,EAAEyJ,KAAKyV,MAAMvI,GAAGiM,OAAO,CAAC,MAAMzc,GAAG,CAAC,OAAO,SAASA,EAAEgN,EAAEwD,GAAG,MAAM,CAACpU,KAAK,WAAWqgB,QAAQzc,EAAEyb,OAAOzO,EAAE0P,sBAAsBlM,EAAE,CAAlF,CAAoF3W,EAAErI,EAAEwb,EAAE,CAApL,CAAsLhN,EAAE2c,EAAE1qB,GAAG,GAAG,OAAO+N,EAAE4d,UAAUC,KAAK/C,GAAGjO,MAAK,SAAU7M,GAAG,OAAO,SAASA,EAAEgN,GAAG,OAAO,SAAShN,GAAG,IAAIgN,EAAEhN,EAAEyb,OAAO,OAAOzb,EAAEsd,YAAY,SAAStd,GAAG,IAAIgN,EAAEhN,EAAEsd,WAAW9M,EAAExQ,EAAEyb,OAAO,OAAOzO,GAAG,KAAKwD,CAAC,CAA1D,CAA4DxQ,IAAI,MAAMgN,EAAE,MAAM,MAAMA,EAAE,IAAI,CAA1I,CAA4IhN,GAAGgN,EAAEqQ,QAAQrd,GAAG,MAAMA,EAAEyb,OAAO,KAAKzO,EAAEoQ,UAAUpd,GAAGgN,EAAE2Q,OAAO3d,EAAE,CAA/N,CAAiOA,EAAEjN,EAAG,GAAE,EAAE,OAA7xE,SAAWiN,EAAEgN,GAAG,OAAOI,QAAQsM,IAAI1M,EAAElW,KAAI,SAAUkW,GAAG,OAAOhN,EAAEwZ,IAAIxM,GAAE,WAAY,OAAOI,QAAQC,QAAQmO,EAAExO,GAAI,GAAG,KAAIH,MAAK,SAAU7M,GAAG,IAAIwQ,EAAExQ,EAAEhK,QAAO,SAAUgK,GAAG,OAAO,SAASA,GAAG,OAAOA,EAAEyb,SAASnjB,GAAGghB,KAAKqC,MAAM3b,EAAE0b,WAAW,IAAI,CAA7D,CAA+D1b,EAAG,IAAGxO,EAAEwO,EAAEhK,QAAO,SAAUgK,GAAG,OAAO,SAASA,GAAG,OAAOA,EAAEyb,SAASF,GAAGjC,KAAKqC,MAAM3b,EAAE0b,YAAY,IAAI,CAA9D,CAAgE1b,EAAG,IAAGnG,EAAE,GAAG3B,OAAOkgB,EAAE5H,GAAG4H,EAAE5mB,IAAI,MAAM,CAACssB,WAAW,SAAS9d,EAAEgN,GAAG,OAAO,IAAIxb,EAAEY,QAAQ,IAAI4N,EAAE,EAAExO,EAAEY,OAAO,EAAE4N,GAAGgN,CAAC,EAAE+Q,eAAelkB,EAAEzH,OAAO,EAAEyH,EAAE/C,KAAI,SAAUkJ,GAAG,OAAO4b,EAAE5b,EAAG,IAAGgN,EAAG,GAAE,CAA0yDuB,CAAEvO,EAAE0d,WAAW1Q,GAAGH,MAAK,SAAU7M,GAAG,OAAO8a,EAAE1C,EAAEpY,EAAE+d,gBAAgBC,UAAUhe,EAAE8d,WAAY,GAAE,CAAC,SAASziB,EAAE2E,GAAG,IAAIgN,EAAEhN,EAAE0d,WAAWlN,EAAExQ,EAAEud,OAAO/rB,EAAEwO,EAAE4d,UAAUxF,EAAEpY,EAAEie,cAAchsB,EAAE+N,EAAEke,eAAe1F,EAAExY,EAAE8c,SAASrL,EAAEzR,EAAEuc,UAAUrC,EAAEla,EAAEme,MAAM5lB,EAAEyH,EAAEqa,gBAAgBK,EAAE,CAACgD,WAAW1Q,EAAEuQ,OAAO/M,EAAEoN,UAAUpsB,EAAEysB,cAAc7F,EAAE8F,eAAejsB,EAAE6qB,SAAStE,EAAE+D,UAAU9K,EAAE0I,QAAQna,EAAEma,QAAQE,gBAAgB9hB,EAAE4lB,MAAMjE,EAAEpjB,KAAI,SAAUkJ,GAAG,OAAO4b,EAAE5b,EAAG,IAAGoe,KAAK,SAASpe,EAAEgN,GAAG,IAAIwD,EAAEyK,EAAEjO,EAAE0N,EAAEoC,SAASsB,MAAM5sB,EAAE,WAAW,OAAO4qB,EAAE1B,EAAEA,EAAEyD,MAAMnoB,QAAO,SAAUgK,GAAG,OAAO,IAAIA,EAAE+b,OAAOvoB,EAAE4nB,KAAM,IAAGpb,EAAEwQ,EAAE,EAAE,IAAG,UAAM,IAASA,EAAE2K,UAAU3K,EAAE2K,UAAUnb,EAAEmb,WAAW,OAAO3pB,IAAI,IAAI4mB,EAAE,CAAC6E,QAAQjd,EAAEqe,qBAAqB7N,EAAE8N,YAAY,CAACjE,gBAAgBK,EAAEL,gBAAgBF,QAAQO,EAAEP,UAAU,OAAOO,EAAEwD,eAAe1E,IAAIpB,GAAE,WAAY,OAAOsC,EAAEuD,cAAczE,IAAIpB,GAAE,WAAY,OAAOsC,EAAEuD,cAActE,IAAIvB,EAAE5mB,KAAKqb,MAAK,SAAU7M,GAAG,OAAOoN,QAAQsM,IAAI,CAACgB,EAAEuD,cAAcrE,OAAOxB,GAAGpY,GAAI,IAAE,SAAUA,GAAG,OAAOoN,QAAQsM,IAAI,CAACgB,EAAEuD,cAAcrE,OAAOxB,GAAGhL,QAAQmR,OAAOve,IAAK,IAAG6M,MAAK,SAAU7M,GAAG,IAAIgN,EAAEnT,EAAEmG,EAAE,GAAQ,OAALgN,EAAE,GAAUA,EAAE,EAAG,GAAG,GAAG,GAAE,CAACyM,KAAK,SAASzZ,GAAG,OAAO0a,EAAEwD,eAAevE,IAAIvB,EAAEpY,EAAE,GAAG,EAAEwe,MAAM,SAASxe,EAAEgN,GAAG,OAAOoP,EAAE1B,EAAEA,EAAEyD,MAAMnoB,QAAO,SAAUgK,GAAG,OAAO,IAAIA,EAAE+b,OAAOvoB,EAAE6nB,MAAO,IAAGrb,EAAEib,EAAEjO,EAAE0N,EAAEoC,SAAS0B,OAAO,GAAG,OAAO9D,CAAC,CAAC,SAAS+D,EAAEze,GAAG,IAAIgN,EAAE,CAAClV,MAAM,2BAA2BI,OAAO8H,EAAE,KAAK0e,IAAI,SAAS1e,GAAG,IAAIwQ,EAAE,KAAKtY,OAAO8H,EAAEsV,SAASpd,YAAO,IAAS8H,EAAEpL,QAAQ,KAAKsD,OAAO8H,EAAEpL,QAAQ,KAAK,IAAI,OAAO,IAAIoY,EAAElV,MAAMuB,QAAQmX,KAAKxD,EAAElV,MAAM,GAAGI,OAAO8U,EAAElV,OAAOI,OAAOsY,IAAIxD,CAAC,GAAG,OAAOA,CAAC,CAAC,SAAS4P,EAAE5c,EAAEgN,EAAEwD,GAAG,IAAIhf,EAAEmtB,EAAEnO,GAAG3W,EAAE,GAAG3B,OAAO8H,EAAE6b,SAAS,OAAO3jB,OAAO8H,EAAE8b,IAAI,KAAK5jB,OAAO,MAAM8U,EAAE4R,OAAO,GAAG5R,EAAE6R,OAAO,GAAG7R,GAAG,OAAOxb,EAAEY,SAASyH,GAAG,IAAI3B,OAAO1G,IAAIqI,CAAC,CAAC,SAAS8kB,EAAE3e,GAAG,OAAO5J,OAAOwC,KAAKoH,GAAGlJ,KAAI,SAAUkW,GAAG,OAAO+N,EAAE,QAAQ/N,GAAGwD,EAAExQ,EAAEgN,GAAG,oBAAoB5W,OAAO/E,UAAUgS,SAAS5Q,KAAK+d,IAAI,mBAAmBpa,OAAO/E,UAAUgS,SAAS5Q,KAAK+d,GAAGlN,KAAKC,UAAUvD,EAAEgN,IAAIhN,EAAEgN,KAAK,IAAIwD,CAAE,IAAG+E,KAAK,IAAI,CAAC,SAASoH,EAAE3c,GAAG,OAAOA,EAAElJ,KAAI,SAAUkJ,GAAG,OAAOyd,EAAEzd,EAAG,GAAE,CAAC,SAASyd,EAAEzd,GAAG,IAAIgN,EAAEhN,EAAEid,QAAQ9C,QAAQ,qBAAqB,CAAC,oBAAoB,SAAS,CAAC,EAAE,OAAO3J,EAAEA,EAAE,CAAC,EAAExQ,GAAG,CAAC,EAAE,CAACid,QAAQzM,EAAEA,EAAE,CAAC,EAAExQ,EAAEid,SAAS,CAAC,EAAE,CAAC9C,QAAQ3J,EAAEA,EAAE,CAAC,EAAExQ,EAAEid,QAAQ9C,SAASnN,MAAM,CAAC,IAAI8R,EAAE,SAAS9e,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOxQ,EAAEse,YAAYE,MAAM,CAACnC,OAAOH,EAAExb,KAAK,YAAY6D,KAAKyI,GAAGwD,EAAE,CAAC,EAAEuO,EAAE,SAAS/e,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOxQ,EAAEse,YAAYE,MAAM,CAACnC,OAAOL,EAAEtb,KAAKqa,EAAE,eAAe/N,IAAIwD,EAAE,CAAC,EAAEwO,EAAE,SAAShf,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOxQ,EAAEse,YAAYF,KAAK,CAAC/B,OAAOJ,EAAEvb,KAAKqa,EAAE,eAAe/N,IAAIwD,EAAE,CAAC,EAAEyO,EAAE,SAASjf,GAAG,OAAO,SAASgN,GAAG,OAAOhN,EAAEse,YAAYF,KAAK,CAAC/B,OAAOJ,EAAEvb,KAAK,aAAasM,EAAE,CAAC,EAAEkS,EAAE,SAASlf,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOxQ,EAAEse,YAAYE,MAAM,CAACnC,OAAOH,EAAExb,KAAKqa,EAAE,oBAAoB/N,IAAIwD,EAAE,CAAC,EAAE2O,EAAE,SAASnf,GAAG,OAAO,SAASgN,GAAG,OAAOhN,EAAEse,YAAYF,KAAK,CAAC/B,OAAOJ,EAAEvb,KAAK,gCAAgCsM,EAAE,CAAC,EAAEoS,EAAE,SAASpf,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOxQ,EAAEse,YAAYE,MAAM,CAACnC,OAAOH,EAAExb,KAAK,+BAA+B6D,KAAKyI,GAAGwD,EAAE,CAAC,EAAE,SAAS6O,EAAErf,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOxQ,EAAEid,QAAQzM,GAAG3D,MAAK,SAAUrb,GAAG,QAAG,IAASwO,EAAEsf,OAAOtf,EAAEsf,MAAM9tB,EAAEqgB,OAAO7R,EAAEuf,WAAW/tB,GAAG,OAAOA,EAAEguB,OAAOxS,EAAE,CAACwS,OAAOhuB,EAAEguB,SAASxS,EAAE,CAAC5P,MAAMoT,EAAEpT,MAAM,GAAG,GAAI,GAAE,CAAzK,CAA2K,CAAC,EAAE,CAAC,IAAIqiB,EAAE,SAASzf,GAAG,OAAO,SAASgN,EAAEnT,GAAG,IAAIue,EAAEve,GAAG,CAAC,EAAE5H,EAAEmmB,EAAEiC,gBAAgB7B,EAAEhnB,EAAE4mB,EAAE,CAAC,oBAAoB3G,EAAEjB,EAAE,CAACkP,IAAI1S,QAAG,IAAS/a,EAAE,CAACooB,gBAAgBpoB,GAAG,CAAC,GAAG,OAAOyoB,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOH,EAAExb,KAAK,SAAS6D,KAAKkN,GAAG+G,IAAG,SAAUxL,EAAEwD,GAAG,OAAOjY,GAAE,SAAU/G,GAAG,OAAOmuB,EAAG3f,EAAH2f,CAAM3S,EAAElZ,IAAI0c,GAAGvD,OAAM,SAAUjN,GAAG,GAAG,MAAMA,EAAEyb,OAAO,MAAMzb,EAAE,OAAOxO,GAAI,GAAG,GAAG,GAAE,CAAC,EAAEouB,EAAE,SAAS5f,GAAG,OAAO,SAASgN,EAAEwD,EAAEhf,GAAG,IAAIqI,EAAEohB,EAAEzpB,GAAG,OAAOqI,EAAEwgB,gBAAgB,qBAAqBrN,EAAEhN,EAAEse,YAAYE,MAAM,CAACnC,OAAOH,EAAExb,KAAK,qBAAqB6D,KAAK,CAACsb,QAAQrP,IAAI3W,EAAE,CAAC,EAAEimB,EAAE,SAAS9f,GAAG,OAAO,SAASgN,EAAEwD,EAAEhf,GAAG,OAAOwO,EAAEse,YAAYE,MAAM,CAACnC,OAAOH,EAAExb,KAAK,2BAA2B6D,KAAK,CAACwb,MAAM/S,EAAE6S,QAAQrP,IAAIhf,EAAE,CAAC,EAAEwuB,EAAE,SAAShgB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOkK,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOH,EAAExb,KAAKqa,EAAE,2BAA2B/N,GAAGzI,KAAK,CAAC0b,gCAA+B,EAAGC,SAAS,CAACC,OAAO,WAAWC,KAAK,MAAM5P,IAAG,SAAUxD,EAAEwD,GAAG,OAAO6P,GAAGrgB,EAAHqgB,CAAMrT,EAAEsT,OAAO9P,EAAG,GAAE,CAAC,EAAE+P,EAAE,SAASvgB,GAAG,OAAO,SAASgN,EAAEwD,EAAEhf,GAAG,OAAOkpB,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOH,EAAExb,KAAKqa,EAAE,yBAAyB/N,GAAGzI,KAAK,CAACic,UAAU,OAAOC,YAAYjQ,IAAIhf,IAAG,SAAUgf,EAAEhf,GAAG,OAAOkvB,GAAG1gB,EAAH0gB,CAAM1T,EAAE,CAAC2T,QAAQ,CAACC,SAASC,MAAMD,SAASpQ,EAAE8P,OAAO9uB,EAAG,GAAE,CAAC,EAAEsvB,EAAE,SAAS9gB,GAAG,OAAO,SAASgN,EAAExb,EAAEqI,GAAG,OAAO0mB,EAAEvgB,EAAFugB,CAAKvT,EAAExb,EAAEgf,EAAEA,EAAE,CAAC,EAAE3W,GAAG,CAAC,EAAE,CAACknB,MAAM,CAACC,GAAGC,SAAS,CAAC,EAAEC,EAAE,SAASlhB,GAAG,OAAO,SAASgN,EAAExb,EAAEqI,GAAG,OAAO0mB,EAAEvgB,EAAFugB,CAAKvT,EAAExb,EAAEgf,EAAEA,EAAE,CAAC,EAAE3W,GAAG,CAAC,EAAE,CAACknB,MAAM,CAACC,GAAGG,YAAY,CAAC,EAAEC,EAAE,SAASphB,GAAG,OAAO,SAASgN,EAAExb,EAAEqI,GAAG,OAAO0mB,EAAEvgB,EAAFugB,CAAKvT,EAAExb,EAAEgf,EAAEA,EAAE,CAAC,EAAE3W,GAAG,CAAC,EAAE,CAACknB,MAAM,CAACC,GAAGK,YAAY,CAAC,EAAEC,EAAE,SAASthB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOxD,EAAEqP,SAASJ,EAAEjc,EAAEse,YAAYF,KAAKpR,EAAEwD,GAAGxQ,EAAEse,YAAYE,MAAMxR,EAAEwD,EAAE,CAAC,EAAE+Q,EAAE,SAASvhB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOkK,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOL,EAAEtb,KAAKqa,EAAE,YAAY/N,IAAIwD,IAAG,SAAUA,EAAEhf,GAAG,OAAO+G,GAAE,SAAUiY,GAAG,OAAOmP,EAAG3f,EAAH2f,CAAM3S,EAAExb,GAAGqb,KAAK2D,GAAGvD,OAAM,SAAUjN,GAAG,GAAG,MAAMA,EAAEyb,OAAO,MAAMzb,CAAE,GAAG,GAAG,GAAE,CAAC,EAAEwhB,EAAE,SAASxhB,GAAG,OAAO,SAASgN,EAAEwD,EAAEhf,GAAG,IAAIqI,EAAE2W,EAAE1Z,KAAI,SAAUkJ,GAAG,MAAM,CAACmgB,OAAO,cAAcC,KAAK,CAAC7I,SAASvX,GAAI,IAAG,OAAO0a,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOH,EAAExb,KAAKqa,EAAE,2BAA2B/N,GAAGzI,KAAK,CAAC0b,gCAA+B,EAAGC,SAASrmB,IAAIrI,IAAG,SAAUwb,EAAEwD,GAAG,OAAO6P,GAAGrgB,EAAHqgB,CAAMrT,EAAEsT,OAAO9P,EAAG,GAAE,CAAC,EAAEmP,EAAG,SAAS3f,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOxQ,EAAEse,YAAYF,KAAK,CAAC/B,OAAOJ,EAAEvb,KAAKqa,EAAE,YAAY/N,IAAIwD,EAAE,CAAC,EAAEiR,GAAG,SAASzhB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOxQ,EAAEse,YAAYF,KAAK,CAAC/B,OAAOJ,EAAEvb,KAAKqa,EAAE,YAAY/N,EAAE3J,aAAamN,EAAE,CAAC,EAAEkR,GAAG,SAAS1hB,GAAG,OAAO,SAASgN,GAAG,OAAOhN,EAAEse,YAAYF,KAAK,CAAC/B,OAAOJ,EAAEvb,KAAK,8BAA8BsM,EAAE,CAAC,EAAE2U,GAAG,SAAS3hB,GAAG,OAAO,SAASgN,GAAG,OAAOhN,EAAEse,YAAYF,KAAK,CAAC/B,OAAOJ,EAAEvb,KAAK,UAAUsM,EAAE,CAAC,EAAE4U,GAAG,SAAS5hB,GAAG,OAAO,SAASgN,GAAG,OAAOhN,EAAEse,YAAYF,KAAK,CAAC/B,OAAOJ,EAAEvb,KAAK,0BAA0BsM,EAAE,CAAC,EAAE6U,GAAG,SAAS7hB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOxQ,EAAEse,YAAYF,KAAK,CAAC/B,OAAOJ,EAAEvb,KAAKqa,EAAE,wBAAwB/N,IAAIwD,EAAE,CAAC,EAAEsR,GAAG,SAAS9hB,GAAG,OAAO,SAASgN,GAAG,IAAIwD,EAAExD,GAAG,CAAC,EAAEnT,EAAE2W,EAAEuR,iBAAiB3J,EAAE5mB,EAAEgf,EAAE,CAAC,qBAAqB,OAAM,IAAK3W,IAAIue,EAAE4J,aAAY,GAAIhiB,EAAEse,YAAYF,KAAK,CAAC/B,OAAOJ,EAAEvb,KAAK,8BAA8B0X,EAAE,CAAC,EAAEsI,GAAG,SAAS1gB,GAAG,OAAO,SAASgN,GAAG,IAAIwD,EAAEne,UAAUD,OAAO,QAAG,IAASC,UAAU,GAAGA,UAAU,GAAG,CAAC,EAA0D,OAAOyoB,EAA7D,CAACwD,YAAYte,EAAEse,YAAY2D,MAAMjiB,EAAEiiB,MAAMrrB,UAAUoW,GAAcwD,EAAEmQ,QAAQ,CAAC,EAAEuB,GAAG,SAASliB,GAAG,OAAO,SAASgN,GAAG,OAAOhN,EAAEse,YAAYF,KAAK,CAAC/B,OAAOJ,EAAEvb,KAAK,UAAUsM,EAAE,CAAC,EAAEmV,GAAG,SAASniB,GAAG,OAAO,SAASgN,GAAG,OAAOhN,EAAEse,YAAYF,KAAK,CAAC/B,OAAOJ,EAAEvb,KAAK,cAAcsM,EAAE,CAAC,EAAEoV,GAAG,SAASpiB,GAAG,OAAO,SAASgN,GAAG,OAAOhN,EAAEse,YAAYF,KAAK,CAAC/B,OAAOJ,EAAEvb,KAAK,aAAasM,EAAE,CAAC,EAAEqV,GAAG,SAASriB,GAAG,OAAO,SAASgN,GAAG,OAAOhN,EAAEse,YAAYF,KAAK,CAAC/B,OAAOJ,EAAEvb,KAAK,sBAAsBsM,EAAE,CAAC,EAAEsV,GAAG,SAAStiB,GAAG,OAAO,SAASgN,EAAEwD,EAAEhf,GAAG,OAAOkpB,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOH,EAAExb,KAAKqa,EAAE,yBAAyB/N,GAAGzI,KAAK,CAACic,UAAU,OAAOC,YAAYjQ,IAAIhf,IAAG,SAAUgf,EAAEhf,GAAG,OAAOkvB,GAAG1gB,EAAH0gB,CAAM1T,EAAE,CAAC2T,QAAQ,CAACC,SAASC,MAAMD,SAASpQ,EAAE8P,OAAO9uB,EAAG,GAAE,CAAC,EAAE+wB,GAAG,SAASviB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOkK,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOH,EAAExb,KAAK,oBAAoB6D,KAAK,CAAC2b,SAASlT,IAAIwD,IAAG,SAAUxD,EAAEwD,GAAG,OAAOpD,QAAQsM,IAAItjB,OAAOwC,KAAKoU,EAAEsT,QAAQxpB,KAAI,SAAUtF,GAAG,OAAOkvB,GAAG1gB,EAAH0gB,CAAMlvB,EAAE,CAACmvB,QAAQ,CAACC,SAASC,MAAMD,SAAS5T,EAAEsT,OAAO9uB,GAAGgf,EAAG,IAAI,GAAE,CAAC,EAAEgS,GAAG,SAASxiB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOxQ,EAAEse,YAAYF,KAAK,CAAC/B,OAAOH,EAAExb,KAAK,sBAAsB6D,KAAK,CAAC2b,SAASlT,IAAIwD,EAAE,CAAC,EAAEiS,GAAG,SAASziB,GAAG,OAAO,SAASgN,EAAExb,GAAG,IAAIqI,EAAEmT,EAAElW,KAAI,SAAUkJ,GAAG,OAAOwQ,EAAEA,EAAE,CAAC,EAAExQ,GAAG,CAAC,EAAE,CAACtK,OAAOipB,EAAE3e,EAAEtK,QAAQ,CAAC,IAAK,IAAG,OAAOsK,EAAEse,YAAYF,KAAK,CAAC/B,OAAOH,EAAExb,KAAK,sBAAsB6D,KAAK,CAAC2b,SAASrmB,GAAGshB,WAAU,GAAI3pB,EAAE,CAAC,EAAEkxB,GAAG,SAAS1iB,GAAG,OAAO,SAASgN,EAAEnT,GAAG,OAAOuT,QAAQsM,IAAI1M,EAAElW,KAAI,SAAUkW,GAAG,IAAIoL,EAAEpL,EAAEtX,OAAOzD,EAAEmmB,EAAEra,UAAUya,EAAEJ,EAAElB,WAAWzF,EAAEjgB,EAAE4mB,EAAE,CAAC,YAAY,eAAe,OAAOsI,GAAG1gB,EAAH0gB,CAAM1T,EAAEpW,UAAU,CAAC+pB,QAAQ,CAAC/S,qBAAqB+U,MAAM/U,qBAAqB3b,EAAEumB,EAAEhI,EAAEA,EAAE,CAAC,EAAE3W,GAAG4X,GAAI,IAAG,CAAC,EAAEmR,GAAG,SAAS5iB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,IAAIhf,EAAEypB,EAAEzK,GAAG,OAAOhf,EAAE6oB,gBAAgB,qBAAqBrN,EAAEhN,EAAEse,YAAYE,MAAM,CAACnC,OAAOL,EAAEtb,KAAK,sBAAsBlP,EAAE,CAAC,EAAEqxB,GAAG,SAAS7iB,GAAG,OAAO,SAASgN,EAAEwD,EAAEhf,GAAG,IAAIqI,EAAE2W,EAAE1Z,KAAI,SAAUkJ,GAAG,MAAM,CAACmgB,OAAO,WAAWC,KAAKpgB,EAAG,IAAG,OAAO0a,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOH,EAAExb,KAAKqa,EAAE,2BAA2B/N,GAAGzI,KAAK,CAAC0b,gCAA+B,EAAGC,SAASrmB,IAAIrI,IAAG,SAAUwb,EAAEwD,GAAG,OAAO6P,GAAGrgB,EAAHqgB,CAAMrT,EAAEsT,OAAO9P,EAAG,GAAE,CAAC,EAAEsS,GAAG,SAAS9iB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOkK,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOH,EAAExb,KAAKqa,EAAE,oBAAoB/N,IAAIwD,IAAG,SAAUA,EAAEhf,GAAG,OAAO+G,GAAE,SAAUiY,GAAG,OAAOmP,EAAG3f,EAAH2f,CAAM3S,EAAExb,GAAGyb,OAAM,SAAUjN,GAAG,GAAG,MAAMA,EAAEyb,OAAO,MAAMzb,EAAE,OAAOwQ,GAAI,GAAG,GAAG,GAAE,CAAC,EAAEuS,GAAG,SAAS/iB,GAAG,OAAO,SAASgN,EAAEwD,EAAEhf,GAAG,IAAIqI,EAAE2W,EAAE1Z,KAAI,SAAUkJ,GAAG,MAAM,CAACmgB,OAAO,WAAWC,KAAKpgB,EAAG,IAAG,OAAO0a,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOH,EAAExb,KAAKqa,EAAE,2BAA2B/N,GAAGzI,KAAK,CAAC0b,gCAA+B,EAAGC,SAASrmB,IAAIrI,IAAG,SAAUwb,EAAEwD,GAAG,OAAO6P,GAAGrgB,EAAHqgB,CAAMrT,EAAEsT,OAAO9P,EAAG,GAAE,CAAC,EAAEwS,GAAG,SAAShjB,GAAG,OAAO,SAASgN,EAAEwD,EAAEhf,GAAG,OAAOwO,EAAEse,YAAYF,KAAK,CAAC/B,OAAOH,EAAExb,KAAKqa,EAAE,4BAA4B/N,GAAGzI,KAAK,CAACxN,MAAMyZ,GAAG2K,WAAU,GAAI3pB,EAAE,CAAC,EAAEyxB,GAAG,SAASjjB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOxQ,EAAEse,YAAYF,KAAK,CAAC/B,OAAOH,EAAExb,KAAK,4BAA4B6D,KAAK,CAACxN,MAAMiW,IAAIwD,EAAE,CAAC,EAAE0S,GAAG,SAASljB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOkK,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOF,EAAEzb,KAAK,6BAA6B6D,KAAKyI,GAAGwD,IAAG,SAAUxD,EAAEwD,GAAG,OAAO6P,GAAGrgB,EAAHqgB,CAAMrT,EAAEsT,OAAO9P,EAAG,GAAE,CAAC,EAAE2S,GAAG,SAASnjB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,IAAI3W,EAAEzD,OAAOC,OAAO,CAAC,EAAEma,GAAG4H,EAAE5H,GAAG,CAAC,EAAEve,EAAEmmB,EAAEiC,gBAAgB7B,EAAEhnB,EAAE4mB,EAAE,CAAC,oBAAoB3G,EAAExf,EAAE,CAACooB,gBAAgBpoB,GAAG,CAAC,EAAEioB,EAAE,CAAC,MAAM,UAAU,WAAW,kBAAkB,kBAAkB,cAAc,yBAAyB,mBAAmB,OAAOQ,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOF,EAAEzb,KAAKqa,EAAE,YAAY/N,GAAGzI,KAAKkN,GAAG+G,IAAG,SAAUhI,EAAEhf,GAAG,OAAO+G,GAAE,SAAUiY,GAAG,OAAOmP,EAAG3f,EAAH2f,CAAM3S,EAAExb,GAAGqb,MAAK,SAAU7M,GAAG,OAAO,SAASA,GAAG,OAAO5J,OAAOwC,KAAKiB,GAAG7D,QAAO,SAAUgK,GAAG,OAAO,IAAIka,EAAE7gB,QAAQ2G,EAAG,IAAGhG,OAAM,SAAUgT,GAAG,GAAGta,MAAMqH,QAAQiG,EAAEgN,KAAKta,MAAMqH,QAAQF,EAAEmT,IAAI,CAAC,IAAIwD,EAAExQ,EAAEgN,GAAG,OAAOwD,EAAEpe,SAASyH,EAAEmT,GAAG5a,QAAQoe,EAAExW,OAAM,SAAUgG,EAAEwQ,GAAG,OAAOxQ,IAAInG,EAAEmT,GAAGwD,EAAG,GAAE,CAAC,OAAOxQ,EAAEgN,KAAKnT,EAAEmT,EAAG,GAAE,CAA7P,CAA+PhN,GAAGoN,QAAQC,UAAUmD,GAAI,GAAG,GAAG,GAAE,CAAC,EAAE6P,GAAG,SAASrgB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOjY,GAAE,SAAU/G,GAAG,OAAOiwB,GAAGzhB,EAAHyhB,CAAMzU,EAAEwD,GAAG3D,MAAK,SAAU7M,GAAG,MAAM,cAAcA,EAAEyb,OAAOjqB,SAAI,CAAO,GAAG,GAAE,CAAC,EAAE4xB,GAAG,SAASpjB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOkK,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOH,EAAExb,KAAKqa,EAAE,qBAAqB/a,EAAEpJ,WAAW2N,KAAK,CAAC2b,SAASlT,IAAIwD,IAAG,SAAUxD,EAAEwD,GAAG,OAAOqQ,GAAG7gB,EAAH6gB,CAAM7T,EAAEsT,OAAO9P,EAAG,GAAE,CAAC,EAAE6S,GAAG,SAASrjB,GAAG,OAAO,SAASgN,GAAG,OAAOqS,EAAE7O,EAAEA,EAAE,CAAC+O,WAAW,SAASvf,GAAG,YAAO,IAASA,EAAEwf,MAAM,GAAGxS,GAAG,CAAC,EAAE,CAACiQ,QAAQ,SAASzM,GAAG,OAAOxQ,EAAEse,YAAYF,KAAK,CAAC/B,OAAOH,EAAExb,KAAKqa,EAAE,sBAAsB/a,EAAEpJ,WAAW2N,KAAKiM,GAAGxD,EAAE,IAAI,CAAC,EAAEsW,GAAG,SAAStjB,GAAG,OAAO,SAASgN,GAAG,IAAIxb,EAAEgf,EAAE,CAAChT,YAAY,KAAKwP,GAAG,OAAOqS,EAAE7O,EAAEA,EAAE,CAAC+O,WAAW,SAASvf,GAAG,OAAOA,EAAE6R,KAAKzf,OAAOZ,EAAEgM,WAAW,GAAGhM,GAAG,CAAC,EAAE,CAACyrB,QAAQ,SAASjQ,GAAG,OAAOuW,GAAGvjB,EAAHujB,CAAM,GAAG/S,EAAEA,EAAE,CAAC,EAAEhf,GAAGwb,IAAIH,MAAK,SAAU7M,GAAG,OAAOwQ,EAAEA,EAAE,CAAC,EAAExQ,GAAG,CAAC,EAAE,CAAC6R,KAAK7R,EAAE6R,KAAK/a,KAAI,SAAUkJ,GAAG,cAAcA,EAAEwjB,iBAAiBxjB,CAAE,KAAK,GAAE,IAAI,CAAC,EAAEyjB,GAAG,SAASzjB,GAAG,OAAO,SAASgN,GAAG,IAAIxb,EAAEgf,EAAE,CAAChT,YAAY,KAAKwP,GAAG,OAAOqS,EAAE7O,EAAEA,EAAE,CAAC+O,WAAW,SAASvf,GAAG,OAAOA,EAAE6R,KAAKzf,OAAOZ,EAAEgM,WAAW,GAAGhM,GAAG,CAAC,EAAE,CAACyrB,QAAQ,SAASjQ,GAAG,OAAO0W,GAAG1jB,EAAH0jB,CAAM,GAAGlT,EAAEA,EAAE,CAAC,EAAEhf,GAAGwb,IAAIH,MAAK,SAAU7M,GAAG,OAAOwQ,EAAEA,EAAE,CAAC,EAAExQ,GAAG,CAAC,EAAE,CAAC6R,KAAK7R,EAAE6R,KAAK/a,KAAI,SAAUkJ,GAAG,cAAcA,EAAEwjB,iBAAiBxjB,CAAE,KAAK,GAAE,IAAI,CAAC,EAAE2jB,GAAG,SAAS3jB,GAAG,OAAO,SAASgN,EAAEwD,EAAE3W,GAAG,IAAIue,EAAEve,GAAG,CAAC,EAAE5H,EAAEmmB,EAAEwL,UAAUpL,EAAEhnB,EAAE4mB,EAAE,CAAC,cAAc3G,EAAE,CAACoS,QAAQ,GAAGC,UAAU,IAAI,OAAOpJ,EAAE,SAASlpB,IAAI,IAAIqI,EAA6DqgB,EAAE,GAAG,IAAIrgB,EAAlExH,UAAUD,OAAO,QAAG,IAASC,UAAU,GAAGA,UAAU,GAAG,EAAewH,EAAEmT,EAAE5a,SAAS8nB,EAAEjnB,KAAK+Z,EAAEnT,IAAIqgB,EAAE9nB,UAAUH,GAAG,MAAM4H,KAAK,OAAO,IAAIqgB,EAAE9nB,OAAOgb,QAAQC,QAAQoE,GAAG2R,GAAGpjB,EAAHojB,CAAMlJ,EAAEpjB,KAAI,SAAUkJ,GAAG,MAAM,CAACmgB,OAAO3P,EAAE4P,KAAKpgB,EAAG,IAAGwY,GAAG3L,MAAK,SAAU7M,GAAG,OAAOyR,EAAEqS,UAAUrS,EAAEqS,UAAU5rB,OAAO8H,EAAE8jB,WAAWrS,EAAEoS,QAAQ5wB,KAAK+M,EAAEsgB,QAAQzmB,IAAIrI,EAAEqI,EAAG,GAAE,CAAtV,IAA0V,SAAUmT,EAAEwD,GAAG,OAAOpD,QAAQsM,IAAI1M,EAAE6W,QAAQ/sB,KAAI,SAAUkW,GAAG,OAAO6T,GAAG7gB,EAAH6gB,CAAM7T,EAAEwD,EAAG,IAAI,GAAE,CAAC,EAAEuT,GAAG,SAAS/jB,GAAG,OAAO,SAASgN,GAAG,OAAO0N,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOH,EAAExb,KAAKqa,EAAE,qBAAqB/a,EAAEpJ,YAAYoW,IAAG,SAAUA,EAAEwD,GAAG,OAAOqQ,GAAG7gB,EAAH6gB,CAAM7T,EAAEsT,OAAO9P,EAAG,GAAE,CAAC,EAAEwT,GAAG,SAAShkB,GAAG,OAAO,SAASgN,GAAG,IAAIwD,EAAExD,GAAG,CAAC,EAAEnT,EAAE2W,EAAEyT,kBAAkB7L,EAAE6C,EAAEzpB,EAAEgf,EAAE,CAAC,uBAAuB,OAAO3W,IAAIue,EAAEiC,gBAAgB4J,kBAAkB,GAAGvJ,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOH,EAAExb,KAAKqa,EAAE,2BAA2B/a,EAAEpJ,YAAYwhB,IAAG,SAAUpL,EAAEwD,GAAG,OAAOqQ,GAAG7gB,EAAH6gB,CAAM7T,EAAEsT,OAAO9P,EAAG,GAAE,CAAC,EAAE0T,GAAG,SAASlkB,GAAG,OAAO,SAASgN,GAAG,IAAIwD,EAAExD,GAAG,CAAC,EAAEnT,EAAE2W,EAAEyT,kBAAkB7L,EAAE6C,EAAEzpB,EAAEgf,EAAE,CAAC,uBAAuB,OAAO3W,IAAIue,EAAEiC,gBAAgB4J,kBAAkB,GAAGvJ,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOH,EAAExb,KAAKqa,EAAE,8BAA8B/a,EAAEpJ,YAAYwhB,IAAG,SAAUpL,EAAEwD,GAAG,OAAOqQ,GAAG7gB,EAAH6gB,CAAM7T,EAAEsT,OAAO9P,EAAG,GAAE,CAAC,EAAE2T,GAAG,SAASnkB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOkK,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOH,EAAExb,KAAKqa,EAAE,6BAA6B/a,EAAEpJ,WAAW2N,KAAKyI,GAAGwD,IAAG,SAAUxD,EAAEwD,GAAG,OAAOqQ,GAAG7gB,EAAH6gB,CAAM7T,EAAEsT,OAAO9P,EAAG,GAAE,CAAC,EAAE4T,GAAG,SAASpkB,GAAG,OAAO,SAASgN,GAAG,OAAO0N,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOL,EAAEtb,KAAKqa,EAAE,eAAe/a,EAAEpJ,YAAYoW,IAAG,SAAUA,EAAEwD,GAAG,OAAOqQ,GAAG7gB,EAAH6gB,CAAM7T,EAAEsT,OAAO9P,EAAG,GAAE,CAAC,EAAE6T,GAAG,SAASrkB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOkK,EAAE4J,GAAGtkB,EAAHskB,CAAM,CAACtX,GAAGwD,GAAG3D,MAAK,SAAU7M,GAAG,MAAM,CAACsgB,OAAOtgB,EAAE6jB,QAAQ,GAAI,KAAG,SAAU7W,EAAEwD,GAAG,OAAOqQ,GAAG7gB,EAAH6gB,CAAM7T,EAAEsT,OAAO9P,EAAG,GAAE,CAAC,EAAE8T,GAAG,SAAStkB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,IAAIhf,EAAEwb,EAAElW,KAAI,SAAUkJ,GAAG,MAAM,CAACuX,SAASvX,EAAG,IAAG,OAAO2jB,GAAG3jB,EAAH2jB,CAAMnyB,EAAE+yB,GAAGC,aAAahU,EAAE,CAAC,EAAEiU,GAAG,SAASzkB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,IAAI3W,EAAE2W,GAAG,CAAC,EAAE4H,EAAEve,EAAEoqB,kBAAkBhyB,EAAEgpB,EAAEzpB,EAAEqI,EAAE,CAAC,uBAAuB,OAAOue,IAAInmB,EAAEooB,gBAAgB4J,kBAAkB,GAAGvJ,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOL,EAAEtb,KAAKqa,EAAE,wBAAwB/a,EAAEpJ,UAAUoW,IAAI/a,IAAG,SAAU+a,EAAEwD,GAAG,OAAOqQ,GAAG7gB,EAAH6gB,CAAM7T,EAAEsT,OAAO9P,EAAG,GAAE,CAAC,EAAEkU,GAAG,SAAS1kB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,IAAI3W,EAAE2W,GAAG,CAAC,EAAE4H,EAAEve,EAAEoqB,kBAAkBhyB,EAAEgpB,EAAEzpB,EAAEqI,EAAE,CAAC,uBAAuB,OAAOue,IAAInmB,EAAEooB,gBAAgB4J,kBAAkB,GAAGvJ,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOL,EAAEtb,KAAKqa,EAAE,2BAA2B/a,EAAEpJ,UAAUoW,IAAI/a,IAAG,SAAU+a,EAAEwD,GAAG,OAAOqQ,GAAG7gB,EAAH6gB,CAAM7T,EAAEsT,OAAO9P,EAAG,GAAE,CAAC,EAAEmU,GAAG,SAAS3kB,GAAG,OAAO,SAASgN,GAAG,OAAO4X,GAAG5kB,EAAH4kB,CAAM5X,GAAGH,MAAK,WAAY,OAAM,CAAG,IAAGI,OAAM,SAAUjN,GAAG,GAAG,MAAMA,EAAEyb,OAAO,MAAMzb,EAAE,OAAM,CAAG,GAAE,CAAC,EAAE6kB,GAAG,SAAS7kB,GAAG,OAAO,SAASgN,EAAEwD,EAAEhf,GAAG,OAAOwO,EAAEse,YAAYF,KAAK,CAAC/B,OAAOH,EAAExb,KAAKqa,EAAE,0BAA0B/a,EAAEpJ,WAAW2N,KAAK,CAACxN,MAAMiW,EAAEW,eAAe6C,GAAG2K,WAAU,GAAI3pB,EAAE,CAAC,EAAEszB,GAAG,SAAS9kB,GAAG,OAAO,SAASgN,EAAEoL,GAAG,IAAInmB,EAAEmmB,GAAG,CAAC,EAAEI,EAAEvmB,EAAE8E,MAAM0a,EAAExf,EAAE8yB,SAAS7K,EAAE1oB,EAAES,EAAE,CAAC,QAAQ,aAAasG,EAAE,EAAE,OAAO,SAAS/G,IAAI,OAAOwzB,GAAGhlB,EAAHglB,CAAMxM,GAAG,GAAGhI,EAAEA,EAAE,CAAC,EAAE0J,GAAG,CAAC,EAAE,CAAC9c,KAAK7E,KAAKsU,MAAK,SAAU7M,GAAG,IAAI,IAAIwQ,EAAE,EAAE4H,EAAEhiB,OAAOgjB,QAAQpZ,EAAE6R,MAAMrB,EAAE4H,EAAEhmB,OAAOoe,IAAI,CAAC,IAAIve,EAAE4H,EAAEue,EAAE5H,GAAG,GAAGgI,EAAEvmB,EAAE,GAAGioB,EAAEjoB,EAAE,GAAG,GAAG+a,EAAEkN,GAAG,MAAM,CAACjF,OAAOiF,EAAEvmB,SAASsxB,SAASzM,EAAE,IAAIpb,KAAK7E,EAAE,CAAC,GAAGA,KAAI,IAAKkZ,GAAGlZ,GAAGyH,EAAEklB,QAAQ,KAAK,CAAC9oB,KAAK,sBAAsBqgB,QAAQ,qBAAqB,OAAOjrB,GAAI,GAAE,CAA5T,EAA+T,CAAC,EAAE2zB,GAAG,SAASnlB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOxQ,EAAEse,YAAYF,KAAK,CAAC/B,OAAOJ,EAAEvb,KAAKqa,EAAE,kBAAkB/a,EAAEpJ,UAAUoW,IAAIwD,EAAE,CAAC,EAAE4U,GAAG,WAAW,OAAO,SAASplB,EAAEgN,GAAG,IAAI,IAAIwD,EAAE,EAAEhf,EAAE4E,OAAOgjB,QAAQpZ,EAAE6R,MAAMrB,EAAEhf,EAAEY,OAAOoe,IAAI,CAAC,IAAI4H,EAAEve,EAAErI,EAAEgf,GAAG,GAAGve,EAAEmmB,EAAE,GAAG,GAAGA,EAAE,GAAGb,WAAWvK,EAAE,OAAOiY,SAAShzB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,EAAEozB,GAAG,SAASrlB,GAAG,OAAO,SAASgN,EAAEnT,GAAG,IAAIue,EAAEve,GAAG,CAAC,EAAE5H,EAAEmmB,EAAEkN,qBAAqB9M,EAAEhnB,EAAE4mB,EAAE,CAAC,yBAAyB3G,EAAEzE,EAAElW,KAAI,SAAUkW,GAAG,OAAOwD,EAAE,CAAC5Z,UAAUoJ,EAAEpJ,UAAU2gB,SAASvK,GAAG/a,EAAE,CAACqzB,qBAAqBrzB,GAAG,CAAC,EAAG,IAAG,OAAO+N,EAAEse,YAAYF,KAAK,CAAC/B,OAAOH,EAAExb,KAAK,sBAAsB6D,KAAK,CAAC2b,SAASzO,IAAI+G,EAAE,CAAC,EAAE+M,GAAG,SAASvlB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOxQ,EAAEse,YAAYF,KAAK,CAAC/B,OAAOJ,EAAEvb,KAAKqa,EAAE,wBAAwB/a,EAAEpJ,UAAUoW,IAAIwD,EAAE,CAAC,EAAEoU,GAAG,SAAS5kB,GAAG,OAAO,SAASgN,GAAG,OAAOhN,EAAEse,YAAYF,KAAK,CAAC/B,OAAOJ,EAAEvb,KAAKqa,EAAE,wBAAwB/a,EAAEpJ,WAAW2N,KAAK,CAACihB,WAAW,IAAIxY,EAAE,CAAC,EAAEyY,GAAG,SAASzlB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOxQ,EAAEse,YAAYF,KAAK,CAAC/B,OAAOJ,EAAEvb,KAAKqa,EAAE,2BAA2B/a,EAAEpJ,UAAUoW,IAAIwD,EAAE,CAAC,EAAEkV,GAAG,SAAS1lB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOkK,EAAEiL,GAAG3lB,EAAH2lB,CAAM,CAAC3Y,GAAGwD,GAAG3D,MAAK,SAAU7M,GAAG,MAAM,CAACuX,SAASvX,EAAE8jB,UAAU,GAAGxD,OAAOtgB,EAAE6jB,QAAQ,GAAI,KAAG,SAAU7W,EAAEwD,GAAG,OAAOqQ,GAAG7gB,EAAH6gB,CAAM7T,EAAEsT,OAAO9P,EAAG,GAAE,CAAC,EAAEmV,GAAG,SAAS3lB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,IAAI3W,EAAE2W,GAAG,CAAC,EAAE4H,EAAEve,EAAE+rB,kBAAkB3zB,EAAET,EAAEqI,EAAE,CAAC,sBAAsB2e,EAAEJ,EAAEmM,GAAGsB,oBAAoBtB,GAAGuB,4BAA4B,OAAOnC,GAAG3jB,EAAH2jB,CAAM3W,EAAEwL,EAAEvmB,EAAE,CAAC,EAAE8zB,GAAG,SAAS/lB,GAAG,OAAO,SAASgN,EAAE/a,GAAG,IAAIumB,EAAEvmB,GAAG,CAAC,EAAEwf,EAAE+G,EAAEwN,KAAK9L,EAAE1B,EAAEyN,+BAA+B1tB,EAAEigB,EAAEoL,UAAU1P,EAAE1iB,EAAEgnB,EAAE,CAAC,OAAO,iCAAiC,cAAcsC,EAAE,SAAS9N,EAAEwD,EAAEhf,EAAEqI,GAAG,OAAO6gB,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOH,EAAExb,KAAKqa,EAAE,yBAAyB/N,GAAGzI,KAAK,CAACic,UAAUhvB,EAAEivB,YAAYjQ,IAAI3W,IAAG,SAAUmT,EAAEwD,GAAG,OAAOqQ,GAAG7gB,EAAH6gB,CAAM7T,EAAEsT,OAAO9P,EAAG,GAAE,EAAEzd,EAAEynB,KAAKK,SAASxX,SAAS,IAAI6iB,UAAU,GAAGjL,EAAE,GAAG/iB,OAAO8H,EAAEpJ,UAAU,SAASsB,OAAOnF,GAAGS,EAAE2yB,GAAG,CAAClE,MAAMjiB,EAAEiiB,MAAM3D,YAAYte,EAAEse,YAAY1nB,UAAUqkB,IAAI3iB,EAAE,GAAGwB,EAAEghB,EAAE9a,EAAEpJ,UAAUqkB,EAAE,OAAOzK,EAAEA,EAAE,CAAC,EAAE0D,GAAG,CAAC,EAAE,CAAC6M,MAAM,CAAC,WAAW,WAAW,YAAY,OAAOzoB,EAAErF,KAAK6G,GAAG4gB,GAAGjJ,EAAE3X,EAAE6gB,KAAKzG,GAAGpa,GAAG+S,MAAK,WAAY,IAAI7M,EAAExM,EAAEwZ,EAAEwD,EAAEA,EAAE,CAAC,EAAE0D,GAAG,CAAC,EAAE,CAAC+R,+BAA+B/L,EAAE0J,UAAUrrB,KAAK,OAAOD,EAAErF,KAAK+M,GAAGyR,EAAEzR,EAAE2a,KAAKzG,GAAGlU,CAAE,IAAG6M,MAAK,WAAY,IAAIG,EAAE8N,EAAEG,EAAEjb,EAAEpJ,UAAU,OAAOsd,GAAG,OAAO5b,EAAErF,KAAK+Z,GAAGyE,EAAEzE,EAAE2N,KAAKzG,GAAGlH,CAAE,IAAGH,MAAK,WAAY,OAAOO,QAAQsM,IAAIphB,EAAG,IAAGuU,MAAK,SAAU7M,GAAG,IAAIgN,EAAEnT,EAAEmG,EAAE,GAAGwQ,EAAExD,EAAE,GAAGxb,EAAEwb,EAAE,GAAG/a,EAAE+a,EAAE,GAAG,MAAM,CAAC8W,UAAUtyB,EAAEsyB,UAAUD,QAAQ,CAACrT,EAAE8P,QAAQpoB,OAAOkgB,EAAE5mB,EAAEqyB,SAAS,CAAC5xB,EAAEquB,SAAU,KAAG,SAAUtgB,EAAEgN,GAAG,OAAOI,QAAQsM,IAAIphB,EAAExB,KAAI,SAAUkJ,GAAG,OAAOA,EAAE2a,KAAK3N,EAAG,IAAI,GAAE,CAAC,EAAEoZ,GAAG,SAASpmB,GAAG,OAAO,SAASgN,EAAExb,GAAG,OAAO60B,GAAGrmB,EAAHqmB,CAAMrZ,EAAEwD,EAAEA,EAAE,CAAC,EAAEhf,GAAG,CAAC,EAAE,CAAC80B,oBAAmB,IAAK,CAAC,EAAEC,GAAG,SAASvmB,GAAG,OAAO,SAASgN,EAAExb,GAAG,OAAOg1B,GAAGxmB,EAAHwmB,CAAMxZ,EAAEwD,EAAEA,EAAE,CAAC,EAAEhf,GAAG,CAAC,EAAE,CAACi1B,uBAAsB,IAAK,CAAC,EAAEC,GAAG,SAAS1mB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOkK,EAAEyL,GAAGnmB,EAAHmmB,CAAM,CAACnZ,GAAGwD,GAAG3D,MAAK,SAAU7M,GAAG,MAAM,CAACuX,SAASvX,EAAE8jB,UAAU,GAAGxD,OAAOtgB,EAAE6jB,QAAQ,GAAI,KAAG,SAAU7W,EAAEwD,GAAG,OAAOqQ,GAAG7gB,EAAH6gB,CAAM7T,EAAEsT,OAAO9P,EAAG,GAAE,CAAC,EAAE2V,GAAG,SAASnmB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,IAAI3W,EAAE2W,GAAG,CAAC,EAAE4H,EAAEve,EAAEosB,+BAA+Bh0B,EAAET,EAAEqI,EAAE,CAAC,mCAAmC2e,EAAEJ,EAAEmM,GAAGoC,UAAUpC,GAAGqC,aAAa,GAAGpO,IAAI+L,GAAGqC,aAAa,CAAC,IAAInV,GAAE,EAAGyI,GAAE,EAAG3hB,OAAE,EAAO,IAAI,IAAI,IAAI2b,EAAE4G,EAAE9N,EAAEsL,OAAOC,cAAc9G,GAAGyC,EAAE4G,EAAErC,QAAQC,MAAMjH,GAAE,EAAI,QAAG,IAASyC,EAAEpc,MAAMyf,SAAS,OAAOmD,EAAEtN,QAAQmR,OAAO,CAACniB,KAAK,uBAAuBqgB,QAAQ,yOAA0O,CAAC,MAAMzc,GAAGka,GAAE,EAAG3hB,EAAEyH,CAAC,CAAC,QAAQ,IAAIyR,GAAG,MAAMqJ,EAAEnC,QAAQmC,EAAEnC,QAAQ,CAAC,QAAQ,GAAGuB,EAAE,MAAM3hB,CAAC,CAAC,CAAC,CAAC,OAAOorB,GAAG3jB,EAAH2jB,CAAM3W,EAAEwL,EAAEvmB,EAAE,CAAC,EAAE40B,GAAG,SAAS7mB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAO6V,GAAGrmB,EAAHqmB,CAAM,CAACrZ,GAAGwD,EAAE,CAAC,EAAE6V,GAAG,SAASrmB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,IAAI3W,EAAE2W,GAAG,CAAC,EAAE4H,EAAEve,EAAEoqB,kBAAkBhyB,EAAE4H,EAAEysB,mBAAmB9N,EAAEyC,EAAEzpB,EAAEqI,EAAE,CAAC,oBAAoB,wBAAwB,OAAOue,IAAII,EAAE6B,gBAAgB4J,kBAAkB,GAAGhyB,IAAIumB,EAAE6B,gBAAgBiM,mBAAmB,GAAG5L,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOH,EAAExb,KAAKqa,EAAE,2BAA2B/a,EAAEpJ,WAAW2N,KAAKyI,GAAGwL,IAAG,SAAUxL,EAAEwD,GAAG,OAAOqQ,GAAG7gB,EAAH6gB,CAAM7T,EAAEsT,OAAO9P,EAAG,GAAE,CAAC,EAAEsW,GAAG,SAAS9mB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOgW,GAAGxmB,EAAHwmB,CAAM,CAACxZ,GAAGwD,EAAE,CAAC,EAAEgW,GAAG,SAASxmB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,IAAI3W,EAAE2W,GAAG,CAAC,EAAE4H,EAAEve,EAAEoqB,kBAAkBhyB,EAAE4H,EAAE4sB,sBAAsBjO,EAAE3e,EAAEktB,wBAAwBtV,EAAEwJ,EAAEzpB,EAAEqI,EAAE,CAAC,oBAAoB,wBAAwB,6BAA6B,OAAOue,IAAI3G,EAAE4I,gBAAgB4J,kBAAkB,IAAIzL,GAAGvmB,KAAKwf,EAAE4I,gBAAgB0M,wBAAwB,GAAGrM,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOH,EAAExb,KAAKqa,EAAE,8BAA8B/a,EAAEpJ,WAAW2N,KAAKyI,GAAGyE,IAAG,SAAUzE,EAAEwD,GAAG,OAAOqQ,GAAG7gB,EAAH6gB,CAAM7T,EAAEsT,OAAO9P,EAAG,GAAE,CAAC,EAAEwU,GAAG,SAAShlB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOxQ,EAAEse,YAAYF,KAAK,CAAC/B,OAAOH,EAAExb,KAAKqa,EAAE,qBAAqB/a,EAAEpJ,WAAW2N,KAAK,CAACxN,MAAMiW,GAAGmO,WAAU,GAAI3K,EAAE,CAAC,EAAEmS,GAAG,SAAS3iB,GAAG,OAAO,SAASgN,EAAEwD,EAAEhf,GAAG,OAAOwO,EAAEse,YAAYF,KAAK,CAAC/B,OAAOH,EAAExb,KAAKqa,EAAE,+BAA+B/a,EAAEpJ,UAAUoW,GAAGzI,KAAK,CAAC2S,WAAW1G,GAAG2K,WAAU,GAAI3pB,EAAE,CAAC,EAAE+xB,GAAG,SAASvjB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOxQ,EAAEse,YAAYF,KAAK,CAAC/B,OAAOH,EAAExb,KAAKqa,EAAE,4BAA4B/a,EAAEpJ,WAAW2N,KAAK,CAACxN,MAAMiW,IAAIwD,EAAE,CAAC,EAAEkT,GAAG,SAAS1jB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOxQ,EAAEse,YAAYF,KAAK,CAAC/B,OAAOH,EAAExb,KAAKqa,EAAE,+BAA+B/a,EAAEpJ,WAAW2N,KAAK,CAACxN,MAAMiW,IAAIwD,EAAE,CAAC,EAAEwW,GAAG,SAAShnB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,IAAI3W,EAAE2W,GAAG,CAAC,EAAE4H,EAAEve,EAAEoqB,kBAAkBhyB,EAAEgpB,EAAEzpB,EAAEqI,EAAE,CAAC,uBAAuB,OAAOue,IAAInmB,EAAEooB,gBAAgB4J,kBAAkB,GAAGvJ,EAAE1a,EAAEse,YAAYE,MAAM,CAACnC,OAAOF,EAAEzb,KAAKqa,EAAE,wBAAwB/a,EAAEpJ,WAAW2N,KAAKyI,GAAG/a,IAAG,SAAU+a,EAAEwD,GAAG,OAAOqQ,GAAG7gB,EAAH6gB,CAAM7T,EAAEsT,OAAO9P,EAAG,GAAE,CAAC,EAAEqQ,GAAG,SAAS7gB,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOjY,GAAE,SAAU/G,GAAG,OAAO,SAASwO,GAAG,OAAO,SAASgN,EAAEwD,GAAG,OAAOxQ,EAAEse,YAAYF,KAAK,CAAC/B,OAAOJ,EAAEvb,KAAKqa,EAAE,uBAAuB/a,EAAEpJ,UAAUoW,EAAE3J,aAAamN,EAAE,CAAC,CAAjI,CAAmIxQ,EAAnI,CAAsIgN,EAAEwD,GAAG3D,MAAK,SAAU7M,GAAG,MAAM,cAAcA,EAAEyb,OAAOjqB,SAAI,CAAO,GAAG,GAAE,CAAC,EAAE+yB,GAAG,CAACoC,UAAU,YAAYC,aAAa,eAAef,oBAAoB,sBAAsBC,4BAA4B,8BAA8BtB,aAAa,eAAeyC,YAAY,SAASC,WAAW,SAASlG,GAAG,CAACG,SAAS,WAAWE,SAAS,WAAWJ,MAAM,SAA4BkG,GAAG,SAASnnB,GAAG,OAAO,SAASgN,EAAExb,GAAG,IAAIqI,EAAEmT,EAAElW,KAAI,SAAUkJ,GAAG,OAAOwQ,EAAEA,EAAE,CAAC,EAAExQ,GAAG,CAAC,EAAE,CAAChJ,UAAUgJ,EAAEhJ,WAAW,GAAI,IAAG,OAAOgJ,EAAEse,YAAYF,KAAK,CAAC/B,OAAOH,EAAExb,KAAK,8BAA8B6D,KAAK,CAAC2b,SAASrmB,GAAGshB,WAAU,GAAI3pB,EAAE,CAAC,EAAE41B,GAAG,SAASpnB,GAAG,OAAO,SAASgN,EAAExb,GAAG,OAAO21B,GAAGnnB,EAAHmnB,CAAMna,EAAElW,KAAI,SAAUkJ,GAAG,OAAOwQ,EAAEA,EAAE,CAAC,EAAExQ,GAAG,CAAC,EAAE,CAACqnB,mBAAmB,CAAC,EAAE/wB,MAAM,mBAAoB,IAAG9E,EAAE,CAAC,EAAE81B,GAAG,SAAStnB,GAAG,OAAO,SAASgN,EAAExb,GAAG,OAAO21B,GAAGnnB,EAAHmnB,CAAMna,EAAElW,KAAI,SAAUkJ,GAAG,OAAOwQ,EAAEA,EAAE,CAAC,EAAExQ,GAAG,CAAC,EAAE,CAAC1J,MAAM,oBAAqB,IAAG9E,EAAE,CAAC,EAAE+1B,GAAG,SAASvnB,GAAG,OAAO,SAASgN,EAAExb,GAAG,IAAIqI,EAAEmT,EAAElW,KAAI,SAAUkJ,GAAG,OAAOwQ,EAAEA,EAAE,CAAC,EAAExQ,GAAG,CAAC,EAAE,CAAC1J,MAAM,kBAAkBU,UAAUgJ,EAAEhJ,WAAW,GAAI,IAAG,OAAOgJ,EAAEse,YAAYF,KAAK,CAAC/B,OAAOH,EAAExb,KAAK,8BAA8B6D,KAAK,CAAC2b,SAASrmB,GAAGshB,WAAU,GAAI3pB,EAAE,CAAC,EAAEg2B,GAAG,SAASxnB,GAAG,OAAO,SAASgN,EAAExb,GAAG,IAAIqI,EAAEmT,EAAElW,KAAI,SAAUkJ,GAAG,OAAOwQ,EAAEA,EAAE,CAAC,EAAExQ,GAAG,CAAC,EAAE,CAAC1J,MAAM,iBAAiBU,UAAUgJ,EAAEhJ,WAAW,GAAI,IAAG,OAAOgJ,EAAEse,YAAYF,KAAK,CAAC/B,OAAOH,EAAExb,KAAK,8BAA8B6D,KAAK,CAAC2b,SAASrmB,GAAGshB,WAAU,GAAI3pB,EAAE,CAAC,EAAEi2B,GAAG,SAASznB,GAAG,OAAO,SAASgN,EAAExb,GAAG,OAAO21B,GAAGnnB,EAAHmnB,CAAMna,EAAElW,KAAI,SAAUkJ,GAAG,OAAOwQ,EAAEA,EAAE,CAAC,EAAExQ,GAAG,CAAC,EAAE,CAAC1J,MAAM,mBAAoB,IAAG9E,EAAE,CAAC,EAAEk2B,GAAG,SAAS1nB,GAAG,OAAO,SAASgN,EAAExb,GAAG,IAAIqI,EAAEmT,EAAElW,KAAI,SAAUkJ,GAAG,OAAOwQ,EAAEA,EAAE,CAAC,EAAExQ,GAAG,CAAC,EAAE,CAAC1J,MAAM,sBAAsBU,UAAUgJ,EAAEhJ,WAAW,GAAI,IAAG,OAAOgJ,EAAEse,YAAYF,KAAK,CAAC/B,OAAOH,EAAExb,KAAK,8BAA8B6D,KAAK,CAAC2b,SAASrmB,GAAGshB,WAAU,GAAI3pB,EAAE,CAAC,EAAE,SAASm2B,GAAG3nB,EAAEgN,EAAExb,GAAG,IAAM4mB,EAAE,CAAC6J,MAAMjiB,EAAE4nB,OAAO5a,EAAE8P,SAAS,CAACC,QAAQ,EAAEqB,KAAK,EAAEI,MAAM,IAAIZ,UAAU,CAACC,KAAK,SAAS7d,GAAG,OAAO,IAAIoN,SAAQ,SAAUJ,GAAG,IAAIwD,EAAE,IAAIqX,eAAerX,EAAEsX,KAAK9nB,EAAEqc,OAAOrc,EAAE8b,KAAI,GAAI1lB,OAAOwC,KAAKoH,EAAEma,SAAS7iB,SAAQ,SAAU0V,GAAG,OAAOwD,EAAEuX,iBAAiB/a,EAAEhN,EAAEma,QAAQnN,GAAI,IAAG,IAAIxb,EAAEqI,EAAE,SAASmG,EAAExO,GAAG,OAAO+oB,YAAW,WAAY/J,EAAEwX,QAAQhb,EAAE,CAACyO,OAAO,EAAE3O,QAAQtb,EAAE8rB,YAAW,GAAK,GAAE,IAAItd,EAAE,EAAEoY,EAAEve,EAAEmG,EAAE6c,eAAe,sBAAsBrM,EAAEyX,mBAAmB,WAAWzX,EAAE0X,WAAW1X,EAAE2X,aAAQ,IAAS32B,IAAI42B,aAAahQ,GAAG5mB,EAAEqI,EAAEmG,EAAEgd,gBAAgB,kBAAkB,EAAExM,EAAE6X,QAAQ,WAAW,IAAI7X,EAAEiL,SAAS2M,aAAahQ,GAAGgQ,aAAa52B,GAAGwb,EAAE,CAACF,QAAQ0D,EAAE8X,cAAc,yBAAyB7M,OAAOjL,EAAEiL,OAAO6B,YAAW,IAAK,EAAE9M,EAAE+X,OAAO,WAAWH,aAAahQ,GAAGgQ,aAAa52B,GAAGwb,EAAE,CAACF,QAAQ0D,EAAE8X,aAAa7M,OAAOjL,EAAEiL,OAAO6B,YAAW,GAAI,EAAE9M,EAAEqN,KAAK7d,EAAEuE,KAAM,GAAE,GAAGgZ,QAAvpE,EAAoqE,CAACiL,MAAM,SAASxoB,EAAEgN,GAAG,OAAiCI,QAAQC,SAAS,EAAEmQ,KAAK,SAASxd,EAAEgN,GAAG,OAAgCI,QAAQC,SAAS,EAAElb,MAAM,SAAS6N,EAAEgN,GAAG,OAAO7Z,QAAQhB,MAAM6N,EAAEgN,GAAGI,QAAQC,SAAS,IAAI6Q,eAAezM,IAAIwM,cAAcxM,EAAE,CAACwI,cAAa,IAAKyD,WAAWlF,EAAE,CAACuB,OAAO,CAAC9nB,EAAE,CAAC6B,IAAI,GAAGoE,OAAO,SAAS,KAAKA,OAAO8H,KAAKyR,OAAO8K,UAAUkC,EAAE,UAAUC,IAAI,CAACpJ,QAAQ,aAAa/c,EAAEiY,EAAEA,EAAE,CAAC,EAAE4H,GAAG5mB,GAAGkpB,EAAE,WAAW,OAAO,SAAS1a,GAAG,OAAO,SAASA,GAAG,IAAIgN,EAAEhN,EAAEyoB,QAAQ,KAAKj3B,EAAE0oB,EAAEnnB,EAAEqnB,cAAcpa,EAAEiiB,MAAMjiB,EAAE4nB,QAAQ/tB,EAAEwB,EAAEmV,EAAEA,EAAE,CAAC2N,MAAM,CAAC,CAACrC,IAAI,mBAAmB5jB,OAAO8U,EAAE,mBAAmBhN,GAAG,CAAC,EAAE,CAACma,QAAQ3J,EAAEA,EAAEA,EAAE,CAAC,EAAEhf,EAAE2oB,WAAW,CAAC,eAAe,qBAAqBna,EAAEma,SAASE,gBAAgB7J,EAAEA,EAAE,CAAC,EAAEhf,EAAE6oB,mBAAmBra,EAAEqa,oBAAoB,OAAOS,EAAE,CAACmH,MAAMjiB,EAAEiiB,MAAM3D,YAAYzkB,GAAGmG,EAAE2gB,QAAQ,CAAnV,CAAqVnQ,EAAEA,EAAEA,EAAE,CAAC,EAAE4H,GAAGpY,GAAG,CAAC,EAAE,CAAC2gB,QAAQ,CAAC+H,2BAA2BvJ,EAAEwJ,2BAA2BvJ,KAAK,CAAC,EAAE,OAAO,SAASpf,GAAG,IAAIgN,EAAEhN,EAAEiiB,MAAMzwB,EAAE0oB,OAAE,IAASla,EAAE4oB,SAAS5oB,EAAE4oB,SAAS71B,EAAEqnB,cAAcpN,EAAEhN,EAAE4nB,QAAQ/tB,EAAEwB,EAAEmV,EAAEA,EAAE,CAAC2N,MAAM,CAAC,CAACrC,IAAI,GAAG5jB,OAAO8U,EAAE,oBAAoB+O,OAAOvoB,EAAE4nB,MAAM,CAACU,IAAI,GAAG5jB,OAAO8U,EAAE,gBAAgB+O,OAAOvoB,EAAE6nB,QAAQnjB,OAAOgc,EAAE,CAAC,CAAC4H,IAAI,GAAG5jB,OAAO8U,EAAE,sBAAsB,CAAC8O,IAAI,GAAG5jB,OAAO8U,EAAE,sBAAsB,CAAC8O,IAAI,GAAG5jB,OAAO8U,EAAE,0BAA0BhN,GAAG,CAAC,EAAE,CAACma,QAAQ3J,EAAEA,EAAEA,EAAE,CAAC,EAAEhf,EAAE2oB,WAAW,CAAC,eAAe,sCAAsCna,EAAEma,SAASE,gBAAgB7J,EAAEA,EAAE,CAAC,EAAEhf,EAAE6oB,mBAAmBra,EAAEqa,oBAAoB,OAAOS,EAAE,CAACwD,YAAYzkB,EAAEooB,MAAMjV,EAAEhC,gBAAgB,SAAShL,EAAEgN,GAAGnT,EAAE0iB,UAAUmC,IAAI,CAACpJ,QAAQtV,EAAEpL,QAAQoY,GAAG,EAAEmF,WAAW,WAAW,OAAO/E,QAAQsM,IAAI,CAAC7f,EAAEokB,cAAcpE,QAAQhgB,EAAEqkB,eAAerE,UAAUhN,MAAK,WAAa,GAAE,GAAG7M,EAAE2gB,QAAQ,CAA9tB,CAAguBnQ,EAAEA,EAAE,CAAC,EAAEjY,GAAG,CAAC,EAAE,CAACooB,QAAQ,CAAC3U,OAAOyW,GAAG7U,qBAAqB8U,GAAGmG,cAActG,GAAGuG,mBAAmBtG,GAAGuG,gBAAgBtG,GAAGuG,UAAUzI,EAAE0I,aAAa/H,EAAEgI,aAAa9H,EAAE+H,UAAUrI,EAAEsI,UAAU9G,GAAG+G,YAAYjH,GAAGkH,QAAQ3H,GAAG4H,aAAapH,GAAGqH,6BAA6B9G,GAAG+G,UAAU9J,EAAG+J,UAAUjK,EAAEkK,YAAYzH,GAAG0H,aAAazG,GAAG0G,aAAatI,EAAEuI,cAAchH,GAAGiH,aAAanK,EAAEoK,cAAclK,EAAEmK,UAAUpI,GAAGqI,cAAcjH,GAAGkH,YAAY9H,GAAG+H,cAAcxI,GAAGyI,aAAazH,GAAG0H,mBAAmBxI,GAAGyI,uBAAuBvK,EAAEwK,wBAAwBhJ,EAAEiJ,sBAAsB/I,GAAGgJ,WAAWjJ,GAAGkJ,yBAAyB9H,GAAG+H,sBAAsB7H,GAAG8H,wBAAwB7H,GAAG8H,sBAAsB5H,GAAG6H,YAAY1K,GAAG2K,cAAc1J,EAAE5T,UAAU,SAAS1N,GAAG,OAAO,SAASgN,GAAG,OAAO0T,GAAG1gB,EAAH0gB,CAAM1T,EAAE,CAAC2T,QAAQ,CAACrB,MAAM8D,GAAGxJ,OAAOwK,GAAGlX,YAAY2X,GAAGoG,UAAU9F,GAAG+F,WAAW7F,GAAG8F,WAAWzE,GAAG0E,YAAYjF,GAAGna,OAAOgZ,GAAGpX,qBAAqB+U,GAAG/B,SAASC,GAAGwK,YAAYrE,GAAGsE,YAAY1G,GAAG2G,oBAAoB7F,GAAG8F,qBAAqB7F,GAAG8F,aAAapH,GAAGqH,cAAcpH,GAAGqH,SAASxH,GAAGyH,aAAa7H,GAAG8H,cAAcxI,GAAGyI,kBAAkB1G,GAAG2G,WAAWjH,GAAGkH,OAAOrH,GAAGsH,YAAYnF,GAAGoF,aAAa1F,GAAG2F,WAAW1G,GAAG2G,eAAe1I,GAAG2I,eAAe5I,GAAG6I,cAAc5H,GAAG6H,cAAcrI,GAAGsI,kBAAkBzG,GAAG0G,mBAAmBlG,GAAGmG,YAAYnJ,GAAGoJ,QAAQpH,GAAGqH,WAAWnI,GAAGoI,SAAShG,GAAGiG,UAAUzG,GAAG0G,gBAAgB3G,GAAG4G,YAAY1J,GAAG2J,WAAWjJ,KAAK,CAAC,EAAEkJ,cAAc,WAAW,OAAO,SAASltB,GAAG,OAAO,SAASA,GAAG,IAAIgN,EAAEhN,EAAEyoB,QAAQ,KAAKj3B,EAAE0oB,EAAEnnB,EAAEqnB,cAAcpa,EAAEiiB,MAAMjiB,EAAE4nB,QAAQ/tB,EAAEwB,EAAEmV,EAAEA,EAAE,CAAC2N,MAAM,CAAC,CAACrC,IAAI,aAAa5jB,OAAO8U,EAAE,mBAAmBhN,GAAG,CAAC,EAAE,CAACma,QAAQ3J,EAAEA,EAAEA,EAAE,CAAC,EAAEhf,EAAE2oB,WAAW,CAAC,eAAe,qBAAqBna,EAAEma,SAASE,gBAAgB7J,EAAEA,EAAE,CAAC,EAAEhf,EAAE6oB,mBAAmBra,EAAEqa,oBAAoB,OAAOS,EAAE,CAACmH,MAAMjiB,EAAEiiB,MAAM3D,YAAYzkB,GAAGmG,EAAE2gB,QAAQ,CAA7U,CAA+UnQ,EAAEA,EAAEA,EAAE,CAAC,EAAE4H,GAAGpY,GAAG,CAAC,EAAE,CAAC2gB,QAAQ,CAACwM,UAAUrO,EAAEsO,UAAUpO,EAAEqO,WAAWpO,EAAEqO,WAAWpO,EAAEqO,aAAaxO,KAAK,CAAC,EAAEyO,oBAAoB9S,EAAE+S,mBAAmB,WAAW,OAAO,SAASztB,GAAG,OAAOzH,EAAEglB,OAAOC,KAAK,qFAAqF9C,IAAI1a,EAAE,CAAC,EAAEsR,mBAAmB6V,GAAGuG,4BAA4BtG,GAAGuG,kBAAkBlG,GAAGmG,qBAAqBlG,GAAGmG,mBAAmBvG,GAAGwG,kBAAkBvG,GAAGwG,iBAAiBvG,MAAM,CAAC,OAAOG,GAAG/yB,QAAQ,SAAS+yB,EAAG,CAAljkC3a,2BCyBnF,SAAS+G,EAAeI,EAAK6Z,GAC3B,OAAO53B,OAAO/E,UAAU0iB,eAAethB,KAAK0hB,EAAK6Z,EACnD,CAEA78B,EAAOC,QAAU,SAAS68B,EAAIC,EAAKC,EAAIhoB,GACrC+nB,EAAMA,GAAO,IACbC,EAAKA,GAAM,IACX,IAAIha,EAAM,CAAC,EAEX,GAAkB,iBAAP8Z,GAAiC,IAAdA,EAAG77B,OAC/B,OAAO+hB,EAGT,IAAIia,EAAS,MACbH,EAAKA,EAAG/qB,MAAMgrB,GAEd,IAAIG,EAAU,IACVloB,GAAsC,iBAApBA,EAAQkoB,UAC5BA,EAAUloB,EAAQkoB,SAGpB,IAAIt8B,EAAMk8B,EAAG77B,OAETi8B,EAAU,GAAKt8B,EAAMs8B,IACvBt8B,EAAMs8B,GAGR,IAAK,IAAIp8B,EAAI,EAAGA,EAAIF,IAAOE,EAAG,CAC5B,IAEIq8B,EAAMC,EAAMlzB,EAAG/C,EAFf2jB,EAAIgS,EAAGh8B,GAAGkW,QAAQimB,EAAQ,OAC1BtoB,EAAMmW,EAAE5iB,QAAQ80B,GAGhBroB,GAAO,GACTwoB,EAAOrS,EAAE4C,OAAO,EAAG/Y,GACnByoB,EAAOtS,EAAE4C,OAAO/Y,EAAM,KAEtBwoB,EAAOrS,EACPsS,EAAO,IAGTlzB,EAAImzB,mBAAmBF,GACvBh2B,EAAIk2B,mBAAmBD,GAElBxa,EAAeI,EAAK9Y,GAEd3I,MAAMqH,QAAQoa,EAAI9Y,IAC3B8Y,EAAI9Y,GAAGpI,KAAKqF,GAEZ6b,EAAI9Y,GAAK,CAAC8Y,EAAI9Y,GAAI/C,GAJlB6b,EAAI9Y,GAAK/C,CAMb,CAEA,OAAO6b,CACT,0BCxDA,IAAIsa,EAAqB,SAASn2B,GAChC,cAAeA,GACb,IAAK,SACH,OAAOA,EAET,IAAK,UACH,OAAOA,EAAI,OAAS,QAEtB,IAAK,SACH,OAAOo2B,SAASp2B,GAAKA,EAAI,GAE3B,QACE,MAAO,GAEb,EAEAnH,EAAOC,QAAU,SAAS+iB,EAAK+Z,EAAKC,EAAI/xB,GAOtC,OANA8xB,EAAMA,GAAO,IACbC,EAAKA,GAAM,IACC,OAARha,IACFA,OAAMrjB,GAGW,iBAARqjB,EACF/d,OAAOwC,KAAKub,GAAKrd,KAAI,SAASuE,GACnC,IAAIszB,EAAK3T,mBAAmByT,EAAmBpzB,IAAM8yB,EACrD,OAAIz7B,MAAMqH,QAAQoa,EAAI9Y,IACb8Y,EAAI9Y,GAAGvE,KAAI,SAASwB,GACzB,OAAOq2B,EAAK3T,mBAAmByT,EAAmBn2B,GACpD,IAAGid,KAAK2Y,GAEDS,EAAK3T,mBAAmByT,EAAmBta,EAAI9Y,IAE1D,IAAGka,KAAK2Y,GAIL9xB,EACE4e,mBAAmByT,EAAmBryB,IAAS+xB,EAC/CnT,mBAAmByT,EAAmBta,IAF3B,EAGpB,gCC7DA/iB,EAAQw9B,OAASx9B,EAAQ2nB,MAAQ,EAAhB,OACjB3nB,EAAQy9B,OAASz9B,EAAQmS,UAAY,EAApB,mCCHJnN,OAAO2hB,eAAe3mB,EAAtB,cAA4C0G,OAAM,IAAK,IAAIlD,EAAQ,SAAS,SAASk6B,EAAwB9hB,GAAG,OAAOA,EAAEnU,QAAO,SAASmU,EAAEhN,GAAG,IAAIxO,EAAEwb,EAAE+hB,OAA4B,OAArB/hB,EAAEA,EAAEkJ,iBAAuB,UAAUlW,EAAE,CAACkW,iBAAiBlJ,EAAE+hB,OAAOv9B,EAAE0G,OAAO,CAAC8H,KAAK,CAAC+uB,OAAOv9B,EAAE0kB,iBAAiBlW,EAAE,GAAE,CAAC+uB,OAAO,GAAG7Y,sBAAiB,GAAQ,CAAC,IAAgWhlB,EAAY,SAAS8b,GAAG,YAAO,IAASA,CAAC,EAAiDjc,EAAW,SAASic,GAAG,MAAM,mBAAmBA,CAAC,EAAE,SAASgiB,EAAuB/8B,GAAG,OAAO,SAAS+a,GAAG,IAAI,IAAIhN,EAAE,GAAGxO,EAAEa,UAAUD,OAAO,EAAE,EAAEZ,KAAKwO,EAAExO,GAAGa,UAAUb,EAAE,GAAGwb,GAAGjc,EAAWkB,EAAE+a,IAAI/a,EAAE+a,GAAGpa,MAAMX,EAAE+N,GAAG7M,QAAQkH,KAAK,eAAe2S,EAAE,mBAAmB,CAAC,CAAC,IAAIiiB,EAAuB,CAAC,gBAAgBr6B,EAAQ,IAAI,4BAA4BA,EAAQ,KAAK,SAASoW,EAAgBgC,IAAI,IAAIrc,KAAKu+B,IAAI71B,QAAQ2T,IAAIrc,KAAKu+B,IAAIj8B,KAAK+Z,EAAE,CAAC,SAASwY,EAAWxY,GAAGjc,EAAWic,IAAIA,EAAErc,KAAKiE,QAAQ,CAAC,SAASu6B,EAAOniB,EAAEhN,GAAG,IAAIxO,EAAE,CAAC,EAAE,IAAIigB,KAAKzE,EAAE5W,OAAO/E,UAAU0iB,eAAethB,KAAKua,EAAEyE,IAAIzR,EAAE3G,QAAQoY,GAAG,IAAIjgB,EAAEigB,GAAGzE,EAAEyE,IAAI,GAAG,MAAMzE,GAAG,mBAAmB5W,OAAO4hB,sBAAsB,IAAI,IAAI/lB,EAAE,EAAEwf,EAAErb,OAAO4hB,sBAAsBhL,GAAG/a,EAAEwf,EAAErf,OAAOH,IAAI+N,EAAE3G,QAAQoY,EAAExf,IAAI,GAAGmE,OAAO/E,UAAUgnB,qBAAqB5lB,KAAKua,EAAEyE,EAAExf,MAAMT,EAAEigB,EAAExf,IAAI+a,EAAEyE,EAAExf,KAAK,OAAOT,CAAC,CAAu6C,SAAS49B,IAAa,MAAM,uCAAuCjnB,QAAQ,SAAQ,SAAS6E,GAAG,IAAIhN,EAAE,GAAGwa,KAAKK,SAAS,EAAE,OAAO,MAAM7N,EAAEhN,EAAE,EAAEA,EAAE,GAAGqD,SAAS,GAAG,GAAE,CAAC,IAAIgsB,EAAW,WAAWC,EAAM,OAA+V,SAASC,EAAsBviB,IAAIA,OAAE,IAASA,GAAGA,GAAGrc,KAAK6+B,aAAa,aAAaJ,KAAnuG,WAAW,IAAI,OAAOj2B,QAAQs2B,UAAUC,cAAc,CAAC,MAAM1iB,GAAG,OAAM,CAAE,CAAC,CAAwqG2iB,MAAqB3iB,EAA1T,SAASA,GAAG,IAAI,IAAIhN,EAAEgN,EAAE,IAAIxb,EAAEo+B,SAASC,OAAO3sB,MAAM,KAAKjR,EAAE,EAAEA,EAAET,EAAEY,OAAOH,IAAI,CAAC,IAAI,IAAIwf,EAAEjgB,EAAES,GAAG,MAAMwf,EAAEmN,OAAO,IAAInN,EAAEA,EAAEyU,UAAU,GAAG,GAAG,IAAIzU,EAAEpY,QAAQ2G,GAAG,OAAOyR,EAAEyU,UAAUlmB,EAASyR,EAAErf,OAAO,CAAC,MAAM,EAAE,CAA0H09B,CAAUT,KAAc,KAAKriB,GAAG,IAAIA,EAAE3T,QAAQ,cAAc1I,KAAK6+B,aAAaxiB,IAAIA,EAAErc,KAAK6+B,aAAa,aAAaJ,KAAzjB,SAASpiB,EAAEhN,EAAExO,GAAG,IAAIS,EAAE,IAAIqnB,KAAQrnB,EAAE89B,QAAQ99B,EAAEsnB,UAAU/nB,GAAzBA,EAA4B,WAAWS,EAAE+9B,cAAeJ,SAASC,OAAO7iB,EAAE,IAAIhN,EAAE,IAAIxO,EAAE,SAAS,CAAycy+B,CAAUZ,EAAWriB,EAAErc,KAAKu/B,kBAAkB,CAAC,SAASV,EAAaxiB,GAAG,OAAOrc,KAAKw/B,WAAWnjB,EAAEjc,EAAWJ,KAAKy/B,6BAA6Bz/B,KAAKy/B,2BAA2Bz/B,KAAKw/B,YAAYx/B,KAAKw/B,UAAU,CAAC,SAASE,EAAarjB,EAAEhN,GAAG,OAAOjP,EAAWiP,IAAIA,EAAE,KAAKrP,KAAKw/B,YAAYx/B,KAAKw/B,UAAU,CAAC,SAASG,EAAkBtjB,EAAEhN,GAAGrP,KAAKy/B,2BAA2BpjB,EAAEhN,GAAGA,EAAEuwB,WAAWx/B,EAAWJ,KAAKy/B,6BAA6Bz/B,KAAKy/B,2BAA2Bz/B,KAAKw/B,WAAW,CAAC,SAASK,EAA0BxjB,GAAG,OAAOrc,KAAK8/B,wBAAwBzjB,EAAEjc,EAAWJ,KAAK+/B,0CAA0C//B,KAAK+/B,wCAAwC//B,KAAK8/B,yBAAyB9/B,KAAK8/B,uBAAuB,CAAC,SAASE,EAA0B3jB,EAAEhN,GAAG,OAAOjP,EAAWiP,IAAIA,EAAE,KAAKrP,KAAK8/B,yBAAyB9/B,KAAK8/B,uBAAuB,CAAC,SAASG,EAA+B5jB,EAAEhN,GAAGrP,KAAK+/B,wCAAwC1jB,EAAEhN,GAAGA,EAAEuwB,WAAWx/B,EAAWJ,KAAK+/B,0CAA0C//B,KAAK+/B,wCAAwC//B,KAAK8/B,wBAAwB,CAAC,SAASI,EAAa7wB,EAAEgN,GAAG,OAAOA,EAAElW,KAAI,SAASkW,GAAG,OAAO5W,OAAOC,OAAO,CAACy6B,UAAU9wB,GAAGgN,EAAE,GAAE,CAAC,SAAS+jB,EAAuB/wB,EAAExO,EAAEwb,GAAG,OAAOA,EAAElW,KAAI,SAASkW,GAAG,OAAO5W,OAAOC,OAAO,CAACy6B,UAAU9wB,EAAEgxB,aAAax/B,GAAGwb,EAAE,GAAE,CAAC,SAASikB,IAA8B,IAAI,IAAIjkB,EAAE,GAAGhN,EAAE3N,UAAUD,OAAO4N,KAAKgN,EAAEhN,GAAG3N,UAAU2N,GAAG,IAAiC/N,GAA7BT,EAAEs9B,EAAwB9hB,IAAO+hB,OAAOv9B,EAAEA,EAAE0kB,iBAAiB,OAAOvlB,KAAKugC,WAAWL,EAAa,QAAQ5+B,GAAGT,EAAE,CAAC,SAAS2/B,IAAmB,IAAI,IAAInkB,EAAE,GAAGhN,EAAE3N,UAAUD,OAAO4N,KAAKgN,EAAEhN,GAAG3N,UAAU2N,GAAG,IAAiC/N,GAA7BT,EAAEs9B,EAAwB9hB,IAAO+hB,OAAOv9B,EAAEA,EAAE0kB,iBAAiB,OAAOvlB,KAAKugC,WAAWL,EAAa,QAAQ5+B,GAAGT,EAAE,CAAC,SAAS4/B,IAAiB,IAAI,IAAIpkB,EAAE,GAAGhN,EAAE3N,UAAUD,OAAO4N,KAAKgN,EAAEhN,GAAG3N,UAAU2N,GAAG,IAAiC/N,GAA7BT,EAAEs9B,EAAwB9hB,IAAO+hB,OAAOv9B,EAAEA,EAAE0kB,iBAAiB,OAAOvlB,KAAKugC,WAAWL,EAAa,QAAQ5+B,GAAGT,EAAE,CAAC,SAAS6/B,IAAgC,IAAI,IAAIrkB,EAAE,GAAGhN,EAAE3N,UAAUD,OAAO4N,KAAKgN,EAAEhN,GAAG3N,UAAU2N,GAAG,IAAiC/N,GAA7BT,EAAEs9B,EAAwB9hB,IAAO+hB,OAAOv9B,EAAEA,EAAE0kB,iBAAiB,OAAOvlB,KAAKugC,WAAWL,EAAa,aAAa5+B,GAAGT,EAAE,CAAC,SAAS8/B,IAAkC,IAAI,IAAItkB,EAAE,GAAGhN,EAAE3N,UAAUD,OAAO4N,KAAKgN,EAAEhN,GAAG3N,UAAU2N,GAAG,IAAiC/N,GAA7BT,EAAEs9B,EAAwB9hB,IAAO+hB,OAAOv9B,EAAEA,EAAE0kB,iBAAiB,OAAOvlB,KAAKugC,WAAWH,EAAuB,aAAa,YAAY9+B,GAAGT,EAAE,CAAC,SAAS+/B,IAAgC,IAAI,IAAIvkB,EAAE,GAAGhN,EAAE3N,UAAUD,OAAO4N,KAAKgN,EAAEhN,GAAG3N,UAAU2N,GAAG,IAAiC/N,GAA7BT,EAAEs9B,EAAwB9hB,IAAO+hB,OAAOv9B,EAAEA,EAAE0kB,iBAAiB,OAAOvlB,KAAKugC,WAAWH,EAAuB,aAAa,WAAW9+B,GAAGT,EAAE,CAAC,SAASggC,IAAqB,IAAI,IAAIxkB,EAAE,GAAGhN,EAAE3N,UAAUD,OAAO4N,KAAKgN,EAAEhN,GAAG3N,UAAU2N,GAAG,IAAiC/N,GAA7BT,EAAEs9B,EAAwB9hB,IAAO+hB,OAAOv9B,EAAEA,EAAE0kB,iBAAiB,OAAOvlB,KAAKugC,WAAWL,EAAa,aAAa5+B,GAAGT,EAAE,CAAC,SAASigC,IAAuB,IAAI,IAAIzkB,EAAE,GAAGhN,EAAE3N,UAAUD,OAAO4N,KAAKgN,EAAEhN,GAAG3N,UAAU2N,GAAG,IAAiC/N,GAA7BT,EAAEs9B,EAAwB9hB,IAAO+hB,OAAOv9B,EAAEA,EAAE0kB,iBAAiB,OAAOvlB,KAAKugC,WAAWH,EAAuB,aAAa,YAAY9+B,GAAGT,EAAE,CAAC,SAASkgC,IAAqB,IAAI,IAAI1kB,EAAE,GAAGhN,EAAE3N,UAAUD,OAAO4N,KAAKgN,EAAEhN,GAAG3N,UAAU2N,GAAG,IAAiC/N,GAA7BT,EAAEs9B,EAAwB9hB,IAAO+hB,OAAOv9B,EAAEA,EAAE0kB,iBAAiB,OAAOvlB,KAAKugC,WAAWH,EAAuB,aAAa,WAAW9+B,GAAGT,EAAE,CAAC,SAASmgC,IAAmB,IAAI,IAAI3kB,EAAE,GAAGhN,EAAE3N,UAAUD,OAAO4N,KAAKgN,EAAEhN,GAAG3N,UAAU2N,GAAG,IAAiC/N,GAA7BT,EAAEs9B,EAAwB9hB,IAAO+hB,OAAOv9B,EAAEA,EAAE0kB,iBAAiB,OAAOvlB,KAAKugC,WAAWL,EAAa,aAAa5+B,GAAGT,EAAE,CAAC,IAAIogC,EAAkB,CAAC,KAAK,MAAM,SAASC,EAAK7kB,GAAG,IAAIhN,EAAE,IAAI9O,GAAa8b,OAAE,IAASA,EAAE,CAAC,EAAEA,GAAGyb,UAAU,IAAImJ,EAAkBv4B,QAAQ2T,EAAEyb,QAAQ,MAAM,IAAIn2B,MAAM,+DAA+Ds/B,EAAkBrc,KAAK,MAAM,KAAK,KAAKrkB,EAAY8b,EAAE8kB,iBAArpN,SAAS9kB,GAAG,MAAM,iBAAiBA,CAAC,CAAkoN+kB,CAAS/kB,EAAE8kB,iBAAiBpD,SAAS1hB,EAAE8kB,iBAAiBtX,KAAKI,MAAM5N,EAAE8kB,kBAAkB9kB,EAAE8kB,gBAAgB,MAAM,IAAIx/B,MAAM,+DAAk1B,SAAoB0a,EAAEhN,EAAExO,GAAG,IAAIS,EAAE+N,EAAEgyB,QAAQvgB,EAAE0d,EAAOnvB,EAAE,CAAC,YAAY/N,GAAGmE,OAAOC,OAAO2W,EAAExb,GAAG4E,OAAOC,OAAO2W,EAAE5W,OAAOwC,KAAK6Y,GAAG5Y,QAAO,SAASmU,EAAEhN,GAAG,OAAO5J,OAAOC,OAAOD,OAAOC,OAAO,CAAC,EAAE2W,KAAKA,EAAE,CAAC,GAAG,IAAIhN,GAAGyR,EAAEzR,GAAGgN,GAAG,GAAE,CAAC,GAAG,EAAnzBilB,CAAWthC,KAAKqc,EAAE,CAACklB,iBAAiB/4B,QAAQ6T,EAAEmlB,iBAAiBC,QAAQplB,EAAEyb,OAAO4J,MAAMrlB,EAAEkQ,KAAKoV,oBAAoB,OAAOtyB,EAAEgN,EAAEulB,qBAAqBvyB,EAAEwyB,WAAW,OAAOxyB,EAAEgN,EAAEylB,YAAYzyB,EAAEkwB,gBAAgBljB,EAAE8kB,gBAAgB,EAAExC,IAAQ3+B,KAAK+hC,gBAAgB/hC,KAAK0hC,QAAQ1hC,KAAKyhC,QAAQ,oBAAoBzhC,KAAKyhC,QAAQ,cAAc,+BAA+BzhC,KAAKu+B,IAAI,GAAGh3B,OAAO+2B,GAAwBjiB,EAAE2lB,wBAAwBhiC,KAAK6/B,0BAA0BxjB,EAAE2lB,wBAAwB3lB,EAAE5S,UAAUzJ,KAAK6+B,aAAaxiB,EAAE5S,WAAWzJ,KAAKw/B,YAAYx/B,KAAKuhC,mBAAmBvhC,KAAK6hC,YAAY7hC,KAAK4+B,uBAAuB,CAAqN,SAASqD,IAAkB,IAAI,IAAI5lB,EAAE,GAAGhN,EAAE3N,UAAUD,OAAO4N,KAAKgN,EAAEhN,GAAG3N,UAAU2N,GAAG,IAAiC/N,GAA7BT,EAAEs9B,EAAwB9hB,IAAO+hB,OAAOv9B,EAAEA,EAAE0kB,iBAAiB,OAAOvlB,KAAKugC,WAAWL,EAAa,OAAO5+B,GAAGT,EAAE,CAAC,SAASqhC,IAAgB,IAAI,IAAI7lB,EAAE,GAAGhN,EAAE3N,UAAUD,OAAO4N,KAAKgN,EAAEhN,GAAG3N,UAAU2N,GAAG,IAAiC/N,GAA7BT,EAAEs9B,EAAwB9hB,IAAO+hB,OAAOv9B,EAAEA,EAAE0kB,iBAAiB,OAAOvlB,KAAKugC,WAAWL,EAAa,OAAO5+B,GAAGT,EAAE,CAAC,IAAIshC,EAAiB,SAAS9lB,GAA75O,IAAwByE,EAAw4OzE,EAAEA,EAAE+lB,UAAUpiC,KAAK+hC,gBAAgB,8BAA8B/hC,KAAK2hC,qBAAoB,EAAG3hC,KAAKuhC,kBAAiB,EAAGvhC,KAAK6hC,YAAW,EAAG7hC,KAAKu/B,gBAAgB,EAAEZ,EAAM3+B,KAAKu+B,IAAI,GAAGv+B,KAAKiE,QAAQA,EAAQjE,KAAKugC,YAAplPzf,EAA8mPzE,EAApmP,SAASA,EAAEhN,GAAG,IAAI/N,EAAEtB,KAAK,IAAIA,KAAKuhC,iBAAiB,CAAC,MAAMhhC,EAAYP,KAAKqiC,WAAW9hC,EAAYP,KAAKsiC,UAAU,OAAOzhC,EAAE,MAAMwO,OAAE,EAAOA,EAAEma,cAAS,EAAO3oB,EAAE,+BAA+B,OAAOA,EAAE,MAAMwO,OAAE,EAAOA,EAAEma,cAAS,EAAO3oB,EAAE,uBAAuB,MAAM,IAAIc,MAAM,qLAAqL3B,KAAKw/B,YAAYx/B,KAAK2hC,qBAAqB3hC,KAAK4+B,uBAAsB,GAAI,IAAI/9B,EAAEwb,EAAElW,KAAI,SAASkW,GAAG,IAAIhN,EAAEgN,EAAEkmB,QAAQ1hC,EAAE29B,EAAOniB,EAAE,CAAC,YAAsN,OAA1MA,EAAE5W,OAAOC,OAAOD,OAAOC,OAAO,CAAC,EAAE7E,GAAG,CAAC4I,UAAU,OAAO5I,EAAE,MAAMwb,OAAE,EAAOA,EAAE5S,WAAW5I,EAAES,EAAEk+B,WAAWwC,uBAAuB,OAAOnhC,EAAE,MAAMwb,OAAE,EAAOA,EAAE2lB,wBAAwBnhC,EAAES,EAAEw+B,0BAAiCv/B,EAAY8O,KAAKgN,EAAEkmB,QAAQlzB,EAAElJ,IAAIkkB,qBAAqBhO,CAAC,IAAG,OAAO,IAAIxb,EAAEY,OAAOgb,QAAQC,SAAQ,GAAuG,SAAqBL,EAAEhN,EAAExO,EAAES,EAAEwf,EAAEjB,EAAE4H,GAAG,IAAIve,GAAGue,OAAE,IAASA,EAAE,CAAC,EAAEA,GAAG,4BAA4B8B,EAAE9B,EAAE,qBAAkFsC,GAA7DtC,EAAE+W,EAAO/W,EAAE,CAAC,2BAA2B,sBAAwBhiB,OAAOC,OAAO,CAAC,2BAA2B,MAAMwD,EAAEA,EAAE4X,EAAE,oBAAoB,MAAMyI,EAAEA,EAAE1J,EAAE,kBAAkBwK,mBAAmBhb,EAAEuV,KAAK,QAAQ6C,IAAG,OAAOpL,EAAExb,EAAE,aAAa4E,OAAOwC,KAAK8hB,GAAG5jB,KAAI,SAASkW,GAAG,OAAOA,EAAE,IAAI0N,EAAE1N,EAAE,IAAGuI,KAAK,KAAK,CAACwZ,OAAO98B,GAAG,CAAlgBkhC,CAAY1hB,EAAE9gB,KAAKu+B,IAAIv+B,KAAK+hC,gBAAgBlhC,EAAEb,KAAKsiC,OAAOtiC,KAAKqiC,QAAQ,MAAMhzB,OAAE,EAAOA,EAAEma,QAAQ,CAAC,GAAqoNlJ,KAAKtgB,MAAMA,KAAKkhC,KAAKA,EAAK5gB,KAAKtgB,MAAMA,KAAKqa,gBAAgBA,EAAgBiG,KAAKtgB,MAAMA,KAAK6+B,aAAaA,EAAave,KAAKtgB,MAAMA,KAAK4+B,sBAAsBA,EAAsBte,KAAKtgB,MAAMA,KAAK0/B,aAAaA,EAAapf,KAAKtgB,MAAMA,KAAK2/B,kBAAkBA,EAAkBrf,KAAKtgB,MAAMA,KAAK6/B,0BAA0BA,EAA0Bvf,KAAKtgB,MAAMA,KAAKggC,0BAA0BA,EAA0B1f,KAAKtgB,MAAMA,KAAKigC,+BAA+BA,EAA+B3f,KAAKtgB,MAAMA,KAAKsgC,4BAA4BA,EAA4BhgB,KAAKtgB,MAAMA,KAAKwgC,iBAAiBA,EAAiBlgB,KAAKtgB,MAAMA,KAAKygC,eAAeA,EAAengB,KAAKtgB,MAAMA,KAAK0gC,8BAA8BA,EAA8BpgB,KAAKtgB,MAAMA,KAAK4gC,8BAA8BA,EAA8BtgB,KAAKtgB,MAAMA,KAAK2gC,gCAAgCA,EAAgCrgB,KAAKtgB,MAAMA,KAAK6gC,mBAAmBA,EAAmBvgB,KAAKtgB,MAAMA,KAAK8gC,qBAAqBA,EAAqBxgB,KAAKtgB,MAAMA,KAAK+gC,mBAAmBA,EAAmBzgB,KAAKtgB,MAAMA,KAAKghC,iBAAiBA,EAAiB1gB,KAAKtgB,MAAMA,KAAKiiC,gBAAgBA,EAAgB3hB,KAAKtgB,MAAMA,KAAKkiC,cAAcA,EAAc5hB,KAAKtgB,MAAMA,KAAK60B,WAAWA,EAAWvU,KAAKtgB,KAAK,EAAonByiC,EAA0B,SAAS3hB,EAAEjB,GAAG,OAAO,IAAIpD,SAAQ,SAASJ,EAAEhN,GAAG,IAAIxO,EAAE8R,KAAKC,UAAUiN,GAAGve,EAAE,IAAI41B,eAAe51B,EAAEohC,iBAAiB,oBAAmB,WAAW,IAAIphC,EAAEi2B,YAAY,MAAMj2B,EAAEwpB,OAAOzO,GAAE,GAAI,IAAI/a,EAAEi2B,YAAYlb,GAAE,EAAG,IAAG/a,EAAEohC,iBAAiB,SAAQ,WAAW,OAAOrzB,GAAG,IAAG/N,EAAEohC,iBAAiB,WAAU,WAAW,OAAOrmB,GAAE,EAAG,IAAG/a,EAAE61B,KAAK,OAAOrW,GAAGxf,EAAE81B,iBAAiB,eAAe,oBAAoB91B,EAAE81B,iBAAiB,iBAAiB,GAAGv2B,EAAEY,QAAQH,EAAE4rB,KAAKrsB,EAAE,GAAE,EAAE8hC,EAAsB,SAAStmB,EAAEhN,GAAG,IAAIxO,EAAE8R,KAAKC,UAAUvD,GAA+B,OAA5BxO,EAAEi+B,UAAU8D,WAAWvmB,EAAExb,GAAU4b,QAAQC,UAAU7b,GAAG4hC,EAA0BpmB,EAAEhN,GAAG,EAAEwzB,EAAuB,SAASxmB,EAAE/a,GAAG,OAAO,IAAImb,SAAQ,SAASpN,EAAExO,GAAGiiC,MAAMzmB,EAAE,CAACqP,OAAO,OAAO+D,KAAK9c,KAAKC,UAAUtR,GAAGkoB,QAAQ,CAAC,eAAe,sBAAsBtN,MAAK,SAASG,GAAGhN,EAAE,MAAMgN,EAAEyO,OAAO,IAAGxO,OAAM,SAASD,GAAGxb,EAAEwb,EAAE,GAAE,GAAE,EAAE,SAAS0mB,IAAyB,GAAp7W,WAAW,IAAI,OAAOv6B,QAAQs2B,UAAU8D,WAAW,CAAC,MAAMvmB,GAAG,OAAM,CAAE,CAAC,CAAi3W2mB,GAAqB,OAAOL,EAAsB,GAA14W,WAAW,IAAI,OAAOn6B,QAAQ0uB,eAAe,CAAC,MAAM7a,GAAG,OAAM,CAAE,CAAC,CAA60W4mB,GAAyB,OAAOR,EAA0B,GAAj3W,WAAW,IAAI,YAAO,IAASK,KAAK,CAAC,MAAMzmB,GAAG,OAAM,CAAE,CAAC,CAA6zW6mB,GAAsB,OAAOL,EAAuB,MAAM,IAAIlhC,MAAM,sEAAsE,CAAC,IAAIwhC,EAAvuD,SAA8B9mB,GAAG,IAAIhN,EAAgE,GAA9DgN,EAAEgiB,EAAuB,IAAI8D,EAAiB,CAACC,UAAU/lB,KAAQ,iBAAiB8L,SAASA,OAAOib,uBAAuB,CAAC,KAAK/zB,EAAEovB,SAAa,IAAStW,OAAO9Y,KAAK8Y,OAAOib,uBAAuB/zB,EAAE8Y,OAAOA,OAAOib,wBAAwB/mB,CAAC,CAAC,OAAOA,EAAEpY,QAAQA,EAAQoY,CAAC,CAA28CgnB,CAAqBN,KAA0BtiC,EAAQ0hC,iBAAiBA,EAAiB1hC,EAAA,QAAgB0iC,EAAgB1iC,EAAQ49B,uBAAuBA,EAAuB59B,EAAQsiC,uBAAuBA,EAAuBtiC,EAAQ6iC,aAAvrD,SAAsBjnB,GAAG,IAAIxb,EAAEwO,EAAEgN,EAAE+mB,uBAAuB/zB,IAAIxO,EAAEw9B,EAAuBr+B,OAAOqc,EAAEA,EAAEhN,IAAIk0B,MAAMlnB,EAAEknB,OAAO,IAAIl0B,EAAEgN,EAAEknB,OAAO58B,SAAQ,SAAS0V,GAAG,IAAuBhN,GAAnBgN,EAAE,GAAGra,MAAMF,KAAKua,IAAO,GAAGA,EAAEA,EAAEra,MAAM,GAAGnB,EAAEoB,WAAM,EAAO,CAACoN,GAAG9H,OAAO8U,GAAG,IAAGhN,EAAE/M,KAAK,SAAS+Z,GAAG,IAAuBhN,GAAnBgN,EAAE,GAAGra,MAAMF,KAAKua,IAAO,GAAGA,EAAEA,EAAEra,MAAM,GAAGnB,EAAEoB,WAAM,EAAO,CAACoN,GAAG9H,OAAO8U,GAAG,EAAE,mBCA/+V,MAAMmnB,EAAK,EAAQ,OAEnBhjC,EAAOC,QAAU+iC,EAAGC,QACpBh+B,OAAOwC,KAAKu7B,GAAI78B,SAAQxD,IACV,YAARA,IACF3C,EAAOC,QAAQ0C,GAAOqgC,EAAGrgC,GAC3B,yFCAF,IAAIugC,EACG,MAAMC,EAAS,IAAMD,IAAQA,EAAME,EAPP,CACjCC,KACgB,mBAATA,MAAuBA,KAAKvjB,UAAKngB,SAAgC,IAAX2jC,GAA0B,CAACC,GAAWD,EAAO7b,KAAK8b,EAAS,UAAUrxB,YAClIsxB,KAAsB,mBAATA,MAAuBA,KAAK1jB,UAAKngB,SAAgC,IAAX2jC,GAA0B,CAACG,GAAOH,EAAO7b,KAAKgc,GAAKvxB,SAAS,WAC/HwxB,gBAA4C,mBAApBA,iBAAkCA,iBAAoD,2BAK1GN,EAAcF,IAClB,KAAMA,EAAIG,MAAQH,EAAIM,MAAQN,EAAIQ,iBAChC,MAAM,IAAInjC,UAAU,+IAGtB,OAAO2iC,CAAG,ECZNS,EAAoB,CACxBC,WAAY,IACZC,KAAM,IACNC,OAAQ,IACRC,UAAW,IACXC,OAAQ,KCJV,MACMC,EAAkB,YAClBC,EAA6B,CACjCC,cAAe,2BAEF,MAAMC,EACnB5/B,aAAY,GACVI,EAAKw/B,EAAaC,aAAY,QAC9BC,EAAO,0BACPC,GAA4B,IAE5B/kC,KAAKoF,GAAKA,EACVpF,KAAK8kC,QAAUA,EAEVC,GACH/kC,KAAK4L,UAET,CAEAo5B,iBAAiB79B,GACf,MAAwB,iBAAVA,GAAsB,wBAAwBqf,KAAKrf,EACnE,CAEA69B,sBAAsB79B,GACpB,MAAwB,iBAAVA,GAAsB,wBAAwBqf,KAAKrf,EACnE,CAEA69B,oBAIE,OAHW,MAGDxtB,QAAQ,KAAM,GAC1B,CAEAwtB,qBACE,OAAO,IAAIC,CACb,CAEAD,yBACE,OAAO,IAAIE,CACb,CAEAF,eAAe7Z,GACb,IAAIpmB,EAAS,IAAK4+B,IAAwB,iBAI1C,OAHAwB,EAAaha,GAAKia,IAChBrgC,EAAS,IAAK4+B,IAAwB,iBAAEyB,EAAY,IAE/CR,EAAaS,YAAYtgC,EAAO8jB,IAAI4b,GAC7C,CAEAO,mBAAmBjB,GACjB,IAAKA,EACH,OAAOa,EAAaU,cAGtB,IACE,OAAOV,EAAa3G,OAAO8F,EAC7B,CAAE,MAAO1nB,GACP,OAAOuoB,EAAaW,iBACtB,CACF,CAEAP,qBAAqB7Z,GACnB,OAAOga,EAAaha,GAAKia,IACvB,MAAMrgC,EAAS,IAAK4+B,IAAwB,iBAAEyB,GAE9C,OADArgC,EAAOkkB,OAAOwb,GACP1/B,EAAO2N,UAAU,GAE5B,CAEAsyB,cAAcQ,GACZ,MAAMC,ED5DH,SAAgBC,GACrB,MAAMC,EEGD,SAA2BC,GAChC,GAAiB,MAAbA,EACF,MAAO,GAGT,MAAMD,EAAS3jB,OAAO4jB,GAAWpuB,QAAQ,KAAM,KAAKA,QAAQ,KAAM,KAC5DquB,GAAa,EAAID,EAAUnkC,OAAS,GAAK,EAE/C,OAAOkkC,EADK,MAAM3jC,MAAM,EAAG6jC,EAE7B,CFZiBC,CAAkBJ,GAC3BK,EAAOpC,IAASE,KAAK8B,GAC3B,OAWK,SAAwBK,GAC7B,MAAMP,EAAa,CAAC,EAUpB,OARIO,EAAiB1kC,IACnBmkC,EAAWrgC,GAAK4gC,EAAiB1kC,GAG/B0kC,EAAiB5b,IACnBqb,EAAWX,QAMf,SAAgCmB,GAC9B,MAAMC,EAAWzgC,OAAOwC,KAAKk8B,GAE7B,IAAK,IAAI7iC,EAAI,EAAGA,EAAI4kC,EAASzkC,OAAQH,IAAK,CACxC,MAAMwjC,EAAUoB,EAAS5kC,GAGzB,GAAI2kC,IAFc9B,EAAkBW,GAGlC,OAAOA,CAEX,CAEA,OAAOmB,CACT,CAnByBE,CAAuBH,EAAiB5b,IAGxDqb,CACT,CAvBSW,CAAezzB,KAAKyV,MAAM2d,GACnC,CCwDuB9H,CAAOuH,GAC1B,OAAO,IAAIZ,EAAaa,EAC1B,CAEAvH,SACE,ODtEG,SAAgBuH,GACrB,MAAMM,EAAOpzB,KAAKC,UASb,UAAsB,GAC3BxN,EAAE,QACF0/B,IAEA,MAAO,CACLxjC,EAAG8D,EACHglB,EAAG0a,GAAWA,KAAWX,EAAoBA,EAAkBW,GAAWA,EAE9E,CAjB8BuB,CAAaZ,IAEzC,OEAc,OADkBE,EFAjBhC,IAASK,KAAK+B,IEEpB,GAGF/jB,OAAO2jB,GAAQnuB,QAAQ,MAAO,KAAKA,QAAQ,MAAO,KAAKA,QAAQ,KAAM,IALvE,IAA2BmuB,CFElC,CCkEWzH,CAAO,CACZ94B,GAAIpF,KAAKoF,GACT0/B,QAAS9kC,KAAK8kC,SAElB,CAEAwB,SAASnb,GACP,OAAOga,EAAaha,GAAKob,IACvB,MAAMxhC,EAAS,IAAK4+B,IAAwB,iBAAE4C,GAE9C,OADAxhC,EAAOikB,IAAIyb,EAAiBzkC,KAAKk+B,UAC1Bn5B,EAAO2N,UAAU,GAE5B,CAEA8zB,UACE,OAAO,CACT,CAEAC,cACE,OAAQzmC,KAAKwmC,YAAcxmC,KAAK0mC,SAClC,CAEAA,UACE,OAAO,CACT,CAEAC,uBAAsB,eACpBC,EAAiBj/B,IAAW,OAANA,OAAaxH,EAAYwH,GAAC,eAChDk/B,GAAiB,GACf,CAAC,GAKH,MAAO,CACL,CAFmBA,EAAiB,oBAAsB,YAE1CD,EAAe5mC,KAAKoF,IACpC0hC,cAAeF,EAAe5mC,KAAK8kC,YAChCJ,EAEP,CAEA94B,WACE,IAAKg5B,EAAamC,UAAU/mC,KAAKoF,IAC/B,MAAM,IAAIrE,UAAU,qBAGtB,IAAK6jC,EAAaoC,eAAehnC,KAAK8kC,SACpC,MAAM,IAAI/jC,UAAU,iCAExB,EAIF,MAAMkkC,UAA0BL,EAC9B5/B,cACEiiC,MAAM,CACJ7hC,GAAI,KACJ0/B,QAAS,KACTC,2BAA2B,GAE/B,CAEA2B,UACE,OAAO,CACT,CAEAF,UACE,OAAO,CACT,CAEAG,wBACE,MAAO,IAAKjC,EAEd,EAIF,MAAMQ,UAA8BN,EAClC5/B,cACEiiC,MAAM,CACJ7hC,GAAI,KACJ0/B,QAAS,KACTC,2BAA2B,GAE/B,CAEA2B,UACE,OAAO,CACT,CAEAF,UACE,OAAO,CACT,CAEAG,wBACE,MAAO,CACLO,iBAAiB,KACdxC,EAEP,EAIF,SAASS,EAAaha,EAAKgc,GAIzB,OADkBnlB,OAAOmJ,GACR3T,QAHe,oCAGkB,CAAC4vB,EAAYC,EAAajC,EAAakC,KACvF,IAAIC,EAAiBJ,EAAS/B,GAM9B,OAJImC,IACFA,EAAiB,IAAIA,KAGhB,GAAGF,IAAcE,IAAiBD,GAAY,GAEzD,03BElM2C,IAEtBE,EAAS,WAO5B,SAAAA,EAAY9D,gGAAc+D,CAAA,KAAAD,GAAAE,EAAA,eANhB,OAAKA,EAAA,mBACD,WAASA,EAAA,sBACN,cAKf1nC,KAAK0jC,IAAMA,GAAOiE,EAAAA,EAAAA,iBAClB3nC,KAAK4nC,gBAAkB5nC,KAAK6nC,oBAC9B,SAyHC,SAzHAL,KAAA,EAAArkC,IAAA,qBAAAgE,MAED,WACE,IAAI2gC,EAAiB3f,OAAO4f,SAASC,SAASz1B,MAAM,KAAK,GACzD,MAAuB,QAAnBu1B,GAA+C,QAAnBA,GAAgD,WAAnBA,GAAmD,cAAnBA,GAGtFA,CACT,GAAC,CAAA3kC,IAAA,cAAAgE,MAED,SAAYgkB,GACV,OAAInrB,KAAK4nC,gBAGFzc,EAAI3T,QAAQ,SAAU,KAAFjQ,OAAOvH,KAAK4nC,gBAAe,MAF7Czc,CAGX,GAEA,CAAAhoB,IAAA,cAAAgE,MACA,WACE,IAAI8gC,EAAO,CACTC,WAAYloC,KAAKmoC,YAAY,6BAC7BC,QAAS,GAAF7gC,OAAK4gB,OAAO4f,SAASC,SAASt/B,QAAQ,WAAa,EAAI,wCAA0C2/B,EAAAA,EAAAA,mBACxGC,IAAK,6BAKP,OAFaL,EAAK7kB,eAAepjB,KAAK0jC,KAAOuE,EAAKjoC,KAAK0jC,KAAOuE,EAAKC,UAGrE,GAEA,CAAA/kC,IAAA,aAAAgE,MACA,WACE,IAAI8gC,EAAO,CACTC,WAAY,2BACZE,QAAS,wCACTE,IAAK,yCAKP,OAFaL,EAAK7kB,eAAepjB,KAAK0jC,KAAOuE,EAAKjoC,KAAK0jC,KAAOuE,EAAKC,UAGrE,GAAC,CAAA/kC,IAAA,aAAAgE,MAED,SAAWgkB,EAAcod,GACvB,IAAIC,EAAgBxoC,KAAKyoC,aAAatd,EAAKod,GAC3C,MAAO,GAAPhhC,OAAUvH,KAAK0oC,aAAY,oBAAAnhC,OAAmBihC,EAChD,GAAC,CAAArlC,IAAA,cAAAgE,MAED,SAAYgkB,GACV,IAAIqd,EAAgBxoC,KAAKyoC,aAAatd,GACtC,MAAO,GAAP5jB,OAAUvH,KAAK0oC,aAAY,qBAAAnhC,OAAoBihC,EACjD,GAAC,CAAArlC,IAAA,mBAAAgE,MAED,SAAiBgkB,GAEf,OAAOnrB,KAAK2oC,YAAa3oC,KAAK4oC,WAAWzd,GADf,GAE5B,GAEA,CAAAhoB,IAAA,cAAAgE,MACA,WACE,IAAI8gC,EAAO,CACTC,WAAY,2BACZE,QAAS,wCACTE,IAAK,uCAKP,OAFaL,EAAK7kB,eAAepjB,KAAK0jC,KAAOuE,EAAKjoC,KAAK0jC,KAAOuE,EAAKC,UAGrE,GAAC,CAAA/kC,IAAA,eAAAgE,MAED,WACE,MAAO,GAAPI,OAAUvH,KAAK6oC,cAAa,mBAC9B,GAEA,CAAA1lC,IAAA,mBAAAgE,MACA,WACE,IAAI8gC,EAAO,CACTC,WAAY,eACZE,QAAS,4CACTE,IAAK,6CAKP,OAFaL,EAAK7kB,eAAepjB,KAAK0jC,KAAOuE,EAAKjoC,KAAK0jC,KAAOuE,EAAKC,UAGrE,GAEA,CAAA/kC,IAAA,kBAAAgE,MACA,WACE,IAAI8gC,EAAO,CACTC,WAAY,kBACZE,QAAS,iBACTE,IAAK,kBAKP,OAFaL,EAAK7kB,eAAepjB,KAAK0jC,KAAOuE,EAAKjoC,KAAK0jC,KAAOuE,EAAKC,UAGrE,GAEA,CAAA/kC,IAAA,oBAAAgE,MACA,WACE,IAAI8gC,EAAO,CACTC,WAAY,cACZE,QAAS,uBACTE,IAAK,wBAKP,OAFaL,EAAK7kB,eAAepjB,KAAK0jC,KAAOuE,EAAKjoC,KAAK0jC,KAAOuE,EAAKC,UAGrE,GAAC,CAAA/kC,IAAA,eAAAgE,MAED,SAAagkB,EAAcod,GAMzB,OALApd,EAAMA,GAAOhD,OAAO4f,SAASe,KAExBP,IACHpd,EAAMd,mBAAmBc,IAEpBA,CACT,0EAACqc,CAAA,CAnI2B,y9CCGvB,IAiIIuB,EAAY,IAjID,WAGpB,SAAAC,iGAAcvB,CAAA,KAAAuB,GACZhpC,KAAKipC,WAAajpC,KAAKkpC,eACzB,SAwHC,SAxHAF,KAAA,EAAA7lC,IAAA,gBAAAgE,MAED,WACE,OAAKwgC,EAAAA,EAAAA,eAIE,4BAHE,GAAPpgC,OAAW4gB,OAAO4f,SAASC,SAASt/B,QAAQ,WAAa,EAAI,wCAA0C2/B,EAAAA,EAAAA,kBAI3G,GAAC,CAAAllC,IAAA,gBAAAgE,MAED,WACE,OAAKwgC,EAAAA,EAAAA,eAIE,GAAPpgC,OAAUvH,KAAKipC,WAAU,WAHhB,GAAP1hC,OAAUvH,KAAKipC,WAAU,mBAI7B,GAAC,CAAA9lC,IAAA,cAAAgE,MAED,WACE,OAAKwgC,EAAAA,EAAAA,eAIE,GAAPpgC,OAAUvH,KAAKipC,WAAU,mBAHhB,GAAP1hC,OAAUvH,KAAKipC,WAAU,iBAI7B,GAAC,CAAA9lC,IAAA,cAAAgE,MAED,WACE,OAAKwgC,EAAAA,EAAAA,eAIE,GAAPpgC,OAAUvH,KAAKipC,WAAU,mBAHhB,GAAP1hC,OAAUvH,KAAKipC,WAAU,iBAI7B,GAAC,CAAA9lC,IAAA,aAAAgE,MAED,WACE,MAAO,GAAPI,OAAUvH,KAAKipC,WAAU,YAC3B,GAAC,CAAA9lC,IAAA,gBAAAgE,MAED,SAAcpC,EAAQokC,GAEpB,IAAIC,EAAWD,EAAcnpC,KAAKqpC,cAAgBrpC,KAAKspC,gBAEnDhd,EAAU,CACZnB,IAAK,GAAF5jB,OAAK6hC,GAAQ7hC,OAAGxC,EAAOomB,KAC1BO,OAAQ3mB,EAAO2mB,QAAU,MACzBlC,QAASzkB,EAAOykB,SAAW,CAAC,EAC5BzkB,OAAQA,EAAOA,QAiBjB,MAduB,QAAnBunB,EAAQZ,SACVY,EAAQvnB,OAAMwkC,EAAA,CAAIC,aAAa,IAAI7gB,MAAOC,WAAc7jB,EAAOA,SAG1C,SAAnBunB,EAAQZ,SACVY,EAAQ9C,QAAQ,gBAAkB,mBAClC8C,EAAQ1Y,KAAO7O,EAAO6O,MAAQ,IAG5B7O,EAAO0kC,eAAiBC,EAAAA,GAAAA,aAC1Bpd,EAAQ9C,QAAQ,kBAAoBkgB,EAAAA,GAAAA,WACpCpd,EAAQqd,iBAAkB,IAGrBC,EAAAA,EAAAA,GAAMtd,EACf,GAAC,CAAAnpB,IAAA,aAAAgE,MAED,SAAWpC,GAET,IAAIunB,EAAU,CACZnB,IAAK,GAAF5jB,OAAKxC,EAAOomB,IAAI0e,WAAW,QAAU,GAAK7pC,KAAK8pC,cAAYviC,OAAGxC,EAAOomB,KACxEO,OAAQ3mB,EAAO2mB,QAAU,MACzBlC,QAASzkB,EAAOykB,SAAW,CAAC,EAC5BzkB,OAAQA,EAAOA,QAgBjB,MAbuB,QAAnBunB,EAAQZ,SACVY,EAAQvnB,OAAMwkC,EAAA,CAAKC,aAAa,IAAI7gB,MAAOC,WAAc7jB,EAAOA,SAG3C,SAAnBunB,EAAQZ,SACVY,EAAQ9C,QAAQ,gBAAkB,mBAClC8C,EAAQ1Y,KAAO7O,EAAO6O,MAAQ,IAG5B7O,EAAO0kC,eAAiBC,EAAAA,GAAAA,aAC1Bpd,EAAQqd,iBAAkB,IAGrBC,EAAAA,EAAAA,GAAMtd,EACf,GAAC,CAAAnpB,IAAA,MAAAgE,MAED,SAAIyM,GACF,IAAI4B,EAAU,CAAEkW,OAAQ,OAQxB,OANI6E,EAAAA,GAAAA,SAAW3c,GACb4B,EAAQ2V,IAAMvX,EACL2c,EAAAA,GAAAA,SAAW3c,IACpBnO,OAAOC,OAAO8P,EAAS5B,GAGlB5T,KAAK+pC,cAAcv0B,EAC5B,GAAC,CAAArS,IAAA,OAAAgE,MAED,SAAKyM,GACH,IAAI4B,EAAU,CAAEkW,OAAQ,QAQxB,OANI6E,EAAAA,GAAAA,SAAW3c,GACb4B,EAAQ2V,IAAMvX,EAEdnO,OAAOC,OAAO8P,EAAS5B,GAGlB5T,KAAK+pC,cAAcv0B,EAC5B,GAEA,CAAArS,IAAA,UAAAgE,MAGA,SAAQqO,GACN,OAAOo0B,EAAAA,EAAAA,GAAMp0B,EACf,0EAACwzB,CAAA,CA7HmB,g/BCHf,IAAMgB,EAAc,CACzBC,WAAY,sBACZC,UAAW,qBACXC,cAAe,qBACfC,cAAe,yBACfC,kBAAmB,4BACnBC,wBAAyB,4BACzBC,qBAAsB,qBACtBC,uBAAwB,yBACxBC,UAAW,0BACXC,SAAU,WACVC,WAAY,aACZC,OAAQ,SACRC,KAAM,OACNC,QAAS,UACTC,KAAM,OACNC,MAAO,oBAsbEtB,EAAa,IAtaD,WAYrB,SAAAuB,iGAAcxD,CAAA,KAAAwD,GAAAvD,EAAA,6BAHgE,CAAEwD,OAAQ,KAAM5e,QAAS,OAAMob,EAAA,cAC9C,CAACwD,OAAQ,KAAM5e,QAAS,OAIrFtsB,KAAKmrC,MAAQ,KACbnrC,KAAKorC,aAAc,EAEnBprC,KAAKqrC,KAAO,CACVC,eAAgB,CACdC,UAAW,GACXC,SAAU,GACVC,MAAO,IAETC,oBAAqB,CACnBC,SAAU,GACVC,SAAU,GACVC,KAAM,GACNvlC,MAAO,GACPwlC,SAAU,GACVC,eAAgB,GAChBC,iBAAkB,GAClBC,iBAAkB,KAClBC,cAAc,EACdC,MAAO,IAETC,aAAc,CACZb,UAAW,GACXC,SAAU,GACVa,SAAU,GACVC,YAAa,IAEfC,UAAW,CACTC,KAAM,KACNC,OAAQ,KACRhB,MAAO,GACPhgC,KAAM,GACN8/B,UAAW,GACXC,SAAU,IAEZkB,YAAY,GAGd1sC,KAAK2sC,MAAQ,GACb3sC,KAAK4sC,4BAA6B,CAEpC,SA2WC,SA3WA3B,IAAA,EAAA9nC,IAAA,WAAAgE,MAED,SAASylC,EAAqCC,GAA4B,IAAAC,EAAA,KAExE,OAAI9sC,KAAKorC,YACA3uB,QAAQC,QAAQ1c,KAAKqrC,OAE9BrrC,KAAKorC,aAAc,EAEZ3uB,QAAQsM,IAAI,CACjB/oB,KAAK+sC,oBACL/sC,KAAKgtC,mBAAmBJ,GAA4B,EAAOC,KAE1D3wB,MAAK,WACJ,OAAOO,QAAQC,QAAQowB,EAAKzB,KAC9B,IAAE,OACK,WACL,OAAO5uB,QAAQC,QAAQowB,EAAKzB,KAC9B,IACJ,GAAC,CAAAloC,IAAA,oBAAAgE,MAED,WAAoB,IAAA8lC,EAAA,KAEZz3B,EAAU,CACd2V,IAAK,GAAF5jB,OAAKwhC,EAAAA,EAAAA,gBAAyB,wBACjCrd,OAAQ,MACRie,iBAAiB,GAGnB,OAAOZ,EAAAA,EAAAA,QAAkBvzB,GACtB0G,MAAK,SAACwB,GAEL,OAAIA,EAAS9J,MAA0B,KAAlB8J,EAAS9J,MAE5Bq5B,EAAKC,SAASxvB,EAAS9J,MACvBq5B,EAAK5B,KAAKqB,YAAa,EAEhBjwB,QAAQC,YAGjBuwB,EAAK5B,KAAKqB,YAAa,EAChBjwB,QAAQmR,SACjB,IAAE,OACK,WAGL,OADAqf,EAAK5B,KAAKqB,YAAa,EAChBjwB,QAAQmR,QACjB,GACJ,GAAC,CAAAzqB,IAAA,qBAAAgE,MAED,SAAmBylC,EAAqCO,GAAyB,IAAAC,EAAA,KAM/E,OAJIR,IACF5sC,KAAK4sC,4BAA6B,GAG7BnwB,QAAQsM,IAAI,CACjB/oB,KAAKqtC,aACLrtC,KAAKstC,kBAAkBH,KAEtBjxB,MAAK,SAAAqxB,GAA+B,QAAAC,KAAA,8CAAAD,w2BAA7BE,EAAYD,EAAA,GAAEE,EAASF,EAAA,GAO7B,OANIC,GAAgBC,IAClBjoC,OAAOC,OAAO0nC,EAAK/B,KAAKkB,UAAWkB,GACnCL,EAAKO,SAASD,GACdN,EAAK/B,KAAKqB,YAAa,GAGlBjwB,QAAQC,SACjB,IAAE,OACK,WAGL,OADA0wB,EAAK/B,KAAKqB,YAAa,EAChBjwB,QAAQC,SACjB,GACJ,GAAC,CAAAvZ,IAAA,sBAAAgE,MAED,SAAoBpC,GAGlB,OAFAA,EAAOomB,IAAM,kCAEN4d,EAAAA,EAAAA,cAAwBhkC,EACjC,GAAC,CAAA5B,IAAA,sBAAAgE,MAED,SAAoBpC,GAGlB,OAFAA,EAAOomB,IAAM,gCAEN4d,EAAAA,EAAAA,cAAwBhkC,EACjC,GAAC,CAAA5B,IAAA,aAAAgE,MAED,WAAa,IAWPmlB,EAXOshB,EAAA,KACL5F,EAAWL,EAAAA,EAAAA,mBAGXnyB,EAAU,CACd2V,IAHU,GAAH5jB,OAAMygC,EAAQ,OAIrBtc,OAAQ,MACRie,iBAAiB,GAgBnB,OAXI3pC,KAAK6tC,OAAO3C,OAEd5e,EAAU7P,QAAQC,QAAQ1c,KAAK6tC,OAAO3C,SAC7BlrC,KAAK6tC,OAAOvhB,UAKrBtsB,KAAK6tC,OAAOvhB,QAAUyc,EAAAA,EAAAA,QAAkBvzB,IAHxC8W,EAAUtsB,KAAK6tC,OAAOvhB,SAMjBA,EACJpQ,MAAK,SAAArG,GAEJ,IAAKA,EAAOjC,KACV,OAAO6I,QAAQmR,SAGjBggB,EAAKC,OAAO3C,OAASr1B,EACrB+3B,EAAKC,OAAOvhB,QAAU,KAGtB,IAAI7gB,EAAOoK,EAAOjC,KAAKnI,KACnBA,EAAK/C,QAAQ,MAAQ,IACvB+C,EAAOA,EAAK8G,MAAM,KAAK,IAGzB,IAAMu7B,EAAe,CACnBtB,KAAO32B,EAAOjC,KAAKm6B,WACnBtB,OAAS52B,EAAOjC,KAAKo6B,QACrBvC,MAAQ51B,EAAOjC,KAAK63B,MACpBhgC,KAAOA,EACP8/B,UAAYqC,EAAKK,aAAaxiC,GAC9B+/B,SAAWoC,EAAKM,YAAYziC,IAG9B,OAAOgR,QAAQC,QAAQoxB,EACzB,IAAE,OACK,WAGL,OADAF,EAAKvC,KAAKqB,YAAa,EAChBjwB,QAAQmR,QACjB,GACJ,GAAC,CAAAzqB,IAAA,oBAAAgE,MAED,SAAkBgmC,GAAyB,IAAAgB,EAAA,KACzC,OAAOnuC,KAAKouC,8BAA8BjB,GAAejxB,MAAK,SAAAmyB,GAC5D,IAAMX,EAvNgD,SAACW,GAC3D,OAAOA,EAAuBloC,KAAI,SAAAmoC,GAAQ,IAAAC,EACxC,MAAO,CACLC,YAAaF,EAAKE,YAClBtI,SAAuB,QAAfqI,EAAED,EAAKpI,gBAAQ,IAAAqI,EAAAA,EAAID,EAAKG,kBAAkBtoC,KAAI,SAAAuoC,GAAgB,OAAI1E,EAAY0E,EAAiBC,YAAY,IACnHC,QAASN,EAAKM,QACdtC,YAAagC,EAAKhC,YAClBuC,UAAWP,EAAK7B,OAChBthB,IAAKmjB,EAAKnjB,IAEd,GACF,CA4MwB2jB,CAA6CT,GAC/D,OAAOX,CACT,IAAE,OAAO,WACPS,EAAK9C,KAAKqB,YAAa,CACzB,GACF,GAAC,CAAAvpC,IAAA,gCAAAgE,MAED,SAA8BgmC,GAAyB,IAQjD7gB,EARiDyiB,EAAA,KAE/Cv5B,EAAU,CACd2V,IAFQ,GAAH5jB,OAAMogC,EAAAA,EAAAA,mBAA8B,2BAGzCjc,OAAQ,MACRie,iBAAiB,GAenB,OAXI3pC,KAAKgvC,sBAAsB9D,OAE7B5e,EAAU7P,QAAQC,QAAQ1c,KAAKgvC,sBAAsB9D,SAC5ClrC,KAAKgvC,sBAAsB1iB,UAKpCtsB,KAAKgvC,sBAAsB1iB,QAAUyc,EAAAA,EAAAA,QAAkBvzB,IAHvD8W,EAAUtsB,KAAKgvC,sBAAsB1iB,SAMhCA,EAAQpQ,MAAK,SAAArG,GAElB,IAAKA,EAAOjC,KACV,MAAO,GAGTm7B,EAAKC,sBAAsB9D,OAASr1B,EACpCk5B,EAAKC,sBAAsB1iB,QAAU,KAErC,IAAM2iB,EAAcp5B,EAAOjC,KAAK+4B,OAAS,GACnC0B,EAAyBlB,EAAgB8B,EAAcA,EAAY5pC,QAAO,SAACipC,GAAI,OAAKS,EAAKG,YAAYZ,EAAK,IAChH,OAAO7xB,QAAQC,QAAQ2xB,EACzB,IAAE,OAAO,WAEP,OADAU,EAAK1D,KAAKqB,YAAa,EAChBjwB,QAAQmR,QACjB,GACF,GAAC,CAAAzqB,IAAA,iCAAAgE,MAED,SAA+BgoC,EAAqBC,EAAYC,GAAU,IAAAC,EAAA,KAClE95B,EAAU,CACd2V,IAAK,GAAF5jB,OAAKwhC,EAAAA,EAAAA,gBAAyB,wBAAAxhC,OAAuB4nC,EAAmB,+BAC3EzjB,OAAQ,OACR9X,KAAM,CACJw7B,WAAAA,EACAC,SAAAA,GAEF1F,iBAAiB,GAGnB,OAAOZ,EAAAA,EAAAA,QAAkBvzB,GACtB0G,MAAK,SAACwB,GACL,OAAIA,EAAS9J,MAA0B,KAAlB8J,EAAS9J,MAC5B07B,EAAKC,6BAA6B7xB,EAAS9J,MACpC6I,QAAQC,QAAQgB,EAAS9J,OAG3B6I,QAAQC,SACjB,IAAE,OACK,WACL,OAAOD,QAAQC,SACjB,GACJ,GAAC,CAAAvZ,IAAA,+BAAAgE,MAED,WACE,OAAOnH,KAAKwvC,yBACd,GAAC,CAAArsC,IAAA,+BAAAgE,MAED,SAA6BqoC,GAC3BxvC,KAAKwvC,0BAA4BA,CACnC,GAAC,CAAArsC,IAAA,WAAAgE,MAED,SAASgkC,GACPnrC,KAAKmrC,MAAQA,CACf,GAAC,CAAAhoC,IAAA,WAAAgE,MAED,WACE,OAAOnH,KAAKmrC,KACd,GAAC,CAAAhoC,IAAA,UAAAgE,MAED,SAAQqO,GACN/P,OAAOC,OAAO1F,KAAKqrC,KAAM71B,EAC3B,GAAC,CAAArS,IAAA,UAAAgE,MAED,WACE,OAAOnH,KAAKqrC,IACd,GAAC,CAAAloC,IAAA,WAAAgE,MAED,SAASwlC,GACP3sC,KAAK2sC,MAAQA,CACf,GAAC,CAAAxpC,IAAA,WAAAgE,MAED,WACE,OAAOnH,KAAK2sC,KACd,GAAC,CAAAxpC,IAAA,oBAAAgE,MAED,SAAkBsnC,GAEhB,IAAIgB,EAAsB,CAAC,EAE3BzvC,KAAK2sC,MAAMhmC,SAAQ,SAAC2nC,GAClBA,EAAKpI,SAASv/B,SAAQ,SAACm+B,IACpB2K,EAAoB3K,GAAW2K,EAAoB3K,IAAY,IAAIxiC,KAAK,CACvEssC,QAASN,EAAKM,QACdtC,YAAagC,EAAKhC,YAClBnhB,IAAKmjB,EAAKnjB,IACV0jB,UAAWP,EAAKO,WAAa,GAC7Ba,UAAWpB,EAAKoB,YAAa,GAEjC,GACF,IAEA,IAAI75B,EAAS,GACb,IAAK,IAAIivB,KAAW2K,EAEd3K,EAAQrjC,QACVoU,EAAOvT,KAAK,CACVmJ,KAAMgjC,EAAkB3J,GAASr5B,KACjCkkC,KAAMlB,EAAkB3J,GAAS8K,gBAAkB,GACnDjD,MAAO8C,EAAoB3K,GAAS3+B,KAAI,SAACmoC,GAAI,OAAKA,EAAKnjB,GAAG,MAIhE,OAAOtV,CACT,GAAC,CAAA1S,IAAA,iBAAAgE,MAED,WACE,OAAOnH,KAAKqrC,KAAKkB,UAAU9gC,IAC7B,GAAC,CAAAtI,IAAA,eAAAgE,MAED,WACE,OADmBzF,UAAAD,OAAA,QAAAtB,IAAAuB,UAAA,GAAAA,UAAA,GAAG,IACN+Q,OAAOF,MAAM,KAAK,EACpC,GAAC,CAAApP,IAAA,cAAAgE,MAED,WAA2B,IACrBqkC,EAAW,GACXtzB,GAFcxW,UAAAD,OAAA,QAAAtB,IAAAuB,UAAA,GAAAA,UAAA,GAAG,IAEA+Q,OAAOF,MAAM,KAOlC,OALI2F,EAAMzW,OAAS,IACjByW,EAAMmR,QACNmiB,EAAWtzB,EAAM0M,KAAK,MAGjB4mB,CACT,GAAC,CAAAroC,IAAA,eAAAgE,MAED,WACE,OAAOnH,KAAKqrC,KAAKkB,UAAUd,OAAS,EACtC,GAAC,CAAAtoC,IAAA,cAAAgE,MAED,WACE,OAAOnH,KAAKqrC,KAAKkB,UAAUC,MAAQ,EACrC,GAAC,CAAArpC,IAAA,YAAAgE,MAED,WACE,OAAOnH,KAAKqrC,KAAKkB,UAAUE,MAC7B,GAAC,CAAAtpC,IAAA,aAAAgE,MAED,WACE,OAAOnH,KAAKqrC,KAAKqB,YAAc1sC,KAAKqrC,KAAKkB,UAAUd,MAAMhqC,OAAS,CACpE,GAAC,CAAA0B,IAAA,WAAAgE,MAED,WACE,MAAqD,WAA9CnH,KAAK0rC,oBAAoBO,gBAClC,GAAC,CAAA9oC,IAAA,aAAAgE,MAED,WACE,MAAqD,aAA9CnH,KAAK0rC,oBAAoBO,gBAClC,GAAC,CAAA9oC,IAAA,mBAAAgE,MAED,WACE,MAAqD,WAA9CnH,KAAK0rC,oBAAoBO,kBAAiCjsC,KAAK0rC,oBAAoBQ,YAC5F,GAAC,CAAA/oC,IAAA,cAAAgE,MAED,SAAYmnC,GAuBV,QArBwB,CACtB,aACA,YACA,oBACA,mBACA,eACA,oBACA,gBACA,YACA,iBACA,iBACA,iBACA,iBACA,OACA,WACA,SACA,SACA,YACA,aAGkB5lC,QAAQ4lC,EAAKhC,cAAgB,GAI7CgC,EAAKM,QAAQ/E,WAAW,UAIxByE,EAAKhC,YAAYuD,cAAcC,MAAM,sBAK3C,2EAAC7E,CAAA,CAlaoB,4vDClCvB8E,EAAA,kBAAAtvC,CAAA,MAAAA,EAAA,GAAAuvC,EAAAvqC,OAAA/E,UAAAuvC,EAAAD,EAAA5sB,eAAAgE,EAAA3hB,OAAA2hB,gBAAA,SAAA5D,EAAArgB,EAAA+sC,GAAA1sB,EAAArgB,GAAA+sC,EAAA/oC,KAAA,EAAAgpC,EAAA,mBAAAxoB,OAAAA,OAAA,GAAAyoB,EAAAD,EAAAvoB,UAAA,aAAAyoB,EAAAF,EAAAG,eAAA,kBAAAC,EAAAJ,EAAAK,aAAA,yBAAAC,EAAAjtB,EAAArgB,EAAAgE,GAAA,OAAA1B,OAAA2hB,eAAA5D,EAAArgB,EAAA,CAAAgE,MAAAA,EAAAyb,YAAA,EAAAE,cAAA,EAAAD,UAAA,IAAAW,EAAArgB,EAAA,KAAAstC,EAAA,aAAA7uC,GAAA6uC,EAAA,SAAAjtB,EAAArgB,EAAAgE,GAAA,OAAAqc,EAAArgB,GAAAgE,CAAA,WAAAupC,EAAAC,EAAAC,EAAAlqC,EAAAmqC,GAAA,IAAAC,EAAAF,GAAAA,EAAAlwC,qBAAAqwC,EAAAH,EAAAG,EAAAC,EAAAvrC,OAAAkd,OAAAmuB,EAAApwC,WAAAmB,EAAA,IAAAovC,EAAAJ,GAAA,WAAAzpB,EAAA4pB,EAAA,WAAA7pC,MAAA+pC,EAAAP,EAAAjqC,EAAA7E,KAAAmvC,CAAA,UAAAG,EAAA/sC,EAAAof,EAAAnjB,GAAA,WAAAY,KAAA,SAAAZ,IAAA+D,EAAAtC,KAAA0hB,EAAAnjB,GAAA,OAAAuB,GAAA,OAAAX,KAAA,QAAAZ,IAAAuB,EAAA,EAAAnB,EAAAiwC,KAAAA,EAAA,IAAAU,EAAA,YAAAL,IAAA,UAAAM,IAAA,UAAAC,IAAA,KAAAC,EAAA,GAAAd,EAAAc,EAAAnB,GAAA,8BAAAoB,EAAA/rC,OAAAgsC,eAAAC,EAAAF,GAAAA,EAAAA,EAAAppC,EAAA,MAAAspC,GAAAA,IAAA1B,GAAAC,EAAAnuC,KAAA4vC,EAAAtB,KAAAmB,EAAAG,GAAA,IAAAC,EAAAL,EAAA5wC,UAAAqwC,EAAArwC,UAAA+E,OAAAkd,OAAA4uB,GAAA,SAAAK,EAAAlxC,GAAA,0BAAAiG,SAAA,SAAA+kB,GAAA+kB,EAAA/vC,EAAAgrB,GAAA,SAAArrB,GAAA,YAAAwxC,QAAAnmB,EAAArrB,EAAA,gBAAAyxC,EAAAd,EAAAe,GAAA,SAAAC,EAAAtmB,EAAArrB,EAAAqc,EAAAkR,GAAA,IAAAqkB,EAAAd,EAAAH,EAAAtlB,GAAAslB,EAAA3wC,GAAA,aAAA4xC,EAAAhxC,KAAA,KAAA4U,EAAAo8B,EAAA5xC,IAAA8G,EAAA0O,EAAA1O,MAAA,OAAAA,GAAA,UAAA+qC,EAAA/qC,IAAA8oC,EAAAnuC,KAAAqF,EAAA,WAAA4qC,EAAAr1B,QAAAvV,EAAAgrC,SAAAj2B,MAAA,SAAA/U,GAAA6qC,EAAA,OAAA7qC,EAAAuV,EAAAkR,EAAA,aAAAhsB,GAAAowC,EAAA,QAAApwC,EAAA8a,EAAAkR,EAAA,IAAAmkB,EAAAr1B,QAAAvV,GAAA+U,MAAA,SAAAk2B,GAAAv8B,EAAA1O,MAAAirC,EAAA11B,EAAA7G,EAAA,aAAArU,GAAA,OAAAwwC,EAAA,QAAAxwC,EAAAkb,EAAAkR,EAAA,IAAAA,EAAAqkB,EAAA5xC,IAAA,KAAAgyC,EAAAjrB,EAAA,gBAAAjgB,MAAA,SAAAukB,EAAArrB,GAAA,SAAAiyC,IAAA,WAAAP,GAAA,SAAAr1B,EAAAkR,GAAAokB,EAAAtmB,EAAArrB,EAAAqc,EAAAkR,EAAA,WAAAykB,EAAAA,EAAAA,EAAAn2B,KAAAo2B,EAAAA,GAAAA,GAAA,aAAApB,EAAAP,EAAAjqC,EAAA7E,GAAA,IAAAyE,EAAA,iCAAAolB,EAAArrB,GAAA,iBAAAiG,EAAA,UAAA3E,MAAA,iDAAA2E,EAAA,cAAAolB,EAAA,MAAArrB,EAAA,OAAA8G,WAAAhH,EAAA4nB,MAAA,OAAAlmB,EAAA6pB,OAAAA,EAAA7pB,EAAAxB,IAAAA,IAAA,KAAAkyC,EAAA1wC,EAAA0wC,SAAA,GAAAA,EAAA,KAAAC,EAAAC,EAAAF,EAAA1wC,GAAA,GAAA2wC,EAAA,IAAAA,IAAApB,EAAA,gBAAAoB,CAAA,cAAA3wC,EAAA6pB,OAAA7pB,EAAA6wC,KAAA7wC,EAAA8wC,MAAA9wC,EAAAxB,SAAA,aAAAwB,EAAA6pB,OAAA,uBAAAplB,EAAA,MAAAA,EAAA,YAAAzE,EAAAxB,IAAAwB,EAAA+wC,kBAAA/wC,EAAAxB,IAAA,gBAAAwB,EAAA6pB,QAAA7pB,EAAAgxC,OAAA,SAAAhxC,EAAAxB,KAAAiG,EAAA,gBAAA2rC,EAAAd,EAAAR,EAAAjqC,EAAA7E,GAAA,cAAAowC,EAAAhxC,KAAA,IAAAqF,EAAAzE,EAAAkmB,KAAA,6BAAAkqB,EAAA5xC,MAAA+wC,EAAA,gBAAAjqC,MAAA8qC,EAAA5xC,IAAA0nB,KAAAlmB,EAAAkmB,KAAA,WAAAkqB,EAAAhxC,OAAAqF,EAAA,YAAAzE,EAAA6pB,OAAA,QAAA7pB,EAAAxB,IAAA4xC,EAAA5xC,IAAA,YAAAoyC,EAAAF,EAAA1wC,GAAA,IAAAixC,EAAAjxC,EAAA6pB,OAAAA,EAAA6mB,EAAA3qB,SAAAkrB,GAAA,QAAA3yC,IAAAurB,EAAA,OAAA7pB,EAAA0wC,SAAA,eAAAO,GAAAP,EAAA3qB,SAAA,SAAA/lB,EAAA6pB,OAAA,SAAA7pB,EAAAxB,SAAAF,EAAAsyC,EAAAF,EAAA1wC,GAAA,UAAAA,EAAA6pB,SAAA,WAAAonB,IAAAjxC,EAAA6pB,OAAA,QAAA7pB,EAAAxB,IAAA,IAAAU,UAAA,oCAAA+xC,EAAA,aAAA1B,EAAA,IAAAa,EAAAd,EAAAzlB,EAAA6mB,EAAA3qB,SAAA/lB,EAAAxB,KAAA,aAAA4xC,EAAAhxC,KAAA,OAAAY,EAAA6pB,OAAA,QAAA7pB,EAAAxB,IAAA4xC,EAAA5xC,IAAAwB,EAAA0wC,SAAA,KAAAnB,EAAA,IAAAvkB,EAAAolB,EAAA5xC,IAAA,OAAAwsB,EAAAA,EAAA9E,MAAAlmB,EAAA0wC,EAAAQ,YAAAlmB,EAAA1lB,MAAAtF,EAAAimB,KAAAyqB,EAAAS,QAAA,WAAAnxC,EAAA6pB,SAAA7pB,EAAA6pB,OAAA,OAAA7pB,EAAAxB,SAAAF,GAAA0B,EAAA0wC,SAAA,KAAAnB,GAAAvkB,GAAAhrB,EAAA6pB,OAAA,QAAA7pB,EAAAxB,IAAA,IAAAU,UAAA,oCAAAc,EAAA0wC,SAAA,KAAAnB,EAAA,UAAA6B,EAAAC,GAAA,IAAAC,EAAA,CAAAC,OAAAF,EAAA,SAAAA,IAAAC,EAAAE,SAAAH,EAAA,SAAAA,IAAAC,EAAAG,WAAAJ,EAAA,GAAAC,EAAAI,SAAAL,EAAA,SAAAM,WAAAlxC,KAAA6wC,EAAA,UAAAM,EAAAN,GAAA,IAAAlB,EAAAkB,EAAAO,YAAA,GAAAzB,EAAAhxC,KAAA,gBAAAgxC,EAAA5xC,IAAA8yC,EAAAO,WAAAzB,CAAA,UAAAhB,EAAAJ,GAAA,KAAA2C,WAAA,EAAAJ,OAAA,SAAAvC,EAAAlqC,QAAAssC,EAAA,WAAAU,OAAA,YAAAvrC,EAAAwrC,GAAA,GAAAA,EAAA,KAAAC,EAAAD,EAAAxD,GAAA,GAAAyD,EAAA,OAAAA,EAAA/xC,KAAA8xC,GAAA,sBAAAA,EAAA9rB,KAAA,OAAA8rB,EAAA,IAAA9yC,MAAA8yC,EAAAnyC,QAAA,KAAAH,GAAA,EAAAwmB,EAAA,SAAAA,IAAA,OAAAxmB,EAAAsyC,EAAAnyC,QAAA,GAAAwuC,EAAAnuC,KAAA8xC,EAAAtyC,GAAA,OAAAwmB,EAAA3gB,MAAAysC,EAAAtyC,GAAAwmB,EAAAC,MAAA,EAAAD,EAAA,OAAAA,EAAA3gB,WAAAhH,EAAA2nB,EAAAC,MAAA,EAAAD,CAAA,SAAAA,EAAAA,KAAAA,CAAA,SAAAA,KAAAgsB,EAAA,UAAAA,IAAA,OAAA3sC,WAAAhH,EAAA4nB,MAAA,UAAAspB,EAAA3wC,UAAA4wC,EAAAlqB,EAAAuqB,EAAA,eAAAxqC,MAAAmqC,EAAAxuB,cAAA,IAAAsE,EAAAkqB,EAAA,eAAAnqC,MAAAkqC,EAAAvuB,cAAA,IAAAuuB,EAAA/E,YAAAmE,EAAAa,EAAAf,EAAA,qBAAA9vC,EAAAszC,oBAAA,SAAAC,GAAA,IAAAvxB,EAAA,mBAAAuxB,GAAAA,EAAAhvC,YAAA,QAAAyd,IAAAA,IAAA4uB,GAAA,uBAAA5uB,EAAA6pB,aAAA7pB,EAAAhX,MAAA,EAAAhL,EAAAwzC,KAAA,SAAAD,GAAA,OAAAvuC,OAAAyuC,eAAAzuC,OAAAyuC,eAAAF,EAAA1C,IAAA0C,EAAAG,UAAA7C,EAAAb,EAAAuD,EAAAzD,EAAA,sBAAAyD,EAAAtzC,UAAA+E,OAAAkd,OAAAgvB,GAAAqC,CAAA,EAAAvzC,EAAA2zC,MAAA,SAAA/zC,GAAA,OAAA8xC,QAAA9xC,EAAA,EAAAuxC,EAAAE,EAAApxC,WAAA+vC,EAAAqB,EAAApxC,UAAA2vC,GAAA,0BAAA5vC,EAAAqxC,cAAAA,EAAArxC,EAAA4zC,MAAA,SAAA1D,EAAAC,EAAAlqC,EAAAmqC,EAAAkB,QAAA,IAAAA,IAAAA,EAAAt1B,SAAA,IAAA63B,EAAA,IAAAxC,EAAApB,EAAAC,EAAAC,EAAAlqC,EAAAmqC,GAAAkB,GAAA,OAAAtxC,EAAAszC,oBAAAnD,GAAA0D,EAAAA,EAAAxsB,OAAA5L,MAAA,SAAArG,GAAA,OAAAA,EAAAkS,KAAAlS,EAAA1O,MAAAmtC,EAAAxsB,MAAA,KAAA8pB,EAAAD,GAAAlB,EAAAkB,EAAApB,EAAA,aAAAE,EAAAkB,EAAAvB,GAAA,0BAAAK,EAAAkB,EAAA,qDAAAlxC,EAAAwH,KAAA,SAAAgF,GAAA,IAAAqX,EAAA7e,OAAAwH,GAAAhF,EAAA,WAAA9E,KAAAmhB,EAAArc,EAAA3F,KAAAa,GAAA,OAAA8E,EAAAolB,UAAA,SAAAvF,IAAA,KAAA7f,EAAAxG,QAAA,KAAA0B,EAAA8E,EAAA4jB,MAAA,GAAA1oB,KAAAmhB,EAAA,OAAAwD,EAAA3gB,MAAAhE,EAAA2kB,EAAAC,MAAA,EAAAD,CAAA,QAAAA,EAAAC,MAAA,EAAAD,CAAA,GAAArnB,EAAA2H,OAAAA,EAAA6oC,EAAAvwC,UAAA,CAAAsE,YAAAisC,EAAA0C,MAAA,SAAAY,GAAA,QAAAC,KAAA,OAAA1sB,KAAA,OAAA4qB,KAAA,KAAAC,WAAAxyC,EAAA,KAAA4nB,MAAA,OAAAwqB,SAAA,UAAA7mB,OAAA,YAAArrB,SAAAF,EAAA,KAAAqzC,WAAA7sC,QAAA8sC,IAAAc,EAAA,QAAA9oC,KAAA,WAAAA,EAAAwiB,OAAA,IAAAgiB,EAAAnuC,KAAA,KAAA2J,KAAA3K,OAAA2K,EAAAzJ,MAAA,WAAAyJ,QAAAtL,EAAA,EAAAs0C,KAAA,gBAAA1sB,MAAA,MAAA2sB,EAAA,KAAAlB,WAAA,GAAAE,WAAA,aAAAgB,EAAAzzC,KAAA,MAAAyzC,EAAAr0C,IAAA,YAAAs0C,IAAA,EAAA/B,kBAAA,SAAAgC,GAAA,QAAA7sB,KAAA,MAAA6sB,EAAA,IAAA/yC,EAAA,cAAAgzC,EAAAC,EAAAC,GAAA,OAAA9C,EAAAhxC,KAAA,QAAAgxC,EAAA5xC,IAAAu0C,EAAA/yC,EAAAimB,KAAAgtB,EAAAC,IAAAlzC,EAAA6pB,OAAA,OAAA7pB,EAAAxB,SAAAF,KAAA40C,CAAA,SAAAzzC,EAAA,KAAAkyC,WAAA/xC,OAAA,EAAAH,GAAA,IAAAA,EAAA,KAAA6xC,EAAA,KAAAK,WAAAlyC,GAAA2wC,EAAAkB,EAAAO,WAAA,YAAAP,EAAAC,OAAA,OAAAyB,EAAA,UAAA1B,EAAAC,QAAA,KAAAoB,KAAA,KAAAQ,EAAA/E,EAAAnuC,KAAAqxC,EAAA,YAAA8B,EAAAhF,EAAAnuC,KAAAqxC,EAAA,iBAAA6B,GAAAC,EAAA,SAAAT,KAAArB,EAAAE,SAAA,OAAAwB,EAAA1B,EAAAE,UAAA,WAAAmB,KAAArB,EAAAG,WAAA,OAAAuB,EAAA1B,EAAAG,WAAA,SAAA0B,GAAA,QAAAR,KAAArB,EAAAE,SAAA,OAAAwB,EAAA1B,EAAAE,UAAA,YAAA4B,EAAA,UAAAtzC,MAAA,kDAAA6yC,KAAArB,EAAAG,WAAA,OAAAuB,EAAA1B,EAAAG,WAAA,KAAAT,OAAA,SAAA5xC,EAAAZ,GAAA,QAAAiB,EAAA,KAAAkyC,WAAA/xC,OAAA,EAAAH,GAAA,IAAAA,EAAA,KAAA6xC,EAAA,KAAAK,WAAAlyC,GAAA,GAAA6xC,EAAAC,QAAA,KAAAoB,MAAAvE,EAAAnuC,KAAAqxC,EAAA,oBAAAqB,KAAArB,EAAAG,WAAA,KAAA4B,EAAA/B,EAAA,OAAA+B,IAAA,UAAAj0C,GAAA,aAAAA,IAAAi0C,EAAA9B,QAAA/yC,GAAAA,GAAA60C,EAAA5B,aAAA4B,EAAA,UAAAjD,EAAAiD,EAAAA,EAAAxB,WAAA,UAAAzB,EAAAhxC,KAAAA,EAAAgxC,EAAA5xC,IAAAA,EAAA60C,GAAA,KAAAxpB,OAAA,YAAA5D,KAAAotB,EAAA5B,WAAAlC,GAAA,KAAA+D,SAAAlD,EAAA,EAAAkD,SAAA,SAAAlD,EAAAsB,GAAA,aAAAtB,EAAAhxC,KAAA,MAAAgxC,EAAA5xC,IAAA,gBAAA4xC,EAAAhxC,MAAA,aAAAgxC,EAAAhxC,KAAA,KAAA6mB,KAAAmqB,EAAA5xC,IAAA,WAAA4xC,EAAAhxC,MAAA,KAAA0zC,KAAA,KAAAt0C,IAAA4xC,EAAA5xC,IAAA,KAAAqrB,OAAA,cAAA5D,KAAA,kBAAAmqB,EAAAhxC,MAAAsyC,IAAA,KAAAzrB,KAAAyrB,GAAAnC,CAAA,EAAAgE,OAAA,SAAA9B,GAAA,QAAAhyC,EAAA,KAAAkyC,WAAA/xC,OAAA,EAAAH,GAAA,IAAAA,EAAA,KAAA6xC,EAAA,KAAAK,WAAAlyC,GAAA,GAAA6xC,EAAAG,aAAAA,EAAA,YAAA6B,SAAAhC,EAAAO,WAAAP,EAAAI,UAAAE,EAAAN,GAAA/B,CAAA,kBAAAgC,GAAA,QAAA9xC,EAAA,KAAAkyC,WAAA/xC,OAAA,EAAAH,GAAA,IAAAA,EAAA,KAAA6xC,EAAA,KAAAK,WAAAlyC,GAAA,GAAA6xC,EAAAC,SAAAA,EAAA,KAAAnB,EAAAkB,EAAAO,WAAA,aAAAzB,EAAAhxC,KAAA,KAAAo0C,EAAApD,EAAA5xC,IAAAozC,EAAAN,EAAA,QAAAkC,CAAA,YAAA1zC,MAAA,0BAAA2zC,cAAA,SAAA1B,EAAAb,EAAAC,GAAA,YAAAT,SAAA,CAAA3qB,SAAAxf,EAAAwrC,GAAAb,WAAAA,EAAAC,QAAAA,GAAA,cAAAtnB,SAAA,KAAArrB,SAAAF,GAAAixC,CAAA,GAAA3wC,CAAA,UAAA80C,EAAAC,EAAA94B,EAAAkR,EAAA6nB,EAAAC,EAAAvyC,EAAA9C,GAAA,QAAAwsB,EAAA2oB,EAAAryC,GAAA9C,GAAA8G,EAAA0lB,EAAA1lB,KAAA,OAAA3F,GAAA,YAAAosB,EAAApsB,EAAA,CAAAqrB,EAAA9E,KAAArL,EAAAvV,GAAAsV,QAAAC,QAAAvV,GAAA+U,KAAAu5B,EAAAC,EAAA,UAAAC,EAAAvxC,GAAA,sBAAAsC,EAAA,KAAArF,EAAAK,UAAA,WAAA+a,SAAA,SAAAC,EAAAkR,GAAA,IAAA4nB,EAAApxC,EAAAnC,MAAAyE,EAAArF,GAAA,SAAAo0C,EAAAtuC,GAAAouC,EAAAC,EAAA94B,EAAAkR,EAAA6nB,EAAAC,EAAA,OAAAvuC,EAAA,UAAAuuC,EAAA9zC,GAAA2zC,EAAAC,EAAA94B,EAAAkR,EAAA6nB,EAAAC,EAAA,QAAA9zC,EAAA,CAAA6zC,OAAAt1C,EAAA,cAAAy1C,EAAAzyB,EAAA0yB,GAAA,QAAAv0C,EAAA,EAAAA,EAAAu0C,EAAAp0C,OAAAH,IAAA,KAAAw0C,EAAAD,EAAAv0C,GAAAw0C,EAAAlzB,WAAAkzB,EAAAlzB,aAAA,EAAAkzB,EAAAhzB,cAAA,YAAAgzB,IAAAA,EAAAjzB,UAAA,GAAApd,OAAA2hB,eAAAjE,EAAA4yB,EAAAD,EAAA3yC,KAAA2yC,EAAA,WAAApO,EAAAlkB,EAAArgB,EAAAgE,GAAA,OAAAhE,EAAA4yC,EAAA5yC,MAAAqgB,EAAA/d,OAAA2hB,eAAA5D,EAAArgB,EAAA,CAAAgE,MAAAA,EAAAyb,YAAA,EAAAE,cAAA,EAAAD,UAAA,IAAAW,EAAArgB,GAAAgE,EAAAqc,CAAA,UAAAuyB,EAAA11C,GAAA,IAAA8C,EAAA,SAAA6yC,EAAAC,GAAA,cAAA/D,EAAA8D,IAAA,OAAAA,EAAA,OAAAA,EAAA,IAAAE,EAAAF,EAAAruB,OAAAwuB,aAAA,QAAAh2C,IAAA+1C,EAAA,KAAAr8B,EAAAq8B,EAAAp0C,KAAAk0C,EAAAC,UAAA,cAAA/D,EAAAr4B,GAAA,OAAAA,EAAA,UAAA9Y,UAAA,uDAAAihB,OAAAg0B,EAAA,CAAAI,CAAA/1C,GAAA,iBAAA6xC,EAAA/uC,GAAAA,EAAA6e,OAAA7e,EAAA,CAcA,IAAMkzC,EAAiB,aACjBC,EAAyB,mCACzBC,EAA8D,eAAjC5O,EAAAA,EAAAA,iBAAiD,uBAAyB,2BAEvG6O,EAAsBC,IAAcJ,EAAgBC,GACpDI,EAAS/O,EAAAA,EAAAA,gCAA8C,KAE7DgP,IAAS,OAAQ,CACfrlB,MAAO+kB,EACPpf,OAAQqf,IAaV,IAAMM,EAAa,GAAHrvC,OAAMogC,EAAAA,EAAAA,mBAA8B,YAkD/BkP,EAAa,WAyDhC,SAAAA,EAAYC,EAAsB/xC,GAAa,IAAA+nC,EAAA,MA/IjD,SAAA1hC,EAAA2rC,GAAA,KAAA3rC,aAAA2rC,GAAA,UAAAh2C,UAAA,qCA+IiD0mC,CAAA,KAAAoP,GAAAnP,EAAA,sCAAAiO,EAAA5F,IAAAkE,MAkGd,SAAA+C,IAAA,IAAAC,EAAAC,EAAA,OAAAnH,IAAAW,MAAA,SAAAyG,GAAA,cAAAA,EAAA3C,KAAA2C,EAAArvB,MAAA,cAAAqvB,EAAArvB,KAAA,EACmBsvB,EAAAA,EAAAA,MAAAA,YAAAA,mBAChD,0CACA,WACA,GACD,OAJwCD,EAAAzE,OAMjCuE,EAAiBhY,SAASoY,iBAAiB,gBAC3CH,EAAkBjY,SAASoY,iBAAiB,iBACjDJ,EAAgBtwC,SAAQ,SAAC2wC,GACxBA,EAAIC,UAAUxpB,IAAI,cACpB,IACCmpB,EAAiBvwC,SAAQ,SAAC2wC,GACzBA,EAAIC,UAAUC,OAAO,cACvB,KAEF1K,EAAK2K,cAAc,wBAAAN,EAAA1C,OAAA,GAAAuC,EAAA,MAGrBtP,EAAA,+BAAAiO,EAAA5F,IAAAkE,MAC0B,SAAAyD,IAAA,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAhI,IAAAW,MAAA,SAAAsH,GAAA,cAAAA,EAAAxD,KAAAwD,EAAAlwB,MAAA,OACpBglB,EAAKmL,mBACS,QAAhBN,EAAA7K,EAAKoL,mBAAW,IAAAP,GAAhBA,EAAkBjV,iBAAiB,QAAOiT,EAAA5F,IAAAkE,MAAE,SAAAkE,IAAA,OAAApI,IAAAW,MAAA,SAAA0H,GAAA,cAAAA,EAAA5D,KAAA4D,EAAAtwB,MAAA,OACnB,GAAvBglB,EAAKuL,mBACDvL,EAAKoL,YAAYX,UAAUe,SAAS,iBAAkB,CAAFF,EAAAtwB,KAAA,QACtDglB,EAAKoL,YAAYX,UAAUC,OAAO,iBAClC1K,EAAKyL,qCACLzL,EAAK0L,WAAY,EAAMJ,EAAAtwB,KAAA,gBAEwB,GAA/CglB,EAAKoL,YAAYX,UAAUxpB,IAAI,iBAE3B+e,EAAK2L,aAAc,CAAFL,EAAAtwB,KAAA,gBAAAswB,EAAAtwB,KAAA,GACbglB,EAAK4L,oCAAmC,QAAAN,EAAAtwB,KAAA,iBAE9CglB,EAAK6L,gCAAgC,QAGrC7L,EAAK0L,YACPI,EAAAA,EAAAA,IAAW,iBAAkB,CAC3BC,eAAgB,SAChBrpB,OAAQ,UACRspB,UAAW,cACX/2B,OAAQ,YACRg3B,gBAAiB,sCAEpB,yBAAAX,EAAA3D,OAAA,GAAA0D,EAAA,MAGa,QAAhBP,EAAA9K,EAAKoL,mBAAW,IAAAN,GAAhBA,EAAkBlV,iBAAiB,aAAYiT,EAAA5F,IAAAkE,MAAE,SAAA+E,IAAA,OAAAjJ,IAAAW,MAAA,SAAAuI,GAAA,cAAAA,EAAAzE,KAAAyE,EAAAnxB,MAAA,OAC/CglB,EAAK0L,WAAY,EACjB1L,EAAKoL,YAAYgB,QAEE,oBAARC,KAETA,IAAI1zB,UAAU2zB,MAAMC,eAClB,UACA,UACA,gCACA,CACEC,eAAgB,gCAChBC,MAAO,SAET,IAGJX,EAAAA,EAAAA,IAAW,iBAAkB,CAC3BC,eAAgB,SAChBrpB,OAAQ,UACRspB,UAAW,cACX/2B,OAAQ,YACRg3B,gBAAiB,sCAChB,wBAAAE,EAAAxE,OAAA,GAAAuE,EAAA,MAGW,QAAhBnB,EAAA/K,EAAKoL,mBAAW,IAAAL,GAAhBA,EAAkBnV,iBAAiB,cAAc,WAC3CoK,EAAKoL,YAAYX,UAAUe,SAAS,kBACtCxL,EAAKoL,YAAYX,UAAUC,OAAO,iBAEpC1K,EAAK0L,WAAY,EACjB1L,EAAKyL,oCACP,IAEgC,QAAhCT,EAAIhL,EAAK0M,+BAAuB,IAAA1B,GAA5BA,EAA8BP,UAAUe,SAAS,aACnDxL,EAAK0M,wBAAwBjC,UAAUC,OAAO,YAEhD1K,EAAKoL,YAAYX,UAAUxpB,IAAI,cAGX,QAApBgqB,EAAIjL,EAAKoL,mBAAW,IAAAH,GAAhBA,EAAkBR,UAAUe,SAAS,aACvCxL,EAAKoL,YAAYX,UAAUC,OAAO,YAEpC1K,EAAK0M,wBAAwBjC,UAAUxpB,IAAI,aAG7C+e,EAAK2K,cAAc,wBAAAO,EAAAvD,OAAA,GAAAiD,EAAA,MACpBhQ,EAAA,yCAAAiO,EAAA5F,IAAAkE,MAEmC,SAAAwF,IAAA,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAjK,IAAAW,MAAA,SAAAuJ,GAAA,cAAAA,EAAAzF,KAAAyF,EAAAnyB,MAAA,OAiBoB,GAhBhD6xB,EAAwB,CAC5B3P,EAAAA,GAAAA,cACAA,EAAAA,GAAAA,wBACAA,EAAAA,GAAAA,WACAA,EAAAA,GAAAA,uBACAA,EAAAA,GAAAA,SAG4DtC,EAAAgS,EAAG,CAAC,EAC/D1P,EAAAA,GAAAA,cAA4B8C,EAAKoN,qBAAmBxS,EAAAgS,EACpD1P,EAAAA,GAAAA,wBAAsC8C,EAAKqN,sCAAoCzS,EAAAgS,EAC/E1P,EAAAA,GAAAA,WAAyB8C,EAAKsN,2BAAyB1S,EAAAgS,EACvD1P,EAAAA,GAAAA,uBAAqC8C,EAAKuN,8BAA4B3S,EAAAgS,EACtE1P,EAAAA,GAAAA,QAAsB8C,EAAKwN,wBALxBV,EAK8CF,EAGhDG,EAAyB,GAAHtyC,OAAOoyC,GAAqBM,EAAAzF,KAAA,GAExB1H,EAAKyN,SAAS7N,WAAU,CAAAuN,EAAAnyB,KAAA,gBAAAmyB,EAAAnyB,KAAA,EACxCglB,EAAK0N,uBAAuBb,GAAsB,OAAAM,EAAAQ,GAAAR,EAAAvH,KAAAuH,EAAAnyB,KAAA,wBAAAmyB,EAAAnyB,KAAA,GAClDglB,EAAK4N,wCAAuC,QAAAT,EAAAQ,GAAAR,EAAAvH,KAAA,SAFhDoH,EAAiBG,EAAAQ,KAKCX,EAAkBr4C,OAAS,IACjDo4C,EAAyBF,EACtBt0C,QAAO,SAAAs1C,GAAW,OAAKb,EAAkBc,SAASD,EAAY,KAClEV,EAAAnyB,KAAA,iBAAAmyB,EAAAzF,KAAA,GAAAyF,EAAAY,GAAAZ,EAAA,SAEDz3C,QAAQhB,MAAKy4C,EAAAY,IAAQ,QAGvB/N,EAAK2L,cAAe,EAEhBoB,EAAuBp4C,OAAS,GAC5Bs4C,EAA0B,EAAIF,EAAuBp4C,OAErDu4C,EAAqBL,EACxBt0C,QAAO,SAAAy/B,GAAO,OACZ+U,EAAuBe,SAAS9V,EAAQ,IAE1C9iC,MAAM,EAAG+3C,GACZF,EAAyBA,EAAuBtyC,OAAOyyC,IAEvDH,EAAyBA,EAAuB73C,MAAM,EAAG,GAG3D8qC,EAAKgO,wBAAwBC,cAAc,yBAA0BC,aAAa,OAAQpB,EAA0BC,EAAuB,IAAI/Q,MAC/IgE,EAAKgO,wBAAwBC,cAAc,wBAAyBC,aAAa,MAAOpB,EAA0BC,EAAuB,IAAIoB,WAC7InO,EAAKgO,wBAAwBC,cAAc,mCAAoCG,UAAYtB,EAA0BC,EAAuB,IAAIsB,QAChJrO,EAAKgO,wBAAwBC,cAAc,qCAAsCG,UAAYtB,EAA0BC,EAAuB,IAAIuB,QAElJtO,EAAKgO,wBAAwBC,cAAc,yBAA0BC,aAAa,OAAQpB,EAA0BC,EAAuB,IAAI/Q,MAC/IgE,EAAKgO,wBAAwBC,cAAc,wBAAyBC,aAAa,MAAOpB,EAA0BC,EAAuB,IAAIoB,WAC7InO,EAAKgO,wBAAwBC,cAAc,mCAAoCG,UAAYtB,EAA0BC,EAAuB,IAAIsB,QAChJrO,EAAKgO,wBAAwBC,cAAc,qCAAsCG,UAAYtB,EAA0BC,EAAuB,IAAIuB,QAElJtO,EAAKgO,wBAAwBC,cAAc,yBAA0BC,aAAa,OAAQpB,EAA0BC,EAAuB,IAAI/Q,MAC/IgE,EAAKgO,wBAAwBC,cAAc,wBAAyBC,aAAa,MAAOpB,EAA0BC,EAAuB,IAAIoB,WAC7InO,EAAKgO,wBAAwBC,cAAc,mCAAoCG,UAAYtB,EAA0BC,EAAuB,IAAIsB,QAChJrO,EAAKgO,wBAAwBC,cAAc,qCAAsCG,UAAYtB,EAA0BC,EAAuB,IAAIuB,QAElJtO,EAAK6L,gCAAgC,yBAAAsB,EAAAxF,OAAA,GAAAgF,EAAA,oBACxC/R,EAAA,sCAE+B,WAC1BoF,EAAKuO,sBAAsB9D,UAAUe,SAAS,SAChDxL,EAAKuO,sBAAsB9D,UAAUxpB,IAAI,QAEvC+e,EAAKwO,qBAAqB/D,UAAUe,SAAS,WAC/CxL,EAAKwO,qBAAqB/D,UAAUxpB,IAAI,SAE5C,IAAC2Z,EAAA,2CAEoC,WAChCoF,EAAKuO,sBAAsB9D,UAAUe,SAAS,SAC/CxL,EAAKuO,sBAAsB9D,UAAUC,OAAO,QAE3C1K,EAAKwO,qBAAqB/D,UAAUe,SAAS,WAC9CxL,EAAKwO,qBAAqB/D,UAAUC,OAAO,SAE/C,IAAC9P,EAAA,6CAAAiO,EAAA5F,IAAAkE,MAauC,SAAAsH,IAAA,IAAAC,EAAAC,EAAAC,EAAAC,EAAAj+B,EAAAk+B,EAAAC,EAAAC,EAAA,OAAA/L,IAAAW,MAAA,SAAAqL,GAAA,cAAAA,EAAAvH,KAAAuH,EAAAj0B,MAAA,OAaI,OAZpC2zB,EAAiC,CACrC,KAAQzR,EAAAA,GAAAA,cACR,WAAcA,EAAAA,GAAAA,WACd,IAAOA,EAAAA,GAAAA,wBACP,IAAOA,EAAAA,GAAAA,uBACP,QAAWA,EAAAA,GAAAA,SAGP0R,EAAmB7d,mBAAwD,QAAtC2d,EAACQ,EAAAA,EAAAA,UAAkB,2BAAmB,IAAAR,EAAAA,EAAI,IAAIhkC,QAAQ,SAAU,IACrGmkC,EAAuB,qHAAHp0C,OAGAm0C,EAAgB,0NAAAK,EAAAj0B,KAAA,EAYnBglB,EAAKmP,oBAAoBN,GAAqB,OAAvD,KAARj+B,EAAQq+B,EAAArJ,MACFwJ,GAAI,CAAFH,EAAAj0B,KAAA,gBAAAi0B,EAAAj0B,KAAA,EACepK,EAASqoB,OAAM,OAC6D,GADjG6V,EAAYG,EAAArJ,QACZmJ,EAAiBD,EAAahoC,KAAKuoC,uCAAuCN,eAAe3V,UAC5EzkC,OAAS,GAAC,CAAAs6C,EAAAj0B,KAAA,SAC6I,OAAlKg0B,EAAwBD,EAAmE11C,KAAI,SAAC01C,GAAc,OAAKJ,EAA+BI,EAAe,IAACE,EAAAlJ,OAAA,SACjKiJ,GAAoB,eAAAC,EAAAlJ,OAAA,SAEtBgJ,GAAc,aAEjB,0CAAyC,yBAAAE,EAAAtH,OAAA,GAAA8G,EAAA,MAChD7T,EAAA,6CAAA0U,EAAAzG,EAAA5F,IAAAkE,MAEwB,SAAAoI,EAAO1C,GAAqB,IAAA2C,EAAAl2C,EAAAsX,EAAAk+B,EAAAW,EAAAC,EAAA,OAAAzM,IAAAW,MAAA,SAAA+L,GAAA,cAAAA,EAAAjI,KAAAiI,EAAA30B,MAAA,cAAA20B,EAAA30B,KAAA,EAE5B4hB,EAAAA,GAAAA,cAAwB,OAIjB,OAJxB4S,EAAQG,EAAA/J,KACRtsC,EAAQ,6GAAHmB,OAGW+0C,EAAQ,+dAAAG,EAAA30B,KAAA,EAuBPglB,EAAKmP,oBAAoB71C,GAAM,OAAxC,KAARsX,EAAQ++B,EAAA/J,MACFwJ,GAAI,CAAFO,EAAA30B,KAAA,gBAAA20B,EAAA30B,KAAA,GACepK,EAASqoB,OAAM,QAQpC,GARA6V,EAAYa,EAAA/J,QACZ6J,EACFX,EACGhoC,KACAuoC,uCACAxP,MACD+P,SAAQ,SAAApO,GACR,OAAOA,EAAKpI,SAAS//B,KAAI,SAAA2+B,GAAO,OAAIA,EAAQsK,UAAU,GACxD,KACgB3tC,OAAS,GAAC,CAAAg7C,EAAA30B,KAAA,SAGzB,OAFG00B,EAAmB7C,EAAsBt0C,QAAO,SAAC+pC,GAAkB,OACrEmN,EAAgB3B,SAASxL,EAAW,IACrCqN,EAAA5J,OAAA,SACI2J,GAAgB,eAAAC,EAAA5J,OAAA,SAElB0J,GAAe,aAElB,gCAA+B,yBAAAE,EAAAhI,OAAA,GAAA4H,EAAA,KACtC,gBAAAM,GAAA,OAAAP,EAAAn6C,MAAA,KAAAP,UAAA,EAnDA,IAsDDgmC,EAAA,mBAEa,WACU,UAAjBoF,EAAK8P,UACP3d,SAASxP,KAAK8nB,UAAUxpB,IAAI,gBAC5B+e,EAAK+P,oBACL5d,SAASyD,iBAAiB,UAAU,WAClCoK,EAAK+P,mBACP,KAEF/P,EAAK2K,cAELtvB,OAAOua,iBAAiB,UAAU,WAChCoK,EAAK2K,cACL3K,EAAK+P,mBACP,IAEAC,EAAIhQ,EAAKiQ,kBAAkBp2C,SAAQ,SAAAq2C,GACjCA,EAAgBta,iBAAiB,cAAc,WAC7C,GAAIzD,SAASge,gBAAgBC,YAAc,KAAM,KAAAC,EAC/CrQ,EAAKsQ,cACLJ,EAAgBzF,UAAUC,OAAO,gBACf,QAAlB2F,EAAArQ,EAAKuQ,qBAAa,IAAAF,GAAlBA,EAAoB5F,UAAUC,OAAO,aACrC,IAAI8F,EAAkCN,EAAgBjC,cAAc,qBAChEwC,EAAuCP,EAAgBjC,cAAc,2BACzEjO,EAAK0Q,oBAAoBD,EAAyBD,EACpD,CAEF,GACF,IAEAR,EAAIhQ,EAAK2Q,gBAAgB92C,SAAQ,SAAA+2C,GAC/BA,EAAchb,iBAAiB,SAAS,WACtCoK,EAAKgK,QAAQS,UAAUxpB,IAAI,kBAC3B,IAGI4vB,EAHEC,EAAYF,EAAcG,QAAQC,UACpCR,EAAqBxQ,EAAKgK,QAAQiE,cAAc,IAAM6C,GAG1D,GAAIF,EAAcG,QAAQE,MAAO,CAC/BJ,EAAQD,EAAcG,QAAQE,MAC9B,IAAMC,EAA2BV,aAAkB,EAAlBA,EAAoBvC,cAAc,IAAM4C,GAEzEb,EAD4BQ,aAAkB,EAAlBA,EAAoBjG,iBAAiB,0BACvD1wC,SAAQ,SAAAs3C,GAChBA,EAAI1G,UAAUC,OAAO,SACvB,IACAwG,SAAAA,EAAazG,UAAUxpB,IAAI,SAC7B,CAEA+uB,EAAIhQ,EAAKoR,kBAAkBv3C,SAAQ,SAAAw3C,GACjCA,EAAgB5G,UAAUC,OAAO,cACnC,IACA8F,SAAAA,EAAoB/F,UAAUxpB,IAAI,eAClC2vB,EAAcU,WAAW7G,UAAU8G,OAAO,eAC5C,IAGAX,EAAchb,iBAAiB,SAAS,SAACrmB,GACvC,IACmEiiC,EAD7DC,EAAWb,EAAcU,WAC/B,GAAa,OAAT/hC,EAAElZ,KAAgB87B,SAASge,gBAAgBC,YAAc,MAK3D,GAJApQ,EAAKsQ,cACLmB,EAAShH,UAAUxpB,IAAI,aAEL,QAAlBuwB,EAAAxR,EAAKuQ,qBAAa,IAAAiB,GAAlBA,EAAoB/G,UAAUC,OAAO,aACjC+G,EAAShH,UAAUe,SAAS,gBAAiB,CAC/C,IAAIgF,EAAkCiB,EAASxD,cAAc,qBACzDwC,EAAuCgB,EAASxD,cAAc,2BAClEjO,EAAK0Q,oBAAoBD,EAAyBD,EACpD,OACK,GAAa,SAATjhC,EAAElZ,IAAgB,CAC3B,IAAIq7C,EAASD,EACTZ,EAAQD,EAAce,aAAa,cACnCd,GAAS1e,SAASyf,eAAef,KACnCa,EAASvf,SAASyf,eAAef,IAEJa,EAAOzD,cAAc,uBAC1C4D,MAAM,CAAEC,cAAc,GAClC,KAAoB,UAATviC,EAAElZ,KACX2pC,EAAKuL,iBAGT,GACF,IAEAyE,EAAIhQ,EAAK+R,YAAYl4C,SAAQ,SAAAm4C,GAE3BA,EAAUpc,iBAAiB,SAAS,WAClC,IAAMqc,EAA0BD,EAAUE,QAAQ,qBAC5CC,EAA+BF,EAAWhE,cAAc,2BAExDmE,EAAYJ,EAAUjB,QAAQE,MAC9BoB,EAAkCJ,EAAW1H,iBAAiB,yBAGpEyF,EAFuCiC,EAAW1H,iBAAiB,gBAE9C1wC,SAAQ,SAAAm4C,GAC3BA,EAAUvH,UAAUC,OAAO,SAC7B,IAEAsF,EAAIqC,GAAkBx4C,SAAQ,SAAAy4C,GACxBA,EAAWh6C,IAAM85C,EACnBE,EAAW7H,UAAUxpB,IAAI,UAEzBqxB,EAAW7H,UAAUC,OAAO,SAEhC,IACAsH,EAAUvH,UAAUxpB,IAAI,UACxB+e,EAAK0Q,oBAAoByB,EAAiBF,EAE5C,GACF,IAEAjS,EAAKuS,eAAe3c,iBAAiB,SAAS,WAC5CoK,EAAKgK,QAAQS,UAAUxpB,IAAI,gBAC7B,IAEA+e,EAAKwS,eAAe5c,iBAAiB,SAAS,WAC5CoK,EAAKgK,QAAQS,UAAUC,OAAO,gBAChC,IAEA1K,EAAKyS,SAAS7c,iBAAiB,SAAS,WACtCoK,EAAKuL,iBACP,IAEAvL,EAAK0S,aAAa9c,iBAAiB,SAAS,WAAM,IAAA+c,EAC9B,QAAlBA,EAAA3S,EAAKuQ,qBAAa,IAAAoC,GAAlBA,EAAoBlI,UAAUC,OAAO,aACrC1K,EAAKgK,QAAQS,UAAUC,OAAO,kBAC1B1K,EAAKgK,QAAQS,UAAUe,SAAS,gBAClCxL,EAAKgK,QAAQS,UAAUC,OAAO,eAC9B1K,EAAK4S,yBAEL5S,EAAKgK,QAAQS,UAAUxpB,IAAI,eAC3B+e,EAAK6S,uBAGT,IAEA7C,EAAIhQ,EAAK8S,mBAAmBj5C,SAAQ,SAAAk5C,GAClCA,EAAiBnd,iBAAiB,SAAS,WAAM,IAAAod,EAC/ChT,EAAKgK,QAAQS,UAAUC,OAAO,kBACf,QAAfsI,EAAAhT,EAAKiT,kBAAU,IAAAD,GAAfA,EAAiBvI,UAAUC,OAAO,UAClC5tB,YAAW,WACTi2B,EAAiBzB,WAAW7G,UAAUC,OAAO,cAC/C,GAAG,IACL,GACF,IAEqB,WAAjB1K,EAAK8P,UACP9P,EAAKkT,WAAWtd,iBAAiB,SAAS,WACxCoK,EAAK6S,uBACL7S,EAAKiT,WAAWxI,UAAUxpB,IAAI,UAC9B+e,EAAKgK,QAAQS,UAAUxpB,IAAI,mBAE3B6qB,EAAAA,EAAAA,IAAW,qCAAsC,CAC/CC,eAAgB,SAChBrpB,OAAQ,UACRspB,UAAW,SACX/2B,OAAQ,YACRg3B,gBAAiB,uBAErB,IAEAjM,EAAKmT,YAAYvd,iBAAiB,SAAS,WACzCoK,EAAKoT,cACLpT,EAAKgK,QAAQS,UAAUC,OAAO,mBAE9BoB,EAAAA,EAAAA,IAAW,0CAA2C,CACpDC,eAAgB,SAChBrpB,OAAQ,UACRspB,UAAW,SACX/2B,OAAQ,YACRg3B,gBAAiB,4BAErB,IAGAjM,EAAKqT,aAAaz9C,GAAG,UAAU,SAAA09C,GAAwB,IAArB75C,EAAO65C,EAAP75C,QAAc65C,EAAL95C,MACrCC,GAAWA,EAAQ2a,OACrB4rB,EAAKuT,WAAa95C,EAAQ2a,KAC1B4rB,EAAKwT,YAAc/5C,EAAQH,MAC3B0mC,EAAKyT,QAAUh6C,EAAQi6C,QAE3B,IAEA1T,EAAK2T,YAAY/d,iBAAiB,SAAS,SAACrmB,GAC1CywB,EAAKqT,aAAa9zC,SAASgQ,EAAE8G,OAAOhc,OACpC2lC,EAAKqT,aAAa9kC,SAElByxB,EAAK4T,uBACP,IAEA5T,EAAK2T,YAAY/d,iBAAiB,YAAY,SAACrmB,GAC/B,UAAVA,EAAElZ,OACJy1C,EAAAA,EAAAA,IAAW,mBAAoB,CAC7BC,eAAgB,SAChBrpB,OAAQ,YACRspB,UAAW,cACX/2B,OAAQ,YACRg3B,gBAAiB,uBAGnB5wB,OAAO4f,SAASe,KAAO,aAAHvhC,OAAgB8U,EAAE8G,OAAOhc,OAEjD,IAEA2lC,EAAK6T,eAAeje,iBAAiB,SAAS,WAC5C,IAAIke,EAAc3hB,SAAS8b,cAAc,sBACzC5yB,OAAO4f,SAASe,KAAO,aAAHvhC,OAAgBq5C,aAAW,EAAXA,EAAaz5C,MACnD,IAEJ,IAACugC,EAAA,wBAEiB,WAAM,IAAAmZ,EACtB/T,EAAK4S,uBACL5S,EAAKsQ,cACa,QAAlByD,EAAA/T,EAAKuQ,qBAAa,IAAAwD,GAAlBA,EAAoBtJ,UAAUC,OAAO,aACrC1K,EAAKoT,aACP,IAACxY,EAAA,oBAEa,WACZ,GAAIzI,SAASge,gBAAgBC,YAAc,OAASpQ,EAAKgK,QAAQS,UAAUe,SAAS,iBAAkB,CAGpG,IAFA,IAAIwI,GAAa,EACbC,EAAe,EACVz/C,EAAI,EAAGA,EAAIw7C,EAAIhQ,EAAKkU,iBAAiBv/C,OAAQH,IAAK,CACzD,IAAM2/C,EAAUnE,EAAIhQ,EAAKkU,iBAAiB1/C,GACtC2/C,EAAQC,UAAY,GAAMD,EAAQE,mBAAmBD,UAAY,GACnED,EAAQ1J,UAAUxpB,IAAI,WACjB+yB,IACHA,GAAa,EACbC,EAAez/C,KAGhBwrC,EAAKsU,YAAcniB,SAASge,gBAAgBC,aAAepQ,EAAKuU,oBAAsB//C,GAEtFwrC,EAAKsU,YAAcniB,SAASge,gBAAgBC,aAAepQ,EAAKuU,oBAAsB//C,IAEvF2/C,EAAQ1J,UAAUC,OAAO,UAE7B,CAEA1K,EAAKuU,oBAAsBN,EAC3BjU,EAAKsU,YAAcniB,SAASge,gBAAgBC,YAExC4D,EACFhU,EAAKgK,QAAQS,UAAUxpB,IAAI,gBAG3B+e,EAAKgK,QAAQS,UAAUC,OAAO,eAGlC,CACF,IAAC9P,EAAA,0BAEmB,WACdzI,SAASge,gBAAgBC,YAAc,MAAQ/0B,OAAOm5B,QAAU,GAClEriB,SAASxP,KAAK8nB,UAAUxpB,IAAI,kBAE5BkR,SAASxP,KAAK8nB,UAAUC,OAAO,iBAEnC,IAAC9P,EAAA,4BAEqB,SAAC6Z,EAAgCC,GACrD1U,EAAK2U,eAAeC,MAAMC,MAASJ,EAAkBK,YAAe,KACpE9U,EAAK2U,eAAeC,MAAMG,OAAUN,EAAkBO,aAAgB,KACtEhV,EAAK2U,eAAeC,MAAMK,KAAQP,EAAiBQ,WAAc,IACnE,IAACta,EAAA,6BAEsB,WACrBoF,EAAKmV,iBAAiB1K,UAAUxpB,IAAI,eACpC+e,EAAKoV,aAAa3K,UAAUxpB,IAAI,cAClC,IAAC2Z,EAAA,6BAEsB,WACrBoF,EAAKgK,QAAQS,UAAUC,OAAO,eAC9B1K,EAAKgK,QAAQS,UAAUC,OAAO,kBAC9B1K,EAAKoV,aAAa3K,UAAUC,OAAO,eACnC1K,EAAKmV,iBAAiB1K,UAAUC,OAAO,cACzC,IAAC9P,EAAA,oBAEa,WACZoV,EAAIhQ,EAAK2Q,gBAAgB92C,SAAQ,SAAAw7C,GAC/BA,EAAkB/D,WAAW7G,UAAUC,OAAO,YAAa,eAC7D,GACF,IAAC9P,EAAA,oBAEa,WACZoF,EAAK4S,uBACgB,WAAjB5S,EAAK8P,UACP9P,EAAKiT,WAAW2B,MAAMK,KAAO,OAC7BjV,EAAKsV,uBAAuBlH,UAAY,GACxCpO,EAAK2T,YAAYt5C,MAAQ,GACzByiB,YAAW,WACTkjB,EAAKiT,WAAWxI,UAAUC,OAAO,UACjC1K,EAAKiT,WAAW2B,MAAMK,KAAO,EAC/B,GAAG,KAGP,IAACra,EAAA,qBAEc,WAAM,IAAA2a,EACnBvV,EAAK4S,uBACa,QAAlB2C,EAAAvV,EAAKuQ,qBAAa,IAAAgF,GAAlBA,EAAoB9K,UAAUC,OAAO,YACvC,IAAC9P,EAAA,qBAEc,WAAM,IAAA4a,EACnBxV,EAAK6S,uBACa,QAAlB2C,EAAAxV,EAAKuQ,qBAAa,IAAAiF,GAAlBA,EAAoB/K,UAAUxpB,IAAI,YACpC,IAAC2Z,EAAA,iBAEU,SAAC7a,GACV,IAAM01B,EAAQtjB,SAASujB,cAAc31B,EAAKle,KAI1C,OAHA4zC,EAAMrH,UAAYruB,EAAK41B,MACvBF,EAAMG,QAAU71B,EAAK81B,QACrBJ,EAAMK,UAAY/1B,EAAKg2B,QAAUh2B,EAAKg2B,QAAU,GACzCN,CACT,IAAC7a,EAAA,6BAEsB,WAAM,IAAAob,EAAAC,EAAAC,EACiB,QAA5CF,EAAA7jB,SAAS8b,cAAc,6BAAqB,IAAA+H,GAA5CA,EAA8CvL,UAAUxpB,IAAI,UAC5D,IAAMk1B,EAAkBnW,EAAKoW,SAAS,CACpCv0C,IAAK,MACLk0C,QAAS,oBACTJ,MAAO,SAAFl7C,OAAWulC,EAAKyN,SAAS9O,MAAK,aAGd,CACrBqB,EAAKoW,SAAS,CAAEv0C,IAAK,SAAU8zC,MAAO3V,EAAKqW,OAAO,sCAAuCR,QAAS,WAAQ7V,EAAKsW,sBAAuB,IACtItW,EAAKoW,SAAS,CAAEv0C,IAAK,SAAU8zC,MAAO3V,EAAKqW,OAAO,gCAAiCR,QAAS,WAAQ7V,EAAKuW,sBAAuB,IAChIvW,EAAKoW,SAAS,CAAEv0C,IAAK,SAAU8zC,MAAO3V,EAAKqW,OAAO,iCAAkCR,QAAS,WAAQ7V,EAAKwW,uBAAwB,IAClIxW,EAAKoW,SAAS,CAAEv0C,IAAK,SAAU8zC,MAAO3V,EAAKqW,OAAO,+BAAgCR,QAAS,WAAQ7V,EAAKyW,eAAgB,KAE3G58C,SAAQ,SAAA68C,GACrBP,EAAgBQ,YAAYD,EAC9B,IAEA,IAAME,EAAa5W,EAAKoW,SAAS,CAC/Bv0C,IAAK,SACLk0C,QAAS,UACTJ,MAAO,aAAFl7C,OAAeulC,EAAKyN,SAAS9N,OAAM,wCAAAllC,OAAuCulC,EAAKyN,SAASjO,YAAYtqC,MAAM,EAAG,KAAGuF,OAAGulC,EAAKyN,SAASjO,YAAY7qC,OAAS,GAAK,MAAQ,GAAE,WAC1KkhD,QAAS,WAAM,IAAAgB,EACS,QAAtBA,EAAI7W,EAAKuQ,qBAAa,IAAAsG,GAAlBA,EAAoBpM,UAAUe,SAAS,aACzCxL,EAAK8W,eAEL9W,EAAK+W,cAET,IAGgB,QAAlBd,EAAAjW,EAAKuQ,qBAAa,IAAA0F,GAAlBA,EAAoBU,YAAYC,GACd,QAAlBV,EAAAlW,EAAKuQ,qBAAa,IAAA2F,GAAlBA,EAAoBS,YAAYR,GAChCnW,EAAK2K,aACP,IAAC/P,EAAA,2CAEoC,SAACnmB,GAAsB,IAAAuiC,GACpDviC,EAAM4B,OAAuB67B,QAAQ,uBACpB,QADyC8E,EAC3DhX,EAAKuQ,qBAAa,IAAAyG,GAAlBA,EAAoBvM,UAAUe,SAAS,cAC1CxL,EAAK8W,cAET,IAAClc,EAAA,4CAEqC,SAACnmB,GAAyB,IAAAwiC,EAC5C,WAAdxiC,EAAMpe,KACa,QADG4gD,EACrBjX,EAAKuQ,qBAAa,IAAA0G,GAAlBA,EAAoBxM,UAAUe,SAAS,cAC1CxL,EAAK8W,cAET,IAAClc,EAAA,2CAEoC,WACnCoF,EAAKgK,QAAQpU,iBAAiB,YAAaoK,EAAKkX,oCAChDlX,EAAKgK,QAAQpU,iBAAiB,UAAWoK,EAAKmX,qCAAqC,EACrF,IAACvc,EAAA,8BAEuB,WACtB,IAAMwc,EAAgBpX,EAAKoW,SAAS,CAClCv0C,IAAK,SACLg0C,QAAS7V,EAAKqX,aACd1B,MAAO3V,EAAKqW,OAAO,gCAErBrW,EAAKsX,cAAcX,YAAYS,GAC/BpX,EAAK2K,aACP,IAAC/P,EAAA,8BAEuB,WACtBoF,EAAKsV,uBAAuBlH,UAAY,GACxC,IAAMmJ,EAAcvX,EAAKuT,WACnBj6C,EAAQ0mC,EAAKwT,YACbgE,EAAsBD,EAAYh/C,QAAO,SAACshB,GAAQ,OAAKA,EAAIvD,eAAe,gBAAkBuD,EAAIvD,eAAe,MAAM,IAAEphB,MAAM,EAAG,GAChIuiD,EAAYtlB,SAASujB,cAAc,MACnCgC,EAAkBvlB,SAASwlB,yBAE7Br+C,EAAM3E,OAAS,GAAK6iD,EAAoB7iD,OAAS,GACnD6iD,EAAoB39C,SAAQ,SAACggB,EAAK7iB,GAChC,IAAM4gD,EAAQzlB,SAASujB,cAAc,MAC/BmC,EAAO1lB,SAASujB,cAAc,KACpCmC,EAAK7b,KAAOniB,EAAIwE,IAChBw5B,EAAKjC,QAAU,WACbkC,EAAAA,EAAAA,WAAoB,6CAGpB,IAAM5hD,EAAWc,EAAQ,GA73BnC,SAAwBsc,EAAiBykC,EAAkB7hD,GACzD2zC,IAAS,8BAA+B,CACtCmO,UAAW,8BACX3xB,UAAW,CAAC0xB,GACZE,UAAW,CAACC,OAAOhiD,IACnBw9C,QAASpgC,EACTtc,MAAOyyC,GAEX,CAs3BU0O,CAAenY,EAAKyT,QAAS55B,EAAIC,SAAU5jB,IAE3C41C,EAAAA,EAAAA,IAAW,qBAAsB,CAC/BC,eAAgB,aAChBrpB,OAAQ,UACRspB,UAAW,eACX/2B,OAAQ,YACRg3B,gBAAiB,0BAErB,EACA,QAAMmM,EAAiBv+B,EAAIw+B,MACrBC,EAAgBh/C,EAAMulB,cACtB05B,EAAeH,EAAev5B,cAC9B25B,EAAW,IAAIC,OAAO,GAADh+C,OAAI69C,EAAa,QAAQ,KAEtBI,KAA5BH,EAAa9yC,MAAM+yC,KAAS,ynBADvBG,EAAMD,EAAA,GAAEE,EAAMF,EAAA,GAKfG,EAAe,GAAHp+C,OAAM29C,EAAeljD,MAAM,EAAGyjD,EAAOhkD,QAAO,YAAA8F,OAAW89C,EAAazK,SAASx0C,GAASA,EAAQ,GAAE,aAAAmB,OAAY29C,EAAeljD,MAAMyjD,EAAOhkD,OAAS2jD,EAAc3jD,OAAQgkD,EAAOhkD,OAAS2jD,EAAc3jD,QAAUikD,EAASA,EAAOjkD,OAASyjD,EAAezjD,UACzQkjD,EAAKzJ,UAAYyK,EACjBjB,EAAMjB,YAAYkB,GAClBH,EAAgBf,YAAYiB,EAC9B,IAEAH,EAAUd,YAAYe,GACtB1X,EAAKsV,uBAAuBqB,YAAYc,IAC/Bn+C,EAAM3E,OAAS,GAAmC,GAA9B6iD,EAAoB7iD,QACjD8iD,EAAUrJ,UAAY,mBAEtBqJ,EAAUd,YAAYe,GACtB1X,EAAKsV,uBAAuBqB,YAAYc,IAC/Bn+C,EAAM3E,OAAS,IACxBqrC,EAAKsV,uBAAuBlH,UAAY,GAE5C,IAUAxT,EAAA,6BAEuB,WACrBkd,EAAAA,EAAAA,WAAoB,6CACpBz8B,OAAO4f,SAASe,KAAOnB,EAAAA,EAAAA,qBACzB,IAACD,EAAA,6BAEsB,WACrB,IAAMke,EAAqB,CACzBnD,MAAO3V,EAAKqW,OAAO,iCAErByB,EAAAA,EAAAA,WACE,6CACAn/C,OAAOC,OAAOonC,EAAK+Y,uBAAsBtc,EAAAA,EAAA,GACpCqc,GACA9Y,EAAKgZ,OAAOnf,sBAAsB,CAAEE,gBAAgB,OAG3D1e,OAAO4f,SAASe,KAAOnB,EAAAA,EAAAA,oBAAgCmF,EAAKyN,SAAS9O,MACvE,IAAC/D,EAAA,8BAEuB,WACtB,IAAMke,EAAqB,CACzBnD,MAAO3V,EAAKqW,OAAO,kCAErByB,EAAAA,EAAAA,WACE,8CACAn/C,OAAOC,OAAOonC,EAAK+Y,uBAAsBtc,EAAAA,EAAA,GACpCqc,GACA9Y,EAAKgZ,OAAOnf,sBAAsB,CAAEE,gBAAgB,OAG3D1e,OAAO4f,SAASe,KAAOnB,EAAAA,EAAAA,WACzB,IAACD,EAAA,sBAEe,WACd,IAAMke,EAAqB,CACzBnD,MAAO3V,EAAKqW,OAAO,gCAErByB,EAAAA,EAAAA,WACE,qCACAn/C,OAAOC,OAAOonC,EAAK+Y,uBAAsBtc,EAAAA,EAAA,GACpCqc,GACA9Y,EAAKgZ,OAAOnf,sBAAsB,CAAEE,gBAAgB,OAG3D1e,OAAO4f,SAASe,KAAOnB,EAAAA,EAAAA,cACzB,IAACD,EAAA,qBAEc,WACb,IAAMqe,EAAUpe,EAAAA,EAAAA,qBACVqe,EAAkBre,EAAAA,EAAAA,mBAClBse,EAAcnZ,EAAKgZ,OAAOxf,SAAS0f,EAAkB,uBACrDJ,EAAqB,CACzBnD,MAAO3V,EAAKqW,OAAO,+BAErByB,EAAAA,EAAAA,WACE,oCACAn/C,OAAOC,OAAOonC,EAAK+Y,uBAAsBtc,EAAAA,EAAA,GACpCqc,GACA9Y,EAAKgZ,OAAOnf,sBAAsB,CAAEE,gBAAgB,OAG3D1e,OAAO4f,SAASe,KAAO,GAAHvhC,OAAMw+C,EAAO,oBAAAx+C,OAAmB8iB,mBAClD47B,GAEJ,IAACve,EAAA,4BAEqB,WACpB,IAAMqe,EAAUpe,EAAAA,EAAAA,qBACVqe,EAAkBre,EAAAA,EAAAA,mBAClBse,EAAcnZ,EAAKgZ,OAAOxf,SAAS0f,EAAkB,uBACrDJ,EAAqB,CACzBnD,MAAO3V,EAAKqW,OAAO,kCAErByB,EAAAA,EAAAA,WACE,wCACAn/C,OAAOC,OAAOonC,EAAK+Y,uBAAsBtc,EAAAA,EAAA,GACpCqc,GACA9Y,EAAKgZ,OAAOnf,sBAAsB,CAAEE,gBAAgB,OAG3D1e,OAAO4f,SAASe,KAAO,GAAHvhC,OAAMw+C,EAAO,oBAAAx+C,OAAmB8iB,mBAClD47B,GAEJ,IAACve,EAAA,4BAEqB,WACpB,IAAMwe,EAAW,GAAH3+C,OAAMogC,EAAAA,EAAAA,qBAAgC,YAC9Cwe,EAAWxe,EAAAA,EAAAA,cACXie,EAAqB,CACzBnD,MAAO3V,EAAKqW,OAAO,uCAErByB,EAAAA,EAAAA,WACE,6CACAn/C,OAAOC,OAAOonC,EAAK+Y,uBAAsBtc,EAAAA,EAAA,GACpCqc,GACA9Y,EAAKgZ,OAAOnf,sBAAsB,CAAEE,gBAAgB,OAG3D1e,OAAO4f,SAASe,KACdod,EAAW,aAAH3+C,OAAgB8iB,mBAAmB87B,GAC/C,IA35BEnmD,KAAK82C,QAAUA,EACf92C,KAAK+E,OAAMwkC,EAAA,GAAQxkC,GACnB/E,KAAKu6C,SAAW,CAAC,EACjBv6C,KAAKomD,WAAY,EACjBpmD,KAAKqmD,UAAY,IAAI7e,EAAAA,EACrBxnC,KAAK8lD,OAAS,IAAIQ,EAAAA,EAAc,CAAExhB,QAAS,uBAC3C9kC,KAAKmjD,OAASp+C,EAAOo+C,OACrBnjD,KAAK48C,QAAU73C,EAAO63C,QACtB58C,KAAKumD,SAAWxhD,EAAOwhD,SACvBvmD,KAAK6lD,uBAAyB,CAAC,EAC/B7lD,KAAKu/C,SAAWzI,EAAQiE,cAAc,cACtC/6C,KAAKokD,cAAgBtN,EAAQiE,cAAc,6BAC3C/6C,KAAKq9C,cAAgBvG,EAAQiE,cAAc,+BAC3C/6C,KAAKwmD,YAAc1P,EAAQiE,cAAc,0BACzC/6C,KAAKyhD,eAAiB3K,EAAQiE,cAAc,oBAC5C/6C,KAAKkiD,aAAepL,EAAQiE,cAAc,kBAC1C/6C,KAAKiiD,iBAAmBnL,EAAQiE,cAAc,sBAC9C/6C,KAAKghD,gBAAkBlK,EAAQO,iBAAiB,aAChDr3C,KAAK+8C,iBAAmBjG,EAAQO,iBAAiB,0BACjDr3C,KAAKy9C,eAAiB3G,EAAQO,iBAAiB,oBAC/Cr3C,KAAK6+C,WAAa/H,EAAQO,iBAAiB,eAC3Cr3C,KAAKk+C,iBAAmBpH,EAAQO,iBAAiB,qBACjDr3C,KAAKw/C,aAAe1I,EAAQiE,cAAc,kBAC1C/6C,KAAKymD,qBAAuB3P,EAAQiE,cAAc,oBAClD/6C,KAAK4/C,kBAAoB9I,EAAQO,iBAAiB,uBAClDr3C,KAAK0mD,SAAW5P,EAAQiE,cAAc,cACtC/6C,KAAK2mD,SAAW7P,EAAQiE,cAAc,cACtC/6C,KAAKggD,WAAalJ,EAAQiE,cAAc,gBACxC/6C,KAAKigD,YAAcnJ,EAAQiE,cAAc,iBACzC/6C,KAAK+/C,WAAajJ,EAAQiE,cAAc,gBACxC/6C,KAAKoiD,uBAAyBtL,EAAQiE,cAAc,wBACpD/6C,KAAKygD,YAAc3J,EAAQiE,cAAc,sBACzC/6C,KAAK2gD,eAAiB7J,EAAQiE,cAAc,wBAC5C/6C,KAAKqgD,WAAa,GAClBrgD,KAAKsgD,YAAc,GACnBtgD,KAAKugD,QAAU,GACfvgD,KAAKmgD,aAAeyG,IAAoBpQ,EAAqBD,EAA2B,CACtFn1B,aAAc,CAAC,UAAD7Z,OAAWmvC,IACzB/sC,OAAQ,CArKY,YAsKpB+b,gBAAgB,IAGlB1lB,KAAKohD,YAAc,EACnBphD,KAAKqhD,oBAAsB,GAC3BrhD,KAAKq/C,eAAiBvI,EAAQiE,cAAc,qBAC5C/6C,KAAKs/C,eAAiBxI,EAAQiE,cAAc,qBAE5C/6C,KAAKi4C,kBAA4D,QAAvClzC,EAAOkzC,kBACjCj4C,KAAKk6C,oBAAsBn1C,EAAO8hD,YAClC7mD,KAAKm6C,qCAAuCp1C,EAAO+hD,6BACnD9mD,KAAKo6C,0BAA4Br1C,EAAOgiD,kBACxC/mD,KAAKq6C,6BAA+Bt1C,EAAOiiD,qBAC3ChnD,KAAKs6C,uBAAyBv1C,EAAOkiD,eAErCjnD,KAAKw5C,wBAA0B1C,EAAQiE,cAAc,oCACrD/6C,KAAKk4C,YAAcpB,EAAQiE,cAAc,4CACzC/6C,KAAK86C,wBAA0BhE,EAAQiE,cAAc,2DAErD/6C,KAAKq7C,sBAAwBvE,EAAQiE,cAAc,4BACnD/6C,KAAKs7C,qBAAuBxE,EAAQiE,cAAc,2BAClD/6C,KAAKy4C,cAAe,EACpBz4C,KAAKw4C,WAAY,EAEjBx4C,KAAKkhC,MACP,CAhNF,IAAA6V,EAAAmQ,EAyjCGC,EAtHAC,EAptBAC,EA/BAC,EA82BA,OA9jCHvQ,EAgNGF,EAhNHqQ,EAgNG,EAAA/jD,IAAA,OAAAgE,OAAAmgD,EAAA3R,EAAA5F,IAAAkE,MAED,SAAAsT,IAAA,IAAAta,EAAA,YAAA8C,IAAAW,MAAA,SAAA8W,GAAA,cAAAA,EAAAhT,KAAAgT,EAAA1/B,MAAA,OAyB4C,OAxB1C9nB,KAAKynD,aAEgB,WAAjBznD,KAAK48C,SAAqE,SAA7CZ,EAAAA,EAAAA,UAAkB,uBACjDh8C,KAAK0nD,UACFxrC,MAAK,SAAAmvB,GACJ4B,EAAKmZ,WAAY,EACjBnZ,EAAKsN,SAAWlP,EACZA,EAAKqB,YAAcO,EAAKsN,SAASjO,YAAY7qC,QAC/CmjD,EAAAA,EAAAA,WAAoB,uCACpB3X,EAAK0a,wBAEL1a,EAAK2a,uBAET,IAAE,OACK,WACLhD,EAAAA,EAAAA,WACE,0CAEJ,IACwB,WAAjB5kD,KAAK48C,UACd58C,KAAKomD,WAAY,EACjBpmD,KAAK4nD,yBAGP5nD,KAAK6nD,qCAAqCL,EAAA1/B,KAAA,EAEpC9nB,KAAK8nD,0BAAyB,cAAAN,EAAA1/B,KAAA,EAC9B9nB,KAAK+nD,iCAAgC,wBAAAP,EAAA/S,OAAA,GAAA8S,EAAA,UAC5C,kBAAAD,EAAArlD,MAAA,KAAAP,UAAA,KAAAyB,IAAA,sBAAAgE,OAAAkgD,EAAA1R,EAAA5F,IAAAkE,MAsLD,SAAA+T,EAA0B5hD,GAAa,OAAA2pC,IAAAW,MAAA,SAAAuX,GAAA,cAAAA,EAAAzT,KAAAyT,EAAAngC,MAAA,cAAAmgC,EAAApV,OAAA,SAC9B/P,MAAM8T,EAAY,CACrBlrB,OAAQ,OACRw8B,YAAa,UACb1+B,QAAS,CACP,eAAgB,oBAElBiG,KAAM9c,KAAKC,UAAU,CAAExM,MAAOA,OAChC,wBAAA6hD,EAAAxT,OAAA,GAAAuT,EAAA,KACH,SAAAG,GAAA,OAAAd,EAAAplD,MAAA,KAAAP,UAAA,KAAAyB,IAAA,eAAAgE,MA+gBD,SAAa29C,EAAmBsD,GAC9B,IAAIC,EAAa,CACfC,UAAWngC,OAAO4f,SAASe,KAC3Byf,SAAUH,GAEZxD,EAAAA,EAAAA,WAAoBE,EAAWuD,EACjC,GAAC,CAAAllD,IAAA,UAAAgE,OAAAigD,EAAAzR,EAAA5F,IAAAkE,MA0GD,SAAAuU,IAAA,IAAAC,EAAAhd,EAAA,OAAAsE,IAAAW,MAAA,SAAAgY,GAAA,cAAAA,EAAAlU,KAAAkU,EAAA5gC,MAAA,OACmE,OAA3D2gC,EAActgC,OAAO4f,SAAS1sB,OAAOu/B,SAAS,cAAa8N,EAAA5gC,KAAA,EAE3D4hB,EAAAA,GAAAA,oBAA8B,EAAM+e,GAAa,GAAK,OACf,OAAvChd,EAAQ/B,EAAAA,GAAAA,gBAA6B,GAAEgf,EAAA7V,OAAA,SACtC,CACLlG,MAAOjD,EAAAA,GAAAA,WACP4C,YAAa5C,EAAAA,GAAAA,iBACb+C,OAAQ/C,EAAAA,GAAAA,YACR+B,MAAAA,EACAiB,WAAYhD,EAAAA,GAAAA,eACb,wBAAAgf,EAAAjU,OAAA,GAAA+T,EAAA,KACF,kBAAApB,EAAAnlD,MAAA,KAAAP,UAAA,KAAAyB,IAAA,4CAAAgE,OAAAggD,EAAAxR,EAAA5F,IAAAkE,MAED,SAAA0U,IAAA,IAAAta,EAAA,OAAA0B,IAAAW,MAAA,SAAAkY,GAAA,cAAAA,EAAApU,KAAAoU,EAAA9gC,MAAA,cAAA8gC,EAAA9gC,KAAA,EACuC4hB,EAAAA,GAAAA,+BAAyC,GAAM,OAAxD,OAAtB2E,EAAsBua,EAAAlW,KAAAkW,EAAA/V,OAAA,SACrBxE,GAAsB,wBAAAua,EAAAnU,OAAA,GAAAkU,EAAA,KAC9B,kBAAAxB,EAAAllD,MAAA,KAAAP,UAAA,KA9jCHwlD,GAAAtR,EAAAmB,EAAAr2C,UAAAwmD,GAAAzhD,OAAA2hB,eAAA2vB,EAAA,aAAAl0B,UAAA,IA8jCGg0B,CAAA,CAx+B+B,0BCvFlC,iBACE,SAAS3/B,GAGsCzW,GAC9CA,EAAQooD,SACoCroD,GAC5CA,EAAOqoD,SAHT,IAIIC,EAA8B,iBAAV,EAAAjmD,GAAsB,EAAAA,EAE7CimD,EAAWC,SAAWD,GACtBA,EAAW3gC,SAAW2gC,GACtBA,EAAWpiD,KAUZ,IAAIsiD,EAGJC,EAAS,WAGThhB,EAAO,GAEPihB,EAAO,GACPC,EAAO,GACPC,EAAO,IAMPC,EAAgB,QAChBC,EAAgB,eAChBC,EAAkB,4BAGlBC,EAAS,CACR,SAAY,kDACZ,YAAa,iDACb,gBAAiB,iBAIlBC,EAAgBxhB,EArBT,EAsBPhe,EAAQJ,KAAKI,MACby/B,EAAqB1nC,OAAO2nC,aAa5B,SAASnoD,EAAMP,GACd,MAAM2oD,WAAWJ,EAAOvoD,GACzB,CAUA,SAASkF,EAAIqK,EAAOpM,GAGnB,IAFA,IAAI3C,EAAS+O,EAAM/O,OACfoU,EAAS,GACNpU,KACNoU,EAAOpU,GAAU2C,EAAGoM,EAAM/O,IAE3B,OAAOoU,CACR,CAYA,SAASg0C,EAAUC,EAAQ1lD,GAC1B,IAAIiQ,EAAQy1C,EAAOv3C,MAAM,KACrBsD,EAAS,GAWb,OAVIxB,EAAM5S,OAAS,IAGlBoU,EAASxB,EAAM,GAAK,IACpBy1C,EAASz1C,EAAM,IAMTwB,EADO1P,GAFd2jD,EAASA,EAAOtyC,QAAQ+xC,EAAiB,MACrBh3C,MAAM,KACAnO,GAAIwgB,KAAK,IAEpC,CAeA,SAASmlC,EAAWD,GAMnB,IALA,IAGI3iD,EACA6iD,EAJAC,EAAS,GACTC,EAAU,EACVzoD,EAASqoD,EAAOroD,OAGbyoD,EAAUzoD,IAChB0F,EAAQ2iD,EAAOK,WAAWD,OACb,OAAU/iD,GAAS,OAAU+iD,EAAUzoD,EAG3B,QAAX,OADbuoD,EAAQF,EAAOK,WAAWD,OAEzBD,EAAO3nD,OAAe,KAAR6E,IAAkB,KAAe,KAAR6iD,GAAiB,QAIxDC,EAAO3nD,KAAK6E,GACZ+iD,KAGDD,EAAO3nD,KAAK6E,GAGd,OAAO8iD,CACR,CAUA,SAASG,EAAW55C,GACnB,OAAOrK,EAAIqK,GAAO,SAASrJ,GAC1B,IAAI8iD,EAAS,GAOb,OANI9iD,EAAQ,QAEX8iD,GAAUP,GADVviD,GAAS,SAC8B,GAAK,KAAQ,OACpDA,EAAQ,MAAiB,KAARA,GAElB8iD,EAAUP,EAAmBviD,EAE9B,IAAGyd,KAAK,GACT,CAmCA,SAASylC,EAAaC,EAAOC,GAG5B,OAAOD,EAAQ,GAAK,IAAMA,EAAQ,MAAgB,GAARC,IAAc,EACzD,CAOA,SAASC,EAAMC,EAAOC,EAAWC,GAChC,IAAIjgD,EAAI,EAGR,IAFA+/C,EAAQE,EAAY1gC,EAAMwgC,EAAQrB,GAAQqB,GAAS,EACnDA,GAASxgC,EAAMwgC,EAAQC,GACOD,EAAQhB,EAAgBP,GAAQ,EAAGx+C,GAAKu9B,EACrEwiB,EAAQxgC,EAAMwgC,EAAQhB,GAEvB,OAAOx/B,EAAMvf,GAAK++C,EAAgB,GAAKgB,GAASA,EAAQtB,GACzD,CASA,SAASlrB,EAAO+X,GAEf,IAEI3zB,EAIAuoC,EACAr/B,EACAznB,EACA+mD,EACA5/B,EACAvgB,EACA4/C,EACAj7C,EAEAy7C,EArEiBC,EAsDjBd,EAAS,GACTe,EAAchV,EAAMv0C,OAEpBH,EAAI,EACJT,EA7MM,IA8MNoqD,EA/MS,GAoOb,KALAL,EAAQ5U,EAAMnmC,YA7NH,MA8NC,IACX+6C,EAAQ,GAGJr/B,EAAI,EAAGA,EAAIq/B,IAASr/B,EAEpByqB,EAAMmU,WAAW5+B,IAAM,KAC1B/pB,EAAM,aAEPyoD,EAAO3nD,KAAK0zC,EAAMmU,WAAW5+B,IAM9B,IAAKznB,EAAQ8mD,EAAQ,EAAIA,EAAQ,EAAI,EAAG9mD,EAAQknD,GAAwC,CAOvF,IAAKH,EAAOvpD,EAAG2pB,EAAI,EAAGvgB,EAAIu9B,EAErBnkC,GAASknD,GACZxpD,EAAM,mBAGP8oD,GAxGmBS,EAwGE/U,EAAMmU,WAAWrmD,MAvGxB,GAAK,GACbinD,EAAY,GAEhBA,EAAY,GAAK,GACbA,EAAY,GAEhBA,EAAY,GAAK,GACbA,EAAY,GAEb9iB,IAgGQA,GAAQqiB,EAAQrgC,GAAOg/B,EAAS3nD,GAAK2pB,KACjDzpB,EAAM,YAGPF,GAAKgpD,EAAQr/B,IAGTq/B,GAFJj7C,EAAI3E,GAAKugD,EAvQL,EAuQoBvgD,GAAKugD,EAAO/B,EAAOA,EAAOx+C,EAAIugD,IAbHvgD,GAAKu9B,EAoBpDhd,EAAIhB,EAAMg/B,GADd6B,EAAa7iB,EAAO54B,KAEnB7N,EAAM,YAGPypB,GAAK6/B,EAKNG,EAAOT,EAAMlpD,EAAIupD,EADjBxoC,EAAM4nC,EAAOxoD,OAAS,EACc,GAARopD,GAIxB5gC,EAAM3oB,EAAI+gB,GAAO4mC,EAASpoD,GAC7BW,EAAM,YAGPX,GAAKopB,EAAM3oB,EAAI+gB,GACf/gB,GAAK+gB,EAGL4nC,EAAOhnD,OAAO3B,IAAK,EAAGT,EAEvB,CAEA,OAAOupD,EAAWH,EACnB,CASA,SAAS/rB,EAAO8X,GACf,IAAIn1C,EACA4pD,EACAS,EACAC,EACAF,EACA1/B,EACAnpB,EACAwb,EACAlT,EACA2E,EACAsB,EAGAq6C,EAEAI,EACAN,EACAO,EANApB,EAAS,GAoBb,IARAe,GAHAhV,EAAQ+T,EAAW/T,IAGCv0C,OAGpBZ,EAvUU,IAwUV4pD,EAAQ,EACRQ,EA1Ua,GA6UR1/B,EAAI,EAAGA,EAAIy/B,IAAez/B,GAC9B5a,EAAeqlC,EAAMzqB,IACF,KAClB0+B,EAAO3nD,KAAKonD,EAAmB/4C,IAejC,IAXAu6C,EAAiBC,EAAclB,EAAOxoD,OAMlC0pD,GACHlB,EAAO3nD,KAzVG,KA6VJ4oD,EAAiBF,GAAa,CAIpC,IAAK5oD,EAAI6mD,EAAQ19B,EAAI,EAAGA,EAAIy/B,IAAez/B,GAC1C5a,EAAeqlC,EAAMzqB,KACD1qB,GAAK8P,EAAevO,IACvCA,EAAIuO,GAcN,IAPIvO,EAAIvB,EAAIopB,GAAOg/B,EAASwB,IAD5BW,EAAwBF,EAAiB,KAExC1pD,EAAM,YAGPipD,IAAUroD,EAAIvB,GAAKuqD,EACnBvqD,EAAIuB,EAECmpB,EAAI,EAAGA,EAAIy/B,IAAez/B,EAO9B,IANA5a,EAAeqlC,EAAMzqB,IAEF1qB,KAAO4pD,EAAQxB,GACjCznD,EAAM,YAGHmP,GAAgB9P,EAAG,CAEtB,IAAK+c,EAAI6sC,EAAO//C,EAAIu9B,IAEfrqB,GADJvO,EAAI3E,GAAKugD,EAlYP,EAkYsBvgD,GAAKugD,EAAO/B,EAAOA,EAAOx+C,EAAIugD,IADTvgD,GAAKu9B,EAKlDojB,EAAUztC,EAAIvO,EACdy7C,EAAa7iB,EAAO54B,EACpB46C,EAAO3nD,KACNonD,EAAmBW,EAAah7C,EAAIg8C,EAAUP,EAAY,KAE3DltC,EAAIqM,EAAMohC,EAAUP,GAGrBb,EAAO3nD,KAAKonD,EAAmBW,EAAazsC,EAAG,KAC/CqtC,EAAOT,EAAMC,EAAOW,EAAuBF,GAAkBC,GAC7DV,EAAQ,IACNS,CACH,GAGCT,IACA5pD,CAEH,CACA,OAAOopD,EAAOrlC,KAAK,GACpB,CA2CAokC,EAAW,CAMV,QAAW,QAQX,KAAQ,CACP,OAAUe,EACV,OAAUK,GAEX,OAAUnsB,EACV,OAAUC,EACV,QA/BD,SAAiB8X,GAChB,OAAO6T,EAAU7T,GAAO,SAAS8T,GAChC,OAAOR,EAAc9iC,KAAKsjC,GACvB,OAAS5rB,EAAO4rB,GAChBA,CACJ,GACD,EA0BC,UAnDD,SAAmB9T,GAClB,OAAO6T,EAAU7T,GAAO,SAAS8T,GAChC,OAAOT,EAAc7iC,KAAKsjC,GACvB7rB,EAAO6rB,EAAO9nD,MAAM,GAAG2pB,eACvBm+B,CACJ,GACD,QA0DE,KAFD,aACC,OAAOd,CACP,+BAaH,CAhhBC,oCCsBGA,EAAW,EAAQ,OACnBsC,EAAO,EAAQ,OASnB,SAASC,IACPvrD,KAAKkrB,SAAW,KAChBlrB,KAAKwrD,QAAU,KACfxrD,KAAKyrD,KAAO,KACZzrD,KAAKusB,KAAO,KACZvsB,KAAK0rD,KAAO,KACZ1rD,KAAKgoC,SAAW,KAChBhoC,KAAK2rD,KAAO,KACZ3rD,KAAKqb,OAAS,KACdrb,KAAKoG,MAAQ,KACbpG,KAAK4rD,SAAW,KAChB5rD,KAAK+P,KAAO,KACZ/P,KAAK8oC,KAAO,IACd,CAMA,IAAI+iB,EAAkB,oBAClBC,EAAc,WAGdC,EAAoB,qCAOpBC,EAAS,CAAC,IAAK,IAAK,IAAK,KAAM,IAAK,KAAKzkD,OAHhC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,OAM/C0kD,EAAa,CAAC,KAAM1kD,OAAOykD,GAK3BE,EAAe,CAAC,IAAK,IAAK,IAAK,IAAK,KAAK3kD,OAAO0kD,GAChDE,EAAkB,CAAC,IAAK,IAAK,KAE7BC,EAAsB,yBACtBC,EAAoB,+BAEpBC,EAAiB,CACf,YAAc,EACd,eAAe,GAGjBC,EAAmB,CACjB,YAAc,EACd,eAAe,GAGjBC,EAAkB,CAChB,MAAQ,EACR,OAAS,EACT,KAAO,EACP,QAAU,EACV,MAAQ,EACR,SAAS,EACT,UAAU,EACV,QAAQ,EACR,WAAW,EACX,SAAS,GAEXC,EAAc,EAAQ,OAU1BlB,EAAI7qD,UAAU0nB,MAAQ,SAAS+C,EAAKuhC,EAAkBC,GACpD,IAAKrB,EAAKsB,SAASzhC,GACjB,MAAM,IAAIpqB,UAAU,gDAAkDoqB,GAMxE,IAAI0hC,EAAa1hC,EAAIziB,QAAQ,KACzB48C,GACqB,IAAhBuH,GAAqBA,EAAa1hC,EAAIziB,QAAQ,KAAQ,IAAM,IACjEokD,EAAS3hC,EAAI5Y,MAAM+yC,GAEvBwH,EAAO,GAAKA,EAAO,GAAGt1C,QADL,MACyB,KAG1C,IAAIu1C,EAFJ5hC,EAAM2hC,EAAOloC,KAAK0gC,GAQlB,GAFAyH,EAAOA,EAAKt6C,QAEPk6C,GAA+C,IAA1BxhC,EAAI5Y,MAAM,KAAK9Q,OAAc,CAErD,IAAIurD,EAAajB,EAAkBkB,KAAKF,GACxC,GAAIC,EAeF,OAdAhtD,KAAK+P,KAAOg9C,EACZ/sD,KAAK8oC,KAAOikB,EACZ/sD,KAAK4rD,SAAWoB,EAAW,GACvBA,EAAW,IACbhtD,KAAKqb,OAAS2xC,EAAW,GAEvBhtD,KAAKoG,MADHsmD,EACWD,EAAYrkC,MAAMpoB,KAAKqb,OAAO6S,OAAO,IAErCluB,KAAKqb,OAAO6S,OAAO,IAEzBw+B,IACT1sD,KAAKqb,OAAS,GACdrb,KAAKoG,MAAQ,CAAC,GAETpG,IAEX,CAEA,IAAIktD,EAAQrB,EAAgBoB,KAAKF,GACjC,GAAIG,EAAO,CAET,IAAIC,GADJD,EAAQA,EAAM,IACSvhC,cACvB3rB,KAAKkrB,SAAWiiC,EAChBJ,EAAOA,EAAK7+B,OAAOg/B,EAAMzrD,OAC3B,CAMA,GAAIkrD,GAAqBO,GAASH,EAAKjd,MAAM,wBAAyB,CACpE,IAAI0b,EAAgC,OAAtBuB,EAAK7+B,OAAO,EAAG,IACzBs9B,GAAa0B,GAASX,EAAiBW,KACzCH,EAAOA,EAAK7+B,OAAO,GACnBluB,KAAKwrD,SAAU,EAEnB,CAEA,IAAKe,EAAiBW,KACjB1B,GAAY0B,IAAUV,EAAgBU,IAAU,CAmBnD,IADA,IASIzB,EAAM2B,EATNC,GAAW,EACN/rD,EAAI,EAAGA,EAAI6qD,EAAgB1qD,OAAQH,KAE7B,KADTgsD,EAAMP,EAAKrkD,QAAQyjD,EAAgB7qD,QACP,IAAb+rD,GAAkBC,EAAMD,KACzCA,EAAUC,GAyBd,KARgB,KATdF,GAFe,IAAbC,EAEON,EAAKl9C,YAAY,KAIjBk9C,EAAKl9C,YAAY,IAAKw9C,MAM/B5B,EAAOsB,EAAK/qD,MAAM,EAAGorD,GACrBL,EAAOA,EAAK/qD,MAAMorD,EAAS,GAC3BptD,KAAKyrD,KAAO5tB,mBAAmB4tB,IAIjC4B,GAAW,EACF/rD,EAAI,EAAGA,EAAI4qD,EAAazqD,OAAQH,IAAK,CAC5C,IAAIgsD,GACS,KADTA,EAAMP,EAAKrkD,QAAQwjD,EAAa5qD,QACJ,IAAb+rD,GAAkBC,EAAMD,KACzCA,EAAUC,EACd,EAEiB,IAAbD,IACFA,EAAUN,EAAKtrD,QAEjBzB,KAAKusB,KAAOwgC,EAAK/qD,MAAM,EAAGqrD,GAC1BN,EAAOA,EAAK/qD,MAAMqrD,GAGlBrtD,KAAKutD,YAILvtD,KAAKgoC,SAAWhoC,KAAKgoC,UAAY,GAIjC,IAAIwlB,EAAoC,MAArBxtD,KAAKgoC,SAAS,IACe,MAA5ChoC,KAAKgoC,SAAShoC,KAAKgoC,SAASvmC,OAAS,GAGzC,IAAK+rD,EAEH,IADA,IAAIC,EAAYztD,KAAKgoC,SAASz1B,MAAM,MACpBgR,GAAPjiB,EAAI,EAAOmsD,EAAUhsD,QAAQH,EAAIiiB,EAAGjiB,IAAK,CAChD,IAAIkR,EAAOi7C,EAAUnsD,GACrB,GAAKkR,IACAA,EAAKs9B,MAAMsc,GAAsB,CAEpC,IADA,IAAIsB,EAAU,GACLniC,EAAI,EAAG7gB,EAAI8H,EAAK/Q,OAAQ8pB,EAAI7gB,EAAG6gB,IAClC/Y,EAAK23C,WAAW5+B,GAAK,IAIvBmiC,GAAW,IAEXA,GAAWl7C,EAAK+Y,GAIpB,IAAKmiC,EAAQ5d,MAAMsc,GAAsB,CACvC,IAAIuB,EAAaF,EAAUzrD,MAAM,EAAGV,GAChCssD,EAAUH,EAAUzrD,MAAMV,EAAI,GAC9BusD,EAAMr7C,EAAKs9B,MAAMuc,GACjBwB,IACFF,EAAWrrD,KAAKurD,EAAI,IACpBD,EAAQl2C,QAAQm2C,EAAI,KAElBD,EAAQnsD,SACVsrD,EAAO,IAAMa,EAAQhpC,KAAK,KAAOmoC,GAEnC/sD,KAAKgoC,SAAW2lB,EAAW/oC,KAAK,KAChC,KACF,CACF,CACF,CAGE5kB,KAAKgoC,SAASvmC,OAjND,IAkNfzB,KAAKgoC,SAAW,GAGhBhoC,KAAKgoC,SAAWhoC,KAAKgoC,SAASrc,cAG3B6hC,IAKHxtD,KAAKgoC,SAAWghB,EAAS8E,QAAQ9tD,KAAKgoC,WAGxC,IAAI5d,EAAIpqB,KAAK0rD,KAAO,IAAM1rD,KAAK0rD,KAAO,GAClCvhC,EAAInqB,KAAKgoC,UAAY,GACzBhoC,KAAKusB,KAAOpC,EAAIC,EAChBpqB,KAAK8oC,MAAQ9oC,KAAKusB,KAIdihC,IACFxtD,KAAKgoC,SAAWhoC,KAAKgoC,SAAS9Z,OAAO,EAAGluB,KAAKgoC,SAASvmC,OAAS,GAC/C,MAAZsrD,EAAK,KACPA,EAAO,IAAMA,GAGnB,CAIA,IAAKT,EAAea,GAKlB,IAAS7rD,EAAI,EAAGiiB,EAAI0oC,EAAWxqD,OAAQH,EAAIiiB,EAAGjiB,IAAK,CACjD,IAAI60B,EAAK81B,EAAW3qD,GACpB,IAA0B,IAAtByrD,EAAKrkD,QAAQytB,GAAjB,CAEA,IAAI43B,EAAM1jC,mBAAmB8L,GACzB43B,IAAQ53B,IACV43B,EAAMC,OAAO73B,IAEf42B,EAAOA,EAAKx6C,MAAM4jB,GAAIvR,KAAKmpC,EALjB,CAMZ,CAKF,IAAIpC,EAAOoB,EAAKrkD,QAAQ,MACV,IAAVijD,IAEF3rD,KAAK2rD,KAAOoB,EAAK7+B,OAAOy9B,GACxBoB,EAAOA,EAAK/qD,MAAM,EAAG2pD,IAEvB,IAAIsC,EAAKlB,EAAKrkD,QAAQ,KAoBtB,IAnBY,IAARulD,GACFjuD,KAAKqb,OAAS0xC,EAAK7+B,OAAO+/B,GAC1BjuD,KAAKoG,MAAQ2mD,EAAK7+B,OAAO+/B,EAAK,GAC1BvB,IACF1sD,KAAKoG,MAAQqmD,EAAYrkC,MAAMpoB,KAAKoG,QAEtC2mD,EAAOA,EAAK/qD,MAAM,EAAGisD,IACZvB,IAET1sD,KAAKqb,OAAS,GACdrb,KAAKoG,MAAQ,CAAC,GAEZ2mD,IAAM/sD,KAAK4rD,SAAWmB,GACtBP,EAAgBW,IAChBntD,KAAKgoC,WAAahoC,KAAK4rD,WACzB5rD,KAAK4rD,SAAW,KAId5rD,KAAK4rD,UAAY5rD,KAAKqb,OAAQ,CAC5B+O,EAAIpqB,KAAK4rD,UAAY,GAAzB,IACI9qC,EAAI9gB,KAAKqb,QAAU,GACvBrb,KAAK+P,KAAOqa,EAAItJ,CAClB,CAIA,OADA9gB,KAAK8oC,KAAO9oC,KAAKyU,SACVzU,IACT,EAaAurD,EAAI7qD,UAAU+T,OAAS,WACrB,IAAIg3C,EAAOzrD,KAAKyrD,MAAQ,GACpBA,IAEFA,GADAA,EAAOphC,mBAAmBohC,IACdj0C,QAAQ,OAAQ,KAC5Bi0C,GAAQ,KAGV,IAAIvgC,EAAWlrB,KAAKkrB,UAAY,GAC5B0gC,EAAW5rD,KAAK4rD,UAAY,GAC5BD,EAAO3rD,KAAK2rD,MAAQ,GACpBp/B,GAAO,EACPnmB,EAAQ,GAERpG,KAAKusB,KACPA,EAAOk/B,EAAOzrD,KAAKusB,KACVvsB,KAAKgoC,WACdzb,EAAOk/B,IAAwC,IAAhCzrD,KAAKgoC,SAASt/B,QAAQ,KACjC1I,KAAKgoC,SACL,IAAMhoC,KAAKgoC,SAAW,KACtBhoC,KAAK0rD,OACPn/B,GAAQ,IAAMvsB,KAAK0rD,OAInB1rD,KAAKoG,OACLklD,EAAKhrD,SAASN,KAAKoG,QACnBX,OAAOwC,KAAKjI,KAAKoG,OAAO3E,SAC1B2E,EAAQqmD,EAAY75C,UAAU5S,KAAKoG,QAGrC,IAAIiV,EAASrb,KAAKqb,QAAWjV,GAAU,IAAMA,GAAW,GAsBxD,OApBI8kB,GAAoC,MAAxBA,EAASgD,QAAQ,KAAYhD,GAAY,KAIrDlrB,KAAKwrD,WACHtgC,GAAYshC,EAAgBthC,MAAuB,IAATqB,GAC9CA,EAAO,MAAQA,GAAQ,IACnBq/B,GAAmC,MAAvBA,EAAS39B,OAAO,KAAY29B,EAAW,IAAMA,IACnDr/B,IACVA,EAAO,IAGLo/B,GAA2B,MAAnBA,EAAK19B,OAAO,KAAY09B,EAAO,IAAMA,GAC7CtwC,GAA+B,MAArBA,EAAO4S,OAAO,KAAY5S,EAAS,IAAMA,GAOhD6P,EAAWqB,GALlBq/B,EAAWA,EAASp0C,QAAQ,SAAS,SAASs4B,GAC5C,OAAOzlB,mBAAmBylB,EAC5B,MACAz0B,EAASA,EAAO7D,QAAQ,IAAK,QAEgBm0C,CAC/C,EAMAJ,EAAI7qD,UAAUgc,QAAU,SAASwxC,GAC/B,OAAOluD,KAAKmuD,cArVd,SAAkBhjC,EAAKuhC,EAAkBC,GACvC,GAAIxhC,GAAOmgC,EAAKhrD,SAAS6qB,IAAQA,aAAeogC,EAAK,OAAOpgC,EAE5D,IAAItD,EAAI,IAAI0jC,EAEZ,OADA1jC,EAAEO,MAAM+C,EAAKuhC,EAAkBC,GACxB9kC,CACT,CA+U4BumC,CAASF,GAAU,GAAO,IAAOz5C,QAC7D,EAOA82C,EAAI7qD,UAAUytD,cAAgB,SAASD,GACrC,GAAI5C,EAAKsB,SAASsB,GAAW,CAC3B,IAAIG,EAAM,IAAI9C,EACd8C,EAAIjmC,MAAM8lC,GAAU,GAAO,GAC3BA,EAAWG,CACb,CAIA,IAFA,IAAIx4C,EAAS,IAAI01C,EACb+C,EAAQ7oD,OAAOwC,KAAKjI,MACfuuD,EAAK,EAAGA,EAAKD,EAAM7sD,OAAQ8sD,IAAM,CACxC,IAAIC,EAAOF,EAAMC,GACjB14C,EAAO24C,GAAQxuD,KAAKwuD,EACtB,CAOA,GAHA34C,EAAO81C,KAAOuC,EAASvC,KAGD,KAAlBuC,EAASplB,KAEX,OADAjzB,EAAOizB,KAAOjzB,EAAOpB,SACdoB,EAIT,GAAIq4C,EAAS1C,UAAY0C,EAAShjC,SAAU,CAG1C,IADA,IAAIujC,EAAQhpD,OAAOwC,KAAKimD,GACfQ,EAAK,EAAGA,EAAKD,EAAMhtD,OAAQitD,IAAM,CACxC,IAAIC,EAAOF,EAAMC,GACJ,aAATC,IACF94C,EAAO84C,GAAQT,EAASS,GAC5B,CASA,OANInC,EAAgB32C,EAAOqV,WACvBrV,EAAOmyB,WAAanyB,EAAO+1C,WAC7B/1C,EAAO9F,KAAO8F,EAAO+1C,SAAW,KAGlC/1C,EAAOizB,KAAOjzB,EAAOpB,SACdoB,CACT,CAEA,GAAIq4C,EAAShjC,UAAYgjC,EAAShjC,WAAarV,EAAOqV,SAAU,CAS9D,IAAKshC,EAAgB0B,EAAShjC,UAAW,CAEvC,IADA,IAAIjjB,EAAOxC,OAAOwC,KAAKimD,GACdvmD,EAAI,EAAGA,EAAIM,EAAKxG,OAAQkG,IAAK,CACpC,IAAI+C,EAAIzC,EAAKN,GACbkO,EAAOnL,GAAKwjD,EAASxjD,EACvB,CAEA,OADAmL,EAAOizB,KAAOjzB,EAAOpB,SACdoB,CACT,CAGA,GADAA,EAAOqV,SAAWgjC,EAAShjC,SACtBgjC,EAAS3hC,MAASggC,EAAiB2B,EAAShjC,UAS/CrV,EAAO+1C,SAAWsC,EAAStC,aAT+B,CAE1D,IADA,IAAIgD,GAAWV,EAAStC,UAAY,IAAIr5C,MAAM,KACvCq8C,EAAQntD,UAAYysD,EAAS3hC,KAAOqiC,EAAQvlC,WAC9C6kC,EAAS3hC,OAAM2hC,EAAS3hC,KAAO,IAC/B2hC,EAASlmB,WAAUkmB,EAASlmB,SAAW,IACzB,KAAf4mB,EAAQ,IAAWA,EAAQl3C,QAAQ,IACnCk3C,EAAQntD,OAAS,GAAGmtD,EAAQl3C,QAAQ,IACxC7B,EAAO+1C,SAAWgD,EAAQhqC,KAAK,IACjC,CAUA,GAPA/O,EAAOwF,OAAS6yC,EAAS7yC,OACzBxF,EAAOzP,MAAQ8nD,EAAS9nD,MACxByP,EAAO0W,KAAO2hC,EAAS3hC,MAAQ,GAC/B1W,EAAO41C,KAAOyC,EAASzC,KACvB51C,EAAOmyB,SAAWkmB,EAASlmB,UAAYkmB,EAAS3hC,KAChD1W,EAAO61C,KAAOwC,EAASxC,KAEnB71C,EAAO+1C,UAAY/1C,EAAOwF,OAAQ,CACpC,IAAI+O,EAAIvU,EAAO+1C,UAAY,GACvB9qC,EAAIjL,EAAOwF,QAAU,GACzBxF,EAAO9F,KAAOqa,EAAItJ,CACpB,CAGA,OAFAjL,EAAO21C,QAAU31C,EAAO21C,SAAW0C,EAAS1C,QAC5C31C,EAAOizB,KAAOjzB,EAAOpB,SACdoB,CACT,CAEA,IAAIg5C,EAAeh5C,EAAO+1C,UAA0C,MAA9B/1C,EAAO+1C,SAAS39B,OAAO,GACzD6gC,EACIZ,EAAS3hC,MACT2hC,EAAStC,UAA4C,MAAhCsC,EAAStC,SAAS39B,OAAO,GAElD8gC,EAAcD,GAAYD,GACXh5C,EAAO0W,MAAQ2hC,EAAStC,SACvCoD,EAAgBD,EAChBE,EAAUp5C,EAAO+1C,UAAY/1C,EAAO+1C,SAASr5C,MAAM,MAAQ,GAE3D28C,GADAN,EAAUV,EAAStC,UAAYsC,EAAStC,SAASr5C,MAAM,MAAQ,GACnDsD,EAAOqV,WAAashC,EAAgB32C,EAAOqV,WA2B3D,GApBIgkC,IACFr5C,EAAOmyB,SAAW,GAClBnyB,EAAO61C,KAAO,KACV71C,EAAO0W,OACU,KAAf0iC,EAAQ,GAAWA,EAAQ,GAAKp5C,EAAO0W,KACtC0iC,EAAQv3C,QAAQ7B,EAAO0W,OAE9B1W,EAAO0W,KAAO,GACV2hC,EAAShjC,WACXgjC,EAASlmB,SAAW,KACpBkmB,EAASxC,KAAO,KACZwC,EAAS3hC,OACQ,KAAfqiC,EAAQ,GAAWA,EAAQ,GAAKV,EAAS3hC,KACxCqiC,EAAQl3C,QAAQw2C,EAAS3hC,OAEhC2hC,EAAS3hC,KAAO,MAElBwiC,EAAaA,IAA8B,KAAfH,EAAQ,IAA4B,KAAfK,EAAQ,KAGvDH,EAEFj5C,EAAO0W,KAAQ2hC,EAAS3hC,MAA0B,KAAlB2hC,EAAS3hC,KAC3B2hC,EAAS3hC,KAAO1W,EAAO0W,KACrC1W,EAAOmyB,SAAYkmB,EAASlmB,UAAkC,KAAtBkmB,EAASlmB,SAC/BkmB,EAASlmB,SAAWnyB,EAAOmyB,SAC7CnyB,EAAOwF,OAAS6yC,EAAS7yC,OACzBxF,EAAOzP,MAAQ8nD,EAAS9nD,MACxB6oD,EAAUL,OAEL,GAAIA,EAAQntD,OAGZwtD,IAASA,EAAU,IACxBA,EAAQpjC,MACRojC,EAAUA,EAAQ1nD,OAAOqnD,GACzB/4C,EAAOwF,OAAS6yC,EAAS7yC,OACzBxF,EAAOzP,MAAQ8nD,EAAS9nD,WACnB,IAAKklD,EAAK6D,kBAAkBjB,EAAS7yC,QAwB1C,OApBI6zC,IACFr5C,EAAOmyB,SAAWnyB,EAAO0W,KAAO0iC,EAAQ5lC,SAIpC+lC,KAAav5C,EAAO0W,MAAQ1W,EAAO0W,KAAK7jB,QAAQ,KAAO,IAC1CmN,EAAO0W,KAAKha,MAAM,QAEjCsD,EAAO41C,KAAO2D,EAAW/lC,QACzBxT,EAAO0W,KAAO1W,EAAOmyB,SAAWonB,EAAW/lC,UAG/CxT,EAAOwF,OAAS6yC,EAAS7yC,OACzBxF,EAAOzP,MAAQ8nD,EAAS9nD,MAEnBklD,EAAK+D,OAAOx5C,EAAO+1C,WAAcN,EAAK+D,OAAOx5C,EAAOwF,UACvDxF,EAAO9F,MAAQ8F,EAAO+1C,SAAW/1C,EAAO+1C,SAAW,KACpC/1C,EAAOwF,OAASxF,EAAOwF,OAAS,KAEjDxF,EAAOizB,KAAOjzB,EAAOpB,SACdoB,EAGT,IAAKo5C,EAAQxtD,OAWX,OARAoU,EAAO+1C,SAAW,KAEd/1C,EAAOwF,OACTxF,EAAO9F,KAAO,IAAM8F,EAAOwF,OAE3BxF,EAAO9F,KAAO,KAEhB8F,EAAOizB,KAAOjzB,EAAOpB,SACdoB,EAcT,IARA,IAAIy5C,EAAOL,EAAQjtD,OAAO,GAAG,GACzButD,GACC15C,EAAO0W,MAAQ2hC,EAAS3hC,MAAQ0iC,EAAQxtD,OAAS,KACxC,MAAT6tD,GAAyB,OAATA,IAA2B,KAATA,EAInCE,EAAK,EACAluD,EAAI2tD,EAAQxtD,OAAQH,GAAK,EAAGA,IAEtB,OADbguD,EAAOL,EAAQ3tD,IAEb2tD,EAAQhsD,OAAO3B,EAAG,GACA,OAATguD,GACTL,EAAQhsD,OAAO3B,EAAG,GAClBkuD,KACSA,IACTP,EAAQhsD,OAAO3B,EAAG,GAClBkuD,KAKJ,IAAKT,IAAeC,EAClB,KAAOQ,IAAMA,EACXP,EAAQv3C,QAAQ,OAIhBq3C,GAA6B,KAAfE,EAAQ,IACpBA,EAAQ,IAA+B,MAAzBA,EAAQ,GAAGhhC,OAAO,IACpCghC,EAAQv3C,QAAQ,IAGd63C,GAAsD,MAAjCN,EAAQrqC,KAAK,KAAKsJ,QAAQ,IACjD+gC,EAAQ3sD,KAAK,IAGf,IAUM8sD,EAVFK,EAA4B,KAAfR,EAAQ,IACpBA,EAAQ,IAA+B,MAAzBA,EAAQ,GAAGhhC,OAAO,GAsCrC,OAnCIihC,IACFr5C,EAAOmyB,SAAWnyB,EAAO0W,KAAOkjC,EAAa,GACbR,EAAQxtD,OAASwtD,EAAQ5lC,QAAU,IAI/D+lC,KAAav5C,EAAO0W,MAAQ1W,EAAO0W,KAAK7jB,QAAQ,KAAO,IAC1CmN,EAAO0W,KAAKha,MAAM,QAEjCsD,EAAO41C,KAAO2D,EAAW/lC,QACzBxT,EAAO0W,KAAO1W,EAAOmyB,SAAWonB,EAAW/lC,WAI/C0lC,EAAaA,GAAel5C,EAAO0W,MAAQ0iC,EAAQxtD,UAEhCguD,GACjBR,EAAQv3C,QAAQ,IAGbu3C,EAAQxtD,OAIXoU,EAAO+1C,SAAWqD,EAAQrqC,KAAK,MAH/B/O,EAAO+1C,SAAW,KAClB/1C,EAAO9F,KAAO,MAMXu7C,EAAK+D,OAAOx5C,EAAO+1C,WAAcN,EAAK+D,OAAOx5C,EAAOwF,UACvDxF,EAAO9F,MAAQ8F,EAAO+1C,SAAW/1C,EAAO+1C,SAAW,KACpC/1C,EAAOwF,OAASxF,EAAOwF,OAAS,KAEjDxF,EAAO41C,KAAOyC,EAASzC,MAAQ51C,EAAO41C,KACtC51C,EAAO21C,QAAU31C,EAAO21C,SAAW0C,EAAS1C,QAC5C31C,EAAOizB,KAAOjzB,EAAOpB,SACdoB,CACT,EAEA01C,EAAI7qD,UAAU6sD,UAAY,WACxB,IAAIhhC,EAAOvsB,KAAKusB,KACZm/B,EAAOI,EAAYmB,KAAK1gC,GACxBm/B,IAEW,OADbA,EAAOA,EAAK,MAEV1rD,KAAK0rD,KAAOA,EAAKx9B,OAAO,IAE1B3B,EAAOA,EAAK2B,OAAO,EAAG3B,EAAK9qB,OAASiqD,EAAKjqD,SAEvC8qB,IAAMvsB,KAAKgoC,SAAWzb,EAC5B,0BCztBA/rB,EAAOC,QAAU,CACfmsD,SAAU,SAASvsD,GACjB,MAAuB,iBAAV,CACf,EACAC,SAAU,SAASD,GACjB,MAAuB,iBAAV,GAA8B,OAARA,CACrC,EACAgvD,OAAQ,SAAShvD,GACf,OAAe,OAARA,CACT,EACA8uD,kBAAmB,SAAS9uD,GAC1B,OAAc,MAAPA,CACT,cCTF,IADA,IAAIqvD,EAAY,GACPpuD,EAAI,EAAGA,EAAI,MAAOA,EACzBouD,EAAUpuD,IAAMA,EAAI,KAAOoR,SAAS,IAAIwb,OAAO,GAmBjD1tB,EAAOC,QAhBP,SAAqBkvD,EAAKC,GACxB,IAAItuD,EAAIsuD,GAAU,EACdC,EAAMH,EAEV,MAAO,CACLG,EAAIF,EAAIruD,MAAOuuD,EAAIF,EAAIruD,MACvBuuD,EAAIF,EAAIruD,MAAOuuD,EAAIF,EAAIruD,MAAO,IAC9BuuD,EAAIF,EAAIruD,MAAOuuD,EAAIF,EAAIruD,MAAO,IAC9BuuD,EAAIF,EAAIruD,MAAOuuD,EAAIF,EAAIruD,MAAO,IAC9BuuD,EAAIF,EAAIruD,MAAOuuD,EAAIF,EAAIruD,MAAO,IAC9BuuD,EAAIF,EAAIruD,MAAOuuD,EAAIF,EAAIruD,MACvBuuD,EAAIF,EAAIruD,MAAOuuD,EAAIF,EAAIruD,MACvBuuD,EAAIF,EAAIruD,MAAOuuD,EAAIF,EAAIruD,OACtBsjB,KAAK,GACV,aChBA,IAAIkrC,EAAqC,oBAAZ,QAA2BC,OAAOD,iBAAmBC,OAAOD,gBAAgBxvC,KAAKyvC,SACnE,oBAAd,UAAuE,mBAAnC5nC,OAAO6nC,SAASF,iBAAiCE,SAASF,gBAAgBxvC,KAAK0vC,UAEhJ,GAAIF,EAAiB,CAEnB,IAAIG,EAAQ,IAAIC,WAAW,IAE3B1vD,EAAOC,QAAU,WAEf,OADAqvD,EAAgBG,GACTA,CACT,CACF,KAAO,CAKL,IAAIE,EAAO,IAAIpuD,MAAM,IAErBvB,EAAOC,QAAU,WACf,IAAK,IAAWof,EAAPve,EAAI,EAAMA,EAAI,GAAIA,IACN,IAAV,EAAJA,KAAiBue,EAAoB,WAAhBgK,KAAKK,UAC/BimC,EAAK7uD,GAAKue,MAAY,EAAJve,IAAa,GAAK,IAGtC,OAAO6uD,CACT,CACF,mBCjCA,IAAIC,EAAM,EAAQ,OACdC,EAAc,EAAQ,OA2B1B7vD,EAAOC,QAzBP,SAAY+U,EAASm6C,EAAKC,GACxB,IAAItuD,EAAIquD,GAAOC,GAAU,EAEF,iBAAb,IACRD,EAAkB,WAAZn6C,EAAuB,IAAIzT,MAAM,IAAM,KAC7CyT,EAAU,MAIZ,IAAI26C,GAFJ36C,EAAUA,GAAW,CAAC,GAEH0U,SAAW1U,EAAQ46C,KAAOA,KAO7C,GAJAD,EAAK,GAAgB,GAAVA,EAAK,GAAa,GAC7BA,EAAK,GAAgB,GAAVA,EAAK,GAAa,IAGzBR,EACF,IAAK,IAAIW,EAAK,EAAGA,EAAK,KAAMA,EAC1BX,EAAIruD,EAAIgvD,GAAMH,EAAKG,GAIvB,OAAOX,GAAOU,EAAYF,EAC5B","sources":["webpack:///./node_modules/@algolia/events/events.js","webpack:///./node_modules/algoliasearch-helper/index.js","webpack:///./node_modules/algoliasearch-helper/src/DerivedHelper/index.js","webpack:///./node_modules/algoliasearch-helper/src/RecommendParameters/index.js","webpack:///./node_modules/algoliasearch-helper/src/RecommendResults/index.js","webpack:///./node_modules/algoliasearch-helper/src/SearchParameters/RefinementList.js","webpack:///./node_modules/algoliasearch-helper/src/SearchParameters/index.js","webpack:///./node_modules/algoliasearch-helper/src/SearchResults/generate-hierarchical-tree.js","webpack:///./node_modules/algoliasearch-helper/src/SearchResults/index.js","webpack:///./node_modules/algoliasearch-helper/src/algoliasearch.helper.js","webpack:///./node_modules/algoliasearch-helper/src/functions/compact.js","webpack:///./node_modules/algoliasearch-helper/src/functions/defaultsPure.js","webpack:///./node_modules/algoliasearch-helper/src/functions/escapeFacetValue.js","webpack:///./node_modules/algoliasearch-helper/src/functions/find.js","webpack:///./node_modules/algoliasearch-helper/src/functions/findIndex.js","webpack:///./node_modules/algoliasearch-helper/src/functions/flat.js","webpack:///./node_modules/algoliasearch-helper/src/functions/formatSort.js","webpack:///./node_modules/algoliasearch-helper/src/functions/inherits.js","webpack:///./node_modules/algoliasearch-helper/src/functions/intersection.js","webpack:///./node_modules/algoliasearch-helper/src/functions/merge.js","webpack:///./node_modules/algoliasearch-helper/src/functions/objectHasKeys.js","webpack:///./node_modules/algoliasearch-helper/src/functions/omit.js","webpack:///./node_modules/algoliasearch-helper/src/functions/orderBy.js","webpack:///./node_modules/algoliasearch-helper/src/functions/valToNumber.js","webpack:///./node_modules/algoliasearch-helper/src/requestBuilder.js","webpack:///./node_modules/algoliasearch-helper/src/utils/isValidUserToken.js","webpack:///./node_modules/algoliasearch-helper/src/utils/sortAndMergeRecommendations.js","webpack:///./node_modules/algoliasearch-helper/src/version.js","webpack:///./node_modules/algoliasearch/dist/algoliasearch.umd.js","webpack:///./node_modules/querystring/decode.js","webpack:///./node_modules/querystring/encode.js","webpack:///./node_modules/querystring/index.js","webpack:///./node_modules/search-insights/dist/search-insights-browser.cjs.min.js","webpack:///./node_modules/search-insights/index-browser.cjs.js","webpack:///./node_modules/@atlassiansox/origin-tracing/dist/es2019/env.js","webpack:///./node_modules/@atlassiansox/origin-tracing/dist/es2019/encoder.js","webpack:///./node_modules/@atlassiansox/origin-tracing/dist/es2019/origin-tracer.js","webpack:///./node_modules/@atlassiansox/origin-tracing/dist/es2019/util/base64url.js","webpack:///./resources/js/buyer-experience/common/base-paths.ts","webpack:///./resources/js/common/hamlet/hamlet-api.ts","webpack:///./resources/js/common/hamlet/hamlet-user.ts","webpack:///./resources/js/components/navigation/adg4-global-nav.ts","webpack:///./node_modules/url/node_modules/punycode/punycode.js","webpack:///./node_modules/url/url.js","webpack:///./node_modules/url/util.js","webpack:///./node_modules/uuid/lib/bytesToUuid.js","webpack:///./node_modules/uuid/lib/rng-browser.js","webpack:///./node_modules/uuid/v4.js"],"sourcesContent":["// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\n// EventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n\n  // If there is no 'error' event listener then throw.\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      } else {\n        // At least give some kind of context to the user\n        var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n        err.context = er;\n        throw err;\n      }\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      // fast cases\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      // slower\n      default:\n        args = Array.prototype.slice.call(arguments, 1);\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    args = Array.prototype.slice.call(arguments, 1);\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n\n  // To avoid recursion in the case that type === \"newListener\"! Before\n  // adding it to the listeners, first emit \"newListener\".\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    // Optimize the case of one listener. Don't need the extra array object.\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    // If we've already got an array, just append.\n    this._events[type].push(listener);\n  else\n    // Adding the second element, need to change to array.\n    this._events[type] = [this._events[type], listener];\n\n  // Check for listener leak\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      if (typeof console.trace === 'function') {\n        // not supported in IE 10\n        console.trace();\n      }\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n\n  // not listening for removeListener, no need to emit\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n\n  // emit removeListener for all listeners on all events\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else if (listeners) {\n    // LIFO order\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n  if (this._events) {\n    var evlistener = this._events[type];\n\n    if (isFunction(evlistener))\n      return 1;\n    else if (evlistener)\n      return evlistener.length;\n  }\n  return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n","'use strict';\n\nvar AlgoliaSearchHelper = require('./src/algoliasearch.helper');\nvar RecommendParameters = require('./src/RecommendParameters');\nvar RecommendResults = require('./src/RecommendResults');\nvar SearchParameters = require('./src/SearchParameters');\nvar SearchResults = require('./src/SearchResults');\n\n/**\n * The algoliasearchHelper module is the function that will let its\n * contains everything needed to use the Algoliasearch\n * Helper. It is a also a function that instanciate the helper.\n * To use the helper, you also need the Algolia JS client v3.\n * @example\n * //using the UMD build\n * var client = algoliasearch('latency', '6be0576ff61c053d5f9a3225e2a90f76');\n * var helper = algoliasearchHelper(client, 'bestbuy', {\n *   facets: ['shipping'],\n *   disjunctiveFacets: ['category']\n * });\n * helper.on('result', function(event) {\n *   console.log(event.results);\n * });\n * helper\n *   .toggleFacetRefinement('category', 'Movies & TV Shows')\n *   .toggleFacetRefinement('shipping', 'Free shipping')\n *   .search();\n * @example\n * // The helper is an event emitter using the node API\n * helper.on('result', updateTheResults);\n * helper.once('result', updateTheResults);\n * helper.removeListener('result', updateTheResults);\n * helper.removeAllListeners('result');\n * @module algoliasearchHelper\n * @param  {AlgoliaSearch} client an AlgoliaSearch client\n * @param  {string} index the name of the index to query\n * @param  {SearchParameters|object} opts an object defining the initial config of the search. It doesn't have to be a {SearchParameters}, just an object containing the properties you need from it.\n * @param {SearchResultsOptions|object} searchResultsOptions an object defining the options to use when creating the search results.\n * @return {AlgoliaSearchHelper} The helper instance\n */\nfunction algoliasearchHelper(client, index, opts, searchResultsOptions) {\n  return new AlgoliaSearchHelper(client, index, opts, searchResultsOptions);\n}\n\n/**\n * The version currently used\n * @member module:algoliasearchHelper.version\n * @type {number}\n */\nalgoliasearchHelper.version = require('./src/version');\n\n/**\n * Constructor for the Helper.\n * @member module:algoliasearchHelper.AlgoliaSearchHelper\n * @type {AlgoliaSearchHelper}\n */\nalgoliasearchHelper.AlgoliaSearchHelper = AlgoliaSearchHelper;\n\n/**\n * Constructor for the object containing all the parameters of the search.\n * @member module:algoliasearchHelper.SearchParameters\n * @type {SearchParameters}\n */\nalgoliasearchHelper.SearchParameters = SearchParameters;\n\n/**\n * Constructor for the object containing all the parameters for Recommend.\n * @member module:algoliasearchHelper.RecommendParameters\n * @type {RecommendParameters}\n */\nalgoliasearchHelper.RecommendParameters = RecommendParameters;\n\n/**\n * Constructor for the object containing the results of the search.\n * @member module:algoliasearchHelper.SearchResults\n * @type {SearchResults}\n */\nalgoliasearchHelper.SearchResults = SearchResults;\n\n/**\n * Constructor for the object containing the results for Recommend.\n * @member module:algoliasearchHelper.RecommendResults\n * @type {RecommendResults}\n */\nalgoliasearchHelper.RecommendResults = RecommendResults;\n\nmodule.exports = algoliasearchHelper;\n","'use strict';\n\nvar EventEmitter = require('@algolia/events');\n\nvar inherits = require('../functions/inherits');\n\n/**\n * A DerivedHelper is a way to create sub requests to\n * Algolia from a main helper.\n * @class\n * @classdesc The DerivedHelper provides an event based interface for search callbacks:\n *  - search: when a search is triggered using the `search()` method.\n *  - result: when the response is retrieved from Algolia and is processed.\n *    This event contains a {@link SearchResults} object and the\n *    {@link SearchParameters} corresponding to this answer.\n * @param {AlgoliaSearchHelper} mainHelper the main helper\n * @param {function} fn the function to create the derived state for search\n * @param {function} recommendFn the function to create the derived state for recommendations\n */\nfunction DerivedHelper(mainHelper, fn, recommendFn) {\n  this.main = mainHelper;\n  this.fn = fn;\n  this.recommendFn = recommendFn;\n  this.lastResults = null;\n  this.lastRecommendResults = null;\n}\n\ninherits(DerivedHelper, EventEmitter);\n\n/**\n * Detach this helper from the main helper\n * @return {undefined}\n * @throws Error if the derived helper is already detached\n */\nDerivedHelper.prototype.detach = function () {\n  this.removeAllListeners();\n  this.main.detachDerivedHelper(this);\n};\n\nDerivedHelper.prototype.getModifiedState = function (parameters) {\n  return this.fn(parameters);\n};\n\nDerivedHelper.prototype.getModifiedRecommendState = function (parameters) {\n  return this.recommendFn(parameters);\n};\n\nmodule.exports = DerivedHelper;\n","'use strict';\n\n/**\n * RecommendParameters is the data structure that contains all the information\n * usable for getting recommendations from the Algolia API. It doesn't do the\n * search itself, nor does it contains logic about the parameters.\n * It is an immutable object, therefore it has been created in a way that each\n * changes does not change the object itself but returns a copy with the\n * modification.\n * This object should probably not be instantiated outside of the helper. It\n * will be provided when needed.\n * @constructor\n * @classdesc contains all the parameters for recommendations\n * @param {RecommendParametersOptions} opts the options to create the object\n */\nfunction RecommendParameters(opts) {\n  opts = opts || {};\n  this.params = opts.params || [];\n}\n\nRecommendParameters.prototype = {\n  constructor: RecommendParameters,\n\n  addParams: function (params) {\n    var newParams = this.params.slice();\n\n    newParams.push(params);\n\n    return new RecommendParameters({ params: newParams });\n  },\n\n  removeParams: function (id) {\n    return new RecommendParameters({\n      params: this.params.filter(function (param) {\n        return param.$$id !== id;\n      }),\n    });\n  },\n\n  addFrequentlyBoughtTogether: function (params) {\n    return this.addParams(\n      Object.assign({}, params, { model: 'bought-together' })\n    );\n  },\n\n  addRelatedProducts: function (params) {\n    return this.addParams(\n      Object.assign({}, params, { model: 'related-products' })\n    );\n  },\n\n  addTrendingItems: function (params) {\n    return this.addParams(\n      Object.assign({}, params, { model: 'trending-items' })\n    );\n  },\n\n  addTrendingFacets: function (params) {\n    return this.addParams(\n      Object.assign({}, params, { model: 'trending-facets' })\n    );\n  },\n\n  addLookingSimilar: function (params) {\n    return this.addParams(\n      Object.assign({}, params, { model: 'looking-similar' })\n    );\n  },\n\n  _buildQueries: function (indexName, cache) {\n    return this.params\n      .filter(function (params) {\n        return cache[params.$$id] === undefined;\n      })\n      .map(function (params) {\n        var query = Object.assign({}, params, {\n          indexName: indexName,\n          // @TODO: remove this if it ever gets handled by the API\n          threshold: params.threshold || 0,\n        });\n        delete query.$$id;\n\n        return query;\n      });\n  },\n};\n\nmodule.exports = RecommendParameters;\n","'use strict';\n\n/**\n * Constructor for SearchResults\n * @class\n * @classdesc SearchResults contains the results of a query to Algolia using the\n * {@link AlgoliaSearchHelper}.\n * @param {RecommendParameters} state state that led to the response\n * @param {Record<string,RecommendResultItem>} results the results from algolia client\n **/\nfunction RecommendResults(state, results) {\n  this._state = state;\n  this._rawResults = {};\n\n  // eslint-disable-next-line consistent-this\n  var self = this;\n\n  state.params.forEach(function (param) {\n    var id = param.$$id;\n    self[id] = results[id];\n    self._rawResults[id] = results[id];\n  });\n}\n\nRecommendResults.prototype = {\n  constructor: RecommendResults,\n};\n\nmodule.exports = RecommendResults;\n","'use strict';\n\n/**\n * Functions to manipulate refinement lists\n *\n * The RefinementList is not formally defined through a prototype but is based\n * on a specific structure.\n *\n * @module SearchParameters.refinementList\n *\n * @typedef {string[]} SearchParameters.refinementList.Refinements\n * @typedef {Object.<string, SearchParameters.refinementList.Refinements>} SearchParameters.refinementList.RefinementList\n */\n\nvar defaultsPure = require('../functions/defaultsPure');\nvar objectHasKeys = require('../functions/objectHasKeys');\nvar omit = require('../functions/omit');\n\nvar lib = {\n  /**\n   * Adds a refinement to a RefinementList\n   * @param {RefinementList} refinementList the initial list\n   * @param {string} attribute the attribute to refine\n   * @param {string} value the value of the refinement, if the value is not a string it will be converted\n   * @return {RefinementList} a new and updated refinement list\n   */\n  addRefinement: function addRefinement(refinementList, attribute, value) {\n    if (lib.isRefined(refinementList, attribute, value)) {\n      return refinementList;\n    }\n\n    var valueAsString = '' + value;\n\n    var facetRefinement = !refinementList[attribute]\n      ? [valueAsString]\n      : refinementList[attribute].concat(valueAsString);\n\n    var mod = {};\n\n    mod[attribute] = facetRefinement;\n\n    return defaultsPure({}, mod, refinementList);\n  },\n  /**\n   * Removes refinement(s) for an attribute:\n   *  - if the value is specified removes the refinement for the value on the attribute\n   *  - if no value is specified removes all the refinements for this attribute\n   * @param {RefinementList} refinementList the initial list\n   * @param {string} attribute the attribute to refine\n   * @param {string} [value] the value of the refinement\n   * @return {RefinementList} a new and updated refinement lst\n   */\n  removeRefinement: function removeRefinement(\n    refinementList,\n    attribute,\n    value\n  ) {\n    if (value === undefined) {\n      // we use the \"filter\" form of clearRefinement, since it leaves empty values as-is\n      // the form with a string will remove the attribute completely\n      return lib.clearRefinement(refinementList, function (v, f) {\n        return attribute === f;\n      });\n    }\n\n    var valueAsString = '' + value;\n\n    return lib.clearRefinement(refinementList, function (v, f) {\n      return attribute === f && valueAsString === v;\n    });\n  },\n  /**\n   * Toggles the refinement value for an attribute.\n   * @param {RefinementList} refinementList the initial list\n   * @param {string} attribute the attribute to refine\n   * @param {string} value the value of the refinement\n   * @return {RefinementList} a new and updated list\n   */\n  toggleRefinement: function toggleRefinement(\n    refinementList,\n    attribute,\n    value\n  ) {\n    if (value === undefined)\n      throw new Error('toggleRefinement should be used with a value');\n\n    if (lib.isRefined(refinementList, attribute, value)) {\n      return lib.removeRefinement(refinementList, attribute, value);\n    }\n\n    return lib.addRefinement(refinementList, attribute, value);\n  },\n  /**\n   * Clear all or parts of a RefinementList. Depending on the arguments, three\n   * kinds of behavior can happen:\n   *  - if no attribute is provided: clears the whole list\n   *  - if an attribute is provided as a string: clears the list for the specific attribute\n   *  - if an attribute is provided as a function: discards the elements for which the function returns true\n   * @param {RefinementList} refinementList the initial list\n   * @param {string} [attribute] the attribute or function to discard\n   * @param {string} [refinementType] optional parameter to give more context to the attribute function\n   * @return {RefinementList} a new and updated refinement list\n   */\n  clearRefinement: function clearRefinement(\n    refinementList,\n    attribute,\n    refinementType\n  ) {\n    if (attribute === undefined) {\n      // return the same object if the list is already empty\n      // this is mainly for tests, as it doesn't have much impact on performance\n      if (!objectHasKeys(refinementList)) {\n        return refinementList;\n      }\n      return {};\n    } else if (typeof attribute === 'string') {\n      return omit(refinementList, [attribute]);\n    } else if (typeof attribute === 'function') {\n      var hasChanged = false;\n\n      var newRefinementList = Object.keys(refinementList).reduce(function (\n        memo,\n        key\n      ) {\n        var values = refinementList[key] || [];\n        var facetList = values.filter(function (value) {\n          return !attribute(value, key, refinementType);\n        });\n\n        if (facetList.length !== values.length) {\n          hasChanged = true;\n        }\n\n        memo[key] = facetList;\n\n        return memo;\n      },\n      {});\n\n      if (hasChanged) return newRefinementList;\n      return refinementList;\n    }\n\n    // We return nothing if the attribute is not undefined, a string or a function,\n    // as it is not a valid value for a refinement\n    return undefined;\n  },\n  /**\n   * Test if the refinement value is used for the attribute. If no refinement value\n   * is provided, test if the refinementList contains any refinement for the\n   * given attribute.\n   * @param {RefinementList} refinementList the list of refinement\n   * @param {string} attribute name of the attribute\n   * @param {string} [refinementValue] value of the filter/refinement\n   * @return {boolean} true if the attribute is refined, false otherwise\n   */\n  isRefined: function isRefined(refinementList, attribute, refinementValue) {\n    var containsRefinements =\n      Boolean(refinementList[attribute]) &&\n      refinementList[attribute].length > 0;\n\n    if (refinementValue === undefined || !containsRefinements) {\n      return containsRefinements;\n    }\n\n    var refinementValueAsString = '' + refinementValue;\n\n    return refinementList[attribute].indexOf(refinementValueAsString) !== -1;\n  },\n};\n\nmodule.exports = lib;\n","'use strict';\n\nvar defaultsPure = require('../functions/defaultsPure');\nvar find = require('../functions/find');\nvar intersection = require('../functions/intersection');\nvar merge = require('../functions/merge');\nvar objectHasKeys = require('../functions/objectHasKeys');\nvar omit = require('../functions/omit');\nvar valToNumber = require('../functions/valToNumber');\nvar isValidUserToken = require('../utils/isValidUserToken');\n\nvar RefinementList = require('./RefinementList');\n\n/**\n * isEqual, but only for numeric refinement values, possible values:\n * - 5\n * - [5]\n * - [[5]]\n * - [[5,5],[4]]\n * @param {any} a numeric refinement value\n * @param {any} b numeric refinement value\n * @return {boolean} true if the values are equal\n */\nfunction isEqualNumericRefinement(a, b) {\n  if (Array.isArray(a) && Array.isArray(b)) {\n    return (\n      a.length === b.length &&\n      a.every(function (el, i) {\n        return isEqualNumericRefinement(b[i], el);\n      })\n    );\n  }\n  return a === b;\n}\n\n/**\n * like _.find but using deep equality to be able to use it\n * to find arrays.\n * @private\n * @param {any[]} array array to search into (elements are base or array of base)\n * @param {any} searchedValue the value we're looking for (base or array of base)\n * @return {any} the searched value or undefined\n */\nfunction findArray(array, searchedValue) {\n  return find(array, function (currentValue) {\n    return isEqualNumericRefinement(currentValue, searchedValue);\n  });\n}\n\n/**\n * The facet list is the structure used to store the list of values used to\n * filter a single attribute.\n * @typedef {string[]} SearchParameters.FacetList\n */\n\n/**\n * Structure to store numeric filters with the operator as the key. The supported operators\n * are `=`, `>`, `<`, `>=`, `<=` and `!=`.\n * @typedef {Object.<string, Array.<number|number[]>>} SearchParameters.OperatorList\n */\n\n/**\n * SearchParameters is the data structure that contains all the information\n * usable for making a search to Algolia API. It doesn't do the search itself,\n * nor does it contains logic about the parameters.\n * It is an immutable object, therefore it has been created in a way that each\n * changes does not change the object itself but returns a copy with the\n * modification.\n * This object should probably not be instantiated outside of the helper. It will\n * be provided when needed. This object is documented for reference as you'll\n * get it from events generated by the {@link AlgoliaSearchHelper}.\n * If need be, instantiate the Helper from the factory function {@link SearchParameters.make}\n * @constructor\n * @classdesc contains all the parameters of a search\n * @param {object|SearchParameters} newParameters existing parameters or partial object\n * for the properties of a new SearchParameters\n * @see SearchParameters.make\n * @example <caption>SearchParameters of the first query in\n *   <a href=\"http://demos.algolia.com/instant-search-demo/\">the instant search demo</a></caption>\n{\n   \"query\": \"\",\n   \"disjunctiveFacets\": [\n      \"customerReviewCount\",\n      \"category\",\n      \"salePrice_range\",\n      \"manufacturer\"\n  ],\n   \"maxValuesPerFacet\": 30,\n   \"page\": 0,\n   \"hitsPerPage\": 10,\n   \"facets\": [\n      \"type\",\n      \"shipping\"\n  ]\n}\n */\nfunction SearchParameters(newParameters) {\n  var params = newParameters\n    ? SearchParameters._parseNumbers(newParameters)\n    : {};\n\n  if (params.userToken !== undefined && !isValidUserToken(params.userToken)) {\n    // eslint-disable-next-line no-console\n    console.warn(\n      '[algoliasearch-helper] The `userToken` parameter is invalid. This can lead to wrong analytics.\\n  - Format: [a-zA-Z0-9_-]{1,64}'\n    );\n  }\n  /**\n   * This attribute contains the list of all the conjunctive facets\n   * used. This list will be added to requested facets in the\n   * [facets attribute](https://www.algolia.com/doc/rest-api/search#param-facets) sent to algolia.\n   * @member {string[]}\n   */\n  this.facets = params.facets || [];\n  /**\n   * This attribute contains the list of all the disjunctive facets\n   * used. This list will be added to requested facets in the\n   * [facets attribute](https://www.algolia.com/doc/rest-api/search#param-facets) sent to algolia.\n   * @member {string[]}\n   */\n  this.disjunctiveFacets = params.disjunctiveFacets || [];\n  /**\n   * This attribute contains the list of all the hierarchical facets\n   * used. This list will be added to requested facets in the\n   * [facets attribute](https://www.algolia.com/doc/rest-api/search#param-facets) sent to algolia.\n   * Hierarchical facets are a sub type of disjunctive facets that\n   * let you filter faceted attributes hierarchically.\n   * @member {string[]|object[]}\n   */\n  this.hierarchicalFacets = params.hierarchicalFacets || [];\n\n  // Refinements\n  /**\n   * This attribute contains all the filters that need to be\n   * applied on the conjunctive facets. Each facet must be properly\n   * defined in the `facets` attribute.\n   *\n   * The key is the name of the facet, and the `FacetList` contains all\n   * filters selected for the associated facet name.\n   *\n   * When querying algolia, the values stored in this attribute will\n   * be translated into the `facetFilters` attribute.\n   * @member {Object.<string, SearchParameters.FacetList>}\n   */\n  this.facetsRefinements = params.facetsRefinements || {};\n  /**\n   * This attribute contains all the filters that need to be\n   * excluded from the conjunctive facets. Each facet must be properly\n   * defined in the `facets` attribute.\n   *\n   * The key is the name of the facet, and the `FacetList` contains all\n   * filters excluded for the associated facet name.\n   *\n   * When querying algolia, the values stored in this attribute will\n   * be translated into the `facetFilters` attribute.\n   * @member {Object.<string, SearchParameters.FacetList>}\n   */\n  this.facetsExcludes = params.facetsExcludes || {};\n  /**\n   * This attribute contains all the filters that need to be\n   * applied on the disjunctive facets. Each facet must be properly\n   * defined in the `disjunctiveFacets` attribute.\n   *\n   * The key is the name of the facet, and the `FacetList` contains all\n   * filters selected for the associated facet name.\n   *\n   * When querying algolia, the values stored in this attribute will\n   * be translated into the `facetFilters` attribute.\n   * @member {Object.<string, SearchParameters.FacetList>}\n   */\n  this.disjunctiveFacetsRefinements = params.disjunctiveFacetsRefinements || {};\n  /**\n   * This attribute contains all the filters that need to be\n   * applied on the numeric attributes.\n   *\n   * The key is the name of the attribute, and the value is the\n   * filters to apply to this attribute.\n   *\n   * When querying algolia, the values stored in this attribute will\n   * be translated into the `numericFilters` attribute.\n   * @member {Object.<string, SearchParameters.OperatorList>}\n   */\n  this.numericRefinements = params.numericRefinements || {};\n  /**\n   * This attribute contains all the tags used to refine the query.\n   *\n   * When querying algolia, the values stored in this attribute will\n   * be translated into the `tagFilters` attribute.\n   * @member {string[]}\n   */\n  this.tagRefinements = params.tagRefinements || [];\n  /**\n   * This attribute contains all the filters that need to be\n   * applied on the hierarchical facets. Each facet must be properly\n   * defined in the `hierarchicalFacets` attribute.\n   *\n   * The key is the name of the facet, and the `FacetList` contains all\n   * filters selected for the associated facet name. The FacetList values\n   * are structured as a string that contain the values for each level\n   * separated by the configured separator.\n   *\n   * When querying algolia, the values stored in this attribute will\n   * be translated into the `facetFilters` attribute.\n   * @member {Object.<string, SearchParameters.FacetList>}\n   */\n  this.hierarchicalFacetsRefinements =\n    params.hierarchicalFacetsRefinements || {};\n\n  // eslint-disable-next-line consistent-this\n  var self = this;\n  Object.keys(params).forEach(function (paramName) {\n    var isKeyKnown = SearchParameters.PARAMETERS.indexOf(paramName) !== -1;\n    var isValueDefined = params[paramName] !== undefined;\n\n    if (!isKeyKnown && isValueDefined) {\n      self[paramName] = params[paramName];\n    }\n  });\n}\n\n/**\n * List all the properties in SearchParameters and therefore all the known Algolia properties\n * This doesn't contain any beta/hidden features.\n * @private\n */\nSearchParameters.PARAMETERS = Object.keys(new SearchParameters());\n\n/**\n * @private\n * @param {object} partialState full or part of a state\n * @return {object} a new object with the number keys as number\n */\nSearchParameters._parseNumbers = function (partialState) {\n  // Do not parse numbers again in SearchParameters, they ought to be parsed already\n  if (partialState instanceof SearchParameters) return partialState;\n\n  var numbers = {};\n\n  var numberKeys = [\n    'aroundPrecision',\n    'aroundRadius',\n    'getRankingInfo',\n    'minWordSizefor2Typos',\n    'minWordSizefor1Typo',\n    'page',\n    'maxValuesPerFacet',\n    'distinct',\n    'minimumAroundRadius',\n    'hitsPerPage',\n    'minProximity',\n  ];\n\n  numberKeys.forEach(function (k) {\n    var value = partialState[k];\n    if (typeof value === 'string') {\n      var parsedValue = parseFloat(value);\n      // global isNaN is ok to use here, value is only number or NaN\n      numbers[k] = isNaN(parsedValue) ? value : parsedValue;\n    }\n  });\n\n  // there's two formats of insideBoundingBox, we need to parse\n  // the one which is an array of float geo rectangles\n  if (Array.isArray(partialState.insideBoundingBox)) {\n    numbers.insideBoundingBox = partialState.insideBoundingBox.map(function (\n      geoRect\n    ) {\n      if (Array.isArray(geoRect)) {\n        return geoRect.map(function (value) {\n          return parseFloat(value);\n        });\n      }\n      return geoRect;\n    });\n  }\n\n  if (partialState.numericRefinements) {\n    var numericRefinements = {};\n    Object.keys(partialState.numericRefinements).forEach(function (attribute) {\n      var operators = partialState.numericRefinements[attribute] || {};\n      numericRefinements[attribute] = {};\n      Object.keys(operators).forEach(function (operator) {\n        var values = operators[operator];\n        var parsedValues = values.map(function (v) {\n          if (Array.isArray(v)) {\n            return v.map(function (vPrime) {\n              if (typeof vPrime === 'string') {\n                return parseFloat(vPrime);\n              }\n              return vPrime;\n            });\n          } else if (typeof v === 'string') {\n            return parseFloat(v);\n          }\n          return v;\n        });\n        numericRefinements[attribute][operator] = parsedValues;\n      });\n    });\n    numbers.numericRefinements = numericRefinements;\n  }\n\n  return merge(partialState, numbers);\n};\n\n/**\n * Factory for SearchParameters\n * @param {object|SearchParameters} newParameters existing parameters or partial\n * object for the properties of a new SearchParameters\n * @return {SearchParameters} frozen instance of SearchParameters\n */\nSearchParameters.make = function makeSearchParameters(newParameters) {\n  var instance = new SearchParameters(newParameters);\n\n  var hierarchicalFacets = newParameters.hierarchicalFacets || [];\n  hierarchicalFacets.forEach(function (facet) {\n    if (facet.rootPath) {\n      var currentRefinement = instance.getHierarchicalRefinement(facet.name);\n\n      if (\n        currentRefinement.length > 0 &&\n        currentRefinement[0].indexOf(facet.rootPath) !== 0\n      ) {\n        instance = instance.clearRefinements(facet.name);\n      }\n\n      // get it again in case it has been cleared\n      currentRefinement = instance.getHierarchicalRefinement(facet.name);\n      if (currentRefinement.length === 0) {\n        instance = instance.toggleHierarchicalFacetRefinement(\n          facet.name,\n          facet.rootPath\n        );\n      }\n    }\n  });\n\n  return instance;\n};\n\n/**\n * Validates the new parameters based on the previous state\n * @param {SearchParameters} currentState the current state\n * @param {object|SearchParameters} parameters the new parameters to set\n * @return {Error|null} Error if the modification is invalid, null otherwise\n */\nSearchParameters.validate = function (currentState, parameters) {\n  var params = parameters || {};\n\n  if (\n    currentState.tagFilters &&\n    params.tagRefinements &&\n    params.tagRefinements.length > 0\n  ) {\n    return new Error(\n      '[Tags] Cannot switch from the managed tag API to the advanced API. It is probably ' +\n        'an error, if it is really what you want, you should first clear the tags with clearTags method.'\n    );\n  }\n\n  if (currentState.tagRefinements.length > 0 && params.tagFilters) {\n    return new Error(\n      '[Tags] Cannot switch from the advanced tag API to the managed API. It is probably ' +\n        'an error, if it is not, you should first clear the tags with clearTags method.'\n    );\n  }\n\n  if (\n    currentState.numericFilters &&\n    params.numericRefinements &&\n    objectHasKeys(params.numericRefinements)\n  ) {\n    return new Error(\n      \"[Numeric filters] Can't switch from the advanced to the managed API. It\" +\n        ' is probably an error, if this is really what you want, you have to first' +\n        ' clear the numeric filters.'\n    );\n  }\n\n  if (objectHasKeys(currentState.numericRefinements) && params.numericFilters) {\n    return new Error(\n      \"[Numeric filters] Can't switch from the managed API to the advanced. It\" +\n        ' is probably an error, if this is really what you want, you have to first' +\n        ' clear the numeric filters.'\n    );\n  }\n\n  return null;\n};\n\nSearchParameters.prototype = {\n  constructor: SearchParameters,\n\n  /**\n   * Remove all refinements (disjunctive + conjunctive + excludes + numeric filters)\n   * @method\n   * @param {undefined|string|SearchParameters.clearCallback} [attribute] optional string or function\n   * - If not given, means to clear all the filters.\n   * - If `string`, means to clear all refinements for the `attribute` named filter.\n   * - If `function`, means to clear all the refinements that return truthy values.\n   * @return {SearchParameters} new instance with filters cleared\n   */\n  clearRefinements: function clearRefinements(attribute) {\n    var patch = {\n      numericRefinements: this._clearNumericRefinements(attribute),\n      facetsRefinements: RefinementList.clearRefinement(\n        this.facetsRefinements,\n        attribute,\n        'conjunctiveFacet'\n      ),\n      facetsExcludes: RefinementList.clearRefinement(\n        this.facetsExcludes,\n        attribute,\n        'exclude'\n      ),\n      disjunctiveFacetsRefinements: RefinementList.clearRefinement(\n        this.disjunctiveFacetsRefinements,\n        attribute,\n        'disjunctiveFacet'\n      ),\n      hierarchicalFacetsRefinements: RefinementList.clearRefinement(\n        this.hierarchicalFacetsRefinements,\n        attribute,\n        'hierarchicalFacet'\n      ),\n    };\n    if (\n      patch.numericRefinements === this.numericRefinements &&\n      patch.facetsRefinements === this.facetsRefinements &&\n      patch.facetsExcludes === this.facetsExcludes &&\n      patch.disjunctiveFacetsRefinements ===\n        this.disjunctiveFacetsRefinements &&\n      patch.hierarchicalFacetsRefinements === this.hierarchicalFacetsRefinements\n    ) {\n      return this;\n    }\n    return this.setQueryParameters(patch);\n  },\n  /**\n   * Remove all the refined tags from the SearchParameters\n   * @method\n   * @return {SearchParameters} new instance with tags cleared\n   */\n  clearTags: function clearTags() {\n    if (this.tagFilters === undefined && this.tagRefinements.length === 0)\n      return this;\n\n    return this.setQueryParameters({\n      tagFilters: undefined,\n      tagRefinements: [],\n    });\n  },\n  /**\n   * Set the index.\n   * @method\n   * @param {string} index the index name\n   * @return {SearchParameters} new instance\n   */\n  setIndex: function setIndex(index) {\n    if (index === this.index) return this;\n\n    return this.setQueryParameters({\n      index: index,\n    });\n  },\n  /**\n   * Query setter\n   * @method\n   * @param {string} newQuery value for the new query\n   * @return {SearchParameters} new instance\n   */\n  setQuery: function setQuery(newQuery) {\n    if (newQuery === this.query) return this;\n\n    return this.setQueryParameters({\n      query: newQuery,\n    });\n  },\n  /**\n   * Page setter\n   * @method\n   * @param {number} newPage new page number\n   * @return {SearchParameters} new instance\n   */\n  setPage: function setPage(newPage) {\n    if (newPage === this.page) return this;\n\n    return this.setQueryParameters({\n      page: newPage,\n    });\n  },\n  /**\n   * Facets setter\n   * The facets are the simple facets, used for conjunctive (and) faceting.\n   * @method\n   * @param {string[]} facets all the attributes of the algolia records used for conjunctive faceting\n   * @return {SearchParameters} new instance\n   */\n  setFacets: function setFacets(facets) {\n    return this.setQueryParameters({\n      facets: facets,\n    });\n  },\n  /**\n   * Disjunctive facets setter\n   * Change the list of disjunctive (or) facets the helper chan handle.\n   * @method\n   * @param {string[]} facets all the attributes of the algolia records used for disjunctive faceting\n   * @return {SearchParameters} new instance\n   */\n  setDisjunctiveFacets: function setDisjunctiveFacets(facets) {\n    return this.setQueryParameters({\n      disjunctiveFacets: facets,\n    });\n  },\n  /**\n   * HitsPerPage setter\n   * Hits per page represents the number of hits retrieved for this query\n   * @method\n   * @param {number} n number of hits retrieved per page of results\n   * @return {SearchParameters} new instance\n   */\n  setHitsPerPage: function setHitsPerPage(n) {\n    if (this.hitsPerPage === n) return this;\n\n    return this.setQueryParameters({\n      hitsPerPage: n,\n    });\n  },\n  /**\n   * typoTolerance setter\n   * Set the value of typoTolerance\n   * @method\n   * @param {string} typoTolerance new value of typoTolerance (\"true\", \"false\", \"min\" or \"strict\")\n   * @return {SearchParameters} new instance\n   */\n  setTypoTolerance: function setTypoTolerance(typoTolerance) {\n    if (this.typoTolerance === typoTolerance) return this;\n\n    return this.setQueryParameters({\n      typoTolerance: typoTolerance,\n    });\n  },\n  /**\n   * Add a numeric filter for a given attribute\n   * When value is an array, they are combined with OR\n   * When value is a single value, it will combined with AND\n   * @method\n   * @param {string} attribute attribute to set the filter on\n   * @param {string} operator operator of the filter (possible values: =, >, >=, <, <=, !=)\n   * @param {number | number[]} value value of the filter\n   * @return {SearchParameters} new instance\n   * @example\n   * // for price = 50 or 40\n   * state.addNumericRefinement('price', '=', [50, 40]);\n   * @example\n   * // for size = 38 and 40\n   * state.addNumericRefinement('size', '=', 38);\n   * state.addNumericRefinement('size', '=', 40);\n   */\n  addNumericRefinement: function (attribute, operator, value) {\n    var val = valToNumber(value);\n\n    if (this.isNumericRefined(attribute, operator, val)) return this;\n\n    var mod = merge({}, this.numericRefinements);\n\n    mod[attribute] = merge({}, mod[attribute]);\n\n    if (mod[attribute][operator]) {\n      // Array copy\n      mod[attribute][operator] = mod[attribute][operator].slice();\n      // Add the element. Concat can't be used here because value can be an array.\n      mod[attribute][operator].push(val);\n    } else {\n      mod[attribute][operator] = [val];\n    }\n\n    return this.setQueryParameters({\n      numericRefinements: mod,\n    });\n  },\n  /**\n   * Get the list of conjunctive refinements for a single facet\n   * @param {string} facetName name of the attribute used for faceting\n   * @return {string[]} list of refinements\n   */\n  getConjunctiveRefinements: function (facetName) {\n    if (!this.isConjunctiveFacet(facetName)) {\n      return [];\n    }\n    return this.facetsRefinements[facetName] || [];\n  },\n  /**\n   * Get the list of disjunctive refinements for a single facet\n   * @param {string} facetName name of the attribute used for faceting\n   * @return {string[]} list of refinements\n   */\n  getDisjunctiveRefinements: function (facetName) {\n    if (!this.isDisjunctiveFacet(facetName)) {\n      return [];\n    }\n    return this.disjunctiveFacetsRefinements[facetName] || [];\n  },\n  /**\n   * Get the list of hierarchical refinements for a single facet\n   * @param {string} facetName name of the attribute used for faceting\n   * @return {string[]} list of refinements\n   */\n  getHierarchicalRefinement: function (facetName) {\n    // we send an array but we currently do not support multiple\n    // hierarchicalRefinements for a hierarchicalFacet\n    return this.hierarchicalFacetsRefinements[facetName] || [];\n  },\n  /**\n   * Get the list of exclude refinements for a single facet\n   * @param {string} facetName name of the attribute used for faceting\n   * @return {string[]} list of refinements\n   */\n  getExcludeRefinements: function (facetName) {\n    if (!this.isConjunctiveFacet(facetName)) {\n      return [];\n    }\n    return this.facetsExcludes[facetName] || [];\n  },\n\n  /**\n   * Remove all the numeric filter for a given (attribute, operator)\n   * @method\n   * @param {string} attribute attribute to set the filter on\n   * @param {string} [operator] operator of the filter (possible values: =, >, >=, <, <=, !=)\n   * @param {number} [number] the value to be removed\n   * @return {SearchParameters} new instance\n   */\n  removeNumericRefinement: function (attribute, operator, number) {\n    var paramValue = number;\n    if (paramValue !== undefined) {\n      if (!this.isNumericRefined(attribute, operator, paramValue)) {\n        return this;\n      }\n      return this.setQueryParameters({\n        numericRefinements: this._clearNumericRefinements(function (\n          value,\n          key\n        ) {\n          return (\n            key === attribute &&\n            value.op === operator &&\n            isEqualNumericRefinement(value.val, valToNumber(paramValue))\n          );\n        }),\n      });\n    } else if (operator !== undefined) {\n      if (!this.isNumericRefined(attribute, operator)) return this;\n      return this.setQueryParameters({\n        numericRefinements: this._clearNumericRefinements(function (\n          value,\n          key\n        ) {\n          return key === attribute && value.op === operator;\n        }),\n      });\n    }\n\n    if (!this.isNumericRefined(attribute)) return this;\n    return this.setQueryParameters({\n      numericRefinements: this._clearNumericRefinements(function (value, key) {\n        return key === attribute;\n      }),\n    });\n  },\n  /**\n   * Get the list of numeric refinements for a single facet\n   * @param {string} facetName name of the attribute used for faceting\n   * @return {SearchParameters.OperatorList} list of refinements\n   */\n  getNumericRefinements: function (facetName) {\n    return this.numericRefinements[facetName] || {};\n  },\n  /**\n   * Return the current refinement for the (attribute, operator)\n   * @param {string} attribute attribute in the record\n   * @param {string} operator operator applied on the refined values\n   * @return {Array.<number|number[]>} refined values\n   */\n  getNumericRefinement: function (attribute, operator) {\n    return (\n      this.numericRefinements[attribute] &&\n      this.numericRefinements[attribute][operator]\n    );\n  },\n  /**\n   * Clear numeric filters.\n   * @method\n   * @private\n   * @param {string|SearchParameters.clearCallback} [attribute] optional string or function\n   * - If not given, means to clear all the filters.\n   * - If `string`, means to clear all refinements for the `attribute` named filter.\n   * - If `function`, means to clear all the refinements that return truthy values.\n   * @return {Object.<string, OperatorList>} new numeric refinements\n   */\n  _clearNumericRefinements: function _clearNumericRefinements(attribute) {\n    if (attribute === undefined) {\n      if (!objectHasKeys(this.numericRefinements)) {\n        return this.numericRefinements;\n      }\n      return {};\n    } else if (typeof attribute === 'string') {\n      return omit(this.numericRefinements, [attribute]);\n    } else if (typeof attribute === 'function') {\n      var hasChanged = false;\n      var numericRefinements = this.numericRefinements;\n      var newNumericRefinements = Object.keys(numericRefinements).reduce(\n        function (memo, key) {\n          var operators = numericRefinements[key];\n          var operatorList = {};\n\n          operators = operators || {};\n          Object.keys(operators).forEach(function (operator) {\n            var values = operators[operator] || [];\n            var outValues = [];\n            values.forEach(function (value) {\n              var predicateResult = attribute(\n                { val: value, op: operator },\n                key,\n                'numeric'\n              );\n              if (!predicateResult) outValues.push(value);\n            });\n            if (outValues.length !== values.length) {\n              hasChanged = true;\n            }\n            operatorList[operator] = outValues;\n          });\n\n          memo[key] = operatorList;\n\n          return memo;\n        },\n        {}\n      );\n\n      if (hasChanged) return newNumericRefinements;\n      return this.numericRefinements;\n    }\n\n    // We return nothing if the attribute is not undefined, a string or a function,\n    // as it is not a valid value for a refinement\n    return undefined;\n  },\n  /**\n   * Add a facet to the facets attribute of the helper configuration, if it\n   * isn't already present.\n   * @method\n   * @param {string} facet facet name to add\n   * @return {SearchParameters} new instance\n   */\n  addFacet: function addFacet(facet) {\n    if (this.isConjunctiveFacet(facet)) {\n      return this;\n    }\n\n    return this.setQueryParameters({\n      facets: this.facets.concat([facet]),\n    });\n  },\n  /**\n   * Add a disjunctive facet to the disjunctiveFacets attribute of the helper\n   * configuration, if it isn't already present.\n   * @method\n   * @param {string} facet disjunctive facet name to add\n   * @return {SearchParameters} new instance\n   */\n  addDisjunctiveFacet: function addDisjunctiveFacet(facet) {\n    if (this.isDisjunctiveFacet(facet)) {\n      return this;\n    }\n\n    return this.setQueryParameters({\n      disjunctiveFacets: this.disjunctiveFacets.concat([facet]),\n    });\n  },\n  /**\n   * Add a hierarchical facet to the hierarchicalFacets attribute of the helper\n   * configuration.\n   * @method\n   * @param {object} hierarchicalFacet hierarchical facet to add\n   * @return {SearchParameters} new instance\n   * @throws will throw an error if a hierarchical facet with the same name was already declared\n   */\n  addHierarchicalFacet: function addHierarchicalFacet(hierarchicalFacet) {\n    if (this.isHierarchicalFacet(hierarchicalFacet.name)) {\n      throw new Error(\n        'Cannot declare two hierarchical facets with the same name: `' +\n          hierarchicalFacet.name +\n          '`'\n      );\n    }\n\n    return this.setQueryParameters({\n      hierarchicalFacets: this.hierarchicalFacets.concat([hierarchicalFacet]),\n    });\n  },\n  /**\n   * Add a refinement on a \"normal\" facet\n   * @method\n   * @param {string} facet attribute to apply the faceting on\n   * @param {string} value value of the attribute (will be converted to string)\n   * @return {SearchParameters} new instance\n   */\n  addFacetRefinement: function addFacetRefinement(facet, value) {\n    if (!this.isConjunctiveFacet(facet)) {\n      throw new Error(\n        facet +\n          ' is not defined in the facets attribute of the helper configuration'\n      );\n    }\n    if (RefinementList.isRefined(this.facetsRefinements, facet, value))\n      return this;\n\n    return this.setQueryParameters({\n      facetsRefinements: RefinementList.addRefinement(\n        this.facetsRefinements,\n        facet,\n        value\n      ),\n    });\n  },\n  /**\n   * Exclude a value from a \"normal\" facet\n   * @method\n   * @param {string} facet attribute to apply the exclusion on\n   * @param {string} value value of the attribute (will be converted to string)\n   * @return {SearchParameters} new instance\n   */\n  addExcludeRefinement: function addExcludeRefinement(facet, value) {\n    if (!this.isConjunctiveFacet(facet)) {\n      throw new Error(\n        facet +\n          ' is not defined in the facets attribute of the helper configuration'\n      );\n    }\n    if (RefinementList.isRefined(this.facetsExcludes, facet, value))\n      return this;\n\n    return this.setQueryParameters({\n      facetsExcludes: RefinementList.addRefinement(\n        this.facetsExcludes,\n        facet,\n        value\n      ),\n    });\n  },\n  /**\n   * Adds a refinement on a disjunctive facet.\n   * @method\n   * @param {string} facet attribute to apply the faceting on\n   * @param {string} value value of the attribute (will be converted to string)\n   * @return {SearchParameters} new instance\n   */\n  addDisjunctiveFacetRefinement: function addDisjunctiveFacetRefinement(\n    facet,\n    value\n  ) {\n    if (!this.isDisjunctiveFacet(facet)) {\n      throw new Error(\n        facet +\n          ' is not defined in the disjunctiveFacets attribute of the helper configuration'\n      );\n    }\n\n    if (\n      RefinementList.isRefined(this.disjunctiveFacetsRefinements, facet, value)\n    )\n      return this;\n\n    return this.setQueryParameters({\n      disjunctiveFacetsRefinements: RefinementList.addRefinement(\n        this.disjunctiveFacetsRefinements,\n        facet,\n        value\n      ),\n    });\n  },\n  /**\n   * addTagRefinement adds a tag to the list used to filter the results\n   * @param {string} tag tag to be added\n   * @return {SearchParameters} new instance\n   */\n  addTagRefinement: function addTagRefinement(tag) {\n    if (this.isTagRefined(tag)) return this;\n\n    var modification = {\n      tagRefinements: this.tagRefinements.concat(tag),\n    };\n\n    return this.setQueryParameters(modification);\n  },\n  /**\n   * Remove a facet from the facets attribute of the helper configuration, if it\n   * is present.\n   * @method\n   * @param {string} facet facet name to remove\n   * @return {SearchParameters} new instance\n   */\n  removeFacet: function removeFacet(facet) {\n    if (!this.isConjunctiveFacet(facet)) {\n      return this;\n    }\n\n    return this.clearRefinements(facet).setQueryParameters({\n      facets: this.facets.filter(function (f) {\n        return f !== facet;\n      }),\n    });\n  },\n  /**\n   * Remove a disjunctive facet from the disjunctiveFacets attribute of the\n   * helper configuration, if it is present.\n   * @method\n   * @param {string} facet disjunctive facet name to remove\n   * @return {SearchParameters} new instance\n   */\n  removeDisjunctiveFacet: function removeDisjunctiveFacet(facet) {\n    if (!this.isDisjunctiveFacet(facet)) {\n      return this;\n    }\n\n    return this.clearRefinements(facet).setQueryParameters({\n      disjunctiveFacets: this.disjunctiveFacets.filter(function (f) {\n        return f !== facet;\n      }),\n    });\n  },\n  /**\n   * Remove a hierarchical facet from the hierarchicalFacets attribute of the\n   * helper configuration, if it is present.\n   * @method\n   * @param {string} facet hierarchical facet name to remove\n   * @return {SearchParameters} new instance\n   */\n  removeHierarchicalFacet: function removeHierarchicalFacet(facet) {\n    if (!this.isHierarchicalFacet(facet)) {\n      return this;\n    }\n\n    return this.clearRefinements(facet).setQueryParameters({\n      hierarchicalFacets: this.hierarchicalFacets.filter(function (f) {\n        return f.name !== facet;\n      }),\n    });\n  },\n  /**\n   * Remove a refinement set on facet. If a value is provided, it will clear the\n   * refinement for the given value, otherwise it will clear all the refinement\n   * values for the faceted attribute.\n   * @method\n   * @param {string} facet name of the attribute used for faceting\n   * @param {string} [value] value used to filter\n   * @return {SearchParameters} new instance\n   */\n  removeFacetRefinement: function removeFacetRefinement(facet, value) {\n    if (!this.isConjunctiveFacet(facet)) {\n      throw new Error(\n        facet +\n          ' is not defined in the facets attribute of the helper configuration'\n      );\n    }\n    if (!RefinementList.isRefined(this.facetsRefinements, facet, value))\n      return this;\n\n    return this.setQueryParameters({\n      facetsRefinements: RefinementList.removeRefinement(\n        this.facetsRefinements,\n        facet,\n        value\n      ),\n    });\n  },\n  /**\n   * Remove a negative refinement on a facet\n   * @method\n   * @param {string} facet name of the attribute used for faceting\n   * @param {string} value value used to filter\n   * @return {SearchParameters} new instance\n   */\n  removeExcludeRefinement: function removeExcludeRefinement(facet, value) {\n    if (!this.isConjunctiveFacet(facet)) {\n      throw new Error(\n        facet +\n          ' is not defined in the facets attribute of the helper configuration'\n      );\n    }\n    if (!RefinementList.isRefined(this.facetsExcludes, facet, value))\n      return this;\n\n    return this.setQueryParameters({\n      facetsExcludes: RefinementList.removeRefinement(\n        this.facetsExcludes,\n        facet,\n        value\n      ),\n    });\n  },\n  /**\n   * Remove a refinement on a disjunctive facet\n   * @method\n   * @param {string} facet name of the attribute used for faceting\n   * @param {string} value value used to filter\n   * @return {SearchParameters} new instance\n   */\n  removeDisjunctiveFacetRefinement: function removeDisjunctiveFacetRefinement(\n    facet,\n    value\n  ) {\n    if (!this.isDisjunctiveFacet(facet)) {\n      throw new Error(\n        facet +\n          ' is not defined in the disjunctiveFacets attribute of the helper configuration'\n      );\n    }\n    if (\n      !RefinementList.isRefined(this.disjunctiveFacetsRefinements, facet, value)\n    )\n      return this;\n\n    return this.setQueryParameters({\n      disjunctiveFacetsRefinements: RefinementList.removeRefinement(\n        this.disjunctiveFacetsRefinements,\n        facet,\n        value\n      ),\n    });\n  },\n  /**\n   * Remove a tag from the list of tag refinements\n   * @method\n   * @param {string} tag the tag to remove\n   * @return {SearchParameters} new instance\n   */\n  removeTagRefinement: function removeTagRefinement(tag) {\n    if (!this.isTagRefined(tag)) return this;\n\n    var modification = {\n      tagRefinements: this.tagRefinements.filter(function (t) {\n        return t !== tag;\n      }),\n    };\n\n    return this.setQueryParameters(modification);\n  },\n  /**\n   * Generic toggle refinement method to use with facet, disjunctive facets\n   * and hierarchical facets\n   * @param  {string} facet the facet to refine\n   * @param  {string} value the associated value\n   * @return {SearchParameters} new instance\n   * @throws will throw an error if the facet is not declared in the settings of the helper\n   * @deprecated since version 2.19.0, see {@link SearchParameters#toggleFacetRefinement}\n   */\n  toggleRefinement: function toggleRefinement(facet, value) {\n    return this.toggleFacetRefinement(facet, value);\n  },\n  /**\n   * Generic toggle refinement method to use with facet, disjunctive facets\n   * and hierarchical facets\n   * @param  {string} facet the facet to refine\n   * @param  {string} value the associated value\n   * @return {SearchParameters} new instance\n   * @throws will throw an error if the facet is not declared in the settings of the helper\n   */\n  toggleFacetRefinement: function toggleFacetRefinement(facet, value) {\n    if (this.isHierarchicalFacet(facet)) {\n      return this.toggleHierarchicalFacetRefinement(facet, value);\n    } else if (this.isConjunctiveFacet(facet)) {\n      return this.toggleConjunctiveFacetRefinement(facet, value);\n    } else if (this.isDisjunctiveFacet(facet)) {\n      return this.toggleDisjunctiveFacetRefinement(facet, value);\n    }\n\n    throw new Error(\n      'Cannot refine the undeclared facet ' +\n        facet +\n        '; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets'\n    );\n  },\n  /**\n   * Switch the refinement applied over a facet/value\n   * @method\n   * @param {string} facet name of the attribute used for faceting\n   * @param {value} value value used for filtering\n   * @return {SearchParameters} new instance\n   */\n  toggleConjunctiveFacetRefinement: function toggleConjunctiveFacetRefinement(\n    facet,\n    value\n  ) {\n    if (!this.isConjunctiveFacet(facet)) {\n      throw new Error(\n        facet +\n          ' is not defined in the facets attribute of the helper configuration'\n      );\n    }\n\n    return this.setQueryParameters({\n      facetsRefinements: RefinementList.toggleRefinement(\n        this.facetsRefinements,\n        facet,\n        value\n      ),\n    });\n  },\n  /**\n   * Switch the refinement applied over a facet/value\n   * @method\n   * @param {string} facet name of the attribute used for faceting\n   * @param {value} value value used for filtering\n   * @return {SearchParameters} new instance\n   */\n  toggleExcludeFacetRefinement: function toggleExcludeFacetRefinement(\n    facet,\n    value\n  ) {\n    if (!this.isConjunctiveFacet(facet)) {\n      throw new Error(\n        facet +\n          ' is not defined in the facets attribute of the helper configuration'\n      );\n    }\n\n    return this.setQueryParameters({\n      facetsExcludes: RefinementList.toggleRefinement(\n        this.facetsExcludes,\n        facet,\n        value\n      ),\n    });\n  },\n  /**\n   * Switch the refinement applied over a facet/value\n   * @method\n   * @param {string} facet name of the attribute used for faceting\n   * @param {value} value value used for filtering\n   * @return {SearchParameters} new instance\n   */\n  toggleDisjunctiveFacetRefinement: function toggleDisjunctiveFacetRefinement(\n    facet,\n    value\n  ) {\n    if (!this.isDisjunctiveFacet(facet)) {\n      throw new Error(\n        facet +\n          ' is not defined in the disjunctiveFacets attribute of the helper configuration'\n      );\n    }\n\n    return this.setQueryParameters({\n      disjunctiveFacetsRefinements: RefinementList.toggleRefinement(\n        this.disjunctiveFacetsRefinements,\n        facet,\n        value\n      ),\n    });\n  },\n  /**\n   * Switch the refinement applied over a facet/value\n   * @method\n   * @param {string} facet name of the attribute used for faceting\n   * @param {value} value value used for filtering\n   * @return {SearchParameters} new instance\n   */\n  toggleHierarchicalFacetRefinement: function toggleHierarchicalFacetRefinement(\n    facet,\n    value\n  ) {\n    if (!this.isHierarchicalFacet(facet)) {\n      throw new Error(\n        facet +\n          ' is not defined in the hierarchicalFacets attribute of the helper configuration'\n      );\n    }\n\n    var separator = this._getHierarchicalFacetSeparator(\n      this.getHierarchicalFacetByName(facet)\n    );\n\n    var mod = {};\n\n    var upOneOrMultipleLevel =\n      this.hierarchicalFacetsRefinements[facet] !== undefined &&\n      this.hierarchicalFacetsRefinements[facet].length > 0 &&\n      // remove current refinement:\n      // refinement was 'beer > IPA', call is toggleRefine('beer > IPA'), refinement should be `beer`\n      (this.hierarchicalFacetsRefinements[facet][0] === value ||\n        // remove a parent refinement of the current refinement:\n        //  - refinement was 'beer > IPA > Flying dog'\n        //  - call is toggleRefine('beer > IPA')\n        //  - refinement should be `beer`\n        this.hierarchicalFacetsRefinements[facet][0].indexOf(\n          value + separator\n        ) === 0);\n\n    if (upOneOrMultipleLevel) {\n      if (value.indexOf(separator) === -1) {\n        // go back to root level\n        mod[facet] = [];\n      } else {\n        mod[facet] = [value.slice(0, value.lastIndexOf(separator))];\n      }\n    } else {\n      mod[facet] = [value];\n    }\n\n    return this.setQueryParameters({\n      hierarchicalFacetsRefinements: defaultsPure(\n        {},\n        mod,\n        this.hierarchicalFacetsRefinements\n      ),\n    });\n  },\n\n  /**\n   * Adds a refinement on a hierarchical facet.\n   * @param {string} facet the facet name\n   * @param {string} path the hierarchical facet path\n   * @return {SearchParameter} the new state\n   * @throws Error if the facet is not defined or if the facet is refined\n   */\n  addHierarchicalFacetRefinement: function (facet, path) {\n    if (this.isHierarchicalFacetRefined(facet)) {\n      throw new Error(facet + ' is already refined.');\n    }\n    if (!this.isHierarchicalFacet(facet)) {\n      throw new Error(\n        facet +\n          ' is not defined in the hierarchicalFacets attribute of the helper configuration.'\n      );\n    }\n    var mod = {};\n    mod[facet] = [path];\n    return this.setQueryParameters({\n      hierarchicalFacetsRefinements: defaultsPure(\n        {},\n        mod,\n        this.hierarchicalFacetsRefinements\n      ),\n    });\n  },\n\n  /**\n   * Removes the refinement set on a hierarchical facet.\n   * @param {string} facet the facet name\n   * @return {SearchParameter} the new state\n   * @throws Error if the facet is not defined or if the facet is not refined\n   */\n  removeHierarchicalFacetRefinement: function (facet) {\n    if (!this.isHierarchicalFacetRefined(facet)) {\n      return this;\n    }\n    var mod = {};\n    mod[facet] = [];\n    return this.setQueryParameters({\n      hierarchicalFacetsRefinements: defaultsPure(\n        {},\n        mod,\n        this.hierarchicalFacetsRefinements\n      ),\n    });\n  },\n  /**\n   * Switch the tag refinement\n   * @method\n   * @param {string} tag the tag to remove or add\n   * @return {SearchParameters} new instance\n   */\n  toggleTagRefinement: function toggleTagRefinement(tag) {\n    if (this.isTagRefined(tag)) {\n      return this.removeTagRefinement(tag);\n    }\n\n    return this.addTagRefinement(tag);\n  },\n  /**\n   * Test if the facet name is from one of the disjunctive facets\n   * @method\n   * @param {string} facet facet name to test\n   * @return {boolean} true if facet is a disjunctive facet\n   */\n  isDisjunctiveFacet: function (facet) {\n    return this.disjunctiveFacets.indexOf(facet) > -1;\n  },\n  /**\n   * Test if the facet name is from one of the hierarchical facets\n   * @method\n   * @param {string} facetName facet name to test\n   * @return {boolean} true if facetName is a hierarchical facet\n   */\n  isHierarchicalFacet: function (facetName) {\n    return this.getHierarchicalFacetByName(facetName) !== undefined;\n  },\n  /**\n   * Test if the facet name is from one of the conjunctive/normal facets\n   * @method\n   * @param {string} facet facet name to test\n   * @return {boolean} true if facet is a conjunctive facet\n   */\n  isConjunctiveFacet: function (facet) {\n    return this.facets.indexOf(facet) > -1;\n  },\n  /**\n   * Returns true if the facet is refined, either for a specific value or in\n   * general.\n   * @method\n   * @param {string} facet name of the attribute for used for faceting\n   * @param {string} value, optional value. If passed will test that this value\n   * is filtering the given facet.\n   * @return {boolean} returns true if refined\n   */\n  isFacetRefined: function isFacetRefined(facet, value) {\n    if (!this.isConjunctiveFacet(facet)) {\n      return false;\n    }\n    return RefinementList.isRefined(this.facetsRefinements, facet, value);\n  },\n  /**\n   * Returns true if the facet contains exclusions or if a specific value is\n   * excluded.\n   *\n   * @method\n   * @param {string} facet name of the attribute for used for faceting\n   * @param {string} [value] optional value. If passed will test that this value\n   * is filtering the given facet.\n   * @return {boolean} returns true if refined\n   */\n  isExcludeRefined: function isExcludeRefined(facet, value) {\n    if (!this.isConjunctiveFacet(facet)) {\n      return false;\n    }\n    return RefinementList.isRefined(this.facetsExcludes, facet, value);\n  },\n  /**\n   * Returns true if the facet contains a refinement, or if a value passed is a\n   * refinement for the facet.\n   * @method\n   * @param {string} facet name of the attribute for used for faceting\n   * @param {string} value optional, will test if the value is used for refinement\n   * if there is one, otherwise will test if the facet contains any refinement\n   * @return {boolean} true if the facet is refined\n   */\n  isDisjunctiveFacetRefined: function isDisjunctiveFacetRefined(facet, value) {\n    if (!this.isDisjunctiveFacet(facet)) {\n      return false;\n    }\n    return RefinementList.isRefined(\n      this.disjunctiveFacetsRefinements,\n      facet,\n      value\n    );\n  },\n  /**\n   * Returns true if the facet contains a refinement, or if a value passed is a\n   * refinement for the facet.\n   * @method\n   * @param {string} facet name of the attribute for used for faceting\n   * @param {string} value optional, will test if the value is used for refinement\n   * if there is one, otherwise will test if the facet contains any refinement\n   * @return {boolean} true if the facet is refined\n   */\n  isHierarchicalFacetRefined: function isHierarchicalFacetRefined(\n    facet,\n    value\n  ) {\n    if (!this.isHierarchicalFacet(facet)) {\n      return false;\n    }\n\n    var refinements = this.getHierarchicalRefinement(facet);\n\n    if (!value) {\n      return refinements.length > 0;\n    }\n\n    return refinements.indexOf(value) !== -1;\n  },\n  /**\n   * Test if the triple (attribute, operator, value) is already refined.\n   * If only the attribute and the operator are provided, it tests if the\n   * contains any refinement value.\n   * @method\n   * @param {string} attribute attribute for which the refinement is applied\n   * @param {string} [operator] operator of the refinement\n   * @param {string} [value] value of the refinement\n   * @return {boolean} true if it is refined\n   */\n  isNumericRefined: function isNumericRefined(attribute, operator, value) {\n    if (value === undefined && operator === undefined) {\n      return Boolean(this.numericRefinements[attribute]);\n    }\n\n    var isOperatorDefined =\n      this.numericRefinements[attribute] &&\n      this.numericRefinements[attribute][operator] !== undefined;\n\n    if (value === undefined || !isOperatorDefined) {\n      return isOperatorDefined;\n    }\n\n    var parsedValue = valToNumber(value);\n    var isAttributeValueDefined =\n      findArray(this.numericRefinements[attribute][operator], parsedValue) !==\n      undefined;\n\n    return isOperatorDefined && isAttributeValueDefined;\n  },\n  /**\n   * Returns true if the tag refined, false otherwise\n   * @method\n   * @param {string} tag the tag to check\n   * @return {boolean} true if tag is refined\n   */\n  isTagRefined: function isTagRefined(tag) {\n    return this.tagRefinements.indexOf(tag) !== -1;\n  },\n  /**\n   * Returns the list of all disjunctive facets refined\n   * @method\n   * @param {string} facet name of the attribute used for faceting\n   * @param {value} value value used for filtering\n   * @return {string[]} returns the list of refinements\n   */\n  getRefinedDisjunctiveFacets: function getRefinedDisjunctiveFacets() {\n    // eslint-disable-next-line consistent-this\n    var self = this;\n\n    // attributes used for numeric filter can also be disjunctive\n    var disjunctiveNumericRefinedFacets = intersection(\n      Object.keys(this.numericRefinements).filter(function (facet) {\n        return Object.keys(self.numericRefinements[facet]).length > 0;\n      }),\n      this.disjunctiveFacets\n    );\n\n    return Object.keys(this.disjunctiveFacetsRefinements)\n      .filter(function (facet) {\n        return self.disjunctiveFacetsRefinements[facet].length > 0;\n      })\n      .concat(disjunctiveNumericRefinedFacets)\n      .concat(this.getRefinedHierarchicalFacets())\n      .sort();\n  },\n  /**\n   * Returns the list of all disjunctive facets refined\n   * @method\n   * @param {string} facet name of the attribute used for faceting\n   * @param {value} value value used for filtering\n   * @return {string[]} returns the list of refinements\n   */\n  getRefinedHierarchicalFacets: function getRefinedHierarchicalFacets() {\n    // eslint-disable-next-line consistent-this\n    var self = this;\n    return intersection(\n      // enforce the order between the two arrays,\n      // so that refinement name index === hierarchical facet index\n      this.hierarchicalFacets.map(function (facet) {\n        return facet.name;\n      }),\n      Object.keys(this.hierarchicalFacetsRefinements).filter(function (facet) {\n        return self.hierarchicalFacetsRefinements[facet].length > 0;\n      })\n    ).sort();\n  },\n  /**\n   * Returned the list of all disjunctive facets not refined\n   * @method\n   * @return {string[]} returns the list of facets that are not refined\n   */\n  getUnrefinedDisjunctiveFacets: function () {\n    var refinedFacets = this.getRefinedDisjunctiveFacets();\n\n    return this.disjunctiveFacets.filter(function (f) {\n      return refinedFacets.indexOf(f) === -1;\n    });\n  },\n\n  managedParameters: [\n    'index',\n\n    'facets',\n    'disjunctiveFacets',\n    'facetsRefinements',\n    'hierarchicalFacets',\n    'facetsExcludes',\n\n    'disjunctiveFacetsRefinements',\n    'numericRefinements',\n    'tagRefinements',\n    'hierarchicalFacetsRefinements',\n  ],\n\n  getQueryParams: function getQueryParams() {\n    var managedParameters = this.managedParameters;\n\n    var queryParams = {};\n\n    // eslint-disable-next-line consistent-this\n    var self = this;\n    Object.keys(this).forEach(function (paramName) {\n      var paramValue = self[paramName];\n      if (\n        managedParameters.indexOf(paramName) === -1 &&\n        paramValue !== undefined\n      ) {\n        queryParams[paramName] = paramValue;\n      }\n    });\n\n    return queryParams;\n  },\n  /**\n   * Let the user set a specific value for a given parameter. Will return the\n   * same instance if the parameter is invalid or if the value is the same as the\n   * previous one.\n   * @method\n   * @param {string} parameter the parameter name\n   * @param {any} value the value to be set, must be compliant with the definition\n   * of the attribute on the object\n   * @return {SearchParameters} the updated state\n   */\n  setQueryParameter: function setParameter(parameter, value) {\n    if (this[parameter] === value) return this;\n\n    var modification = {};\n\n    modification[parameter] = value;\n\n    return this.setQueryParameters(modification);\n  },\n  /**\n   * Let the user set any of the parameters with a plain object.\n   * @method\n   * @param {object} params all the keys and the values to be updated\n   * @return {SearchParameters} a new updated instance\n   */\n  setQueryParameters: function setQueryParameters(params) {\n    if (!params) return this;\n\n    var error = SearchParameters.validate(this, params);\n\n    if (error) {\n      throw error;\n    }\n\n    // eslint-disable-next-line consistent-this\n    var self = this;\n    var nextWithNumbers = SearchParameters._parseNumbers(params);\n    var previousPlainObject = Object.keys(this).reduce(function (acc, key) {\n      acc[key] = self[key];\n      return acc;\n    }, {});\n\n    var nextPlainObject = Object.keys(nextWithNumbers).reduce(function (\n      previous,\n      key\n    ) {\n      var isPreviousValueDefined = previous[key] !== undefined;\n      var isNextValueDefined = nextWithNumbers[key] !== undefined;\n\n      if (isPreviousValueDefined && !isNextValueDefined) {\n        return omit(previous, [key]);\n      }\n\n      if (isNextValueDefined) {\n        previous[key] = nextWithNumbers[key];\n      }\n\n      return previous;\n    },\n    previousPlainObject);\n\n    return new this.constructor(nextPlainObject);\n  },\n\n  /**\n   * Returns a new instance with the page reset. Two scenarios possible:\n   * the page is omitted -> return the given instance\n   * the page is set -> return a new instance with a page of 0\n   * @return {SearchParameters} a new updated instance\n   */\n  resetPage: function () {\n    if (this.page === undefined) {\n      return this;\n    }\n\n    return this.setPage(0);\n  },\n\n  /**\n   * Helper function to get the hierarchicalFacet separator or the default one (`>`)\n   * @param  {object} hierarchicalFacet the hierarchicalFacet object\n   * @return {string} returns the hierarchicalFacet.separator or `>` as default\n   */\n  _getHierarchicalFacetSortBy: function (hierarchicalFacet) {\n    return hierarchicalFacet.sortBy || ['isRefined:desc', 'name:asc'];\n  },\n\n  /**\n   * Helper function to get the hierarchicalFacet separator or the default one (`>`)\n   * @private\n   * @param  {object} hierarchicalFacet the hierarchicalFacet object\n   * @return {string} returns the hierarchicalFacet.separator or `>` as default\n   */\n  _getHierarchicalFacetSeparator: function (hierarchicalFacet) {\n    return hierarchicalFacet.separator || ' > ';\n  },\n\n  /**\n   * Helper function to get the hierarchicalFacet prefix path or null\n   * @private\n   * @param  {object} hierarchicalFacet the hierarchicalFacet object\n   * @return {string} returns the hierarchicalFacet.rootPath or null as default\n   */\n  _getHierarchicalRootPath: function (hierarchicalFacet) {\n    return hierarchicalFacet.rootPath || null;\n  },\n\n  /**\n   * Helper function to check if we show the parent level of the hierarchicalFacet\n   * @private\n   * @param  {object} hierarchicalFacet the hierarchicalFacet object\n   * @return {string} returns the hierarchicalFacet.showParentLevel or true as default\n   */\n  _getHierarchicalShowParentLevel: function (hierarchicalFacet) {\n    if (typeof hierarchicalFacet.showParentLevel === 'boolean') {\n      return hierarchicalFacet.showParentLevel;\n    }\n    return true;\n  },\n\n  /**\n   * Helper function to get the hierarchicalFacet by it's name\n   * @param  {string} hierarchicalFacetName the hierarchicalFacet name\n   * @return {object} a hierarchicalFacet\n   */\n  getHierarchicalFacetByName: function (hierarchicalFacetName) {\n    return find(this.hierarchicalFacets, function (f) {\n      return f.name === hierarchicalFacetName;\n    });\n  },\n\n  /**\n   * Get the current breadcrumb for a hierarchical facet, as an array\n   * @param  {string} facetName Hierarchical facet name\n   * @return {array.<string>} the path as an array of string\n   */\n  getHierarchicalFacetBreadcrumb: function (facetName) {\n    if (!this.isHierarchicalFacet(facetName)) {\n      return [];\n    }\n\n    var refinement = this.getHierarchicalRefinement(facetName)[0];\n    if (!refinement) return [];\n\n    var separator = this._getHierarchicalFacetSeparator(\n      this.getHierarchicalFacetByName(facetName)\n    );\n    var path = refinement.split(separator);\n    return path.map(function (part) {\n      return part.trim();\n    });\n  },\n\n  toString: function () {\n    return JSON.stringify(this, null, 2);\n  },\n};\n\n/**\n * Callback used for clearRefinement method\n * @callback SearchParameters.clearCallback\n * @param {OperatorList|FacetList} value the value of the filter\n * @param {string} key the current attribute name\n * @param {string} type `numeric`, `disjunctiveFacet`, `conjunctiveFacet`, `hierarchicalFacet` or `exclude`\n * depending on the type of facet\n * @return {boolean} `true` if the element should be removed. `false` otherwise.\n */\nmodule.exports = SearchParameters;\n","'use strict';\n\nmodule.exports = generateTrees;\n\nvar fv = require('../functions/escapeFacetValue');\nvar find = require('../functions/find');\nvar prepareHierarchicalFacetSortBy = require('../functions/formatSort');\nvar orderBy = require('../functions/orderBy');\nvar escapeFacetValue = fv.escapeFacetValue;\nvar unescapeFacetValue = fv.unescapeFacetValue;\n\nfunction generateTrees(state) {\n  return function generate(hierarchicalFacetResult, hierarchicalFacetIndex) {\n    var hierarchicalFacet = state.hierarchicalFacets[hierarchicalFacetIndex];\n    var hierarchicalFacetRefinement =\n      (state.hierarchicalFacetsRefinements[hierarchicalFacet.name] &&\n        state.hierarchicalFacetsRefinements[hierarchicalFacet.name][0]) ||\n      '';\n    var hierarchicalSeparator =\n      state._getHierarchicalFacetSeparator(hierarchicalFacet);\n    var hierarchicalRootPath =\n      state._getHierarchicalRootPath(hierarchicalFacet);\n    var hierarchicalShowParentLevel =\n      state._getHierarchicalShowParentLevel(hierarchicalFacet);\n    var sortBy = prepareHierarchicalFacetSortBy(\n      state._getHierarchicalFacetSortBy(hierarchicalFacet)\n    );\n\n    var rootExhaustive = hierarchicalFacetResult.every(function (facetResult) {\n      return facetResult.exhaustive;\n    });\n\n    var generateTreeFn = generateHierarchicalTree(\n      sortBy,\n      hierarchicalSeparator,\n      hierarchicalRootPath,\n      hierarchicalShowParentLevel,\n      hierarchicalFacetRefinement\n    );\n\n    var results = hierarchicalFacetResult;\n\n    if (hierarchicalRootPath) {\n      results = hierarchicalFacetResult.slice(\n        hierarchicalRootPath.split(hierarchicalSeparator).length\n      );\n    }\n\n    return results.reduce(generateTreeFn, {\n      name: state.hierarchicalFacets[hierarchicalFacetIndex].name,\n      count: null, // root level, no count\n      isRefined: true, // root level, always refined\n      path: null, // root level, no path\n      escapedValue: null,\n      exhaustive: rootExhaustive,\n      data: null,\n    });\n  };\n}\n\nfunction generateHierarchicalTree(\n  sortBy,\n  hierarchicalSeparator,\n  hierarchicalRootPath,\n  hierarchicalShowParentLevel,\n  currentRefinement\n) {\n  return function generateTree(\n    hierarchicalTree,\n    hierarchicalFacetResult,\n    currentHierarchicalLevel\n  ) {\n    var parent = hierarchicalTree;\n\n    if (currentHierarchicalLevel > 0) {\n      var level = 0;\n\n      parent = hierarchicalTree;\n\n      while (level < currentHierarchicalLevel) {\n        /**\n         * @type {object[]]} hierarchical data\n         */\n        var data = parent && Array.isArray(parent.data) ? parent.data : [];\n        parent = find(data, function (subtree) {\n          return subtree.isRefined;\n        });\n        level++;\n      }\n    }\n\n    // we found a refined parent, let's add current level data under it\n    if (parent) {\n      // filter values in case an object has multiple categories:\n      //   {\n      //     categories: {\n      //       level0: ['beers', 'bières'],\n      //       level1: ['beers > IPA', 'bières > Belges']\n      //     }\n      //   }\n      //\n      // If parent refinement is `beers`, then we do not want to have `bières > Belges`\n      // showing up\n\n      var picked = Object.keys(hierarchicalFacetResult.data)\n        .map(function (facetValue) {\n          return [facetValue, hierarchicalFacetResult.data[facetValue]];\n        })\n        .filter(function (tuple) {\n          var facetValue = tuple[0];\n          return onlyMatchingTree(\n            facetValue,\n            parent.path || hierarchicalRootPath,\n            currentRefinement,\n            hierarchicalSeparator,\n            hierarchicalRootPath,\n            hierarchicalShowParentLevel\n          );\n        });\n\n      parent.data = orderBy(\n        picked.map(function (tuple) {\n          var facetValue = tuple[0];\n          var facetCount = tuple[1];\n\n          return format(\n            facetCount,\n            facetValue,\n            hierarchicalSeparator,\n            unescapeFacetValue(currentRefinement),\n            hierarchicalFacetResult.exhaustive\n          );\n        }),\n        sortBy[0],\n        sortBy[1]\n      );\n    }\n\n    return hierarchicalTree;\n  };\n}\n\n// eslint-disable-next-line max-params\nfunction onlyMatchingTree(\n  facetValue,\n  parentPath,\n  currentRefinement,\n  hierarchicalSeparator,\n  hierarchicalRootPath,\n  hierarchicalShowParentLevel\n) {\n  // we want the facetValue is a child of hierarchicalRootPath\n  if (\n    hierarchicalRootPath &&\n    (facetValue.indexOf(hierarchicalRootPath) !== 0 ||\n      hierarchicalRootPath === facetValue)\n  ) {\n    return false;\n  }\n\n  // we always want root levels (only when there is no prefix path)\n  return (\n    (!hierarchicalRootPath &&\n      facetValue.indexOf(hierarchicalSeparator) === -1) ||\n    // if there is a rootPath, being root level mean 1 level under rootPath\n    (hierarchicalRootPath &&\n      facetValue.split(hierarchicalSeparator).length -\n        hierarchicalRootPath.split(hierarchicalSeparator).length ===\n        1) ||\n    // if current refinement is a root level and current facetValue is a root level,\n    // keep the facetValue\n    (facetValue.indexOf(hierarchicalSeparator) === -1 &&\n      currentRefinement.indexOf(hierarchicalSeparator) === -1) ||\n    // currentRefinement is a child of the facet value\n    currentRefinement.indexOf(facetValue) === 0 ||\n    // facetValue is a child of the current parent, add it\n    (facetValue.indexOf(parentPath + hierarchicalSeparator) === 0 &&\n      (hierarchicalShowParentLevel ||\n        facetValue.indexOf(currentRefinement) === 0))\n  );\n}\n\nfunction format(\n  facetCount,\n  facetValue,\n  hierarchicalSeparator,\n  currentRefinement,\n  exhaustive\n) {\n  var parts = facetValue.split(hierarchicalSeparator);\n  return {\n    name: parts[parts.length - 1].trim(),\n    path: facetValue,\n    escapedValue: escapeFacetValue(facetValue),\n    count: facetCount,\n    isRefined:\n      currentRefinement === facetValue ||\n      currentRefinement.indexOf(facetValue + hierarchicalSeparator) === 0,\n    exhaustive: exhaustive,\n    data: null,\n  };\n}\n","'use strict';\n\nvar compact = require('../functions/compact');\nvar defaultsPure = require('../functions/defaultsPure');\nvar fv = require('../functions/escapeFacetValue');\nvar find = require('../functions/find');\nvar findIndex = require('../functions/findIndex');\nvar formatSort = require('../functions/formatSort');\nvar merge = require('../functions/merge');\nvar orderBy = require('../functions/orderBy');\nvar escapeFacetValue = fv.escapeFacetValue;\nvar unescapeFacetValue = fv.unescapeFacetValue;\n\nvar generateHierarchicalTree = require('./generate-hierarchical-tree');\n\n/**\n * @typedef SearchResults.Facet\n * @type {object}\n * @property {string} name name of the attribute in the record\n * @property {object} data the faceting data: value, number of entries\n * @property {object} stats undefined unless facet_stats is retrieved from algolia\n */\n\n/**\n * @typedef SearchResults.HierarchicalFacet\n * @type {object}\n * @property {string} name name of the current value given the hierarchical level, trimmed.\n * If root node, you get the facet name\n * @property {number} count number of objects matching this hierarchical value\n * @property {string} path the current hierarchical value full path\n * @property {boolean} isRefined `true` if the current value was refined, `false` otherwise\n * @property {HierarchicalFacet[]} data sub values for the current level\n */\n\n/**\n * @typedef SearchResults.FacetValue\n * @type {object}\n * @property {string} name the facet value itself\n * @property {number} count times this facet appears in the results\n * @property {boolean} isRefined is the facet currently selected\n * @property {boolean} isExcluded is the facet currently excluded (only for conjunctive facets)\n */\n\n/**\n * @typedef Refinement\n * @type {object}\n * @property {string} type the type of filter used:\n * `numeric`, `facet`, `exclude`, `disjunctive`, `hierarchical`\n * @property {string} attributeName name of the attribute used for filtering\n * @property {string} name the value of the filter\n * @property {number} numericValue the value as a number. Only for numeric filters.\n * @property {string} operator the operator used. Only for numeric filters.\n * @property {number} count the number of computed hits for this filter. Only on facets.\n * @property {boolean} exhaustive if the count is exhaustive\n */\n\n/**\n * Turn an array of attributes in an object of attributes with their position in the array as value\n * @param {string[]} attributes the list of attributes in the record\n * @return {object} the list of attributes indexed by attribute name\n */\nfunction getIndices(attributes) {\n  var indices = {};\n\n  attributes.forEach(function (val, idx) {\n    indices[val] = idx;\n  });\n\n  return indices;\n}\n\nfunction assignFacetStats(dest, facetStats, key) {\n  if (facetStats && facetStats[key]) {\n    dest.stats = facetStats[key];\n  }\n}\n\n/**\n * @typedef {Object} HierarchicalFacet\n * @property {string} name\n * @property {string[]} attributes\n */\n\n/**\n * @param {HierarchicalFacet[]} hierarchicalFacets All hierarchical facets\n * @param {string} hierarchicalAttributeName The name of the hierarchical attribute\n * @return {HierarchicalFacet} The hierarchical facet matching the attribute name\n */\nfunction findMatchingHierarchicalFacetFromAttributeName(\n  hierarchicalFacets,\n  hierarchicalAttributeName\n) {\n  return find(\n    hierarchicalFacets,\n    function facetKeyMatchesAttribute(hierarchicalFacet) {\n      var facetNames = hierarchicalFacet.attributes || [];\n      return facetNames.indexOf(hierarchicalAttributeName) > -1;\n    }\n  );\n}\n\n/**\n * Constructor for SearchResults\n * @class\n * @classdesc SearchResults contains the results of a query to Algolia using the\n * {@link AlgoliaSearchHelper}.\n * @param {SearchParameters} state state that led to the response\n * @param {array.<object>} results the results from algolia client\n * @param {object} options options to control results content\n * @example <caption>SearchResults of the first query in\n * <a href=\"http://demos.algolia.com/instant-search-demo\">the instant search demo</a></caption>\n{\n   \"hitsPerPage\": 10,\n   \"processingTimeMS\": 2,\n   \"facets\": [\n      {\n         \"name\": \"type\",\n         \"data\": {\n            \"HardGood\": 6627,\n            \"BlackTie\": 550,\n            \"Music\": 665,\n            \"Software\": 131,\n            \"Game\": 456,\n            \"Movie\": 1571\n         },\n         \"exhaustive\": false\n      },\n      {\n         \"exhaustive\": false,\n         \"data\": {\n            \"Free shipping\": 5507\n         },\n         \"name\": \"shipping\"\n      }\n  ],\n   \"hits\": [\n      {\n         \"thumbnailImage\": \"http://img.bbystatic.com/BestBuy_US/images/products/1688/1688832_54x108_s.gif\",\n         \"_highlightResult\": {\n            \"shortDescription\": {\n               \"matchLevel\": \"none\",\n               \"value\": \"Safeguard your PC, Mac, Android and iOS devices with comprehensive Internet protection\",\n               \"matchedWords\": []\n            },\n            \"category\": {\n               \"matchLevel\": \"none\",\n               \"value\": \"Computer Security Software\",\n               \"matchedWords\": []\n            },\n            \"manufacturer\": {\n               \"matchedWords\": [],\n               \"value\": \"Webroot\",\n               \"matchLevel\": \"none\"\n            },\n            \"name\": {\n               \"value\": \"Webroot SecureAnywhere Internet Security (3-Device) (1-Year Subscription) - Mac/Windows\",\n               \"matchedWords\": [],\n               \"matchLevel\": \"none\"\n            }\n         },\n         \"image\": \"http://img.bbystatic.com/BestBuy_US/images/products/1688/1688832_105x210_sc.jpg\",\n         \"shipping\": \"Free shipping\",\n         \"bestSellingRank\": 4,\n         \"shortDescription\": \"Safeguard your PC, Mac, Android and iOS devices with comprehensive Internet protection\",\n         \"url\": \"http://www.bestbuy.com/site/webroot-secureanywhere-internet-security-3-devi…d=1219060687969&skuId=1688832&cmp=RMX&ky=2d3GfEmNIzjA0vkzveHdZEBgpPCyMnLTJ\",\n         \"name\": \"Webroot SecureAnywhere Internet Security (3-Device) (1-Year Subscription) - Mac/Windows\",\n         \"category\": \"Computer Security Software\",\n         \"salePrice_range\": \"1 - 50\",\n         \"objectID\": \"1688832\",\n         \"type\": \"Software\",\n         \"customerReviewCount\": 5980,\n         \"salePrice\": 49.99,\n         \"manufacturer\": \"Webroot\"\n      },\n      ....\n  ],\n   \"nbHits\": 10000,\n   \"disjunctiveFacets\": [\n      {\n         \"exhaustive\": false,\n         \"data\": {\n            \"5\": 183,\n            \"12\": 112,\n            \"7\": 149,\n            ...\n         },\n         \"name\": \"customerReviewCount\",\n         \"stats\": {\n            \"max\": 7461,\n            \"avg\": 157.939,\n            \"min\": 1\n         }\n      },\n      {\n         \"data\": {\n            \"Printer Ink\": 142,\n            \"Wireless Speakers\": 60,\n            \"Point & Shoot Cameras\": 48,\n            ...\n         },\n         \"name\": \"category\",\n         \"exhaustive\": false\n      },\n      {\n         \"exhaustive\": false,\n         \"data\": {\n            \"> 5000\": 2,\n            \"1 - 50\": 6524,\n            \"501 - 2000\": 566,\n            \"201 - 500\": 1501,\n            \"101 - 200\": 1360,\n            \"2001 - 5000\": 47\n         },\n         \"name\": \"salePrice_range\"\n      },\n      {\n         \"data\": {\n            \"Dynex™\": 202,\n            \"Insignia™\": 230,\n            \"PNY\": 72,\n            ...\n         },\n         \"name\": \"manufacturer\",\n         \"exhaustive\": false\n      }\n  ],\n   \"query\": \"\",\n   \"nbPages\": 100,\n   \"page\": 0,\n   \"index\": \"bestbuy\"\n}\n **/\nfunction SearchResults(state, results, options) {\n  var mainSubResponse = results[0] || {};\n\n  this._rawResults = results;\n\n  // eslint-disable-next-line consistent-this\n  var self = this;\n\n  // https://www.algolia.com/doc/api-reference/api-methods/search/#response\n  Object.keys(mainSubResponse).forEach(function (key) {\n    self[key] = mainSubResponse[key];\n  });\n\n  // Make every key of the result options reachable from the instance\n  var opts = merge(\n    {\n      persistHierarchicalRootCount: false,\n    },\n    options\n  );\n  Object.keys(opts).forEach(function (key) {\n    self[key] = opts[key];\n  });\n\n  /**\n   * query used to generate the results\n   * @name query\n   * @member {string}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * The query as parsed by the engine given all the rules.\n   * @name parsedQuery\n   * @member {string}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * all the records that match the search parameters. Each record is\n   * augmented with a new attribute `_highlightResult`\n   * which is an object keyed by attribute and with the following properties:\n   * - `value` : the value of the facet highlighted (html)\n   * - `matchLevel`: `full`, `partial` or `none`, depending on how the query terms match\n   * @name hits\n   * @member {object[]}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * index where the results come from\n   * @name index\n   * @member {string}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * number of hits per page requested\n   * @name hitsPerPage\n   * @member {number}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * total number of hits of this query on the index\n   * @name nbHits\n   * @member {number}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * total number of pages with respect to the number of hits per page and the total number of hits\n   * @name nbPages\n   * @member {number}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * current page\n   * @name page\n   * @member {number}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * The position if the position was guessed by IP.\n   * @name aroundLatLng\n   * @member {string}\n   * @memberof SearchResults\n   * @instance\n   * @example \"48.8637,2.3615\",\n   */\n  /**\n   * The radius computed by Algolia.\n   * @name automaticRadius\n   * @member {string}\n   * @memberof SearchResults\n   * @instance\n   * @example \"126792922\",\n   */\n  /**\n   * String identifying the server used to serve this request.\n   *\n   * getRankingInfo needs to be set to `true` for this to be returned\n   *\n   * @name serverUsed\n   * @member {string}\n   * @memberof SearchResults\n   * @instance\n   * @example \"c7-use-2.algolia.net\",\n   */\n  /**\n   * Boolean that indicates if the computation of the counts did time out.\n   * @deprecated\n   * @name timeoutCounts\n   * @member {boolean}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * Boolean that indicates if the computation of the hits did time out.\n   * @deprecated\n   * @name timeoutHits\n   * @member {boolean}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * True if the counts of the facets is exhaustive\n   * @name exhaustiveFacetsCount\n   * @member {boolean}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * True if the number of hits is exhaustive\n   * @name exhaustiveNbHits\n   * @member {boolean}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * Contains the userData if they are set by a [query rule](https://www.algolia.com/doc/guides/query-rules/query-rules-overview/).\n   * @name userData\n   * @member {object[]}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * queryID is the unique identifier of the query used to generate the current search results.\n   * This value is only available if the `clickAnalytics` search parameter is set to `true`.\n   * @name queryID\n   * @member {string}\n   * @memberof SearchResults\n   * @instance\n   */\n\n  /**\n   * sum of the processing time of all the queries\n   * @name processingTimeMS\n   * @member {number}\n   * @memberof SearchResults\n   * @instance\n   */\n  this.processingTimeMS = results.reduce(function (sum, result) {\n    return result.processingTimeMS === undefined\n      ? sum\n      : sum + result.processingTimeMS;\n  }, 0);\n\n  /**\n   * disjunctive facets results\n   * @member {SearchResults.Facet[]}\n   */\n  this.disjunctiveFacets = [];\n  /**\n   * disjunctive facets results\n   * @member {SearchResults.HierarchicalFacet[]}\n   */\n  this.hierarchicalFacets = state.hierarchicalFacets.map(\n    function initFutureTree() {\n      return [];\n    }\n  );\n  /**\n   * other facets results\n   * @member {SearchResults.Facet[]}\n   */\n  this.facets = [];\n\n  var disjunctiveFacets = state.getRefinedDisjunctiveFacets();\n\n  var facetsIndices = getIndices(state.facets);\n  var disjunctiveFacetsIndices = getIndices(state.disjunctiveFacets);\n  var nextDisjunctiveResult = 1;\n\n  // Since we send request only for disjunctive facets that have been refined,\n  // we get the facets information from the first, general, response.\n\n  var mainFacets = mainSubResponse.facets || {};\n\n  Object.keys(mainFacets).forEach(function (facetKey) {\n    var facetValueObject = mainFacets[facetKey];\n\n    var hierarchicalFacet = findMatchingHierarchicalFacetFromAttributeName(\n      state.hierarchicalFacets,\n      facetKey\n    );\n\n    if (hierarchicalFacet) {\n      // Place the hierarchicalFacet data at the correct index depending on\n      // the attributes order that was defined at the helper initialization\n      var facetIndex = hierarchicalFacet.attributes.indexOf(facetKey);\n      var idxAttributeName = findIndex(state.hierarchicalFacets, function (f) {\n        return f.name === hierarchicalFacet.name;\n      });\n      self.hierarchicalFacets[idxAttributeName][facetIndex] = {\n        attribute: facetKey,\n        data: facetValueObject,\n        exhaustive: mainSubResponse.exhaustiveFacetsCount,\n      };\n    } else {\n      var isFacetDisjunctive = state.disjunctiveFacets.indexOf(facetKey) !== -1;\n      var isFacetConjunctive = state.facets.indexOf(facetKey) !== -1;\n      var position;\n\n      if (isFacetDisjunctive) {\n        position = disjunctiveFacetsIndices[facetKey];\n        self.disjunctiveFacets[position] = {\n          name: facetKey,\n          data: facetValueObject,\n          exhaustive: mainSubResponse.exhaustiveFacetsCount,\n        };\n        assignFacetStats(\n          self.disjunctiveFacets[position],\n          mainSubResponse.facets_stats,\n          facetKey\n        );\n      }\n      if (isFacetConjunctive) {\n        position = facetsIndices[facetKey];\n        self.facets[position] = {\n          name: facetKey,\n          data: facetValueObject,\n          exhaustive: mainSubResponse.exhaustiveFacetsCount,\n        };\n        assignFacetStats(\n          self.facets[position],\n          mainSubResponse.facets_stats,\n          facetKey\n        );\n      }\n    }\n  });\n\n  // Make sure we do not keep holes within the hierarchical facets\n  this.hierarchicalFacets = compact(this.hierarchicalFacets);\n\n  // aggregate the refined disjunctive facets\n  disjunctiveFacets.forEach(function (disjunctiveFacet) {\n    var result = results[nextDisjunctiveResult];\n    var facets = result && result.facets ? result.facets : {};\n    var hierarchicalFacet = state.getHierarchicalFacetByName(disjunctiveFacet);\n\n    // There should be only item in facets.\n    Object.keys(facets).forEach(function (dfacet) {\n      var facetResults = facets[dfacet];\n\n      var position;\n\n      if (hierarchicalFacet) {\n        position = findIndex(state.hierarchicalFacets, function (f) {\n          return f.name === hierarchicalFacet.name;\n        });\n        var attributeIndex = findIndex(\n          self.hierarchicalFacets[position],\n          function (f) {\n            return f.attribute === dfacet;\n          }\n        );\n\n        // previous refinements and no results so not able to find it\n        if (attributeIndex === -1) {\n          return;\n        }\n\n        self.hierarchicalFacets[position][attributeIndex].data = merge(\n          {},\n          self.hierarchicalFacets[position][attributeIndex].data,\n          facetResults\n        );\n      } else {\n        position = disjunctiveFacetsIndices[dfacet];\n\n        var dataFromMainRequest =\n          (mainSubResponse.facets && mainSubResponse.facets[dfacet]) || {};\n\n        self.disjunctiveFacets[position] = {\n          name: dfacet,\n          data: defaultsPure({}, facetResults, dataFromMainRequest),\n          exhaustive: result.exhaustiveFacetsCount,\n        };\n        assignFacetStats(\n          self.disjunctiveFacets[position],\n          result.facets_stats,\n          dfacet\n        );\n\n        if (state.disjunctiveFacetsRefinements[dfacet]) {\n          state.disjunctiveFacetsRefinements[dfacet].forEach(function (\n            refinementValue\n          ) {\n            // add the disjunctive refinements if it is no more retrieved\n            if (\n              !self.disjunctiveFacets[position].data[refinementValue] &&\n              state.disjunctiveFacetsRefinements[dfacet].indexOf(\n                unescapeFacetValue(refinementValue)\n              ) > -1\n            ) {\n              self.disjunctiveFacets[position].data[refinementValue] = 0;\n            }\n          });\n        }\n      }\n    });\n    nextDisjunctiveResult++;\n  });\n\n  // if we have some parent level values for hierarchical facets, merge them\n  state.getRefinedHierarchicalFacets().forEach(function (refinedFacet) {\n    var hierarchicalFacet = state.getHierarchicalFacetByName(refinedFacet);\n    var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n\n    var currentRefinement = state.getHierarchicalRefinement(refinedFacet);\n    // if we are already at a root refinement (or no refinement at all), there is no\n    // root level values request\n    if (\n      currentRefinement.length === 0 ||\n      currentRefinement[0].split(separator).length < 2\n    ) {\n      return;\n    }\n\n    results.slice(nextDisjunctiveResult).forEach(function (result) {\n      var facets = result && result.facets ? result.facets : {};\n\n      Object.keys(facets).forEach(function (dfacet) {\n        var facetResults = facets[dfacet];\n        var position = findIndex(state.hierarchicalFacets, function (f) {\n          return f.name === hierarchicalFacet.name;\n        });\n        var attributeIndex = findIndex(\n          self.hierarchicalFacets[position],\n          function (f) {\n            return f.attribute === dfacet;\n          }\n        );\n\n        // previous refinements and no results so not able to find it\n        if (attributeIndex === -1) {\n          return;\n        }\n\n        // when we always get root levels, if the hits refinement is `beers > IPA` (count: 5),\n        // then the disjunctive values will be `beers` (count: 100),\n        // but we do not want to display\n        //   | beers (100)\n        //     > IPA (5)\n        // We want\n        //   | beers (5)\n        //     > IPA (5)\n        // @MAJOR: remove this legacy behaviour in next major version\n        var defaultData = {};\n\n        if (\n          currentRefinement.length > 0 &&\n          !self.persistHierarchicalRootCount\n        ) {\n          var root = currentRefinement[0].split(separator)[0];\n          defaultData[root] =\n            self.hierarchicalFacets[position][attributeIndex].data[root];\n        }\n\n        self.hierarchicalFacets[position][attributeIndex].data = defaultsPure(\n          defaultData,\n          facetResults,\n          self.hierarchicalFacets[position][attributeIndex].data\n        );\n      });\n\n      nextDisjunctiveResult++;\n    });\n  });\n\n  // add the excludes\n  Object.keys(state.facetsExcludes).forEach(function (facetName) {\n    var excludes = state.facetsExcludes[facetName];\n    var position = facetsIndices[facetName];\n\n    self.facets[position] = {\n      name: facetName,\n      data: mainFacets[facetName],\n      exhaustive: mainSubResponse.exhaustiveFacetsCount,\n    };\n    excludes.forEach(function (facetValue) {\n      self.facets[position] = self.facets[position] || { name: facetName };\n      self.facets[position].data = self.facets[position].data || {};\n      self.facets[position].data[facetValue] = 0;\n    });\n  });\n\n  /**\n   * @type {Array}\n   */\n  this.hierarchicalFacets = this.hierarchicalFacets.map(\n    generateHierarchicalTree(state)\n  );\n\n  /**\n   * @type {Array}\n   */\n  this.facets = compact(this.facets);\n  /**\n   * @type {Array}\n   */\n  this.disjunctiveFacets = compact(this.disjunctiveFacets);\n\n  this._state = state;\n}\n\n/**\n * Get a facet object with its name\n * @deprecated\n * @param {string} name name of the faceted attribute\n * @return {SearchResults.Facet} the facet object\n */\nSearchResults.prototype.getFacetByName = function (name) {\n  function predicate(facet) {\n    return facet.name === name;\n  }\n\n  return (\n    find(this.facets, predicate) ||\n    find(this.disjunctiveFacets, predicate) ||\n    find(this.hierarchicalFacets, predicate)\n  );\n};\n\n/**\n * Get the facet values of a specified attribute from a SearchResults object.\n * @private\n * @param {SearchResults} results the search results to search in\n * @param {string} attribute name of the faceted attribute to search for\n * @return {array|object} facet values. For the hierarchical facets it is an object.\n */\nfunction extractNormalizedFacetValues(results, attribute) {\n  function predicate(facet) {\n    return facet.name === attribute;\n  }\n\n  if (results._state.isConjunctiveFacet(attribute)) {\n    var facet = find(results.facets, predicate);\n    if (!facet) return [];\n\n    return Object.keys(facet.data).map(function (name) {\n      var value = escapeFacetValue(name);\n      return {\n        name: name,\n        escapedValue: value,\n        count: facet.data[name],\n        isRefined: results._state.isFacetRefined(attribute, value),\n        isExcluded: results._state.isExcludeRefined(attribute, name),\n      };\n    });\n  } else if (results._state.isDisjunctiveFacet(attribute)) {\n    var disjunctiveFacet = find(results.disjunctiveFacets, predicate);\n    if (!disjunctiveFacet) return [];\n\n    return Object.keys(disjunctiveFacet.data).map(function (name) {\n      var value = escapeFacetValue(name);\n      return {\n        name: name,\n        escapedValue: value,\n        count: disjunctiveFacet.data[name],\n        isRefined: results._state.isDisjunctiveFacetRefined(attribute, value),\n      };\n    });\n  } else if (results._state.isHierarchicalFacet(attribute)) {\n    var hierarchicalFacetValues = find(results.hierarchicalFacets, predicate);\n    if (!hierarchicalFacetValues) return hierarchicalFacetValues;\n\n    var hierarchicalFacet =\n      results._state.getHierarchicalFacetByName(attribute);\n    var separator =\n      results._state._getHierarchicalFacetSeparator(hierarchicalFacet);\n    var currentRefinement = unescapeFacetValue(\n      results._state.getHierarchicalRefinement(attribute)[0] || ''\n    );\n\n    if (currentRefinement.indexOf(hierarchicalFacet.rootPath) === 0) {\n      currentRefinement = currentRefinement.replace(\n        hierarchicalFacet.rootPath + separator,\n        ''\n      );\n    }\n\n    var currentRefinementSplit = currentRefinement.split(separator);\n    currentRefinementSplit.unshift(attribute);\n\n    setIsRefined(hierarchicalFacetValues, currentRefinementSplit, 0);\n\n    return hierarchicalFacetValues;\n  }\n\n  return undefined;\n}\n\n/**\n * Set the isRefined of a hierarchical facet result based on the current state.\n * @param {SearchResults.HierarchicalFacet} item Hierarchical facet to fix\n * @param {string[]} currentRefinement array of parts of the current hierarchical refinement\n * @param {number} depth recursion depth in the currentRefinement\n * @return {undefined} function mutates the item\n */\nfunction setIsRefined(item, currentRefinement, depth) {\n  item.isRefined =\n    item.name === (currentRefinement[depth] && currentRefinement[depth].trim());\n  if (item.data) {\n    item.data.forEach(function (child) {\n      setIsRefined(child, currentRefinement, depth + 1);\n    });\n  }\n}\n\n/**\n * Sort nodes of a hierarchical or disjunctive facet results\n * @private\n * @param {function} sortFn sort function to apply\n * @param {HierarchicalFacet|Array} node node upon which we want to apply the sort\n * @param {string[]} names attribute names\n * @param {number} [level=0] current index in the names array\n * @return {HierarchicalFacet|Array} sorted node\n */\nfunction recSort(sortFn, node, names, level) {\n  level = level || 0;\n\n  if (Array.isArray(node)) {\n    return sortFn(node, names[level]);\n  }\n\n  if (!node.data || node.data.length === 0) {\n    return node;\n  }\n\n  var children = node.data.map(function (childNode) {\n    return recSort(sortFn, childNode, names, level + 1);\n  });\n  var sortedChildren = sortFn(children, names[level]);\n  var newNode = defaultsPure({ data: sortedChildren }, node);\n  return newNode;\n}\n\nSearchResults.DEFAULT_SORT = ['isRefined:desc', 'count:desc', 'name:asc'];\n\nfunction vanillaSortFn(order, data) {\n  return data.sort(order);\n}\n\n/**\n * @typedef FacetOrdering\n * @type {Object}\n * @property {string[]} [order]\n * @property {'count' | 'alpha' | 'hidden'} [sortRemainingBy]\n */\n\n/**\n * Sorts facet arrays via their facet ordering\n * @param {Array} facetValues the values\n * @param {FacetOrdering} facetOrdering the ordering\n * @returns {Array} the sorted facet values\n */\nfunction sortViaFacetOrdering(facetValues, facetOrdering) {\n  var orderedFacets = [];\n  var remainingFacets = [];\n  var hide = facetOrdering.hide || [];\n  var order = facetOrdering.order || [];\n\n  /**\n   * an object with the keys being the values in order, the values their index:\n   * ['one', 'two'] -> { one: 0, two: 1 }\n   */\n  var reverseOrder = order.reduce(function (acc, name, i) {\n    acc[name] = i;\n    return acc;\n  }, {});\n\n  facetValues.forEach(function (item) {\n    // hierarchical facets get sorted using their raw name\n    var name = item.path || item.name;\n    var hidden = hide.indexOf(name) > -1;\n    if (!hidden && reverseOrder[name] !== undefined) {\n      orderedFacets[reverseOrder[name]] = item;\n    } else if (!hidden) {\n      remainingFacets.push(item);\n    }\n  });\n\n  orderedFacets = orderedFacets.filter(function (facet) {\n    return facet;\n  });\n\n  var sortRemainingBy = facetOrdering.sortRemainingBy;\n  var ordering;\n  if (sortRemainingBy === 'hidden') {\n    return orderedFacets;\n  } else if (sortRemainingBy === 'alpha') {\n    ordering = [\n      ['path', 'name'],\n      ['asc', 'asc'],\n    ];\n  } else {\n    ordering = [['count'], ['desc']];\n  }\n\n  return orderedFacets.concat(\n    orderBy(remainingFacets, ordering[0], ordering[1])\n  );\n}\n\n/**\n * @param {SearchResults} results the search results class\n * @param {string} attribute the attribute to retrieve ordering of\n * @returns {FacetOrdering | undefined} the facet ordering\n */\nfunction getFacetOrdering(results, attribute) {\n  return (\n    results.renderingContent &&\n    results.renderingContent.facetOrdering &&\n    results.renderingContent.facetOrdering.values &&\n    results.renderingContent.facetOrdering.values[attribute]\n  );\n}\n\n/**\n * Get a the list of values for a given facet attribute. Those values are sorted\n * refinement first, descending count (bigger value on top), and name ascending\n * (alphabetical order). The sort formula can overridden using either string based\n * predicates or a function.\n *\n * This method will return all the values returned by the Algolia engine plus all\n * the values already refined. This means that it can happen that the\n * `maxValuesPerFacet` [configuration](https://www.algolia.com/doc/rest-api/search#param-maxValuesPerFacet)\n * might not be respected if you have facet values that are already refined.\n * @param {string} attribute attribute name\n * @param {object} opts configuration options.\n * @param {boolean} [opts.facetOrdering]\n * Force the use of facetOrdering from the result if a sortBy is present. If\n * sortBy isn't present, facetOrdering will be used automatically.\n * @param {Array.<string> | function} opts.sortBy\n * When using strings, it consists of\n * the name of the [FacetValue](#SearchResults.FacetValue) or the\n * [HierarchicalFacet](#SearchResults.HierarchicalFacet) attributes with the\n * order (`asc` or `desc`). For example to order the value by count, the\n * argument would be `['count:asc']`.\n *\n * If only the attribute name is specified, the ordering defaults to the one\n * specified in the default value for this attribute.\n *\n * When not specified, the order is\n * ascending.  This parameter can also be a function which takes two facet\n * values and should return a number, 0 if equal, 1 if the first argument is\n * bigger or -1 otherwise.\n *\n * The default value for this attribute `['isRefined:desc', 'count:desc', 'name:asc']`\n * @return {FacetValue[]|HierarchicalFacet|undefined} depending on the type of facet of\n * the attribute requested (hierarchical, disjunctive or conjunctive)\n * @example\n * helper.on('result', function(event){\n *   //get values ordered only by name ascending using the string predicate\n *   event.results.getFacetValues('city', {sortBy: ['name:asc']});\n *   //get values  ordered only by count ascending using a function\n *   event.results.getFacetValues('city', {\n *     // this is equivalent to ['count:asc']\n *     sortBy: function(a, b) {\n *       if (a.count === b.count) return 0;\n *       if (a.count > b.count)   return 1;\n *       if (b.count > a.count)   return -1;\n *     }\n *   });\n * });\n */\nSearchResults.prototype.getFacetValues = function (attribute, opts) {\n  var facetValues = extractNormalizedFacetValues(this, attribute);\n  if (!facetValues) {\n    return undefined;\n  }\n\n  var options = defaultsPure({}, opts, {\n    sortBy: SearchResults.DEFAULT_SORT,\n    // if no sortBy is given, attempt to sort based on facetOrdering\n    // if it is given, we still allow to sort via facet ordering first\n    facetOrdering: !(opts && opts.sortBy),\n  });\n\n  // eslint-disable-next-line consistent-this\n  var results = this;\n  var attributes;\n  if (Array.isArray(facetValues)) {\n    attributes = [attribute];\n  } else {\n    var config = results._state.getHierarchicalFacetByName(facetValues.name);\n    attributes = config.attributes;\n  }\n\n  return recSort(\n    function (data, facetName) {\n      if (options.facetOrdering) {\n        var facetOrdering = getFacetOrdering(results, facetName);\n        if (facetOrdering) {\n          return sortViaFacetOrdering(data, facetOrdering);\n        }\n      }\n\n      if (Array.isArray(options.sortBy)) {\n        var order = formatSort(options.sortBy, SearchResults.DEFAULT_SORT);\n        return orderBy(data, order[0], order[1]);\n      } else if (typeof options.sortBy === 'function') {\n        return vanillaSortFn(options.sortBy, data);\n      }\n      throw new Error(\n        'options.sortBy is optional but if defined it must be ' +\n          'either an array of string (predicates) or a sorting function'\n      );\n    },\n    facetValues,\n    attributes\n  );\n};\n\n/**\n * Returns the facet stats if attribute is defined and the facet contains some.\n * Otherwise returns undefined.\n * @param {string} attribute name of the faceted attribute\n * @return {object} The stats of the facet\n */\nSearchResults.prototype.getFacetStats = function (attribute) {\n  if (this._state.isConjunctiveFacet(attribute)) {\n    return getFacetStatsIfAvailable(this.facets, attribute);\n  } else if (this._state.isDisjunctiveFacet(attribute)) {\n    return getFacetStatsIfAvailable(this.disjunctiveFacets, attribute);\n  }\n\n  return undefined;\n};\n\n/**\n * @typedef {Object} FacetListItem\n * @property {string} name\n */\n\n/**\n * @param {FacetListItem[]} facetList (has more items, but enough for here)\n * @param {string} facetName The attribute to look for\n * @return {object|undefined} The stats of the facet\n */\nfunction getFacetStatsIfAvailable(facetList, facetName) {\n  var data = find(facetList, function (facet) {\n    return facet.name === facetName;\n  });\n  return data && data.stats;\n}\n\n/**\n * Returns all refinements for all filters + tags. It also provides\n * additional information: count and exhaustiveness for each filter.\n *\n * See the [refinement type](#Refinement) for an exhaustive view of the available\n * data.\n *\n * Note that for a numeric refinement, results are grouped per operator, this\n * means that it will return responses for operators which are empty.\n *\n * @return {Array.<Refinement>} all the refinements\n */\nSearchResults.prototype.getRefinements = function () {\n  var state = this._state;\n  // eslint-disable-next-line consistent-this\n  var results = this;\n  var res = [];\n\n  Object.keys(state.facetsRefinements).forEach(function (attributeName) {\n    state.facetsRefinements[attributeName].forEach(function (name) {\n      res.push(\n        getRefinement(state, 'facet', attributeName, name, results.facets)\n      );\n    });\n  });\n\n  Object.keys(state.facetsExcludes).forEach(function (attributeName) {\n    state.facetsExcludes[attributeName].forEach(function (name) {\n      res.push(\n        getRefinement(state, 'exclude', attributeName, name, results.facets)\n      );\n    });\n  });\n\n  Object.keys(state.disjunctiveFacetsRefinements).forEach(function (\n    attributeName\n  ) {\n    state.disjunctiveFacetsRefinements[attributeName].forEach(function (name) {\n      res.push(\n        getRefinement(\n          state,\n          'disjunctive',\n          attributeName,\n          name,\n          results.disjunctiveFacets\n        )\n      );\n    });\n  });\n\n  Object.keys(state.hierarchicalFacetsRefinements).forEach(function (\n    attributeName\n  ) {\n    state.hierarchicalFacetsRefinements[attributeName].forEach(function (name) {\n      res.push(\n        getHierarchicalRefinement(\n          state,\n          attributeName,\n          name,\n          results.hierarchicalFacets\n        )\n      );\n    });\n  });\n\n  Object.keys(state.numericRefinements).forEach(function (attributeName) {\n    var operators = state.numericRefinements[attributeName];\n    Object.keys(operators).forEach(function (operator) {\n      operators[operator].forEach(function (value) {\n        res.push({\n          type: 'numeric',\n          attributeName: attributeName,\n          name: value,\n          numericValue: value,\n          operator: operator,\n        });\n      });\n    });\n  });\n\n  state.tagRefinements.forEach(function (name) {\n    res.push({ type: 'tag', attributeName: '_tags', name: name });\n  });\n\n  return res;\n};\n\n/**\n * @typedef {Object} Facet\n * @property {string} name\n * @property {Object} data\n * @property {boolean} exhaustive\n */\n\n/**\n * @param {SearchParameters} state the current state\n * @param {string} type the type of the refinement\n * @param {string} attributeName The attribute of the facet\n * @param {*} name The name of the facet\n * @param {Facet[]} resultsFacets facets from the results\n * @return {Refinement} the refinement\n */\nfunction getRefinement(state, type, attributeName, name, resultsFacets) {\n  var facet = find(resultsFacets, function (f) {\n    return f.name === attributeName;\n  });\n  var count = facet && facet.data && facet.data[name] ? facet.data[name] : 0;\n  var exhaustive = (facet && facet.exhaustive) || false;\n\n  return {\n    type: type,\n    attributeName: attributeName,\n    name: name,\n    count: count,\n    exhaustive: exhaustive,\n  };\n}\n\n/**\n * @param {SearchParameters} state the current state\n * @param {string} attributeName the attribute of the hierarchical facet\n * @param {string} name the name of the facet\n * @param {Facet[]} resultsFacets facets from the results\n * @return {HierarchicalFacet} the hierarchical facet\n */\nfunction getHierarchicalRefinement(state, attributeName, name, resultsFacets) {\n  var facetDeclaration = state.getHierarchicalFacetByName(attributeName);\n  var separator = state._getHierarchicalFacetSeparator(facetDeclaration);\n  var split = name.split(separator);\n  var rootFacet = find(resultsFacets, function (facet) {\n    return facet.name === attributeName;\n  });\n\n  var facet = split.reduce(function (intermediateFacet, part) {\n    var newFacet =\n      intermediateFacet &&\n      find(intermediateFacet.data, function (f) {\n        return f.name === part;\n      });\n    return newFacet !== undefined ? newFacet : intermediateFacet;\n  }, rootFacet);\n\n  var count = (facet && facet.count) || 0;\n  var exhaustive = (facet && facet.exhaustive) || false;\n  var path = (facet && facet.path) || '';\n\n  return {\n    type: 'hierarchical',\n    attributeName: attributeName,\n    name: path,\n    count: count,\n    exhaustive: exhaustive,\n  };\n}\n\nmodule.exports = SearchResults;\n","'use strict';\n\nvar EventEmitter = require('@algolia/events');\n\nvar DerivedHelper = require('./DerivedHelper');\nvar escapeFacetValue = require('./functions/escapeFacetValue').escapeFacetValue;\nvar inherits = require('./functions/inherits');\nvar merge = require('./functions/merge');\nvar objectHasKeys = require('./functions/objectHasKeys');\nvar omit = require('./functions/omit');\nvar RecommendParameters = require('./RecommendParameters');\nvar RecommendResults = require('./RecommendResults');\nvar requestBuilder = require('./requestBuilder');\nvar SearchParameters = require('./SearchParameters');\nvar SearchResults = require('./SearchResults');\nvar sortAndMergeRecommendations = require('./utils/sortAndMergeRecommendations');\nvar version = require('./version');\n\n/**\n * Event triggered when a parameter is set or updated\n * @event AlgoliaSearchHelper#event:change\n * @property {object} event\n * @property {SearchParameters} event.state the current parameters with the latest changes applied\n * @property {SearchResults} event.results the previous results received from Algolia. `null` before the first request\n * @example\n * helper.on('change', function(event) {\n *   console.log('The parameters have changed');\n * });\n */\n\n/**\n * Event triggered when a main search is sent to Algolia\n * @event AlgoliaSearchHelper#event:search\n * @property {object} event\n * @property {SearchParameters} event.state the parameters used for this search\n * @property {SearchResults} event.results the results from the previous search. `null` if it is the first search.\n * @example\n * helper.on('search', function(event) {\n *   console.log('Search sent');\n * });\n */\n\n/**\n * Event triggered when a search using `searchForFacetValues` is sent to Algolia\n * @event AlgoliaSearchHelper#event:searchForFacetValues\n * @property {object} event\n * @property {SearchParameters} event.state the parameters used for this search it is the first search.\n * @property {string} event.facet the facet searched into\n * @property {string} event.query the query used to search in the facets\n * @example\n * helper.on('searchForFacetValues', function(event) {\n *   console.log('searchForFacetValues sent');\n * });\n */\n\n/**\n * Event triggered when a search using `searchOnce` is sent to Algolia\n * @event AlgoliaSearchHelper#event:searchOnce\n * @property {object} event\n * @property {SearchParameters} event.state the parameters used for this search it is the first search.\n * @example\n * helper.on('searchOnce', function(event) {\n *   console.log('searchOnce sent');\n * });\n */\n\n/**\n * Event triggered when the results are retrieved from Algolia\n * @event AlgoliaSearchHelper#event:result\n * @property {object} event\n * @property {SearchResults} event.results the results received from Algolia\n * @property {SearchParameters} event.state the parameters used to query Algolia. Those might be different from the one in the helper instance (for example if the network is unreliable).\n * @example\n * helper.on('result', function(event) {\n *   console.log('Search results received');\n * });\n */\n\n/**\n * Event triggered when Algolia sends back an error. For example, if an unknown parameter is\n * used, the error can be caught using this event.\n * @event AlgoliaSearchHelper#event:error\n * @property {object} event\n * @property {Error} event.error the error returned by the Algolia.\n * @example\n * helper.on('error', function(event) {\n *   console.log('Houston we got a problem.');\n * });\n */\n\n/**\n * Event triggered when the queue of queries have been depleted (with any result or outdated queries)\n * @event AlgoliaSearchHelper#event:searchQueueEmpty\n * @example\n * helper.on('searchQueueEmpty', function() {\n *   console.log('No more search pending');\n *   // This is received before the result event if we're not expecting new results\n * });\n *\n * helper.search();\n */\n\n/**\n * Initialize a new AlgoliaSearchHelper\n * @class\n * @classdesc The AlgoliaSearchHelper is a class that ease the management of the\n * search. It provides an event based interface for search callbacks:\n *  - change: when the internal search state is changed.\n *    This event contains a {@link SearchParameters} object and the\n *    {@link SearchResults} of the last result if any.\n *  - search: when a search is triggered using the `search()` method.\n *  - result: when the response is retrieved from Algolia and is processed.\n *    This event contains a {@link SearchResults} object and the\n *    {@link SearchParameters} corresponding to this answer.\n *  - error: when the response is an error. This event contains the error returned by the server.\n * @param  {AlgoliaSearch} client an AlgoliaSearch client\n * @param  {string} index the index name to query\n * @param  {SearchParameters | object} options an object defining the initial\n * config of the search. It doesn't have to be a {SearchParameters},\n * just an object containing the properties you need from it.\n * @param {SearchResultsOptions|object} searchResultsOptions an object defining the options to use when creating the search results.\n */\nfunction AlgoliaSearchHelper(client, index, options, searchResultsOptions) {\n  if (typeof client.addAlgoliaAgent === 'function') {\n    client.addAlgoliaAgent('JS Helper (' + version + ')');\n  }\n\n  this.setClient(client);\n  var opts = options || {};\n  opts.index = index;\n  this.state = SearchParameters.make(opts);\n  this.recommendState = new RecommendParameters({\n    params: opts.recommendState,\n  });\n  this.lastResults = null;\n  this.lastRecommendResults = null;\n  this._queryId = 0;\n  this._recommendQueryId = 0;\n  this._lastQueryIdReceived = -1;\n  this._lastRecommendQueryIdReceived = -1;\n  this.derivedHelpers = [];\n  this._currentNbQueries = 0;\n  this._currentNbRecommendQueries = 0;\n  this._searchResultsOptions = searchResultsOptions;\n  this._recommendCache = {};\n}\n\ninherits(AlgoliaSearchHelper, EventEmitter);\n\n/**\n * Start the search with the parameters set in the state. When the\n * method is called, it triggers a `search` event. The results will\n * be available through the `result` event. If an error occurs, an\n * `error` will be fired instead.\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires search\n * @fires result\n * @fires error\n * @chainable\n */\nAlgoliaSearchHelper.prototype.search = function () {\n  this._search({ onlyWithDerivedHelpers: false });\n  return this;\n};\n\nAlgoliaSearchHelper.prototype.searchOnlyWithDerivedHelpers = function () {\n  this._search({ onlyWithDerivedHelpers: true });\n  return this;\n};\n\n/**\n * Sends the recommendation queries set in the state. When the method is\n * called, it triggers a `fetch` event. The results will be available through\n * the `result` event. If an error occurs, an `error` will be fired instead.\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires fetch\n * @fires result\n * @fires error\n * @chainable\n */\nAlgoliaSearchHelper.prototype.recommend = function () {\n  this._recommend();\n  return this;\n};\n\n/**\n * Gets the search query parameters that would be sent to the Algolia Client\n * for the hits\n * @return {object} Query Parameters\n */\nAlgoliaSearchHelper.prototype.getQuery = function () {\n  var state = this.state;\n  return requestBuilder._getHitsSearchParams(state);\n};\n\n/**\n * Start a search using a modified version of the current state. This method does\n * not trigger the helper lifecycle and does not modify the state kept internally\n * by the helper. This second aspect means that the next search call will be the\n * same as a search call before calling searchOnce.\n * @param {object} options can contain all the parameters that can be set to SearchParameters\n * plus the index\n * @param {function} [cb] optional callback executed when the response from the\n * server is back.\n * @return {promise|undefined} if a callback is passed the method returns undefined\n * otherwise it returns a promise containing an object with two keys :\n *  - content with a SearchResults\n *  - state with the state used for the query as a SearchParameters\n * @example\n * // Changing the number of records returned per page to 1\n * // This example uses the callback API\n * var state = helper.searchOnce({hitsPerPage: 1},\n *   function(error, content, state) {\n *     // if an error occurred it will be passed in error, otherwise its value is null\n *     // content contains the results formatted as a SearchResults\n *     // state is the instance of SearchParameters used for this search\n *   });\n * @example\n * // Changing the number of records returned per page to 1\n * // This example uses the promise API\n * var state1 = helper.searchOnce({hitsPerPage: 1})\n *                 .then(promiseHandler);\n *\n * function promiseHandler(res) {\n *   // res contains\n *   // {\n *   //   content : SearchResults\n *   //   state   : SearchParameters (the one used for this specific search)\n *   // }\n * }\n */\nAlgoliaSearchHelper.prototype.searchOnce = function (options, cb) {\n  var tempState = !options\n    ? this.state\n    : this.state.setQueryParameters(options);\n  var queries = requestBuilder._getQueries(tempState.index, tempState);\n  // eslint-disable-next-line consistent-this\n  var self = this;\n\n  this._currentNbQueries++;\n\n  this.emit('searchOnce', {\n    state: tempState,\n  });\n\n  if (cb) {\n    this.client\n      .search(queries)\n      .then(function (content) {\n        self._currentNbQueries--;\n        if (self._currentNbQueries === 0) {\n          self.emit('searchQueueEmpty');\n        }\n\n        cb(null, new SearchResults(tempState, content.results), tempState);\n      })\n      .catch(function (err) {\n        self._currentNbQueries--;\n        if (self._currentNbQueries === 0) {\n          self.emit('searchQueueEmpty');\n        }\n\n        cb(err, null, tempState);\n      });\n\n    return undefined;\n  }\n\n  return this.client.search(queries).then(\n    function (content) {\n      self._currentNbQueries--;\n      if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n      return {\n        content: new SearchResults(tempState, content.results),\n        state: tempState,\n        _originalResponse: content,\n      };\n    },\n    function (e) {\n      self._currentNbQueries--;\n      if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n      throw e;\n    }\n  );\n};\n\n/**\n * Start the search for answers with the parameters set in the state.\n * This method returns a promise.\n * @param {Object} options - the options for answers API call\n * @param {string[]} options.attributesForPrediction - Attributes to use for predictions. If empty, `searchableAttributes` is used instead.\n * @param {string[]} options.queryLanguages - The languages in the query. Currently only supports ['en'].\n * @param {number} options.nbHits - Maximum number of answers to retrieve from the Answers Engine. Cannot be greater than 1000.\n *\n * @return {promise} the answer results\n * @deprecated answers is deprecated and will be replaced with new initiatives\n */\nAlgoliaSearchHelper.prototype.findAnswers = function (options) {\n  // eslint-disable-next-line no-console\n  console.warn('[algoliasearch-helper] answers is no longer supported');\n  var state = this.state;\n  var derivedHelper = this.derivedHelpers[0];\n  if (!derivedHelper) {\n    return Promise.resolve([]);\n  }\n  var derivedState = derivedHelper.getModifiedState(state);\n  var data = merge(\n    {\n      attributesForPrediction: options.attributesForPrediction,\n      nbHits: options.nbHits,\n    },\n    {\n      params: omit(requestBuilder._getHitsSearchParams(derivedState), [\n        'attributesToSnippet',\n        'hitsPerPage',\n        'restrictSearchableAttributes',\n        'snippetEllipsisText',\n      ]),\n    }\n  );\n\n  var errorMessage =\n    'search for answers was called, but this client does not have a function client.initIndex(index).findAnswers';\n  if (typeof this.client.initIndex !== 'function') {\n    throw new Error(errorMessage);\n  }\n  var index = this.client.initIndex(derivedState.index);\n  if (typeof index.findAnswers !== 'function') {\n    throw new Error(errorMessage);\n  }\n  return index.findAnswers(derivedState.query, options.queryLanguages, data);\n};\n\n/**\n * Structure of each result when using\n * [`searchForFacetValues()`](reference.html#AlgoliaSearchHelper#searchForFacetValues)\n * @typedef FacetSearchHit\n * @type {object}\n * @property {string} value the facet value\n * @property {string} highlighted the facet value highlighted with the query string\n * @property {number} count number of occurrence of this facet value\n * @property {boolean} isRefined true if the value is already refined\n */\n\n/**\n * Structure of the data resolved by the\n * [`searchForFacetValues()`](reference.html#AlgoliaSearchHelper#searchForFacetValues)\n * promise.\n * @typedef FacetSearchResult\n * @type {object}\n * @property {FacetSearchHit} facetHits the results for this search for facet values\n * @property {number} processingTimeMS time taken by the query inside the engine\n */\n\n/**\n * Search for facet values based on an query and the name of a faceted attribute. This\n * triggers a search and will return a promise. On top of using the query, it also sends\n * the parameters from the state so that the search is narrowed down to only the possible values.\n *\n * See the description of [FacetSearchResult](reference.html#FacetSearchResult)\n * @param {string} facet the name of the faceted attribute\n * @param {string} query the string query for the search\n * @param {number} [maxFacetHits] the maximum number values returned. Should be > 0 and <= 100\n * @param {object} [userState] the set of custom parameters to use on top of the current state. Setting a property to `undefined` removes\n * it in the generated query.\n * @return {promise.<FacetSearchResult>} the results of the search\n */\nAlgoliaSearchHelper.prototype.searchForFacetValues = function (\n  facet,\n  query,\n  maxFacetHits,\n  userState\n) {\n  var clientHasSFFV = typeof this.client.searchForFacetValues === 'function';\n  var clientHasInitIndex = typeof this.client.initIndex === 'function';\n  if (\n    !clientHasSFFV &&\n    !clientHasInitIndex &&\n    typeof this.client.search !== 'function'\n  ) {\n    throw new Error(\n      'search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues or client.initIndex(index).searchForFacetValues'\n    );\n  }\n\n  var state = this.state.setQueryParameters(userState || {});\n  var isDisjunctive = state.isDisjunctiveFacet(facet);\n  var algoliaQuery = requestBuilder.getSearchForFacetQuery(\n    facet,\n    query,\n    maxFacetHits,\n    state\n  );\n\n  this._currentNbQueries++;\n  // eslint-disable-next-line consistent-this\n  var self = this;\n  var searchForFacetValuesPromise;\n  // newer algoliasearch ^3.27.1 - ~4.0.0\n  if (clientHasSFFV) {\n    searchForFacetValuesPromise = this.client.searchForFacetValues([\n      { indexName: state.index, params: algoliaQuery },\n    ]);\n    // algoliasearch < 3.27.1\n  } else if (clientHasInitIndex) {\n    searchForFacetValuesPromise = this.client\n      .initIndex(state.index)\n      .searchForFacetValues(algoliaQuery);\n    // algoliasearch ~5.0.0\n  } else {\n    // @MAJOR only use client.search\n    delete algoliaQuery.facetName;\n    searchForFacetValuesPromise = this.client\n      .search([\n        {\n          type: 'facet',\n          facet: facet,\n          indexName: state.index,\n          params: algoliaQuery,\n        },\n      ])\n      .then(function processResponse(response) {\n        return response.results[0];\n      });\n  }\n\n  this.emit('searchForFacetValues', {\n    state: state,\n    facet: facet,\n    query: query,\n  });\n\n  return searchForFacetValuesPromise.then(\n    function addIsRefined(content) {\n      self._currentNbQueries--;\n      if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n\n      content = Array.isArray(content) ? content[0] : content;\n\n      content.facetHits.forEach(function (f) {\n        f.escapedValue = escapeFacetValue(f.value);\n        f.isRefined = isDisjunctive\n          ? state.isDisjunctiveFacetRefined(facet, f.escapedValue)\n          : state.isFacetRefined(facet, f.escapedValue);\n      });\n\n      return content;\n    },\n    function (e) {\n      self._currentNbQueries--;\n      if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n      throw e;\n    }\n  );\n};\n\n/**\n * Sets the text query used for the search.\n *\n * This method resets the current page to 0.\n * @param  {string} q the user query\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setQuery = function (q) {\n  this._change({\n    state: this.state.resetPage().setQuery(q),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Remove all the types of refinements except tags. A string can be provided to remove\n * only the refinements of a specific attribute. For more advanced use case, you can\n * provide a function instead. This function should follow the\n * [clearCallback definition](#SearchParameters.clearCallback).\n *\n * This method resets the current page to 0.\n * @param {string} [name] optional name of the facet / attribute on which we want to remove all refinements\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n * @example\n * // Removing all the refinements\n * helper.clearRefinements().search();\n * @example\n * // Removing all the filters on a the category attribute.\n * helper.clearRefinements('category').search();\n * @example\n * // Removing only the exclude filters on the category facet.\n * helper.clearRefinements(function(value, attribute, type) {\n *   return type === 'exclude' && attribute === 'category';\n * }).search();\n */\nAlgoliaSearchHelper.prototype.clearRefinements = function (name) {\n  this._change({\n    state: this.state.resetPage().clearRefinements(name),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Remove all the tag filters.\n *\n * This method resets the current page to 0.\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.clearTags = function () {\n  this._change({\n    state: this.state.resetPage().clearTags(),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Adds a disjunctive filter to a faceted attribute with the `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param  {string} facet the facet to refine\n * @param  {string} value the associated value (will be converted to string)\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addDisjunctiveFacetRefinement = function (\n  facet,\n  value\n) {\n  this._change({\n    state: this.state.resetPage().addDisjunctiveFacetRefinement(facet, value),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#addDisjunctiveFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.addDisjunctiveRefine = function () {\n  return this.addDisjunctiveFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Adds a refinement on a hierarchical facet. It will throw\n * an exception if the facet is not defined or if the facet\n * is already refined.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet name\n * @param {string} path the hierarchical facet path\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @throws Error if the facet is not defined or if the facet is refined\n * @chainable\n * @fires change\n */\nAlgoliaSearchHelper.prototype.addHierarchicalFacetRefinement = function (\n  facet,\n  path\n) {\n  this._change({\n    state: this.state.resetPage().addHierarchicalFacetRefinement(facet, path),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Adds a an numeric filter to an attribute with the `operator` and `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param  {string} attribute the attribute on which the numeric filter applies\n * @param  {string} operator the operator of the filter\n * @param  {number} value the value of the filter\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addNumericRefinement = function (\n  attribute,\n  operator,\n  value\n) {\n  this._change({\n    state: this.state\n      .resetPage()\n      .addNumericRefinement(attribute, operator, value),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Adds a filter to a faceted attribute with the `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param  {string} facet the facet to refine\n * @param  {string} value the associated value (will be converted to string)\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addFacetRefinement = function (facet, value) {\n  this._change({\n    state: this.state.resetPage().addFacetRefinement(facet, value),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#addFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.addRefine = function () {\n  return this.addFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Adds a an exclusion filter to a faceted attribute with the `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param  {string} facet the facet to refine\n * @param  {string} value the associated value (will be converted to string)\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addFacetExclusion = function (facet, value) {\n  this._change({\n    state: this.state.resetPage().addExcludeRefinement(facet, value),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#addFacetExclusion}\n */\nAlgoliaSearchHelper.prototype.addExclude = function () {\n  return this.addFacetExclusion.apply(this, arguments);\n};\n\n/**\n * Adds a tag filter with the `tag` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} tag the tag to add to the filter\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addTag = function (tag) {\n  this._change({\n    state: this.state.resetPage().addTagRefinement(tag),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Adds a \"frequently bought together\" recommendation query.\n *\n * @param {FrequentlyBoughtTogetherQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addFrequentlyBoughtTogether = function (params) {\n  this._recommendChange({\n    state: this.recommendState.addFrequentlyBoughtTogether(params),\n  });\n\n  return this;\n};\n\n/**\n * Adds a \"related products\" recommendation query.\n *\n * @param {RelatedProductsQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addRelatedProducts = function (params) {\n  this._recommendChange({\n    state: this.recommendState.addRelatedProducts(params),\n  });\n\n  return this;\n};\n\n/**\n * Adds a \"trending items\" recommendation query.\n *\n * @param {TrendingItemsQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addTrendingItems = function (params) {\n  this._recommendChange({\n    state: this.recommendState.addTrendingItems(params),\n  });\n\n  return this;\n};\n\n/**\n * Adds a \"trending facets\" recommendation query.\n *\n * @param {TrendingFacetsQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addTrendingFacets = function (params) {\n  this._recommendChange({\n    state: this.recommendState.addTrendingFacets(params),\n  });\n\n  return this;\n};\n\n/**\n * Adds a \"looking similar\" recommendation query.\n *\n * @param {LookingSimilarQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addLookingSimilar = function (params) {\n  this._recommendChange({\n    state: this.recommendState.addLookingSimilar(params),\n  });\n\n  return this;\n};\n\n/**\n * Removes an numeric filter to an attribute with the `operator` and `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * Some parameters are optional, triggering different behavior:\n *  - if the value is not provided, then all the numeric value will be removed for the\n *  specified attribute/operator couple.\n *  - if the operator is not provided either, then all the numeric filter on this attribute\n *  will be removed.\n *\n * This method resets the current page to 0.\n * @param  {string} attribute the attribute on which the numeric filter applies\n * @param  {string} [operator] the operator of the filter\n * @param  {number} [value] the value of the filter\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeNumericRefinement = function (\n  attribute,\n  operator,\n  value\n) {\n  this._change({\n    state: this.state\n      .resetPage()\n      .removeNumericRefinement(attribute, operator, value),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Removes a disjunctive filter to a faceted attribute with the `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * If the value is omitted, then this method will remove all the filters for the\n * attribute.\n *\n * This method resets the current page to 0.\n * @param  {string} facet the facet to refine\n * @param  {string} [value] the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeDisjunctiveFacetRefinement = function (\n  facet,\n  value\n) {\n  this._change({\n    state: this.state\n      .resetPage()\n      .removeDisjunctiveFacetRefinement(facet, value),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#removeDisjunctiveFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.removeDisjunctiveRefine = function () {\n  return this.removeDisjunctiveFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Removes the refinement set on a hierarchical facet.\n * @param {string} facet the facet name\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @throws Error if the facet is not defined or if the facet is not refined\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeHierarchicalFacetRefinement = function (\n  facet\n) {\n  this._change({\n    state: this.state.resetPage().removeHierarchicalFacetRefinement(facet),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Removes a filter to a faceted attribute with the `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * If the value is omitted, then this method will remove all the filters for the\n * attribute.\n *\n * This method resets the current page to 0.\n * @param  {string} facet the facet to refine\n * @param  {string} [value] the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeFacetRefinement = function (facet, value) {\n  this._change({\n    state: this.state.resetPage().removeFacetRefinement(facet, value),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#removeFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.removeRefine = function () {\n  return this.removeFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Removes an exclusion filter to a faceted attribute with the `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * If the value is omitted, then this method will remove all the filters for the\n * attribute.\n *\n * This method resets the current page to 0.\n * @param  {string} facet the facet to refine\n * @param  {string} [value] the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeFacetExclusion = function (facet, value) {\n  this._change({\n    state: this.state.resetPage().removeExcludeRefinement(facet, value),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#removeFacetExclusion}\n */\nAlgoliaSearchHelper.prototype.removeExclude = function () {\n  return this.removeFacetExclusion.apply(this, arguments);\n};\n\n/**\n * Removes a tag filter with the `tag` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} tag tag to remove from the filter\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeTag = function (tag) {\n  this._change({\n    state: this.state.resetPage().removeTagRefinement(tag),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Removes a \"frequently bought together\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeFrequentlyBoughtTogether = function (id) {\n  this._recommendChange({\n    state: this.recommendState.removeParams(id),\n  });\n\n  return this;\n};\n\n/**\n * Removes a \"related products\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeRelatedProducts = function (id) {\n  this._recommendChange({\n    state: this.recommendState.removeParams(id),\n  });\n\n  return this;\n};\n\n/**\n * Removes a \"trending items\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeTrendingItems = function (id) {\n  this._recommendChange({\n    state: this.recommendState.removeParams(id),\n  });\n\n  return this;\n};\n\n/**\n * Removes a \"trending facets\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeTrendingFacets = function (id) {\n  this._recommendChange({\n    state: this.recommendState.removeParams(id),\n  });\n\n  return this;\n};\n\n/**\n * Removes a \"looking similar\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeLookingSimilar = function (id) {\n  this._recommendChange({\n    state: this.recommendState.removeParams(id),\n  });\n\n  return this;\n};\n\n/**\n * Adds or removes an exclusion filter to a faceted attribute with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method resets the current page to 0.\n * @param  {string} facet the facet to refine\n * @param  {string} value the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.toggleFacetExclusion = function (facet, value) {\n  this._change({\n    state: this.state.resetPage().toggleExcludeFacetRefinement(facet, value),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#toggleFacetExclusion}\n */\nAlgoliaSearchHelper.prototype.toggleExclude = function () {\n  return this.toggleFacetExclusion.apply(this, arguments);\n};\n\n/**\n * Adds or removes a filter to a faceted attribute with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method can be used for conjunctive, disjunctive and hierarchical filters.\n *\n * This method resets the current page to 0.\n * @param  {string} facet the facet to refine\n * @param  {string} value the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @throws Error will throw an error if the facet is not declared in the settings of the helper\n * @fires change\n * @chainable\n * @deprecated since version 2.19.0, see {@link AlgoliaSearchHelper#toggleFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.toggleRefinement = function (facet, value) {\n  return this.toggleFacetRefinement(facet, value);\n};\n\n/**\n * Adds or removes a filter to a faceted attribute with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method can be used for conjunctive, disjunctive and hierarchical filters.\n *\n * This method resets the current page to 0.\n * @param  {string} facet the facet to refine\n * @param  {string} value the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @throws Error will throw an error if the facet is not declared in the settings of the helper\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.toggleFacetRefinement = function (facet, value) {\n  this._change({\n    state: this.state.resetPage().toggleFacetRefinement(facet, value),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#toggleFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.toggleRefine = function () {\n  return this.toggleFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Adds or removes a tag filter with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method resets the current page to 0.\n * @param {string} tag tag to remove or add\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.toggleTag = function (tag) {\n  this._change({\n    state: this.state.resetPage().toggleTagRefinement(tag),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Increments the page number by one.\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n * @example\n * helper.setPage(0).nextPage().getPage();\n * // returns 1\n */\nAlgoliaSearchHelper.prototype.nextPage = function () {\n  var page = this.state.page || 0;\n  return this.setPage(page + 1);\n};\n\n/**\n * Decrements the page number by one.\n * @fires change\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @chainable\n * @example\n * helper.setPage(1).previousPage().getPage();\n * // returns 0\n */\nAlgoliaSearchHelper.prototype.previousPage = function () {\n  var page = this.state.page || 0;\n  return this.setPage(page - 1);\n};\n\n/**\n * @private\n * @param {number} page The page number\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @chainable\n * @fires change\n */\nfunction setCurrentPage(page) {\n  if (page < 0) throw new Error('Page requested below 0.');\n\n  this._change({\n    state: this.state.setPage(page),\n    isPageReset: false,\n  });\n\n  return this;\n}\n\n/**\n * Change the current page\n * @deprecated\n * @param  {number} page The page number\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setCurrentPage = setCurrentPage;\n\n/**\n * Updates the current page.\n * @function\n * @param  {number} page The page number\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setPage = setCurrentPage;\n\n/**\n * Updates the name of the index that will be targeted by the query.\n *\n * This method resets the current page to 0.\n * @param {string} name the index name\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setIndex = function (name) {\n  this._change({\n    state: this.state.resetPage().setIndex(name),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Update a parameter of the search. This method reset the page\n *\n * The complete list of parameters is available on the\n * [Algolia website](https://www.algolia.com/doc/rest#query-an-index).\n * The most commonly used parameters have their own [shortcuts](#query-parameters-shortcuts)\n * or benefit from higher-level APIs (all the kind of filters and facets have their own API)\n *\n * This method resets the current page to 0.\n * @param {string} parameter name of the parameter to update\n * @param {any} value new value of the parameter\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n * @example\n * helper.setQueryParameter('hitsPerPage', 20).search();\n */\nAlgoliaSearchHelper.prototype.setQueryParameter = function (parameter, value) {\n  this._change({\n    state: this.state.resetPage().setQueryParameter(parameter, value),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Set the whole state (warning: will erase previous state)\n * @param {SearchParameters} newState the whole new state\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setState = function (newState) {\n  this._change({\n    state: SearchParameters.make(newState),\n    isPageReset: false,\n  });\n\n  return this;\n};\n\n/**\n * Override the current state without triggering a change event.\n * Do not use this method unless you know what you are doing. (see the example\n * for a legit use case)\n * @param {SearchParameters} newState the whole new state\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @example\n *  helper.on('change', function(state){\n *    // In this function you might want to find a way to store the state in the url/history\n *    updateYourURL(state)\n *  })\n *  window.onpopstate = function(event){\n *    // This is naive though as you should check if the state is really defined etc.\n *    helper.overrideStateWithoutTriggeringChangeEvent(event.state).search()\n *  }\n * @chainable\n */\nAlgoliaSearchHelper.prototype.overrideStateWithoutTriggeringChangeEvent =\n  function (newState) {\n    this.state = new SearchParameters(newState);\n    return this;\n  };\n\n/**\n * Check if an attribute has any numeric, conjunctive, disjunctive or hierarchical filters.\n * @param {string} attribute the name of the attribute\n * @return {boolean} true if the attribute is filtered by at least one value\n * @example\n * // hasRefinements works with numeric, conjunctive, disjunctive and hierarchical filters\n * helper.hasRefinements('price'); // false\n * helper.addNumericRefinement('price', '>', 100);\n * helper.hasRefinements('price'); // true\n *\n * helper.hasRefinements('color'); // false\n * helper.addFacetRefinement('color', 'blue');\n * helper.hasRefinements('color'); // true\n *\n * helper.hasRefinements('material'); // false\n * helper.addDisjunctiveFacetRefinement('material', 'plastic');\n * helper.hasRefinements('material'); // true\n *\n * helper.hasRefinements('categories'); // false\n * helper.toggleFacetRefinement('categories', 'kitchen > knife');\n * helper.hasRefinements('categories'); // true\n *\n */\nAlgoliaSearchHelper.prototype.hasRefinements = function (attribute) {\n  if (objectHasKeys(this.state.getNumericRefinements(attribute))) {\n    return true;\n  } else if (this.state.isConjunctiveFacet(attribute)) {\n    return this.state.isFacetRefined(attribute);\n  } else if (this.state.isDisjunctiveFacet(attribute)) {\n    return this.state.isDisjunctiveFacetRefined(attribute);\n  } else if (this.state.isHierarchicalFacet(attribute)) {\n    return this.state.isHierarchicalFacetRefined(attribute);\n  }\n\n  // there's currently no way to know that the user did call `addNumericRefinement` at some point\n  // thus we cannot distinguish if there once was a numeric refinement that was cleared\n  // so we will return false in every other situations to be consistent\n  // while what we should do here is throw because we did not find the attribute in any type\n  // of refinement\n  return false;\n};\n\n/**\n * Check if a value is excluded for a specific faceted attribute. If the value\n * is omitted then the function checks if there is any excluding refinements.\n *\n * @param  {string}  facet name of the attribute for used for faceting\n * @param  {string}  [value] optional value. If passed will test that this value\n * is filtering the given facet.\n * @return {boolean} true if refined\n * @example\n * helper.isExcludeRefined('color'); // false\n * helper.isExcludeRefined('color', 'blue') // false\n * helper.isExcludeRefined('color', 'red') // false\n *\n * helper.addFacetExclusion('color', 'red');\n *\n * helper.isExcludeRefined('color'); // true\n * helper.isExcludeRefined('color', 'blue') // false\n * helper.isExcludeRefined('color', 'red') // true\n */\nAlgoliaSearchHelper.prototype.isExcluded = function (facet, value) {\n  return this.state.isExcludeRefined(facet, value);\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since 2.4.0, see {@link AlgoliaSearchHelper#hasRefinements}\n */\nAlgoliaSearchHelper.prototype.isDisjunctiveRefined = function (facet, value) {\n  return this.state.isDisjunctiveFacetRefined(facet, value);\n};\n\n/**\n * Check if the string is a currently filtering tag.\n * @param {string} tag tag to check\n * @return {boolean} true if the tag is currently refined\n */\nAlgoliaSearchHelper.prototype.hasTag = function (tag) {\n  return this.state.isTagRefined(tag);\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since 2.4.0, see {@link AlgoliaSearchHelper#hasTag}\n */\nAlgoliaSearchHelper.prototype.isTagRefined = function () {\n  return this.hasTagRefinements.apply(this, arguments);\n};\n\n/**\n * Get the name of the currently used index.\n * @return {string} name of the index\n * @example\n * helper.setIndex('highestPrice_products').getIndex();\n * // returns 'highestPrice_products'\n */\nAlgoliaSearchHelper.prototype.getIndex = function () {\n  return this.state.index;\n};\n\nfunction getCurrentPage() {\n  return this.state.page;\n}\n\n/**\n * Get the currently selected page\n * @deprecated\n * @return {number} the current page\n */\nAlgoliaSearchHelper.prototype.getCurrentPage = getCurrentPage;\n/**\n * Get the currently selected page\n * @function\n * @return {number} the current page\n */\nAlgoliaSearchHelper.prototype.getPage = getCurrentPage;\n\n/**\n * Get all the tags currently set to filters the results.\n *\n * @return {string[]} The list of tags currently set.\n */\nAlgoliaSearchHelper.prototype.getTags = function () {\n  return this.state.tagRefinements;\n};\n\n/**\n * Get the list of refinements for a given attribute. This method works with\n * conjunctive, disjunctive, excluding and numerical filters.\n *\n * See also SearchResults#getRefinements\n *\n * @param {string} facetName attribute name used for faceting\n * @return {Array.<FacetRefinement|NumericRefinement>} All Refinement are objects that contain a value, and\n * a type. Numeric also contains an operator.\n * @example\n * helper.addNumericRefinement('price', '>', 100);\n * helper.getRefinements('price');\n * // [\n * //   {\n * //     \"value\": [\n * //       100\n * //     ],\n * //     \"operator\": \">\",\n * //     \"type\": \"numeric\"\n * //   }\n * // ]\n * @example\n * helper.addFacetRefinement('color', 'blue');\n * helper.addFacetExclusion('color', 'red');\n * helper.getRefinements('color');\n * // [\n * //   {\n * //     \"value\": \"blue\",\n * //     \"type\": \"conjunctive\"\n * //   },\n * //   {\n * //     \"value\": \"red\",\n * //     \"type\": \"exclude\"\n * //   }\n * // ]\n * @example\n * helper.addDisjunctiveFacetRefinement('material', 'plastic');\n * // [\n * //   {\n * //     \"value\": \"plastic\",\n * //     \"type\": \"disjunctive\"\n * //   }\n * // ]\n */\nAlgoliaSearchHelper.prototype.getRefinements = function (facetName) {\n  var refinements = [];\n\n  if (this.state.isConjunctiveFacet(facetName)) {\n    var conjRefinements = this.state.getConjunctiveRefinements(facetName);\n\n    conjRefinements.forEach(function (r) {\n      refinements.push({\n        value: r,\n        type: 'conjunctive',\n      });\n    });\n\n    var excludeRefinements = this.state.getExcludeRefinements(facetName);\n\n    excludeRefinements.forEach(function (r) {\n      refinements.push({\n        value: r,\n        type: 'exclude',\n      });\n    });\n  } else if (this.state.isDisjunctiveFacet(facetName)) {\n    var disjunctiveRefinements =\n      this.state.getDisjunctiveRefinements(facetName);\n\n    disjunctiveRefinements.forEach(function (r) {\n      refinements.push({\n        value: r,\n        type: 'disjunctive',\n      });\n    });\n  }\n\n  var numericRefinements = this.state.getNumericRefinements(facetName);\n\n  Object.keys(numericRefinements).forEach(function (operator) {\n    var value = numericRefinements[operator];\n\n    refinements.push({\n      value: value,\n      operator: operator,\n      type: 'numeric',\n    });\n  });\n\n  return refinements;\n};\n\n/**\n * Return the current refinement for the (attribute, operator)\n * @param {string} attribute attribute in the record\n * @param {string} operator operator applied on the refined values\n * @return {Array.<number|number[]>} refined values\n */\nAlgoliaSearchHelper.prototype.getNumericRefinement = function (\n  attribute,\n  operator\n) {\n  return this.state.getNumericRefinement(attribute, operator);\n};\n\n/**\n * Get the current breadcrumb for a hierarchical facet, as an array\n * @param  {string} facetName Hierarchical facet name\n * @return {array.<string>} the path as an array of string\n */\nAlgoliaSearchHelper.prototype.getHierarchicalFacetBreadcrumb = function (\n  facetName\n) {\n  return this.state.getHierarchicalFacetBreadcrumb(facetName);\n};\n\n// /////////// PRIVATE\n\n/**\n * Perform the underlying queries\n * @private\n * @param {object} options options for the query\n * @param {boolean} [options.onlyWithDerivedHelpers=false] if true, only the derived helpers will be queried\n * @return {undefined} does not return anything\n * @fires search\n * @fires result\n * @fires error\n */\nAlgoliaSearchHelper.prototype._search = function (options) {\n  var state = this.state;\n  var states = [];\n  var mainQueries = [];\n\n  if (!options.onlyWithDerivedHelpers) {\n    mainQueries = requestBuilder._getQueries(state.index, state);\n\n    states.push({\n      state: state,\n      queriesCount: mainQueries.length,\n      helper: this,\n    });\n\n    this.emit('search', {\n      state: state,\n      results: this.lastResults,\n    });\n  }\n\n  var derivedQueries = this.derivedHelpers.map(function (derivedHelper) {\n    var derivedState = derivedHelper.getModifiedState(state);\n    var derivedStateQueries = derivedState.index\n      ? requestBuilder._getQueries(derivedState.index, derivedState)\n      : [];\n\n    states.push({\n      state: derivedState,\n      queriesCount: derivedStateQueries.length,\n      helper: derivedHelper,\n    });\n\n    derivedHelper.emit('search', {\n      state: derivedState,\n      results: derivedHelper.lastResults,\n    });\n\n    return derivedStateQueries;\n  });\n\n  var queries = Array.prototype.concat.apply(mainQueries, derivedQueries);\n\n  var queryId = this._queryId++;\n  this._currentNbQueries++;\n\n  if (!queries.length) {\n    return Promise.resolve({ results: [] }).then(\n      this._dispatchAlgoliaResponse.bind(this, states, queryId)\n    );\n  }\n\n  try {\n    this.client\n      .search(queries)\n      .then(this._dispatchAlgoliaResponse.bind(this, states, queryId))\n      .catch(this._dispatchAlgoliaError.bind(this, queryId));\n  } catch (error) {\n    // If we reach this part, we're in an internal error state\n    this.emit('error', {\n      error: error,\n    });\n  }\n\n  return undefined;\n};\n\nAlgoliaSearchHelper.prototype._recommend = function () {\n  var searchState = this.state;\n  var recommendState = this.recommendState;\n  var index = this.getIndex();\n  var states = [{ state: recommendState, index: index, helper: this }];\n  var ids = recommendState.params.map(function (param) {\n    return param.$$id;\n  });\n\n  this.emit('fetch', {\n    recommend: {\n      state: recommendState,\n      results: this.lastRecommendResults,\n    },\n  });\n\n  var cache = this._recommendCache;\n\n  var derivedQueries = this.derivedHelpers.map(function (derivedHelper) {\n    var derivedIndex = derivedHelper.getModifiedState(searchState).index;\n    if (!derivedIndex) {\n      return [];\n    }\n\n    // Contrary to what is done when deriving the search state, we don't want to\n    // provide the current recommend state to the derived helper, as it would\n    // inherit unwanted queries. We instead provide an empty recommend state.\n    var derivedState = derivedHelper.getModifiedRecommendState(\n      new RecommendParameters()\n    );\n    states.push({\n      state: derivedState,\n      index: derivedIndex,\n      helper: derivedHelper,\n    });\n\n    ids = Array.prototype.concat.apply(\n      ids,\n      derivedState.params.map(function (param) {\n        return param.$$id;\n      })\n    );\n\n    derivedHelper.emit('fetch', {\n      recommend: {\n        state: derivedState,\n        results: derivedHelper.lastRecommendResults,\n      },\n    });\n\n    return derivedState._buildQueries(derivedIndex, cache);\n  });\n\n  var queries = Array.prototype.concat.apply(\n    this.recommendState._buildQueries(index, cache),\n    derivedQueries\n  );\n\n  if (queries.length === 0) {\n    return;\n  }\n\n  if (\n    queries.length > 0 &&\n    typeof this.client.getRecommendations === 'undefined'\n  ) {\n    // eslint-disable-next-line no-console\n    console.warn(\n      'Please update algoliasearch/lite to the latest version in order to use recommend widgets.'\n    );\n    return;\n  }\n\n  var queryId = this._recommendQueryId++;\n  this._currentNbRecommendQueries++;\n\n  try {\n    this.client\n      .getRecommendations(queries)\n      .then(this._dispatchRecommendResponse.bind(this, queryId, states, ids))\n      .catch(this._dispatchRecommendError.bind(this, queryId));\n  } catch (error) {\n    // If we reach this part, we're in an internal error state\n    this.emit('error', {\n      error: error,\n    });\n  }\n\n  return;\n};\n\n/**\n * Transform the responses as sent by the server and transform them into a user\n * usable object that merge the results of all the batch requests. It will dispatch\n * over the different helper + derived helpers (when there are some).\n * @private\n * @param {array.<{SearchParameters, AlgoliaQueries, AlgoliaSearchHelper}>} states state used to generate the request\n * @param {number} queryId id of the current request\n * @param {object} content content of the response\n * @return {undefined}\n */\nAlgoliaSearchHelper.prototype._dispatchAlgoliaResponse = function (\n  states,\n  queryId,\n  content\n) {\n  // eslint-disable-next-line consistent-this\n  var self = this;\n\n  // @TODO remove the number of outdated queries discarded instead of just one\n\n  if (queryId < this._lastQueryIdReceived) {\n    // Outdated answer\n    return;\n  }\n\n  this._currentNbQueries -= queryId - this._lastQueryIdReceived;\n  this._lastQueryIdReceived = queryId;\n\n  if (this._currentNbQueries === 0) this.emit('searchQueueEmpty');\n\n  var results = content.results.slice();\n\n  states.forEach(function (s) {\n    var state = s.state;\n    var queriesCount = s.queriesCount;\n    var helper = s.helper;\n    var specificResults = results.splice(0, queriesCount);\n\n    if (!state.index) {\n      helper.emit('result', {\n        results: null,\n        state: state,\n      });\n      return;\n    }\n\n    helper.lastResults = new SearchResults(\n      state,\n      specificResults,\n      self._searchResultsOptions\n    );\n\n    helper.emit('result', {\n      results: helper.lastResults,\n      state: state,\n    });\n  });\n};\n\nAlgoliaSearchHelper.prototype._dispatchRecommendResponse = function (\n  queryId,\n  states,\n  ids,\n  content\n) {\n  // @TODO remove the number of outdated queries discarded instead of just one\n\n  if (queryId < this._lastRecommendQueryIdReceived) {\n    // Outdated answer\n    return;\n  }\n\n  this._currentNbRecommendQueries -=\n    queryId - this._lastRecommendQueryIdReceived;\n  this._lastRecommendQueryIdReceived = queryId;\n\n  if (this._currentNbRecommendQueries === 0) this.emit('recommendQueueEmpty');\n\n  var cache = this._recommendCache;\n\n  var idsMap = {};\n  ids\n    .filter(function (id) {\n      return cache[id] === undefined;\n    })\n    .forEach(function (id, index) {\n      if (!idsMap[id]) idsMap[id] = [];\n\n      idsMap[id].push(index);\n    });\n\n  Object.keys(idsMap).forEach(function (id) {\n    var indices = idsMap[id];\n    var firstResult = content.results[indices[0]];\n    if (indices.length === 1) {\n      cache[id] = firstResult;\n      return;\n    }\n    cache[id] = Object.assign({}, firstResult, {\n      hits: sortAndMergeRecommendations(\n        indices.map(function (idx) {\n          return content.results[idx].hits;\n        })\n      ),\n    });\n  });\n\n  var results = {};\n  ids.forEach(function (id) {\n    results[id] = cache[id];\n  });\n\n  states.forEach(function (s) {\n    var state = s.state;\n    var helper = s.helper;\n\n    if (!s.index) {\n      // eslint-disable-next-line no-warning-comments\n      // TODO: emit \"result\" event when events for Recommend are implemented\n      helper.emit('recommend:result', {\n        results: null,\n        state: state,\n      });\n      return;\n    }\n\n    helper.lastRecommendResults = new RecommendResults(state, results);\n\n    // eslint-disable-next-line no-warning-comments\n    // TODO: emit \"result\" event when events for Recommend are implemented\n    helper.emit('recommend:result', {\n      recommend: {\n        results: helper.lastRecommendResults,\n        state: state,\n      },\n    });\n  });\n};\n\nAlgoliaSearchHelper.prototype._dispatchAlgoliaError = function (\n  queryId,\n  error\n) {\n  if (queryId < this._lastQueryIdReceived) {\n    // Outdated answer\n    return;\n  }\n\n  this._currentNbQueries -= queryId - this._lastQueryIdReceived;\n  this._lastQueryIdReceived = queryId;\n\n  this.emit('error', {\n    error: error,\n  });\n\n  if (this._currentNbQueries === 0) this.emit('searchQueueEmpty');\n};\n\nAlgoliaSearchHelper.prototype._dispatchRecommendError = function (\n  queryId,\n  error\n) {\n  if (queryId < this._lastRecommendQueryIdReceived) {\n    // Outdated answer\n    return;\n  }\n\n  this._currentNbRecommendQueries -=\n    queryId - this._lastRecommendQueryIdReceived;\n  this._lastRecommendQueryIdReceived = queryId;\n\n  this.emit('error', {\n    error: error,\n  });\n\n  if (this._currentNbRecommendQueries === 0) this.emit('recommendQueueEmpty');\n};\n\nAlgoliaSearchHelper.prototype.containsRefinement = function (\n  query,\n  facetFilters,\n  numericFilters,\n  tagFilters\n) {\n  return (\n    query ||\n    facetFilters.length !== 0 ||\n    numericFilters.length !== 0 ||\n    tagFilters.length !== 0\n  );\n};\n\n/**\n * Test if there are some disjunctive refinements on the facet\n * @private\n * @param {string} facet the attribute to test\n * @return {boolean} true if there are refinements on this attribute\n */\nAlgoliaSearchHelper.prototype._hasDisjunctiveRefinements = function (facet) {\n  return (\n    this.state.disjunctiveRefinements[facet] &&\n    this.state.disjunctiveRefinements[facet].length > 0\n  );\n};\n\nAlgoliaSearchHelper.prototype._change = function (event) {\n  var state = event.state;\n  var isPageReset = event.isPageReset;\n\n  if (state !== this.state) {\n    this.state = state;\n\n    this.emit('change', {\n      state: this.state,\n      results: this.lastResults,\n      isPageReset: isPageReset,\n    });\n  }\n};\n\nAlgoliaSearchHelper.prototype._recommendChange = function (event) {\n  var state = event.state;\n\n  if (state !== this.recommendState) {\n    this.recommendState = state;\n\n    // eslint-disable-next-line no-warning-comments\n    // TODO: emit \"change\" event when events for Recommend are implemented\n    this.emit('recommend:change', {\n      search: {\n        results: this.lastResults,\n        state: this.state,\n      },\n      recommend: {\n        results: this.lastRecommendResults,\n        state: this.recommendState,\n      },\n    });\n  }\n};\n\n/**\n * Clears the cache of the underlying Algolia client.\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n */\nAlgoliaSearchHelper.prototype.clearCache = function () {\n  if (this.client.clearCache) this.client.clearCache();\n  return this;\n};\n\n/**\n * Updates the internal client instance. If the reference of the clients\n * are equal then no update is actually done.\n * @param  {AlgoliaSearch} newClient an AlgoliaSearch client\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n */\nAlgoliaSearchHelper.prototype.setClient = function (newClient) {\n  if (this.client === newClient) return this;\n\n  if (typeof newClient.addAlgoliaAgent === 'function') {\n    newClient.addAlgoliaAgent('JS Helper (' + version + ')');\n  }\n  this.client = newClient;\n\n  return this;\n};\n\n/**\n * Gets the instance of the currently used client.\n * @return {AlgoliaSearch} the currently used client\n */\nAlgoliaSearchHelper.prototype.getClient = function () {\n  return this.client;\n};\n\n/**\n * Creates an derived instance of the Helper. A derived helper\n * is a way to request other indices synchronised with the lifecycle\n * of the main Helper. This mechanism uses the multiqueries feature\n * of Algolia to aggregate all the requests in a single network call.\n *\n * This method takes a function that is used to create a new SearchParameter\n * that will be used to create requests to Algolia. Those new requests\n * are created just before the `search` event. The signature of the function\n * is `SearchParameters -> SearchParameters`.\n *\n * This method returns a new DerivedHelper which is an EventEmitter\n * that fires the same `search`, `result` and `error` events. Those\n * events, however, will receive data specific to this DerivedHelper\n * and the SearchParameters that is returned by the call of the\n * parameter function.\n * @param {function} fn SearchParameters -> SearchParameters\n * @param {function} recommendFn RecommendParameters -> RecommendParameters\n * @return {DerivedHelper} a new DerivedHelper\n */\nAlgoliaSearchHelper.prototype.derive = function (fn, recommendFn) {\n  var derivedHelper = new DerivedHelper(this, fn, recommendFn);\n  this.derivedHelpers.push(derivedHelper);\n  return derivedHelper;\n};\n\n/**\n * This method detaches a derived Helper from the main one. Prefer using the one from the\n * derived helper itself, to remove the event listeners too.\n * @private\n * @param  {DerivedHelper} derivedHelper the derived helper to detach\n * @return {undefined} nothing is returned\n * @throws Error\n */\nAlgoliaSearchHelper.prototype.detachDerivedHelper = function (derivedHelper) {\n  var pos = this.derivedHelpers.indexOf(derivedHelper);\n  if (pos === -1) throw new Error('Derived helper already detached');\n  this.derivedHelpers.splice(pos, 1);\n};\n\n/**\n * This method returns true if there is currently at least one on-going search.\n * @return {boolean} true if there is a search pending\n */\nAlgoliaSearchHelper.prototype.hasPendingRequests = function () {\n  return this._currentNbQueries > 0;\n};\n\n/**\n * @typedef AlgoliaSearchHelper.NumericRefinement\n * @type {object}\n * @property {number[]} value the numbers that are used for filtering this attribute with\n * the operator specified.\n * @property {string} operator the faceting data: value, number of entries\n * @property {string} type will be 'numeric'\n */\n\n/**\n * @typedef AlgoliaSearchHelper.FacetRefinement\n * @type {object}\n * @property {string} value the string use to filter the attribute\n * @property {string} type the type of filter: 'conjunctive', 'disjunctive', 'exclude'\n */\n\nmodule.exports = AlgoliaSearchHelper;\n","'use strict';\n\nmodule.exports = function compact(array) {\n  if (!Array.isArray(array)) {\n    return [];\n  }\n\n  return array.filter(Boolean);\n};\n","'use strict';\n\n// NOTE: this behaves like lodash/defaults, but doesn't mutate the target\n// it also preserve keys order\nmodule.exports = function defaultsPure() {\n  var sources = Array.prototype.slice.call(arguments);\n\n  return sources.reduceRight(function (acc, source) {\n    Object.keys(Object(source)).forEach(function (key) {\n      if (source[key] === undefined) {\n        return;\n      }\n      if (acc[key] !== undefined) {\n        // remove if already added, so that we can add it in correct order\n        delete acc[key];\n      }\n      acc[key] = source[key];\n    });\n    return acc;\n  }, {});\n};\n","'use strict';\n\n/**\n * Replaces a leading - with \\-\n * @private\n * @param {any} value the facet value to replace\n * @returns {any} the escaped facet value or the value if it was not a string\n */\nfunction escapeFacetValue(value) {\n  if (typeof value !== 'string') return value;\n\n  return String(value).replace(/^-/, '\\\\-');\n}\n\n/**\n * Replaces a leading \\- with -\n * @private\n * @param {any} value the escaped facet value\n * @returns {any} the unescaped facet value or the value if it was not a string\n */\nfunction unescapeFacetValue(value) {\n  if (typeof value !== 'string') return value;\n\n  return value.replace(/^\\\\-/, '-');\n}\n\nmodule.exports = {\n  escapeFacetValue: escapeFacetValue,\n  unescapeFacetValue: unescapeFacetValue,\n};\n","'use strict';\n\n// @MAJOR can be replaced by native Array#find when we change support\nmodule.exports = function find(array, comparator) {\n  if (!Array.isArray(array)) {\n    return undefined;\n  }\n\n  for (var i = 0; i < array.length; i++) {\n    if (comparator(array[i])) {\n      return array[i];\n    }\n  }\n\n  return undefined;\n};\n","'use strict';\n\n// @MAJOR can be replaced by native Array#findIndex when we change support\nmodule.exports = function find(array, comparator) {\n  if (!Array.isArray(array)) {\n    return -1;\n  }\n\n  for (var i = 0; i < array.length; i++) {\n    if (comparator(array[i])) {\n      return i;\n    }\n  }\n  return -1;\n};\n","// @MAJOR: remove this function and use Array.prototype.flat\nmodule.exports = function flat(arr) {\n  return arr.reduce(function (acc, val) {\n    return acc.concat(val);\n  }, []);\n};\n","'use strict';\n\nvar find = require('./find');\n\n/**\n * Transform sort format from user friendly notation to lodash format\n * @param {string[]} sortBy array of predicate of the form \"attribute:order\"\n * @param {string[]} [defaults] array of predicate of the form \"attribute:order\"\n * @return {array.<string[]>} array containing 2 elements : attributes, orders\n */\nmodule.exports = function formatSort(sortBy, defaults) {\n  var defaultInstructions = (defaults || []).map(function (sort) {\n    return sort.split(':');\n  });\n\n  return sortBy.reduce(\n    function preparePredicate(out, sort) {\n      var sortInstruction = sort.split(':');\n\n      var matchingDefault = find(\n        defaultInstructions,\n        function (defaultInstruction) {\n          return defaultInstruction[0] === sortInstruction[0];\n        }\n      );\n\n      if (sortInstruction.length > 1 || !matchingDefault) {\n        out[0].push(sortInstruction[0]);\n        out[1].push(sortInstruction[1]);\n        return out;\n      }\n\n      out[0].push(matchingDefault[0]);\n      out[1].push(matchingDefault[1]);\n      return out;\n    },\n    [[], []]\n  );\n};\n","'use strict';\n\nfunction inherits(ctor, superCtor) {\n  ctor.prototype = Object.create(superCtor.prototype, {\n    constructor: {\n      value: ctor,\n      enumerable: false,\n      writable: true,\n      configurable: true,\n    },\n  });\n}\n\nmodule.exports = inherits;\n","'use strict';\n\nfunction intersection(arr1, arr2) {\n  return arr1.filter(function (value, index) {\n    return (\n      arr2.indexOf(value) > -1 &&\n      arr1.indexOf(value) === index /* skips duplicates */\n    );\n  });\n}\n\nmodule.exports = intersection;\n","'use strict';\n\nfunction clone(value) {\n  if (typeof value === 'object' && value !== null) {\n    return _merge(Array.isArray(value) ? [] : {}, value);\n  }\n  return value;\n}\n\nfunction isObjectOrArrayOrFunction(value) {\n  return (\n    typeof value === 'function' ||\n    Array.isArray(value) ||\n    Object.prototype.toString.call(value) === '[object Object]'\n  );\n}\n\nfunction _merge(target, source) {\n  if (target === source) {\n    return target;\n  }\n\n  // eslint-disable-next-line no-restricted-syntax\n  for (var key in source) {\n    if (\n      !Object.prototype.hasOwnProperty.call(source, key) ||\n      key === '__proto__' ||\n      key === 'constructor'\n    ) {\n      // eslint-disable-next-line no-continue\n      continue;\n    }\n\n    var sourceVal = source[key];\n    var targetVal = target[key];\n\n    if (typeof targetVal !== 'undefined' && typeof sourceVal === 'undefined') {\n      // eslint-disable-next-line no-continue\n      continue;\n    }\n\n    if (\n      isObjectOrArrayOrFunction(targetVal) &&\n      isObjectOrArrayOrFunction(sourceVal)\n    ) {\n      target[key] = _merge(targetVal, sourceVal);\n    } else {\n      target[key] = clone(sourceVal);\n    }\n  }\n  return target;\n}\n\n/**\n * This method is like Object.assign, but recursively merges own and inherited\n * enumerable keyed properties of source objects into the destination object.\n *\n * NOTE: this behaves like lodash/merge, but:\n * - does mutate functions if they are a source\n * - treats non-plain objects as plain\n * - does not work for circular objects\n * - treats sparse arrays as sparse\n * - does not convert Array-like objects (Arguments, NodeLists, etc.) to arrays\n *\n * @param {Object} target The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n */\nfunction merge(target) {\n  if (!isObjectOrArrayOrFunction(target)) {\n    target = {};\n  }\n\n  for (var i = 1, l = arguments.length; i < l; i++) {\n    var source = arguments[i];\n\n    if (isObjectOrArrayOrFunction(source)) {\n      _merge(target, source);\n    }\n  }\n  return target;\n}\n\nmodule.exports = merge;\n","'use strict';\n\nfunction objectHasKeys(obj) {\n  return obj && Object.keys(obj).length > 0;\n}\n\nmodule.exports = objectHasKeys;\n","'use strict';\n\n// https://github.com/babel/babel/blob/3aaafae053fa75febb3aa45d45b6f00646e30ba4/packages/babel-helpers/src/helpers.js#L604-L620\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source === null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key;\n  var i;\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    // eslint-disable-next-line no-continue\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n  return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;\n","'use strict';\n\nfunction compareAscending(value, other) {\n  if (value !== other) {\n    var valIsDefined = value !== undefined;\n    var valIsNull = value === null;\n\n    var othIsDefined = other !== undefined;\n    var othIsNull = other === null;\n\n    if (\n      (!othIsNull && value > other) ||\n      (valIsNull && othIsDefined) ||\n      !valIsDefined\n    ) {\n      return 1;\n    }\n    if (\n      (!valIsNull && value < other) ||\n      (othIsNull && valIsDefined) ||\n      !othIsDefined\n    ) {\n      return -1;\n    }\n  }\n  return 0;\n}\n\n/**\n * @param {Array<object>} collection object with keys in attributes\n * @param {Array<string>} iteratees attributes\n * @param {Array<string>} orders asc | desc\n * @return {Array<object>} sorted collection\n */\nfunction orderBy(collection, iteratees, orders) {\n  if (!Array.isArray(collection)) {\n    return [];\n  }\n\n  if (!Array.isArray(orders)) {\n    orders = [];\n  }\n\n  var result = collection.map(function (value, index) {\n    return {\n      criteria: iteratees.map(function (iteratee) {\n        return value[iteratee];\n      }),\n      index: index,\n      value: value,\n    };\n  });\n\n  result.sort(function comparer(object, other) {\n    var index = -1;\n\n    while (++index < object.criteria.length) {\n      var res = compareAscending(object.criteria[index], other.criteria[index]);\n      if (res) {\n        if (index >= orders.length) {\n          return res;\n        }\n        if (orders[index] === 'desc') {\n          return -res;\n        }\n        return res;\n      }\n    }\n\n    // This ensures a stable sort in V8 and other engines.\n    // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n    return object.index - other.index;\n  });\n\n  return result.map(function (res) {\n    return res.value;\n  });\n}\n\nmodule.exports = orderBy;\n","'use strict';\n\nfunction valToNumber(v) {\n  if (typeof v === 'number') {\n    return v;\n  } else if (typeof v === 'string') {\n    return parseFloat(v);\n  } else if (Array.isArray(v)) {\n    return v.map(valToNumber);\n  }\n\n  throw new Error(\n    'The value should be a number, a parsable string or an array of those.'\n  );\n}\n\nmodule.exports = valToNumber;\n","'use strict';\n\nvar merge = require('./functions/merge');\n\nfunction sortObject(obj) {\n  return Object.keys(obj)\n    .sort()\n    .reduce(function (acc, curr) {\n      acc[curr] = obj[curr];\n      return acc;\n    }, {});\n}\n\nvar requestBuilder = {\n  /**\n   * Get all the queries to send to the client, those queries can used directly\n   * with the Algolia client.\n   * @private\n   * @param  {string} index The name of the index\n   * @param  {SearchParameters} state The state from which to get the queries\n   * @return {object[]} The queries\n   */\n  _getQueries: function getQueries(index, state) {\n    var queries = [];\n\n    // One query for the hits\n    queries.push({\n      indexName: index,\n      params: requestBuilder._getHitsSearchParams(state),\n    });\n\n    // One for each disjunctive facets\n    state.getRefinedDisjunctiveFacets().forEach(function (refinedFacet) {\n      queries.push({\n        indexName: index,\n        params: requestBuilder._getDisjunctiveFacetSearchParams(\n          state,\n          refinedFacet\n        ),\n      });\n    });\n\n    // More to get the parent levels of the hierarchical facets when refined\n    state.getRefinedHierarchicalFacets().forEach(function (refinedFacet) {\n      var hierarchicalFacet = state.getHierarchicalFacetByName(refinedFacet);\n      var currentRefinement = state.getHierarchicalRefinement(refinedFacet);\n      var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n\n      // If we are deeper than level 0 (starting from `beer > IPA`)\n      // we want to get all parent values\n      if (\n        currentRefinement.length > 0 &&\n        currentRefinement[0].split(separator).length > 1\n      ) {\n        // We generate a map of the filters we will use for our facet values queries\n        var filtersMap = currentRefinement[0]\n          .split(separator)\n          .slice(0, -1)\n          .reduce(function createFiltersMap(map, segment, level) {\n            return map.concat({\n              attribute: hierarchicalFacet.attributes[level],\n              value:\n                level === 0\n                  ? segment\n                  : [map[map.length - 1].value, segment].join(separator),\n            });\n          }, []);\n\n        filtersMap.forEach(function (filter, level) {\n          var params = requestBuilder._getDisjunctiveFacetSearchParams(\n            state,\n            filter.attribute,\n            level === 0\n          );\n\n          // Keep facet filters unrelated to current hierarchical attributes\n          function hasHierarchicalFacetFilter(value) {\n            return hierarchicalFacet.attributes.some(function (attribute) {\n              return attribute === value.split(':')[0];\n            });\n          }\n\n          var filteredFacetFilters = (params.facetFilters || []).reduce(\n            function (acc, facetFilter) {\n              if (Array.isArray(facetFilter)) {\n                var filtered = facetFilter.filter(function (filterValue) {\n                  return !hasHierarchicalFacetFilter(filterValue);\n                });\n\n                if (filtered.length > 0) {\n                  acc.push(filtered);\n                }\n              }\n\n              if (\n                typeof facetFilter === 'string' &&\n                !hasHierarchicalFacetFilter(facetFilter)\n              ) {\n                acc.push(facetFilter);\n              }\n\n              return acc;\n            },\n            []\n          );\n\n          var parent = filtersMap[level - 1];\n          if (level > 0) {\n            params.facetFilters = filteredFacetFilters.concat(\n              parent.attribute + ':' + parent.value\n            );\n          } else if (filteredFacetFilters.length > 0) {\n            params.facetFilters = filteredFacetFilters;\n          } else {\n            delete params.facetFilters;\n          }\n\n          queries.push({ indexName: index, params: params });\n        });\n      }\n    });\n\n    return queries;\n  },\n\n  /**\n   * Build search parameters used to fetch hits\n   * @private\n   * @param  {SearchParameters} state The state from which to get the queries\n   * @return {object.<string, any>} The search parameters for hits\n   */\n  _getHitsSearchParams: function (state) {\n    var facets = state.facets\n      .concat(state.disjunctiveFacets)\n      .concat(requestBuilder._getHitsHierarchicalFacetsAttributes(state))\n      .sort();\n\n    var facetFilters = requestBuilder._getFacetFilters(state);\n    var numericFilters = requestBuilder._getNumericFilters(state);\n    var tagFilters = requestBuilder._getTagFilters(state);\n    var additionalParams = {};\n\n    if (facets.length > 0) {\n      additionalParams.facets = facets.indexOf('*') > -1 ? ['*'] : facets;\n    }\n\n    if (tagFilters.length > 0) {\n      additionalParams.tagFilters = tagFilters;\n    }\n\n    if (facetFilters.length > 0) {\n      additionalParams.facetFilters = facetFilters;\n    }\n\n    if (numericFilters.length > 0) {\n      additionalParams.numericFilters = numericFilters;\n    }\n\n    return sortObject(merge({}, state.getQueryParams(), additionalParams));\n  },\n\n  /**\n   * Build search parameters used to fetch a disjunctive facet\n   * @private\n   * @param  {SearchParameters} state The state from which to get the queries\n   * @param  {string} facet the associated facet name\n   * @param  {boolean} hierarchicalRootLevel ?? FIXME\n   * @return {object} The search parameters for a disjunctive facet\n   */\n  _getDisjunctiveFacetSearchParams: function (\n    state,\n    facet,\n    hierarchicalRootLevel\n  ) {\n    var facetFilters = requestBuilder._getFacetFilters(\n      state,\n      facet,\n      hierarchicalRootLevel\n    );\n    var numericFilters = requestBuilder._getNumericFilters(state, facet);\n    var tagFilters = requestBuilder._getTagFilters(state);\n    var additionalParams = {\n      hitsPerPage: 0,\n      page: 0,\n      analytics: false,\n      clickAnalytics: false,\n    };\n\n    if (tagFilters.length > 0) {\n      additionalParams.tagFilters = tagFilters;\n    }\n\n    var hierarchicalFacet = state.getHierarchicalFacetByName(facet);\n\n    if (hierarchicalFacet) {\n      additionalParams.facets =\n        requestBuilder._getDisjunctiveHierarchicalFacetAttribute(\n          state,\n          hierarchicalFacet,\n          hierarchicalRootLevel\n        );\n    } else {\n      additionalParams.facets = facet;\n    }\n\n    if (numericFilters.length > 0) {\n      additionalParams.numericFilters = numericFilters;\n    }\n\n    if (facetFilters.length > 0) {\n      additionalParams.facetFilters = facetFilters;\n    }\n\n    return sortObject(merge({}, state.getQueryParams(), additionalParams));\n  },\n\n  /**\n   * Return the numeric filters in an algolia request fashion\n   * @private\n   * @param {SearchParameters} state the state from which to get the filters\n   * @param {string} [facetName] the name of the attribute for which the filters should be excluded\n   * @return {string[]} the numeric filters in the algolia format\n   */\n  _getNumericFilters: function (state, facetName) {\n    if (state.numericFilters) {\n      return state.numericFilters;\n    }\n\n    var numericFilters = [];\n\n    Object.keys(state.numericRefinements).forEach(function (attribute) {\n      var operators = state.numericRefinements[attribute] || {};\n      Object.keys(operators).forEach(function (operator) {\n        var values = operators[operator] || [];\n        if (facetName !== attribute) {\n          values.forEach(function (value) {\n            if (Array.isArray(value)) {\n              var vs = value.map(function (v) {\n                return attribute + operator + v;\n              });\n              numericFilters.push(vs);\n            } else {\n              numericFilters.push(attribute + operator + value);\n            }\n          });\n        }\n      });\n    });\n\n    return numericFilters;\n  },\n\n  /**\n   * Return the tags filters depending on which format is used, either tagFilters or tagRefinements\n   * @private\n   * @param {SearchParameters} state the state from which to get the filters\n   * @return {string} Tag filters in a single string\n   */\n  _getTagFilters: function (state) {\n    if (state.tagFilters) {\n      return state.tagFilters;\n    }\n\n    return state.tagRefinements.join(',');\n  },\n\n  /**\n   * Build facetFilters parameter based on current refinements. The array returned\n   * contains strings representing the facet filters in the algolia format.\n   * @private\n   * @param  {SearchParameters} state The state from which to get the queries\n   * @param  {string} [facet] if set, the current disjunctive facet\n   * @param  {boolean} [hierarchicalRootLevel] ?? FIXME\n   * @return {array.<string>} The facet filters in the algolia format\n   */\n  _getFacetFilters: function (state, facet, hierarchicalRootLevel) {\n    var facetFilters = [];\n\n    var facetsRefinements = state.facetsRefinements || {};\n    Object.keys(facetsRefinements)\n      .sort()\n      .forEach(function (facetName) {\n        var facetValues = facetsRefinements[facetName] || [];\n        facetValues\n          .slice()\n          .sort()\n          .forEach(function (facetValue) {\n            facetFilters.push(facetName + ':' + facetValue);\n          });\n      });\n\n    var facetsExcludes = state.facetsExcludes || {};\n    Object.keys(facetsExcludes)\n      .sort()\n      .forEach(function (facetName) {\n        var facetValues = facetsExcludes[facetName] || [];\n        facetValues.sort().forEach(function (facetValue) {\n          facetFilters.push(facetName + ':-' + facetValue);\n        });\n      });\n\n    var disjunctiveFacetsRefinements = state.disjunctiveFacetsRefinements || {};\n    Object.keys(disjunctiveFacetsRefinements)\n      .sort()\n      .forEach(function (facetName) {\n        var facetValues = disjunctiveFacetsRefinements[facetName] || [];\n        if (facetName === facet || !facetValues || facetValues.length === 0) {\n          return;\n        }\n        var orFilters = [];\n\n        facetValues\n          .slice()\n          .sort()\n          .forEach(function (facetValue) {\n            orFilters.push(facetName + ':' + facetValue);\n          });\n\n        facetFilters.push(orFilters);\n      });\n\n    var hierarchicalFacetsRefinements =\n      state.hierarchicalFacetsRefinements || {};\n    Object.keys(hierarchicalFacetsRefinements)\n      .sort()\n      .forEach(function (facetName) {\n        var facetValues = hierarchicalFacetsRefinements[facetName] || [];\n        var facetValue = facetValues[0];\n\n        if (facetValue === undefined) {\n          return;\n        }\n\n        var hierarchicalFacet = state.getHierarchicalFacetByName(facetName);\n        var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n        var rootPath = state._getHierarchicalRootPath(hierarchicalFacet);\n        var attributeToRefine;\n        var attributesIndex;\n\n        // we ask for parent facet values only when the `facet` is the current hierarchical facet\n        if (facet === facetName) {\n          // if we are at the root level already, no need to ask for facet values, we get them from\n          // the hits query\n          if (\n            facetValue.indexOf(separator) === -1 ||\n            (!rootPath && hierarchicalRootLevel === true) ||\n            (rootPath &&\n              rootPath.split(separator).length ===\n                facetValue.split(separator).length)\n          ) {\n            return;\n          }\n\n          if (!rootPath) {\n            attributesIndex = facetValue.split(separator).length - 2;\n            facetValue = facetValue.slice(0, facetValue.lastIndexOf(separator));\n          } else {\n            attributesIndex = rootPath.split(separator).length - 1;\n            facetValue = rootPath;\n          }\n\n          attributeToRefine = hierarchicalFacet.attributes[attributesIndex];\n        } else {\n          attributesIndex = facetValue.split(separator).length - 1;\n\n          attributeToRefine = hierarchicalFacet.attributes[attributesIndex];\n        }\n\n        if (attributeToRefine) {\n          facetFilters.push([attributeToRefine + ':' + facetValue]);\n        }\n      });\n\n    return facetFilters;\n  },\n\n  _getHitsHierarchicalFacetsAttributes: function (state) {\n    var out = [];\n\n    return state.hierarchicalFacets.reduce(\n      // ask for as much levels as there's hierarchical refinements\n      function getHitsAttributesForHierarchicalFacet(\n        allAttributes,\n        hierarchicalFacet\n      ) {\n        var hierarchicalRefinement = state.getHierarchicalRefinement(\n          hierarchicalFacet.name\n        )[0];\n\n        // if no refinement, ask for root level\n        if (!hierarchicalRefinement) {\n          allAttributes.push(hierarchicalFacet.attributes[0]);\n          return allAttributes;\n        }\n\n        var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n        var level = hierarchicalRefinement.split(separator).length;\n        var newAttributes = hierarchicalFacet.attributes.slice(0, level + 1);\n\n        return allAttributes.concat(newAttributes);\n      },\n      out\n    );\n  },\n\n  _getDisjunctiveHierarchicalFacetAttribute: function (\n    state,\n    hierarchicalFacet,\n    rootLevel\n  ) {\n    var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n    if (rootLevel === true) {\n      var rootPath = state._getHierarchicalRootPath(hierarchicalFacet);\n      var attributeIndex = 0;\n\n      if (rootPath) {\n        attributeIndex = rootPath.split(separator).length;\n      }\n      return [hierarchicalFacet.attributes[attributeIndex]];\n    }\n\n    var hierarchicalRefinement =\n      state.getHierarchicalRefinement(hierarchicalFacet.name)[0] || '';\n    // if refinement is 'beers > IPA > Flying dog',\n    // then we want `facets: ['beers > IPA']` as disjunctive facet (parent level values)\n\n    var parentLevel = hierarchicalRefinement.split(separator).length - 1;\n    return hierarchicalFacet.attributes.slice(0, parentLevel + 1);\n  },\n\n  getSearchForFacetQuery: function (facetName, query, maxFacetHits, state) {\n    var stateForSearchForFacetValues = state.isDisjunctiveFacet(facetName)\n      ? state.clearRefinements(facetName)\n      : state;\n    var searchForFacetSearchParameters = {\n      facetQuery: query,\n      facetName: facetName,\n    };\n    if (typeof maxFacetHits === 'number') {\n      searchForFacetSearchParameters.maxFacetHits = maxFacetHits;\n    }\n    return sortObject(\n      merge(\n        {},\n        requestBuilder._getHitsSearchParams(stateForSearchForFacetValues),\n        searchForFacetSearchParameters\n      )\n    );\n  },\n};\n\nmodule.exports = requestBuilder;\n","'use strict';\n\nmodule.exports = function isValidUserToken(userToken) {\n  if (userToken === null) {\n    return false;\n  }\n  return /^[a-zA-Z0-9_-]{1,64}$/.test(userToken);\n};\n","'use strict';\n\nvar find = require('../functions/find');\nvar flat = require('../functions/flat');\n\nfunction getAverageIndices(indexTracker, nrOfObjs) {\n  var avgIndices = [];\n\n  Object.keys(indexTracker).forEach(function (key) {\n    if (indexTracker[key].count < 2) {\n      indexTracker[key].indexSum += 100;\n    }\n    avgIndices.push({\n      objectID: key,\n      avgOfIndices: indexTracker[key].indexSum / nrOfObjs,\n    });\n  });\n\n  return avgIndices.sort(function (a, b) {\n    return a.avgOfIndices > b.avgOfIndices ? 1 : -1;\n  });\n}\n\nfunction sortAndMergeRecommendations(results) {\n  var indexTracker = {};\n\n  results.forEach(function (hits) {\n    hits.forEach(function (hit, index) {\n      if (!indexTracker[hit.objectID]) {\n        indexTracker[hit.objectID] = { indexSum: index, count: 1 };\n      } else {\n        indexTracker[hit.objectID] = {\n          indexSum: indexTracker[hit.objectID].indexSum + index,\n          count: indexTracker[hit.objectID].count + 1,\n        };\n      }\n    });\n  });\n\n  var sortedAverageIndices = getAverageIndices(indexTracker, results.length);\n\n  var finalOrder = sortedAverageIndices.reduce(function (\n    orderedHits,\n    avgIndexRef\n  ) {\n    var result = find(flat(results), function (hit) {\n      return hit.objectID === avgIndexRef.objectID;\n    });\n    return result ? orderedHits.concat(result) : orderedHits;\n  },\n  []);\n\n  return finalOrder;\n}\n\nmodule.exports = sortAndMergeRecommendations;\n","'use strict';\n\nmodule.exports = '3.22.4';\n","/*! algoliasearch.umd.js | 4.24.0 | © Algolia, inc. | https://github.com/algolia/algoliasearch-client-javascript */\n!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=t||self).algoliasearch=e()}(this,(function(){\"use strict\";function t(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n<arguments.length;n++){var a=null!=arguments[n]?arguments[n]:{};n%2?e(Object(a),!0).forEach((function(e){t(r,e,a[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(a)):e(Object(a)).forEach((function(t){Object.defineProperty(r,t,Object.getOwnPropertyDescriptor(a,t))}))}return r}function n(t,e){if(null==t)return{};var r,n,a=function(t,e){if(null==t)return{};var r,n,a={},o=Object.keys(t);for(n=0;n<o.length;n++)r=o[n],e.indexOf(r)>=0||(a[r]=t[r]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n<o.length;n++)r=o[n],e.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(a[r]=t[r])}return a}function a(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if(!(Symbol.iterator in Object(t)||\"[object Arguments]\"===Object.prototype.toString.call(t)))return;var r=[],n=!0,a=!1,o=void 0;try{for(var i,u=t[Symbol.iterator]();!(n=(i=u.next()).done)&&(r.push(i.value),!e||r.length!==e);n=!0);}catch(t){a=!0,o=t}finally{try{n||null==u.return||u.return()}finally{if(a)throw o}}return r}(t,e)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}()}function o(t){return function(t){if(Array.isArray(t)){for(var e=0,r=new Array(t.length);e<t.length;e++)r[e]=t[e];return r}}(t)||function(t){if(Symbol.iterator in Object(t)||\"[object Arguments]\"===Object.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance\")}()}function i(t){var e,r=\"algoliasearch-client-js-\".concat(t.key),n=function(){return void 0===e&&(e=t.localStorage||window.localStorage),e},o=function(){return JSON.parse(n().getItem(r)||\"{}\")},i=function(t){n().setItem(r,JSON.stringify(t))},u=function(){var e=t.timeToLive?1e3*t.timeToLive:null,r=o(),n=Object.fromEntries(Object.entries(r).filter((function(t){return void 0!==a(t,2)[1].timestamp})));if(i(n),e){var u=Object.fromEntries(Object.entries(n).filter((function(t){var r=a(t,2)[1],n=(new Date).getTime();return!(r.timestamp+e<n)})));i(u)}};return{get:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){u();var e=JSON.stringify(t);return o()[e]})).then((function(t){return Promise.all([t?t.value:e(),void 0!==t])})).then((function(t){var e=a(t,2),n=e[0],o=e[1];return Promise.all([n,o||r.miss(n)])})).then((function(t){return a(t,1)[0]}))},set:function(t,e){return Promise.resolve().then((function(){var a=o();return a[JSON.stringify(t)]={timestamp:(new Date).getTime(),value:e},n().setItem(r,JSON.stringify(a)),e}))},delete:function(t){return Promise.resolve().then((function(){var e=o();delete e[JSON.stringify(t)],n().setItem(r,JSON.stringify(e))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function u(t){var e=o(t.caches),r=e.shift();return void 0===r?{get:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},n=e();return n.then((function(t){return Promise.all([t,r.miss(t)])})).then((function(t){return a(t,1)[0]}))},set:function(t,e){return Promise.resolve(e)},delete:function(t){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(t,n){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(t,n,a).catch((function(){return u({caches:e}).get(t,n,a)}))},set:function(t,n){return r.set(t,n).catch((function(){return u({caches:e}).set(t,n)}))},delete:function(t){return r.delete(t).catch((function(){return u({caches:e}).delete(t)}))},clear:function(){return r.clear().catch((function(){return u({caches:e}).clear()}))}}}function s(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},e={};return{get:function(r,n){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},o=JSON.stringify(r);if(o in e)return Promise.resolve(t.serializable?JSON.parse(e[o]):e[o]);var i=n(),u=a&&a.miss||function(){return Promise.resolve()};return i.then((function(t){return u(t)})).then((function(){return i}))},set:function(r,n){return e[JSON.stringify(r)]=t.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(t){return delete e[JSON.stringify(t)],Promise.resolve()},clear:function(){return e={},Promise.resolve()}}}function c(t,e,r){var n={\"x-algolia-api-key\":r,\"x-algolia-application-id\":e};return{headers:function(){return t===m.WithinHeaders?n:{}},queryParameters:function(){return t===m.WithinQueryParameters?n:{}}}}function f(t){var e=0;return t((function r(){return e++,new Promise((function(n){setTimeout((function(){n(t(r))}),Math.min(100*e,1e3))}))}))}function d(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(t,e){return Promise.resolve()};return Object.assign(t,{wait:function(r){return d(t.then((function(t){return Promise.all([e(t,r),t])})).then((function(t){return t[1]})))}})}function l(t){for(var e=t.length-1;e>0;e--){var r=Math.floor(Math.random()*(e+1)),n=t[e];t[e]=t[r],t[r]=n}return t}function h(t,e){return e?(Object.keys(e).forEach((function(r){t[r]=e[r](t)})),t):t}function p(t){for(var e=arguments.length,r=new Array(e>1?e-1:0),n=1;n<e;n++)r[n-1]=arguments[n];var a=0;return t.replace(/%s/g,(function(){return encodeURIComponent(r[a++])}))}var m={WithinQueryParameters:0,WithinHeaders:1};function y(t,e){var r=t||{},n=r.data||{};return Object.keys(r).forEach((function(t){-1===[\"timeout\",\"headers\",\"queryParameters\",\"data\",\"cacheable\"].indexOf(t)&&(n[t]=r[t])})),{data:Object.entries(n).length>0?n:void 0,timeout:r.timeout||e,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var g={Read:1,Write:2,Any:3},v=1,b=2,P=3;function O(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:v;return r(r({},t),{},{status:e,lastUpdate:Date.now()})}function w(t){return\"string\"==typeof t?{protocol:\"https\",url:t,accept:g.Any}:{protocol:t.protocol||\"https\",url:t.url,accept:t.accept||g.Any}}var I=\"DELETE\",x=\"GET\",j=\"POST\",D=\"PUT\";function q(t,e){return Promise.all(e.map((function(e){return t.get(e,(function(){return Promise.resolve(O(e))}))}))).then((function(t){var r=t.filter((function(t){return function(t){return t.status===v||Date.now()-t.lastUpdate>12e4}(t)})),n=t.filter((function(t){return function(t){return t.status===P&&Date.now()-t.lastUpdate<=12e4}(t)})),a=[].concat(o(r),o(n));return{getTimeout:function(t,e){return(0===n.length&&0===t?1:n.length+3+t)*e},statelessHosts:a.length>0?a.map((function(t){return w(t)})):e}}))}function S(t,e,n,a){var i=[],u=function(t,e){if(t.method===x||void 0===t.data&&void 0===e.data)return;var n=Array.isArray(t.data)?t.data:r(r({},t.data),e.data);return JSON.stringify(n)}(n,a),s=function(t,e){var n=r(r({},t.headers),e.headers),a={};return Object.keys(n).forEach((function(t){var e=n[t];a[t.toLowerCase()]=e})),a}(t,a),c=n.method,f=n.method!==x?{}:r(r({},n.data),a.data),d=r(r(r({\"x-algolia-agent\":t.userAgent.value},t.queryParameters),f),a.queryParameters),l=0,h=function e(r,o){var f=r.pop();if(void 0===f)throw{name:\"RetryError\",message:\"Unreachable hosts - your application id may be incorrect. If the error persists, please reach out to the Algolia Support team: https://alg.li/support .\",transporterStackTrace:E(i)};var h={data:u,headers:s,method:c,url:N(f,n.path,d),connectTimeout:o(l,t.timeouts.connect),responseTimeout:o(l,a.timeout)},p=function(t){var e={request:h,response:t,host:f,triesLeft:r.length};return i.push(e),e},m={onSuccess:function(t){return function(t){try{return JSON.parse(t.content)}catch(e){throw function(t,e){return{name:\"DeserializationError\",message:t,response:e}}(e.message,t)}}(t)},onRetry:function(n){var a=p(n);return n.isTimedOut&&l++,Promise.all([t.logger.info(\"Retryable failure\",A(a)),t.hostsCache.set(f,O(f,n.isTimedOut?P:b))]).then((function(){return e(r,o)}))},onFail:function(t){throw p(t),function(t,e){var r=t.content,n=t.status,a=r;try{a=JSON.parse(r).message}catch(t){}return function(t,e,r){return{name:\"ApiError\",message:t,status:e,transporterStackTrace:r}}(a,n,e)}(t,E(i))}};return t.requester.send(h).then((function(t){return function(t,e){return function(t){var e=t.status;return t.isTimedOut||function(t){var e=t.isTimedOut,r=t.status;return!e&&0==~~r}(t)||2!=~~(e/100)&&4!=~~(e/100)}(t)?e.onRetry(t):2==~~(t.status/100)?e.onSuccess(t):e.onFail(t)}(t,m)}))};return q(t.hostsCache,e).then((function(t){return h(o(t.statelessHosts).reverse(),t.getTimeout)}))}function k(t){var e=t.hostsCache,r=t.logger,n=t.requester,o=t.requestsCache,i=t.responsesCache,u=t.timeouts,s=t.userAgent,c=t.hosts,f=t.queryParameters,d={hostsCache:e,logger:r,requester:n,requestsCache:o,responsesCache:i,timeouts:u,userAgent:s,headers:t.headers,queryParameters:f,hosts:c.map((function(t){return w(t)})),read:function(t,e){var r=y(e,d.timeouts.read),n=function(){return S(d,d.hosts.filter((function(t){return 0!=(t.accept&g.Read)})),t,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:t.cacheable))return n();var o={request:t,mappedRequestOptions:r,transporter:{queryParameters:d.queryParameters,headers:d.headers}};return d.responsesCache.get(o,(function(){return d.requestsCache.get(o,(function(){return d.requestsCache.set(o,n()).then((function(t){return Promise.all([d.requestsCache.delete(o),t])}),(function(t){return Promise.all([d.requestsCache.delete(o),Promise.reject(t)])})).then((function(t){var e=a(t,2);e[0];return e[1]}))}))}),{miss:function(t){return d.responsesCache.set(o,t)}})},write:function(t,e){return S(d,d.hosts.filter((function(t){return 0!=(t.accept&g.Write)})),t,y(e,d.timeouts.write))}};return d}function T(t){var e={value:\"Algolia for JavaScript (\".concat(t,\")\"),add:function(t){var r=\"; \".concat(t.segment).concat(void 0!==t.version?\" (\".concat(t.version,\")\"):\"\");return-1===e.value.indexOf(r)&&(e.value=\"\".concat(e.value).concat(r)),e}};return e}function N(t,e,r){var n=R(r),a=\"\".concat(t.protocol,\"://\").concat(t.url,\"/\").concat(\"/\"===e.charAt(0)?e.substr(1):e);return n.length&&(a+=\"?\".concat(n)),a}function R(t){return Object.keys(t).map((function(e){return p(\"%s=%s\",e,(r=t[e],\"[object Object]\"===Object.prototype.toString.call(r)||\"[object Array]\"===Object.prototype.toString.call(r)?JSON.stringify(t[e]):t[e]));var r})).join(\"&\")}function E(t){return t.map((function(t){return A(t)}))}function A(t){var e=t.request.headers[\"x-algolia-api-key\"]?{\"x-algolia-api-key\":\"*****\"}:{};return r(r({},t),{},{request:r(r({},t.request),{},{headers:r(r({},t.request.headers),e)})})}var C=function(t){return function(e,r){return t.transporter.write({method:j,path:\"2/abtests\",data:e},r)}},U=function(t){return function(e,r){return t.transporter.write({method:I,path:p(\"2/abtests/%s\",e)},r)}},z=function(t){return function(e,r){return t.transporter.read({method:x,path:p(\"2/abtests/%s\",e)},r)}},J=function(t){return function(e){return t.transporter.read({method:x,path:\"2/abtests\"},e)}},F=function(t){return function(e,r){return t.transporter.write({method:j,path:p(\"2/abtests/%s/stop\",e)},r)}},H=function(t){return function(e){return t.transporter.read({method:x,path:\"1/strategies/personalization\"},e)}},M=function(t){return function(e,r){return t.transporter.write({method:j,path:\"1/strategies/personalization\",data:e},r)}};function B(t){return function e(r){return t.request(r).then((function(n){if(void 0!==t.batch&&t.batch(n.hits),!t.shouldStop(n))return n.cursor?e({cursor:n.cursor}):e({page:(r.page||0)+1})}))}({})}var K=function(t){return function(e,a){var o=a||{},i=o.queryParameters,u=n(o,[\"queryParameters\"]),s=r({acl:e},void 0!==i?{queryParameters:i}:{});return d(t.transporter.write({method:j,path:\"1/keys\",data:s},u),(function(e,r){return f((function(n){return tt(t)(e.key,r).catch((function(t){if(404!==t.status)throw t;return n()}))}))}))}},W=function(t){return function(e,r,n){var a=y(n);return a.queryParameters[\"X-Algolia-User-ID\"]=e,t.transporter.write({method:j,path:\"1/clusters/mapping\",data:{cluster:r}},a)}},L=function(t){return function(e,r,n){return t.transporter.write({method:j,path:\"1/clusters/mapping/batch\",data:{users:e,cluster:r}},n)}},Q=function(t){return function(e,r){return d(t.transporter.write({method:j,path:p(\"/1/dictionaries/%s/batch\",e),data:{clearExistingDictionaryEntries:!0,requests:{action:\"addEntry\",body:[]}}},r),(function(e,r){return jt(t)(e.taskID,r)}))}},G=function(t){return function(e,r,n){return d(t.transporter.write({method:j,path:p(\"1/indexes/%s/operation\",e),data:{operation:\"copy\",destination:r}},n),(function(r,n){return ut(t)(e,{methods:{waitTask:de}}).waitTask(r.taskID,n)}))}},V=function(t){return function(e,n,a){return G(t)(e,n,r(r({},a),{},{scope:[he.Rules]}))}},_=function(t){return function(e,n,a){return G(t)(e,n,r(r({},a),{},{scope:[he.Settings]}))}},X=function(t){return function(e,n,a){return G(t)(e,n,r(r({},a),{},{scope:[he.Synonyms]}))}},Y=function(t){return function(e,r){return e.method===x?t.transporter.read(e,r):t.transporter.write(e,r)}},Z=function(t){return function(e,r){return d(t.transporter.write({method:I,path:p(\"1/keys/%s\",e)},r),(function(r,n){return f((function(r){return tt(t)(e,n).then(r).catch((function(t){if(404!==t.status)throw t}))}))}))}},$=function(t){return function(e,r,n){var a=r.map((function(t){return{action:\"deleteEntry\",body:{objectID:t}}}));return d(t.transporter.write({method:j,path:p(\"/1/dictionaries/%s/batch\",e),data:{clearExistingDictionaryEntries:!1,requests:a}},n),(function(e,r){return jt(t)(e.taskID,r)}))}},tt=function(t){return function(e,r){return t.transporter.read({method:x,path:p(\"1/keys/%s\",e)},r)}},et=function(t){return function(e,r){return t.transporter.read({method:x,path:p(\"1/task/%s\",e.toString())},r)}},rt=function(t){return function(e){return t.transporter.read({method:x,path:\"/1/dictionaries/*/settings\"},e)}},nt=function(t){return function(e){return t.transporter.read({method:x,path:\"1/logs\"},e)}},at=function(t){return function(e){return t.transporter.read({method:x,path:\"1/clusters/mapping/top\"},e)}},ot=function(t){return function(e,r){return t.transporter.read({method:x,path:p(\"1/clusters/mapping/%s\",e)},r)}},it=function(t){return function(e){var r=e||{},a=r.retrieveMappings,o=n(r,[\"retrieveMappings\"]);return!0===a&&(o.getClusters=!0),t.transporter.read({method:x,path:\"1/clusters/mapping/pending\"},o)}},ut=function(t){return function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={transporter:t.transporter,appId:t.appId,indexName:e};return h(n,r.methods)}},st=function(t){return function(e){return t.transporter.read({method:x,path:\"1/keys\"},e)}},ct=function(t){return function(e){return t.transporter.read({method:x,path:\"1/clusters\"},e)}},ft=function(t){return function(e){return t.transporter.read({method:x,path:\"1/indexes\"},e)}},dt=function(t){return function(e){return t.transporter.read({method:x,path:\"1/clusters/mapping\"},e)}},lt=function(t){return function(e,r,n){return d(t.transporter.write({method:j,path:p(\"1/indexes/%s/operation\",e),data:{operation:\"move\",destination:r}},n),(function(r,n){return ut(t)(e,{methods:{waitTask:de}}).waitTask(r.taskID,n)}))}},ht=function(t){return function(e,r){return d(t.transporter.write({method:j,path:\"1/indexes/*/batch\",data:{requests:e}},r),(function(e,r){return Promise.all(Object.keys(e.taskID).map((function(n){return ut(t)(n,{methods:{waitTask:de}}).waitTask(e.taskID[n],r)})))}))}},pt=function(t){return function(e,r){return t.transporter.read({method:j,path:\"1/indexes/*/objects\",data:{requests:e}},r)}},mt=function(t){return function(e,n){var a=e.map((function(t){return r(r({},t),{},{params:R(t.params||{})})}));return t.transporter.read({method:j,path:\"1/indexes/*/queries\",data:{requests:a},cacheable:!0},n)}},yt=function(t){return function(e,a){return Promise.all(e.map((function(e){var o=e.params,i=o.facetName,u=o.facetQuery,s=n(o,[\"facetName\",\"facetQuery\"]);return ut(t)(e.indexName,{methods:{searchForFacetValues:ue}}).searchForFacetValues(i,u,r(r({},a),s))})))}},gt=function(t){return function(e,r){var n=y(r);return n.queryParameters[\"X-Algolia-User-ID\"]=e,t.transporter.write({method:I,path:\"1/clusters/mapping\"},n)}},vt=function(t){return function(e,r,n){var a=r.map((function(t){return{action:\"addEntry\",body:t}}));return d(t.transporter.write({method:j,path:p(\"/1/dictionaries/%s/batch\",e),data:{clearExistingDictionaryEntries:!0,requests:a}},n),(function(e,r){return jt(t)(e.taskID,r)}))}},bt=function(t){return function(e,r){return d(t.transporter.write({method:j,path:p(\"1/keys/%s/restore\",e)},r),(function(r,n){return f((function(r){return tt(t)(e,n).catch((function(t){if(404!==t.status)throw t;return r()}))}))}))}},Pt=function(t){return function(e,r,n){var a=r.map((function(t){return{action:\"addEntry\",body:t}}));return d(t.transporter.write({method:j,path:p(\"/1/dictionaries/%s/batch\",e),data:{clearExistingDictionaryEntries:!1,requests:a}},n),(function(e,r){return jt(t)(e.taskID,r)}))}},Ot=function(t){return function(e,r,n){return t.transporter.read({method:j,path:p(\"/1/dictionaries/%s/search\",e),data:{query:r},cacheable:!0},n)}},wt=function(t){return function(e,r){return t.transporter.read({method:j,path:\"1/clusters/mapping/search\",data:{query:e}},r)}},It=function(t){return function(e,r){return d(t.transporter.write({method:D,path:\"/1/dictionaries/*/settings\",data:e},r),(function(e,r){return jt(t)(e.taskID,r)}))}},xt=function(t){return function(e,r){var a=Object.assign({},r),o=r||{},i=o.queryParameters,u=n(o,[\"queryParameters\"]),s=i?{queryParameters:i}:{},c=[\"acl\",\"indexes\",\"referers\",\"restrictSources\",\"queryParameters\",\"description\",\"maxQueriesPerIPPerHour\",\"maxHitsPerQuery\"];return d(t.transporter.write({method:D,path:p(\"1/keys/%s\",e),data:s},u),(function(r,n){return f((function(r){return tt(t)(e,n).then((function(t){return function(t){return Object.keys(a).filter((function(t){return-1!==c.indexOf(t)})).every((function(e){if(Array.isArray(t[e])&&Array.isArray(a[e])){var r=t[e];return r.length===a[e].length&&r.every((function(t,r){return t===a[e][r]}))}return t[e]===a[e]}))}(t)?Promise.resolve():r()}))}))}))}},jt=function(t){return function(e,r){return f((function(n){return et(t)(e,r).then((function(t){return\"published\"!==t.status?n():void 0}))}))}},Dt=function(t){return function(e,r){return d(t.transporter.write({method:j,path:p(\"1/indexes/%s/batch\",t.indexName),data:{requests:e}},r),(function(e,r){return de(t)(e.taskID,r)}))}},qt=function(t){return function(e){return B(r(r({shouldStop:function(t){return void 0===t.cursor}},e),{},{request:function(r){return t.transporter.read({method:j,path:p(\"1/indexes/%s/browse\",t.indexName),data:r},e)}}))}},St=function(t){return function(e){var n=r({hitsPerPage:1e3},e);return B(r(r({shouldStop:function(t){return t.hits.length<n.hitsPerPage}},n),{},{request:function(e){return se(t)(\"\",r(r({},n),e)).then((function(t){return r(r({},t),{},{hits:t.hits.map((function(t){return delete t._highlightResult,t}))})}))}}))}},kt=function(t){return function(e){var n=r({hitsPerPage:1e3},e);return B(r(r({shouldStop:function(t){return t.hits.length<n.hitsPerPage}},n),{},{request:function(e){return ce(t)(\"\",r(r({},n),e)).then((function(t){return r(r({},t),{},{hits:t.hits.map((function(t){return delete t._highlightResult,t}))})}))}}))}},Tt=function(t){return function(e,r,a){var o=a||{},i=o.batchSize,u=n(o,[\"batchSize\"]),s={taskIDs:[],objectIDs:[]};return d(function n(){var a,o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,c=[];for(a=o;a<e.length&&(c.push(e[a]),c.length!==(i||1e3));a++);return 0===c.length?Promise.resolve(s):Dt(t)(c.map((function(t){return{action:r,body:t}})),u).then((function(t){return s.objectIDs=s.objectIDs.concat(t.objectIDs),s.taskIDs.push(t.taskID),a++,n(a)}))}(),(function(e,r){return Promise.all(e.taskIDs.map((function(e){return de(t)(e,r)})))}))}},Nt=function(t){return function(e){return d(t.transporter.write({method:j,path:p(\"1/indexes/%s/clear\",t.indexName)},e),(function(e,r){return de(t)(e.taskID,r)}))}},Rt=function(t){return function(e){var r=e||{},a=r.forwardToReplicas,o=y(n(r,[\"forwardToReplicas\"]));return a&&(o.queryParameters.forwardToReplicas=1),d(t.transporter.write({method:j,path:p(\"1/indexes/%s/rules/clear\",t.indexName)},o),(function(e,r){return de(t)(e.taskID,r)}))}},Et=function(t){return function(e){var r=e||{},a=r.forwardToReplicas,o=y(n(r,[\"forwardToReplicas\"]));return a&&(o.queryParameters.forwardToReplicas=1),d(t.transporter.write({method:j,path:p(\"1/indexes/%s/synonyms/clear\",t.indexName)},o),(function(e,r){return de(t)(e.taskID,r)}))}},At=function(t){return function(e,r){return d(t.transporter.write({method:j,path:p(\"1/indexes/%s/deleteByQuery\",t.indexName),data:e},r),(function(e,r){return de(t)(e.taskID,r)}))}},Ct=function(t){return function(e){return d(t.transporter.write({method:I,path:p(\"1/indexes/%s\",t.indexName)},e),(function(e,r){return de(t)(e.taskID,r)}))}},Ut=function(t){return function(e,r){return d(zt(t)([e],r).then((function(t){return{taskID:t.taskIDs[0]}})),(function(e,r){return de(t)(e.taskID,r)}))}},zt=function(t){return function(e,r){var n=e.map((function(t){return{objectID:t}}));return Tt(t)(n,le.DeleteObject,r)}},Jt=function(t){return function(e,r){var a=r||{},o=a.forwardToReplicas,i=y(n(a,[\"forwardToReplicas\"]));return o&&(i.queryParameters.forwardToReplicas=1),d(t.transporter.write({method:I,path:p(\"1/indexes/%s/rules/%s\",t.indexName,e)},i),(function(e,r){return de(t)(e.taskID,r)}))}},Ft=function(t){return function(e,r){var a=r||{},o=a.forwardToReplicas,i=y(n(a,[\"forwardToReplicas\"]));return o&&(i.queryParameters.forwardToReplicas=1),d(t.transporter.write({method:I,path:p(\"1/indexes/%s/synonyms/%s\",t.indexName,e)},i),(function(e,r){return de(t)(e.taskID,r)}))}},Ht=function(t){return function(e){return Gt(t)(e).then((function(){return!0})).catch((function(t){if(404!==t.status)throw t;return!1}))}},Mt=function(t){return function(e,r,n){return t.transporter.read({method:j,path:p(\"1/answers/%s/prediction\",t.indexName),data:{query:e,queryLanguages:r},cacheable:!0},n)}},Bt=function(t){return function(e,o){var i=o||{},u=i.query,s=i.paginate,c=n(i,[\"query\",\"paginate\"]),f=0;return function n(){return ie(t)(u||\"\",r(r({},c),{},{page:f})).then((function(t){for(var r=0,o=Object.entries(t.hits);r<o.length;r++){var i=a(o[r],2),u=i[0],c=i[1];if(e(c))return{object:c,position:parseInt(u,10),page:f}}if(f++,!1===s||f>=t.nbPages)throw{name:\"ObjectNotFoundError\",message:\"Object not found.\"};return n()}))}()}},Kt=function(t){return function(e,r){return t.transporter.read({method:x,path:p(\"1/indexes/%s/%s\",t.indexName,e)},r)}},Wt=function(){return function(t,e){for(var r=0,n=Object.entries(t.hits);r<n.length;r++){var o=a(n[r],2),i=o[0];if(o[1].objectID===e)return parseInt(i,10)}return-1}},Lt=function(t){return function(e,a){var o=a||{},i=o.attributesToRetrieve,u=n(o,[\"attributesToRetrieve\"]),s=e.map((function(e){return r({indexName:t.indexName,objectID:e},i?{attributesToRetrieve:i}:{})}));return t.transporter.read({method:j,path:\"1/indexes/*/objects\",data:{requests:s}},u)}},Qt=function(t){return function(e,r){return t.transporter.read({method:x,path:p(\"1/indexes/%s/rules/%s\",t.indexName,e)},r)}},Gt=function(t){return function(e){return t.transporter.read({method:x,path:p(\"1/indexes/%s/settings\",t.indexName),data:{getVersion:2}},e)}},Vt=function(t){return function(e,r){return t.transporter.read({method:x,path:p(\"1/indexes/%s/synonyms/%s\",t.indexName,e)},r)}},_t=function(t){return function(e,r){return d(Xt(t)([e],r).then((function(t){return{objectID:t.objectIDs[0],taskID:t.taskIDs[0]}})),(function(e,r){return de(t)(e.taskID,r)}))}},Xt=function(t){return function(e,r){var a=r||{},o=a.createIfNotExists,i=n(a,[\"createIfNotExists\"]),u=o?le.PartialUpdateObject:le.PartialUpdateObjectNoCreate;return Tt(t)(e,u,i)}},Yt=function(t){return function(e,i){var u=i||{},s=u.safe,c=u.autoGenerateObjectIDIfNotExist,f=u.batchSize,l=n(u,[\"safe\",\"autoGenerateObjectIDIfNotExist\",\"batchSize\"]),h=function(e,r,n,a){return d(t.transporter.write({method:j,path:p(\"1/indexes/%s/operation\",e),data:{operation:n,destination:r}},a),(function(e,r){return de(t)(e.taskID,r)}))},m=Math.random().toString(36).substring(7),y=\"\".concat(t.indexName,\"_tmp_\").concat(m),g=ee({appId:t.appId,transporter:t.transporter,indexName:y}),v=[],b=h(t.indexName,y,\"copy\",r(r({},l),{},{scope:[\"settings\",\"synonyms\",\"rules\"]}));return v.push(b),d((s?b.wait(l):b).then((function(){var t=g(e,r(r({},l),{},{autoGenerateObjectIDIfNotExist:c,batchSize:f}));return v.push(t),s?t.wait(l):t})).then((function(){var e=h(y,t.indexName,\"move\",l);return v.push(e),s?e.wait(l):e})).then((function(){return Promise.all(v)})).then((function(t){var e=a(t,3),r=e[0],n=e[1],i=e[2];return{objectIDs:n.objectIDs,taskIDs:[r.taskID].concat(o(n.taskIDs),[i.taskID])}})),(function(t,e){return Promise.all(v.map((function(t){return t.wait(e)})))}))}},Zt=function(t){return function(e,n){return ne(t)(e,r(r({},n),{},{clearExistingRules:!0}))}},$t=function(t){return function(e,n){return oe(t)(e,r(r({},n),{},{clearExistingSynonyms:!0}))}},te=function(t){return function(e,r){return d(ee(t)([e],r).then((function(t){return{objectID:t.objectIDs[0],taskID:t.taskIDs[0]}})),(function(e,r){return de(t)(e.taskID,r)}))}},ee=function(t){return function(e,r){var a=r||{},o=a.autoGenerateObjectIDIfNotExist,i=n(a,[\"autoGenerateObjectIDIfNotExist\"]),u=o?le.AddObject:le.UpdateObject;if(u===le.UpdateObject){var s=!0,c=!1,f=void 0;try{for(var l,h=e[Symbol.iterator]();!(s=(l=h.next()).done);s=!0){if(void 0===l.value.objectID)return d(Promise.reject({name:\"MissingObjectIDError\",message:\"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option.\"}))}}catch(t){c=!0,f=t}finally{try{s||null==h.return||h.return()}finally{if(c)throw f}}}return Tt(t)(e,u,i)}},re=function(t){return function(e,r){return ne(t)([e],r)}},ne=function(t){return function(e,r){var a=r||{},o=a.forwardToReplicas,i=a.clearExistingRules,u=y(n(a,[\"forwardToReplicas\",\"clearExistingRules\"]));return o&&(u.queryParameters.forwardToReplicas=1),i&&(u.queryParameters.clearExistingRules=1),d(t.transporter.write({method:j,path:p(\"1/indexes/%s/rules/batch\",t.indexName),data:e},u),(function(e,r){return de(t)(e.taskID,r)}))}},ae=function(t){return function(e,r){return oe(t)([e],r)}},oe=function(t){return function(e,r){var a=r||{},o=a.forwardToReplicas,i=a.clearExistingSynonyms,u=a.replaceExistingSynonyms,s=y(n(a,[\"forwardToReplicas\",\"clearExistingSynonyms\",\"replaceExistingSynonyms\"]));return o&&(s.queryParameters.forwardToReplicas=1),(u||i)&&(s.queryParameters.replaceExistingSynonyms=1),d(t.transporter.write({method:j,path:p(\"1/indexes/%s/synonyms/batch\",t.indexName),data:e},s),(function(e,r){return de(t)(e.taskID,r)}))}},ie=function(t){return function(e,r){return t.transporter.read({method:j,path:p(\"1/indexes/%s/query\",t.indexName),data:{query:e},cacheable:!0},r)}},ue=function(t){return function(e,r,n){return t.transporter.read({method:j,path:p(\"1/indexes/%s/facets/%s/query\",t.indexName,e),data:{facetQuery:r},cacheable:!0},n)}},se=function(t){return function(e,r){return t.transporter.read({method:j,path:p(\"1/indexes/%s/rules/search\",t.indexName),data:{query:e}},r)}},ce=function(t){return function(e,r){return t.transporter.read({method:j,path:p(\"1/indexes/%s/synonyms/search\",t.indexName),data:{query:e}},r)}},fe=function(t){return function(e,r){var a=r||{},o=a.forwardToReplicas,i=y(n(a,[\"forwardToReplicas\"]));return o&&(i.queryParameters.forwardToReplicas=1),d(t.transporter.write({method:D,path:p(\"1/indexes/%s/settings\",t.indexName),data:e},i),(function(e,r){return de(t)(e.taskID,r)}))}},de=function(t){return function(e,r){return f((function(n){return function(t){return function(e,r){return t.transporter.read({method:x,path:p(\"1/indexes/%s/task/%s\",t.indexName,e.toString())},r)}}(t)(e,r).then((function(t){return\"published\"!==t.status?n():void 0}))}))}},le={AddObject:\"addObject\",UpdateObject:\"updateObject\",PartialUpdateObject:\"partialUpdateObject\",PartialUpdateObjectNoCreate:\"partialUpdateObjectNoCreate\",DeleteObject:\"deleteObject\",DeleteIndex:\"delete\",ClearIndex:\"clear\"},he={Settings:\"settings\",Synonyms:\"synonyms\",Rules:\"rules\"},pe=1,me=2,ye=3;var ge=function(t){return function(e,n){var a=e.map((function(t){return r(r({},t),{},{threshold:t.threshold||0})}));return t.transporter.read({method:j,path:\"1/indexes/*/recommendations\",data:{requests:a},cacheable:!0},n)}},ve=function(t){return function(e,n){return ge(t)(e.map((function(t){return r(r({},t),{},{fallbackParameters:{},model:\"bought-together\"})})),n)}},be=function(t){return function(e,n){return ge(t)(e.map((function(t){return r(r({},t),{},{model:\"related-products\"})})),n)}},Pe=function(t){return function(e,n){var a=e.map((function(t){return r(r({},t),{},{model:\"trending-facets\",threshold:t.threshold||0})}));return t.transporter.read({method:j,path:\"1/indexes/*/recommendations\",data:{requests:a},cacheable:!0},n)}},Oe=function(t){return function(e,n){var a=e.map((function(t){return r(r({},t),{},{model:\"trending-items\",threshold:t.threshold||0})}));return t.transporter.read({method:j,path:\"1/indexes/*/recommendations\",data:{requests:a},cacheable:!0},n)}},we=function(t){return function(e,n){return ge(t)(e.map((function(t){return r(r({},t),{},{model:\"looking-similar\"})})),n)}},Ie=function(t){return function(e,n){var a=e.map((function(t){return r(r({},t),{},{model:\"recommended-for-you\",threshold:t.threshold||0})}));return t.transporter.read({method:j,path:\"1/indexes/*/recommendations\",data:{requests:a},cacheable:!0},n)}};function xe(t,e,n){var a,o={appId:t,apiKey:e,timeouts:{connect:1,read:2,write:30},requester:{send:function(t){return new Promise((function(e){var r=new XMLHttpRequest;r.open(t.method,t.url,!0),Object.keys(t.headers).forEach((function(e){return r.setRequestHeader(e,t.headers[e])}));var n,a=function(t,n){return setTimeout((function(){r.abort(),e({status:0,content:n,isTimedOut:!0})}),1e3*t)},o=a(t.connectTimeout,\"Connection timeout\");r.onreadystatechange=function(){r.readyState>r.OPENED&&void 0===n&&(clearTimeout(o),n=a(t.responseTimeout,\"Socket timeout\"))},r.onerror=function(){0===r.status&&(clearTimeout(o),clearTimeout(n),e({content:r.responseText||\"Network request failed\",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(o),clearTimeout(n),e({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(t.data)}))}},logger:(a=ye,{debug:function(t,e){return pe>=a&&console.debug(t,e),Promise.resolve()},info:function(t,e){return me>=a&&console.info(t,e),Promise.resolve()},error:function(t,e){return console.error(t,e),Promise.resolve()}}),responsesCache:s(),requestsCache:s({serializable:!1}),hostsCache:u({caches:[i({key:\"\".concat(\"4.24.0\",\"-\").concat(t)}),s()]}),userAgent:T(\"4.24.0\").add({segment:\"Browser\"})},f=r(r({},o),n),d=function(){return function(t){return function(t){var e=t.region||\"us\",n=c(m.WithinHeaders,t.appId,t.apiKey),a=k(r(r({hosts:[{url:\"personalization.\".concat(e,\".algolia.com\")}]},t),{},{headers:r(r(r({},n.headers()),{\"content-type\":\"application/json\"}),t.headers),queryParameters:r(r({},n.queryParameters()),t.queryParameters)}));return h({appId:t.appId,transporter:a},t.methods)}(r(r(r({},o),t),{},{methods:{getPersonalizationStrategy:H,setPersonalizationStrategy:M}}))}};return function(t){var e=t.appId,n=c(void 0!==t.authMode?t.authMode:m.WithinHeaders,e,t.apiKey),a=k(r(r({hosts:[{url:\"\".concat(e,\"-dsn.algolia.net\"),accept:g.Read},{url:\"\".concat(e,\".algolia.net\"),accept:g.Write}].concat(l([{url:\"\".concat(e,\"-1.algolianet.com\")},{url:\"\".concat(e,\"-2.algolianet.com\")},{url:\"\".concat(e,\"-3.algolianet.com\")}]))},t),{},{headers:r(r(r({},n.headers()),{\"content-type\":\"application/x-www-form-urlencoded\"}),t.headers),queryParameters:r(r({},n.queryParameters()),t.queryParameters)}));return h({transporter:a,appId:e,addAlgoliaAgent:function(t,e){a.userAgent.add({segment:t,version:e})},clearCache:function(){return Promise.all([a.requestsCache.clear(),a.responsesCache.clear()]).then((function(){}))}},t.methods)}(r(r({},f),{},{methods:{search:mt,searchForFacetValues:yt,multipleBatch:ht,multipleGetObjects:pt,multipleQueries:mt,copyIndex:G,copySettings:_,copySynonyms:X,copyRules:V,moveIndex:lt,listIndices:ft,getLogs:nt,listClusters:ct,multipleSearchForFacetValues:yt,getApiKey:tt,addApiKey:K,listApiKeys:st,updateApiKey:xt,deleteApiKey:Z,restoreApiKey:bt,assignUserID:W,assignUserIDs:L,getUserID:ot,searchUserIDs:wt,listUserIDs:dt,getTopUserIDs:at,removeUserID:gt,hasPendingMappings:it,clearDictionaryEntries:Q,deleteDictionaryEntries:$,getDictionarySettings:rt,getAppTask:et,replaceDictionaryEntries:vt,saveDictionaryEntries:Pt,searchDictionaryEntries:Ot,setDictionarySettings:It,waitAppTask:jt,customRequest:Y,initIndex:function(t){return function(e){return ut(t)(e,{methods:{batch:Dt,delete:Ct,findAnswers:Mt,getObject:Kt,getObjects:Lt,saveObject:te,saveObjects:ee,search:ie,searchForFacetValues:ue,waitTask:de,setSettings:fe,getSettings:Gt,partialUpdateObject:_t,partialUpdateObjects:Xt,deleteObject:Ut,deleteObjects:zt,deleteBy:At,clearObjects:Nt,browseObjects:qt,getObjectPosition:Wt,findObject:Bt,exists:Ht,saveSynonym:ae,saveSynonyms:oe,getSynonym:Vt,searchSynonyms:ce,browseSynonyms:kt,deleteSynonym:Ft,clearSynonyms:Et,replaceAllObjects:Yt,replaceAllSynonyms:$t,searchRules:se,getRule:Qt,deleteRule:Jt,saveRule:re,saveRules:ne,replaceAllRules:Zt,browseRules:St,clearRules:Rt}})}},initAnalytics:function(){return function(t){return function(t){var e=t.region||\"us\",n=c(m.WithinHeaders,t.appId,t.apiKey),a=k(r(r({hosts:[{url:\"analytics.\".concat(e,\".algolia.com\")}]},t),{},{headers:r(r(r({},n.headers()),{\"content-type\":\"application/json\"}),t.headers),queryParameters:r(r({},n.queryParameters()),t.queryParameters)}));return h({appId:t.appId,transporter:a},t.methods)}(r(r(r({},o),t),{},{methods:{addABTest:C,getABTest:z,getABTests:J,stopABTest:F,deleteABTest:U}}))}},initPersonalization:d,initRecommendation:function(){return function(t){return f.logger.info(\"The `initRecommendation` method is deprecated. Use `initPersonalization` instead.\"),d()(t)}},getRecommendations:ge,getFrequentlyBoughtTogether:ve,getLookingSimilar:we,getRecommendedForYou:Ie,getRelatedProducts:be,getTrendingFacets:Pe,getTrendingItems:Oe}}))}return xe.version=\"4.24.0\",xe}));\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n  sep = sep || '&';\n  eq = eq || '=';\n  var obj = {};\n\n  if (typeof qs !== 'string' || qs.length === 0) {\n    return obj;\n  }\n\n  var regexp = /\\+/g;\n  qs = qs.split(sep);\n\n  var maxKeys = 1000;\n  if (options && typeof options.maxKeys === 'number') {\n    maxKeys = options.maxKeys;\n  }\n\n  var len = qs.length;\n  // maxKeys <= 0 means that we should not limit keys count\n  if (maxKeys > 0 && len > maxKeys) {\n    len = maxKeys;\n  }\n\n  for (var i = 0; i < len; ++i) {\n    var x = qs[i].replace(regexp, '%20'),\n        idx = x.indexOf(eq),\n        kstr, vstr, k, v;\n\n    if (idx >= 0) {\n      kstr = x.substr(0, idx);\n      vstr = x.substr(idx + 1);\n    } else {\n      kstr = x;\n      vstr = '';\n    }\n\n    k = decodeURIComponent(kstr);\n    v = decodeURIComponent(vstr);\n\n    if (!hasOwnProperty(obj, k)) {\n      obj[k] = v;\n    } else if (Array.isArray(obj[k])) {\n      obj[k].push(v);\n    } else {\n      obj[k] = [obj[k], v];\n    }\n  }\n\n  return obj;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n  switch (typeof v) {\n    case 'string':\n      return v;\n\n    case 'boolean':\n      return v ? 'true' : 'false';\n\n    case 'number':\n      return isFinite(v) ? v : '';\n\n    default:\n      return '';\n  }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n  sep = sep || '&';\n  eq = eq || '=';\n  if (obj === null) {\n    obj = undefined;\n  }\n\n  if (typeof obj === 'object') {\n    return Object.keys(obj).map(function(k) {\n      var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n      if (Array.isArray(obj[k])) {\n        return obj[k].map(function(v) {\n          return ks + encodeURIComponent(stringifyPrimitive(v));\n        }).join(sep);\n      } else {\n        return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n      }\n    }).join(sep);\n\n  }\n\n  if (!name) return '';\n  return encodeURIComponent(stringifyPrimitive(name)) + eq +\n         encodeURIComponent(stringifyPrimitive(obj));\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:!0});var version=\"2.14.0\";function extractAdditionalParams(e){return e.reduce(function(e,t){var n=e.events,e=e.additionalParams;return\"index\"in t?{additionalParams:e,events:n.concat([t])}:{events:n,additionalParams:t}},{events:[],additionalParams:void 0})}var supportsCookies=function(){try{return Boolean(navigator.cookieEnabled)}catch(e){return!1}},supportsSendBeacon=function(){try{return Boolean(navigator.sendBeacon)}catch(e){return!1}},supportsXMLHttpRequest=function(){try{return Boolean(XMLHttpRequest)}catch(e){return!1}},supportsNativeFetch=function(){try{return void 0!==fetch}catch(e){return!1}},isUndefined=function(e){return void 0===e},isNumber=function(e){return\"number\"==typeof e},isFunction=function(e){return\"function\"==typeof e};function getFunctionalInterface(i){return function(e){for(var t=[],n=arguments.length-1;0<n--;)t[n]=arguments[n+1];e&&isFunction(i[e])?i[e].apply(i,t):console.warn(\"The method `\"+e+\"` doesn't exist.\")}}var DEFAULT_ALGOLIA_AGENTS=[\"insights-js (\"+version+\")\",\"insights-js-browser-cjs (\"+version+\")\"];function addAlgoliaAgent(e){-1===this._ua.indexOf(e)&&this._ua.push(e)}function getVersion(e){isFunction(e)&&e(this.version)}function __rest(e,t){var n={};for(s in e)Object.prototype.hasOwnProperty.call(e,s)&&t.indexOf(s)<0&&(n[s]=e[s]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols)for(var i=0,s=Object.getOwnPropertySymbols(e);i<s.length;i++)t.indexOf(s[i])<0&&Object.prototype.propertyIsEnumerable.call(e,s[i])&&(n[s[i]]=e[s[i]]);return n}function makeSendEvents(s){return function(e,t){var i=this;if(!this._userHasOptedOut){if(!(!isUndefined(this._apiKey)&&!isUndefined(this._appId)||(null==(n=null==t?void 0:t.headers)?void 0:n[\"X-Algolia-Application-Id\"])&&(null==(n=null==t?void 0:t.headers)?void 0:n[\"X-Algolia-API-Key\"])))throw new Error(\"Before calling any methods on the analytics, you first need to call the 'init' function with appId and apiKey parameters or provide custom credentials in additional parameters.\");!this._userToken&&this._anonymousUserToken&&this.setAnonymousUserToken(!0);var n=e.map(function(e){var t=e.filters,n=__rest(e,[\"filters\"]),e=Object.assign(Object.assign({},n),{userToken:null!=(n=null==e?void 0:e.userToken)?n:i._userToken,authenticatedUserToken:null!=(n=null==e?void 0:e.authenticatedUserToken)?n:i._authenticatedUserToken});return isUndefined(t)||(e.filters=t.map(encodeURIComponent)),e});return 0===n.length?Promise.resolve(!1):sendRequest(s,this._ua,this._endpointOrigin,n,this._appId,this._apiKey,null==t?void 0:t.headers)}}}function sendRequest(e,t,n,i,s,r,o){var a=(o=void 0===o?{}:o)[\"X-Algolia-Application-Id\"],c=o[\"X-Algolia-API-Key\"],o=__rest(o,[\"X-Algolia-Application-Id\",\"X-Algolia-API-Key\"]),d=Object.assign({\"X-Algolia-Application-Id\":null!=a?a:s,\"X-Algolia-API-Key\":null!=c?c:r,\"X-Algolia-Agent\":encodeURIComponent(t.join(\"; \"))},o);return e(n+\"/1/events?\"+Object.keys(d).map(function(e){return e+\"=\"+d[e]}).join(\"&\"),{events:i})}function createUUID(){return\"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return(\"x\"===e?t:3&t|8).toString(16)})}var COOKIE_KEY=\"_ALGOLIA\",MONTH=2592e6,setCookie=function(e,t,n){var i=new Date,n=(i.setTime(i.getTime()+n),\"expires=\"+i.toUTCString());document.cookie=e+\"=\"+t+\";\"+n+\";path=/\"},getCookie=function(e){for(var t=e+\"=\",n=document.cookie.split(\";\"),i=0;i<n.length;i++){for(var s=n[i];\" \"===s.charAt(0);)s=s.substring(1);if(0===s.indexOf(t))return s.substring(t.length,s.length)}return\"\"};function setAnonymousUserToken(e){(e=void 0!==e&&e)?this.setUserToken(\"anonymous-\"+createUUID()):supportsCookies()&&((e=getCookie(COOKIE_KEY))&&\"\"!==e&&0===e.indexOf(\"anonymous-\")?this.setUserToken(e):(e=this.setUserToken(\"anonymous-\"+createUUID()),setCookie(COOKIE_KEY,e,this._cookieDuration)))}function setUserToken(e){return this._userToken=e,isFunction(this._onUserTokenChangeCallback)&&this._onUserTokenChangeCallback(this._userToken),this._userToken}function getUserToken(e,t){return isFunction(t)&&t(null,this._userToken),this._userToken}function onUserTokenChange(e,t){this._onUserTokenChangeCallback=e,t&&t.immediate&&isFunction(this._onUserTokenChangeCallback)&&this._onUserTokenChangeCallback(this._userToken)}function setAuthenticatedUserToken(e){return this._authenticatedUserToken=e,isFunction(this._onAuthenticatedUserTokenChangeCallback)&&this._onAuthenticatedUserTokenChangeCallback(this._authenticatedUserToken),this._authenticatedUserToken}function getAuthenticatedUserToken(e,t){return isFunction(t)&&t(null,this._authenticatedUserToken),this._authenticatedUserToken}function onAuthenticatedUserTokenChange(e,t){this._onAuthenticatedUserTokenChangeCallback=e,t&&t.immediate&&isFunction(this._onAuthenticatedUserTokenChangeCallback)&&this._onAuthenticatedUserTokenChangeCallback(this._authenticatedUserToken)}function addEventType(t,e){return e.map(function(e){return Object.assign({eventType:t},e)})}function addEventTypeAndSubtype(t,n,e){return e.map(function(e){return Object.assign({eventType:t,eventSubtype:n},e)})}function clickedObjectIDsAfterSearch(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n=extractAdditionalParams(e),i=n.events,n=n.additionalParams;return this.sendEvents(addEventType(\"click\",i),n)}function clickedObjectIDs(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n=extractAdditionalParams(e),i=n.events,n=n.additionalParams;return this.sendEvents(addEventType(\"click\",i),n)}function clickedFilters(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n=extractAdditionalParams(e),i=n.events,n=n.additionalParams;return this.sendEvents(addEventType(\"click\",i),n)}function convertedObjectIDsAfterSearch(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n=extractAdditionalParams(e),i=n.events,n=n.additionalParams;return this.sendEvents(addEventType(\"conversion\",i),n)}function addedToCartObjectIDsAfterSearch(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n=extractAdditionalParams(e),i=n.events,n=n.additionalParams;return this.sendEvents(addEventTypeAndSubtype(\"conversion\",\"addToCart\",i),n)}function purchasedObjectIDsAfterSearch(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n=extractAdditionalParams(e),i=n.events,n=n.additionalParams;return this.sendEvents(addEventTypeAndSubtype(\"conversion\",\"purchase\",i),n)}function convertedObjectIDs(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n=extractAdditionalParams(e),i=n.events,n=n.additionalParams;return this.sendEvents(addEventType(\"conversion\",i),n)}function addedToCartObjectIDs(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n=extractAdditionalParams(e),i=n.events,n=n.additionalParams;return this.sendEvents(addEventTypeAndSubtype(\"conversion\",\"addToCart\",i),n)}function purchasedObjectIDs(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n=extractAdditionalParams(e),i=n.events,n=n.additionalParams;return this.sendEvents(addEventTypeAndSubtype(\"conversion\",\"purchase\",i),n)}function convertedFilters(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n=extractAdditionalParams(e),i=n.events,n=n.additionalParams;return this.sendEvents(addEventType(\"conversion\",i),n)}var SUPPORTED_REGIONS=[\"de\",\"us\"];function init(e){var t;if(!isUndefined((e=void 0===e?{}:e).region)&&-1===SUPPORTED_REGIONS.indexOf(e.region))throw new Error(\"optional region is incorrect, please provide either one of: \"+SUPPORTED_REGIONS.join(\", \")+\".\");if(!(isUndefined(e.cookieDuration)||isNumber(e.cookieDuration)&&isFinite(e.cookieDuration)&&Math.floor(e.cookieDuration)===e.cookieDuration))throw new Error(\"optional cookieDuration is incorrect, expected an integer.\");\"development\"===process.env.NODE_ENV&&console.info(\"Since v2.0.4, search-insights no longer validates event payloads.\\nYou can visit https://algolia.com/events/debugger instead.\"),setOptions(this,e,{_userHasOptedOut:Boolean(e.userHasOptedOut),_region:e.region,_host:e.host,_anonymousUserToken:null==(t=e.anonymousUserToken)||t,_useCookie:null!=(t=e.useCookie)&&t,_cookieDuration:e.cookieDuration||6*MONTH}),this._endpointOrigin=this._host||(this._region?\"https://insights.\"+this._region+\".algolia.io\":\"https://insights.algolia.io\"),this._ua=[].concat(DEFAULT_ALGOLIA_AGENTS),e.authenticatedUserToken&&this.setAuthenticatedUserToken(e.authenticatedUserToken),e.userToken?this.setUserToken(e.userToken):this._userToken||this._userHasOptedOut||!this._useCookie||this.setAnonymousUserToken()}function setOptions(e,t,n){var i=t.partial,s=__rest(t,[\"partial\"]);i||Object.assign(e,n),Object.assign(e,Object.keys(s).reduce(function(e,t){return Object.assign(Object.assign({},e),((e={})[\"_\"+t]=s[t],e))},{}))}function viewedObjectIDs(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n=extractAdditionalParams(e),i=n.events,n=n.additionalParams;return this.sendEvents(addEventType(\"view\",i),n)}function viewedFilters(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n=extractAdditionalParams(e),i=n.events,n=n.additionalParams;return this.sendEvents(addEventType(\"view\",i),n)}var AlgoliaAnalytics=function(e){e=e.requestFn;this._endpointOrigin=\"https://insights.algolia.io\",this._anonymousUserToken=!0,this._userHasOptedOut=!1,this._useCookie=!1,this._cookieDuration=6*MONTH,this._ua=[],this.version=version,this.sendEvents=makeSendEvents(e).bind(this),this.init=init.bind(this),this.addAlgoliaAgent=addAlgoliaAgent.bind(this),this.setUserToken=setUserToken.bind(this),this.setAnonymousUserToken=setAnonymousUserToken.bind(this),this.getUserToken=getUserToken.bind(this),this.onUserTokenChange=onUserTokenChange.bind(this),this.setAuthenticatedUserToken=setAuthenticatedUserToken.bind(this),this.getAuthenticatedUserToken=getAuthenticatedUserToken.bind(this),this.onAuthenticatedUserTokenChange=onAuthenticatedUserTokenChange.bind(this),this.clickedObjectIDsAfterSearch=clickedObjectIDsAfterSearch.bind(this),this.clickedObjectIDs=clickedObjectIDs.bind(this),this.clickedFilters=clickedFilters.bind(this),this.convertedObjectIDsAfterSearch=convertedObjectIDsAfterSearch.bind(this),this.purchasedObjectIDsAfterSearch=purchasedObjectIDsAfterSearch.bind(this),this.addedToCartObjectIDsAfterSearch=addedToCartObjectIDsAfterSearch.bind(this),this.convertedObjectIDs=convertedObjectIDs.bind(this),this.addedToCartObjectIDs=addedToCartObjectIDs.bind(this),this.purchasedObjectIDs=purchasedObjectIDs.bind(this),this.convertedFilters=convertedFilters.bind(this),this.viewedObjectIDs=viewedObjectIDs.bind(this),this.viewedFilters=viewedFilters.bind(this),this.getVersion=getVersion.bind(this)};function createInsightsClient(e){var t,e=getFunctionalInterface(new AlgoliaAnalytics({requestFn:e}));if(\"object\"==typeof window&&!window.AlgoliaAnalyticsObject){for(;t=createUUID(),void 0!==window[t];);window.AlgoliaAnalyticsObject=t,window[window.AlgoliaAnalyticsObject]=e}return e.version=version,e}function processQueue(e){var n,t=e.AlgoliaAnalyticsObject;t&&(n=getFunctionalInterface(this),(e=e[t]).queue=e.queue||[],(t=e.queue).forEach(function(e){var e=[].slice.call(e),t=e[0],e=e.slice(1);n.apply(void 0,[t].concat(e))}),t.push=function(e){var e=[].slice.call(e),t=e[0],e=e.slice(1);n.apply(void 0,[t].concat(e))})}var requestWithXMLHttpRequest=function(s,r){return new Promise(function(e,t){var n=JSON.stringify(r),i=new XMLHttpRequest;i.addEventListener(\"readystatechange\",function(){4===i.readyState&&200===i.status?e(!0):4===i.readyState&&e(!1)}),i.addEventListener(\"error\",function(){return t()}),i.addEventListener(\"timeout\",function(){return e(!1)}),i.open(\"POST\",s),i.setRequestHeader(\"Content-Type\",\"application/json\"),i.setRequestHeader(\"Content-Length\",\"\"+n.length),i.send(n)})},requestWithSendBeacon=function(e,t){var n=JSON.stringify(t),n=navigator.sendBeacon(e,n);return Promise.resolve(!!n||requestWithXMLHttpRequest(e,t))},requestWithNativeFetch=function(e,i){return new Promise(function(t,n){fetch(e,{method:\"POST\",body:JSON.stringify(i),headers:{\"Content-Type\":\"application/json\"}}).then(function(e){t(200===e.status)}).catch(function(e){n(e)})})};function getRequesterForBrowser(){if(supportsSendBeacon())return requestWithSendBeacon;if(supportsXMLHttpRequest())return requestWithXMLHttpRequest;if(supportsNativeFetch())return requestWithNativeFetch;throw new Error(\"Could not find a supported HTTP request client in this environment.\")}var entryBrowserCjs=createInsightsClient(getRequesterForBrowser());exports.AlgoliaAnalytics=AlgoliaAnalytics,exports.default=entryBrowserCjs,exports.getFunctionalInterface=getFunctionalInterface,exports.getRequesterForBrowser=getRequesterForBrowser,exports.processQueue=processQueue;\n","const aa = require(\"./dist/search-insights-browser.cjs.min.js\");\n\nmodule.exports = aa.default;\nObject.keys(aa).forEach(key => {\n  if (key !== \"default\") {\n    module.exports[key] = aa[key];\n  }\n});\n","export const getEnvGlobals = () => ({\n  atob: // atob/btoa need to be bound because they throw an illegal invocation error when called as a method (obj.atob())\n  typeof atob === 'function' && atob.bind(undefined) || typeof Buffer !== 'undefined' && (encoded => Buffer.from(encoded, 'base64').toString()),\n  btoa: typeof btoa === 'function' && btoa.bind(undefined) || typeof Buffer !== 'undefined' && (str => Buffer.from(str).toString('base64')),\n  URLSearchParams: typeof URLSearchParams === 'function' && URLSearchParams || typeof require === 'function' && require('url').URLSearchParams\n});\nlet env;\nexport const getEnv = () => env || (env = validateEnv(getEnvGlobals()));\n\nconst validateEnv = env => {\n  if (!(env.atob && env.btoa && env.URLSearchParams)) {\n    throw new TypeError(`Origin-Tracing: missing environment APIs. Required: btoa(), atob(), URLSearchParams() (or in Node: Buffer, require('url').URLSearchParams).`);\n  }\n\n  return env;\n};","import { base64ToBase64Url, base64UrlToBase64 } from './util/base64url';\nimport { getEnv } from './env';\nconst productShorthands = {\n  confluence: 'c',\n  jira: 'j',\n  stride: 's',\n  bitbucket: 'b',\n  trello: 't'\n};\nexport function encode(originData) {\n  const json = JSON.stringify(toJSONObject(originData));\n  const base64 = getEnv().btoa(json);\n  return base64ToBase64Url(base64);\n}\nexport function decode(encodedOriginString) {\n  const base64 = base64UrlToBase64(encodedOriginString);\n  const json = getEnv().atob(base64);\n  return fromJSONObject(JSON.parse(json));\n}\nexport function toJSONObject({\n  id,\n  product\n}) {\n  return {\n    i: id,\n    p: product && product in productShorthands ? productShorthands[product] : product\n  };\n}\nexport function fromJSONObject(originJSONObject) {\n  const originData = {};\n\n  if (originJSONObject.i) {\n    originData.id = originJSONObject.i;\n  }\n\n  if (originJSONObject.p) {\n    originData.product = expandProductShorthand(originJSONObject.p);\n  }\n\n  return originData;\n}\n\nfunction expandProductShorthand(maybeShorthand) {\n  const products = Object.keys(productShorthands);\n\n  for (let i = 0; i < products.length; i++) {\n    const product = products[i];\n    const shorthand = productShorthands[product];\n\n    if (maybeShorthand === shorthand) {\n      return product;\n    }\n  }\n\n  return maybeShorthand;\n}","import uuid from 'uuid/v4';\nimport { encode, decode } from './encoder';\nimport { getEnv } from './env';\nconst packageVersion = \"6.0.7\";\nconst originParamName = 'atlOrigin';\nconst originVersioningAttributes = {\n  originLibrary: `origin-tracing.js@${packageVersion}`\n};\nexport default class OriginTracer {\n  constructor({\n    id = OriginTracer.generateId(),\n    product,\n    dangerouslySkipValidation = false\n  }) {\n    this.id = id;\n    this.product = product;\n\n    if (!dangerouslySkipValidation) {\n      this.validate();\n    }\n  }\n\n  static isValidId(value) {\n    return typeof value === 'string' && /^[-_a-zA-Z0-9]{1,36}$/.test(value);\n  }\n\n  static isValidProduct(value) {\n    return typeof value === 'string' && /^[-_a-zA-Z0-9]{1,20}$/.test(value);\n  }\n\n  static generateId() {\n    const id = uuid(); // Dash positions are fixed so they don't add to uniqueness.\n    // Remove them to save space in the encoded form.\n\n    return id.replace(/-/g, '');\n  }\n\n  static createEmpty() {\n    return new EmptyOriginTracer();\n  }\n\n  static createMalformed() {\n    return new MalformedOriginTracer();\n  }\n\n  static fromUrl(url) {\n    let params = new (getEnv().URLSearchParams)();\n    replaceQuery(url, queryString => {\n      params = new (getEnv().URLSearchParams)(queryString);\n    });\n    return OriginTracer.fromEncoded(params.get(originParamName));\n  }\n\n  static fromEncoded(encoded) {\n    if (!encoded) {\n      return OriginTracer.createEmpty();\n    }\n\n    try {\n      return OriginTracer.decode(encoded);\n    } catch (e) {\n      return OriginTracer.createMalformed();\n    }\n  }\n\n  static removeFromUrl(url) {\n    return replaceQuery(url, queryString => {\n      const params = new (getEnv().URLSearchParams)(queryString);\n      params.delete(originParamName);\n      return params.toString();\n    });\n  }\n\n  static decode(encodedOrigin) {\n    const originData = decode(encodedOrigin);\n    return new OriginTracer(originData);\n  }\n\n  encode() {\n    return encode({\n      id: this.id,\n      product: this.product\n    });\n  }\n\n  addToUrl(url) {\n    return replaceQuery(url, originalQueryString => {\n      const params = new (getEnv().URLSearchParams)(originalQueryString);\n      params.set(originParamName, this.encode());\n      return params.toString();\n    });\n  }\n\n  isEmpty() {\n    return false;\n  }\n\n  isMalformed() {\n    return !this.isEmpty() && !this.isValid();\n  }\n\n  isValid() {\n    return true;\n  }\n\n  toAnalyticsAttributes({\n    transformValue = v => v === null ? undefined : v,\n    hasGeneratedId = false\n  } = {}) {\n    // `originIdGenerated` should be used in analytic events that generated this originId.\n    // Subsequent events should use `originId`.\n    // No two events should have the same value of originIdGenerated.\n    const originIdProp = hasGeneratedId ? 'originIdGenerated' : 'originId';\n    return {\n      [originIdProp]: transformValue(this.id),\n      originProduct: transformValue(this.product),\n      ...originVersioningAttributes\n    };\n  }\n\n  validate() {\n    if (!OriginTracer.isValidId(this.id)) {\n      throw new TypeError('Invalid Origin id');\n    }\n\n    if (!OriginTracer.isValidProduct(this.product)) {\n      throw new TypeError('Missing/invalid Origin product');\n    }\n  }\n\n}\n\nclass EmptyOriginTracer extends OriginTracer {\n  constructor() {\n    super({\n      id: null,\n      product: null,\n      dangerouslySkipValidation: true\n    });\n  }\n\n  isValid() {\n    return false;\n  }\n\n  isEmpty() {\n    return true;\n  }\n\n  toAnalyticsAttributes() {\n    return { ...originVersioningAttributes\n    };\n  }\n\n}\n\nclass MalformedOriginTracer extends OriginTracer {\n  constructor() {\n    super({\n      id: null,\n      product: null,\n      dangerouslySkipValidation: true\n    });\n  }\n\n  isValid() {\n    return false;\n  }\n\n  isEmpty() {\n    return false;\n  }\n\n  toAnalyticsAttributes() {\n    return {\n      originMalformed: true,\n      ...originVersioningAttributes\n    };\n  }\n\n}\n\nfunction replaceQuery(url, replacer) {\n  const urlWithQueryStringRegex = /(^[^?#]*)(?:\\?)?([^#]*?)(#.*|$)$/; // If we get passed window.location, we don't want to call window.location.replace()\n\n  const urlString = String(url);\n  return urlString.replace(urlWithQueryStringRegex, (wholeMatch, beforeQuery, queryString, afterQuery) => {\n    let newQueryString = replacer(queryString);\n\n    if (newQueryString) {\n      newQueryString = `?${newQueryString}`;\n    }\n\n    return `${beforeQuery}${newQueryString}${afterQuery}`;\n  });\n}","/**\n * This file converts between Base64 and Base 64 Encoding with URL and Filename Safe Alphabet,\n * the latter of which has URL-safe characters only (drops =, + and /).\n *\n * Why not use a library? The popular libs use Buffer to be able to\n * encode any data to base64. We don't need this capability, and it causes\n * Webpack to include 30KB of a Buffer polyfill.\n * Webpack's/UglifyJS's Tree Shaking seems to be unable to drop it.\n *\n * See: RFC 4648 section 5 (https://tools.ietf.org/html/rfc4648#section-5)\n */\nexport function base64ToBase64Url(base64) {\n  if (base64 == null) {\n    return '';\n  }\n\n  return String(base64).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n}\nexport function base64UrlToBase64(base64url) {\n  if (base64url == null) {\n    return '';\n  }\n\n  const base64 = String(base64url).replace(/-/g, '+').replace(/_/g, '/');\n  const padLength = (4 - base64url.length % 4) % 4;\n  const pad = '==='.slice(0, padLength);\n  return base64 + pad;\n}","import Environment from './environment';\nimport stgConfig from \"../../../../config\";\n\nexport default class BasePaths {\n  ENV_DEV = 'dev';\n  ENV_STAGING = 'staging';\n  ENV_PRODUCTION = 'production';\n  env: string;\n  localizedPrefix: string | boolean;\n\n  constructor(env?: string) {\n    this.env = env || Environment.getEnvironment();\n    this.localizedPrefix = this.getLocalizedPrefix();\n  }\n\n  getLocalizedPrefix() {\n    let languagePrefix = window.location.hostname.split('.')[0];\n    if (languagePrefix === 'www' || languagePrefix === 'wac'  || languagePrefix === 'qa-wac'  || languagePrefix === 'localhost') {\n      return false;\n    }\n    return languagePrefix;\n  }\n\n  wrapForI18n(url: string) {\n    if(!this.localizedPrefix) {\n      return url;\n    }\n    return url.replace('//www.', `//${this.localizedPrefix}.`);\n  }\n\n  // WAC\n  wacBasePath() {\n    let base = {\n      production: this.wrapForI18n('https://www.atlassian.com'),\n      staging: `${window.location.hostname.indexOf('qa-wac') > -1 ? 'https://qa-wac.internal.atlassian.com' : stgConfig.stgWacInternalUrl}`,\n      dev: 'http://localhost:8090/wac'\n    };\n\n    let result = base.hasOwnProperty(this.env) ? base[this.env] : base.production;\n\n    return result;\n  }\n\n  // Identity\n  idBasePath() {\n    let base = {\n      production: 'https://id.atlassian.com',\n      staging: 'https://id.stg.internal.atlassian.com',\n      dev: 'http://auth.bizbox.atlassian.com:8888'\n    };\n\n    let result = base.hasOwnProperty(this.env) ? base[this.env] : base.production;\n\n    return result;\n  }\n\n  idLoginUrl(url?: string, skipEncoding?: boolean) {\n    let continueParam = this.getReturnUrl(url, skipEncoding);\n    return `${this.idBasePath()}/login?continue=${continueParam}`;\n  }\n\n  idLogoutUrl(url: string) {\n    let continueParam = this.getReturnUrl(url);\n    return `${this.idBasePath()}/logout?continue=${continueParam}`;\n  }\n\n  idLogoutLoginUrl(url?: string) {\n    let skipInitialEncoding = true;\n    return this.idLogoutUrl( this.idLoginUrl(url, skipInitialEncoding) );\n  }\n\n  // MAC\n  macBasePath() {\n    let base = {\n      production: 'https://my.atlassian.com',\n      staging: 'https://my.stg.internal.atlassian.com',\n      dev: 'http://my.bizbox.atlassian.com:8888'\n    };\n\n    let result = base.hasOwnProperty(this.env) ? base[this.env] : base.production;\n\n    return result;\n  }\n\n  macConfigUrl() {\n    return `${this.macBasePath()}/ondemand/config`;\n  }\n\n  // Stargate\n  atlProxyBasePath() {\n    let base = {\n      production: '/gateway/api',\n      staging: 'https://wac.stg.atlassian.com/gateway/api',\n      dev: 'https://wac.stg.atlassian.com/gateway/api'\n    };\n\n    let result = base.hasOwnProperty(this.env) ? base[this.env] : base.production;\n\n    return result;\n  }\n\n  // COFS WAC\n  wacCofsBasePath() {\n    let base = {\n      production: '/apis/prod/cofs',\n      staging: '/apis/stg/cofs',\n      dev: '/apis/stg/cofs'\n    };\n\n    let result = base.hasOwnProperty(this.env) ? base[this.env] : base.production;\n\n    return result;\n  }\n\n  // COFS WAC\n  wacHamletBasePath() {\n    let base = {\n      production: '/hamlet/1.0',\n      staging: '/apis/stg/hamlet/1.0',\n      dev: '/apis/stg/hamlet/1.0'\n    };\n\n    let result = base.hasOwnProperty(this.env) ? base[this.env] : base.production;\n\n    return result;\n  }\n\n  getReturnUrl(url?: string, skipEncoding?: boolean) {\n    url = url || window.location.href;\n\n    if (!skipEncoding) {\n      url = encodeURIComponent(url);\n    }\n    return url;\n  }\n\n}\n","import _ from 'underscore';\nimport axios from 'axios';\nimport Environment from '../environment';\nimport stgConfig from \"../../../../config\";\nimport { hamletUser } from './hamlet-user';\n\nexport class HamletApi {\n  baseDomain: string;\n\n  constructor() {\n    this.baseDomain = this.getBaseDomain();\n  }\n\n  getBaseDomain() {\n    if (!Environment.isProduction()) {\n      return  `${window.location.hostname.indexOf('qa-wac') > -1 ? 'https://qa-wac.internal.atlassian.com' : stgConfig.stgWacInternalUrl}`;\n    }\n\n    return 'https://www.atlassian.com';\n  }\n\n  getHamletPath() {\n    if (!Environment.isProduction()) {\n      return `${this.baseDomain}/apis/stg/hamlet`;\n    }\n\n    return `${this.baseDomain}/hamlet`;\n  }\n\n  getCofsPath() {\n    if (!Environment.isProduction()) {\n      return `${this.baseDomain}/apis/stg/cofs`;\n    }\n\n    return `${this.baseDomain}/apis/prod/cofs`;\n  }\n\n  getCnasPath() {\n    if (!Environment.isProduction()) {\n      return `${this.baseDomain}/apis/stg/cnas`;\n    }\n\n    return `${this.baseDomain}/apis/prod/cnas`;\n  }\n\n  getBxpPath() {\n    return `${this.baseDomain}/endpoint`;\n  }\n\n  hamletRequest(params, useCofsPath) {\n\n    let basePath = useCofsPath ? this.getCofsPath() : this.getHamletPath();\n\n    let request = {\n      url: `${basePath}${params.url}`,\n      method: params.method || 'GET',\n      headers: params.headers || {},\n      params: params.params\n    };\n\n    if (request.method === 'GET') {\n      request.params = {cacheBuster: new Date().getTime(), ...params.params };\n    }\n\n    if (request.method === 'POST') {\n      request.headers['Content-Type'] = 'application/json';\n      request.data = params.data || '';\n    }\n\n    if (params.authenticated && hamletUser.getToken()) {\n      request.headers['ATL-XSRF-Token'] = hamletUser.getToken();\n      request.withCredentials = true;\n    }\n\n    return axios(request);\n  }\n\n  bxpRequest(params) {\n\n    let request = {\n      url: `${params.url.startsWith('http') ? '' : this.getBxpPath()}${params.url}`,\n      method: params.method || 'GET',\n      headers: params.headers || {},\n      params: params.params\n    };\n\n    if (request.method === 'GET') {\n      request.params = { cacheBuster: new Date().getTime(), ...params.params };\n    }\n\n    if (request.method === 'POST') {\n      request.headers['Content-Type'] = 'application/json';\n      request.data = params.data || '';\n    }\n\n    if (params.authenticated && hamletUser.getToken()) {\n      request.withCredentials = true;\n    }\n\n    return axios(request);\n  }\n\n  get(data) {\n    let options = { method: 'GET' };\n\n    if (_.isString(data)) {\n      options.url = data;\n    } else if (_.isObject(data)) {\n      Object.assign(options, data);\n    }\n\n    return this.hamletRequest(options);\n  }\n\n  post(data) {\n    let options = { method: 'POST' };\n\n    if (_.isString(data)) {\n      options.url = data;\n    } else {\n      Object.assign(options, data);\n    }\n\n    return this.hamletRequest(options);\n  }\n\n  /**\n   * Generic request wrapper\n   */\n  request(options) {\n    return axios(options);\n  }\n\n}\n\nexport let hamletApi = new HamletApi();\n","import Environment from '../environment';\nimport { hamletApi } from './hamlet-api';\n\nexport const ProductKeys = {\n  CONFLUENCE: \"confluence.ondemand\",\n  JIRA_CORE: \"jira-core.ondemand\",\n  JIRA_BUSINESS: \"jira-core.ondemand\",\n  JIRA_SOFTWARE: \"jira-software.ondemand\",\n  JIRA_SERVICE_DESK: \"jira-servicedesk.ondemand\",\n  JIRA_SERVICE_MANAGEMENT: \"jira-servicedesk.ondemand\",\n  JIRA_WORK_MANAGEMENT: \"jira-core.ondemand\",\n  JIRA_PRODUCT_DISCOVERY: \"jira-product-discovery\",\n  BITBUCKET: \"com.atlassian.bitbucket\",\n  OPSGENIE: \"opsgenie\",\n  STATUSPAGE: \"statuspage\",\n  TRELLO: \"trello\",\n  ROVO: \"rovo\",\n  COMPASS: \"compass\",\n  LOOM: \"loom\",\n  GUARD: \"atlassian-access\"\n};\n\nexport const transformAvailableProductsIntoAvailableSites = (availableProductsSites) => {\n  return availableProductsSites.map(site => {\n    return {\n      adminAccess: site.adminAccess,\n      products: site.products ?? site.availableProducts.map(availableProduct => ProductKeys[availableProduct.productType]),\n      cloudId: site.cloudId,\n      displayName: site.displayName,\n      avatarUrl: site.avatar,\n      url: site.url,\n    };\n  });\n}\n\nexport class HamletUser {\n  token: null;\n  initialized: boolean;\n  user: any;\n  sites: any[];\n  performanceBoostExperiment: boolean;\n  extendedTrialAvailability: any;\n  organisationDetails: any;\n\n  availableProductsData: { cached: any | null; request: Promise<any> | null } = { cached: null, request: null };\n  meData: { cached: any | null; request: Promise<any> | null } = {cached: null, request: null};\n\n  constructor() {\n\n    this.token = null;\n    this.initialized = false;\n\n    this.user = {\n      contactDetails: {\n        firstName: '',\n        lastName: '',\n        email: ''\n      },\n      organisationDetails: {\n        address1: '',\n        address2: '',\n        city: '',\n        state: '',\n        postcode: '',\n        isoCountryCode: '',\n        organisationName: '',\n        organisationType: null,\n        payOnAccount: false,\n        taxId: ''\n      },\n      lassoDetails: {\n        firstName: '',\n        lastName: '',\n        username: '',\n        displayName: ''\n      },\n      myDetails: {\n        aaid: null,\n        avatar: null,\n        email: '',\n        name: '',\n        firstName: '',\n        lastName: ''\n      },\n      isLoggedIn: false\n    };\n\n    this.sites = [];\n    this.performanceBoostExperiment = false;\n\n  }\n\n  initUser(performanceBoostExperiment: boolean, enableAisAvailableProducts) {\n\n    if (this.initialized) {\n      return Promise.resolve(this.user);\n    }\n    this.initialized = true;\n\n    return Promise.all([\n      this.retrieveXsrfToken(),\n      this.getStargateProfile(performanceBoostExperiment, false, enableAisAvailableProducts)\n    ])\n      .then(() => {\n        return Promise.resolve(this.user);\n      })\n      .catch(() => {\n        return Promise.resolve(this.user);\n      });\n  }\n\n  retrieveXsrfToken() {\n\n    const options = {\n      url: `${hamletApi.getHamletPath()}/1.0/auth/xsrf/plain`,\n      method: 'GET',\n      withCredentials: true\n    };\n\n    return hamletApi.request(options)\n      .then((response) => {\n\n        if (response.data && response.data !== '') {\n\n          this.setToken(response.data);\n          this.user.isLoggedIn = true;\n\n          return Promise.resolve();\n        }\n\n        this.user.isLoggedIn = false;\n        return Promise.reject();\n      })\n      .catch(() => {\n\n        this.user.isLoggedIn = false;\n        return Promise.reject();\n      });\n  }\n\n  getStargateProfile(performanceBoostExperiment: boolean, debugAllSites?: boolean) {\n\n    if (performanceBoostExperiment) {\n      this.performanceBoostExperiment = true;\n    }\n\n    return Promise.all([\n      this.retrieveMe(),\n      this.retrieveSitesData(debugAllSites)\n    ])\n      .then(([identityData, sitesData]) => {\n        if (identityData && sitesData) {\n          Object.assign(this.user.myDetails, identityData);\n          this.setSites(sitesData);\n          this.user.isLoggedIn = true;\n        }\n\n        return Promise.resolve();\n      })\n      .catch(() => {\n\n        this.user.isLoggedIn = false;\n        return Promise.resolve();\n      });\n  }\n\n  retrieveCurrentUser(params) {\n    params.url = '/1.0/public/contact/currentUser';\n\n    return hamletApi.hamletRequest(params);\n  }\n\n  retrieveUserDetails(params) {\n    params.url = '/1.0/public/auth/user/details'\n\n    return hamletApi.hamletRequest(params);\n  }\n\n  retrieveMe() {\n    const hostname = Environment.getAPIPrivateURL();\n    const url = `${hostname}/me`;\n\n    const options = {\n      url: url,\n      method: 'GET',\n      withCredentials: true\n    };\n\n\n    let request;\n    if (this.meData.cached) {\n      // response available\n      request = Promise.resolve(this.meData.cached);\n    } else if (this.meData.request) {\n      // pending request\n      request = this.meData.request;\n    } else {\n      // first request\n      this.meData.request = hamletApi.request(options);\n      request = this.meData.request;\n    }\n    return request\n      .then(result => {\n\n        if (!result.data) {\n          return Promise.reject();\n        }\n\n        this.meData.cached = result;\n        this.meData.request = null;\n\n        // clean up any names that are emails here\n        let name = result.data.name;\n        if (name.indexOf('@') > -1) {\n          name = name.split('@')[0];\n        }\n\n        const stargateData = {\n          aaid: (result.data.account_id),\n          avatar: (result.data.picture),\n          email: (result.data.email),\n          name: (name),\n          firstName: (this.getFirstName(name)),\n          lastName: (this.getLastName(name))\n        };\n\n        return Promise.resolve(stargateData);\n      })\n      .catch(() => {\n\n        this.user.isLoggedIn = false;\n        return Promise.reject();\n      });\n  }\n\n  retrieveSitesData(debugAllSites?: boolean) {\n    return this.retrieveAvailableProductsData(debugAllSites).then(availableProductsSites => {\n      const sitesData = transformAvailableProductsIntoAvailableSites(availableProductsSites);\n      return sitesData;\n    }).catch(() => {\n      this.user.isLoggedIn = false;\n    });\n  }\n\n  retrieveAvailableProductsData(debugAllSites?: boolean) {\n    let url = `${Environment.getAPIPrivateURL()}/ais/available-products`;\n    const options = {\n      url: url,\n      method: 'GET',\n      withCredentials: true\n    };\n\n    let request;\n    if (this.availableProductsData.cached) {\n      // response available\n      request = Promise.resolve(this.availableProductsData.cached);\n    } else if (this.availableProductsData.request) {\n      // pending request\n      request = this.availableProductsData.request;\n    } else {\n      // first request\n      this.availableProductsData.request = hamletApi.request(options);\n      request = this.availableProductsData.request;\n    }\n    return request.then(result => {\n\n      if (!result.data) {\n        return [];\n      }\n\n      this.availableProductsData.cached = result;\n      this.availableProductsData.request = null;\n\n      const sitesResult = result.data.sites || [];\n      const availableProductsSites = debugAllSites ? sitesResult : sitesResult.filter((site) => this.isValidSite(site));\n      return Promise.resolve(availableProductsSites);\n    }).catch(() => {\n      this.user.isLoggedIn = false;\n      return Promise.reject();\n    });\n  }\n\n  checkExtendedTrialAvailability(migrationSourceUuid, productKey, cloudIds) {\n    const options = {\n      url: `${hamletApi.getHamletPath()}/1.0/public/account/${migrationSourceUuid}/extendedTrial/availability`,\n      method: 'POST',\n      data: {\n        productKey,\n        cloudIds,\n      },\n      withCredentials: true\n    };\n\n    return hamletApi.request(options)\n      .then((response) => {\n        if (response.data && response.data !== '') {\n          this.setExtendedTrialAvailability(response.data);\n          return Promise.resolve(response.data);\n        }\n\n        return Promise.resolve();\n      })\n      .catch(() => {\n        return Promise.resolve();\n      });\n  }\n\n  getExtendedTrialAvailability() {\n    return this.extendedTrialAvailability;\n  }\n\n  setExtendedTrialAvailability(extendedTrialAvailability) {\n    this.extendedTrialAvailability = extendedTrialAvailability;\n  }\n\n  setToken(token) {\n    this.token = token;\n  }\n\n  getToken() {\n    return this.token;\n  }\n\n  setUser(options) {\n    Object.assign(this.user, options);\n  }\n\n  getUser() {\n    return this.user;\n  }\n\n  setSites(sites) {\n    this.sites = sites;\n  }\n\n  getSites() {\n    return this.sites;\n  }\n\n  getSitesByProduct(availableProducts) {\n\n    let groupSitesByProduct = {};\n\n    this.sites.forEach((site) => {\n      site.products.forEach((product) => {\n        (groupSitesByProduct[product] = groupSitesByProduct[product] || []).push({\n          cloudId: site.cloudId,\n          displayName: site.displayName,\n          url: site.url,\n          avatarUrl: site.avatarUrl || '',\n          isVertigo: site.isVertigo || false,\n        })\n      })\n    });\n\n    let result = [];\n    for (var product in groupSitesByProduct) {\n\n      if (product.length) {\n        result.push({\n          name: availableProducts[product].name,\n          icon: availableProducts[product].login_logo_url || '',\n          sites: groupSitesByProduct[product].map((site) => site.url)\n        });\n      }\n    }\n    return result;\n  }\n\n  getDisplayName() {\n    return this.user.myDetails.name;\n  }\n\n  getFirstName(fullName = '') {\n    return fullName.trim().split(' ')[0];\n  }\n\n  getLastName(fullName = '') {\n    let lastName = '';\n    let names = fullName.trim().split(' ');\n\n    if (names.length > 1) {\n      names.shift();\n      lastName = names.join(' ');\n    }\n\n    return lastName;\n  }\n\n  getUserEmail() {\n    return this.user.myDetails.email || '';\n  }\n\n  getUserAaid() {\n    return this.user.myDetails.aaid || '';\n  }\n\n  getAvatar() {\n    return this.user.myDetails.avatar;\n  }\n\n  isLoggedIn() {\n    return this.user.isLoggedIn && this.user.myDetails.email.length > 0;\n  }\n\n  isExpert() {\n    return this.organisationDetails.organisationType === 'EXPERT';\n  }\n\n  isReseller() {\n    return this.organisationDetails.organisationType === 'RESELLER';\n  }\n\n  isPlatinumExpert() {\n    return this.organisationDetails.organisationType === 'EXPERT' && this.organisationDetails.payOnAccount;\n  }\n\n  isValidSite(site) {\n\n    const ignoreSiteNames = [\n      'servicedog',\n      'ecosystem',\n      'atlassiantraining',\n      'Atlassian Stride',\n      'volunteerhub',\n      'atlassiantraining',\n      'hello-staging',\n      'ecosystem',\n      'riskmanagement',\n      'hello-staging3',\n      'hello-staging6',\n      'hello-staging9',\n      'jdog',\n      'sre-ehlo',\n      'trello',\n      'Trello',\n      'bitbucket',\n      'Bitbucket'\n    ];\n\n    if (ignoreSiteNames.indexOf(site.displayName) > -1) {\n      return false;\n    }\n\n    if (site.cloudId.startsWith('DUMMY')) {\n      return false;\n    }\n\n    if (site.displayName.toUpperCase().match(\".*-SANDBOX-\\\\d{3}$\")) {\n      return false\n    }\n\n    return true;\n  }\n\n}\n\nexport let hamletUser = new HamletUser();\n","import tracking from '../../utils/tracking';\nimport OriginTracing from \"@atlassiansox/origin-tracing\";\nimport { hamletUser, ProductKeys } from \"../../common/hamlet/hamlet-user\";\nimport BasePaths from \"../../buyer-experience/common/base-paths\";\nimport Environment from \"../../common/environment\";\nimport storage from \"../../utils/storage\";\n\nimport algoliasearch from 'algoliasearch';\nimport algoliasearchhelper, { AlgoliaSearchHelper } from 'algoliasearch-helper';\nimport insights from 'search-insights';\n\nimport { trackEvent } from \"../../common/analytics\";\n\nimport imkt from \"../../imkt\";\n\nconst ALGOLIA_APP_ID = 'CU5KFWE75C';\nconst ALGOLIA_SEARCH_API_KEY = '8cb0497a0549da256319b1b8178e5421';\nconst ALGOLIA_SEARCH_INDEX_NAME = (Environment.getEnvironment() === \"production\") ? \"www.atlassian.com.v2\" : \"www.atlassian.com.v2_dev\";\nconst ALGOLIA_FACET_KEY = 'category';\nconst algoliaSearchClient = algoliasearch(ALGOLIA_APP_ID, ALGOLIA_SEARCH_API_KEY);\nconst locale = Environment.getInternationalSubdirectory() || 'en';\n// Initialize Algolia Insights\ninsights('init', {\n  appId: ALGOLIA_APP_ID,\n  apiKey: ALGOLIA_SEARCH_API_KEY\n});\n\nfunction sendClickEvent(queryId: string, objectId: string, position: number) {\n  insights('clickedObjectIDsAfterSearch', {\n    eventName: 'Result Clicked (global nav)',\n    objectIDs: [objectId],\n    positions: [Number(position)],\n    queryID: queryId,\n    index: ALGOLIA_SEARCH_INDEX_NAME\n  });\n}\n\nconst graphqlUrl = `${Environment.getAPIPrivateURL()}/graphql`;\nconst AVATAR_IMG_URL =\n  \"http://wac-cdn.atlassian.com/dam/wac/icons/ADG3-Icons-36px-N700/object-avatar-man.svg\";\n\n\ntype availableProductsSites = {\n  adminAccess: boolean;\n  cloudId: string;\n  displayName: string;\n  edition: string;\n  entitlements: any[];\n  orgId: string;\n  products: string[];\n  productsAndEditions: any[];\n  url: string;\n}\n\ntype productMetaData = {\n  imgSource: string;\n  heading: string;\n  subText: string;\n  href: string;\n}\n\ntype productDisplayMetaDataMapType = {\n  [key: string]: productMetaData\n}\n\ntype siteGrowthUnifiedProfileGetUnifiedProfileSiteType = {\n  cloudId: string;\n  displayName: string;\n  siteCreatedAt: string;\n  url?: string;\n  hasAdminAccess: boolean;\n  products: siteGrowthUnifiedProfileGetUnifiedProfileSitesProductType[];\n};\n\ntype siteGrowthUnifiedProfileGetUnifiedProfileSitesProductType = {\n  productName: string;\n  productKey:  string;\n  productEdition?:  string;\n  d0Eligible: boolean;\n  d1to6Eligible: boolean;\n  d0Active: boolean;\n  d1to6Active: boolean;\n}\n\n\n\n\nexport default class ADG4GlobalNav {\n  domRoot: HTMLElement;\n  params: any;\n  userInfo: any;\n  isLoading: boolean;\n  basePaths: any;\n  origin: any;\n  labels: any;\n  navType: string;\n  ctaLabel?: string;\n  defaultTrackProperties: any;\n  CloseAll: HTMLElement;\n  AccountSignIn: HTMLElement;\n  AccountAvatar: HTMLElement;\n  AccountInfo: HTMLElement;\n  OutlineElement: HTMLElement;\n  OverlayColor: HTMLElement;\n  OverlayClickable: HTMLElement;\n  GenericNavLinks: HTMLElement[];\n  DropdownNavLinks: HTMLElement[];\n  DropdownNavLinkButtons: HTMLElement[];\n  NavLinkButtons: HTMLElement[];\n  DropdownContents: HTMLElement[];\n  TabButtons: HTMLElement[];\n  NavContainingElement: HTMLElement;\n  MobileToggle: HTMLElement;\n  MobileBackButtons: HTMLElement[];\n  MenuMore: HTMLElement;\n  MenuLess: HTMLElement;\n  SearchOpen: HTMLElement;\n  SearchClose: HTMLElement;\n  SearchForm: HTMLElement;\n  SearchInput: HTMLInputElement;\n  SearchInputSVG: HTMLElement;\n  SearchResultsContainer: HTMLElement;\n  searchHelper: AlgoliaSearchHelper;\n  SearchHits: any;\n  SearchQuery: string;\n  QueryId: string;\n  WrappedElementIndex: number;\n  WindowWidth: number;\n  ButtonMenuMore: HTMLElement;\n  ButtonMenuLess: HTMLElement;\n  isShowCTADropdown: boolean;\n  jiraProductMetaData: productMetaData;\n  jiraServiceManagementProductMetaData: productMetaData;\n  confluenceProductMetaData: productMetaData;\n  jiraProductDiscoveryMetaData: productMetaData;\n  compassProductMetaData: productMetaData;\n  defaultCtaDesktopButton: HTMLElement;\n  cTADropdown: HTMLElement;\n  cTADropdownHoverContent: HTMLElement;\n  dropdownContentLoader: HTMLElement;\n  dropdownPanelContent: HTMLElement;\n  isGupsCalled: boolean;\n  isHovered: boolean;\n\n  constructor(domRoot: HTMLElement, params: any) {\n    this.domRoot = domRoot;\n    this.params = { ...params };\n    this.userInfo = {};\n    this.isLoading = false;\n    this.basePaths = new BasePaths();\n    this.origin = new OriginTracing({ product: \"wac-globaldropdown\" });\n    this.labels = params.labels;\n    this.navType = params.navType;\n    this.ctaLabel = params.ctaLabel;\n    this.defaultTrackProperties = {};\n    this.CloseAll = domRoot.querySelector(\".close-all\");\n    this.AccountSignIn = domRoot.querySelector(\".adg4-nav-account-sign-in\");\n    this.AccountAvatar = domRoot.querySelector(\".adg4-nav-account-logged-in\");\n    this.AccountInfo = domRoot.querySelector(\".adg4-nav-account-info\");\n    this.OutlineElement = domRoot.querySelector(\".outline-element\");\n    this.OverlayColor = domRoot.querySelector(\".overlay-color\");\n    this.OverlayClickable = domRoot.querySelector(\".overlay-clickable\");\n    this.GenericNavLinks = domRoot.querySelectorAll(\".nav-link\");\n    this.DropdownNavLinks = domRoot.querySelectorAll(\".nav-link.has-dropdown\");\n    this.NavLinkButtons = domRoot.querySelectorAll(\".nav-link-button\");\n    this.TabButtons = domRoot.querySelectorAll(\".tab-button\");\n    this.DropdownContents = domRoot.querySelectorAll(\".dropdown-content\");\n    this.MobileToggle = domRoot.querySelector(\".mobile-toggle\");\n    this.NavContainingElement = domRoot.querySelector(\".nav-right-space\");\n    this.MobileBackButtons = domRoot.querySelectorAll(\".mobile-back-button\");\n    this.MenuMore = domRoot.querySelector(\".menu-more\");\n    this.MenuLess = domRoot.querySelector(\".menu-less\");\n    this.SearchOpen = domRoot.querySelector(\".search-open\");\n    this.SearchClose = domRoot.querySelector(\".search-close\");\n    this.SearchForm = domRoot.querySelector(\".search-form\");\n    this.SearchResultsContainer = domRoot.querySelector(\".adg4-search-results\");\n    this.SearchInput = domRoot.querySelector(\".adg4-search-input\");\n    this.SearchInputSVG = domRoot.querySelector(\".input-container svg\");\n    this.SearchHits = [];\n    this.SearchQuery = '';\n    this.QueryId = '';\n    this.searchHelper = algoliasearchhelper(algoliaSearchClient, ALGOLIA_SEARCH_INDEX_NAME, {\n      facetFilters: [`locale:${locale}`],\n      facets: [ALGOLIA_FACET_KEY],\n      clickAnalytics: true // enables click analytics\n    });\n\n    this.WindowWidth = 0;\n    this.WrappedElementIndex = '';\n    this.ButtonMenuMore = domRoot.querySelector(\".button-menu-more\");\n    this.ButtonMenuLess = domRoot.querySelector(\".button-menu-less\");\n\n    this.isShowCTADropdown = (params.isShowCTADropdown as string) == \"true\";\n    this.jiraProductMetaData = params.jiraProduct;\n    this.jiraServiceManagementProductMetaData = params.jiraServiceManagementProduct;\n    this.confluenceProductMetaData = params.confluenceProduct;\n    this.jiraProductDiscoveryMetaData = params.jiraProductDiscovery;\n    this.compassProductMetaData = params.compassProduct;\n\n    this.defaultCtaDesktopButton = domRoot.querySelector(\".cta-desktop#cta-desktop-default\") as HTMLElement;\n    this.cTADropdown = domRoot.querySelector(\".cta-desktop#cta-desktop-dropdown-button\") as HTMLElement;\n    this.cTADropdownHoverContent = domRoot.querySelector(\".cta-dropdown-content#try-now-cta-link-desktop-dropdown\") as HTMLElement;\n\n    this.dropdownContentLoader = domRoot.querySelector(\".dropdown-content-loader\") as HTMLElement;\n    this.dropdownPanelContent = domRoot.querySelector(\".dropdown-content-panel\") as HTMLElement;\n    this.isGupsCalled = false;\n    this.isHovered = false;\n\n    this.init();\n  }\n\n  async init() {\n    this.bindEvents();\n\n    if (this.navType !== \"subNav\" && storage.getCookie(\"login_user_detected\") === \"true\") {\n      this.getUser()\n        .then(user => {\n          this.isLoading = false;\n          this.userInfo = user;\n          if (user.isLoggedIn && this.userInfo.displayName.length) {\n            tracking.trackEvent(\"bxp.globalnavdropdown.user.loggedin\");\n            this.populateLoggedInUser();\n          } else {\n            this.populateLoggedOutUser();\n          }\n        })\n        .catch(() => {\n          tracking.trackEvent(\n            \"bxp.globalnavdropdown.user.getusererror\"\n          );\n        });\n    } else if (this.navType !== \"subNav\") {\n      this.isLoading = false;\n      this.populateLoggedOutUser();\n    }\n\n    this.addAvatarOutsideClickEventListener();\n\n    await this.onDisplayDropdownButton();\n    await this.featureGateJiraSolutionsNavbar();\n  }\n\n  featureGateJiraSolutionsNavbar = async () => {\n    const isJiraProductTourNavBarSolutionsTab = await imkt.utils.featureGate.getExperimentValue(\n      \"jira_product_tour_nav_bar_solutions_tab\",\n      \"variant\",\n      false\n    );\n    if (isJiraProductTourNavBarSolutionsTab) {\n      const navExpControls = document.querySelectorAll(\".exp-control\");\n      const navExpVariables = document.querySelectorAll('.exp-variable');\n      (navExpControls).forEach((nav) => {\n        nav.classList.add('link-hidden');\n      });\n      (navExpVariables).forEach((nav) => {\n        nav.classList.remove('link-hidden');\n      });\n    }\n    this.resizeMenus();\n  }\n\n  // Get it free CTA dropdown =======================================================================================\n  onDisplayDropdownButton = async () => {\n    if (this.isShowCTADropdown) {\n      this.cTADropdown?.addEventListener('click', async () => {\n        this.closeEverything();\n        if (this.cTADropdown.classList.contains(\"open-dropdown\")) {\n          this.cTADropdown.classList.remove(\"open-dropdown\")\n          this.onCloseDisplayDropdownPanelContent();\n          this.isHovered = false;\n        } else {\n          this.cTADropdown.classList.add(\"open-dropdown\")\n\n          if(!this.isGupsCalled) {\n            await this.onRenderCTADropdownDisplayContent();\n          } else {\n            this.onDisplayDropdownPanelContent();\n          }\n        }\n        if(!this.isHovered) {\n          trackEvent(\"button clicked\", {\n            eventComponent: \"button\",\n            action: \"clicked\",\n            component: \"cta-desktop\",\n            source: \"globalNav\",\n            actionSubjectId: \"globalNavCtaDropdownButtonClicked\"\n          });\n        }\n      });\n\n      this.cTADropdown?.addEventListener('mouseenter', async () => {\n        this.isHovered = true;\n        this.cTADropdown.click();\n\n        if (typeof ace !== \"undefined\") {\n\n          ace.analytics.GASv3.sendTrackEvent(\n            'exposed',\n            'feature', \n            'gwp-3947-try-now-cta-dropdown', \n            {\n              eventContainer: 'gwp-3947-try-now-cta-dropdown',\n              group: 'Test'\n            },\n            false);\n        }\n\n        trackEvent(\"button hovered\", {\n          eventComponent: \"button\",\n          action: \"hovered\",\n          component: \"cta-desktop\",\n          source: \"globalNav\",\n          actionSubjectId: \"globalNavCtaDropdownButtonHovered\"\n        });\n      });\n\n      this.cTADropdown?.addEventListener('mouseleave', () => {\n        if (this.cTADropdown.classList.contains(\"open-dropdown\")) {\n          this.cTADropdown.classList.remove(\"open-dropdown\");\n        }\n        this.isHovered = false;\n        this.onCloseDisplayDropdownPanelContent();\n      });\n\n      if (this.defaultCtaDesktopButton?.classList.contains(\"show-cta\")) {\n        this.defaultCtaDesktopButton.classList.remove(\"show-cta\")\n      }\n      this.cTADropdown.classList.add(\"show-cta\");\n\n    } else {\n      if (this.cTADropdown?.classList.contains(\"show-cta\")) {\n        this.cTADropdown.classList.remove(\"show-cta\")\n      }\n      this.defaultCtaDesktopButton.classList.add(\"show-cta\");\n    }\n\n    this.resizeMenus();\n  }\n\n  onRenderCTADropdownDisplayContent = async () => {\n    const productDisplayHirachy = [\n      ProductKeys.JIRA_SOFTWARE,\n      ProductKeys.JIRA_SERVICE_MANAGEMENT,\n      ProductKeys.CONFLUENCE,\n      ProductKeys.JIRA_PRODUCT_DISCOVERY,\n      ProductKeys.COMPASS\n    ];\n\n    const productDisplayMetaDataMap: productDisplayMetaDataMapType = {\n      [ProductKeys.JIRA_SOFTWARE]: this.jiraProductMetaData,\n      [ProductKeys.JIRA_SERVICE_MANAGEMENT]: this.jiraServiceManagementProductMetaData,\n      [ProductKeys.CONFLUENCE]: this.confluenceProductMetaData,\n      [ProductKeys.JIRA_PRODUCT_DISCOVERY]: this.jiraProductDiscoveryMetaData,\n      [ProductKeys.COMPASS]: this.compassProductMetaData\n    };\n\n    let getFilteredHirachyList = [...productDisplayHirachy];\n      try {\n        const userOwnedProducts = this.userInfo.isLoggedIn\n          ? await this.getUserProductsViaGUPS(productDisplayHirachy)\n          : await this.getUserProductsViaGupsWithAnonymousId();\n        \n        // If the user owns any products, the code filters out these products from the productDisplayHirachy array and updates getFilteredHirachyList accordingly.\n        if(userOwnedProducts && userOwnedProducts.length > 0) {\n          getFilteredHirachyList = productDisplayHirachy\n            .filter(hirachyItem => !userOwnedProducts.includes(hirachyItem))\n        }\n      } catch (error) {\n        console.error(error);\n      }\n\n      this.isGupsCalled = true;\n\n      if (getFilteredHirachyList.length < 3) {\n        const additionalDisplayNeeded = 3 - getFilteredHirachyList.length;\n        // Find additional products from productDisplayHirachy that are not already in getFilteredHirachyList\n        const additionalProducts = productDisplayHirachy\n          .filter(product => \n            !getFilteredHirachyList.includes(product)\n          )\n          .slice(0, additionalDisplayNeeded);        \n        getFilteredHirachyList = getFilteredHirachyList.concat(additionalProducts);\n      } else {\n        getFilteredHirachyList = getFilteredHirachyList.slice(0, 3);\n      }\n\n      this.cTADropdownHoverContent.querySelector(\"#highlightItem1__link\")!.setAttribute(\"href\", productDisplayMetaDataMap[getFilteredHirachyList[0]].href);\n      this.cTADropdownHoverContent.querySelector(\"#highlightItem1__img\")!.setAttribute(\"src\", productDisplayMetaDataMap[getFilteredHirachyList[0]].imgSource);\n      this.cTADropdownHoverContent.querySelector(\"#highlightItem1__product--title\")!.innerHTML = productDisplayMetaDataMap[getFilteredHirachyList[0]].heading;\n      this.cTADropdownHoverContent.querySelector(\"#highlightItem1__product--subText\")!.innerHTML = productDisplayMetaDataMap[getFilteredHirachyList[0]].subText;\n\n      this.cTADropdownHoverContent.querySelector(\"#highlightItem2__link\")!.setAttribute(\"href\", productDisplayMetaDataMap[getFilteredHirachyList[1]].href);\n      this.cTADropdownHoverContent.querySelector(\"#highlightItem2__img\")!.setAttribute(\"src\", productDisplayMetaDataMap[getFilteredHirachyList[1]].imgSource);\n      this.cTADropdownHoverContent.querySelector(\"#highlightItem2__product--title\")!.innerHTML = productDisplayMetaDataMap[getFilteredHirachyList[1]].heading;\n      this.cTADropdownHoverContent.querySelector(\"#highlightItem2__product--subText\")!.innerHTML = productDisplayMetaDataMap[getFilteredHirachyList[1]].subText;\n\n      this.cTADropdownHoverContent.querySelector(\"#highlightItem3__link\")!.setAttribute(\"href\", productDisplayMetaDataMap[getFilteredHirachyList[2]].href);\n      this.cTADropdownHoverContent.querySelector(\"#highlightItem3__img\")!.setAttribute(\"src\", productDisplayMetaDataMap[getFilteredHirachyList[2]].imgSource);\n      this.cTADropdownHoverContent.querySelector(\"#highlightItem3__product--title\")!.innerHTML = productDisplayMetaDataMap[getFilteredHirachyList[2]].heading;\n      this.cTADropdownHoverContent.querySelector(\"#highlightItem3__product--subText\")!.innerHTML = productDisplayMetaDataMap[getFilteredHirachyList[2]].subText;\n\n      this.onDisplayDropdownPanelContent();\n  };\n\n  onDisplayDropdownPanelContent = () => {\n    if(!this.dropdownContentLoader.classList.contains(\"hide\")) {\n      this.dropdownContentLoader.classList.add(\"hide\");\n    }\n    if(!this.dropdownPanelContent.classList.contains(\"active\")) {\n      this.dropdownPanelContent.classList.add(\"active\");\n    }\n  }\n\n  onCloseDisplayDropdownPanelContent = () => {\n    if(this.dropdownContentLoader.classList.contains(\"hide\")) {\n      this.dropdownContentLoader.classList.remove(\"hide\");\n    }\n    if(this.dropdownPanelContent.classList.contains(\"active\")) {\n      this.dropdownPanelContent.classList.remove(\"active\");\n    }\n  }\n\n  async onGraphqlApiRequest(query: string): Promise<Response> {\n    return fetch(graphqlUrl, {\n        method: \"POST\",\n        credentials: \"include\",\n        headers: {\n          \"Content-type\": \"application/json\",\n        },\n        body: JSON.stringify({ query: query })\n    });\n  }\n\n  getUserProductsViaGupsWithAnonymousId = async () => {\n    const productDisplayHirachyByNameMap = {\n      'jira': ProductKeys.JIRA_SOFTWARE, \n      'confluence': ProductKeys.CONFLUENCE, \n      'jsm': ProductKeys.JIRA_SERVICE_MANAGEMENT, \n      'jpd': ProductKeys.JIRA_PRODUCT_DISCOVERY,\n      'compass': ProductKeys.COMPASS\n    };\n\n    const cleanAnonymousId = decodeURIComponent(storage.getCookie(\"ajs_anonymous_id\") ?? \"\").replace(/['\"]+/g, \"\");\n    const queryWithAnonymousId = `\n      query getUnifiedProfile {\n          growthUnifiedProfile_getUnifiedProfile(\n              anonymousId: \"${cleanAnonymousId}\"\n          ) {\n              entityType\n              enrichmentStatus\n              userFootprints {\n                products\n                hasAtlassianAccount\n              }\n          }\n      }\n    `;\n\n    const response = await this.onGraphqlApiRequest(queryWithAnonymousId);\n    if(response.ok) {\n      const responseJson = await response.json();\n      const userFootprints = responseJson.data.growthUnifiedProfile_getUnifiedProfile.userFootprints.products;\n      if (userFootprints.length > 0) {\n        const mappedUserFootPrints = (userFootprints as (keyof typeof productDisplayHirachyByNameMap)[]).map((userFootprints) => productDisplayHirachyByNameMap[userFootprints]);\n        return mappedUserFootPrints;\n      }\n      return userFootprints;\n    }\n    throw 'Unable to fetch userFootprints products';\n  };\n\n  getUserProductsViaGUPS = async (productDisplayHirachy) => {\n    // Map productDisplay to metadata from param\n    const userAaid = await hamletUser.getUserAaid();\n    const query = ` \n        query getProfile {\n          growthUnifiedProfile_getUnifiedProfile(\n            accountId: \"${userAaid}\"\n          ) {\n            sites {\n              cloudId\n              displayName\n              siteCreatedAt\n              url\n              hasAdminAccess\n              products {\n                productName\n                productKey\n                productEdition\n                d0Eligible\n                d1to6Eligible\n                d0Active\n                d1to6Active\n                \n              }\n            } \n          }\n        }\n    `;\n\n    const response = await this.onGraphqlApiRequest(query);\n    if(response.ok) {\n      const responseJson = await response.json();\n      const siteProductList = (\n          responseJson\n            .data\n            .growthUnifiedProfile_getUnifiedProfile\n            .sites as siteGrowthUnifiedProfileGetUnifiedProfileSiteType[]\n          ).flatMap(site => {\n            return site.products.map(product => product.productKey);\n          });\n      if (siteProductList.length > 0) {\n        const ownedProductList = productDisplayHirachy.filter((productKey: string) => \n            siteProductList.includes(productKey)\n          );\n        return ownedProductList;\n      }\n      return siteProductList;\n    }\n    throw 'Unable to fetch user products';\n  }\n  \n  \n  // =======================================================================================\n\n  bindEvents = () => {\n    if (this.navType! == \"subNav\") {\n      document.body.classList.add('compound-nav');\n      this.scrollPositioning();\n      document.addEventListener(\"scroll\", () => {\n        this.scrollPositioning();\n      });\n    }\n    this.resizeMenus();\n\n    window.addEventListener(\"resize\", () => {\n      this.resizeMenus();\n      this.scrollPositioning();\n    });\n\n    [...this.DropdownNavLinks].forEach(dropdownNavLink => {\n      dropdownNavLink.addEventListener(\"mouseenter\", () => {\n        if (document.documentElement.clientWidth > 1024) {\n          this.unFocusNavs();\n          dropdownNavLink.classList.remove(\"clicked-hide\");\n          this.AccountAvatar?.classList.remove(\"show-menu\");\n          let navDropdownContent: HTMLElement = dropdownNavLink.querySelector(\".dropdown-content\");\n          let navDropdownContentSizer: HTMLElement = dropdownNavLink.querySelector(\".dropdown-content-inner\");\n          this.outlineElementSizer(navDropdownContentSizer, navDropdownContent);\n        }\n\n      });\n    });\n\n    [...this.NavLinkButtons].forEach(navLinkButton => {\n      navLinkButton.addEventListener(\"click\", () => {\n        this.domRoot.classList.add(\"secondary-show\");\n        const navLinkId = navLinkButton.dataset.navlinkid;\n        let navDropdownContent = this.domRoot.querySelector(\"#\" + navLinkId);\n\n        let tabId;\n        if (navLinkButton.dataset.tabid) {\n          tabId = navLinkButton.dataset.tabid;\n          const matchingTab: HTMLElement = navDropdownContent?.querySelector('#' + tabId);\n          const tabs: HTMLElement[] = navDropdownContent?.querySelectorAll('.singular-tab-content');\n          [...tabs].forEach(tab => {\n            tab.classList.remove(\"active\")\n          });\n          matchingTab?.classList.add(\"active\");\n        }\n\n        [...this.DropdownContents].forEach(dropdownContent => {\n          dropdownContent.classList.remove(\"mobile-show\");\n        });\n        navDropdownContent?.classList.add(\"mobile-show\");\n        navLinkButton.parentNode.classList.toggle(\"clicked-hide\");\n      });\n\n      // keyboard navigation\n      navLinkButton.addEventListener(\"keyup\", (e: any) => {\n        const buttonLi = navLinkButton.parentNode;\n        if (e.key == \"Tab\" && document.documentElement.clientWidth > 1024) {\n          this.unFocusNavs();\n          buttonLi.classList.add(\"key-focus\");\n\n          this.AccountAvatar?.classList.remove(\"show-menu\");\n          if (buttonLi.classList.contains(\"has-dropdown\")) {\n            let navDropdownContent: HTMLElement = buttonLi.querySelector(\".dropdown-content\");\n            let navDropdownContentSizer: HTMLElement = buttonLi.querySelector(\".dropdown-content-inner\");\n            this.outlineElementSizer(navDropdownContentSizer, navDropdownContent);\n          }\n        } else if (e.key == \"Enter\") {\n          let finder = buttonLi;\n          let tabId = navLinkButton.getAttribute(\"data-tabid\");\n          if (tabId && document.getElementById(tabId)) {\n            finder = document.getElementById(tabId);\n          }\n          const firstLink: HTMLElement = finder.querySelector(\".tab-content-area a\");\n          firstLink.focus({ focusVisible: true });\n        } else if (e.key == \"Escape\") {\n          this.closeEverything();\n        }\n\n      });\n    });\n\n    [...this.TabButtons].forEach(tabButton => {\n\n      tabButton.addEventListener(\"click\", () => {\n        const tabsParent: HTMLElement = tabButton.closest(\".dropdown-content\");\n        const tabsParentInner: HTMLElement = tabsParent.querySelector(\".dropdown-content-inner\");\n\n        const thisTabID = tabButton.dataset.tabid;\n        const multiTabContents: HTMLElement[] = tabsParent.querySelectorAll(\".singular-tab-content\");\n        const multiTabButtons: HTMLElement[] = tabsParent.querySelectorAll(\".tab-button\");\n\n        [...multiTabButtons].forEach(tabButton => {\n          tabButton.classList.remove(\"active\");\n        });\n\n        [...multiTabContents].forEach(tabContent => {\n          if (tabContent.id == thisTabID) {\n            tabContent.classList.add(\"active\")\n          } else {\n            tabContent.classList.remove(\"active\");\n          }\n        });\n        tabButton.classList.add(\"active\");\n        this.outlineElementSizer(tabsParentInner, tabsParent);\n\n      })\n    });\n\n    this.ButtonMenuMore.addEventListener(\"click\", () => {\n      this.domRoot.classList.add(\"menu-expanded\");\n    });\n\n    this.ButtonMenuLess.addEventListener(\"click\", () => {\n      this.domRoot.classList.remove(\"menu-expanded\");\n    });\n\n    this.CloseAll.addEventListener(\"click\", () => {\n      this.closeEverything();\n    });\n\n    this.MobileToggle.addEventListener(\"click\", () => {\n      this.AccountAvatar?.classList.remove(\"show-menu\");\n      this.domRoot.classList.remove(\"secondary-show\");\n      if (this.domRoot.classList.contains(\"mobile-show\")) {\n        this.domRoot.classList.remove(\"mobile-show\");\n        this.hideClickableOverlay();\n      } else {\n        this.domRoot.classList.add(\"mobile-show\");\n        this.showClickableOverlay();\n      }\n\n    });\n\n    [...this.MobileBackButtons].forEach(mobileBackButton => {\n      mobileBackButton.addEventListener(\"click\", () => {\n        this.domRoot.classList.remove(\"secondary-show\");\n        this.SearchForm?.classList.remove(\"active\");\n        setTimeout(() => {\n          mobileBackButton.parentNode.classList.remove(\"mobile-show\");\n        }, 250);\n      });\n    });\n\n    if (this.navType !== \"subNav\") {\n      this.SearchOpen.addEventListener(\"click\", () => {\n        this.showClickableOverlay();\n        this.SearchForm.classList.add(\"active\");\n        this.domRoot.classList.add(\"secondary-show\");\n\n        trackEvent(\"button clicked searchButtonDesktop\", {\n          eventComponent: \"button\",\n          action: \"clicked\",\n          component: \"button\",\n          source: \"globalNav\",\n          actionSubjectId: \"searchButtonDesktop\"\n        });\n      });\n\n      this.SearchClose.addEventListener(\"click\", () => {\n        this.closeSearch();\n        this.domRoot.classList.remove(\"secondary-show\");\n\n        trackEvent(\"button clicked searchCloseButtonDesktop\", {\n          eventComponent: \"button\",\n          action: \"clicked\",\n          component: \"button\",\n          source: \"globalNav\",\n          actionSubjectId: \"searchCloseButtonDesktop\"\n        });\n      });\n\n\n      this.searchHelper.on('result', ({ results, state }) => {\n        if (results && results.hits) {\n          this.SearchHits = results.hits;\n          this.SearchQuery = results.query;\n          this.QueryId = results.queryID as string;\n        }\n      });\n\n      this.SearchInput.addEventListener(\"keyup\", (e) => {\n        this.searchHelper.setQuery(e.target.value);\n        this.searchHelper.search();\n\n        this.populateSearchResults();\n      });\n\n      this.SearchInput.addEventListener(\"keypress\", (e) => {\n        if (e.key === 'Enter') {\n          trackEvent(\"search submitted\", {\n            eventComponent: \"search\",\n            action: \"submitted\",\n            component: \"searchInput\",\n            source: \"globalNav\",\n            actionSubjectId: \"globalNavSearchBar\"\n          });\n\n          window.location.href = `/search?q=${e.target.value}`;\n        }\n      });\n\n      this.SearchInputSVG.addEventListener('click', function () {\n        var searchInput = document.querySelector(\".adg4-search-input\") as HTMLInputElement;\n        window.location.href = `/search?q=${searchInput?.value}`;\n      });\n    }\n  }\n\n  closeEverything = () => {\n    this.hideClickableOverlay();\n    this.unFocusNavs();\n    this.AccountAvatar?.classList.remove(\"show-menu\");\n    this.closeSearch();\n  }\n\n  resizeMenus = () => {\n    if (document.documentElement.clientWidth > 1024 && !this.domRoot.classList.contains(\"menu-expanded\")) {\n      let hasWrapped = false;\n      let firstWrapped = 0;\n      for (let i = 0; i < [...this.GenericNavLinks].length; i++) {\n        const navLink = [...this.GenericNavLinks][i];\n        if (navLink.offsetTop > 0 || (navLink.nextElementSibling.offsetTop > 0)) {\n          navLink.classList.add(\"wrapped\");\n          if (!hasWrapped) {\n            hasWrapped = true;\n            firstWrapped = i;\n          }\n        } else if (\n          (this.WindowWidth > document.documentElement.clientWidth && this.WrappedElementIndex > i)\n          ||\n          (this.WindowWidth < document.documentElement.clientWidth && this.WrappedElementIndex < i)\n        ) {\n          navLink.classList.remove(\"wrapped\");\n        }\n      };\n\n      this.WrappedElementIndex = firstWrapped;\n      this.WindowWidth = document.documentElement.clientWidth;\n\n      if (hasWrapped) {\n        this.domRoot.classList.add(\"menu-wrapped\");\n\n      } else {\n        this.domRoot.classList.remove(\"menu-wrapped\");\n\n      }\n    }\n  }\n\n  scrollPositioning = () => {\n    if (document.documentElement.clientWidth > 1024 && window.scrollY > 68) {\n      document.body.classList.add(\"compound-stuck\");\n    } else {\n      document.body.classList.remove(\"compound-stuck\");\n    }\n  }\n\n  outlineElementSizer = (comparisonElement: HTMLElement, comparisonParent: HTMLElement) => {\n    this.OutlineElement.style.width = (comparisonElement.offsetWidth) + \"px\";\n    this.OutlineElement.style.height = (comparisonElement.offsetHeight) + \"px\";\n    this.OutlineElement.style.left = (comparisonParent.offsetLeft) + \"px\";\n  }\n\n  showClickableOverlay = () => {\n    this.OverlayClickable.classList.add(\"mobile-show\");\n    this.OverlayColor.classList.add(\"mobile-show\");\n  }\n\n  hideClickableOverlay = () => {\n    this.domRoot.classList.remove(\"mobile-show\");\n    this.domRoot.classList.remove(\"secondary-show\");\n    this.OverlayColor.classList.remove(\"mobile-show\")\n    this.OverlayClickable.classList.remove(\"mobile-show\");\n  }\n\n  unFocusNavs = () => {\n    [...this.NavLinkButtons].forEach(otherDropdownLink => {\n      otherDropdownLink.parentNode.classList.remove(\"key-focus\", \"clicked-hide\");\n    });\n  }\n\n  closeSearch = () => {\n    this.hideClickableOverlay();\n    if (this.navType !== \"subNav\") {\n      this.SearchForm.style.left = \"100%\";\n      this.SearchResultsContainer.innerHTML = '';\n      this.SearchInput.value = '';\n      setTimeout(() => {\n        this.SearchForm.classList.remove(\"active\");\n        this.SearchForm.style.left = '';\n      }, 250);\n    }\n\n  }\n\n  hideUserMenu = () => {\n    this.hideClickableOverlay();\n    this.AccountAvatar?.classList.remove(\"show-menu\");\n  }\n\n  showUserMenu = () => {\n    this.showClickableOverlay();\n    this.AccountAvatar?.classList.add(\"show-menu\");\n  }\n\n  createEl = (info: any) => {\n    const newEl = document.createElement(info.tag);\n    newEl.innerHTML = info.label;\n    newEl.onclick = info.clicker;\n    newEl.className = info.classes ? info.classes : '';\n    return newEl;\n  }\n\n  populateLoggedInUser = () => {\n    document.querySelector(\"#adg4-app-switcher\")?.classList.add(\"loaded\");\n    const userProfileMenu = this.createEl({\n      tag: \"div\",\n      classes: \"user-profile-info\",\n      label: `<span>${this.userInfo.email}</span>`\n    });\n\n    const ProfileButtons = [\n      this.createEl({ tag: \"button\", label: this.labels[\"JoinSiteUserDropdown.switchAccount\"], clicker: () => { this.onSwitchAccountClick() } }),\n      this.createEl({ tag: \"button\", label: this.labels[\"JoinSiteUserDropdown.profile\"], clicker: () => { this.onManageProfileClick() } }),\n      this.createEl({ tag: \"button\", label: this.labels[\"JoinSiteUserDropdown.licenses\"], clicker: () => { this.onManageLicensesClick() } }),\n      this.createEl({ tag: \"button\", label: this.labels[\"JoinSiteUserDropdown.logOut\"], clicker: () => { this.onLogOutClick() } })\n    ];\n    ProfileButtons.forEach(btn => {\n      userProfileMenu.appendChild(btn);\n    })\n\n    const userButton = this.createEl({\n      tag: \"button\",\n      classes: \"account\",\n      label: `<img src=\"${this.userInfo.avatar}\"><span id=\"account-login-fullname\">${this.userInfo.displayName.slice(0, 15)}${this.userInfo.displayName.length > 14 ? \"...\" : \"\"}</span>`,\n      clicker: () => {\n        if (this.AccountAvatar?.classList.contains(\"show-menu\")) {\n          this.hideUserMenu();\n        } else {\n          this.showUserMenu();\n        }\n      }\n    });\n\n    this.AccountAvatar?.appendChild(userButton);\n    this.AccountAvatar?.appendChild(userProfileMenu);\n    this.resizeMenus();\n  }\n\n  handelOffElementDropdownClickEvent = (event: MouseEvent) => {\n    if (!(event.target as HTMLElement).closest(\".user-profile-info\")\n      && this.AccountAvatar?.classList.contains(\"show-menu\")) {\n      this.hideUserMenu();\n    }\n  }\n\n  handelOffElementDropdownEscKeyEvent = (event: KeyboardEvent) => {\n    if (event.key === \"Escape\"\n      && this.AccountAvatar?.classList.contains(\"show-menu\")) {\n      this.hideUserMenu();\n    }\n  }\n\n  addAvatarOutsideClickEventListener = () => {\n    this.domRoot.addEventListener(\"mousedown\", this.handelOffElementDropdownClickEvent);\n    this.domRoot.addEventListener(\"keydown\", this.handelOffElementDropdownEscKeyEvent, false);\n  }\n\n  populateLoggedOutUser = () => {\n    const loginInButton = this.createEl({\n      tag: \"button\",\n      clicker: this.onLogInClick,\n      label: this.labels[\"JoinSiteUserDropdown.logIn\"]\n    });\n    this.AccountSignIn.appendChild(loginInButton);\n    this.resizeMenus();\n  }\n\n  populateSearchResults = () => {\n    this.SearchResultsContainer.innerHTML = '';\n    const searchArray = this.SearchHits;\n    const query = this.SearchQuery;\n    const filteredSearchArray = searchArray.filter((hit: any) => hit.hasOwnProperty(\"description\") && hit.hasOwnProperty(\"url\")).slice(0, 7);\n    const ulResults = document.createElement(\"ul\");\n    const resultsFragment = document.createDocumentFragment();\n\n    if (query.length > 0 && filteredSearchArray.length > 0) {\n      filteredSearchArray.forEach((hit, index) => {\n        const hitLi = document.createElement(\"li\");\n        const hitA = document.createElement(\"a\");\n        hitA.href = hit.url;\n        hitA.onclick = () => {\n          tracking.trackEvent(\"bxp.globalnavdropdown.click.search-result\");\n\n          // Send click event to Algolia\n          const position = index + 1;\n          sendClickEvent(this.QueryId, hit.objectID, position);\n\n          trackEvent(\"linkButton clicked\", {\n            eventComponent: \"linkButton\",\n            action: \"clicked\",\n            component: \"searchResult\",\n            source: \"globalNav\",\n            actionSubjectId: \"globalNavSearchResults\"\n          });\n        };\n        const searchHitTitle = hit.title;\n        const lowCaseSearch = query.toLowerCase();\n        const lowCaseTitle = searchHitTitle.toLowerCase();\n        const splitter = new RegExp(`${lowCaseSearch}(.*)`, \"s\");\n        const [split1, split2] =\n          lowCaseTitle.split(splitter) as [\n            string,\n            string\n          ];\n        const displayTitle = `${searchHitTitle.slice(0, split1.length)}<strong>${lowCaseTitle.includes(query) ? query : ''}</strong>${searchHitTitle.slice(split1.length + lowCaseSearch.length, split1.length + lowCaseSearch.length + (split2 ? split2.length : searchHitTitle.length))}`;\n        hitA.innerHTML = displayTitle;\n        hitLi.appendChild(hitA);\n        resultsFragment.appendChild(hitLi);\n      });\n\n      ulResults.appendChild(resultsFragment);\n      this.SearchResultsContainer.appendChild(ulResults);\n    } else if (query.length > 0 && filteredSearchArray.length == 0) {\n      ulResults.innerHTML = \"No results found\";\n\n      ulResults.appendChild(resultsFragment);\n      this.SearchResultsContainer.appendChild(ulResults);\n    } else if (query.length < 1) {\n      this.SearchResultsContainer.innerHTML = \"\";\n    }\n  }\n\n  sendTracking(eventName: string, linkName: string) {\n    var properties = {\n      originUrl: window.location.href,\n      linkText: linkName,\n    };\n    tracking.trackEvent(eventName, properties);\n  }\n\n  /* account */\n\n  onSwitchAccountClick = () => {\n    tracking.trackEvent(\"bxp.globalnavdropdown.click.switchAccount\");\n    window.location.href = Environment.getSwitchAccountURL();\n  }\n\n  onManageProfileClick = () => {\n    const additionalTracking = {\n      label: this.labels[\"JoinSiteUserDropdown.profile\"]\n    };\n    tracking.trackEvent(\n      \"bxp.globalnavdropdown.click.manage.profile\",\n      Object.assign(this.defaultTrackProperties, {\n        ...additionalTracking,\n        ...this.origin.toAnalyticsAttributes({ hasGeneratedId: true })\n      })\n    );\n    window.location.href = Environment.getManageProfileUrl(this.userInfo.email);\n  }\n\n  onManageLicensesClick = () => {\n    const additionalTracking = {\n      label: this.labels[\"JoinSiteUserDropdown.licenses\"]\n    };\n    tracking.trackEvent(\n      \"bxp.globalnavdropdown.click.manage.licenses\",\n      Object.assign(this.defaultTrackProperties, {\n        ...additionalTracking,\n        ...this.origin.toAnalyticsAttributes({ hasGeneratedId: true })\n      })\n    );\n    window.location.href = Environment.getMacUrl();\n  }\n\n  onLogOutClick = () => {\n    const additionalTracking = {\n      label: this.labels[\"JoinSiteUserDropdown.logOut\"]\n    };\n    tracking.trackEvent(\n      \"bxp.globalnavdropdown.click.logout\",\n      Object.assign(this.defaultTrackProperties, {\n        ...additionalTracking,\n        ...this.origin.toAnalyticsAttributes({ hasGeneratedId: true })\n      })\n    );\n    window.location.href = Environment.getLogoutUrl();\n  }\n\n  onLogInClick = () => {\n    const baseUrl = Environment.getIdentityBaseUrl();\n    const stargateBaseUrl = Environment.getAPIPrivateURL();\n    const continueUrl = this.origin.addToUrl(stargateBaseUrl + \"/start/authredirect\");\n    const additionalTracking = {\n      label: this.labels[\"JoinSiteUserDropdown.logIn\"]\n    };\n    tracking.trackEvent(\n      \"bxp.globalnavdropdown.click.login\",\n      Object.assign(this.defaultTrackProperties, {\n        ...additionalTracking,\n        ...this.origin.toAnalyticsAttributes({ hasGeneratedId: true })\n      })\n    );\n    window.location.href = `${baseUrl}/login?continue=${encodeURIComponent(\n      continueUrl\n    )}`;\n  }\n\n  onJoinYourTeamClick = () => {\n    const baseUrl = Environment.getIdentityBaseUrl();\n    const stargateBaseUrl = Environment.getAPIPrivateURL();\n    const continueUrl = this.origin.addToUrl(stargateBaseUrl + \"/start/authredirect\");\n    const additionalTracking = {\n      label: this.labels[\"JoinSiteUserDropdown.joinTeam\"]\n    };\n    tracking.trackEvent(\n      \"bxp.globalnavdropdown.click.join.team\",\n      Object.assign(this.defaultTrackProperties, {\n        ...additionalTracking,\n        ...this.origin.toAnalyticsAttributes({ hasGeneratedId: true })\n      })\n    );\n    window.location.href = `${baseUrl}/login?continue=${encodeURIComponent(\n      continueUrl\n    )}`;\n  }\n\n  onCreateAcountClick = () => {\n    const loginUrl = `${Environment.getIdentityBaseUrl()}/signup?`;\n    const startUrl = Environment.getStartUrl();\n    const additionalTracking = {\n      label: this.labels[\"JoinSiteUserDropdown.createAccount\"]\n    };\n    tracking.trackEvent(\n      \"bxp.globalnavdropdown.click.create.account\",\n      Object.assign(this.defaultTrackProperties, {\n        ...additionalTracking,\n        ...this.origin.toAnalyticsAttributes({ hasGeneratedId: true })\n      })\n    );\n    window.location.href =\n      loginUrl + `&continue=${encodeURIComponent(startUrl)}`;\n  }\n\n  async getUser() {\n    const isDebugMode = window.location.search.includes(\"debug=true\");\n\n    await hamletUser.getStargateProfile(true, isDebugMode, true);\n    const email = hamletUser.getUserEmail() || \"\";\n    return {\n      sites: hamletUser.getSites(),\n      displayName: hamletUser.getDisplayName(),\n      avatar: hamletUser.getAvatar(),\n      email,\n      isLoggedIn: hamletUser.isLoggedIn()\n    };\n  }\n\n  async getAvailableProductsAndUserLoggedInStatus() {\n    const availableProductsSites = await hamletUser.retrieveAvailableProductsData(false);\n    return availableProductsSites;\n  }\n}\n","/*! https://mths.be/punycode v1.3.2 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t    counter = 0,\n\t\t    length = string.length,\n\t\t    value,\n\t\t    extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t//  0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * http://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t    inputLength = input.length,\n\t\t    out,\n\t\t    i = 0,\n\t\t    n = initialN,\n\t\t    bias = initialBias,\n\t\t    basic,\n\t\t    j,\n\t\t    index,\n\t\t    oldi,\n\t\t    w,\n\t\t    k,\n\t\t    digit,\n\t\t    t,\n\t\t    /** Cached calculation results */\n\t\t    baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t    delta,\n\t\t    handledCPCount,\n\t\t    basicLength,\n\t\t    bias,\n\t\t    j,\n\t\t    m,\n\t\t    q,\n\t\t    k,\n\t\t    t,\n\t\t    currentValue,\n\t\t    output = [],\n\t\t    /** `inputLength` will hold the number of code points in `input`. */\n\t\t    inputLength,\n\t\t    /** Cached calculation results */\n\t\t    handledCPCountPlusOne,\n\t\t    baseMinusT,\n\t\t    qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.3.2',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n  this.protocol = null;\n  this.slashes = null;\n  this.auth = null;\n  this.host = null;\n  this.port = null;\n  this.hostname = null;\n  this.hash = null;\n  this.search = null;\n  this.query = null;\n  this.pathname = null;\n  this.path = null;\n  this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n    portPattern = /:[0-9]*$/,\n\n    // Special case for a simple path URL\n    simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n    // RFC 2396: characters reserved for delimiting URLs.\n    // We actually just auto-escape these.\n    delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n    // RFC 2396: characters not allowed for various reasons.\n    unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n    // Allowed by RFCs, but cause of XSS attacks.  Always escape these.\n    autoEscape = ['\\''].concat(unwise),\n    // Characters that are never ever allowed in a hostname.\n    // Note that any invalid chars are also handled, but these\n    // are the ones that are *expected* to be seen, so we fast-path\n    // them.\n    nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n    hostEndingChars = ['/', '?', '#'],\n    hostnameMaxLen = 255,\n    hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n    hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n    // protocols that can allow \"unsafe\" and \"unwise\" chars.\n    unsafeProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that never have a hostname.\n    hostlessProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that always contain a // bit.\n    slashedProtocol = {\n      'http': true,\n      'https': true,\n      'ftp': true,\n      'gopher': true,\n      'file': true,\n      'http:': true,\n      'https:': true,\n      'ftp:': true,\n      'gopher:': true,\n      'file:': true\n    },\n    querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n  if (url && util.isObject(url) && url instanceof Url) return url;\n\n  var u = new Url;\n  u.parse(url, parseQueryString, slashesDenoteHost);\n  return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n  if (!util.isString(url)) {\n    throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n  }\n\n  // Copy chrome, IE, opera backslash-handling behavior.\n  // Back slashes before the query string get converted to forward slashes\n  // See: https://code.google.com/p/chromium/issues/detail?id=25916\n  var queryIndex = url.indexOf('?'),\n      splitter =\n          (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n      uSplit = url.split(splitter),\n      slashRegex = /\\\\/g;\n  uSplit[0] = uSplit[0].replace(slashRegex, '/');\n  url = uSplit.join(splitter);\n\n  var rest = url;\n\n  // trim before proceeding.\n  // This is to support parse stuff like \"  http://foo.com  \\n\"\n  rest = rest.trim();\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    var simplePath = simplePathPattern.exec(rest);\n    if (simplePath) {\n      this.path = rest;\n      this.href = rest;\n      this.pathname = simplePath[1];\n      if (simplePath[2]) {\n        this.search = simplePath[2];\n        if (parseQueryString) {\n          this.query = querystring.parse(this.search.substr(1));\n        } else {\n          this.query = this.search.substr(1);\n        }\n      } else if (parseQueryString) {\n        this.search = '';\n        this.query = {};\n      }\n      return this;\n    }\n  }\n\n  var proto = protocolPattern.exec(rest);\n  if (proto) {\n    proto = proto[0];\n    var lowerProto = proto.toLowerCase();\n    this.protocol = lowerProto;\n    rest = rest.substr(proto.length);\n  }\n\n  // figure out if it's got a host\n  // user@server is *always* interpreted as a hostname, and url\n  // resolution will treat //foo/bar as host=foo,path=bar because that's\n  // how the browser resolves relative URLs.\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n    var slashes = rest.substr(0, 2) === '//';\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2);\n      this.slashes = true;\n    }\n  }\n\n  if (!hostlessProtocol[proto] &&\n      (slashes || (proto && !slashedProtocol[proto]))) {\n\n    // there's a hostname.\n    // the first instance of /, ?, ;, or # ends the host.\n    //\n    // If there is an @ in the hostname, then non-host chars *are* allowed\n    // to the left of the last @ sign, unless some host-ending character\n    // comes *before* the @-sign.\n    // URLs are obnoxious.\n    //\n    // ex:\n    // http://a@b@c/ => user:a@b host:c\n    // http://a@b?@c => user:a host:c path:/?@c\n\n    // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n    // Review our test case against browsers more comprehensively.\n\n    // find the first instance of any hostEndingChars\n    var hostEnd = -1;\n    for (var i = 0; i < hostEndingChars.length; i++) {\n      var hec = rest.indexOf(hostEndingChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n        hostEnd = hec;\n    }\n\n    // at this point, either we have an explicit point where the\n    // auth portion cannot go past, or the last @ char is the decider.\n    var auth, atSign;\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@');\n    } else {\n      // atSign must be in auth portion.\n      // http://a@b/c@d => host:b auth:a path:/c@d\n      atSign = rest.lastIndexOf('@', hostEnd);\n    }\n\n    // Now we have a portion which is definitely the auth.\n    // Pull that off.\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign);\n      rest = rest.slice(atSign + 1);\n      this.auth = decodeURIComponent(auth);\n    }\n\n    // the host is the remaining to the left of the first non-host char\n    hostEnd = -1;\n    for (var i = 0; i < nonHostChars.length; i++) {\n      var hec = rest.indexOf(nonHostChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n        hostEnd = hec;\n    }\n    // if we still have not hit it, then the entire thing is a host.\n    if (hostEnd === -1)\n      hostEnd = rest.length;\n\n    this.host = rest.slice(0, hostEnd);\n    rest = rest.slice(hostEnd);\n\n    // pull out port.\n    this.parseHost();\n\n    // we've indicated that there is a hostname,\n    // so even if it's empty, it has to be present.\n    this.hostname = this.hostname || '';\n\n    // if hostname begins with [ and ends with ]\n    // assume that it's an IPv6 address.\n    var ipv6Hostname = this.hostname[0] === '[' &&\n        this.hostname[this.hostname.length - 1] === ']';\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      var hostparts = this.hostname.split(/\\./);\n      for (var i = 0, l = hostparts.length; i < l; i++) {\n        var part = hostparts[i];\n        if (!part) continue;\n        if (!part.match(hostnamePartPattern)) {\n          var newpart = '';\n          for (var j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              // we replace non-ASCII char with a temporary placeholder\n              // we need this to make sure size of hostname is not\n              // broken by replacing non-ASCII by nothing\n              newpart += 'x';\n            } else {\n              newpart += part[j];\n            }\n          }\n          // we test again with ASCII char only\n          if (!newpart.match(hostnamePartPattern)) {\n            var validParts = hostparts.slice(0, i);\n            var notHost = hostparts.slice(i + 1);\n            var bit = part.match(hostnamePartStart);\n            if (bit) {\n              validParts.push(bit[1]);\n              notHost.unshift(bit[2]);\n            }\n            if (notHost.length) {\n              rest = '/' + notHost.join('.') + rest;\n            }\n            this.hostname = validParts.join('.');\n            break;\n          }\n        }\n      }\n    }\n\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = '';\n    } else {\n      // hostnames are always lower case.\n      this.hostname = this.hostname.toLowerCase();\n    }\n\n    if (!ipv6Hostname) {\n      // IDNA Support: Returns a punycoded representation of \"domain\".\n      // It only converts parts of the domain name that\n      // have non-ASCII characters, i.e. it doesn't matter if\n      // you call it with a domain that already is ASCII-only.\n      this.hostname = punycode.toASCII(this.hostname);\n    }\n\n    var p = this.port ? ':' + this.port : '';\n    var h = this.hostname || '';\n    this.host = h + p;\n    this.href += this.host;\n\n    // strip [ and ] from the hostname\n    // the host field still retains them, though\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n      if (rest[0] !== '/') {\n        rest = '/' + rest;\n      }\n    }\n  }\n\n  // now rest is set to the post-host stuff.\n  // chop off any delim chars.\n  if (!unsafeProtocol[lowerProto]) {\n\n    // First, make 100% sure that any \"autoEscape\" chars get\n    // escaped, even if encodeURIComponent doesn't think they\n    // need to be.\n    for (var i = 0, l = autoEscape.length; i < l; i++) {\n      var ae = autoEscape[i];\n      if (rest.indexOf(ae) === -1)\n        continue;\n      var esc = encodeURIComponent(ae);\n      if (esc === ae) {\n        esc = escape(ae);\n      }\n      rest = rest.split(ae).join(esc);\n    }\n  }\n\n\n  // chop off from the tail first.\n  var hash = rest.indexOf('#');\n  if (hash !== -1) {\n    // got a fragment string.\n    this.hash = rest.substr(hash);\n    rest = rest.slice(0, hash);\n  }\n  var qm = rest.indexOf('?');\n  if (qm !== -1) {\n    this.search = rest.substr(qm);\n    this.query = rest.substr(qm + 1);\n    if (parseQueryString) {\n      this.query = querystring.parse(this.query);\n    }\n    rest = rest.slice(0, qm);\n  } else if (parseQueryString) {\n    // no query string, but parseQueryString still requested\n    this.search = '';\n    this.query = {};\n  }\n  if (rest) this.pathname = rest;\n  if (slashedProtocol[lowerProto] &&\n      this.hostname && !this.pathname) {\n    this.pathname = '/';\n  }\n\n  //to support http.request\n  if (this.pathname || this.search) {\n    var p = this.pathname || '';\n    var s = this.search || '';\n    this.path = p + s;\n  }\n\n  // finally, reconstruct the href based on what has been validated.\n  this.href = this.format();\n  return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n  // ensure it's an object, and not a string url.\n  // If it's an obj, this is a no-op.\n  // this way, you can call url_format() on strings\n  // to clean up potentially wonky urls.\n  if (util.isString(obj)) obj = urlParse(obj);\n  if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n  return obj.format();\n}\n\nUrl.prototype.format = function() {\n  var auth = this.auth || '';\n  if (auth) {\n    auth = encodeURIComponent(auth);\n    auth = auth.replace(/%3A/i, ':');\n    auth += '@';\n  }\n\n  var protocol = this.protocol || '',\n      pathname = this.pathname || '',\n      hash = this.hash || '',\n      host = false,\n      query = '';\n\n  if (this.host) {\n    host = auth + this.host;\n  } else if (this.hostname) {\n    host = auth + (this.hostname.indexOf(':') === -1 ?\n        this.hostname :\n        '[' + this.hostname + ']');\n    if (this.port) {\n      host += ':' + this.port;\n    }\n  }\n\n  if (this.query &&\n      util.isObject(this.query) &&\n      Object.keys(this.query).length) {\n    query = querystring.stringify(this.query);\n  }\n\n  var search = this.search || (query && ('?' + query)) || '';\n\n  if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n  // only the slashedProtocols get the //.  Not mailto:, xmpp:, etc.\n  // unless they had them to begin with.\n  if (this.slashes ||\n      (!protocol || slashedProtocol[protocol]) && host !== false) {\n    host = '//' + (host || '');\n    if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n  } else if (!host) {\n    host = '';\n  }\n\n  if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n  if (search && search.charAt(0) !== '?') search = '?' + search;\n\n  pathname = pathname.replace(/[?#]/g, function(match) {\n    return encodeURIComponent(match);\n  });\n  search = search.replace('#', '%23');\n\n  return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n  return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n  return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n  if (!source) return relative;\n  return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n  if (util.isString(relative)) {\n    var rel = new Url();\n    rel.parse(relative, false, true);\n    relative = rel;\n  }\n\n  var result = new Url();\n  var tkeys = Object.keys(this);\n  for (var tk = 0; tk < tkeys.length; tk++) {\n    var tkey = tkeys[tk];\n    result[tkey] = this[tkey];\n  }\n\n  // hash is always overridden, no matter what.\n  // even href=\"\" will remove it.\n  result.hash = relative.hash;\n\n  // if the relative url is empty, then there's nothing left to do here.\n  if (relative.href === '') {\n    result.href = result.format();\n    return result;\n  }\n\n  // hrefs like //foo/bar always cut to the protocol.\n  if (relative.slashes && !relative.protocol) {\n    // take everything except the protocol from relative\n    var rkeys = Object.keys(relative);\n    for (var rk = 0; rk < rkeys.length; rk++) {\n      var rkey = rkeys[rk];\n      if (rkey !== 'protocol')\n        result[rkey] = relative[rkey];\n    }\n\n    //urlParse appends trailing / to urls like http://www.example.com\n    if (slashedProtocol[result.protocol] &&\n        result.hostname && !result.pathname) {\n      result.path = result.pathname = '/';\n    }\n\n    result.href = result.format();\n    return result;\n  }\n\n  if (relative.protocol && relative.protocol !== result.protocol) {\n    // if it's a known url protocol, then changing\n    // the protocol does weird things\n    // first, if it's not file:, then we MUST have a host,\n    // and if there was a path\n    // to begin with, then we MUST have a path.\n    // if it is file:, then the host is dropped,\n    // because that's known to be hostless.\n    // anything else is assumed to be absolute.\n    if (!slashedProtocol[relative.protocol]) {\n      var keys = Object.keys(relative);\n      for (var v = 0; v < keys.length; v++) {\n        var k = keys[v];\n        result[k] = relative[k];\n      }\n      result.href = result.format();\n      return result;\n    }\n\n    result.protocol = relative.protocol;\n    if (!relative.host && !hostlessProtocol[relative.protocol]) {\n      var relPath = (relative.pathname || '').split('/');\n      while (relPath.length && !(relative.host = relPath.shift()));\n      if (!relative.host) relative.host = '';\n      if (!relative.hostname) relative.hostname = '';\n      if (relPath[0] !== '') relPath.unshift('');\n      if (relPath.length < 2) relPath.unshift('');\n      result.pathname = relPath.join('/');\n    } else {\n      result.pathname = relative.pathname;\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    result.host = relative.host || '';\n    result.auth = relative.auth;\n    result.hostname = relative.hostname || relative.host;\n    result.port = relative.port;\n    // to support http.request\n    if (result.pathname || result.search) {\n      var p = result.pathname || '';\n      var s = result.search || '';\n      result.path = p + s;\n    }\n    result.slashes = result.slashes || relative.slashes;\n    result.href = result.format();\n    return result;\n  }\n\n  var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n      isRelAbs = (\n          relative.host ||\n          relative.pathname && relative.pathname.charAt(0) === '/'\n      ),\n      mustEndAbs = (isRelAbs || isSourceAbs ||\n                    (result.host && relative.pathname)),\n      removeAllDots = mustEndAbs,\n      srcPath = result.pathname && result.pathname.split('/') || [],\n      relPath = relative.pathname && relative.pathname.split('/') || [],\n      psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n  // if the url is a non-slashed url, then relative\n  // links like ../.. should be able\n  // to crawl up to the hostname, as well.  This is strange.\n  // result.protocol has already been set by now.\n  // Later on, put the first path part into the host field.\n  if (psychotic) {\n    result.hostname = '';\n    result.port = null;\n    if (result.host) {\n      if (srcPath[0] === '') srcPath[0] = result.host;\n      else srcPath.unshift(result.host);\n    }\n    result.host = '';\n    if (relative.protocol) {\n      relative.hostname = null;\n      relative.port = null;\n      if (relative.host) {\n        if (relPath[0] === '') relPath[0] = relative.host;\n        else relPath.unshift(relative.host);\n      }\n      relative.host = null;\n    }\n    mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n  }\n\n  if (isRelAbs) {\n    // it's absolute.\n    result.host = (relative.host || relative.host === '') ?\n                  relative.host : result.host;\n    result.hostname = (relative.hostname || relative.hostname === '') ?\n                      relative.hostname : result.hostname;\n    result.search = relative.search;\n    result.query = relative.query;\n    srcPath = relPath;\n    // fall through to the dot-handling below.\n  } else if (relPath.length) {\n    // it's relative\n    // throw away the existing file, and take the new path instead.\n    if (!srcPath) srcPath = [];\n    srcPath.pop();\n    srcPath = srcPath.concat(relPath);\n    result.search = relative.search;\n    result.query = relative.query;\n  } else if (!util.isNullOrUndefined(relative.search)) {\n    // just pull out the search.\n    // like href='?foo'.\n    // Put this after the other two cases because it simplifies the booleans\n    if (psychotic) {\n      result.hostname = result.host = srcPath.shift();\n      //occationaly the auth can get stuck only in host\n      //this especially happens in cases like\n      //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n      var authInHost = result.host && result.host.indexOf('@') > 0 ?\n                       result.host.split('@') : false;\n      if (authInHost) {\n        result.auth = authInHost.shift();\n        result.host = result.hostname = authInHost.shift();\n      }\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    //to support http.request\n    if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n      result.path = (result.pathname ? result.pathname : '') +\n                    (result.search ? result.search : '');\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  if (!srcPath.length) {\n    // no path at all.  easy.\n    // we've already handled the other stuff above.\n    result.pathname = null;\n    //to support http.request\n    if (result.search) {\n      result.path = '/' + result.search;\n    } else {\n      result.path = null;\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  // if a url ENDs in . or .., then it must get a trailing slash.\n  // however, if it ends in anything else non-slashy,\n  // then it must NOT get a trailing slash.\n  var last = srcPath.slice(-1)[0];\n  var hasTrailingSlash = (\n      (result.host || relative.host || srcPath.length > 1) &&\n      (last === '.' || last === '..') || last === '');\n\n  // strip single dots, resolve double dots to parent dir\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = srcPath.length; i >= 0; i--) {\n    last = srcPath[i];\n    if (last === '.') {\n      srcPath.splice(i, 1);\n    } else if (last === '..') {\n      srcPath.splice(i, 1);\n      up++;\n    } else if (up) {\n      srcPath.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (!mustEndAbs && !removeAllDots) {\n    for (; up--; up) {\n      srcPath.unshift('..');\n    }\n  }\n\n  if (mustEndAbs && srcPath[0] !== '' &&\n      (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n    srcPath.unshift('');\n  }\n\n  if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n    srcPath.push('');\n  }\n\n  var isAbsolute = srcPath[0] === '' ||\n      (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n  // put the host back\n  if (psychotic) {\n    result.hostname = result.host = isAbsolute ? '' :\n                                    srcPath.length ? srcPath.shift() : '';\n    //occationaly the auth can get stuck only in host\n    //this especially happens in cases like\n    //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n    var authInHost = result.host && result.host.indexOf('@') > 0 ?\n                     result.host.split('@') : false;\n    if (authInHost) {\n      result.auth = authInHost.shift();\n      result.host = result.hostname = authInHost.shift();\n    }\n  }\n\n  mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n  if (mustEndAbs && !isAbsolute) {\n    srcPath.unshift('');\n  }\n\n  if (!srcPath.length) {\n    result.pathname = null;\n    result.path = null;\n  } else {\n    result.pathname = srcPath.join('/');\n  }\n\n  //to support request.http\n  if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n    result.path = (result.pathname ? result.pathname : '') +\n                  (result.search ? result.search : '');\n  }\n  result.auth = relative.auth || result.auth;\n  result.slashes = result.slashes || relative.slashes;\n  result.href = result.format();\n  return result;\n};\n\nUrl.prototype.parseHost = function() {\n  var host = this.host;\n  var port = portPattern.exec(host);\n  if (port) {\n    port = port[0];\n    if (port !== ':') {\n      this.port = port.substr(1);\n    }\n    host = host.substr(0, host.length - port.length);\n  }\n  if (host) this.hostname = host;\n};\n","'use strict';\n\nmodule.exports = {\n  isString: function(arg) {\n    return typeof(arg) === 'string';\n  },\n  isObject: function(arg) {\n    return typeof(arg) === 'object' && arg !== null;\n  },\n  isNull: function(arg) {\n    return arg === null;\n  },\n  isNullOrUndefined: function(arg) {\n    return arg == null;\n  }\n};\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n  byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n  var i = offset || 0;\n  var bth = byteToHex;\n  // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n  return ([\n    bth[buf[i++]], bth[buf[i++]],\n    bth[buf[i++]], bth[buf[i++]], '-',\n    bth[buf[i++]], bth[buf[i++]], '-',\n    bth[buf[i++]], bth[buf[i++]], '-',\n    bth[buf[i++]], bth[buf[i++]], '-',\n    bth[buf[i++]], bth[buf[i++]],\n    bth[buf[i++]], bth[buf[i++]],\n    bth[buf[i++]], bth[buf[i++]]\n  ]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","// Unique ID creation requires a high quality random # generator.  In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API.  We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||\n                      (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));\n\nif (getRandomValues) {\n  // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n  var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n  module.exports = function whatwgRNG() {\n    getRandomValues(rnds8);\n    return rnds8;\n  };\n} else {\n  // Math.random()-based (RNG)\n  //\n  // If all else fails, use Math.random().  It's fast, but is of unspecified\n  // quality.\n  var rnds = new Array(16);\n\n  module.exports = function mathRNG() {\n    for (var i = 0, r; i < 16; i++) {\n      if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n      rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n    }\n\n    return rnds;\n  };\n}\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n  var i = buf && offset || 0;\n\n  if (typeof(options) == 'string') {\n    buf = options === 'binary' ? new Array(16) : null;\n    options = null;\n  }\n  options = options || {};\n\n  var rnds = options.random || (options.rng || rng)();\n\n  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n  rnds[6] = (rnds[6] & 0x0f) | 0x40;\n  rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n  // Copy bytes to buffer, if provided\n  if (buf) {\n    for (var ii = 0; ii < 16; ++ii) {\n      buf[i + ii] = rnds[ii];\n    }\n  }\n\n  return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n"],"names":["EventEmitter","this","_events","_maxListeners","undefined","isFunction","arg","isObject","isUndefined","module","exports","prototype","defaultMaxListeners","setMaxListeners","n","isNaN","TypeError","emit","type","er","handler","len","args","i","listeners","error","length","arguments","Error","err","context","call","Array","slice","apply","addListener","listener","m","newListener","push","warned","console","trace","on","once","fired","g","removeListener","list","position","splice","removeAllListeners","key","listenerCount","evlistener","emitter","AlgoliaSearchHelper","RecommendParameters","RecommendResults","SearchParameters","SearchResults","algoliasearchHelper","client","index","opts","searchResultsOptions","version","DerivedHelper","mainHelper","fn","recommendFn","main","lastResults","lastRecommendResults","inherits","detach","detachDerivedHelper","getModifiedState","parameters","getModifiedRecommendState","params","constructor","addParams","newParams","removeParams","id","filter","param","$$id","addFrequentlyBoughtTogether","Object","assign","model","addRelatedProducts","addTrendingItems","addTrendingFacets","addLookingSimilar","_buildQueries","indexName","cache","map","query","threshold","state","results","_state","_rawResults","self","forEach","defaultsPure","objectHasKeys","omit","lib","addRefinement","refinementList","attribute","value","isRefined","valueAsString","facetRefinement","concat","mod","removeRefinement","clearRefinement","v","f","toggleRefinement","refinementType","hasChanged","newRefinementList","keys","reduce","memo","values","facetList","refinementValue","containsRefinements","Boolean","refinementValueAsString","indexOf","find","intersection","merge","valToNumber","isValidUserToken","RefinementList","isEqualNumericRefinement","a","b","isArray","every","el","newParameters","_parseNumbers","userToken","warn","facets","disjunctiveFacets","hierarchicalFacets","facetsRefinements","facetsExcludes","disjunctiveFacetsRefinements","numericRefinements","tagRefinements","hierarchicalFacetsRefinements","paramName","isKeyKnown","PARAMETERS","isValueDefined","partialState","numbers","k","parsedValue","parseFloat","insideBoundingBox","geoRect","operators","operator","parsedValues","vPrime","make","instance","facet","rootPath","currentRefinement","getHierarchicalRefinement","name","clearRefinements","toggleHierarchicalFacetRefinement","validate","currentState","tagFilters","numericFilters","patch","_clearNumericRefinements","setQueryParameters","clearTags","setIndex","setQuery","newQuery","setPage","newPage","page","setFacets","setDisjunctiveFacets","setHitsPerPage","hitsPerPage","setTypoTolerance","typoTolerance","addNumericRefinement","val","isNumericRefined","getConjunctiveRefinements","facetName","isConjunctiveFacet","getDisjunctiveRefinements","isDisjunctiveFacet","getExcludeRefinements","removeNumericRefinement","number","paramValue","op","getNumericRefinements","getNumericRefinement","newNumericRefinements","operatorList","outValues","addFacet","addDisjunctiveFacet","addHierarchicalFacet","hierarchicalFacet","isHierarchicalFacet","addFacetRefinement","addExcludeRefinement","addDisjunctiveFacetRefinement","addTagRefinement","tag","isTagRefined","modification","removeFacet","removeDisjunctiveFacet","removeHierarchicalFacet","removeFacetRefinement","removeExcludeRefinement","removeDisjunctiveFacetRefinement","removeTagRefinement","t","toggleFacetRefinement","toggleConjunctiveFacetRefinement","toggleDisjunctiveFacetRefinement","toggleExcludeFacetRefinement","separator","_getHierarchicalFacetSeparator","getHierarchicalFacetByName","lastIndexOf","addHierarchicalFacetRefinement","path","isHierarchicalFacetRefined","removeHierarchicalFacetRefinement","toggleTagRefinement","isFacetRefined","isExcludeRefined","isDisjunctiveFacetRefined","refinements","isOperatorDefined","array","searchedValue","isAttributeValueDefined","currentValue","getRefinedDisjunctiveFacets","disjunctiveNumericRefinedFacets","getRefinedHierarchicalFacets","sort","getUnrefinedDisjunctiveFacets","refinedFacets","managedParameters","getQueryParams","queryParams","setQueryParameter","parameter","nextWithNumbers","previousPlainObject","acc","nextPlainObject","previous","isPreviousValueDefined","isNextValueDefined","resetPage","_getHierarchicalFacetSortBy","sortBy","_getHierarchicalRootPath","_getHierarchicalShowParentLevel","showParentLevel","hierarchicalFacetName","getHierarchicalFacetBreadcrumb","refinement","split","part","trim","toString","JSON","stringify","hierarchicalFacetResult","hierarchicalFacetIndex","hierarchicalFacetRefinement","hierarchicalSeparator","hierarchicalRootPath","hierarchicalShowParentLevel","prepareHierarchicalFacetSortBy","rootExhaustive","facetResult","exhaustive","generateTreeFn","hierarchicalTree","currentHierarchicalLevel","parent","level","data","subtree","picked","facetValue","tuple","parentPath","onlyMatchingTree","orderBy","facetCount","parts","escapedValue","escapeFacetValue","count","format","unescapeFacetValue","generateHierarchicalTree","fv","compact","findIndex","formatSort","getIndices","attributes","indices","idx","assignFacetStats","dest","facetStats","stats","options","mainSubResponse","persistHierarchicalRootCount","processingTimeMS","sum","result","facetsIndices","disjunctiveFacetsIndices","nextDisjunctiveResult","mainFacets","facetKey","hierarchicalAttributeName","facetValueObject","facetIndex","idxAttributeName","exhaustiveFacetsCount","isFacetDisjunctive","isFacetConjunctive","facets_stats","disjunctiveFacet","dfacet","facetResults","attributeIndex","dataFromMainRequest","refinedFacet","defaultData","root","excludes","extractNormalizedFacetValues","predicate","isExcluded","hierarchicalFacetValues","replace","currentRefinementSplit","unshift","setIsRefined","item","depth","child","recSort","sortFn","node","names","children","childNode","sortedChildren","getFacetStatsIfAvailable","getRefinement","attributeName","resultsFacets","getFacetByName","DEFAULT_SORT","getFacetValues","facetValues","facetOrdering","renderingContent","getFacetOrdering","orderedFacets","remainingFacets","hide","reverseOrder","order","hidden","ordering","sortRemainingBy","sortViaFacetOrdering","vanillaSortFn","getFacetStats","getRefinements","res","facetDeclaration","rootFacet","intermediateFacet","newFacet","numericValue","requestBuilder","sortAndMergeRecommendations","addAlgoliaAgent","setClient","recommendState","_queryId","_recommendQueryId","_lastQueryIdReceived","_lastRecommendQueryIdReceived","derivedHelpers","_currentNbQueries","_currentNbRecommendQueries","_searchResultsOptions","_recommendCache","setCurrentPage","_change","isPageReset","getCurrentPage","search","_search","onlyWithDerivedHelpers","searchOnlyWithDerivedHelpers","recommend","_recommend","getQuery","_getHitsSearchParams","searchOnce","cb","tempState","queries","_getQueries","then","content","_originalResponse","e","catch","findAnswers","derivedHelper","Promise","resolve","derivedState","attributesForPrediction","nbHits","errorMessage","initIndex","queryLanguages","searchForFacetValues","maxFacetHits","userState","clientHasSFFV","clientHasInitIndex","isDisjunctive","algoliaQuery","getSearchForFacetQuery","searchForFacetValuesPromise","response","facetHits","q","addDisjunctiveRefine","addRefine","addFacetExclusion","addExclude","addTag","_recommendChange","removeDisjunctiveRefine","removeRefine","removeFacetExclusion","removeExclude","removeTag","removeFrequentlyBoughtTogether","removeRelatedProducts","removeTrendingItems","removeTrendingFacets","removeLookingSimilar","toggleFacetExclusion","toggleExclude","toggleRefine","toggleTag","nextPage","previousPage","setState","newState","overrideStateWithoutTriggeringChangeEvent","hasRefinements","isDisjunctiveRefined","hasTag","hasTagRefinements","getIndex","getPage","getTags","r","states","mainQueries","queriesCount","helper","derivedQueries","derivedStateQueries","queryId","_dispatchAlgoliaResponse","bind","_dispatchAlgoliaError","searchState","ids","derivedIndex","getRecommendations","_dispatchRecommendResponse","_dispatchRecommendError","s","specificResults","idsMap","firstResult","hits","containsRefinement","facetFilters","_hasDisjunctiveRefinements","disjunctiveRefinements","event","clearCache","newClient","getClient","derive","pos","hasPendingRequests","reduceRight","source","String","comparator","arr","defaults","defaultInstructions","out","sortInstruction","matchingDefault","defaultInstruction","ctor","superCtor","create","enumerable","writable","configurable","arr1","arr2","isObjectOrArrayOrFunction","_merge","target","hasOwnProperty","sourceVal","targetVal","l","obj","excluded","sourceKeys","compareAscending","other","valIsDefined","valIsNull","othIsDefined","othIsNull","collection","iteratees","orders","criteria","iteratee","object","sortObject","curr","_getDisjunctiveFacetSearchParams","filtersMap","segment","join","hasHierarchicalFacetFilter","some","filteredFacetFilters","facetFilter","filtered","filterValue","_getHitsHierarchicalFacetsAttributes","_getFacetFilters","_getNumericFilters","_getTagFilters","additionalParams","hierarchicalRootLevel","analytics","clickAnalytics","_getDisjunctiveHierarchicalFacetAttribute","vs","orFilters","attributeToRefine","attributesIndex","allAttributes","hierarchicalRefinement","newAttributes","rootLevel","parentLevel","stateForSearchForFacetValues","searchForFacetSearchParameters","facetQuery","test","flat","indexTracker","hit","objectID","indexSum","nrOfObjs","avgIndices","avgOfIndices","getAverageIndices","orderedHits","avgIndexRef","defineProperty","getOwnPropertySymbols","getOwnPropertyDescriptor","getOwnPropertyDescriptors","defineProperties","o","propertyIsEnumerable","Symbol","iterator","u","next","done","return","from","localStorage","window","parse","getItem","setItem","timeToLive","fromEntries","entries","timestamp","Date","getTime","get","miss","all","set","delete","clear","removeItem","caches","shift","serializable","c","headers","WithinHeaders","queryParameters","WithinQueryParameters","setTimeout","Math","min","d","wait","floor","random","h","p","encodeURIComponent","y","timeout","cacheable","Read","Write","Any","P","O","status","lastUpdate","now","w","protocol","url","accept","I","x","j","D","S","method","toLowerCase","userAgent","pop","message","transporterStackTrace","E","N","connectTimeout","timeouts","connect","responseTimeout","request","host","triesLeft","onSuccess","onRetry","isTimedOut","logger","info","A","hostsCache","onFail","requester","send","getTimeout","statelessHosts","reverse","requestsCache","responsesCache","hosts","read","mappedRequestOptions","transporter","reject","write","T","add","R","charAt","substr","C","U","z","J","F","H","M","B","batch","shouldStop","cursor","K","acl","tt","W","cluster","L","users","Q","clearExistingDictionaryEntries","requests","action","body","jt","taskID","G","operation","destination","ut","methods","waitTask","de","V","scope","he","Rules","_","Settings","X","Synonyms","Y","Z","$","et","rt","nt","at","ot","it","retrieveMappings","getClusters","appId","st","ct","ft","dt","lt","ht","pt","mt","yt","ue","gt","vt","bt","Pt","Ot","wt","It","xt","Dt","qt","St","se","_highlightResult","kt","ce","Tt","batchSize","taskIDs","objectIDs","Nt","Rt","forwardToReplicas","Et","At","Ct","Ut","zt","le","DeleteObject","Jt","Ft","Ht","Gt","Mt","Bt","paginate","ie","parseInt","nbPages","Kt","Wt","Lt","attributesToRetrieve","Qt","getVersion","Vt","_t","Xt","createIfNotExists","PartialUpdateObject","PartialUpdateObjectNoCreate","Yt","safe","autoGenerateObjectIDIfNotExist","substring","ee","Zt","ne","clearExistingRules","$t","oe","clearExistingSynonyms","te","AddObject","UpdateObject","re","ae","replaceExistingSynonyms","fe","DeleteIndex","ClearIndex","ge","ve","fallbackParameters","be","Pe","Oe","we","Ie","xe","apiKey","XMLHttpRequest","open","setRequestHeader","abort","onreadystatechange","readyState","OPENED","clearTimeout","onerror","responseText","onload","debug","region","getPersonalizationStrategy","setPersonalizationStrategy","authMode","multipleBatch","multipleGetObjects","multipleQueries","copyIndex","copySettings","copySynonyms","copyRules","moveIndex","listIndices","getLogs","listClusters","multipleSearchForFacetValues","getApiKey","addApiKey","listApiKeys","updateApiKey","deleteApiKey","restoreApiKey","assignUserID","assignUserIDs","getUserID","searchUserIDs","listUserIDs","getTopUserIDs","removeUserID","hasPendingMappings","clearDictionaryEntries","deleteDictionaryEntries","getDictionarySettings","getAppTask","replaceDictionaryEntries","saveDictionaryEntries","searchDictionaryEntries","setDictionarySettings","waitAppTask","customRequest","getObject","getObjects","saveObject","saveObjects","setSettings","getSettings","partialUpdateObject","partialUpdateObjects","deleteObject","deleteObjects","deleteBy","clearObjects","browseObjects","getObjectPosition","findObject","exists","saveSynonym","saveSynonyms","getSynonym","searchSynonyms","browseSynonyms","deleteSynonym","clearSynonyms","replaceAllObjects","replaceAllSynonyms","searchRules","getRule","deleteRule","saveRule","saveRules","replaceAllRules","browseRules","clearRules","initAnalytics","addABTest","getABTest","getABTests","stopABTest","deleteABTest","initPersonalization","initRecommendation","getFrequentlyBoughtTogether","getLookingSimilar","getRecommendedForYou","getRelatedProducts","getTrendingFacets","getTrendingItems","prop","qs","sep","eq","regexp","maxKeys","kstr","vstr","decodeURIComponent","stringifyPrimitive","isFinite","ks","decode","encode","extractAdditionalParams","events","getFunctionalInterface","DEFAULT_ALGOLIA_AGENTS","_ua","__rest","createUUID","COOKIE_KEY","MONTH","setAnonymousUserToken","setUserToken","navigator","cookieEnabled","supportsCookies","document","cookie","getCookie","setTime","toUTCString","setCookie","_cookieDuration","_userToken","_onUserTokenChangeCallback","getUserToken","onUserTokenChange","immediate","setAuthenticatedUserToken","_authenticatedUserToken","_onAuthenticatedUserTokenChangeCallback","getAuthenticatedUserToken","onAuthenticatedUserTokenChange","addEventType","eventType","addEventTypeAndSubtype","eventSubtype","clickedObjectIDsAfterSearch","sendEvents","clickedObjectIDs","clickedFilters","convertedObjectIDsAfterSearch","addedToCartObjectIDsAfterSearch","purchasedObjectIDsAfterSearch","convertedObjectIDs","addedToCartObjectIDs","purchasedObjectIDs","convertedFilters","SUPPORTED_REGIONS","init","cookieDuration","isNumber","partial","setOptions","_userHasOptedOut","userHasOptedOut","_region","_host","_anonymousUserToken","anonymousUserToken","_useCookie","useCookie","_endpointOrigin","authenticatedUserToken","viewedObjectIDs","viewedFilters","AlgoliaAnalytics","requestFn","_apiKey","_appId","filters","sendRequest","requestWithXMLHttpRequest","addEventListener","requestWithSendBeacon","sendBeacon","requestWithNativeFetch","fetch","getRequesterForBrowser","supportsSendBeacon","supportsXMLHttpRequest","supportsNativeFetch","entryBrowserCjs","AlgoliaAnalyticsObject","createInsightsClient","processQueue","queue","aa","default","env","getEnv","validateEnv","atob","Buffer","encoded","btoa","str","URLSearchParams","productShorthands","confluence","jira","stride","bitbucket","trello","originParamName","originVersioningAttributes","originLibrary","OriginTracer","generateId","product","dangerouslySkipValidation","static","EmptyOriginTracer","MalformedOriginTracer","replaceQuery","queryString","fromEncoded","createEmpty","createMalformed","encodedOrigin","originData","encodedOriginString","base64","base64url","padLength","base64UrlToBase64","json","originJSONObject","maybeShorthand","products","expandProductShorthand","fromJSONObject","toJSONObject","addToUrl","originalQueryString","isEmpty","isMalformed","isValid","toAnalyticsAttributes","transformValue","hasGeneratedId","originProduct","isValidId","isValidProduct","super","originMalformed","replacer","wholeMatch","beforeQuery","afterQuery","newQueryString","BasePaths","_classCallCheck","_defineProperty","Environment","localizedPrefix","getLocalizedPrefix","languagePrefix","location","hostname","base","production","wrapForI18n","staging","stgConfig","dev","skipEncoding","continueParam","getReturnUrl","idBasePath","idLogoutUrl","idLoginUrl","macBasePath","href","hamletApi","HamletApi","baseDomain","getBaseDomain","useCofsPath","basePath","getCofsPath","getHamletPath","_objectSpread","cacheBuster","authenticated","hamletUser","withCredentials","axios","startsWith","getBxpPath","hamletRequest","ProductKeys","CONFLUENCE","JIRA_CORE","JIRA_BUSINESS","JIRA_SOFTWARE","JIRA_SERVICE_DESK","JIRA_SERVICE_MANAGEMENT","JIRA_WORK_MANAGEMENT","JIRA_PRODUCT_DISCOVERY","BITBUCKET","OPSGENIE","STATUSPAGE","TRELLO","ROVO","COMPASS","LOOM","GUARD","HamletUser","cached","token","initialized","user","contactDetails","firstName","lastName","email","organisationDetails","address1","address2","city","postcode","isoCountryCode","organisationName","organisationType","payOnAccount","taxId","lassoDetails","username","displayName","myDetails","aaid","avatar","isLoggedIn","sites","performanceBoostExperiment","enableAisAvailableProducts","_this","retrieveXsrfToken","getStargateProfile","_this2","setToken","debugAllSites","_this3","retrieveMe","retrieveSitesData","_ref","_ref2","identityData","sitesData","setSites","_this4","meData","stargateData","account_id","picture","getFirstName","getLastName","_this5","retrieveAvailableProductsData","availableProductsSites","site","_site$products","adminAccess","availableProducts","availableProduct","productType","cloudId","avatarUrl","transformAvailableProductsIntoAvailableSites","_this6","availableProductsData","sitesResult","isValidSite","migrationSourceUuid","productKey","cloudIds","_this7","setExtendedTrialAvailability","extendedTrialAvailability","groupSitesByProduct","isVertigo","icon","login_logo_url","toUpperCase","match","_regeneratorRuntime","Op","hasOwn","desc","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","makeInvokeMethod","tryCatch","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","Gp","defineIteratorMethods","_invoke","AsyncIterator","PromiseImpl","invoke","record","_typeof","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","methodName","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","doneResult","isGeneratorFunction","genFun","mark","setPrototypeOf","__proto__","awrap","async","iter","skipTempReset","prev","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","_defineProperties","props","descriptor","_toPropertyKey","input","hint","prim","toPrimitive","_toPrimitive","ALGOLIA_APP_ID","ALGOLIA_SEARCH_API_KEY","ALGOLIA_SEARCH_INDEX_NAME","algoliaSearchClient","algoliasearch","locale","insights","graphqlUrl","ADG4GlobalNav","domRoot","Constructor","_callee","navExpControls","navExpVariables","_context","imkt","querySelectorAll","nav","classList","remove","resizeMenus","_callee4","_this$cTADropdown","_this$cTADropdown2","_this$cTADropdown3","_this$defaultCtaDeskt","_this$cTADropdown4","_context4","isShowCTADropdown","cTADropdown","_callee2","_context2","closeEverything","contains","onCloseDisplayDropdownPanelContent","isHovered","isGupsCalled","onRenderCTADropdownDisplayContent","onDisplayDropdownPanelContent","trackEvent","eventComponent","component","actionSubjectId","_callee3","_context3","click","ace","GASv3","sendTrackEvent","eventContainer","group","defaultCtaDesktopButton","_callee5","_productDisplayMetaDa","productDisplayHirachy","productDisplayMetaDataMap","getFilteredHirachyList","userOwnedProducts","additionalDisplayNeeded","additionalProducts","_context5","jiraProductMetaData","jiraServiceManagementProductMetaData","confluenceProductMetaData","jiraProductDiscoveryMetaData","compassProductMetaData","userInfo","getUserProductsViaGUPS","t0","getUserProductsViaGupsWithAnonymousId","hirachyItem","includes","t1","cTADropdownHoverContent","querySelector","setAttribute","imgSource","innerHTML","heading","subText","dropdownContentLoader","dropdownPanelContent","_callee6","_storage$getCookie","productDisplayHirachyByNameMap","cleanAnonymousId","queryWithAnonymousId","responseJson","userFootprints","mappedUserFootPrints","_context6","storage","onGraphqlApiRequest","ok","growthUnifiedProfile_getUnifiedProfile","_ref7","_callee7","userAaid","siteProductList","ownedProductList","_context7","flatMap","_x","navType","scrollPositioning","_toConsumableArray","DropdownNavLinks","dropdownNavLink","documentElement","clientWidth","_this$AccountAvatar","unFocusNavs","AccountAvatar","navDropdownContent","navDropdownContentSizer","outlineElementSizer","NavLinkButtons","navLinkButton","tabId","navLinkId","dataset","navlinkid","tabid","matchingTab","tab","DropdownContents","dropdownContent","parentNode","toggle","_this$AccountAvatar2","buttonLi","finder","getAttribute","getElementById","focus","focusVisible","TabButtons","tabButton","tabsParent","closest","tabsParentInner","thisTabID","multiTabContents","tabContent","ButtonMenuMore","ButtonMenuLess","CloseAll","MobileToggle","_this$AccountAvatar3","hideClickableOverlay","showClickableOverlay","MobileBackButtons","mobileBackButton","_this$SearchForm","SearchForm","SearchOpen","SearchClose","closeSearch","searchHelper","_ref8","SearchHits","SearchQuery","QueryId","queryID","SearchInput","populateSearchResults","SearchInputSVG","searchInput","_this$AccountAvatar4","hasWrapped","firstWrapped","GenericNavLinks","navLink","offsetTop","nextElementSibling","WindowWidth","WrappedElementIndex","scrollY","comparisonElement","comparisonParent","OutlineElement","style","width","offsetWidth","height","offsetHeight","left","offsetLeft","OverlayClickable","OverlayColor","otherDropdownLink","SearchResultsContainer","_this$AccountAvatar5","_this$AccountAvatar6","newEl","createElement","label","onclick","clicker","className","classes","_document$querySelect","_this$AccountAvatar8","_this$AccountAvatar9","userProfileMenu","createEl","labels","onSwitchAccountClick","onManageProfileClick","onManageLicensesClick","onLogOutClick","btn","appendChild","userButton","_this$AccountAvatar7","hideUserMenu","showUserMenu","_this$AccountAvatar10","_this$AccountAvatar11","handelOffElementDropdownClickEvent","handelOffElementDropdownEscKeyEvent","loginInButton","onLogInClick","AccountSignIn","searchArray","filteredSearchArray","ulResults","resultsFragment","createDocumentFragment","hitLi","hitA","tracking","objectId","eventName","positions","Number","sendClickEvent","searchHitTitle","title","lowCaseSearch","lowCaseTitle","splitter","RegExp","_ref10","split1","split2","displayTitle","additionalTracking","defaultTrackProperties","origin","baseUrl","stargateBaseUrl","continueUrl","loginUrl","startUrl","isLoading","basePaths","OriginTracing","ctaLabel","AccountInfo","NavContainingElement","MenuMore","MenuLess","algoliasearchhelper","jiraProduct","jiraServiceManagementProduct","confluenceProduct","jiraProductDiscovery","compassProduct","protoProps","_getAvailableProductsAndUserLoggedInStatus","_getUser","_onGraphqlApiRequest","_init","_callee8","_context8","bindEvents","getUser","populateLoggedInUser","populateLoggedOutUser","addAvatarOutsideClickEventListener","onDisplayDropdownButton","featureGateJiraSolutionsNavbar","_callee9","_context9","credentials","_x2","linkName","properties","originUrl","linkText","_callee10","isDebugMode","_context10","_callee11","_context11","nodeType","freeGlobal","global","punycode","maxInt","tMax","skew","damp","regexPunycode","regexNonASCII","regexSeparators","errors","baseMinusTMin","stringFromCharCode","fromCharCode","RangeError","mapDomain","string","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","basic","oldi","baseMinusT","codePoint","inputLength","bias","handledCPCount","basicLength","handledCPCountPlusOne","qMinusT","util","Url","slashes","auth","port","hash","pathname","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","unsafeProtocol","hostlessProtocol","slashedProtocol","querystring","parseQueryString","slashesDenoteHost","isString","queryIndex","uSplit","rest","simplePath","exec","proto","lowerProto","atSign","hostEnd","hec","parseHost","ipv6Hostname","hostparts","newpart","validParts","notHost","bit","toASCII","esc","escape","qm","relative","resolveObject","urlParse","rel","tkeys","tk","tkey","rkeys","rk","rkey","relPath","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","isNullOrUndefined","authInHost","isNull","last","hasTrailingSlash","up","isAbsolute","byteToHex","buf","offset","bth","getRandomValues","crypto","msCrypto","rnds8","Uint8Array","rnds","rng","bytesToUuid","ii"],"sourceRoot":""}